@burdenoff/microfe-botmanor 2026.1108.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 +24 -25
  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 +54 -55
  15. package/dist/botlit/components/AiOperationsPanel.js.map +1 -1
  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 +1 -2
  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 -14
  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 +20 -19
  90. package/dist/botlit/hooks/useAiOperations.js.map +1 -1
  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 +83 -84
  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 +52 -53
  173. package/dist/botlit/pages/AiOperationsPage.js.map +1 -1
  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 +353 -358
  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 +64 -60
  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 +1 -2
  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":"AgentsListPage.js","names":[],"sources":["../../../src/botlit/pages/AgentsListPage.tsx"],"sourcesContent":["/**\n * Agents List Page\n * @module botlit/pages\n */\n\nimport type { ChangeEvent, FC } from 'react';\nimport { useState } from 'react';\nimport { useParams, Link } from 'react-router';\nimport {\n Bot,\n Plus,\n Search,\n Grid3X3,\n List,\n MoreVertical,\n MessageSquare,\n Trash2,\n Settings,\n Play,\n ShieldCheck,\n} from 'lucide-react';\nimport { toast } from 'sonner';\nimport { isNative, nativeConfirm, nativeImpact, nativeNotify } from '../../utils/nativeBridge';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose, GlassCard } 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 { StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useAgents, useDeleteAgent, type AgentRecord } from '../hooks/useAgents';\nimport { useBotlitStore } from '../store/botlitStore';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatRelativeTime, formatNumber } from '../utils/formatters';\nimport { cn } from '../utils/cn';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const AgentsListPage: FC = () => {\n const t = useTr();\n const { botId } = useParams();\n const { navigateTo, getPath } = useBotlit();\n const { data: agents, loading, error, refetch } = useAgents();\n const [deleteAgent] = useDeleteAgent();\n const { viewMode, setViewMode, agentFilter, updateAgentFilter } = useBotlitStore();\n const [menuOpen, setMenuOpen] = useState<string | null>(null);\n\n const handleSearch = (e: ChangeEvent<HTMLInputElement>) => {\n updateAgentFilter({ search: e.target.value });\n };\n\n const handleDelete = async (agent: { id: string; name: string }) => {\n const confirmed = await nativeConfirm({\n title: t('botlit.agentsList.delete.title', 'Delete agent?'),\n message: t(\n 'botlit.agentsList.delete.message',\n 'Are you sure you want to delete \"{{name}}\"?',\n {\n name: agent.name,\n }\n ),\n okButtonTitle: t('botlit.agentsList.delete.okButton', 'Delete'),\n cancelButtonTitle: t('botlit.agentsList.delete.cancelButton', 'Cancel'),\n });\n const ok =\n confirmed === null\n ? confirm(\n t('botlit.agentsList.delete.message', 'Are you sure you want to delete \"{{name}}\"?', {\n name: agent.name,\n })\n )\n : confirmed;\n if (ok) {\n nativeImpact('medium');\n try {\n await deleteAgent(agent.id);\n toast.success(\n t('botlit.agentsList.delete.success', 'Agent \"{{name}}\" deleted successfully', {\n name: agent.name,\n })\n );\n if (isNative()) void nativeNotify('success');\n } catch (err: unknown) {\n const message =\n err instanceof Error\n ? err.message\n : t('botlit.agentsList.delete.error', 'Failed to delete agent');\n toast.error(message);\n if (isNative()) void nativeNotify('error');\n }\n }\n setMenuOpen(null);\n };\n\n const filteredAgents = agents.filter((agent) => {\n if (agentFilter.search) {\n const search = agentFilter.search.toLowerCase();\n return (\n agent.name.toLowerCase().includes(search) ||\n (agent.description?.toLowerCase().includes(search) ?? false)\n );\n }\n return true;\n });\n\n return (\n <PageLayout\n title={\n botId\n ? t('botlit.agentsList.titleBot', 'Bot Agents')\n : t('botlit.agentsList.title', 'All Agents')\n }\n description={\n botId\n ? t('botlit.agentsList.descriptionBot', 'Manage agents for this bot')\n : t('botlit.agentsList.description', 'View and manage all your AI agents')\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n leftIcon={<ShieldCheck size={16} />}\n onClick={() => navigateTo('agents/approvals')}\n >\n {t('botlit.agentsList.actions.approvals', 'Approvals')}\n </Button>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo(botId ? `bots/${botId}/agents/new` : 'agents/new')}\n >\n {t('botlit.agentsList.actions.createAgent', 'Create Agent')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Bot size={18} />}>\n {t(\n 'botlit.agentsList.purpose',\n 'Agents are the reasoning workers behind your bots — each one bundles a model, a system prompt, tools and knowledge into a callable AI. Build an agent here to handle a specific job (answer support questions, summarise documents, run a workflow), then test it in chat and connect it to a bot or channel.'\n )}\n </PagePurpose>\n\n {/* Summary */}\n {agents.length > 0 ? (\n <div className=\"grid grid-cols-2 gap-4 sm:grid-cols-3\">\n <GlassCard treatment=\"glass\" glow className=\"p-4\">\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentsList.summary.total', 'Total agents')}\n </p>\n <p className=\"mt-1 text-2xl font-semibold tabular-nums text-text-primary\">\n {agents.length}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentsList.summary.active', 'Active')}\n </p>\n <p className=\"mt-1 text-2xl font-semibold tabular-nums text-text-primary\">\n {agents.filter((agent) => agent.status === 'ACTIVE').length}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"col-span-2 p-4 sm:col-span-1\">\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentsList.summary.executions', 'Total executions')}\n </p>\n <p className=\"mt-1 text-2xl font-semibold tabular-nums text-text-primary\">\n {formatNumber(agents.reduce((sum, agent) => sum + (agent.executionCount ?? 0), 0))}\n </p>\n </GlassCard>\n </div>\n ) : null}\n\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"relative flex-1 max-w-md\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder={t('botlit.agentsList.searchPlaceholder', 'Search agents...')}\n value={agentFilter.search || ''}\n onChange={handleSearch}\n className=\"pl-9\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n variant={viewMode === 'grid' ? 'secondary' : 'ghost'}\n size=\"icon\"\n onClick={() => setViewMode('grid')}\n >\n <Grid3X3 size={18} />\n </Button>\n <Button\n variant={viewMode === 'list' ? 'secondary' : 'ghost'}\n size=\"icon\"\n onClick={() => setViewMode('list')}\n >\n <List size={18} />\n </Button>\n </div>\n </div>\n\n {/* Content */}\n {loading ? (\n <div\n className={cn(\n 'gap-4',\n viewMode === 'grid'\n ? 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3'\n : 'flex flex-col'\n )}\n >\n {[1, 2, 3, 4, 5, 6].map((i) => (\n <div\n key={i}\n className=\"h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"agents\" error={error} onRetry={() => void refetch()} />\n ) : filteredAgents.length > 0 ? (\n viewMode === 'grid' ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {filteredAgents.map((agent: AgentRecord) => (\n <Card\n key={agent.id}\n className=\"group hover:shadow-md transition-shadow cursor-pointer relative\"\n onClick={() => navigateTo(`agents/${agent.id}`)}\n >\n <CardContent className=\"pt-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-4xl\">🤖</span>\n <div>\n <h3 className=\"font-semibold text-text-primary\">{agent.name}</h3>\n <div className=\"flex items-center gap-2 mt-1\">\n <StatusBadge status={agent.status} />\n </div>\n </div>\n </div>\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"opacity-0 group-hover:opacity-100 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation();\n setMenuOpen(menuOpen === agent.id ? null : agent.id);\n }}\n >\n <MoreVertical size={16} />\n </Button>\n {menuOpen === agent.id && (\n <div className=\"absolute right-0 top-full mt-1 w-48 bg-popover border border-border-subtle rounded-md shadow-lg z-10\">\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_EXECUTE}>\n <button\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2\"\n onClick={(e) => {\n e.stopPropagation();\n navigateTo(`agents/${agent.id}/chat`);\n setMenuOpen(null);\n }}\n >\n <Play size={16} />\n {t('botlit.agentsList.menu.testAgent', 'Test Agent')}\n </button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <button\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2\"\n onClick={(e) => {\n e.stopPropagation();\n navigateTo(`agents/${agent.id}/edit`);\n setMenuOpen(null);\n }}\n >\n <Settings size={16} />\n {t('botlit.agentsList.menu.editAgent', 'Edit Agent')}\n </button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_DELETE}>\n <button\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-accent text-status-error-text flex items-center gap-2\"\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(agent);\n }}\n >\n <Trash2 size={16} />\n {t('botlit.agentsList.menu.delete', 'Delete')}\n </button>\n </BotmanorPermissionGate>\n </div>\n )}\n </div>\n </div>\n <p className=\"mt-3 text-sm text-text-secondary line-clamp-2\">\n {agent.description}\n </p>\n <div className=\"mt-4 flex items-center gap-4 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <MessageSquare size={14} />\n {formatNumber(agent.executionCount)}{' '}\n {t('botlit.agentsList.card.executions', 'executions')}\n </span>\n </div>\n <div className=\"mt-3 pt-3 border-t border-border-subtle flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary\">\n {t('botlit.agentsList.card.created', 'Created')}{' '}\n {formatRelativeTime(agent.createdAt)}\n </span>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_EXECUTE}>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n leftIcon={<Play size={14} />}\n onClick={(e) => {\n e.stopPropagation();\n navigateTo(`agents/${agent.id}/chat`);\n }}\n >\n {t('botlit.agentsList.card.test', 'Test')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n ) : (\n <div className=\"space-y-2\">\n {filteredAgents.map((agent: AgentRecord) => (\n <Card\n key={agent.id}\n className=\"hover:shadow-md transition-shadow cursor-pointer\"\n onClick={() => navigateTo(`agents/${agent.id}`)}\n >\n <CardContent className=\"py-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <span className=\"text-3xl\">🤖</span>\n <div>\n <div className=\"flex items-center gap-2\">\n <h3 className=\"font-semibold text-text-primary\">{agent.name}</h3>\n <StatusBadge status={agent.status} />\n </div>\n <p className=\"text-sm text-text-secondary line-clamp-1\">\n {agent.description}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-text-secondary\">\n <span>{formatNumber(agent.executionCount)} executions</span>\n <span>{formatRelativeTime(agent.createdAt)}</span>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_EXECUTE}>\n <Button variant=\"outline\" size=\"sm\" leftIcon={<Play size={14} />}>\n <Link to={getPath(`agents/${agent.id}/chat`)}>Test</Link>\n </Button>\n </BotmanorPermissionGate>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )\n ) : (\n <EmptyState\n illustration=\"empty-agents\"\n title={t('botlit.agentsList.empty.title', 'No agents yet')}\n description={t(\n 'botlit.agentsList.empty.description',\n 'Create your first AI agent to start building intelligent automations.'\n )}\n action={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo(botId ? `bots/${botId}/agents/new` : 'agents/new')}\n >\n {t('botlit.agentsList.actions.createAgent', 'Create Agent')}\n </Button>\n </BotmanorPermissionGate>\n }\n />\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAuCA,IAAa,UAA2B;CACtC,IAAM,IAAI,GAAO,EACX,EAAE,aAAU,IAAW,EACvB,EAAE,eAAY,eAAY,GAAW,EACrC,EAAE,MAAM,GAAQ,YAAS,UAAO,eAAY,GAAW,EACvD,CAAC,KAAe,GAAgB,EAChC,EAAE,aAAU,gBAAa,gBAAa,yBAAsB,GAAgB,EAC5E,CAAC,GAAU,KAAe,EAAwB,KAAK,EAEvD,MAAgB,MAAqC;AACzD,IAAkB,EAAE,QAAQ,EAAE,OAAO,OAAO,CAAC;IAGzC,KAAe,OAAO,MAAwC;EAClE,IAAM,IAAY,MAAM,EAAc;GACpC,OAAO,EAAE,kCAAkC,gBAAgB;GAC3D,SAAS,EACP,oCACA,iDACA,EACE,MAAM,EAAM,MACb,CACF;GACD,eAAe,EAAE,qCAAqC,SAAS;GAC/D,mBAAmB,EAAE,yCAAyC,SAAS;GACxE,CAAC;AASF,MAPE,MAAc,OACV,QACE,EAAE,oCAAoC,iDAA+C,EACnF,MAAM,EAAM,MACb,CAAC,CACH,GACD,GACE;AACN,KAAa,SAAS;AACtB,OAAI;AAOF,IANA,MAAM,EAAY,EAAM,GAAG,EAC3B,EAAM,QACJ,EAAE,oCAAoC,2CAAyC,EAC7E,MAAM,EAAM,MACb,CAAC,CACH,EACG,GAAU,IAAO,EAAa,UAAU;YACrC,GAAc;IACrB,IAAM,IACJ,aAAe,QACX,EAAI,UACJ,EAAE,kCAAkC,yBAAyB;AAEnE,IADA,EAAM,MAAM,EAAQ,EAChB,GAAU,IAAO,EAAa,QAAQ;;;AAG9C,IAAY,KAAK;IAGb,IAAiB,EAAO,QAAQ,MAAU;AAC9C,MAAI,EAAY,QAAQ;GACtB,IAAM,IAAS,EAAY,OAAO,aAAa;AAC/C,UACE,EAAM,KAAK,aAAa,CAAC,SAAS,EAAO,KACxC,EAAM,aAAa,aAAa,CAAC,SAAS,EAAO,IAAI;;AAG1D,SAAO;GACP;AAEF,QACE,kBAAC,GAAD;EACE,OACE,IACI,EAAE,8BAA8B,aAAa,GAC7C,EAAE,2BAA2B,aAAa;EAEhD,aACE,IACI,EAAE,oCAAoC,6BAA6B,GACnE,EAAE,iCAAiC,qCAAqC;EAE9E,SACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD;IACE,SAAQ;IACR,UAAU,kBAAC,GAAD,EAAa,MAAM,IAAM,CAAA;IACnC,eAAe,EAAW,mBAAmB;cAE5C,EAAE,uCAAuC,YAAY;IAC/C,CAAA,EACT,kBAAC,GAAD;IAAwB,YAAY,EAAqB;cACvD,kBAAC,GAAD;KACE,UAAU,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;KAC5B,eAAe,EAAW,IAAQ,QAAQ,EAAM,eAAe,aAAa;eAE3E,EAAE,yCAAyC,eAAe;KACpD,CAAA;IACc,CAAA,CACrB;;YAGR,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KAAa,MAAM,kBAAC,IAAD,EAAK,MAAM,IAAM,CAAA;eACjC,EACC,6BACA,gTACD;KACW,CAAA;IAGb,EAAO,SAAS,IACf,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAW,WAAU;OAAQ,MAAA;OAAK,WAAU;iBAA5C,CACE,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAE,mCAAmC,eAAe;QACnD,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAO;QACN,CAAA,CACM;;MACZ,kBAAC,GAAD;OAAW,WAAU;OAAS,WAAU;iBAAxC,CACE,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAE,oCAAoC,SAAS;QAC9C,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAO,QAAQ,MAAU,EAAM,WAAW,SAAS,CAAC;QACnD,CAAA,CACM;;MACZ,kBAAC,GAAD;OAAW,WAAU;OAAS,WAAU;iBAAxC,CACE,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAE,wCAAwC,mBAAmB;QAC5D,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAa,EAAO,QAAQ,GAAK,MAAU,KAAO,EAAM,kBAAkB,IAAI,EAAE,CAAC;QAChF,CAAA,CACM;;MACR;SACJ;IAGJ,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,wEAAyE,CAAA,EAC3F,kBAAC,GAAD;OACE,aAAa,EAAE,uCAAuC,mBAAmB;OACzE,OAAO,EAAY,UAAU;OAC7B,UAAU;OACV,WAAU;OACV,CAAA,CACE;SACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OACE,SAAS,MAAa,SAAS,cAAc;OAC7C,MAAK;OACL,eAAe,EAAY,OAAO;iBAElC,kBAAC,GAAD,EAAS,MAAM,IAAM,CAAA;OACd,CAAA,EACT,kBAAC,GAAD;OACE,SAAS,MAAa,SAAS,cAAc;OAC7C,MAAK;OACL,eAAe,EAAY,OAAO;iBAElC,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;OACX,CAAA,CACL;QACF;;IAGL,IACC,kBAAC,OAAD;KACE,WAAW,EACT,SACA,MAAa,SACT,mDACA,gBACL;eAEA;MAAC;MAAG;MAAG;MAAG;MAAG;MAAG;MAAE,CAAC,KAAK,MACvB,kBAAC,OAAD,EAEE,WAAU,+DACV,EAFK,EAEL,CACF;KACE,CAAA,GACJ,IACF,kBAAC,GAAD;KAAY,UAAS;KAAgB;KAAO,eAAe,KAAK,GAAS;KAAI,CAAA,GAC3E,EAAe,SAAS,IAC1B,MAAa,SACX,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAe,KAAK,MACnB,kBAAC,GAAD;MAEE,WAAU;MACV,eAAe,EAAW,UAAU,EAAM,KAAK;gBAE/C,kBAAC,GAAD;OAAa,WAAU;iBAAvB;QACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,QAAD;WAAM,WAAU;qBAAW;WAAS,CAAA,EACpC,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;WAAI,WAAU;qBAAmC,EAAM;WAAU,CAAA,EACjE,kBAAC,OAAD;WAAK,WAAU;qBACb,kBAAC,GAAD,EAAa,QAAQ,EAAM,QAAU,CAAA;WACjC,CAAA,CACF,EAAA,CAAA,CACF;aACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,GAAD;WACE,SAAQ;WACR,MAAK;WACL,WAAU;WACV,UAAU,MAAM;AAEd,YADA,EAAE,iBAAiB,EACnB,EAAY,MAAa,EAAM,KAAK,OAAO,EAAM,GAAG;;qBAGtD,kBAAC,GAAD,EAAc,MAAM,IAAM,CAAA;WACnB,CAAA,EACR,MAAa,EAAM,MAClB,kBAAC,OAAD;WAAK,WAAU;qBAAf;YACE,kBAAC,GAAD;aAAwB,YAAY,EAAqB;uBACvD,kBAAC,UAAD;cACE,WAAU;cACV,UAAU,MAAM;AAGd,eAFA,EAAE,iBAAiB,EACnB,EAAW,UAAU,EAAM,GAAG,OAAO,EACrC,EAAY,KAAK;;wBALrB,CAQE,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA,EACjB,EAAE,oCAAoC,aAAa,CAC7C;;aACc,CAAA;YACzB,kBAAC,GAAD;aAAwB,YAAY,EAAqB;uBACvD,kBAAC,UAAD;cACE,WAAU;cACV,UAAU,MAAM;AAGd,eAFA,EAAE,iBAAiB,EACnB,EAAW,UAAU,EAAM,GAAG,OAAO,EACrC,EAAY,KAAK;;wBALrB,CAQE,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA,EACrB,EAAE,oCAAoC,aAAa,CAC7C;;aACc,CAAA;YACzB,kBAAC,GAAD;aAAwB,YAAY,EAAqB;uBACvD,kBAAC,UAAD;cACE,WAAU;cACV,UAAU,MAAM;AAEd,eADA,EAAE,iBAAiB,EACnB,GAAa,EAAM;;wBAJvB,CAOE,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA,EACnB,EAAE,iCAAiC,SAAS,CACtC;;aACc,CAAA;YACrB;aAEJ;YACF;;QACN,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAM;SACL,CAAA;QACJ,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,QAAD;UAAM,WAAU;oBAAhB;WACE,kBAAC,GAAD,EAAe,MAAM,IAAM,CAAA;WAC1B,EAAa,EAAM,eAAe;WAAE;WACpC,EAAE,qCAAqC,aAAa;WAChD;;SACH,CAAA;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAAhB;WACG,EAAE,kCAAkC,UAAU;WAAE;WAChD,EAAmB,EAAM,UAAU;WAC/B;aACP,kBAAC,GAAD;UAAwB,YAAY,EAAqB;oBACvD,kBAAC,GAAD;WACE,MAAK;WACL,SAAQ;WACR,UAAU,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;WAC5B,UAAU,MAAM;AAEd,YADA,EAAE,iBAAiB,EACnB,EAAW,UAAU,EAAM,GAAG,OAAO;;qBAGtC,EAAE,+BAA+B,OAAO;WAClC,CAAA;UACc,CAAA,CACrB;;QACM;;MACT,EArGA,EAAM,GAqGN,CACP;KACE,CAAA,GAEN,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAe,KAAK,MACnB,kBAAC,GAAD;MAEE,WAAU;MACV,eAAe,EAAW,UAAU,EAAM,KAAK;gBAE/C,kBAAC,GAAD;OAAa,WAAU;iBACrB,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAAW;UAAS,CAAA,EACpC,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,MAAD;WAAI,WAAU;qBAAmC,EAAM;WAAU,CAAA,EACjE,kBAAC,GAAD,EAAa,QAAQ,EAAM,QAAU,CAAA,CACjC;aACN,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAM;UACL,CAAA,CACA,EAAA,CAAA,CACF;YACN,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAa,EAAM,eAAe,EAAC,cAAkB,EAAA,CAAA;UAC5D,kBAAC,QAAD,EAAA,UAAO,EAAmB,EAAM,UAAU,EAAQ,CAAA;UAClD,kBAAC,GAAD;WAAwB,YAAY,EAAqB;qBACvD,kBAAC,GAAD;YAAQ,SAAQ;YAAU,MAAK;YAAK,UAAU,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;sBAC9D,kBAAC,IAAD;aAAM,IAAI,EAAQ,UAAU,EAAM,GAAG,OAAO;uBAAE;aAAW,CAAA;YAClD,CAAA;WACc,CAAA;UACrB;WACF;;OACM,CAAA;MACT,EA7BA,EAAM,GA6BN,CACP;KACE,CAAA,GAGR,kBAAC,GAAD;KACE,cAAa;KACb,OAAO,EAAE,iCAAiC,gBAAgB;KAC1D,aAAa,EACX,uCACA,wEACD;KACD,QACE,kBAAC,GAAD;MAAwB,YAAY,EAAqB;gBACvD,kBAAC,GAAD;OACE,UAAU,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;OAC5B,eAAe,EAAW,IAAQ,QAAQ,EAAM,eAAe,aAAa;iBAE3E,EAAE,yCAAyC,eAAe;OACpD,CAAA;MACc,CAAA;KAE3B,CAAA;IAEA;;EACK,CAAA"}
1
+ {"version":3,"file":"AgentsListPage.js","names":["AgentsListPage","t","useTr","useParams","useBotlit","agents","useAgents","deleteAgent","useDeleteAgent","useBotlitStore","menuOpen","setMenuOpen","useState","handleSearch","handleDelete","confirmed","nativeConfirm","agent","toast","isNative","nativeNotify","err","message","filteredAgents","agentFilter","search","PageLayout","botId","Button","ShieldCheck","navigateTo","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Plus","PagePurpose","Bot","GlassCard","formatNumber","sum","Search","Input","viewMode","setViewMode","Grid3X3","List","loading","cn","i","error","ErrorState","refetch","Card","CardContent","StatusBadge","e","MoreVertical","Play","Settings","Trash2","MessageSquare","formatRelativeTime","Link","getPath","EmptyState"],"sources":["../../../src/botlit/pages/AgentsListPage.tsx"],"sourcesContent":["/**\n * Agents List Page\n * @module botlit/pages\n */\n\nimport type { ChangeEvent, FC } from 'react';\nimport { useState } from 'react';\nimport { useParams, Link } from 'react-router';\nimport {\n Bot,\n Plus,\n Search,\n Grid3X3,\n List,\n MoreVertical,\n MessageSquare,\n Trash2,\n Settings,\n Play,\n ShieldCheck,\n} from 'lucide-react';\nimport { toast } from 'sonner';\nimport { isNative, nativeConfirm, nativeImpact, nativeNotify } from '../../utils/nativeBridge';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose, GlassCard } 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 { StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useAgents, useDeleteAgent, type AgentRecord } from '../hooks/useAgents';\nimport { useBotlitStore } from '../store/botlitStore';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatRelativeTime, formatNumber } from '../utils/formatters';\nimport { cn } from '../utils/cn';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const AgentsListPage: FC = () => {\n const t = useTr();\n const { botId } = useParams();\n const { navigateTo, getPath } = useBotlit();\n const { data: agents, loading, error, refetch } = useAgents();\n const [deleteAgent] = useDeleteAgent();\n const { viewMode, setViewMode, agentFilter, updateAgentFilter } = useBotlitStore();\n const [menuOpen, setMenuOpen] = useState<string | null>(null);\n\n const handleSearch = (e: ChangeEvent<HTMLInputElement>) => {\n updateAgentFilter({ search: e.target.value });\n };\n\n const handleDelete = async (agent: { id: string; name: string }) => {\n const confirmed = await nativeConfirm({\n title: t('botlit.agentsList.delete.title', 'Delete agent?'),\n message: t(\n 'botlit.agentsList.delete.message',\n 'Are you sure you want to delete \"{{name}}\"?',\n {\n name: agent.name,\n }\n ),\n okButtonTitle: t('botlit.agentsList.delete.okButton', 'Delete'),\n cancelButtonTitle: t('botlit.agentsList.delete.cancelButton', 'Cancel'),\n });\n const ok =\n confirmed === null\n ? confirm(\n t('botlit.agentsList.delete.message', 'Are you sure you want to delete \"{{name}}\"?', {\n name: agent.name,\n })\n )\n : confirmed;\n if (ok) {\n nativeImpact('medium');\n try {\n await deleteAgent(agent.id);\n toast.success(\n t('botlit.agentsList.delete.success', 'Agent \"{{name}}\" deleted successfully', {\n name: agent.name,\n })\n );\n if (isNative()) void nativeNotify('success');\n } catch (err: unknown) {\n const message =\n err instanceof Error\n ? err.message\n : t('botlit.agentsList.delete.error', 'Failed to delete agent');\n toast.error(message);\n if (isNative()) void nativeNotify('error');\n }\n }\n setMenuOpen(null);\n };\n\n const filteredAgents = agents.filter((agent) => {\n if (agentFilter.search) {\n const search = agentFilter.search.toLowerCase();\n return (\n agent.name.toLowerCase().includes(search) ||\n (agent.description?.toLowerCase().includes(search) ?? false)\n );\n }\n return true;\n });\n\n return (\n <PageLayout\n title={\n botId\n ? t('botlit.agentsList.titleBot', 'Bot Agents')\n : t('botlit.agentsList.title', 'All Agents')\n }\n description={\n botId\n ? t('botlit.agentsList.descriptionBot', 'Manage agents for this bot')\n : t('botlit.agentsList.description', 'View and manage all your AI agents')\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n leftIcon={<ShieldCheck size={16} />}\n onClick={() => navigateTo('agents/approvals')}\n >\n {t('botlit.agentsList.actions.approvals', 'Approvals')}\n </Button>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo(botId ? `bots/${botId}/agents/new` : 'agents/new')}\n >\n {t('botlit.agentsList.actions.createAgent', 'Create Agent')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Bot size={18} />}>\n {t(\n 'botlit.agentsList.purpose',\n 'Agents are the reasoning workers behind your bots — each one bundles a model, a system prompt, tools and knowledge into a callable AI. Build an agent here to handle a specific job (answer support questions, summarise documents, run a workflow), then test it in chat and connect it to a bot or channel.'\n )}\n </PagePurpose>\n\n {/* Summary */}\n {agents.length > 0 ? (\n <div className=\"grid grid-cols-2 gap-4 sm:grid-cols-3\">\n <GlassCard treatment=\"glass\" glow className=\"p-4\">\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentsList.summary.total', 'Total agents')}\n </p>\n <p className=\"mt-1 text-2xl font-semibold tabular-nums text-text-primary\">\n {agents.length}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentsList.summary.active', 'Active')}\n </p>\n <p className=\"mt-1 text-2xl font-semibold tabular-nums text-text-primary\">\n {agents.filter((agent) => agent.status === 'ACTIVE').length}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"col-span-2 p-4 sm:col-span-1\">\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentsList.summary.executions', 'Total executions')}\n </p>\n <p className=\"mt-1 text-2xl font-semibold tabular-nums text-text-primary\">\n {formatNumber(agents.reduce((sum, agent) => sum + (agent.executionCount ?? 0), 0))}\n </p>\n </GlassCard>\n </div>\n ) : null}\n\n {/* Toolbar */}\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"relative flex-1 max-w-md\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder={t('botlit.agentsList.searchPlaceholder', 'Search agents...')}\n value={agentFilter.search || ''}\n onChange={handleSearch}\n className=\"pl-9\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n variant={viewMode === 'grid' ? 'secondary' : 'ghost'}\n size=\"icon\"\n onClick={() => setViewMode('grid')}\n >\n <Grid3X3 size={18} />\n </Button>\n <Button\n variant={viewMode === 'list' ? 'secondary' : 'ghost'}\n size=\"icon\"\n onClick={() => setViewMode('list')}\n >\n <List size={18} />\n </Button>\n </div>\n </div>\n\n {/* Content */}\n {loading ? (\n <div\n className={cn(\n 'gap-4',\n viewMode === 'grid'\n ? 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3'\n : 'flex flex-col'\n )}\n >\n {[1, 2, 3, 4, 5, 6].map((i) => (\n <div\n key={i}\n className=\"h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"agents\" error={error} onRetry={() => void refetch()} />\n ) : filteredAgents.length > 0 ? (\n viewMode === 'grid' ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {filteredAgents.map((agent: AgentRecord) => (\n <Card\n key={agent.id}\n className=\"group hover:shadow-md transition-shadow cursor-pointer relative\"\n onClick={() => navigateTo(`agents/${agent.id}`)}\n >\n <CardContent className=\"pt-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-4xl\">🤖</span>\n <div>\n <h3 className=\"font-semibold text-text-primary\">{agent.name}</h3>\n <div className=\"flex items-center gap-2 mt-1\">\n <StatusBadge status={agent.status} />\n </div>\n </div>\n </div>\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"opacity-0 group-hover:opacity-100 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation();\n setMenuOpen(menuOpen === agent.id ? null : agent.id);\n }}\n >\n <MoreVertical size={16} />\n </Button>\n {menuOpen === agent.id && (\n <div className=\"absolute right-0 top-full mt-1 w-48 bg-popover border border-border-subtle rounded-md shadow-lg z-10\">\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_EXECUTE}>\n <button\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2\"\n onClick={(e) => {\n e.stopPropagation();\n navigateTo(`agents/${agent.id}/chat`);\n setMenuOpen(null);\n }}\n >\n <Play size={16} />\n {t('botlit.agentsList.menu.testAgent', 'Test Agent')}\n </button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_UPDATE}>\n <button\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-accent flex items-center gap-2\"\n onClick={(e) => {\n e.stopPropagation();\n navigateTo(`agents/${agent.id}/edit`);\n setMenuOpen(null);\n }}\n >\n <Settings size={16} />\n {t('botlit.agentsList.menu.editAgent', 'Edit Agent')}\n </button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_DELETE}>\n <button\n className=\"w-full px-4 py-2 text-left text-sm hover:bg-accent text-status-error-text flex items-center gap-2\"\n onClick={(e) => {\n e.stopPropagation();\n handleDelete(agent);\n }}\n >\n <Trash2 size={16} />\n {t('botlit.agentsList.menu.delete', 'Delete')}\n </button>\n </BotmanorPermissionGate>\n </div>\n )}\n </div>\n </div>\n <p className=\"mt-3 text-sm text-text-secondary line-clamp-2\">\n {agent.description}\n </p>\n <div className=\"mt-4 flex items-center gap-4 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <MessageSquare size={14} />\n {formatNumber(agent.executionCount)}{' '}\n {t('botlit.agentsList.card.executions', 'executions')}\n </span>\n </div>\n <div className=\"mt-3 pt-3 border-t border-border-subtle flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary\">\n {t('botlit.agentsList.card.created', 'Created')}{' '}\n {formatRelativeTime(agent.createdAt)}\n </span>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_EXECUTE}>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n leftIcon={<Play size={14} />}\n onClick={(e) => {\n e.stopPropagation();\n navigateTo(`agents/${agent.id}/chat`);\n }}\n >\n {t('botlit.agentsList.card.test', 'Test')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n ) : (\n <div className=\"space-y-2\">\n {filteredAgents.map((agent: AgentRecord) => (\n <Card\n key={agent.id}\n className=\"hover:shadow-md transition-shadow cursor-pointer\"\n onClick={() => navigateTo(`agents/${agent.id}`)}\n >\n <CardContent className=\"py-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <span className=\"text-3xl\">🤖</span>\n <div>\n <div className=\"flex items-center gap-2\">\n <h3 className=\"font-semibold text-text-primary\">{agent.name}</h3>\n <StatusBadge status={agent.status} />\n </div>\n <p className=\"text-sm text-text-secondary line-clamp-1\">\n {agent.description}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-text-secondary\">\n <span>{formatNumber(agent.executionCount)} executions</span>\n <span>{formatRelativeTime(agent.createdAt)}</span>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_EXECUTE}>\n <Button variant=\"outline\" size=\"sm\" leftIcon={<Play size={14} />}>\n <Link to={getPath(`agents/${agent.id}/chat`)}>Test</Link>\n </Button>\n </BotmanorPermissionGate>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )\n ) : (\n <EmptyState\n illustration=\"empty-agents\"\n title={t('botlit.agentsList.empty.title', 'No agents yet')}\n description={t(\n 'botlit.agentsList.empty.description',\n 'Create your first AI agent to start building intelligent automations.'\n )}\n action={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_CREATE}>\n <Button\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo(botId ? `bots/${botId}/agents/new` : 'agents/new')}\n >\n {t('botlit.agentsList.actions.createAgent', 'Create Agent')}\n </Button>\n </BotmanorPermissionGate>\n }\n />\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 AiOperationsPage: FC;
@@ -1,35 +1,35 @@
1
1
  import { useTr as e } from "../../shared/hooks/useTr.js";
2
- import { formatRelativeTime as t } from "../utils/formatters.js";
3
- import { PageLayout as n } from "../components/PageLayout.js";
4
- import { Button as r } from "../components/Button.js";
5
- import { Card as i, CardContent as a, CardHeader as o, CardTitle as s } from "../components/Card.js";
6
- import { Badge as c } from "../components/Badge.js";
7
- import { Input as l, Label as u } from "../components/Input.js";
8
- import { ErrorState as d } from "../components/ErrorState.js";
2
+ import { PageLayout as t } from "../components/PageLayout.js";
3
+ import { AiOperationsPanel as n } from "../components/AiOperationsPanel.js";
4
+ import { Badge as r } from "../components/Badge.js";
5
+ import { Button as i } from "../components/Button.js";
6
+ import { Card as a, CardContent as o, CardHeader as s, CardTitle as c } from "../components/Card.js";
7
+ import { ErrorState as l } from "../components/ErrorState.js";
8
+ import { Input as u, Label as d } from "../components/Input.js";
9
9
  import { useConfigureSupervisor as f, useRunSupervisorNow as p, useSupervisorConfig as m, useSupervisorRuns as h } from "../hooks/useAiOperations.js";
10
10
  import "../hooks/index.js";
11
- import { AiOperationsPanel as g } from "../components/AiOperationsPanel.js";
11
+ import { formatRelativeTime as g } from "../utils/formatters.js";
12
12
  import { useState as _ } from "react";
13
13
  import { jsx as v, jsxs as y } from "react/jsx-runtime";
14
14
  import { Play as b, ShieldCheck as x } from "lucide-react";
15
- //#region src/botlit/pages/AiOperationsPage.tsx
15
+ // src/botlit/pages/AiOperationsPage.tsx
16
16
  var S = "0 9 * * *", C = "UTC", w = () => {
17
- let n = e(), { data: r, loading: c, error: p, refetch: h } = m(), [g, b] = f(), [w, T] = _(null), [E, D] = _(null), [O, k] = _(null), A = r?.enabled ?? !1, j = w ?? r?.cron ?? S, M = E ?? r?.timezone ?? C, N = b.loading || c, P = async (e) => {
17
+ let t = e(), { data: n, loading: r, error: i, refetch: p } = m(), [h, b] = f(), [w, T] = _(null), [E, D] = _(null), [O, k] = _(null), A = n?.enabled ?? !1, j = w ?? n?.cron ?? S, M = E ?? n?.timezone ?? C, N = b.loading || r, P = async (e) => {
18
18
  k(null);
19
19
  try {
20
- await g(e), await h();
20
+ await h(e), await p();
21
21
  } catch (e) {
22
22
  k(e instanceof Error ? e.message : String(e));
23
23
  }
24
24
  };
25
- return p ? /* @__PURE__ */ v(d, {
26
- resource: n("botlit.aiOperations.configErrorTitle", "Supervisor configuration"),
27
- error: p,
28
- onRetry: () => void h()
29
- }) : /* @__PURE__ */ y(i, { children: [/* @__PURE__ */ v(o, { children: /* @__PURE__ */ y(s, {
25
+ return i ? /* @__PURE__ */ v(l, {
26
+ resource: t("botlit.aiOperations.configErrorTitle", "Supervisor configuration"),
27
+ error: i,
28
+ onRetry: () => void p()
29
+ }) : /* @__PURE__ */ y(a, { children: [/* @__PURE__ */ v(s, { children: /* @__PURE__ */ y(c, {
30
30
  className: "flex items-center gap-2 text-base",
31
- children: [/* @__PURE__ */ v(x, { className: "h-4 w-4" }), n("botlit.aiOperations.configTitle", "Scheduled fleet review")]
32
- }) }), /* @__PURE__ */ y(a, {
31
+ children: [/* @__PURE__ */ v(x, { className: "h-4 w-4" }), t("botlit.aiOperations.configTitle", "Scheduled fleet review")]
32
+ }) }), /* @__PURE__ */ y(o, {
33
33
  className: "space-y-4",
34
34
  children: [
35
35
  /* @__PURE__ */ y("label", {
@@ -44,16 +44,16 @@ var S = "0 9 * * *", C = "UTC", w = () => {
44
44
  cron: j,
45
45
  timezone: M
46
46
  })
47
- }), n("botlit.aiOperations.configEnable", "Run the supervisor automatically every day")]
47
+ }), t("botlit.aiOperations.configEnable", "Run the supervisor automatically every day")]
48
48
  }),
49
49
  /* @__PURE__ */ y("div", {
50
50
  className: "grid gap-4 sm:grid-cols-2",
51
51
  children: [/* @__PURE__ */ y("div", {
52
52
  className: "space-y-1.5",
53
- children: [/* @__PURE__ */ v(u, {
53
+ children: [/* @__PURE__ */ v(d, {
54
54
  htmlFor: "supervisor-cron",
55
- children: n("botlit.aiOperations.cronLabel", "Cron (FluidGrids schedule)")
56
- }), /* @__PURE__ */ v(l, {
55
+ children: t("botlit.aiOperations.cronLabel", "Cron (FluidGrids schedule)")
56
+ }), /* @__PURE__ */ v(u, {
57
57
  id: "supervisor-cron",
58
58
  value: j,
59
59
  disabled: N,
@@ -67,10 +67,10 @@ var S = "0 9 * * *", C = "UTC", w = () => {
67
67
  })]
68
68
  }), /* @__PURE__ */ y("div", {
69
69
  className: "space-y-1.5",
70
- children: [/* @__PURE__ */ v(u, {
70
+ children: [/* @__PURE__ */ v(d, {
71
71
  htmlFor: "supervisor-timezone",
72
- children: n("botlit.aiOperations.timezoneLabel", "Timezone")
73
- }), /* @__PURE__ */ v(l, {
72
+ children: t("botlit.aiOperations.timezoneLabel", "Timezone")
73
+ }), /* @__PURE__ */ v(u, {
74
74
  id: "supervisor-timezone",
75
75
  value: M,
76
76
  disabled: N,
@@ -84,9 +84,9 @@ var S = "0 9 * * *", C = "UTC", w = () => {
84
84
  })]
85
85
  })]
86
86
  }),
87
- r?.lastRunAt && /* @__PURE__ */ v("p", {
87
+ n?.lastRunAt && /* @__PURE__ */ v("p", {
88
88
  className: "text-xs text-text-tertiary",
89
- children: n("botlit.aiOperations.lastRun", "Last review: {{time}}", { time: t(r.lastRunAt) })
89
+ children: t("botlit.aiOperations.lastRun", "Last review: {{time}}", { time: g(n.lastRunAt) })
90
90
  }),
91
91
  O && /* @__PURE__ */ v("p", {
92
92
  className: "text-sm text-status-error-text",
@@ -96,22 +96,22 @@ var S = "0 9 * * *", C = "UTC", w = () => {
96
96
  ]
97
97
  })] });
98
98
  }, T = () => {
99
- let n = e(), { data: r, loading: l, error: u } = h();
100
- return u || !l && r.length === 0 ? null : /* @__PURE__ */ y(i, { children: [/* @__PURE__ */ v(o, { children: /* @__PURE__ */ v(s, {
99
+ let t = e(), { data: n, loading: i, error: l } = h();
100
+ return l || !i && n.length === 0 ? null : /* @__PURE__ */ y(a, { children: [/* @__PURE__ */ v(s, { children: /* @__PURE__ */ v(c, {
101
101
  className: "text-base",
102
- children: n("botlit.aiOperations.runHistoryTitle", "Review history")
103
- }) }), /* @__PURE__ */ v(a, { children: /* @__PURE__ */ v("ul", {
102
+ children: t("botlit.aiOperations.runHistoryTitle", "Review history")
103
+ }) }), /* @__PURE__ */ v(o, { children: /* @__PURE__ */ v("ul", {
104
104
  className: "divide-y divide-border-subtle",
105
- children: r.map((e) => /* @__PURE__ */ y("li", {
105
+ children: n.map((e) => /* @__PURE__ */ y("li", {
106
106
  className: "flex items-center justify-between gap-3 py-2 text-sm",
107
107
  children: [/* @__PURE__ */ y("div", {
108
108
  className: "flex items-center gap-2",
109
- children: [/* @__PURE__ */ v(c, {
109
+ children: [/* @__PURE__ */ v(r, {
110
110
  variant: e.status === "COMPLETED" ? "success" : e.status === "FAILED" ? "destructive" : "secondary",
111
111
  children: e.status
112
112
  }), /* @__PURE__ */ v("span", {
113
113
  className: "text-text-secondary",
114
- children: n("botlit.aiOperations.runMeta", "{{trigger}} · {{findings}} findings · {{notified}} notified", {
114
+ children: t("botlit.aiOperations.runMeta", "{{trigger}} · {{findings}} findings · {{notified}} notified", {
115
115
  trigger: e.trigger,
116
116
  findings: e.findings,
117
117
  notified: e.notified
@@ -119,48 +119,47 @@ var S = "0 9 * * *", C = "UTC", w = () => {
119
119
  })]
120
120
  }), /* @__PURE__ */ v("span", {
121
121
  className: "text-xs text-text-tertiary whitespace-nowrap",
122
- children: t(e.startedAt)
122
+ children: g(e.startedAt)
123
123
  })]
124
124
  }, e.id))
125
125
  }) })] });
126
126
  }, E = () => {
127
- let t = e(), [i, a] = p(), [o, s] = _(null), [c, l] = _(null), u = a.loading, d = async () => {
128
- s(null), l(null);
127
+ let r = e(), [a, o] = p(), [s, c] = _(null), [l, u] = _(null), d = o.loading, f = async () => {
128
+ c(null), u(null);
129
129
  try {
130
- let e = await i();
131
- l(e.run ? t("botlit.aiOperations.runNowSummary", "Review finished: {{status}}, {{findings}} new findings.", {
130
+ let e = await a();
131
+ u(e.run ? r("botlit.aiOperations.runNowSummary", "Review finished: {{status}}, {{findings}} new findings.", {
132
132
  status: e.run.status,
133
133
  findings: e.findings
134
- }) : t("botlit.aiOperations.runNowSkipped", "Nothing to run — enable the scheduled review first."));
134
+ }) : r("botlit.aiOperations.runNowSkipped", "Nothing to run — enable the scheduled review first."));
135
135
  } catch (e) {
136
- s(e instanceof Error ? e.message : String(e));
136
+ c(e instanceof Error ? e.message : String(e));
137
137
  }
138
138
  };
139
- return /* @__PURE__ */ v(n, {
140
- title: t("botlit.aiOperations.title", "AI Operations"),
141
- description: t("botlit.aiOperations.description", "Supervisor findings across your agent fleet — what drifted, the evidence, and the recommended action."),
142
- actions: /* @__PURE__ */ y(r, {
139
+ return /* @__PURE__ */ v(t, {
140
+ title: r("botlit.aiOperations.title", "AI Operations"),
141
+ description: r("botlit.aiOperations.description", "Supervisor findings across your agent fleet — what drifted, the evidence, and the recommended action."),
142
+ actions: /* @__PURE__ */ y(i, {
143
143
  variant: "outline",
144
- onClick: () => void d(),
145
- disabled: u,
146
- children: [/* @__PURE__ */ v(b, { className: "h-4 w-4" }), t("botlit.aiOperations.runNow", "Run review now")]
144
+ onClick: () => void f(),
145
+ disabled: d,
146
+ children: [/* @__PURE__ */ v(b, { className: "h-4 w-4" }), r("botlit.aiOperations.runNow", "Run review now")]
147
147
  }),
148
148
  children: /* @__PURE__ */ y("div", {
149
149
  className: "space-y-6",
150
150
  children: [
151
- (o || c) && /* @__PURE__ */ v("p", {
152
- className: o ? "text-sm text-status-error-text" : "text-sm text-status-success-text",
151
+ (s || l) && /* @__PURE__ */ v("p", {
152
+ className: s ? "text-sm text-status-error-text" : "text-sm text-status-success-text",
153
153
  role: "status",
154
- children: o ?? c
154
+ children: s ?? l
155
155
  }),
156
- /* @__PURE__ */ v(g, {}),
156
+ /* @__PURE__ */ v(n, {}),
157
157
  /* @__PURE__ */ v(w, {}),
158
158
  /* @__PURE__ */ v(T, {})
159
159
  ]
160
160
  })
161
161
  });
162
162
  };
163
- //#endregion
164
163
  export { E as AiOperationsPage };
165
164
 
166
165
  //# sourceMappingURL=AiOperationsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AiOperationsPage.js","names":[],"sources":["../../../src/botlit/pages/AiOperationsPage.tsx"],"sourcesContent":["/**\n * AI Operations Page (BOFF-3839)\n * @module botlit/pages\n *\n * The workspace-wide supervisor feed at /botmanor/ai: decision cards, the\n * supervisor schedule configuration (FluidGrids owns the cron — enabling\n * provisions it, disabling removes it), a run-now action and the run\n * history. The same decision-card panel renders narrowed on the agent and\n * bot detail pages.\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { Play, ShieldCheck } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PageLayout } from '../components/PageLayout';\nimport { AiOperationsPanel } from '../components/AiOperationsPanel';\nimport { Badge } from '../components/Badge';\nimport { Button } from '../components/Button';\nimport { Card, CardContent, CardHeader, CardTitle } from '../components/Card';\nimport { ErrorState } from '../components/ErrorState';\nimport { Input, Label } from '../components/Input';\nimport {\n useConfigureSupervisor,\n useRunSupervisorNow,\n useSupervisorConfig,\n useSupervisorRuns,\n} from '../hooks';\nimport { formatRelativeTime } from '../utils/formatters';\n\nconst DEFAULT_CRON = '0 9 * * *';\nconst DEFAULT_TIMEZONE = 'UTC';\n\n/** Schedule configuration: enable switch + cadence, provisioned in FluidGrids. */\nconst SupervisorConfigSection: FC = () => {\n const t = useTr();\n const { data: config, loading, error, refetch } = useSupervisorConfig();\n const [configure, configureState] = useConfigureSupervisor();\n const [cron, setCron] = useState<string | null>(null);\n const [timezone, setTimezone] = useState<string | null>(null);\n const [saveError, setSaveError] = useState<string | null>(null);\n\n const enabled = config?.enabled ?? false;\n const effectiveCron = cron ?? config?.cron ?? DEFAULT_CRON;\n const effectiveTimezone = timezone ?? config?.timezone ?? DEFAULT_TIMEZONE;\n const busy = configureState.loading || loading;\n\n const save = async (next: { enabled: boolean; cron: string; timezone: string }) => {\n setSaveError(null);\n try {\n await configure(next);\n await refetch();\n } catch (configureError) {\n setSaveError(\n configureError instanceof Error ? configureError.message : String(configureError)\n );\n }\n };\n\n if (error) {\n return (\n <ErrorState\n resource={t('botlit.aiOperations.configErrorTitle', 'Supervisor configuration')}\n error={error}\n onRetry={() => void refetch()}\n />\n );\n }\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <ShieldCheck className=\"h-4 w-4\" />\n {t('botlit.aiOperations.configTitle', 'Scheduled fleet review')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <label className=\"flex items-center gap-2 text-sm text-text-primary\">\n <input\n type=\"checkbox\"\n className=\"h-4 w-4\"\n checked={enabled}\n disabled={busy}\n onChange={(event) =>\n void save({\n enabled: event.target.checked,\n cron: effectiveCron,\n timezone: effectiveTimezone,\n })\n }\n />\n {t('botlit.aiOperations.configEnable', 'Run the supervisor automatically every day')}\n </label>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"supervisor-cron\">\n {t('botlit.aiOperations.cronLabel', 'Cron (FluidGrids schedule)')}\n </Label>\n <Input\n id=\"supervisor-cron\"\n value={effectiveCron}\n disabled={busy}\n onChange={(event) => setCron(event.target.value)}\n onBlur={() =>\n void save({ enabled, cron: effectiveCron, timezone: effectiveTimezone })\n }\n placeholder={DEFAULT_CRON}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"supervisor-timezone\">\n {t('botlit.aiOperations.timezoneLabel', 'Timezone')}\n </Label>\n <Input\n id=\"supervisor-timezone\"\n value={effectiveTimezone}\n disabled={busy}\n onChange={(event) => setTimezone(event.target.value)}\n onBlur={() =>\n void save({ enabled, cron: effectiveCron, timezone: effectiveTimezone })\n }\n placeholder={DEFAULT_TIMEZONE}\n />\n </div>\n </div>\n {config?.lastRunAt && (\n <p className=\"text-xs text-text-tertiary\">\n {t('botlit.aiOperations.lastRun', 'Last review: {{time}}', {\n time: formatRelativeTime(config.lastRunAt),\n })}\n </p>\n )}\n {saveError && (\n <p className=\"text-sm text-status-error-text\" role=\"alert\">\n {saveError}\n </p>\n )}\n </CardContent>\n </Card>\n );\n};\n\n/** Recent supervisor runs (both triggers), newest first. */\nconst RunHistorySection: FC = () => {\n const t = useTr();\n const { data: runs, loading, error } = useSupervisorRuns();\n\n if (error || (!loading && runs.length === 0)) return null;\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">\n {t('botlit.aiOperations.runHistoryTitle', 'Review history')}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"divide-y divide-border-subtle\">\n {runs.map((run) => (\n <li key={run.id} className=\"flex items-center justify-between gap-3 py-2 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Badge\n variant={\n run.status === 'COMPLETED'\n ? 'success'\n : run.status === 'FAILED'\n ? 'destructive'\n : 'secondary'\n }\n >\n {run.status}\n </Badge>\n <span className=\"text-text-secondary\">\n {t(\n 'botlit.aiOperations.runMeta',\n '{{trigger}} · {{findings}} findings · {{notified}} notified',\n {\n trigger: run.trigger,\n findings: run.findings,\n notified: run.notified,\n }\n )}\n </span>\n </div>\n <span className=\"text-xs text-text-tertiary whitespace-nowrap\">\n {formatRelativeTime(run.startedAt)}\n </span>\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n );\n};\n\nexport const AiOperationsPage: FC = () => {\n const t = useTr();\n const [runNow, runNowState] = useRunSupervisorNow();\n const [runError, setRunError] = useState<string | null>(null);\n const [runSummary, setRunSummary] = useState<string | null>(null);\n const busy = runNowState.loading;\n\n const onRunNow = async () => {\n setRunError(null);\n setRunSummary(null);\n try {\n const result = await runNow();\n setRunSummary(\n result.run\n ? t(\n 'botlit.aiOperations.runNowSummary',\n 'Review finished: {{status}}, {{findings}} new findings.',\n {\n status: result.run.status,\n findings: result.findings,\n }\n )\n : t(\n 'botlit.aiOperations.runNowSkipped',\n 'Nothing to run — enable the scheduled review first.'\n )\n );\n } catch (error) {\n setRunError(error instanceof Error ? error.message : String(error));\n }\n };\n\n return (\n <PageLayout\n title={t('botlit.aiOperations.title', 'AI Operations')}\n description={t(\n 'botlit.aiOperations.description',\n 'Supervisor findings across your agent fleet — what drifted, the evidence, and the recommended action.'\n )}\n actions={\n <Button variant=\"outline\" onClick={() => void onRunNow()} disabled={busy}>\n <Play className=\"h-4 w-4\" />\n {t('botlit.aiOperations.runNow', 'Run review now')}\n </Button>\n }\n >\n <div className=\"space-y-6\">\n {(runError || runSummary) && (\n <p\n className={\n runError ? 'text-sm text-status-error-text' : 'text-sm text-status-success-text'\n }\n role=\"status\"\n >\n {runError ?? runSummary}\n </p>\n )}\n <AiOperationsPanel />\n <SupervisorConfigSection />\n <RunHistorySection />\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AiOperationsPage.js","names":["DEFAULT_CRON","DEFAULT_TIMEZONE","SupervisorConfigSection","useTr","config","useSupervisorConfig","configure","configureState","useConfigureSupervisor","cron","setCron","useState","timezone","setTimezone","saveError","setSaveError","enabled","effectiveCron","effectiveTimezone","busy","loading","save","next","refetch","configureError","error","ErrorState","Card","CardHeader","CardTitle","ShieldCheck","CardContent","event","Label","Input","formatRelativeTime","RunHistorySection","runs","useSupervisorRuns","Badge","run","AiOperationsPage","t","runNow","runNowState","useRunSupervisorNow","runError","setRunError","runSummary","setRunSummary","onRunNow","result","PageLayout","Button","Play","AiOperationsPanel"],"sources":["../../../src/botlit/pages/AiOperationsPage.tsx"],"sourcesContent":["/**\n * AI Operations Page (BOFF-3839)\n * @module botlit/pages\n *\n * The workspace-wide supervisor feed at /botmanor/ai: decision cards, the\n * supervisor schedule configuration (FluidGrids owns the cron — enabling\n * provisions it, disabling removes it), a run-now action and the run\n * history. The same decision-card panel renders narrowed on the agent and\n * bot detail pages.\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { Play, ShieldCheck } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PageLayout } from '../components/PageLayout';\nimport { AiOperationsPanel } from '../components/AiOperationsPanel';\nimport { Badge } from '../components/Badge';\nimport { Button } from '../components/Button';\nimport { Card, CardContent, CardHeader, CardTitle } from '../components/Card';\nimport { ErrorState } from '../components/ErrorState';\nimport { Input, Label } from '../components/Input';\nimport {\n useConfigureSupervisor,\n useRunSupervisorNow,\n useSupervisorConfig,\n useSupervisorRuns,\n} from '../hooks';\nimport { formatRelativeTime } from '../utils/formatters';\n\nconst DEFAULT_CRON = '0 9 * * *';\nconst DEFAULT_TIMEZONE = 'UTC';\n\n/** Schedule configuration: enable switch + cadence, provisioned in FluidGrids. */\nconst SupervisorConfigSection: FC = () => {\n const t = useTr();\n const { data: config, loading, error, refetch } = useSupervisorConfig();\n const [configure, configureState] = useConfigureSupervisor();\n const [cron, setCron] = useState<string | null>(null);\n const [timezone, setTimezone] = useState<string | null>(null);\n const [saveError, setSaveError] = useState<string | null>(null);\n\n const enabled = config?.enabled ?? false;\n const effectiveCron = cron ?? config?.cron ?? DEFAULT_CRON;\n const effectiveTimezone = timezone ?? config?.timezone ?? DEFAULT_TIMEZONE;\n const busy = configureState.loading || loading;\n\n const save = async (next: { enabled: boolean; cron: string; timezone: string }) => {\n setSaveError(null);\n try {\n await configure(next);\n await refetch();\n } catch (configureError) {\n setSaveError(\n configureError instanceof Error ? configureError.message : String(configureError)\n );\n }\n };\n\n if (error) {\n return (\n <ErrorState\n resource={t('botlit.aiOperations.configErrorTitle', 'Supervisor configuration')}\n error={error}\n onRetry={() => void refetch()}\n />\n );\n }\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <ShieldCheck className=\"h-4 w-4\" />\n {t('botlit.aiOperations.configTitle', 'Scheduled fleet review')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <label className=\"flex items-center gap-2 text-sm text-text-primary\">\n <input\n type=\"checkbox\"\n className=\"h-4 w-4\"\n checked={enabled}\n disabled={busy}\n onChange={(event) =>\n void save({\n enabled: event.target.checked,\n cron: effectiveCron,\n timezone: effectiveTimezone,\n })\n }\n />\n {t('botlit.aiOperations.configEnable', 'Run the supervisor automatically every day')}\n </label>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"supervisor-cron\">\n {t('botlit.aiOperations.cronLabel', 'Cron (FluidGrids schedule)')}\n </Label>\n <Input\n id=\"supervisor-cron\"\n value={effectiveCron}\n disabled={busy}\n onChange={(event) => setCron(event.target.value)}\n onBlur={() =>\n void save({ enabled, cron: effectiveCron, timezone: effectiveTimezone })\n }\n placeholder={DEFAULT_CRON}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"supervisor-timezone\">\n {t('botlit.aiOperations.timezoneLabel', 'Timezone')}\n </Label>\n <Input\n id=\"supervisor-timezone\"\n value={effectiveTimezone}\n disabled={busy}\n onChange={(event) => setTimezone(event.target.value)}\n onBlur={() =>\n void save({ enabled, cron: effectiveCron, timezone: effectiveTimezone })\n }\n placeholder={DEFAULT_TIMEZONE}\n />\n </div>\n </div>\n {config?.lastRunAt && (\n <p className=\"text-xs text-text-tertiary\">\n {t('botlit.aiOperations.lastRun', 'Last review: {{time}}', {\n time: formatRelativeTime(config.lastRunAt),\n })}\n </p>\n )}\n {saveError && (\n <p className=\"text-sm text-status-error-text\" role=\"alert\">\n {saveError}\n </p>\n )}\n </CardContent>\n </Card>\n );\n};\n\n/** Recent supervisor runs (both triggers), newest first. */\nconst RunHistorySection: FC = () => {\n const t = useTr();\n const { data: runs, loading, error } = useSupervisorRuns();\n\n if (error || (!loading && runs.length === 0)) return null;\n\n return (\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">\n {t('botlit.aiOperations.runHistoryTitle', 'Review history')}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"divide-y divide-border-subtle\">\n {runs.map((run) => (\n <li key={run.id} className=\"flex items-center justify-between gap-3 py-2 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Badge\n variant={\n run.status === 'COMPLETED'\n ? 'success'\n : run.status === 'FAILED'\n ? 'destructive'\n : 'secondary'\n }\n >\n {run.status}\n </Badge>\n <span className=\"text-text-secondary\">\n {t(\n 'botlit.aiOperations.runMeta',\n '{{trigger}} · {{findings}} findings · {{notified}} notified',\n {\n trigger: run.trigger,\n findings: run.findings,\n notified: run.notified,\n }\n )}\n </span>\n </div>\n <span className=\"text-xs text-text-tertiary whitespace-nowrap\">\n {formatRelativeTime(run.startedAt)}\n </span>\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n );\n};\n\nexport const AiOperationsPage: FC = () => {\n const t = useTr();\n const [runNow, runNowState] = useRunSupervisorNow();\n const [runError, setRunError] = useState<string | null>(null);\n const [runSummary, setRunSummary] = useState<string | null>(null);\n const busy = runNowState.loading;\n\n const onRunNow = async () => {\n setRunError(null);\n setRunSummary(null);\n try {\n const result = await runNow();\n setRunSummary(\n result.run\n ? t(\n 'botlit.aiOperations.runNowSummary',\n 'Review finished: {{status}}, {{findings}} new findings.',\n {\n status: result.run.status,\n findings: result.findings,\n }\n )\n : t(\n 'botlit.aiOperations.runNowSkipped',\n 'Nothing to run — enable the scheduled review first.'\n )\n );\n } catch (error) {\n setRunError(error instanceof Error ? error.message : String(error));\n }\n };\n\n return (\n <PageLayout\n title={t('botlit.aiOperations.title', 'AI Operations')}\n description={t(\n 'botlit.aiOperations.description',\n 'Supervisor findings across your agent fleet — what drifted, the evidence, and the recommended action.'\n )}\n actions={\n <Button variant=\"outline\" onClick={() => void onRunNow()} disabled={busy}>\n <Play className=\"h-4 w-4\" />\n {t('botlit.aiOperations.runNow', 'Run review now')}\n </Button>\n }\n >\n <div className=\"space-y-6\">\n {(runError || runSummary) && (\n <p\n className={\n runError ? 'text-sm text-status-error-text' : 'text-sm text-status-success-text'\n }\n role=\"status\"\n >\n {runError ?? runSummary}\n </p>\n )}\n <AiOperationsPanel />\n <SupervisorConfigSection />\n <RunHistorySection />\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AA8BA,IAAMA,IAAe,aACfC,IAAmB,OAGnBC,UAAoC;CACxC,IAAM,IAAIC,EAAM,GACV,EAAE,MAAMC,GAAQ,YAAS,UAAO,eAAYC,EAAoB,GAChE,CAACC,GAAWC,KAAkBC,EAAuB,GACrD,CAACC,GAAMC,KAAWC,EAAwB,IAAI,GAC9C,CAACC,GAAUC,KAAeF,EAAwB,IAAI,GACtD,CAACG,GAAWC,KAAgBJ,EAAwB,IAAI,GAExDK,IAAUZ,GAAQ,WAAW,IAC7Ba,IAAgBR,KAAQL,GAAQ,QAAQJ,GACxCkB,IAAoBN,KAAYR,GAAQ,YAAYH,GACpDkB,IAAOZ,EAAe,WAAWa,GAEjCC,IAAO,OAAO,MAA+D;EACjF,EAAa,IAAI;EACjB,IAAI;GAEF,AADA,MAAMf,EAAUgB,CAAI,GACpB,MAAMC,EAAQ;EAChB,SAASC,GAAgB;GACvB,EACEA,aAA0B,QAAQA,EAAe,UAAU,OAAOA,CAAc,CAClF;EACF;CACF;CAYA,OAVIC,IAEA,kBAACC,GAAD;EACE,UAAU,EAAE,wCAAwC,0BAA0B;EACvE;EACP,eAAe,KAAKH,EAAQ;CAC7B,CAAA,IAKH,kBAACI,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD;EAAW,WAAU;EAArB,UAAA,CACE,kBAACC,GAAD,EAAa,WAAU,UAAW,CAAA,GACjC,EAAE,mCAAmC,wBAAwB,CACrD;CACD,CAAA,EAAA,CAAA,GACZ,kBAACC,GAAD;EAAa,WAAU;EAAvB,UAAA;GACE,kBAAC,SAAD;IAAO,WAAU;IAAjB,UAAA,CACE,kBAAC,SAAD;KACE,MAAK;KACL,WAAU;KACV,SAASf;KACT,UAAUG;KACV,WAAW,MACT,KAAKE,EAAK;MACR,SAASW,EAAM,OAAO;MACtB,MAAMf;MACN,UAAUC;KACZ,CAAC;IAEJ,CAAA,GACA,EAAE,oCAAoC,4CAA4C,CAC9E;;GACP,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAACe,GAAD;MAAO,SAAQ;MACZ,UAAA,EAAE,iCAAiC,4BAA4B;KAC3D,CAAA,GACP,kBAACC,GAAD;MACE,IAAG;MACH,OAAOjB;MACP,UAAUE;MACV,WAAW,MAAUT,EAAQsB,EAAM,OAAO,KAAK;MAC/C,cACE,KAAKX,EAAK;OAAE;OAAS,MAAMJ;OAAe,UAAUC;MAAkB,CAAC;MAEzE,aAAalB;KACd,CAAA,CACE;IACL,CAAA,GAAA,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAACiC,GAAD;MAAO,SAAQ;MACZ,UAAA,EAAE,qCAAqC,UAAU;KAC7C,CAAA,GACP,kBAACC,GAAD;MACE,IAAG;MACH,OAAOhB;MACP,UAAUC;MACV,WAAW,MAAUN,EAAYmB,EAAM,OAAO,KAAK;MACnD,cACE,KAAKX,EAAK;OAAE;OAAS,MAAMJ;OAAe,UAAUC;MAAkB,CAAC;MAEzE,aAAajB;KACd,CAAA,CACE;IACF,CAAA,CAAA;;GACJG,GAAQ,aACP,kBAAC,KAAD;IAAG,WAAU;IACV,UAAA,EAAE,+BAA+B,yBAAyB,EACzD,MAAM+B,EAAmB/B,EAAO,SAAS,EAC3C,CAAC;GACA,CAAA;GAEJU,KACC,kBAAC,KAAD;IAAG,WAAU;IAAiC,MAAK;IAChD,UAAAA;GACA,CAAA;EAEM;CACT,CAAA,CAAA,EAAA,CAAA;AAEV,GAGMsB,UAA8B;CAClC,IAAM,IAAIjC,EAAM,GACV,EAAE,MAAMkC,GAAM,YAAS,aAAUC,EAAkB;CAIzD,OAFIb,KAAU,CAACL,KAAWiB,EAAK,WAAW,IAAW,OAGnD,kBAACV,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD;EAAW,WAAU;EAClB,UAAA,EAAE,uCAAuC,gBAAgB;CACjD,CAAA,EACD,CAAA,GACZ,kBAACE,GAAD,EAAA,UACE,kBAAC,MAAD;EAAI,WAAU;EACX,UAAAM,EAAK,KAAK,MACT,kBAAC,MAAD;GAAiB,WAAU;GAA3B,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAACE,GAAD;KACE,SACEC,EAAI,WAAW,cACX,YACAA,EAAI,WAAW,WACb,gBACA;KAGP,UAAAA,EAAI;IACA,CAAA,GACP,kBAAC,QAAD;KAAM,WAAU;KACb,UAAA,EACC,+BACA,+DACA;MACE,SAASA,EAAI;MACb,UAAUA,EAAI;MACd,UAAUA,EAAI;KAChB,CACF;IACI,CAAA,CACH;GACL,CAAA,GAAA,kBAAC,QAAD;IAAM,WAAU;IACb,UAAAL,EAAmBK,EAAI,SAAS;GAC7B,CAAA,CACJ;EA5BK,GAAAA,EAAI,EA4BT,CACL;CACC,CAAA,EACO,CAAA,CACT,EAAA,CAAA;AAEV,GAEaC,UAA6B;CACxC,IAAMC,IAAIvC,EAAM,GACV,CAACwC,GAAQC,KAAeC,EAAoB,GAC5C,CAACC,GAAUC,KAAepC,EAAwB,IAAI,GACtD,CAACqC,GAAYC,KAAiBtC,EAAwB,IAAI,GAC1DQ,IAAOyB,EAAY,SAEnBM,IAAW,YAAY;EAE3B,AADAH,EAAY,IAAI,GAChBE,EAAc,IAAI;EAClB,IAAI;GACF,IAAME,IAAS,MAAMR,EAAO;GAC5B,EACEQ,EAAO,MACHT,EACE,qCACA,2DACA;IACE,QAAQS,EAAO,IAAI;IACnB,UAAUA,EAAO;GACnB,CACF,IACAT,EACE,qCACA,qDACF,CACN;EACF,SAASjB,GAAO;GACd,EAAYA,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK,CAAC;EACpE;CACF;CAEA,OACE,kBAAC2B,GAAD;EACE,OAAOV,EAAE,6BAA6B,eAAe;EACrD,aAAaA,EACX,mCACA,uGACF;EACA,SACE,kBAACW,GAAD;GAAQ,SAAQ;GAAU,eAAe,KAAKH,EAAS;GAAG,UAAU/B;GAApE,UAAA,CACE,kBAACmC,GAAD,EAAM,WAAU,UAAW,CAAA,GAC1BZ,EAAE,8BAA8B,gBAAgB,CAC3C;;EAGV,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;KACII,KAAYE,MACZ,kBAAC,KAAD;KACE,WACEF,IAAW,mCAAmC;KAEhD,MAAK;KAEJ,UAAAA,KAAYE;IACZ,CAAA;IAEL,kBAACO,GAAD,CAAoB,CAAA;IACpB,kBAACrD,GAAD,CAA0B,CAAA;IAC1B,kBAACkC,GAAD,CAAoB,CAAA;GACjB;;CACK,CAAA;AAEhB"}
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ interface BotChannelsTabProps {
3
+ botId: string;
4
+ botName: string;
5
+ }
6
+ export declare const BotChannelsTab: FC<BotChannelsTabProps>;
7
+ export {};