@burdenoff/microfe-botmanor 2026.1108.1 → 2026.1109.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/botlit/BotlitRoutes.d.ts +2 -0
- package/dist/botlit/BotlitRoutes.js +40 -52
- package/dist/botlit/BotlitRoutes.js.map +1 -1
- package/dist/botlit/BotmanorRoot.d.ts +3 -0
- package/dist/botlit/BotmanorRoot.js +1 -2
- package/dist/botlit/BotmanorRoot.js.map +1 -1
- package/dist/botlit/BotmanorRootInner.d.ts +3 -0
- package/dist/botlit/BotmanorRootInner.js +9 -10
- package/dist/botlit/BotmanorRootInner.js.map +1 -1
- package/dist/botlit/components/AgentApprovalPanel.d.ts +20 -0
- package/dist/botlit/components/AgentApprovalPanel.js +49 -50
- package/dist/botlit/components/AgentApprovalPanel.js.map +1 -1
- package/dist/botlit/components/AiOperationsPanel.d.ts +14 -0
- package/dist/botlit/components/AiOperationsPanel.js +54 -55
- package/dist/botlit/components/AiOperationsPanel.js.map +1 -1
- package/dist/botlit/components/AssistantChannelPanel.d.ts +3 -0
- package/dist/botlit/components/AssistantChannelPanel.js +12 -13
- package/dist/botlit/components/AssistantChannelPanel.js.map +1 -1
- package/dist/botlit/components/AssistantRuntimeSetupPanel.d.ts +4 -0
- package/dist/botlit/components/AssistantRuntimeSetupPanel.js +14 -14
- package/dist/botlit/components/AssistantRuntimeSetupPanel.js.map +1 -1
- package/dist/botlit/components/AssistantWebsitePanel.d.ts +5 -0
- package/dist/botlit/components/AssistantWebsitePanel.js +15 -16
- package/dist/botlit/components/AssistantWebsitePanel.js.map +1 -1
- package/dist/botlit/components/Badge.d.ts +9 -0
- package/dist/botlit/components/Badge.js +1 -2
- package/dist/botlit/components/Badge.js.map +1 -1
- package/dist/botlit/components/Button.d.ts +10 -0
- package/dist/botlit/components/Button.js +1 -2
- package/dist/botlit/components/Button.js.map +1 -1
- package/dist/botlit/components/Card.d.ts +16 -0
- package/dist/botlit/components/Card.js +1 -2
- package/dist/botlit/components/Card.js.map +1 -1
- package/dist/botlit/components/ChannelSelectorSheet.d.ts +23 -0
- package/dist/botlit/components/ChannelSelectorSheet.js +1 -2
- package/dist/botlit/components/ChannelSelectorSheet.js.map +1 -1
- package/dist/botlit/components/EmptyState.d.ts +12 -0
- package/dist/botlit/components/EmptyState.js +1 -2
- package/dist/botlit/components/EmptyState.js.map +1 -1
- package/dist/botlit/components/ErrorState.d.ts +10 -0
- package/dist/botlit/components/ErrorState.js +5 -6
- package/dist/botlit/components/ErrorState.js.map +1 -1
- package/dist/botlit/components/Input.d.ts +27 -0
- package/dist/botlit/components/Input.js +1 -2
- package/dist/botlit/components/Input.js.map +1 -1
- package/dist/botlit/components/KnowledgeSourceImportPanel.d.ts +3 -0
- package/dist/botlit/components/KnowledgeSourceImportPanel.js +12 -13
- package/dist/botlit/components/KnowledgeSourceImportPanel.js.map +1 -1
- package/dist/botlit/components/ModelRegistrationPanel.d.ts +5 -0
- package/dist/botlit/components/ModelRegistrationPanel.js +1 -2
- package/dist/botlit/components/ModelRegistrationPanel.js.map +1 -1
- package/dist/botlit/components/PageLayout.d.ts +12 -0
- package/dist/botlit/components/PageLayout.js +1 -2
- package/dist/botlit/components/PageLayout.js.map +1 -1
- package/dist/botlit/components/QuotaExhaustedDialog.d.ts +9 -0
- package/dist/botlit/components/QuotaExhaustedDialog.js +1 -2
- package/dist/botlit/components/QuotaExhaustedDialog.js.map +1 -1
- package/dist/botlit/components/RetentionStatusPanel.d.ts +2 -0
- package/dist/botlit/components/RetentionStatusPanel.js +18 -19
- package/dist/botlit/components/RetentionStatusPanel.js.map +1 -1
- package/dist/botlit/components/RouteLoader.d.ts +23 -0
- package/dist/botlit/components/RouteLoader.js +1 -2
- package/dist/botlit/components/RouteLoader.js.map +1 -1
- package/dist/botlit/components/VersionHistoryPanel.d.ts +12 -0
- package/dist/botlit/components/VersionHistoryPanel.js +23 -24
- package/dist/botlit/components/VersionHistoryPanel.js.map +1 -1
- package/dist/botlit/components/WorkspaceRequired.d.ts +18 -0
- package/dist/botlit/components/WorkspaceRequired.js +1 -2
- package/dist/botlit/components/WorkspaceRequired.js.map +1 -1
- package/dist/botlit/components/index.d.ts +14 -0
- package/dist/botlit/hooks/index.d.ts +35 -0
- package/dist/botlit/hooks/index.js +16 -16
- package/dist/botlit/hooks/internal/mutationInput.d.ts +56 -0
- package/dist/botlit/hooks/internal/mutationInput.js +1 -2
- package/dist/botlit/hooks/internal/mutationInput.js.map +1 -1
- package/dist/botlit/hooks/internal/workspaceGateway.d.ts +54 -0
- package/dist/botlit/hooks/internal/workspaceGateway.js +17 -19
- package/dist/botlit/hooks/internal/workspaceGateway.js.map +1 -1
- package/dist/botlit/hooks/useA2A.d.ts +104 -0
- package/dist/botlit/hooks/useA2A.js +45 -45
- package/dist/botlit/hooks/useA2A.js.map +1 -1
- package/dist/botlit/hooks/useAgentApprovals.d.ts +62 -0
- package/dist/botlit/hooks/useAgentApprovals.js +38 -39
- package/dist/botlit/hooks/useAgentApprovals.js.map +1 -1
- package/dist/botlit/hooks/useAgents.d.ts +105 -0
- package/dist/botlit/hooks/useAgents.js +53 -54
- package/dist/botlit/hooks/useAgents.js.map +1 -1
- package/dist/botlit/hooks/useAiOperations.d.ts +95 -0
- package/dist/botlit/hooks/useAiOperations.js +20 -19
- package/dist/botlit/hooks/useAiOperations.js.map +1 -1
- package/dist/botlit/hooks/useAssistantChannels.d.ts +16 -0
- package/dist/botlit/hooks/useAssistantChannels.js +1 -2
- package/dist/botlit/hooks/useAssistantChannels.js.map +1 -1
- package/dist/botlit/hooks/useAssistantRuntimeSetup.d.ts +17 -0
- package/dist/botlit/hooks/useAssistantRuntimeSetup.js +1 -2
- package/dist/botlit/hooks/useAssistantRuntimeSetup.js.map +1 -1
- package/dist/botlit/hooks/useAssistantWebsites.d.ts +18 -0
- package/dist/botlit/hooks/useAssistantWebsites.js +1 -2
- package/dist/botlit/hooks/useAssistantWebsites.js.map +1 -1
- package/dist/botlit/hooks/useBotWorkflow.d.ts +22 -0
- package/dist/botlit/hooks/useBotWorkflow.js +1 -2
- package/dist/botlit/hooks/useBotWorkflow.js.map +1 -1
- package/dist/botlit/hooks/useBots.d.ts +68 -0
- package/dist/botlit/hooks/useBots.js +32 -33
- package/dist/botlit/hooks/useBots.js.map +1 -1
- package/dist/botlit/hooks/useBuckets.d.ts +62 -0
- package/dist/botlit/hooks/useBuckets.js +91 -58
- package/dist/botlit/hooks/useBuckets.js.map +1 -1
- package/dist/botlit/hooks/useChannels.d.ts +87 -0
- package/dist/botlit/hooks/useChannels.js +73 -73
- package/dist/botlit/hooks/useChannels.js.map +1 -1
- package/dist/botlit/hooks/useExecutions.d.ts +87 -0
- package/dist/botlit/hooks/useExecutions.js +37 -37
- package/dist/botlit/hooks/useExecutions.js.map +1 -1
- package/dist/botlit/hooks/useKnowledgeBases.d.ts +79 -0
- package/dist/botlit/hooks/useKnowledgeBases.js +40 -39
- package/dist/botlit/hooks/useKnowledgeBases.js.map +1 -1
- package/dist/botlit/hooks/useKnowledgeSourceImports.d.ts +21 -0
- package/dist/botlit/hooks/useKnowledgeSourceImports.js +1 -2
- package/dist/botlit/hooks/useKnowledgeSourceImports.js.map +1 -1
- package/dist/botlit/hooks/useLLMProviders.d.ts +66 -0
- package/dist/botlit/hooks/useLLMProviders.js +25 -26
- package/dist/botlit/hooks/useLLMProviders.js.map +1 -1
- package/dist/botlit/hooks/useMCPServers.d.ts +71 -0
- package/dist/botlit/hooks/useMCPServers.js +40 -38
- package/dist/botlit/hooks/useMCPServers.js.map +1 -1
- package/dist/botlit/hooks/usePolicies.d.ts +60 -0
- package/dist/botlit/hooks/usePolicies.js +49 -49
- package/dist/botlit/hooks/usePolicies.js.map +1 -1
- package/dist/botlit/hooks/usePromptTemplates.d.ts +88 -0
- package/dist/botlit/hooks/usePromptTemplates.js +57 -57
- package/dist/botlit/hooks/usePromptTemplates.js.map +1 -1
- package/dist/botlit/hooks/useRetention.d.ts +26 -0
- package/dist/botlit/hooks/useRetention.js +3 -3
- package/dist/botlit/hooks/useRetention.js.map +1 -1
- package/dist/botlit/hooks/useRetrievalProfiles.d.ts +75 -0
- package/dist/botlit/hooks/useRetrievalProfiles.js +47 -47
- package/dist/botlit/hooks/useRetrievalProfiles.js.map +1 -1
- package/dist/botlit/hooks/useSkills.d.ts +64 -0
- package/dist/botlit/hooks/useSkills.js +53 -53
- package/dist/botlit/hooks/useSkills.js.map +1 -1
- package/dist/botlit/hooks/useStore.d.ts +112 -0
- package/dist/botlit/hooks/useStore.js +55 -55
- package/dist/botlit/hooks/useStore.js.map +1 -1
- package/dist/botlit/hooks/useUserPlatformConnection.d.ts +80 -0
- package/dist/botlit/hooks/useUserPlatformConnection.js +19 -19
- package/dist/botlit/hooks/useUserPlatformConnection.js.map +1 -1
- package/dist/botlit/index.d.ts +15 -0
- package/dist/botlit/index.js +11 -11
- package/dist/botlit/pages/A2AAgentDetailPage.d.ts +6 -0
- package/dist/botlit/pages/A2AAgentDetailPage.js +171 -178
- package/dist/botlit/pages/A2AAgentDetailPage.js.map +1 -1
- package/dist/botlit/pages/A2ARegistryPage.d.ts +2 -0
- package/dist/botlit/pages/A2ARegistryPage.js +25 -26
- package/dist/botlit/pages/A2ARegistryPage.js.map +1 -1
- package/dist/botlit/pages/AgentApprovalsPage.d.ts +2 -0
- package/dist/botlit/pages/AgentApprovalsPage.js +32 -33
- package/dist/botlit/pages/AgentApprovalsPage.js.map +1 -1
- package/dist/botlit/pages/AgentBuilderPage.d.ts +2 -0
- package/dist/botlit/pages/AgentBuilderPage.js +59 -60
- package/dist/botlit/pages/AgentBuilderPage.js.map +1 -1
- package/dist/botlit/pages/AgentDetailPage.d.ts +2 -0
- package/dist/botlit/pages/AgentDetailPage.js +83 -84
- package/dist/botlit/pages/AgentDetailPage.js.map +1 -1
- package/dist/botlit/pages/AgentsListPage.d.ts +2 -0
- package/dist/botlit/pages/AgentsListPage.js +71 -72
- package/dist/botlit/pages/AgentsListPage.js.map +1 -1
- package/dist/botlit/pages/AiOperationsPage.d.ts +2 -0
- package/dist/botlit/pages/AiOperationsPage.js +52 -53
- package/dist/botlit/pages/AiOperationsPage.js.map +1 -1
- package/dist/botlit/pages/BotChannelsTab.d.ts +7 -0
- package/dist/botlit/pages/BotChannelsTab.js +120 -122
- package/dist/botlit/pages/BotChannelsTab.js.map +1 -1
- package/dist/botlit/pages/BotDetailPage.d.ts +7 -0
- package/dist/botlit/pages/BotDetailPage.js +353 -358
- package/dist/botlit/pages/BotDetailPage.js.map +1 -1
- package/dist/botlit/pages/BotWorkflowTab.d.ts +11 -0
- package/dist/botlit/pages/BotWorkflowTab.js +20 -21
- package/dist/botlit/pages/BotWorkflowTab.js.map +1 -1
- package/dist/botlit/pages/BotsListPage.d.ts +2 -0
- package/dist/botlit/pages/BotsListPage.js +52 -53
- package/dist/botlit/pages/BotsListPage.js.map +1 -1
- package/dist/botlit/pages/BucketDetailPage.d.ts +2 -0
- package/dist/botlit/pages/BucketDetailPage.js +251 -0
- package/dist/botlit/pages/BucketDetailPage.js.map +1 -0
- package/dist/botlit/pages/BucketsPage.d.ts +2 -0
- package/dist/botlit/pages/BucketsPage.js +260 -261
- package/dist/botlit/pages/BucketsPage.js.map +1 -1
- package/dist/botlit/pages/ChannelDetailPage.d.ts +6 -0
- package/dist/botlit/pages/ChannelDetailPage.js +97 -96
- package/dist/botlit/pages/ChannelDetailPage.js.map +1 -1
- package/dist/botlit/pages/ChannelRoutesPage.d.ts +2 -0
- package/dist/botlit/pages/ChannelRoutesPage.js +23 -24
- package/dist/botlit/pages/ChannelRoutesPage.js.map +1 -1
- package/dist/botlit/pages/ChannelsPage.d.ts +2 -0
- package/dist/botlit/pages/ChannelsPage.js +44 -45
- package/dist/botlit/pages/ChannelsPage.js.map +1 -1
- package/dist/botlit/pages/ChatPage.d.ts +1 -0
- package/dist/botlit/pages/ChatPage.js +10 -11
- package/dist/botlit/pages/ChatPage.js.map +1 -1
- package/dist/botlit/pages/DashboardPage.d.ts +2 -0
- package/dist/botlit/pages/DashboardPage.js +37 -38
- package/dist/botlit/pages/DashboardPage.js.map +1 -1
- package/dist/botlit/pages/ExecutionDetailPage.d.ts +2 -0
- package/dist/botlit/pages/ExecutionDetailPage.js +47 -48
- package/dist/botlit/pages/ExecutionDetailPage.js.map +1 -1
- package/dist/botlit/pages/ExecutionsPage.d.ts +2 -0
- package/dist/botlit/pages/ExecutionsPage.js +72 -70
- package/dist/botlit/pages/ExecutionsPage.js.map +1 -1
- package/dist/botlit/pages/InstalledPackagesPage.d.ts +2 -0
- package/dist/botlit/pages/InstalledPackagesPage.js +77 -78
- package/dist/botlit/pages/InstalledPackagesPage.js.map +1 -1
- package/dist/botlit/pages/KnowledgeBaseDetailPage.d.ts +6 -0
- package/dist/botlit/pages/KnowledgeBaseDetailPage.js +171 -181
- package/dist/botlit/pages/KnowledgeBaseDetailPage.js.map +1 -1
- package/dist/botlit/pages/KnowledgeBasesPage.d.ts +2 -0
- package/dist/botlit/pages/KnowledgeBasesPage.js +30 -31
- package/dist/botlit/pages/KnowledgeBasesPage.js.map +1 -1
- package/dist/botlit/pages/MCPServerDetailPage.d.ts +6 -0
- package/dist/botlit/pages/MCPServerDetailPage.js +82 -83
- package/dist/botlit/pages/MCPServerDetailPage.js.map +1 -1
- package/dist/botlit/pages/MCPServersPage.d.ts +2 -0
- package/dist/botlit/pages/MCPServersPage.js +54 -55
- package/dist/botlit/pages/MCPServersPage.js.map +1 -1
- package/dist/botlit/pages/PoliciesPage.d.ts +2 -0
- package/dist/botlit/pages/PoliciesPage.js +25 -26
- package/dist/botlit/pages/PoliciesPage.js.map +1 -1
- package/dist/botlit/pages/PolicyDetailPage.d.ts +6 -0
- package/dist/botlit/pages/PolicyDetailPage.js +257 -259
- package/dist/botlit/pages/PolicyDetailPage.js.map +1 -1
- package/dist/botlit/pages/PromptStudioPage.d.ts +2 -0
- package/dist/botlit/pages/PromptStudioPage.js +35 -35
- package/dist/botlit/pages/PromptStudioPage.js.map +1 -1
- package/dist/botlit/pages/PromptTemplateDetailPage.d.ts +6 -0
- package/dist/botlit/pages/PromptTemplateDetailPage.js +363 -362
- package/dist/botlit/pages/PromptTemplateDetailPage.js.map +1 -1
- package/dist/botlit/pages/PromptTemplatesPage.d.ts +2 -0
- package/dist/botlit/pages/PromptTemplatesPage.js +26 -27
- package/dist/botlit/pages/PromptTemplatesPage.js.map +1 -1
- package/dist/botlit/pages/RetrievalProfileDetailPage.d.ts +6 -0
- package/dist/botlit/pages/RetrievalProfileDetailPage.js +150 -158
- package/dist/botlit/pages/RetrievalProfileDetailPage.js.map +1 -1
- package/dist/botlit/pages/RetrievalProfilesPage.d.ts +2 -0
- package/dist/botlit/pages/RetrievalProfilesPage.js +24 -25
- package/dist/botlit/pages/RetrievalProfilesPage.js.map +1 -1
- package/dist/botlit/pages/SettingsPage.d.ts +2 -0
- package/dist/botlit/pages/SettingsPage.js +124 -125
- package/dist/botlit/pages/SettingsPage.js.map +1 -1
- package/dist/botlit/pages/SkillDetailPage.d.ts +6 -0
- package/dist/botlit/pages/SkillDetailPage.js +216 -217
- package/dist/botlit/pages/SkillDetailPage.js.map +1 -1
- package/dist/botlit/pages/SkillsPage.d.ts +2 -0
- package/dist/botlit/pages/SkillsPage.js +24 -25
- package/dist/botlit/pages/SkillsPage.js.map +1 -1
- package/dist/botlit/pages/StorePackageDetailPage.d.ts +2 -0
- package/dist/botlit/pages/StorePackageDetailPage.js +38 -39
- package/dist/botlit/pages/StorePackageDetailPage.js.map +1 -1
- package/dist/botlit/pages/StorePage.d.ts +2 -0
- package/dist/botlit/pages/StorePage.js +135 -136
- package/dist/botlit/pages/StorePage.js.map +1 -1
- package/dist/botlit/pages/index.d.ts +38 -0
- package/dist/botlit/permissions/PermissionRequired.d.ts +20 -0
- package/dist/botlit/permissions/PermissionRequired.js +10 -11
- package/dist/botlit/permissions/PermissionRequired.js.map +1 -1
- package/dist/botlit/permissions/botmanorPermissions.d.ts +82 -0
- package/dist/botlit/permissions/botmanorPermissions.js +1 -2
- package/dist/botlit/permissions/botmanorPermissions.js.map +1 -1
- package/dist/botlit/permissions/index.d.ts +7 -0
- package/dist/botlit/permissions/index.js +4 -3
- package/dist/botlit/permissions/useBotmanorPermissions.d.ts +41 -0
- package/dist/botlit/permissions/useBotmanorPermissions.js +1 -2
- package/dist/botlit/permissions/useBotmanorPermissions.js.map +1 -1
- package/dist/botlit/providers/BotlitProvider.d.ts +14 -0
- package/dist/botlit/providers/BotlitProvider.js +3 -3
- package/dist/botlit/providers/BotlitProvider.js.map +1 -1
- package/dist/botlit/store/botlitStore.d.ts +85 -0
- package/dist/botlit/store/botlitStore.js +1 -2
- package/dist/botlit/store/botlitStore.js.map +1 -1
- package/dist/botlit/store/renamedKeyStorage.d.ts +13 -0
- package/dist/botlit/store/renamedKeyStorage.js +1 -2
- package/dist/botlit/store/renamedKeyStorage.js.map +1 -1
- package/dist/botlit/types/index.d.ts +1008 -0
- package/dist/botlit/utils/cn.d.ts +2 -0
- package/dist/botlit/utils/cn.js +1 -2
- package/dist/botlit/utils/cn.js.map +1 -1
- package/dist/botlit/utils/embedding-models.d.ts +9 -0
- package/dist/botlit/utils/embedding-models.js +1 -2
- package/dist/botlit/utils/embedding-models.js.map +1 -1
- package/dist/botlit/utils/errors.d.ts +19 -0
- package/dist/botlit/utils/errors.js +1 -2
- package/dist/botlit/utils/errors.js.map +1 -1
- package/dist/botlit/utils/formatters.d.ts +38 -0
- package/dist/botlit/utils/formatters.js +0 -1
- package/dist/botlit/utils/formatters.js.map +1 -1
- package/dist/botlit/utils/navigation.d.ts +19 -0
- package/dist/botlit/utils/navigation.js +1 -2
- package/dist/botlit/utils/navigation.js.map +1 -1
- package/dist/botlit/utils/policyConfig.d.ts +68 -0
- package/dist/botlit/utils/policyConfig.js +2 -3
- package/dist/botlit/utils/policyConfig.js.map +1 -1
- package/dist/botlit/utils/unions.d.ts +25 -0
- package/dist/botlit/utils/unions.js +1 -2
- package/dist/botlit/utils/unions.js.map +1 -1
- package/dist/dev/App.d.ts +2 -0
- package/dist/dev/main.d.ts +0 -0
- package/dist/generated/global-operations.d.ts +197 -0
- package/dist/generated/global-operations.js +1 -2
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/global-types.d.ts +27678 -0
- package/dist/generated/global-types.js +1 -2
- package/dist/generated/global-types.js.map +1 -1
- package/dist/generated/wspace-operations.d.ts +5489 -0
- package/dist/generated/wspace-operations.js +88 -84
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +152017 -0
- package/dist/generated/wspace-types.js +1 -2
- package/dist/generated/wspace-types.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -6
- package/dist/shared/hooks/useTr.d.ts +16 -0
- package/dist/shared/hooks/useTr.js +1 -2
- package/dist/shared/hooks/useTr.js.map +1 -1
- package/dist/stories/Badge.stories.d.ts +11 -0
- package/dist/stories/Button.stories.d.ts +13 -0
- package/dist/stories/EmptyState.stories.d.ts +8 -0
- package/dist/stories/StatusBadge.stories.d.ts +9 -0
- package/dist/test/fixtures.d.ts +39 -0
- package/dist/test/happydom.d.ts +1 -0
- package/dist/test/renderPage.d.ts +18 -0
- package/dist/test/setup.d.ts +9 -0
- package/dist/utils/nativeBridge.d.ts +2 -0
- package/dist/utils/nativeBridge.js +1 -2
- package/package.json +87 -60
- package/dist/botlit/hooks/useConversations.js +0 -64
- package/dist/botlit/hooks/useConversations.js.map +0 -1
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { Button as
|
|
6
|
-
import {
|
|
7
|
-
import { Badge as
|
|
8
|
-
import { EmptyState as
|
|
9
|
-
import {
|
|
10
|
-
import { ErrorState as p } from "../components/ErrorState.js";
|
|
11
|
-
import { summariseExecutions as m, useExecutions as h } from "../hooks/useExecutions.js";
|
|
1
|
+
import { useBotlit as e } from "../providers/BotlitProvider.js";
|
|
2
|
+
import { useTr as t } from "../../shared/hooks/useTr.js";
|
|
3
|
+
import { PageLayout as n } from "../components/PageLayout.js";
|
|
4
|
+
import { Card as r, CardContent as i } from "../components/Card.js";
|
|
5
|
+
import { Button as a } from "../components/Button.js";
|
|
6
|
+
import { Input as o } from "../components/Input.js";
|
|
7
|
+
import { Badge as s } from "../components/Badge.js";
|
|
8
|
+
import { EmptyState as c } from "../components/EmptyState.js";
|
|
9
|
+
import { ErrorState as l } from "../components/ErrorState.js";
|
|
12
10
|
import "../hooks/index.js";
|
|
11
|
+
import { summariseExecutions as u, useExecutions as d } from "../hooks/useExecutions.js";
|
|
12
|
+
import { formatCurrency as f, formatDuration as p, formatNumber as m, formatRelativeTime as h } from "../utils/formatters.js";
|
|
13
13
|
import { ExecutionStatus as g } from "../../generated/wspace-types.js";
|
|
14
14
|
import { useMemo as _, useState as v } from "react";
|
|
15
15
|
import { PagePurpose as y } from "@burdenoff/fe-libs/ui";
|
|
16
16
|
import { jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
17
17
|
import { Link as S } from "react-router";
|
|
18
18
|
import { Activity as C, CheckCircle as w, Clock as T, DollarSign as E, Hourglass as D, RefreshCw as O, Search as k, TrendingUp as A, XCircle as j, Zap as M } from "lucide-react";
|
|
19
|
-
|
|
19
|
+
// src/botlit/pages/ExecutionsPage.tsx
|
|
20
20
|
var N = [
|
|
21
21
|
g.Completed,
|
|
22
22
|
g.Running,
|
|
@@ -44,104 +44,107 @@ var F = ({ status: e, className: t }) => {
|
|
|
44
44
|
case g.Pending: return /* @__PURE__ */ b(D, { className: t ?? "h-4 w-4 text-status-warning-text" });
|
|
45
45
|
default: return /* @__PURE__ */ b(C, { className: t ?? "h-4 w-4 text-text-secondary" });
|
|
46
46
|
}
|
|
47
|
-
}, I = ({ status: e, labels: t }) =>
|
|
48
|
-
|
|
47
|
+
}, I = ({ status: e, labels: t }) => {
|
|
48
|
+
let n = {
|
|
49
49
|
[g.Completed]: "success",
|
|
50
50
|
[g.Failed]: "destructive",
|
|
51
51
|
[g.Timeout]: "destructive",
|
|
52
52
|
[g.Running]: "default",
|
|
53
53
|
[g.Pending]: "warning",
|
|
54
54
|
[g.Cancelled]: "secondary"
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
};
|
|
56
|
+
return /* @__PURE__ */ x(s, {
|
|
57
|
+
variant: n[e] ?? "secondary",
|
|
58
|
+
className: "flex items-center gap-1",
|
|
59
|
+
children: [/* @__PURE__ */ b(F, { status: e }), t[e] ?? e]
|
|
60
|
+
});
|
|
61
|
+
}, L = () => {
|
|
62
|
+
let s = t(), { getPath: g } = e(), [w, D] = v(""), [j, L] = v([]), R = P(s), z = _(() => ({
|
|
60
63
|
search: w,
|
|
61
64
|
status: j
|
|
62
|
-
}), [w, j])
|
|
63
|
-
return /* @__PURE__ */ b(
|
|
64
|
-
title:
|
|
65
|
-
description:
|
|
66
|
-
actions: /* @__PURE__ */ b(
|
|
65
|
+
}), [w, j]), { data: B, loading: V, error: H, refetch: U } = d(z), W = _(() => u(B), [B]);
|
|
66
|
+
return /* @__PURE__ */ b(n, {
|
|
67
|
+
title: s("botlit.executions.title", "Executions"),
|
|
68
|
+
description: s("botlit.executions.description", "Monitor agent execution history, performance, and costs"),
|
|
69
|
+
actions: /* @__PURE__ */ b(a, {
|
|
67
70
|
variant: "outline",
|
|
68
71
|
leftIcon: /* @__PURE__ */ b(O, { size: 16 }),
|
|
69
|
-
onClick: () => void
|
|
70
|
-
children:
|
|
72
|
+
onClick: () => void U(),
|
|
73
|
+
children: s("botlit.executions.actions.refresh", "Refresh")
|
|
71
74
|
}),
|
|
72
75
|
children: /* @__PURE__ */ x("div", {
|
|
73
76
|
className: "space-y-6",
|
|
74
77
|
children: [
|
|
75
78
|
/* @__PURE__ */ b(y, {
|
|
76
79
|
icon: /* @__PURE__ */ b(C, { size: 18 }),
|
|
77
|
-
children:
|
|
80
|
+
children: s("botlit.executions.purpose", "An execution is a single run of an agent — one request in, one response out. This page is your observability and cost dashboard: see which runs succeeded or failed, how long they took, how many tokens they burned and what they cost. Use it to spot failing agents, runaway spend and latency regressions, then open any run to inspect its full trace.")
|
|
78
81
|
}),
|
|
79
|
-
|
|
82
|
+
W.total > 0 && /* @__PURE__ */ x("div", {
|
|
80
83
|
className: "space-y-2",
|
|
81
84
|
children: [/* @__PURE__ */ x("div", {
|
|
82
85
|
className: "grid grid-cols-2 md:grid-cols-4 gap-4",
|
|
83
86
|
children: [
|
|
84
|
-
/* @__PURE__ */ b(
|
|
87
|
+
/* @__PURE__ */ b(r, {
|
|
85
88
|
treatment: "glass",
|
|
86
89
|
glow: !0,
|
|
87
|
-
children: /* @__PURE__ */ b(
|
|
90
|
+
children: /* @__PURE__ */ b(i, {
|
|
88
91
|
className: "pt-6",
|
|
89
92
|
children: /* @__PURE__ */ x("div", {
|
|
90
93
|
className: "flex items-center justify-between",
|
|
91
94
|
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
92
95
|
className: "text-sm text-text-secondary",
|
|
93
|
-
children:
|
|
96
|
+
children: s("botlit.executions.rollup.executions", "Executions")
|
|
94
97
|
}), /* @__PURE__ */ b("p", {
|
|
95
98
|
className: "text-2xl font-bold tabular-nums",
|
|
96
|
-
children:
|
|
99
|
+
children: m(W.total)
|
|
97
100
|
})] }), /* @__PURE__ */ b(C, { className: "h-8 w-8 text-text-secondary" })]
|
|
98
101
|
})
|
|
99
102
|
})
|
|
100
103
|
}),
|
|
101
|
-
/* @__PURE__ */ b(
|
|
104
|
+
/* @__PURE__ */ b(r, {
|
|
102
105
|
treatment: "metric",
|
|
103
|
-
children: /* @__PURE__ */ b(
|
|
106
|
+
children: /* @__PURE__ */ b(i, {
|
|
104
107
|
className: "pt-6",
|
|
105
108
|
children: /* @__PURE__ */ x("div", {
|
|
106
109
|
className: "flex items-center justify-between",
|
|
107
110
|
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
108
111
|
className: "text-sm text-text-secondary",
|
|
109
|
-
children:
|
|
112
|
+
children: s("botlit.executions.rollup.successRate", "Success Rate")
|
|
110
113
|
}), /* @__PURE__ */ x("p", {
|
|
111
114
|
className: "text-2xl font-bold tabular-nums text-status-success-text",
|
|
112
|
-
children: [(
|
|
115
|
+
children: [(W.successRate * 100).toFixed(1), "%"]
|
|
113
116
|
})] }), /* @__PURE__ */ b(A, { className: "h-8 w-8 text-status-success-text" })]
|
|
114
117
|
})
|
|
115
118
|
})
|
|
116
119
|
}),
|
|
117
|
-
/* @__PURE__ */ b(
|
|
120
|
+
/* @__PURE__ */ b(r, {
|
|
118
121
|
treatment: "metric",
|
|
119
|
-
children: /* @__PURE__ */ b(
|
|
122
|
+
children: /* @__PURE__ */ b(i, {
|
|
120
123
|
className: "pt-6",
|
|
121
124
|
children: /* @__PURE__ */ x("div", {
|
|
122
125
|
className: "flex items-center justify-between",
|
|
123
126
|
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
124
127
|
className: "text-sm text-text-secondary",
|
|
125
|
-
children:
|
|
128
|
+
children: s("botlit.executions.rollup.avgDuration", "Avg Duration")
|
|
126
129
|
}), /* @__PURE__ */ b("p", {
|
|
127
130
|
className: "text-2xl font-bold tabular-nums",
|
|
128
|
-
children:
|
|
131
|
+
children: p(W.avgDurationMs)
|
|
129
132
|
})] }), /* @__PURE__ */ b(T, { className: "h-8 w-8 text-text-secondary" })]
|
|
130
133
|
})
|
|
131
134
|
})
|
|
132
135
|
}),
|
|
133
|
-
/* @__PURE__ */ b(
|
|
136
|
+
/* @__PURE__ */ b(r, {
|
|
134
137
|
treatment: "metric",
|
|
135
|
-
children: /* @__PURE__ */ b(
|
|
138
|
+
children: /* @__PURE__ */ b(i, {
|
|
136
139
|
className: "pt-6",
|
|
137
140
|
children: /* @__PURE__ */ x("div", {
|
|
138
141
|
className: "flex items-center justify-between",
|
|
139
142
|
children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("p", {
|
|
140
143
|
className: "text-sm text-text-secondary",
|
|
141
|
-
children:
|
|
144
|
+
children: s("botlit.executions.rollup.totalCost", "Total Cost")
|
|
142
145
|
}), /* @__PURE__ */ b("p", {
|
|
143
146
|
className: "text-2xl font-bold tabular-nums",
|
|
144
|
-
children:
|
|
147
|
+
children: f(W.totalCost)
|
|
145
148
|
})] }), /* @__PURE__ */ b(E, { className: "h-8 w-8 text-text-secondary" })]
|
|
146
149
|
})
|
|
147
150
|
})
|
|
@@ -149,22 +152,22 @@ var F = ({ status: e, className: t }) => {
|
|
|
149
152
|
]
|
|
150
153
|
}), /* @__PURE__ */ b("p", {
|
|
151
154
|
className: "text-xs text-text-secondary",
|
|
152
|
-
children:
|
|
155
|
+
children: s("botlit.executions.rollup.calculatedAcross", "Calculated across the {{count}} runs shown below.", { count: W.total })
|
|
153
156
|
})]
|
|
154
157
|
}),
|
|
155
158
|
/* @__PURE__ */ x("div", {
|
|
156
159
|
className: "flex flex-wrap items-center gap-4",
|
|
157
160
|
children: [/* @__PURE__ */ x("div", {
|
|
158
161
|
className: "relative flex-1 max-w-md",
|
|
159
|
-
children: [/* @__PURE__ */ b(k, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ b(
|
|
160
|
-
placeholder:
|
|
162
|
+
children: [/* @__PURE__ */ b(k, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ b(o, {
|
|
163
|
+
placeholder: s("botlit.executions.filters.searchPlaceholder", "Search by run, agent, bot or input…"),
|
|
161
164
|
value: w,
|
|
162
165
|
onChange: (e) => D(e.target.value),
|
|
163
166
|
className: "pl-9"
|
|
164
167
|
})]
|
|
165
168
|
}), /* @__PURE__ */ b("div", {
|
|
166
169
|
className: "flex flex-wrap gap-2",
|
|
167
|
-
children: N.map((e) => /* @__PURE__ */ x(
|
|
170
|
+
children: N.map((e) => /* @__PURE__ */ x(a, {
|
|
168
171
|
variant: j.includes(e) ? "default" : "outline",
|
|
169
172
|
size: "sm",
|
|
170
173
|
onClick: () => L((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]),
|
|
@@ -175,7 +178,7 @@ var F = ({ status: e, className: t }) => {
|
|
|
175
178
|
}, e))
|
|
176
179
|
})]
|
|
177
180
|
}),
|
|
178
|
-
|
|
181
|
+
V ? /* @__PURE__ */ b("div", {
|
|
179
182
|
className: "space-y-4",
|
|
180
183
|
children: [
|
|
181
184
|
1,
|
|
@@ -184,45 +187,45 @@ var F = ({ status: e, className: t }) => {
|
|
|
184
187
|
4,
|
|
185
188
|
5
|
|
186
189
|
].map((e) => /* @__PURE__ */ b("div", { className: "h-20 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" }, e))
|
|
187
|
-
}) :
|
|
190
|
+
}) : H ? /* @__PURE__ */ b(l, {
|
|
188
191
|
resource: "executions",
|
|
189
|
-
error:
|
|
190
|
-
onRetry: () => void
|
|
191
|
-
}) :
|
|
192
|
+
error: H,
|
|
193
|
+
onRetry: () => void U()
|
|
194
|
+
}) : B.length > 0 ? /* @__PURE__ */ x("div", {
|
|
192
195
|
className: "space-y-2",
|
|
193
196
|
children: [/* @__PURE__ */ x("div", {
|
|
194
197
|
className: "grid grid-cols-12 gap-4 px-4 py-2 text-sm font-medium text-text-secondary border-b border-border-subtle",
|
|
195
198
|
children: [
|
|
196
199
|
/* @__PURE__ */ b("div", {
|
|
197
200
|
className: "col-span-2",
|
|
198
|
-
children:
|
|
201
|
+
children: s("botlit.executions.table.status", "Status")
|
|
199
202
|
}),
|
|
200
203
|
/* @__PURE__ */ b("div", {
|
|
201
204
|
className: "col-span-3",
|
|
202
|
-
children:
|
|
205
|
+
children: s("botlit.executions.table.botAgent", "Bot / Agent")
|
|
203
206
|
}),
|
|
204
207
|
/* @__PURE__ */ b("div", {
|
|
205
208
|
className: "col-span-2",
|
|
206
|
-
children:
|
|
209
|
+
children: s("botlit.executions.table.duration", "Duration")
|
|
207
210
|
}),
|
|
208
211
|
/* @__PURE__ */ b("div", {
|
|
209
212
|
className: "col-span-2",
|
|
210
|
-
children:
|
|
213
|
+
children: s("botlit.executions.table.tokens", "Tokens")
|
|
211
214
|
}),
|
|
212
215
|
/* @__PURE__ */ b("div", {
|
|
213
216
|
className: "col-span-1",
|
|
214
|
-
children:
|
|
217
|
+
children: s("botlit.executions.table.cost", "Cost")
|
|
215
218
|
}),
|
|
216
219
|
/* @__PURE__ */ b("div", {
|
|
217
220
|
className: "col-span-2",
|
|
218
|
-
children:
|
|
221
|
+
children: s("botlit.executions.table.started", "Started")
|
|
219
222
|
})
|
|
220
223
|
]
|
|
221
|
-
}),
|
|
224
|
+
}), B.map((e) => /* @__PURE__ */ b(S, {
|
|
222
225
|
to: g(`executions/${e.id}`),
|
|
223
|
-
children: /* @__PURE__ */ b(
|
|
226
|
+
children: /* @__PURE__ */ b(r, {
|
|
224
227
|
className: "hover:border-primary/50 transition-colors cursor-pointer",
|
|
225
|
-
children: /* @__PURE__ */ b(
|
|
228
|
+
children: /* @__PURE__ */ b(i, {
|
|
226
229
|
className: "py-3",
|
|
227
230
|
children: /* @__PURE__ */ x("div", {
|
|
228
231
|
className: "grid grid-cols-12 gap-4 items-center",
|
|
@@ -251,7 +254,7 @@ var F = ({ status: e, className: t }) => {
|
|
|
251
254
|
children: [/* @__PURE__ */ b(T, {
|
|
252
255
|
size: 14,
|
|
253
256
|
className: "text-text-secondary"
|
|
254
|
-
}), /* @__PURE__ */ b("span", { children:
|
|
257
|
+
}), /* @__PURE__ */ b("span", { children: p(e.duration) })]
|
|
255
258
|
})
|
|
256
259
|
}),
|
|
257
260
|
/* @__PURE__ */ b("div", {
|
|
@@ -261,7 +264,7 @@ var F = ({ status: e, className: t }) => {
|
|
|
261
264
|
children: [/* @__PURE__ */ b(M, {
|
|
262
265
|
size: 14,
|
|
263
266
|
className: "text-text-secondary"
|
|
264
|
-
}), /* @__PURE__ */ b("span", { children:
|
|
267
|
+
}), /* @__PURE__ */ b("span", { children: m(e.tokensUsed) })]
|
|
265
268
|
})
|
|
266
269
|
}),
|
|
267
270
|
/* @__PURE__ */ b("div", {
|
|
@@ -271,28 +274,27 @@ var F = ({ status: e, className: t }) => {
|
|
|
271
274
|
children: [/* @__PURE__ */ b(E, {
|
|
272
275
|
size: 14,
|
|
273
276
|
className: "text-text-secondary"
|
|
274
|
-
}), /* @__PURE__ */ b("span", { children:
|
|
277
|
+
}), /* @__PURE__ */ b("span", { children: f(e.cost) })]
|
|
275
278
|
})
|
|
276
279
|
}),
|
|
277
280
|
/* @__PURE__ */ b("div", {
|
|
278
281
|
className: "col-span-2 text-sm text-text-secondary",
|
|
279
|
-
children:
|
|
282
|
+
children: h(e.createdAt)
|
|
280
283
|
})
|
|
281
284
|
]
|
|
282
285
|
})
|
|
283
286
|
})
|
|
284
287
|
})
|
|
285
288
|
}, e.id))]
|
|
286
|
-
}) : /* @__PURE__ */ b(
|
|
289
|
+
}) : /* @__PURE__ */ b(c, {
|
|
287
290
|
illustration: "empty-search",
|
|
288
|
-
title:
|
|
289
|
-
description: j.length > 0 || w ?
|
|
291
|
+
title: s("botlit.executions.empty.title", "No executions found"),
|
|
292
|
+
description: j.length > 0 || w ? s("botlit.executions.empty.descriptionFiltered", "No executions match your filters. Try adjusting your search.") : s("botlit.executions.empty.descriptionNoData", "Executions will appear here when agents process requests.")
|
|
290
293
|
})
|
|
291
294
|
]
|
|
292
295
|
})
|
|
293
296
|
});
|
|
294
297
|
};
|
|
295
|
-
//#endregion
|
|
296
298
|
export { L as ExecutionsPage };
|
|
297
299
|
|
|
298
300
|
//# sourceMappingURL=ExecutionsPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionsPage.js","names":[],"sources":["../../../src/botlit/pages/ExecutionsPage.tsx"],"sourcesContent":["/**\n * Executions Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useMemo, useState } from 'react';\nimport { Link } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport {\n Search as SearchIcon,\n Activity,\n CheckCircle,\n XCircle,\n Clock,\n DollarSign,\n Zap,\n RefreshCw,\n TrendingUp,\n Hourglass,\n} from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardContent } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\nimport { Badge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useExecutions, summariseExecutions, type ExecutionRecord } from '../hooks';\nimport {\n formatNumber,\n formatRelativeTime,\n formatCurrency,\n formatDuration,\n MISSING_VALUE,\n} from '../utils/formatters';\nimport { ExecutionStatus as GqlExecutionStatus } from '../../generated/wspace-types';\n\n/**\n * The statuses wspace-botlit-svc actually reports. These MUST match the\n * `ExecutionStatus` enum in the supergraph — sending anything else fails\n * GraphQL validation at the gateway.\n */\nconst EXECUTION_STATUSES: GqlExecutionStatus[] = [\n GqlExecutionStatus.Completed,\n GqlExecutionStatus.Running,\n GqlExecutionStatus.Pending,\n GqlExecutionStatus.Failed,\n GqlExecutionStatus.Timeout,\n GqlExecutionStatus.Cancelled,\n];\n\nfunction useStatusLabels(t: ReturnType<typeof useTr>): Record<GqlExecutionStatus, string> {\n return {\n [GqlExecutionStatus.Completed]: t('botlit.executions.status.completed', 'Completed'),\n [GqlExecutionStatus.Running]: t('botlit.executions.status.running', 'Running'),\n [GqlExecutionStatus.Pending]: t('botlit.executions.status.pending', 'Pending'),\n [GqlExecutionStatus.Failed]: t('botlit.executions.status.failed', 'Failed'),\n [GqlExecutionStatus.Timeout]: t('botlit.executions.status.timedOut', 'Timed out'),\n [GqlExecutionStatus.Cancelled]: t('botlit.executions.status.cancelled', 'Cancelled'),\n };\n}\n\nconst StatusIcon: FC<{ status: string; className?: string }> = ({ status, className }) => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return <CheckCircle className={className ?? 'h-4 w-4 text-status-success-text'} />;\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return <XCircle className={className ?? 'h-4 w-4 text-status-error-text'} />;\n case GqlExecutionStatus.Running:\n return (\n <RefreshCw\n className={className ?? 'h-4 w-4 text-status-info-text motion-safe:animate-spin'}\n />\n );\n case GqlExecutionStatus.Pending:\n return <Hourglass className={className ?? 'h-4 w-4 text-status-warning-text'} />;\n default:\n return <Activity className={className ?? 'h-4 w-4 text-text-secondary'} />;\n }\n};\n\nconst StatusBadge: FC<{ status: string; labels: Record<GqlExecutionStatus, string> }> = ({\n status,\n labels,\n}) => {\n const variants: Record<string, 'success' | 'destructive' | 'warning' | 'secondary' | 'default'> =\n {\n [GqlExecutionStatus.Completed]: 'success',\n [GqlExecutionStatus.Failed]: 'destructive',\n [GqlExecutionStatus.Timeout]: 'destructive',\n [GqlExecutionStatus.Running]: 'default',\n [GqlExecutionStatus.Pending]: 'warning',\n [GqlExecutionStatus.Cancelled]: 'secondary',\n };\n\n return (\n <Badge variant={variants[status] ?? 'secondary'} className=\"flex items-center gap-1\">\n <StatusIcon status={status} />\n {labels[status as GqlExecutionStatus] ?? status}\n </Badge>\n );\n};\n\nexport const ExecutionsPage: FC = () => {\n const t = useTr();\n const { getPath } = useBotlit();\n const [search, setSearch] = useState('');\n const [statusFilter, setStatusFilter] = useState<GqlExecutionStatus[]>([]);\n const statusLabels = useStatusLabels(t);\n\n const filter = useMemo(\n () => ({ search, status: statusFilter as string[] }),\n [search, statusFilter]\n );\n const { data: executions, loading, error, refetch } = useExecutions(filter);\n\n // No server-side aggregate exists for executions — these numbers describe the\n // runs currently loaded, and the caption below says so.\n const rollup = useMemo(() => summariseExecutions(executions), [executions]);\n\n return (\n <PageLayout\n title={t('botlit.executions.title', 'Executions')}\n description={t(\n 'botlit.executions.description',\n 'Monitor agent execution history, performance, and costs'\n )}\n actions={\n <Button variant=\"outline\" leftIcon={<RefreshCw size={16} />} onClick={() => void refetch()}>\n {t('botlit.executions.actions.refresh', 'Refresh')}\n </Button>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Activity size={18} />}>\n {t(\n 'botlit.executions.purpose',\n 'An execution is a single run of an agent — one request in, one response out. This page is your observability and cost dashboard: see which runs succeeded or failed, how long they took, how many tokens they burned and what they cost. Use it to spot failing agents, runaway spend and latency regressions, then open any run to inspect its full trace.'\n )}\n </PagePurpose>\n\n {/* Stats over the loaded runs */}\n {rollup.total > 0 && (\n <div className=\"space-y-2\">\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card treatment=\"glass\" glow>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.executions.rollup.executions', 'Executions')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatNumber(rollup.total)}\n </p>\n </div>\n <Activity className=\"h-8 w-8 text-text-secondary\" />\n </div>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.executions.rollup.successRate', 'Success Rate')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums text-status-success-text\">\n {(rollup.successRate * 100).toFixed(1)}%\n </p>\n </div>\n <TrendingUp className=\"h-8 w-8 text-status-success-text\" />\n </div>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.executions.rollup.avgDuration', 'Avg Duration')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatDuration(rollup.avgDurationMs)}\n </p>\n </div>\n <Clock className=\"h-8 w-8 text-text-secondary\" />\n </div>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.executions.rollup.totalCost', 'Total Cost')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatCurrency(rollup.totalCost)}\n </p>\n </div>\n <DollarSign className=\"h-8 w-8 text-text-secondary\" />\n </div>\n </CardContent>\n </Card>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'botlit.executions.rollup.calculatedAcross',\n 'Calculated across the {{count}} runs shown below.',\n {\n count: rollup.total,\n }\n )}\n </p>\n </div>\n )}\n\n {/* Filters */}\n <div className=\"flex flex-wrap items-center gap-4\">\n <div className=\"relative flex-1 max-w-md\">\n <SearchIcon className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder={t(\n 'botlit.executions.filters.searchPlaceholder',\n 'Search by run, agent, bot or input…'\n )}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {EXECUTION_STATUSES.map((status) => (\n <Button\n key={status}\n variant={statusFilter.includes(status) ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() =>\n setStatusFilter((prev) =>\n prev.includes(status) ? prev.filter((s) => s !== status) : [...prev, status]\n )\n }\n >\n <StatusIcon status={status} />\n <span className=\"ml-1\">{statusLabels[status]}</span>\n </Button>\n ))}\n </div>\n </div>\n\n {/* Executions List */}\n {loading ? (\n <div className=\"space-y-4\">\n {[1, 2, 3, 4, 5].map((i) => (\n <div\n key={i}\n className=\"h-20 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"executions\" error={error} onRetry={() => void refetch()} />\n ) : executions.length > 0 ? (\n <div className=\"space-y-2\">\n {/* Table Header */}\n <div className=\"grid grid-cols-12 gap-4 px-4 py-2 text-sm font-medium text-text-secondary border-b border-border-subtle\">\n <div className=\"col-span-2\">{t('botlit.executions.table.status', 'Status')}</div>\n <div className=\"col-span-3\">\n {t('botlit.executions.table.botAgent', 'Bot / Agent')}\n </div>\n <div className=\"col-span-2\">{t('botlit.executions.table.duration', 'Duration')}</div>\n <div className=\"col-span-2\">{t('botlit.executions.table.tokens', 'Tokens')}</div>\n <div className=\"col-span-1\">{t('botlit.executions.table.cost', 'Cost')}</div>\n <div className=\"col-span-2\">{t('botlit.executions.table.started', 'Started')}</div>\n </div>\n\n {/* Table Rows */}\n {executions.map((execution: ExecutionRecord) => (\n <Link key={execution.id} to={getPath(`executions/${execution.id}`)}>\n <Card className=\"hover:border-primary/50 transition-colors cursor-pointer\">\n <CardContent className=\"py-3\">\n <div className=\"grid grid-cols-12 gap-4 items-center\">\n <div className=\"col-span-2\">\n <StatusBadge status={execution.status} labels={statusLabels} />\n </div>\n <div className=\"col-span-3\">\n <p className=\"font-medium truncate\">{execution.appId ?? MISSING_VALUE}</p>\n <p className=\"text-sm text-text-secondary truncate\">\n {execution.agentId ?? MISSING_VALUE}\n </p>\n </div>\n <div className=\"col-span-2\">\n <div className=\"flex items-center gap-1\">\n <Clock size={14} className=\"text-text-secondary\" />\n <span>{formatDuration(execution.duration)}</span>\n </div>\n </div>\n <div className=\"col-span-2\">\n <div className=\"flex items-center gap-1\">\n <Zap size={14} className=\"text-text-secondary\" />\n <span>{formatNumber(execution.tokensUsed)}</span>\n </div>\n </div>\n <div className=\"col-span-1\">\n <div className=\"flex items-center gap-1\">\n <DollarSign size={14} className=\"text-text-secondary\" />\n <span>{formatCurrency(execution.cost)}</span>\n </div>\n </div>\n <div className=\"col-span-2 text-sm text-text-secondary\">\n {formatRelativeTime(execution.createdAt)}\n </div>\n </div>\n </CardContent>\n </Card>\n </Link>\n ))}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-search\"\n title={t('botlit.executions.empty.title', 'No executions found')}\n description={\n statusFilter.length > 0 || search\n ? t(\n 'botlit.executions.empty.descriptionFiltered',\n 'No executions match your filters. Try adjusting your search.'\n )\n : t(\n 'botlit.executions.empty.descriptionNoData',\n 'Executions will appear here when agents process requests.'\n )\n }\n />\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExecutionsPage.js","names":["GqlExecutionStatus","SearchIcon","EXECUTION_STATUSES","ExecutionStatus","useStatusLabels","t","StatusIcon","status","CheckCircle","className","XCircle","RefreshCw","Hourglass","Activity","StatusBadge","variants","Badge","labels","ExecutionsPage","useTr","useBotlit","search","setSearch","useState","statusFilter","setStatusFilter","statusLabels","filter","useMemo","executions","useExecutions","rollup","summariseExecutions","PageLayout","Button","refetch","PagePurpose","Card","CardContent","formatNumber","TrendingUp","formatDuration","Clock","formatCurrency","DollarSign","Search","Input","prev","s","loading","i","error","ErrorState","Link","getPath","execution","Zap","formatRelativeTime","EmptyState"],"sources":["../../../src/botlit/pages/ExecutionsPage.tsx"],"sourcesContent":["/**\n * Executions Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useMemo, useState } from 'react';\nimport { Link } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport {\n Search as SearchIcon,\n Activity,\n CheckCircle,\n XCircle,\n Clock,\n DollarSign,\n Zap,\n RefreshCw,\n TrendingUp,\n Hourglass,\n} from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardContent } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\nimport { Badge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useExecutions, summariseExecutions, type ExecutionRecord } from '../hooks';\nimport {\n formatNumber,\n formatRelativeTime,\n formatCurrency,\n formatDuration,\n MISSING_VALUE,\n} from '../utils/formatters';\nimport { ExecutionStatus as GqlExecutionStatus } from '../../generated/wspace-types';\n\n/**\n * The statuses wspace-botlit-svc actually reports. These MUST match the\n * `ExecutionStatus` enum in the supergraph — sending anything else fails\n * GraphQL validation at the gateway.\n */\nconst EXECUTION_STATUSES: GqlExecutionStatus[] = [\n GqlExecutionStatus.Completed,\n GqlExecutionStatus.Running,\n GqlExecutionStatus.Pending,\n GqlExecutionStatus.Failed,\n GqlExecutionStatus.Timeout,\n GqlExecutionStatus.Cancelled,\n];\n\nfunction useStatusLabels(t: ReturnType<typeof useTr>): Record<GqlExecutionStatus, string> {\n return {\n [GqlExecutionStatus.Completed]: t('botlit.executions.status.completed', 'Completed'),\n [GqlExecutionStatus.Running]: t('botlit.executions.status.running', 'Running'),\n [GqlExecutionStatus.Pending]: t('botlit.executions.status.pending', 'Pending'),\n [GqlExecutionStatus.Failed]: t('botlit.executions.status.failed', 'Failed'),\n [GqlExecutionStatus.Timeout]: t('botlit.executions.status.timedOut', 'Timed out'),\n [GqlExecutionStatus.Cancelled]: t('botlit.executions.status.cancelled', 'Cancelled'),\n };\n}\n\nconst StatusIcon: FC<{ status: string; className?: string }> = ({ status, className }) => {\n switch (status) {\n case GqlExecutionStatus.Completed:\n return <CheckCircle className={className ?? 'h-4 w-4 text-status-success-text'} />;\n case GqlExecutionStatus.Failed:\n case GqlExecutionStatus.Timeout:\n return <XCircle className={className ?? 'h-4 w-4 text-status-error-text'} />;\n case GqlExecutionStatus.Running:\n return (\n <RefreshCw\n className={className ?? 'h-4 w-4 text-status-info-text motion-safe:animate-spin'}\n />\n );\n case GqlExecutionStatus.Pending:\n return <Hourglass className={className ?? 'h-4 w-4 text-status-warning-text'} />;\n default:\n return <Activity className={className ?? 'h-4 w-4 text-text-secondary'} />;\n }\n};\n\nconst StatusBadge: FC<{ status: string; labels: Record<GqlExecutionStatus, string> }> = ({\n status,\n labels,\n}) => {\n const variants: Record<string, 'success' | 'destructive' | 'warning' | 'secondary' | 'default'> =\n {\n [GqlExecutionStatus.Completed]: 'success',\n [GqlExecutionStatus.Failed]: 'destructive',\n [GqlExecutionStatus.Timeout]: 'destructive',\n [GqlExecutionStatus.Running]: 'default',\n [GqlExecutionStatus.Pending]: 'warning',\n [GqlExecutionStatus.Cancelled]: 'secondary',\n };\n\n return (\n <Badge variant={variants[status] ?? 'secondary'} className=\"flex items-center gap-1\">\n <StatusIcon status={status} />\n {labels[status as GqlExecutionStatus] ?? status}\n </Badge>\n );\n};\n\nexport const ExecutionsPage: FC = () => {\n const t = useTr();\n const { getPath } = useBotlit();\n const [search, setSearch] = useState('');\n const [statusFilter, setStatusFilter] = useState<GqlExecutionStatus[]>([]);\n const statusLabels = useStatusLabels(t);\n\n const filter = useMemo(\n () => ({ search, status: statusFilter as string[] }),\n [search, statusFilter]\n );\n const { data: executions, loading, error, refetch } = useExecutions(filter);\n\n // No server-side aggregate exists for executions — these numbers describe the\n // runs currently loaded, and the caption below says so.\n const rollup = useMemo(() => summariseExecutions(executions), [executions]);\n\n return (\n <PageLayout\n title={t('botlit.executions.title', 'Executions')}\n description={t(\n 'botlit.executions.description',\n 'Monitor agent execution history, performance, and costs'\n )}\n actions={\n <Button variant=\"outline\" leftIcon={<RefreshCw size={16} />} onClick={() => void refetch()}>\n {t('botlit.executions.actions.refresh', 'Refresh')}\n </Button>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Activity size={18} />}>\n {t(\n 'botlit.executions.purpose',\n 'An execution is a single run of an agent — one request in, one response out. This page is your observability and cost dashboard: see which runs succeeded or failed, how long they took, how many tokens they burned and what they cost. Use it to spot failing agents, runaway spend and latency regressions, then open any run to inspect its full trace.'\n )}\n </PagePurpose>\n\n {/* Stats over the loaded runs */}\n {rollup.total > 0 && (\n <div className=\"space-y-2\">\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card treatment=\"glass\" glow>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.executions.rollup.executions', 'Executions')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatNumber(rollup.total)}\n </p>\n </div>\n <Activity className=\"h-8 w-8 text-text-secondary\" />\n </div>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.executions.rollup.successRate', 'Success Rate')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums text-status-success-text\">\n {(rollup.successRate * 100).toFixed(1)}%\n </p>\n </div>\n <TrendingUp className=\"h-8 w-8 text-status-success-text\" />\n </div>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.executions.rollup.avgDuration', 'Avg Duration')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatDuration(rollup.avgDurationMs)}\n </p>\n </div>\n <Clock className=\"h-8 w-8 text-text-secondary\" />\n </div>\n </CardContent>\n </Card>\n <Card treatment=\"metric\">\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.executions.rollup.totalCost', 'Total Cost')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatCurrency(rollup.totalCost)}\n </p>\n </div>\n <DollarSign className=\"h-8 w-8 text-text-secondary\" />\n </div>\n </CardContent>\n </Card>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'botlit.executions.rollup.calculatedAcross',\n 'Calculated across the {{count}} runs shown below.',\n {\n count: rollup.total,\n }\n )}\n </p>\n </div>\n )}\n\n {/* Filters */}\n <div className=\"flex flex-wrap items-center gap-4\">\n <div className=\"relative flex-1 max-w-md\">\n <SearchIcon className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder={t(\n 'botlit.executions.filters.searchPlaceholder',\n 'Search by run, agent, bot or input…'\n )}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {EXECUTION_STATUSES.map((status) => (\n <Button\n key={status}\n variant={statusFilter.includes(status) ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() =>\n setStatusFilter((prev) =>\n prev.includes(status) ? prev.filter((s) => s !== status) : [...prev, status]\n )\n }\n >\n <StatusIcon status={status} />\n <span className=\"ml-1\">{statusLabels[status]}</span>\n </Button>\n ))}\n </div>\n </div>\n\n {/* Executions List */}\n {loading ? (\n <div className=\"space-y-4\">\n {[1, 2, 3, 4, 5].map((i) => (\n <div\n key={i}\n className=\"h-20 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"executions\" error={error} onRetry={() => void refetch()} />\n ) : executions.length > 0 ? (\n <div className=\"space-y-2\">\n {/* Table Header */}\n <div className=\"grid grid-cols-12 gap-4 px-4 py-2 text-sm font-medium text-text-secondary border-b border-border-subtle\">\n <div className=\"col-span-2\">{t('botlit.executions.table.status', 'Status')}</div>\n <div className=\"col-span-3\">\n {t('botlit.executions.table.botAgent', 'Bot / Agent')}\n </div>\n <div className=\"col-span-2\">{t('botlit.executions.table.duration', 'Duration')}</div>\n <div className=\"col-span-2\">{t('botlit.executions.table.tokens', 'Tokens')}</div>\n <div className=\"col-span-1\">{t('botlit.executions.table.cost', 'Cost')}</div>\n <div className=\"col-span-2\">{t('botlit.executions.table.started', 'Started')}</div>\n </div>\n\n {/* Table Rows */}\n {executions.map((execution: ExecutionRecord) => (\n <Link key={execution.id} to={getPath(`executions/${execution.id}`)}>\n <Card className=\"hover:border-primary/50 transition-colors cursor-pointer\">\n <CardContent className=\"py-3\">\n <div className=\"grid grid-cols-12 gap-4 items-center\">\n <div className=\"col-span-2\">\n <StatusBadge status={execution.status} labels={statusLabels} />\n </div>\n <div className=\"col-span-3\">\n <p className=\"font-medium truncate\">{execution.appId ?? MISSING_VALUE}</p>\n <p className=\"text-sm text-text-secondary truncate\">\n {execution.agentId ?? MISSING_VALUE}\n </p>\n </div>\n <div className=\"col-span-2\">\n <div className=\"flex items-center gap-1\">\n <Clock size={14} className=\"text-text-secondary\" />\n <span>{formatDuration(execution.duration)}</span>\n </div>\n </div>\n <div className=\"col-span-2\">\n <div className=\"flex items-center gap-1\">\n <Zap size={14} className=\"text-text-secondary\" />\n <span>{formatNumber(execution.tokensUsed)}</span>\n </div>\n </div>\n <div className=\"col-span-1\">\n <div className=\"flex items-center gap-1\">\n <DollarSign size={14} className=\"text-text-secondary\" />\n <span>{formatCurrency(execution.cost)}</span>\n </div>\n </div>\n <div className=\"col-span-2 text-sm text-text-secondary\">\n {formatRelativeTime(execution.createdAt)}\n </div>\n </div>\n </CardContent>\n </Card>\n </Link>\n ))}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-search\"\n title={t('botlit.executions.empty.title', 'No executions found')}\n description={\n statusFilter.length > 0 || search\n ? t(\n 'botlit.executions.empty.descriptionFiltered',\n 'No executions match your filters. Try adjusting your search.'\n )\n : t(\n 'botlit.executions.empty.descriptionNoData',\n 'Executions will appear here when agents process requests.'\n )\n }\n />\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA6CA,IAAME,IAA2C;CAC/CF,EAAmB;CACnBA,EAAmB;CACnBA,EAAmB;CACnBA,EAAmB;CACnBA,EAAmB;CACnBA,EAAmB;AACrB;AAEA,SAASI,EAAgB,GAAiE;CACxF,OAAO;GACJJ,EAAmB,YAAYK,EAAE,sCAAsC,WAAW;GAClFL,EAAmB,UAAUK,EAAE,oCAAoC,SAAS;GAC5EL,EAAmB,UAAUK,EAAE,oCAAoC,SAAS;GAC5EL,EAAmB,SAASK,EAAE,mCAAmC,QAAQ;GACzEL,EAAmB,UAAUK,EAAE,qCAAqC,WAAW;GAC/EL,EAAmB,YAAYK,EAAE,sCAAsC,WAAW;CACrF;AACF;AAEA,IAAMC,KAA0D,EAAE,WAAQ,mBAAgB;CACxF,QAAQC,GAAR;EACE,KAAKP,EAAmB,WACtB,OAAO,kBAACQ,GAAD,EAAa,WAAWC,KAAa,mCAAqC,CAAA;EACnF,KAAKT,EAAmB;EACxB,KAAKA,EAAmB,SACtB,OAAO,kBAACU,GAAD,EAAS,WAAWD,KAAa,iCAAmC,CAAA;EAC7E,KAAKT,EAAmB,SACtB,OACE,kBAACW,GAAD,EACE,WAAWF,KAAa,yDACzB,CAAA;EAEL,KAAKT,EAAmB,SACtB,OAAO,kBAACY,GAAD,EAAW,WAAWH,KAAa,mCAAqC,CAAA;EACjF,SACE,OAAO,kBAACI,GAAD,EAAU,WAAWJ,KAAa,8BAAgC,CAAA;CAC7E;AACF,GAEMK,KAAmF,EACvF,WACA,gBACI;CACJ,IAAMC,IACJ;GACGf,EAAmB,YAAY;GAC/BA,EAAmB,SAAS;GAC5BA,EAAmB,UAAU;GAC7BA,EAAmB,UAAU;GAC7BA,EAAmB,UAAU;GAC7BA,EAAmB,YAAY;CAClC;CAEF,OACE,kBAACgB,GAAD;EAAO,SAASD,EAASR,MAAW;EAAa,WAAU;EAA3D,UAAA,CACE,kBAACD,GAAD,EAAoB,UAAS,CAAA,GAC5BW,EAAOV,MAAiCA,CACpC;;AAEX,GAEaW,UAA2B;CACtC,IAAMb,IAAIc,EAAM,GACV,EAAE,eAAYC,EAAU,GACxB,CAACC,GAAQC,KAAaC,EAAS,EAAE,GACjC,CAACC,GAAcC,KAAmBF,EAA+B,CAAC,CAAC,GACnEG,IAAetB,EAAgBC,CAAC,GAEhCsB,IAASC,SACN;EAAE;EAAQ,QAAQJ;CAAyB,IAClD,CAACH,GAAQG,CAAY,CACvB,GACM,EAAE,MAAMK,GAAY,YAAS,UAAO,eAAYC,EAAcH,CAAM,GAIpEI,IAASH,QAAcI,EAAoBH,CAAU,GAAG,CAACA,CAAU,CAAC;CAE1E,OACE,kBAACI,GAAD;EACE,OAAO5B,EAAE,2BAA2B,YAAY;EAChD,aAAaA,EACX,iCACA,yDACF;EACA,SACE,kBAAC6B,GAAD;GAAQ,SAAQ;GAAU,UAAU,kBAACvB,GAAD,EAAW,MAAM,GAAK,CAAA;GAAG,eAAe,KAAKwB,EAAQ;GACtF,UAAA9B,EAAE,qCAAqC,SAAS;EAC3C,CAAA;EAGV,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,kBAAC+B,GAAD;KAAa,MAAM,kBAACvB,GAAD,EAAU,MAAM,GAAK,CAAA;KACrC,UAAAR,EACC,6BACA,6VACF;IACW,CAAA;IAGZ0B,EAAO,QAAQ,KACd,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACE,kBAACM,GAAD;QAAM,WAAU;QAAQ,MAAA;QACtB,UAAA,kBAACC,GAAD;SAAa,WAAU;SACrB,UAAA,kBAAC,OAAD;UAAK,WAAU;UAAf,UAAA,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;WACV,UAAAjC,EAAE,uCAAuC,YAAY;UACrD,CAAA,GACH,kBAAC,KAAD;WAAG,WAAU;WACV,UAAAkC,EAAaR,EAAO,KAAK;UACzB,CAAA,CACA,EAAA,CAAA,GACL,kBAAClB,GAAD,EAAU,WAAU,8BAA+B,CAAA,CAChD;;QACM,CAAA;OACT,CAAA;OACN,kBAACwB,GAAD;QAAM,WAAU;QACd,UAAA,kBAACC,GAAD;SAAa,WAAU;SACrB,UAAA,kBAAC,OAAD;UAAK,WAAU;UAAf,UAAA,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;WACV,UAAAjC,EAAE,wCAAwC,cAAc;UACxD,CAAA,GACH,kBAAC,KAAD;WAAG,WAAU;WAAb,UAAA,EACI0B,EAAO,cAAc,IAAA,CAAK,QAAQ,CAAC,GAAE,GACtC;UACA,CAAA,CAAA,EAAA,CAAA,GACL,kBAACS,GAAD,EAAY,WAAU,mCAAoC,CAAA,CACvD;;QACM,CAAA;OACT,CAAA;OACN,kBAACH,GAAD;QAAM,WAAU;QACd,UAAA,kBAACC,GAAD;SAAa,WAAU;SACrB,UAAA,kBAAC,OAAD;UAAK,WAAU;UAAf,UAAA,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;WACV,UAAAjC,EAAE,wCAAwC,cAAc;UACxD,CAAA,GACH,kBAAC,KAAD;WAAG,WAAU;WACV,UAAAoC,EAAeV,EAAO,aAAa;UACnC,CAAA,CACA,EAAA,CAAA,GACL,kBAACW,GAAD,EAAO,WAAU,8BAA+B,CAAA,CAC7C;;QACM,CAAA;OACT,CAAA;OACN,kBAACL,GAAD;QAAM,WAAU;QACd,UAAA,kBAACC,GAAD;SAAa,WAAU;SACrB,UAAA,kBAAC,OAAD;UAAK,WAAU;UAAf,UAAA,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;WACV,UAAAjC,EAAE,sCAAsC,YAAY;UACpD,CAAA,GACH,kBAAC,KAAD;WAAG,WAAU;WACV,UAAAsC,EAAeZ,EAAO,SAAS;UAC/B,CAAA,CACA,EAAA,CAAA,GACL,kBAACa,GAAD,EAAY,WAAU,8BAA+B,CAAA,CAClD;;QACM,CAAA;OACT,CAAA;MACH;KACL,CAAA,GAAA,kBAAC,KAAD;MAAG,WAAU;MACV,UAAAvC,EACC,6CACA,qDACA,EACE,OAAO0B,EAAO,MAChB,CACF;KACC,CAAA,CACA;;IAIP,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAAC9B,GAAD,EAAY,WAAU,uEAAwE,CAAA,GAC9F,kBAAC6C,GAAD;OACE,aAAazC,EACX,+CACA,qCACF;OACA,OAAOgB;OACP,WAAW,MAAMC,EAAU,EAAE,OAAO,KAAK;OACzC,WAAU;MACX,CAAA,CACE;KACL,CAAA,GAAA,kBAAC,OAAD;MAAK,WAAU;MACZ,UAAApB,EAAmB,KAAK,MACvB,kBAACgC,GAAD;OAEE,SAASV,EAAa,SAASjB,CAAM,IAAI,YAAY;OACrD,MAAK;OACL,eACEkB,GAAiB,MACfsB,EAAK,SAASxC,CAAM,IAAIwC,EAAK,QAAQ,MAAMC,MAAMzC,CAAM,IAAI,CAAC,GAAGwC,GAAMxC,CAAM,CAC7E;OAPJ,UAAA,CAUE,kBAACD,GAAD,EAAoB,UAAS,CAAA,GAC7B,kBAAC,QAAD;QAAM,WAAU;QAAQ,UAAAoB,EAAanB;OAAc,CAAA,CAC7C;MAXD,GAAAA,CAWC,CACT;KACE,CAAA,CACF;;IAGJ0C,IACC,kBAAC,OAAD;KAAK,WAAU;KACZ,UAAA;MAAC;MAAG;MAAG;MAAG;MAAG;KAAC,CAAC,CAAC,KAAK,MACpB,kBAAC,OAAD,EAEE,WAAU,8DACX,GAFMC,CAEN,CACF;IACE,CAAA,IACHC,IACF,kBAACC,GAAD;KAAY,UAAS;KAAoB;KAAO,eAAe,KAAKjB,EAAQ;IAAI,CAAA,IAC9EN,EAAW,SAAS,IACtB,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CAEE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACE,kBAAC,OAAD;QAAK,WAAU;QAAc,UAAAxB,EAAE,kCAAkC,QAAQ;OAAO,CAAA;OAChF,kBAAC,OAAD;QAAK,WAAU;QACZ,UAAAA,EAAE,oCAAoC,aAAa;OACjD,CAAA;OACL,kBAAC,OAAD;QAAK,WAAU;QAAc,UAAAA,EAAE,oCAAoC,UAAU;OAAO,CAAA;OACpF,kBAAC,OAAD;QAAK,WAAU;QAAc,UAAAA,EAAE,kCAAkC,QAAQ;OAAO,CAAA;OAChF,kBAAC,OAAD;QAAK,WAAU;QAAc,UAAAA,EAAE,gCAAgC,MAAM;OAAO,CAAA;OAC5E,kBAAC,OAAD;QAAK,WAAU;QAAc,UAAAA,EAAE,mCAAmC,SAAS;OAAO,CAAA;MAC/E;KAGJ,CAAA,GAAAwB,EAAW,KAAK,MACf,kBAACwB,GAAD;MAAyB,IAAIC,EAAQ,cAAcC,EAAU,IAAI;MAC/D,UAAA,kBAAClB,GAAD;OAAM,WAAU;OACd,UAAA,kBAACC,GAAD;QAAa,WAAU;QACrB,UAAA,kBAAC,OAAD;SAAK,WAAU;SAAf,UAAA;UACE,kBAAC,OAAD;WAAK,WAAU;WACb,UAAA,kBAACxB,GAAD;YAAa,QAAQyC,EAAU;YAAQ,QAAQ7B;WAAe,CAAA;UAC3D,CAAA;UACL,kBAAC,OAAD;WAAK,WAAU;WAAf,UAAA,CACE,kBAAC,KAAD;YAAG,WAAU;YAAwB,UAAA6B,EAAU,SAAA;WAA0B,CAAA,GACzE,kBAAC,KAAD;YAAG,WAAU;YACV,UAAAA,EAAU,WAAA;WACV,CAAA,CACA;;UACL,kBAAC,OAAD;WAAK,WAAU;WACb,UAAA,kBAAC,OAAD;YAAK,WAAU;YAAf,UAAA,CACE,kBAACb,GAAD;aAAO,MAAM;aAAI,WAAU;YAAuB,CAAA,GAClD,kBAAC,QAAD,EAAA,UAAOD,EAAec,EAAU,QAAQ,EAAQ,CAAA,CAC7C;;UACF,CAAA;UACL,kBAAC,OAAD;WAAK,WAAU;WACb,UAAA,kBAAC,OAAD;YAAK,WAAU;YAAf,UAAA,CACE,kBAACC,GAAD;aAAK,MAAM;aAAI,WAAU;YAAuB,CAAA,GAChD,kBAAC,QAAD,EAAA,UAAOjB,EAAagB,EAAU,UAAU,EAAQ,CAAA,CAC7C;;UACF,CAAA;UACL,kBAAC,OAAD;WAAK,WAAU;WACb,UAAA,kBAAC,OAAD;YAAK,WAAU;YAAf,UAAA,CACE,kBAACX,GAAD;aAAY,MAAM;aAAI,WAAU;YAAuB,CAAA,GACvD,kBAAC,QAAD,EAAA,UAAOD,EAAeY,EAAU,IAAI,EAAQ,CAAA,CACzC;;UACF,CAAA;UACL,kBAAC,OAAD;WAAK,WAAU;WACZ,UAAAE,EAAmBF,EAAU,SAAS;UACpC,CAAA;SACF;;OACM,CAAA;MACT,CAAA;KACF,GArCKA,EAAU,EAqCf,CACP,CACE;IAEL,CAAA,IAAA,kBAACG,GAAD;KACE,cAAa;KACb,OAAOrD,EAAE,iCAAiC,qBAAqB;KAC/D,aACEmB,EAAa,SAAS,KAAKH,IACvBhB,EACE,+CACA,8DACF,IACAA,EACE,6CACA,2DACF;IAEP,CAAA;GAEA;;CACK,CAAA;AAEhB"}
|