@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.
Files changed (334) hide show
  1. package/dist/botlit/BotlitRoutes.d.ts +2 -0
  2. package/dist/botlit/BotlitRoutes.js +40 -37
  3. package/dist/botlit/BotlitRoutes.js.map +1 -1
  4. package/dist/botlit/BotmanorRoot.d.ts +3 -0
  5. package/dist/botlit/BotmanorRoot.js +1 -2
  6. package/dist/botlit/BotmanorRoot.js.map +1 -1
  7. package/dist/botlit/BotmanorRootInner.d.ts +3 -0
  8. package/dist/botlit/BotmanorRootInner.js +9 -10
  9. package/dist/botlit/BotmanorRootInner.js.map +1 -1
  10. package/dist/botlit/components/AgentApprovalPanel.d.ts +20 -0
  11. package/dist/botlit/components/AgentApprovalPanel.js +49 -50
  12. package/dist/botlit/components/AgentApprovalPanel.js.map +1 -1
  13. package/dist/botlit/components/AiOperationsPanel.d.ts +14 -0
  14. package/dist/botlit/components/AiOperationsPanel.js +253 -0
  15. package/dist/botlit/components/AiOperationsPanel.js.map +1 -0
  16. package/dist/botlit/components/AssistantChannelPanel.d.ts +3 -0
  17. package/dist/botlit/components/AssistantChannelPanel.js +12 -13
  18. package/dist/botlit/components/AssistantChannelPanel.js.map +1 -1
  19. package/dist/botlit/components/AssistantRuntimeSetupPanel.d.ts +4 -0
  20. package/dist/botlit/components/AssistantRuntimeSetupPanel.js +14 -14
  21. package/dist/botlit/components/AssistantRuntimeSetupPanel.js.map +1 -1
  22. package/dist/botlit/components/AssistantWebsitePanel.d.ts +5 -0
  23. package/dist/botlit/components/AssistantWebsitePanel.js +15 -16
  24. package/dist/botlit/components/AssistantWebsitePanel.js.map +1 -1
  25. package/dist/botlit/components/Badge.d.ts +9 -0
  26. package/dist/botlit/components/Badge.js +1 -2
  27. package/dist/botlit/components/Badge.js.map +1 -1
  28. package/dist/botlit/components/Button.d.ts +10 -0
  29. package/dist/botlit/components/Button.js +1 -2
  30. package/dist/botlit/components/Button.js.map +1 -1
  31. package/dist/botlit/components/Card.d.ts +16 -0
  32. package/dist/botlit/components/Card.js +1 -2
  33. package/dist/botlit/components/Card.js.map +1 -1
  34. package/dist/botlit/components/ChannelSelectorSheet.d.ts +23 -0
  35. package/dist/botlit/components/ChannelSelectorSheet.js +1 -2
  36. package/dist/botlit/components/ChannelSelectorSheet.js.map +1 -1
  37. package/dist/botlit/components/EmptyState.d.ts +12 -0
  38. package/dist/botlit/components/EmptyState.js +1 -2
  39. package/dist/botlit/components/EmptyState.js.map +1 -1
  40. package/dist/botlit/components/ErrorState.d.ts +10 -0
  41. package/dist/botlit/components/ErrorState.js +5 -6
  42. package/dist/botlit/components/ErrorState.js.map +1 -1
  43. package/dist/botlit/components/Input.d.ts +27 -0
  44. package/dist/botlit/components/Input.js +2 -3
  45. package/dist/botlit/components/Input.js.map +1 -1
  46. package/dist/botlit/components/KnowledgeSourceImportPanel.d.ts +3 -0
  47. package/dist/botlit/components/KnowledgeSourceImportPanel.js +12 -13
  48. package/dist/botlit/components/KnowledgeSourceImportPanel.js.map +1 -1
  49. package/dist/botlit/components/ModelRegistrationPanel.d.ts +5 -0
  50. package/dist/botlit/components/ModelRegistrationPanel.js +1 -2
  51. package/dist/botlit/components/ModelRegistrationPanel.js.map +1 -1
  52. package/dist/botlit/components/PageLayout.d.ts +12 -0
  53. package/dist/botlit/components/PageLayout.js +1 -2
  54. package/dist/botlit/components/PageLayout.js.map +1 -1
  55. package/dist/botlit/components/QuotaExhaustedDialog.d.ts +9 -0
  56. package/dist/botlit/components/QuotaExhaustedDialog.js +1 -2
  57. package/dist/botlit/components/QuotaExhaustedDialog.js.map +1 -1
  58. package/dist/botlit/components/RetentionStatusPanel.d.ts +2 -0
  59. package/dist/botlit/components/RetentionStatusPanel.js +18 -19
  60. package/dist/botlit/components/RetentionStatusPanel.js.map +1 -1
  61. package/dist/botlit/components/RouteLoader.d.ts +23 -0
  62. package/dist/botlit/components/RouteLoader.js +1 -2
  63. package/dist/botlit/components/RouteLoader.js.map +1 -1
  64. package/dist/botlit/components/VersionHistoryPanel.d.ts +12 -0
  65. package/dist/botlit/components/VersionHistoryPanel.js +23 -24
  66. package/dist/botlit/components/VersionHistoryPanel.js.map +1 -1
  67. package/dist/botlit/components/WorkspaceRequired.d.ts +18 -0
  68. package/dist/botlit/components/WorkspaceRequired.js +1 -2
  69. package/dist/botlit/components/WorkspaceRequired.js.map +1 -1
  70. package/dist/botlit/components/index.d.ts +14 -0
  71. package/dist/botlit/hooks/index.d.ts +36 -0
  72. package/dist/botlit/hooks/index.js +15 -13
  73. package/dist/botlit/hooks/internal/mutationInput.d.ts +56 -0
  74. package/dist/botlit/hooks/internal/mutationInput.js +1 -2
  75. package/dist/botlit/hooks/internal/mutationInput.js.map +1 -1
  76. package/dist/botlit/hooks/internal/workspaceGateway.d.ts +54 -0
  77. package/dist/botlit/hooks/internal/workspaceGateway.js +17 -19
  78. package/dist/botlit/hooks/internal/workspaceGateway.js.map +1 -1
  79. package/dist/botlit/hooks/useA2A.d.ts +104 -0
  80. package/dist/botlit/hooks/useA2A.js +45 -45
  81. package/dist/botlit/hooks/useA2A.js.map +1 -1
  82. package/dist/botlit/hooks/useAgentApprovals.d.ts +62 -0
  83. package/dist/botlit/hooks/useAgentApprovals.js +38 -39
  84. package/dist/botlit/hooks/useAgentApprovals.js.map +1 -1
  85. package/dist/botlit/hooks/useAgents.d.ts +105 -0
  86. package/dist/botlit/hooks/useAgents.js +53 -54
  87. package/dist/botlit/hooks/useAgents.js.map +1 -1
  88. package/dist/botlit/hooks/useAiOperations.d.ts +95 -0
  89. package/dist/botlit/hooks/useAiOperations.js +154 -0
  90. package/dist/botlit/hooks/useAiOperations.js.map +1 -0
  91. package/dist/botlit/hooks/useAssistantChannels.d.ts +16 -0
  92. package/dist/botlit/hooks/useAssistantChannels.js +1 -2
  93. package/dist/botlit/hooks/useAssistantChannels.js.map +1 -1
  94. package/dist/botlit/hooks/useAssistantRuntimeSetup.d.ts +17 -0
  95. package/dist/botlit/hooks/useAssistantRuntimeSetup.js +1 -2
  96. package/dist/botlit/hooks/useAssistantRuntimeSetup.js.map +1 -1
  97. package/dist/botlit/hooks/useAssistantWebsites.d.ts +18 -0
  98. package/dist/botlit/hooks/useAssistantWebsites.js +1 -2
  99. package/dist/botlit/hooks/useAssistantWebsites.js.map +1 -1
  100. package/dist/botlit/hooks/useBotWorkflow.d.ts +22 -0
  101. package/dist/botlit/hooks/useBotWorkflow.js +1 -2
  102. package/dist/botlit/hooks/useBotWorkflow.js.map +1 -1
  103. package/dist/botlit/hooks/useBots.d.ts +68 -0
  104. package/dist/botlit/hooks/useBots.js +32 -33
  105. package/dist/botlit/hooks/useBots.js.map +1 -1
  106. package/dist/botlit/hooks/useBuckets.d.ts +57 -0
  107. package/dist/botlit/hooks/useBuckets.js +38 -39
  108. package/dist/botlit/hooks/useBuckets.js.map +1 -1
  109. package/dist/botlit/hooks/useChannels.d.ts +87 -0
  110. package/dist/botlit/hooks/useChannels.js +73 -73
  111. package/dist/botlit/hooks/useChannels.js.map +1 -1
  112. package/dist/botlit/hooks/useConversations.d.ts +42 -0
  113. package/dist/botlit/hooks/useConversations.js +1 -2
  114. package/dist/botlit/hooks/useConversations.js.map +1 -1
  115. package/dist/botlit/hooks/useExecutions.d.ts +87 -0
  116. package/dist/botlit/hooks/useExecutions.js +37 -37
  117. package/dist/botlit/hooks/useExecutions.js.map +1 -1
  118. package/dist/botlit/hooks/useKnowledgeBases.d.ts +79 -0
  119. package/dist/botlit/hooks/useKnowledgeBases.js +40 -39
  120. package/dist/botlit/hooks/useKnowledgeBases.js.map +1 -1
  121. package/dist/botlit/hooks/useKnowledgeSourceImports.d.ts +21 -0
  122. package/dist/botlit/hooks/useKnowledgeSourceImports.js +1 -2
  123. package/dist/botlit/hooks/useKnowledgeSourceImports.js.map +1 -1
  124. package/dist/botlit/hooks/useLLMProviders.d.ts +66 -0
  125. package/dist/botlit/hooks/useLLMProviders.js +25 -26
  126. package/dist/botlit/hooks/useLLMProviders.js.map +1 -1
  127. package/dist/botlit/hooks/useMCPServers.d.ts +71 -0
  128. package/dist/botlit/hooks/useMCPServers.js +40 -38
  129. package/dist/botlit/hooks/useMCPServers.js.map +1 -1
  130. package/dist/botlit/hooks/usePolicies.d.ts +60 -0
  131. package/dist/botlit/hooks/usePolicies.js +49 -49
  132. package/dist/botlit/hooks/usePolicies.js.map +1 -1
  133. package/dist/botlit/hooks/usePromptTemplates.d.ts +88 -0
  134. package/dist/botlit/hooks/usePromptTemplates.js +57 -57
  135. package/dist/botlit/hooks/usePromptTemplates.js.map +1 -1
  136. package/dist/botlit/hooks/useRetention.d.ts +26 -0
  137. package/dist/botlit/hooks/useRetention.js +3 -3
  138. package/dist/botlit/hooks/useRetention.js.map +1 -1
  139. package/dist/botlit/hooks/useRetrievalProfiles.d.ts +75 -0
  140. package/dist/botlit/hooks/useRetrievalProfiles.js +47 -47
  141. package/dist/botlit/hooks/useRetrievalProfiles.js.map +1 -1
  142. package/dist/botlit/hooks/useSkills.d.ts +64 -0
  143. package/dist/botlit/hooks/useSkills.js +53 -53
  144. package/dist/botlit/hooks/useSkills.js.map +1 -1
  145. package/dist/botlit/hooks/useStore.d.ts +112 -0
  146. package/dist/botlit/hooks/useStore.js +55 -55
  147. package/dist/botlit/hooks/useStore.js.map +1 -1
  148. package/dist/botlit/hooks/useUserPlatformConnection.d.ts +80 -0
  149. package/dist/botlit/hooks/useUserPlatformConnection.js +19 -19
  150. package/dist/botlit/hooks/useUserPlatformConnection.js.map +1 -1
  151. package/dist/botlit/index.d.ts +16 -0
  152. package/dist/botlit/index.js +12 -11
  153. package/dist/botlit/pages/A2AAgentDetailPage.d.ts +6 -0
  154. package/dist/botlit/pages/A2AAgentDetailPage.js +171 -178
  155. package/dist/botlit/pages/A2AAgentDetailPage.js.map +1 -1
  156. package/dist/botlit/pages/A2ARegistryPage.d.ts +2 -0
  157. package/dist/botlit/pages/A2ARegistryPage.js +25 -26
  158. package/dist/botlit/pages/A2ARegistryPage.js.map +1 -1
  159. package/dist/botlit/pages/AgentApprovalsPage.d.ts +2 -0
  160. package/dist/botlit/pages/AgentApprovalsPage.js +32 -33
  161. package/dist/botlit/pages/AgentApprovalsPage.js.map +1 -1
  162. package/dist/botlit/pages/AgentBuilderPage.d.ts +2 -0
  163. package/dist/botlit/pages/AgentBuilderPage.js +59 -60
  164. package/dist/botlit/pages/AgentBuilderPage.js.map +1 -1
  165. package/dist/botlit/pages/AgentDetailPage.d.ts +2 -0
  166. package/dist/botlit/pages/AgentDetailPage.js +202 -190
  167. package/dist/botlit/pages/AgentDetailPage.js.map +1 -1
  168. package/dist/botlit/pages/AgentsListPage.d.ts +2 -0
  169. package/dist/botlit/pages/AgentsListPage.js +71 -72
  170. package/dist/botlit/pages/AgentsListPage.js.map +1 -1
  171. package/dist/botlit/pages/AiOperationsPage.d.ts +2 -0
  172. package/dist/botlit/pages/AiOperationsPage.js +165 -0
  173. package/dist/botlit/pages/AiOperationsPage.js.map +1 -0
  174. package/dist/botlit/pages/BotChannelsTab.d.ts +7 -0
  175. package/dist/botlit/pages/BotChannelsTab.js +120 -122
  176. package/dist/botlit/pages/BotChannelsTab.js.map +1 -1
  177. package/dist/botlit/pages/BotDetailPage.d.ts +7 -0
  178. package/dist/botlit/pages/BotDetailPage.js +246 -237
  179. package/dist/botlit/pages/BotDetailPage.js.map +1 -1
  180. package/dist/botlit/pages/BotWorkflowTab.d.ts +11 -0
  181. package/dist/botlit/pages/BotWorkflowTab.js +20 -21
  182. package/dist/botlit/pages/BotWorkflowTab.js.map +1 -1
  183. package/dist/botlit/pages/BotsListPage.d.ts +2 -0
  184. package/dist/botlit/pages/BotsListPage.js +52 -53
  185. package/dist/botlit/pages/BotsListPage.js.map +1 -1
  186. package/dist/botlit/pages/BucketsPage.d.ts +2 -0
  187. package/dist/botlit/pages/BucketsPage.js +260 -261
  188. package/dist/botlit/pages/BucketsPage.js.map +1 -1
  189. package/dist/botlit/pages/ChannelDetailPage.d.ts +6 -0
  190. package/dist/botlit/pages/ChannelDetailPage.js +97 -96
  191. package/dist/botlit/pages/ChannelDetailPage.js.map +1 -1
  192. package/dist/botlit/pages/ChannelRoutesPage.d.ts +2 -0
  193. package/dist/botlit/pages/ChannelRoutesPage.js +23 -24
  194. package/dist/botlit/pages/ChannelRoutesPage.js.map +1 -1
  195. package/dist/botlit/pages/ChannelsPage.d.ts +2 -0
  196. package/dist/botlit/pages/ChannelsPage.js +44 -45
  197. package/dist/botlit/pages/ChannelsPage.js.map +1 -1
  198. package/dist/botlit/pages/ChatPage.d.ts +1 -0
  199. package/dist/botlit/pages/ChatPage.js +10 -11
  200. package/dist/botlit/pages/ChatPage.js.map +1 -1
  201. package/dist/botlit/pages/ConversationDetailPage.d.ts +2 -0
  202. package/dist/botlit/pages/ConversationsPage.d.ts +2 -0
  203. package/dist/botlit/pages/DashboardPage.d.ts +2 -0
  204. package/dist/botlit/pages/DashboardPage.js +37 -38
  205. package/dist/botlit/pages/DashboardPage.js.map +1 -1
  206. package/dist/botlit/pages/ExecutionDetailPage.d.ts +2 -0
  207. package/dist/botlit/pages/ExecutionDetailPage.js +47 -48
  208. package/dist/botlit/pages/ExecutionDetailPage.js.map +1 -1
  209. package/dist/botlit/pages/ExecutionsPage.d.ts +2 -0
  210. package/dist/botlit/pages/ExecutionsPage.js +72 -70
  211. package/dist/botlit/pages/ExecutionsPage.js.map +1 -1
  212. package/dist/botlit/pages/InstalledPackagesPage.d.ts +2 -0
  213. package/dist/botlit/pages/InstalledPackagesPage.js +77 -78
  214. package/dist/botlit/pages/InstalledPackagesPage.js.map +1 -1
  215. package/dist/botlit/pages/KnowledgeBaseDetailPage.d.ts +6 -0
  216. package/dist/botlit/pages/KnowledgeBaseDetailPage.js +171 -181
  217. package/dist/botlit/pages/KnowledgeBaseDetailPage.js.map +1 -1
  218. package/dist/botlit/pages/KnowledgeBasesPage.d.ts +2 -0
  219. package/dist/botlit/pages/KnowledgeBasesPage.js +30 -31
  220. package/dist/botlit/pages/KnowledgeBasesPage.js.map +1 -1
  221. package/dist/botlit/pages/MCPServerDetailPage.d.ts +6 -0
  222. package/dist/botlit/pages/MCPServerDetailPage.js +82 -83
  223. package/dist/botlit/pages/MCPServerDetailPage.js.map +1 -1
  224. package/dist/botlit/pages/MCPServersPage.d.ts +2 -0
  225. package/dist/botlit/pages/MCPServersPage.js +54 -55
  226. package/dist/botlit/pages/MCPServersPage.js.map +1 -1
  227. package/dist/botlit/pages/PoliciesPage.d.ts +2 -0
  228. package/dist/botlit/pages/PoliciesPage.js +25 -26
  229. package/dist/botlit/pages/PoliciesPage.js.map +1 -1
  230. package/dist/botlit/pages/PolicyDetailPage.d.ts +6 -0
  231. package/dist/botlit/pages/PolicyDetailPage.js +257 -259
  232. package/dist/botlit/pages/PolicyDetailPage.js.map +1 -1
  233. package/dist/botlit/pages/PromptStudioPage.d.ts +2 -0
  234. package/dist/botlit/pages/PromptStudioPage.js +35 -35
  235. package/dist/botlit/pages/PromptStudioPage.js.map +1 -1
  236. package/dist/botlit/pages/PromptTemplateDetailPage.d.ts +6 -0
  237. package/dist/botlit/pages/PromptTemplateDetailPage.js +363 -362
  238. package/dist/botlit/pages/PromptTemplateDetailPage.js.map +1 -1
  239. package/dist/botlit/pages/PromptTemplatesPage.d.ts +2 -0
  240. package/dist/botlit/pages/PromptTemplatesPage.js +26 -27
  241. package/dist/botlit/pages/PromptTemplatesPage.js.map +1 -1
  242. package/dist/botlit/pages/RetrievalProfileDetailPage.d.ts +6 -0
  243. package/dist/botlit/pages/RetrievalProfileDetailPage.js +150 -158
  244. package/dist/botlit/pages/RetrievalProfileDetailPage.js.map +1 -1
  245. package/dist/botlit/pages/RetrievalProfilesPage.d.ts +2 -0
  246. package/dist/botlit/pages/RetrievalProfilesPage.js +24 -25
  247. package/dist/botlit/pages/RetrievalProfilesPage.js.map +1 -1
  248. package/dist/botlit/pages/SettingsPage.d.ts +2 -0
  249. package/dist/botlit/pages/SettingsPage.js +124 -125
  250. package/dist/botlit/pages/SettingsPage.js.map +1 -1
  251. package/dist/botlit/pages/SkillDetailPage.d.ts +6 -0
  252. package/dist/botlit/pages/SkillDetailPage.js +216 -217
  253. package/dist/botlit/pages/SkillDetailPage.js.map +1 -1
  254. package/dist/botlit/pages/SkillsPage.d.ts +2 -0
  255. package/dist/botlit/pages/SkillsPage.js +24 -25
  256. package/dist/botlit/pages/SkillsPage.js.map +1 -1
  257. package/dist/botlit/pages/StorePackageDetailPage.d.ts +2 -0
  258. package/dist/botlit/pages/StorePackageDetailPage.js +38 -39
  259. package/dist/botlit/pages/StorePackageDetailPage.js.map +1 -1
  260. package/dist/botlit/pages/StorePage.d.ts +2 -0
  261. package/dist/botlit/pages/StorePage.js +135 -136
  262. package/dist/botlit/pages/StorePage.js.map +1 -1
  263. package/dist/botlit/pages/index.d.ts +39 -0
  264. package/dist/botlit/permissions/PermissionRequired.d.ts +20 -0
  265. package/dist/botlit/permissions/PermissionRequired.js +10 -11
  266. package/dist/botlit/permissions/PermissionRequired.js.map +1 -1
  267. package/dist/botlit/permissions/botmanorPermissions.d.ts +82 -0
  268. package/dist/botlit/permissions/botmanorPermissions.js +1 -2
  269. package/dist/botlit/permissions/botmanorPermissions.js.map +1 -1
  270. package/dist/botlit/permissions/index.d.ts +7 -0
  271. package/dist/botlit/permissions/index.js +4 -3
  272. package/dist/botlit/permissions/useBotmanorPermissions.d.ts +41 -0
  273. package/dist/botlit/permissions/useBotmanorPermissions.js +1 -2
  274. package/dist/botlit/permissions/useBotmanorPermissions.js.map +1 -1
  275. package/dist/botlit/providers/BotlitProvider.d.ts +14 -0
  276. package/dist/botlit/providers/BotlitProvider.js +3 -3
  277. package/dist/botlit/providers/BotlitProvider.js.map +1 -1
  278. package/dist/botlit/store/botlitStore.d.ts +85 -0
  279. package/dist/botlit/store/botlitStore.js +1 -2
  280. package/dist/botlit/store/botlitStore.js.map +1 -1
  281. package/dist/botlit/store/renamedKeyStorage.d.ts +13 -0
  282. package/dist/botlit/store/renamedKeyStorage.js +1 -2
  283. package/dist/botlit/store/renamedKeyStorage.js.map +1 -1
  284. package/dist/botlit/types/index.d.ts +1008 -0
  285. package/dist/botlit/utils/cn.d.ts +2 -0
  286. package/dist/botlit/utils/cn.js +1 -2
  287. package/dist/botlit/utils/cn.js.map +1 -1
  288. package/dist/botlit/utils/embedding-models.d.ts +9 -0
  289. package/dist/botlit/utils/embedding-models.js +1 -2
  290. package/dist/botlit/utils/embedding-models.js.map +1 -1
  291. package/dist/botlit/utils/errors.d.ts +19 -0
  292. package/dist/botlit/utils/errors.js +1 -2
  293. package/dist/botlit/utils/errors.js.map +1 -1
  294. package/dist/botlit/utils/formatters.d.ts +38 -0
  295. package/dist/botlit/utils/formatters.js +0 -1
  296. package/dist/botlit/utils/formatters.js.map +1 -1
  297. package/dist/botlit/utils/navigation.d.ts +19 -0
  298. package/dist/botlit/utils/navigation.js +1 -2
  299. package/dist/botlit/utils/navigation.js.map +1 -1
  300. package/dist/botlit/utils/policyConfig.d.ts +68 -0
  301. package/dist/botlit/utils/policyConfig.js +2 -3
  302. package/dist/botlit/utils/policyConfig.js.map +1 -1
  303. package/dist/botlit/utils/unions.d.ts +25 -0
  304. package/dist/botlit/utils/unions.js +1 -2
  305. package/dist/botlit/utils/unions.js.map +1 -1
  306. package/dist/dev/App.d.ts +2 -0
  307. package/dist/dev/main.d.ts +0 -0
  308. package/dist/generated/global-operations.d.ts +197 -0
  309. package/dist/generated/global-operations.js +1 -2
  310. package/dist/generated/global-operations.js.map +1 -1
  311. package/dist/generated/global-types.d.ts +27678 -0
  312. package/dist/generated/global-types.js +1 -2
  313. package/dist/generated/global-types.js.map +1 -1
  314. package/dist/generated/wspace-operations.d.ts +5489 -0
  315. package/dist/generated/wspace-operations.js +172 -75
  316. package/dist/generated/wspace-operations.js.map +1 -1
  317. package/dist/generated/wspace-types.d.ts +152017 -0
  318. package/dist/generated/wspace-types.js +6 -5
  319. package/dist/generated/wspace-types.js.map +1 -1
  320. package/dist/index.d.ts +5 -0
  321. package/dist/shared/hooks/useTr.d.ts +16 -0
  322. package/dist/shared/hooks/useTr.js +1 -2
  323. package/dist/shared/hooks/useTr.js.map +1 -1
  324. package/dist/stories/Badge.stories.d.ts +11 -0
  325. package/dist/stories/Button.stories.d.ts +13 -0
  326. package/dist/stories/EmptyState.stories.d.ts +8 -0
  327. package/dist/stories/StatusBadge.stories.d.ts +9 -0
  328. package/dist/test/fixtures.d.ts +39 -0
  329. package/dist/test/happydom.d.ts +1 -0
  330. package/dist/test/renderPage.d.ts +18 -0
  331. package/dist/test/setup.d.ts +9 -0
  332. package/dist/utils/nativeBridge.d.ts +2 -0
  333. package/dist/utils/nativeBridge.js +1 -2
  334. 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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"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const ExecutionDetailPage: FC;
@@ -1,24 +1,24 @@
1
1
  import { useBotlit as e } from "../providers/BotlitProvider.js";
2
- import { formatCurrency as t, formatDuration as n, formatNumber as r, formatRelativeTime as i } from "../utils/formatters.js";
3
- import { BOTMANOR_PERMISSIONS as a } from "../permissions/botmanorPermissions.js";
4
- import { BotmanorPermissionGate as o } from "../permissions/useBotmanorPermissions.js";
5
- import { PageLayout as s } from "../components/PageLayout.js";
6
- import { Button as c } from "../components/Button.js";
7
- import "../permissions/index.js";
8
- import { Card as l, CardContent as u, CardDescription as d, CardHeader as f, CardTitle as p } from "../components/Card.js";
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 { isNative as h, nativeCopyText as g, nativeToast as _ } from "../../utils/nativeBridge.js";
11
- import { EmptyState as v } from "../components/EmptyState.js";
12
- import { ErrorState as y } from "../components/ErrorState.js";
13
- import { toUnion as b } from "../utils/unions.js";
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
- //#region src/botlit/pages/ExecutionDetailPage.tsx
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 } = S(C), [G, K] = x();
65
- if (L) return /* @__PURE__ */ T(s, {
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(s, {
69
+ if (U) return /* @__PURE__ */ T(o, {
70
70
  title: "Execution",
71
- children: /* @__PURE__ */ T(y, {
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(s, {
77
+ if (!P) return /* @__PURE__ */ T(o, {
78
78
  title: "Execution Not Found",
79
- children: /* @__PURE__ */ T(v, {
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(c, {
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: b(P.type, B, "AGENT"),
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(s, {
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(c, {
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(c, {
137
+ children: [/* @__PURE__ */ T(p, {
138
138
  variant: "outline",
139
139
  leftIcon: /* @__PURE__ */ T(M, { size: 16 }),
140
140
  onClick: () => {
141
- g(P.id), h() && _("Copied");
141
+ n(P.id), t() && r("Copied");
142
142
  },
143
143
  children: "Copy ID"
144
- }), /* @__PURE__ */ T(o, {
145
- permission: a.EXECUTION_CREATE,
146
- children: /* @__PURE__ */ T(c, {
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(l, {
164
+ /* @__PURE__ */ T(c, {
165
165
  treatment: "glass",
166
166
  glow: !0,
167
- children: /* @__PURE__ */ E(u, {
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 ? "—" : n(P.duration)
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(l, {
182
+ /* @__PURE__ */ T(c, {
183
183
  treatment: "metric",
184
- children: /* @__PURE__ */ E(u, {
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: r(P.tokensUsed)
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(l, {
199
+ /* @__PURE__ */ T(c, {
200
200
  treatment: "metric",
201
- children: /* @__PURE__ */ E(u, {
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: t(P.cost)
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(l, {
216
+ /* @__PURE__ */ T(c, {
217
217
  treatment: "metric",
218
- children: /* @__PURE__ */ E(u, {
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(l, { children: [/* @__PURE__ */ E(f, { children: [/* @__PURE__ */ E(p, {
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(d, { children: P.errorCode })] }), /* @__PURE__ */ E(u, {
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(l, { children: [/* @__PURE__ */ T(f, { children: /* @__PURE__ */ T(p, { children: "Run Details" }) }), /* @__PURE__ */ T(u, { children: /* @__PURE__ */ E("div", {
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: i(P.createdAt)
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: i(P.completedAt)
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(l, { children: [/* @__PURE__ */ T(f, { children: /* @__PURE__ */ T(p, { children: "Input" }) }), /* @__PURE__ */ T(u, { children: /* @__PURE__ */ T("pre", {
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(l, { children: [/* @__PURE__ */ T(f, { children: /* @__PURE__ */ T(p, { children: "Output" }) }), /* @__PURE__ */ T(u, { children: P.output ? /* @__PURE__ */ T("pre", {
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(l, { children: [/* @__PURE__ */ T(f, { children: /* @__PURE__ */ T(p, { children: "Metadata" }) }), /* @__PURE__ */ T(u, { children: /* @__PURE__ */ T("pre", {
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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"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const ExecutionsPage: FC;