@burdenoff/microfe-botmanor 2026.1108.1 → 2026.1109.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/dist/botlit/BotlitRoutes.d.ts +2 -0
  2. package/dist/botlit/BotlitRoutes.js +40 -52
  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 +35 -0
  72. package/dist/botlit/hooks/index.js +16 -16
  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 +62 -0
  107. package/dist/botlit/hooks/useBuckets.js +91 -58
  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/useExecutions.d.ts +87 -0
  113. package/dist/botlit/hooks/useExecutions.js +37 -37
  114. package/dist/botlit/hooks/useExecutions.js.map +1 -1
  115. package/dist/botlit/hooks/useKnowledgeBases.d.ts +79 -0
  116. package/dist/botlit/hooks/useKnowledgeBases.js +40 -39
  117. package/dist/botlit/hooks/useKnowledgeBases.js.map +1 -1
  118. package/dist/botlit/hooks/useKnowledgeSourceImports.d.ts +21 -0
  119. package/dist/botlit/hooks/useKnowledgeSourceImports.js +1 -2
  120. package/dist/botlit/hooks/useKnowledgeSourceImports.js.map +1 -1
  121. package/dist/botlit/hooks/useLLMProviders.d.ts +66 -0
  122. package/dist/botlit/hooks/useLLMProviders.js +25 -26
  123. package/dist/botlit/hooks/useLLMProviders.js.map +1 -1
  124. package/dist/botlit/hooks/useMCPServers.d.ts +71 -0
  125. package/dist/botlit/hooks/useMCPServers.js +40 -38
  126. package/dist/botlit/hooks/useMCPServers.js.map +1 -1
  127. package/dist/botlit/hooks/usePolicies.d.ts +60 -0
  128. package/dist/botlit/hooks/usePolicies.js +49 -49
  129. package/dist/botlit/hooks/usePolicies.js.map +1 -1
  130. package/dist/botlit/hooks/usePromptTemplates.d.ts +88 -0
  131. package/dist/botlit/hooks/usePromptTemplates.js +57 -57
  132. package/dist/botlit/hooks/usePromptTemplates.js.map +1 -1
  133. package/dist/botlit/hooks/useRetention.d.ts +26 -0
  134. package/dist/botlit/hooks/useRetention.js +3 -3
  135. package/dist/botlit/hooks/useRetention.js.map +1 -1
  136. package/dist/botlit/hooks/useRetrievalProfiles.d.ts +75 -0
  137. package/dist/botlit/hooks/useRetrievalProfiles.js +47 -47
  138. package/dist/botlit/hooks/useRetrievalProfiles.js.map +1 -1
  139. package/dist/botlit/hooks/useSkills.d.ts +64 -0
  140. package/dist/botlit/hooks/useSkills.js +53 -53
  141. package/dist/botlit/hooks/useSkills.js.map +1 -1
  142. package/dist/botlit/hooks/useStore.d.ts +112 -0
  143. package/dist/botlit/hooks/useStore.js +55 -55
  144. package/dist/botlit/hooks/useStore.js.map +1 -1
  145. package/dist/botlit/hooks/useUserPlatformConnection.d.ts +80 -0
  146. package/dist/botlit/hooks/useUserPlatformConnection.js +19 -19
  147. package/dist/botlit/hooks/useUserPlatformConnection.js.map +1 -1
  148. package/dist/botlit/index.d.ts +15 -0
  149. package/dist/botlit/index.js +11 -11
  150. package/dist/botlit/pages/A2AAgentDetailPage.d.ts +6 -0
  151. package/dist/botlit/pages/A2AAgentDetailPage.js +171 -178
  152. package/dist/botlit/pages/A2AAgentDetailPage.js.map +1 -1
  153. package/dist/botlit/pages/A2ARegistryPage.d.ts +2 -0
  154. package/dist/botlit/pages/A2ARegistryPage.js +25 -26
  155. package/dist/botlit/pages/A2ARegistryPage.js.map +1 -1
  156. package/dist/botlit/pages/AgentApprovalsPage.d.ts +2 -0
  157. package/dist/botlit/pages/AgentApprovalsPage.js +32 -33
  158. package/dist/botlit/pages/AgentApprovalsPage.js.map +1 -1
  159. package/dist/botlit/pages/AgentBuilderPage.d.ts +2 -0
  160. package/dist/botlit/pages/AgentBuilderPage.js +59 -60
  161. package/dist/botlit/pages/AgentBuilderPage.js.map +1 -1
  162. package/dist/botlit/pages/AgentDetailPage.d.ts +2 -0
  163. package/dist/botlit/pages/AgentDetailPage.js +83 -84
  164. package/dist/botlit/pages/AgentDetailPage.js.map +1 -1
  165. package/dist/botlit/pages/AgentsListPage.d.ts +2 -0
  166. package/dist/botlit/pages/AgentsListPage.js +71 -72
  167. package/dist/botlit/pages/AgentsListPage.js.map +1 -1
  168. package/dist/botlit/pages/AiOperationsPage.d.ts +2 -0
  169. package/dist/botlit/pages/AiOperationsPage.js +52 -53
  170. package/dist/botlit/pages/AiOperationsPage.js.map +1 -1
  171. package/dist/botlit/pages/BotChannelsTab.d.ts +7 -0
  172. package/dist/botlit/pages/BotChannelsTab.js +120 -122
  173. package/dist/botlit/pages/BotChannelsTab.js.map +1 -1
  174. package/dist/botlit/pages/BotDetailPage.d.ts +7 -0
  175. package/dist/botlit/pages/BotDetailPage.js +353 -358
  176. package/dist/botlit/pages/BotDetailPage.js.map +1 -1
  177. package/dist/botlit/pages/BotWorkflowTab.d.ts +11 -0
  178. package/dist/botlit/pages/BotWorkflowTab.js +20 -21
  179. package/dist/botlit/pages/BotWorkflowTab.js.map +1 -1
  180. package/dist/botlit/pages/BotsListPage.d.ts +2 -0
  181. package/dist/botlit/pages/BotsListPage.js +52 -53
  182. package/dist/botlit/pages/BotsListPage.js.map +1 -1
  183. package/dist/botlit/pages/BucketDetailPage.d.ts +2 -0
  184. package/dist/botlit/pages/BucketDetailPage.js +251 -0
  185. package/dist/botlit/pages/BucketDetailPage.js.map +1 -0
  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/DashboardPage.d.ts +2 -0
  202. package/dist/botlit/pages/DashboardPage.js +37 -38
  203. package/dist/botlit/pages/DashboardPage.js.map +1 -1
  204. package/dist/botlit/pages/ExecutionDetailPage.d.ts +2 -0
  205. package/dist/botlit/pages/ExecutionDetailPage.js +47 -48
  206. package/dist/botlit/pages/ExecutionDetailPage.js.map +1 -1
  207. package/dist/botlit/pages/ExecutionsPage.d.ts +2 -0
  208. package/dist/botlit/pages/ExecutionsPage.js +72 -70
  209. package/dist/botlit/pages/ExecutionsPage.js.map +1 -1
  210. package/dist/botlit/pages/InstalledPackagesPage.d.ts +2 -0
  211. package/dist/botlit/pages/InstalledPackagesPage.js +77 -78
  212. package/dist/botlit/pages/InstalledPackagesPage.js.map +1 -1
  213. package/dist/botlit/pages/KnowledgeBaseDetailPage.d.ts +6 -0
  214. package/dist/botlit/pages/KnowledgeBaseDetailPage.js +171 -181
  215. package/dist/botlit/pages/KnowledgeBaseDetailPage.js.map +1 -1
  216. package/dist/botlit/pages/KnowledgeBasesPage.d.ts +2 -0
  217. package/dist/botlit/pages/KnowledgeBasesPage.js +30 -31
  218. package/dist/botlit/pages/KnowledgeBasesPage.js.map +1 -1
  219. package/dist/botlit/pages/MCPServerDetailPage.d.ts +6 -0
  220. package/dist/botlit/pages/MCPServerDetailPage.js +82 -83
  221. package/dist/botlit/pages/MCPServerDetailPage.js.map +1 -1
  222. package/dist/botlit/pages/MCPServersPage.d.ts +2 -0
  223. package/dist/botlit/pages/MCPServersPage.js +54 -55
  224. package/dist/botlit/pages/MCPServersPage.js.map +1 -1
  225. package/dist/botlit/pages/PoliciesPage.d.ts +2 -0
  226. package/dist/botlit/pages/PoliciesPage.js +25 -26
  227. package/dist/botlit/pages/PoliciesPage.js.map +1 -1
  228. package/dist/botlit/pages/PolicyDetailPage.d.ts +6 -0
  229. package/dist/botlit/pages/PolicyDetailPage.js +257 -259
  230. package/dist/botlit/pages/PolicyDetailPage.js.map +1 -1
  231. package/dist/botlit/pages/PromptStudioPage.d.ts +2 -0
  232. package/dist/botlit/pages/PromptStudioPage.js +35 -35
  233. package/dist/botlit/pages/PromptStudioPage.js.map +1 -1
  234. package/dist/botlit/pages/PromptTemplateDetailPage.d.ts +6 -0
  235. package/dist/botlit/pages/PromptTemplateDetailPage.js +363 -362
  236. package/dist/botlit/pages/PromptTemplateDetailPage.js.map +1 -1
  237. package/dist/botlit/pages/PromptTemplatesPage.d.ts +2 -0
  238. package/dist/botlit/pages/PromptTemplatesPage.js +26 -27
  239. package/dist/botlit/pages/PromptTemplatesPage.js.map +1 -1
  240. package/dist/botlit/pages/RetrievalProfileDetailPage.d.ts +6 -0
  241. package/dist/botlit/pages/RetrievalProfileDetailPage.js +150 -158
  242. package/dist/botlit/pages/RetrievalProfileDetailPage.js.map +1 -1
  243. package/dist/botlit/pages/RetrievalProfilesPage.d.ts +2 -0
  244. package/dist/botlit/pages/RetrievalProfilesPage.js +24 -25
  245. package/dist/botlit/pages/RetrievalProfilesPage.js.map +1 -1
  246. package/dist/botlit/pages/SettingsPage.d.ts +2 -0
  247. package/dist/botlit/pages/SettingsPage.js +124 -125
  248. package/dist/botlit/pages/SettingsPage.js.map +1 -1
  249. package/dist/botlit/pages/SkillDetailPage.d.ts +6 -0
  250. package/dist/botlit/pages/SkillDetailPage.js +216 -217
  251. package/dist/botlit/pages/SkillDetailPage.js.map +1 -1
  252. package/dist/botlit/pages/SkillsPage.d.ts +2 -0
  253. package/dist/botlit/pages/SkillsPage.js +24 -25
  254. package/dist/botlit/pages/SkillsPage.js.map +1 -1
  255. package/dist/botlit/pages/StorePackageDetailPage.d.ts +2 -0
  256. package/dist/botlit/pages/StorePackageDetailPage.js +38 -39
  257. package/dist/botlit/pages/StorePackageDetailPage.js.map +1 -1
  258. package/dist/botlit/pages/StorePage.d.ts +2 -0
  259. package/dist/botlit/pages/StorePage.js +135 -136
  260. package/dist/botlit/pages/StorePage.js.map +1 -1
  261. package/dist/botlit/pages/index.d.ts +38 -0
  262. package/dist/botlit/permissions/PermissionRequired.d.ts +20 -0
  263. package/dist/botlit/permissions/PermissionRequired.js +10 -11
  264. package/dist/botlit/permissions/PermissionRequired.js.map +1 -1
  265. package/dist/botlit/permissions/botmanorPermissions.d.ts +82 -0
  266. package/dist/botlit/permissions/botmanorPermissions.js +1 -2
  267. package/dist/botlit/permissions/botmanorPermissions.js.map +1 -1
  268. package/dist/botlit/permissions/index.d.ts +7 -0
  269. package/dist/botlit/permissions/index.js +4 -3
  270. package/dist/botlit/permissions/useBotmanorPermissions.d.ts +41 -0
  271. package/dist/botlit/permissions/useBotmanorPermissions.js +1 -2
  272. package/dist/botlit/permissions/useBotmanorPermissions.js.map +1 -1
  273. package/dist/botlit/providers/BotlitProvider.d.ts +14 -0
  274. package/dist/botlit/providers/BotlitProvider.js +3 -3
  275. package/dist/botlit/providers/BotlitProvider.js.map +1 -1
  276. package/dist/botlit/store/botlitStore.d.ts +85 -0
  277. package/dist/botlit/store/botlitStore.js +1 -2
  278. package/dist/botlit/store/botlitStore.js.map +1 -1
  279. package/dist/botlit/store/renamedKeyStorage.d.ts +13 -0
  280. package/dist/botlit/store/renamedKeyStorage.js +1 -2
  281. package/dist/botlit/store/renamedKeyStorage.js.map +1 -1
  282. package/dist/botlit/types/index.d.ts +1008 -0
  283. package/dist/botlit/utils/cn.d.ts +2 -0
  284. package/dist/botlit/utils/cn.js +1 -2
  285. package/dist/botlit/utils/cn.js.map +1 -1
  286. package/dist/botlit/utils/embedding-models.d.ts +9 -0
  287. package/dist/botlit/utils/embedding-models.js +1 -2
  288. package/dist/botlit/utils/embedding-models.js.map +1 -1
  289. package/dist/botlit/utils/errors.d.ts +19 -0
  290. package/dist/botlit/utils/errors.js +1 -2
  291. package/dist/botlit/utils/errors.js.map +1 -1
  292. package/dist/botlit/utils/formatters.d.ts +38 -0
  293. package/dist/botlit/utils/formatters.js +0 -1
  294. package/dist/botlit/utils/formatters.js.map +1 -1
  295. package/dist/botlit/utils/navigation.d.ts +19 -0
  296. package/dist/botlit/utils/navigation.js +1 -2
  297. package/dist/botlit/utils/navigation.js.map +1 -1
  298. package/dist/botlit/utils/policyConfig.d.ts +68 -0
  299. package/dist/botlit/utils/policyConfig.js +2 -3
  300. package/dist/botlit/utils/policyConfig.js.map +1 -1
  301. package/dist/botlit/utils/unions.d.ts +25 -0
  302. package/dist/botlit/utils/unions.js +1 -2
  303. package/dist/botlit/utils/unions.js.map +1 -1
  304. package/dist/dev/App.d.ts +2 -0
  305. package/dist/dev/main.d.ts +0 -0
  306. package/dist/generated/global-operations.d.ts +197 -0
  307. package/dist/generated/global-operations.js +1 -2
  308. package/dist/generated/global-operations.js.map +1 -1
  309. package/dist/generated/global-types.d.ts +27678 -0
  310. package/dist/generated/global-types.js +1 -2
  311. package/dist/generated/global-types.js.map +1 -1
  312. package/dist/generated/wspace-operations.d.ts +5489 -0
  313. package/dist/generated/wspace-operations.js +88 -84
  314. package/dist/generated/wspace-operations.js.map +1 -1
  315. package/dist/generated/wspace-types.d.ts +152017 -0
  316. package/dist/generated/wspace-types.js +1 -2
  317. package/dist/generated/wspace-types.js.map +1 -1
  318. package/dist/index.d.ts +5 -0
  319. package/dist/index.js +5 -6
  320. package/dist/shared/hooks/useTr.d.ts +16 -0
  321. package/dist/shared/hooks/useTr.js +1 -2
  322. package/dist/shared/hooks/useTr.js.map +1 -1
  323. package/dist/stories/Badge.stories.d.ts +11 -0
  324. package/dist/stories/Button.stories.d.ts +13 -0
  325. package/dist/stories/EmptyState.stories.d.ts +8 -0
  326. package/dist/stories/StatusBadge.stories.d.ts +9 -0
  327. package/dist/test/fixtures.d.ts +39 -0
  328. package/dist/test/happydom.d.ts +1 -0
  329. package/dist/test/renderPage.d.ts +18 -0
  330. package/dist/test/setup.d.ts +9 -0
  331. package/dist/utils/nativeBridge.d.ts +2 -0
  332. package/dist/utils/nativeBridge.js +1 -2
  333. package/package.json +87 -60
  334. package/dist/botlit/hooks/useConversations.js +0 -64
  335. package/dist/botlit/hooks/useConversations.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"A2AAgentDetailPage.js","names":[],"sources":["../../../src/botlit/pages/A2AAgentDetailPage.tsx"],"sourcesContent":["/**\n * A2A Agent Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { toast } from 'sonner';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeImpact, nativeNotify } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Edit,\n Trash2,\n Share2,\n Shield,\n Globe,\n Key,\n Zap,\n ExternalLink,\n} from 'lucide-react';\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, StatusBadge } from '../components/Badge';\nimport { Input, Textarea, FormField } from '../components/Input';\nimport {\n useA2AAgent,\n useRegisterA2AAgent,\n useUpdateA2AAgent,\n useDeleteA2AAgent,\n readAgentCard,\n readEntitlements,\n validateAgentCard,\n type A2AAgentRecord,\n} from '../hooks/useA2A';\nimport { formatRelativeTime, MISSING_VALUE } from '../utils/formatters';\nimport type { TrustLevel } from '../types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\ninterface A2AAgentDetailPageProps {\n isNew?: boolean;\n}\n\n/** Editable subset of an A2A registry entry. */\ninterface A2AAgentForm {\n name: string;\n description: string;\n wellKnownUrl: string;\n trustLevel: TrustLevel;\n /** The `/.well-known/agent.json` document, edited as raw JSON. */\n agentCardJson: string;\n}\n\nconst TRUST_LEVELS: TrustLevel[] = ['UNVERIFIED', 'VERIFIED_PUBLISHER', 'INTERNAL'];\n\nconst EMPTY_AGENT_CARD_JSON = JSON.stringify(\n {\n name: '',\n description: '',\n url: '',\n version: '1.0.0',\n capabilities: { streaming: false, pushNotifications: false, stateTransitionHistory: false },\n authentication: { schemes: ['bearer'] },\n defaultInputModes: ['text'],\n defaultOutputModes: ['text'],\n skills: [],\n },\n null,\n 2\n);\n\nconst DEFAULT_FORM: A2AAgentForm = {\n name: '',\n description: '',\n wellKnownUrl: '',\n trustLevel: 'UNVERIFIED',\n agentCardJson: EMPTY_AGENT_CARD_JSON,\n};\n\nfunction toTrustLevel(value: string): TrustLevel {\n return TRUST_LEVELS.includes(value as TrustLevel) ? (value as TrustLevel) : 'UNVERIFIED';\n}\n\nfunction toForm(agent: A2AAgentRecord): A2AAgentForm {\n return {\n name: agent.name,\n description: agent.description ?? '',\n wellKnownUrl: agent.wellKnownUrl ?? '',\n trustLevel: toTrustLevel(agent.trustLevel),\n agentCardJson: JSON.stringify(agent.agentCard ?? {}, null, 2),\n };\n}\n\n/** Parses the edited agent card; returns undefined when the JSON is malformed. */\nfunction parseAgentCard(json: string): Record<string, unknown> | undefined {\n try {\n const parsed: unknown = JSON.parse(json);\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport const A2AAgentDetailPage: FC<A2AAgentDetailPageProps> = ({ isNew = false }) => {\n const { agentId } = useParams();\n const { navigateTo } = useBotlit();\n const { data: a2aAgent, loading } = useA2AAgent(isNew ? undefined : agentId);\n const [createA2AAgent, createA2AAgentResult] = useRegisterA2AAgent();\n const [updateA2AAgent, updateA2AAgentResult] = useUpdateA2AAgent();\n const [deleteA2AAgent, deleteA2AAgentResult] = useDeleteA2AAgent();\n\n const [isEditing, setIsEditing] = useState(isNew);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [formData, setFormData] = useState<A2AAgentForm>(DEFAULT_FORM);\n\n // Seed the form once the entry arrives so \"Edit\" opens on current values.\n useEffect(() => {\n if (a2aAgent && !isNew) {\n setFormData(toForm(a2aAgent));\n }\n }, [a2aAgent, isNew]);\n\n // While editing, preview the card being typed; otherwise the stored one.\n const agentCard = useMemo(\n () =>\n readAgentCard(\n isEditing ? parseAgentCard(formData.agentCardJson) : (a2aAgent?.agentCard ?? undefined)\n ),\n [isEditing, formData.agentCardJson, a2aAgent]\n );\n\n const entitlements = useMemo(\n () => readEntitlements(a2aAgent?.entitlements),\n [a2aAgent?.entitlements]\n );\n\n if (loading && !isNew) {\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 (!a2aAgent && !isNew) {\n return (\n <PageLayout title=\"A2A Agent Not Found\">\n <EmptyState\n illustration=\"empty-people\"\n title=\"A2A Agent Not Found\"\n description=\"The A2A agent doesn't exist.\"\n action={<Button onClick={() => navigateTo('a2a')}>Back to A2A Registry</Button>}\n />\n </PageLayout>\n );\n }\n\n const getTrustBadgeVariant = (level: TrustLevel) => {\n switch (level) {\n case 'INTERNAL':\n return 'success';\n case 'VERIFIED_PUBLISHER':\n return 'default';\n default:\n return 'secondary';\n }\n };\n\n const handleSave = async () => {\n if (!formData.name.trim()) {\n toast.error('Name is required');\n return;\n }\n\n // `agentCard` is `JSON!` on the service — a registration without a usable\n // card is rejected, so the document is parsed and checked before sending.\n const agentCard = parseAgentCard(formData.agentCardJson);\n if (!agentCard) {\n toast.error('Agent card must be a valid JSON object');\n return;\n }\n const validation = validateAgentCard(agentCard);\n if (!validation.valid) {\n toast.error(validation.errors[0]);\n return;\n }\n\n if (isNew) {\n try {\n const created = await createA2AAgent({\n name: formData.name.trim(),\n description: formData.description.trim() || null,\n wellKnownUrl: formData.wellKnownUrl.trim() || null,\n trustLevel: formData.trustLevel,\n agentCard,\n });\n toast.success(`Registered \"${created.name}\"`);\n navigateTo(`a2a/${created.id}`);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to register A2A agent');\n }\n return;\n }\n\n if (!agentId) return;\n try {\n await updateA2AAgent({\n agentId,\n input: {\n name: formData.name.trim(),\n description: formData.description.trim() || null,\n wellKnownUrl: formData.wellKnownUrl.trim() || null,\n trustLevel: formData.trustLevel,\n agentCard,\n },\n });\n toast.success('A2A agent updated');\n setIsEditing(false);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to update A2A agent');\n }\n };\n\n const handleDelete = async () => {\n if (!agentId) return;\n try {\n await deleteA2AAgent(agentId);\n if (isNative()) void nativeNotify('success');\n toast.success('A2A agent removed');\n navigateTo('a2a');\n } catch (err) {\n if (isNative()) void nativeNotify('error');\n toast.error(err instanceof Error ? err.message : 'Failed to remove A2A agent');\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('a2a')}>\n <ArrowLeft size={20} />\n </Button>\n <Share2 size={24} className=\"text-primary\" />\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{isNew ? 'Register A2A Agent' : a2aAgent?.name}</span>\n {!isNew && a2aAgent && <StatusBadge status={a2aAgent.status} />}\n {!isNew && a2aAgent && (\n <Badge variant={getTrustBadgeVariant(toTrustLevel(a2aAgent.trustLevel))}>\n {a2aAgent.trustLevel.replace('_', ' ')}\n </Badge>\n )}\n </div>\n {!isNew && a2aAgent?.description && (\n <p className=\"text-sm font-normal text-text-secondary\">{a2aAgent.description}</p>\n )}\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {isEditing ? (\n <>\n <Button\n variant=\"outline\"\n onClick={() => (isNew ? navigateTo('a2a') : setIsEditing(false))}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSave}\n isLoading={createA2AAgentResult.loading || updateA2AAgentResult.loading}\n >\n {isNew ? 'Register Agent' : 'Save Changes'}\n </Button>\n </>\n ) : (\n <>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_UPDATE}>\n <Button\n variant=\"outline\"\n leftIcon={<Edit size={16} />}\n onClick={() => {\n if (a2aAgent) setFormData(toForm(a2aAgent));\n setIsEditing(true);\n }}\n >\n Edit\n </Button>\n </BotmanorPermissionGate>\n {showDeleteConfirm ? (\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowDeleteConfirm(false)}>\n Cancel\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => {\n nativeImpact('medium');\n void handleDelete();\n }}\n isLoading={deleteA2AAgentResult.loading}\n >\n Confirm\n </Button>\n </div>\n ) : (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_DELETE}>\n <Button\n variant=\"destructive\"\n leftIcon={<Trash2 size={16} />}\n onClick={() => setShowDeleteConfirm(true)}\n >\n Remove\n </Button>\n </BotmanorPermissionGate>\n )}\n </>\n )}\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Globe size={18} />}>\n This is one external agent registered in your A2A network. Inspect its public agent card —\n the skills it advertises, its provider and trust level — and decide how your own agents\n may delegate work to it. Keeping this entry accurate is what lets BotManor safely hand off\n tasks to agents outside your workspace.\n </PagePurpose>\n\n {/* Basic Info */}\n {isEditing && (\n <Card>\n <CardHeader>\n <CardTitle>Basic Information</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Name\" required>\n <Input\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n placeholder=\"e.g., External Weather Agent\"\n />\n </FormField>\n <FormField label=\"Description\">\n <Textarea\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n placeholder=\"Describe what this A2A agent does...\"\n rows={3}\n />\n </FormField>\n <FormField label=\"Well-Known URL\" description=\"URL to fetch agent.json\">\n <Input\n value={formData.wellKnownUrl}\n onChange={(e) => setFormData({ ...formData, wellKnownUrl: e.target.value })}\n placeholder=\"https://example.com/.well-known/agent.json\"\n />\n </FormField>\n <FormField label=\"Trust Level\">\n <select\n className=\"flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm\"\n value={formData.trustLevel}\n onChange={(e) =>\n setFormData({ ...formData, trustLevel: toTrustLevel(e.target.value) })\n }\n >\n <option value=\"UNVERIFIED\">Unverified</option>\n <option value=\"VERIFIED_PUBLISHER\">Verified Publisher</option>\n <option value=\"INTERNAL\">Internal</option>\n </select>\n </FormField>\n <FormField\n label=\"Agent Card (JSON)\"\n required\n description=\"Paste the agent's /.well-known/agent.json document\"\n >\n <Textarea\n value={formData.agentCardJson}\n onChange={(e) => setFormData({ ...formData, agentCardJson: e.target.value })}\n rows={12}\n className=\"font-mono text-xs\"\n />\n </FormField>\n {!parseAgentCard(formData.agentCardJson) && (\n <p className=\"text-sm text-status-error-text\">\n Agent card must be a valid JSON object.\n </p>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Agent Card */}\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Globe size={18} />\n Agent Card\n </CardTitle>\n <CardDescription>Public agent metadata per A2A spec</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {!isNew && a2aAgent?.wellKnownUrl && (\n <div className=\"flex items-center gap-2 p-3 bg-bg-sunken rounded-lg\">\n <Globe size={16} className=\"text-text-secondary\" />\n <a\n href={a2aAgent.wellKnownUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm text-primary hover:underline flex items-center gap-1\"\n >\n {a2aAgent.wellKnownUrl}\n <ExternalLink size={12} />\n </a>\n </div>\n )}\n\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Agent URL</p>\n <p className=\"font-medium font-mono text-sm\">{agentCard.url || MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Version</p>\n <Badge variant=\"outline\">{agentCard.version || MISSING_VALUE}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Provider</p>\n <p className=\"font-medium\">{agentCard.providerOrganization || MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Documentation</p>\n {agentCard.documentationUrl ? (\n <a\n href={agentCard.documentationUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:underline flex items-center gap-1\"\n >\n View Docs <ExternalLink size={12} />\n </a>\n ) : (\n <p className=\"text-text-secondary\">{MISSING_VALUE}</p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Capabilities */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Zap size={18} />\n Capabilities\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-4\">\n {[\n {\n key: 'streaming',\n label: 'Streaming',\n value: agentCard.capabilities.streaming,\n },\n {\n key: 'pushNotifications',\n label: 'Push Notifications',\n value: agentCard.capabilities.pushNotifications,\n },\n {\n key: 'stateTransitionHistory',\n label: 'State History',\n value: agentCard.capabilities.stateTransitionHistory,\n },\n ].map((cap) => (\n <div\n key={cap.key}\n className={`p-3 rounded-lg border ${cap.value ? 'border-green-500 bg-green-500/10' : 'border-border-subtle bg-bg-sunken'}`}\n >\n <p className=\"font-medium\">{cap.label}</p>\n <Badge variant={cap.value ? 'success' : 'secondary'}>\n {cap.value ? 'Supported' : 'Not Supported'}\n </Badge>\n </div>\n ))}\n </div>\n <div className=\"mt-4 grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Input Modes</p>\n <div className=\"flex flex-wrap gap-2\">\n {agentCard.defaultInputModes.length > 0 ? (\n agentCard.defaultInputModes.map((mode) => (\n <Badge key={mode} variant=\"outline\">\n {mode}\n </Badge>\n ))\n ) : (\n <span className=\"text-text-secondary\">None</span>\n )}\n </div>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Output Modes</p>\n <div className=\"flex flex-wrap gap-2\">\n {agentCard.defaultOutputModes.length > 0 ? (\n agentCard.defaultOutputModes.map((mode) => (\n <Badge key={mode} variant=\"outline\">\n {mode}\n </Badge>\n ))\n ) : (\n <span className=\"text-text-secondary\">None</span>\n )}\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Authentication */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Key size={18} />\n Authentication\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <p className=\"text-sm text-text-secondary\">Supported Schemes</p>\n <div className=\"flex flex-wrap gap-2\">\n {agentCard.authenticationSchemes.length > 0 ? (\n agentCard.authenticationSchemes.map((scheme) => (\n <Badge key={scheme} variant=\"outline\">\n {scheme}\n </Badge>\n ))\n ) : (\n <span className=\"text-text-secondary\">None specified</span>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Skills */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Zap size={18} />\n Skills\n </CardTitle>\n <CardDescription>Capabilities exposed by this agent</CardDescription>\n </CardHeader>\n <CardContent>\n {agentCard.skills.length > 0 ? (\n <div className=\"space-y-3\">\n {agentCard.skills.map((skill) => (\n <div key={skill.id} className=\"p-4 border border-border-subtle rounded-lg\">\n <div className=\"flex items-start justify-between\">\n <div>\n <h4 className=\"font-medium\">{skill.name}</h4>\n <p className=\"text-sm text-text-secondary\">{skill.description}</p>\n </div>\n <Badge variant=\"outline\">{skill.id}</Badge>\n </div>\n {skill.tags.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-1\">\n {skill.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n {skill.examples.length > 0 && (\n <div className=\"mt-2\">\n <p className=\"text-xs text-text-secondary\">Examples:</p>\n <ul className=\"text-sm text-text-secondary list-disc list-inside\">\n {skill.examples.map((ex, i) => (\n <li key={i}>{ex}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No skills defined</p>\n )}\n </CardContent>\n </Card>\n\n {/* Entitlements */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Entitlements\n </CardTitle>\n <CardDescription>Which apps/agents can invoke this A2A agent</CardDescription>\n </CardHeader>\n <CardContent>\n {entitlements.length > 0 ? (\n <div className=\"space-y-3\">\n {entitlements.map((entitlement) => (\n <div key={entitlement.id} className=\"p-4 border border-border-subtle rounded-lg\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className=\"capitalize\">\n {entitlement.sourceType}\n </Badge>\n <span className=\"font-mono text-sm\">{entitlement.sourceId}</span>\n </div>\n {entitlement.maxHops && (\n <span className=\"text-sm text-text-secondary\">\n Max Hops: {entitlement.maxHops}\n </span>\n )}\n </div>\n <div className=\"grid grid-cols-2 gap-4 text-sm\">\n <div>\n <p className=\"text-text-secondary\">Allowed Skills</p>\n {entitlement.allowedSkills.length > 0 ? (\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {entitlement.allowedSkills.map((s) => (\n <Badge key={s} variant=\"success\" className=\"text-xs\">\n {s}\n </Badge>\n ))}\n </div>\n ) : (\n <span className=\"text-text-secondary\">All</span>\n )}\n </div>\n <div>\n <p className=\"text-text-secondary\">Disallowed Skills</p>\n {entitlement.disallowedSkills.length > 0 ? (\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {entitlement.disallowedSkills.map((s) => (\n <Badge key={s} variant=\"destructive\" className=\"text-xs\">\n {s}\n </Badge>\n ))}\n </div>\n ) : (\n <span className=\"text-text-secondary\">None</span>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No entitlements configured</p>\n )}\n </CardContent>\n </Card>\n\n {/* Metadata */}\n {!isNew && a2aAgent && (\n <Card>\n <CardHeader>\n <CardTitle>Metadata</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm\">\n <div>\n <p className=\"text-text-secondary\">Created</p>\n <p className=\"font-medium\">{formatRelativeTime(a2aAgent.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Updated</p>\n <p className=\"font-medium\">{formatRelativeTime(a2aAgent.updatedAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Revision</p>\n <p className=\"font-medium\">{a2aAgent.revision}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Visibility</p>\n <Badge variant=\"outline\">{a2aAgent.visibility}</Badge>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"A2AAgentDetailPage.js","names":["_Fragment","Textarea","Textarea$1","TRUST_LEVELS","DEFAULT_FORM","toTrustLevel","value","toForm","agent","parseAgentCard","parsed","json","A2AAgentDetailPage","useParams","useBotlit","a2aAgent","useA2AAgent","isNew","agentId","createA2AAgent","createA2AAgentResult","useRegisterA2AAgent","updateA2AAgent","updateA2AAgentResult","useUpdateA2AAgent","deleteA2AAgent","deleteA2AAgentResult","useDeleteA2AAgent","isEditing","setIsEditing","useState","showDeleteConfirm","setShowDeleteConfirm","formData","setFormData","agentCard","useMemo","readAgentCard","entitlements","readEntitlements","loading","PageLayout","EmptyState","Button","navigateTo","getTrustBadgeVariant","level","handleSave","validation","validateAgentCard","created","toast","err","handleDelete","isNative","nativeNotify","ArrowLeft","Share2","StatusBadge","Badge","Fragment","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Edit","nativeImpact","Trash2","PagePurpose","Globe","Card","CardHeader","CardTitle","CardContent","FormField","Input","CardDescription","ExternalLink","Zap","cap","mode","Key","scheme","skill","tag","ex","i","Shield","entitlement","s","formatRelativeTime"],"sources":["../../../src/botlit/pages/A2AAgentDetailPage.tsx"],"sourcesContent":["/**\n * A2A Agent Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { toast } from 'sonner';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeImpact, nativeNotify } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Edit,\n Trash2,\n Share2,\n Shield,\n Globe,\n Key,\n Zap,\n ExternalLink,\n} from 'lucide-react';\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, StatusBadge } from '../components/Badge';\nimport { Input, Textarea, FormField } from '../components/Input';\nimport {\n useA2AAgent,\n useRegisterA2AAgent,\n useUpdateA2AAgent,\n useDeleteA2AAgent,\n readAgentCard,\n readEntitlements,\n validateAgentCard,\n type A2AAgentRecord,\n} from '../hooks/useA2A';\nimport { formatRelativeTime, MISSING_VALUE } from '../utils/formatters';\nimport type { TrustLevel } from '../types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\ninterface A2AAgentDetailPageProps {\n isNew?: boolean;\n}\n\n/** Editable subset of an A2A registry entry. */\ninterface A2AAgentForm {\n name: string;\n description: string;\n wellKnownUrl: string;\n trustLevel: TrustLevel;\n /** The `/.well-known/agent.json` document, edited as raw JSON. */\n agentCardJson: string;\n}\n\nconst TRUST_LEVELS: TrustLevel[] = ['UNVERIFIED', 'VERIFIED_PUBLISHER', 'INTERNAL'];\n\nconst EMPTY_AGENT_CARD_JSON = JSON.stringify(\n {\n name: '',\n description: '',\n url: '',\n version: '1.0.0',\n capabilities: { streaming: false, pushNotifications: false, stateTransitionHistory: false },\n authentication: { schemes: ['bearer'] },\n defaultInputModes: ['text'],\n defaultOutputModes: ['text'],\n skills: [],\n },\n null,\n 2\n);\n\nconst DEFAULT_FORM: A2AAgentForm = {\n name: '',\n description: '',\n wellKnownUrl: '',\n trustLevel: 'UNVERIFIED',\n agentCardJson: EMPTY_AGENT_CARD_JSON,\n};\n\nfunction toTrustLevel(value: string): TrustLevel {\n return TRUST_LEVELS.includes(value as TrustLevel) ? (value as TrustLevel) : 'UNVERIFIED';\n}\n\nfunction toForm(agent: A2AAgentRecord): A2AAgentForm {\n return {\n name: agent.name,\n description: agent.description ?? '',\n wellKnownUrl: agent.wellKnownUrl ?? '',\n trustLevel: toTrustLevel(agent.trustLevel),\n agentCardJson: JSON.stringify(agent.agentCard ?? {}, null, 2),\n };\n}\n\n/** Parses the edited agent card; returns undefined when the JSON is malformed. */\nfunction parseAgentCard(json: string): Record<string, unknown> | undefined {\n try {\n const parsed: unknown = JSON.parse(json);\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport const A2AAgentDetailPage: FC<A2AAgentDetailPageProps> = ({ isNew = false }) => {\n const { agentId } = useParams();\n const { navigateTo } = useBotlit();\n const { data: a2aAgent, loading } = useA2AAgent(isNew ? undefined : agentId);\n const [createA2AAgent, createA2AAgentResult] = useRegisterA2AAgent();\n const [updateA2AAgent, updateA2AAgentResult] = useUpdateA2AAgent();\n const [deleteA2AAgent, deleteA2AAgentResult] = useDeleteA2AAgent();\n\n const [isEditing, setIsEditing] = useState(isNew);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [formData, setFormData] = useState<A2AAgentForm>(DEFAULT_FORM);\n\n // Seed the form once the entry arrives so \"Edit\" opens on current values.\n useEffect(() => {\n if (a2aAgent && !isNew) {\n setFormData(toForm(a2aAgent));\n }\n }, [a2aAgent, isNew]);\n\n // While editing, preview the card being typed; otherwise the stored one.\n const agentCard = useMemo(\n () =>\n readAgentCard(\n isEditing ? parseAgentCard(formData.agentCardJson) : (a2aAgent?.agentCard ?? undefined)\n ),\n [isEditing, formData.agentCardJson, a2aAgent]\n );\n\n const entitlements = useMemo(\n () => readEntitlements(a2aAgent?.entitlements),\n [a2aAgent?.entitlements]\n );\n\n if (loading && !isNew) {\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 (!a2aAgent && !isNew) {\n return (\n <PageLayout title=\"A2A Agent Not Found\">\n <EmptyState\n illustration=\"empty-people\"\n title=\"A2A Agent Not Found\"\n description=\"The A2A agent doesn't exist.\"\n action={<Button onClick={() => navigateTo('a2a')}>Back to A2A Registry</Button>}\n />\n </PageLayout>\n );\n }\n\n const getTrustBadgeVariant = (level: TrustLevel) => {\n switch (level) {\n case 'INTERNAL':\n return 'success';\n case 'VERIFIED_PUBLISHER':\n return 'default';\n default:\n return 'secondary';\n }\n };\n\n const handleSave = async () => {\n if (!formData.name.trim()) {\n toast.error('Name is required');\n return;\n }\n\n // `agentCard` is `JSON!` on the service — a registration without a usable\n // card is rejected, so the document is parsed and checked before sending.\n const agentCard = parseAgentCard(formData.agentCardJson);\n if (!agentCard) {\n toast.error('Agent card must be a valid JSON object');\n return;\n }\n const validation = validateAgentCard(agentCard);\n if (!validation.valid) {\n toast.error(validation.errors[0]);\n return;\n }\n\n if (isNew) {\n try {\n const created = await createA2AAgent({\n name: formData.name.trim(),\n description: formData.description.trim() || null,\n wellKnownUrl: formData.wellKnownUrl.trim() || null,\n trustLevel: formData.trustLevel,\n agentCard,\n });\n toast.success(`Registered \"${created.name}\"`);\n navigateTo(`a2a/${created.id}`);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to register A2A agent');\n }\n return;\n }\n\n if (!agentId) return;\n try {\n await updateA2AAgent({\n agentId,\n input: {\n name: formData.name.trim(),\n description: formData.description.trim() || null,\n wellKnownUrl: formData.wellKnownUrl.trim() || null,\n trustLevel: formData.trustLevel,\n agentCard,\n },\n });\n toast.success('A2A agent updated');\n setIsEditing(false);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to update A2A agent');\n }\n };\n\n const handleDelete = async () => {\n if (!agentId) return;\n try {\n await deleteA2AAgent(agentId);\n if (isNative()) void nativeNotify('success');\n toast.success('A2A agent removed');\n navigateTo('a2a');\n } catch (err) {\n if (isNative()) void nativeNotify('error');\n toast.error(err instanceof Error ? err.message : 'Failed to remove A2A agent');\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('a2a')}>\n <ArrowLeft size={20} />\n </Button>\n <Share2 size={24} className=\"text-primary\" />\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{isNew ? 'Register A2A Agent' : a2aAgent?.name}</span>\n {!isNew && a2aAgent && <StatusBadge status={a2aAgent.status} />}\n {!isNew && a2aAgent && (\n <Badge variant={getTrustBadgeVariant(toTrustLevel(a2aAgent.trustLevel))}>\n {a2aAgent.trustLevel.replace('_', ' ')}\n </Badge>\n )}\n </div>\n {!isNew && a2aAgent?.description && (\n <p className=\"text-sm font-normal text-text-secondary\">{a2aAgent.description}</p>\n )}\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {isEditing ? (\n <>\n <Button\n variant=\"outline\"\n onClick={() => (isNew ? navigateTo('a2a') : setIsEditing(false))}\n >\n Cancel\n </Button>\n <Button\n onClick={handleSave}\n isLoading={createA2AAgentResult.loading || updateA2AAgentResult.loading}\n >\n {isNew ? 'Register Agent' : 'Save Changes'}\n </Button>\n </>\n ) : (\n <>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_UPDATE}>\n <Button\n variant=\"outline\"\n leftIcon={<Edit size={16} />}\n onClick={() => {\n if (a2aAgent) setFormData(toForm(a2aAgent));\n setIsEditing(true);\n }}\n >\n Edit\n </Button>\n </BotmanorPermissionGate>\n {showDeleteConfirm ? (\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowDeleteConfirm(false)}>\n Cancel\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => {\n nativeImpact('medium');\n void handleDelete();\n }}\n isLoading={deleteA2AAgentResult.loading}\n >\n Confirm\n </Button>\n </div>\n ) : (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_DELETE}>\n <Button\n variant=\"destructive\"\n leftIcon={<Trash2 size={16} />}\n onClick={() => setShowDeleteConfirm(true)}\n >\n Remove\n </Button>\n </BotmanorPermissionGate>\n )}\n </>\n )}\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Globe size={18} />}>\n This is one external agent registered in your A2A network. Inspect its public agent card —\n the skills it advertises, its provider and trust level — and decide how your own agents\n may delegate work to it. Keeping this entry accurate is what lets BotManor safely hand off\n tasks to agents outside your workspace.\n </PagePurpose>\n\n {/* Basic Info */}\n {isEditing && (\n <Card>\n <CardHeader>\n <CardTitle>Basic Information</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Name\" required>\n <Input\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n placeholder=\"e.g., External Weather Agent\"\n />\n </FormField>\n <FormField label=\"Description\">\n <Textarea\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n placeholder=\"Describe what this A2A agent does...\"\n rows={3}\n />\n </FormField>\n <FormField label=\"Well-Known URL\" description=\"URL to fetch agent.json\">\n <Input\n value={formData.wellKnownUrl}\n onChange={(e) => setFormData({ ...formData, wellKnownUrl: e.target.value })}\n placeholder=\"https://example.com/.well-known/agent.json\"\n />\n </FormField>\n <FormField label=\"Trust Level\">\n <select\n className=\"flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm\"\n value={formData.trustLevel}\n onChange={(e) =>\n setFormData({ ...formData, trustLevel: toTrustLevel(e.target.value) })\n }\n >\n <option value=\"UNVERIFIED\">Unverified</option>\n <option value=\"VERIFIED_PUBLISHER\">Verified Publisher</option>\n <option value=\"INTERNAL\">Internal</option>\n </select>\n </FormField>\n <FormField\n label=\"Agent Card (JSON)\"\n required\n description=\"Paste the agent's /.well-known/agent.json document\"\n >\n <Textarea\n value={formData.agentCardJson}\n onChange={(e) => setFormData({ ...formData, agentCardJson: e.target.value })}\n rows={12}\n className=\"font-mono text-xs\"\n />\n </FormField>\n {!parseAgentCard(formData.agentCardJson) && (\n <p className=\"text-sm text-status-error-text\">\n Agent card must be a valid JSON object.\n </p>\n )}\n </CardContent>\n </Card>\n )}\n\n {/* Agent Card */}\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Globe size={18} />\n Agent Card\n </CardTitle>\n <CardDescription>Public agent metadata per A2A spec</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {!isNew && a2aAgent?.wellKnownUrl && (\n <div className=\"flex items-center gap-2 p-3 bg-bg-sunken rounded-lg\">\n <Globe size={16} className=\"text-text-secondary\" />\n <a\n href={a2aAgent.wellKnownUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm text-primary hover:underline flex items-center gap-1\"\n >\n {a2aAgent.wellKnownUrl}\n <ExternalLink size={12} />\n </a>\n </div>\n )}\n\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Agent URL</p>\n <p className=\"font-medium font-mono text-sm\">{agentCard.url || MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Version</p>\n <Badge variant=\"outline\">{agentCard.version || MISSING_VALUE}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Provider</p>\n <p className=\"font-medium\">{agentCard.providerOrganization || MISSING_VALUE}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Documentation</p>\n {agentCard.documentationUrl ? (\n <a\n href={agentCard.documentationUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:underline flex items-center gap-1\"\n >\n View Docs <ExternalLink size={12} />\n </a>\n ) : (\n <p className=\"text-text-secondary\">{MISSING_VALUE}</p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Capabilities */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Zap size={18} />\n Capabilities\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-4\">\n {[\n {\n key: 'streaming',\n label: 'Streaming',\n value: agentCard.capabilities.streaming,\n },\n {\n key: 'pushNotifications',\n label: 'Push Notifications',\n value: agentCard.capabilities.pushNotifications,\n },\n {\n key: 'stateTransitionHistory',\n label: 'State History',\n value: agentCard.capabilities.stateTransitionHistory,\n },\n ].map((cap) => (\n <div\n key={cap.key}\n className={`p-3 rounded-lg border ${cap.value ? 'border-green-500 bg-green-500/10' : 'border-border-subtle bg-bg-sunken'}`}\n >\n <p className=\"font-medium\">{cap.label}</p>\n <Badge variant={cap.value ? 'success' : 'secondary'}>\n {cap.value ? 'Supported' : 'Not Supported'}\n </Badge>\n </div>\n ))}\n </div>\n <div className=\"mt-4 grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Input Modes</p>\n <div className=\"flex flex-wrap gap-2\">\n {agentCard.defaultInputModes.length > 0 ? (\n agentCard.defaultInputModes.map((mode) => (\n <Badge key={mode} variant=\"outline\">\n {mode}\n </Badge>\n ))\n ) : (\n <span className=\"text-text-secondary\">None</span>\n )}\n </div>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary mb-2\">Output Modes</p>\n <div className=\"flex flex-wrap gap-2\">\n {agentCard.defaultOutputModes.length > 0 ? (\n agentCard.defaultOutputModes.map((mode) => (\n <Badge key={mode} variant=\"outline\">\n {mode}\n </Badge>\n ))\n ) : (\n <span className=\"text-text-secondary\">None</span>\n )}\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Authentication */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Key size={18} />\n Authentication\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <p className=\"text-sm text-text-secondary\">Supported Schemes</p>\n <div className=\"flex flex-wrap gap-2\">\n {agentCard.authenticationSchemes.length > 0 ? (\n agentCard.authenticationSchemes.map((scheme) => (\n <Badge key={scheme} variant=\"outline\">\n {scheme}\n </Badge>\n ))\n ) : (\n <span className=\"text-text-secondary\">None specified</span>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {/* Skills */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Zap size={18} />\n Skills\n </CardTitle>\n <CardDescription>Capabilities exposed by this agent</CardDescription>\n </CardHeader>\n <CardContent>\n {agentCard.skills.length > 0 ? (\n <div className=\"space-y-3\">\n {agentCard.skills.map((skill) => (\n <div key={skill.id} className=\"p-4 border border-border-subtle rounded-lg\">\n <div className=\"flex items-start justify-between\">\n <div>\n <h4 className=\"font-medium\">{skill.name}</h4>\n <p className=\"text-sm text-text-secondary\">{skill.description}</p>\n </div>\n <Badge variant=\"outline\">{skill.id}</Badge>\n </div>\n {skill.tags.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-1\">\n {skill.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n {skill.examples.length > 0 && (\n <div className=\"mt-2\">\n <p className=\"text-xs text-text-secondary\">Examples:</p>\n <ul className=\"text-sm text-text-secondary list-disc list-inside\">\n {skill.examples.map((ex, i) => (\n <li key={i}>{ex}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No skills defined</p>\n )}\n </CardContent>\n </Card>\n\n {/* Entitlements */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Entitlements\n </CardTitle>\n <CardDescription>Which apps/agents can invoke this A2A agent</CardDescription>\n </CardHeader>\n <CardContent>\n {entitlements.length > 0 ? (\n <div className=\"space-y-3\">\n {entitlements.map((entitlement) => (\n <div key={entitlement.id} className=\"p-4 border border-border-subtle rounded-lg\">\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className=\"capitalize\">\n {entitlement.sourceType}\n </Badge>\n <span className=\"font-mono text-sm\">{entitlement.sourceId}</span>\n </div>\n {entitlement.maxHops && (\n <span className=\"text-sm text-text-secondary\">\n Max Hops: {entitlement.maxHops}\n </span>\n )}\n </div>\n <div className=\"grid grid-cols-2 gap-4 text-sm\">\n <div>\n <p className=\"text-text-secondary\">Allowed Skills</p>\n {entitlement.allowedSkills.length > 0 ? (\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {entitlement.allowedSkills.map((s) => (\n <Badge key={s} variant=\"success\" className=\"text-xs\">\n {s}\n </Badge>\n ))}\n </div>\n ) : (\n <span className=\"text-text-secondary\">All</span>\n )}\n </div>\n <div>\n <p className=\"text-text-secondary\">Disallowed Skills</p>\n {entitlement.disallowedSkills.length > 0 ? (\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {entitlement.disallowedSkills.map((s) => (\n <Badge key={s} variant=\"destructive\" className=\"text-xs\">\n {s}\n </Badge>\n ))}\n </div>\n ) : (\n <span className=\"text-text-secondary\">None</span>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No entitlements configured</p>\n )}\n </CardContent>\n </Card>\n\n {/* Metadata */}\n {!isNew && a2aAgent && (\n <Card>\n <CardHeader>\n <CardTitle>Metadata</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm\">\n <div>\n <p className=\"text-text-secondary\">Created</p>\n <p className=\"font-medium\">{formatRelativeTime(a2aAgent.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Updated</p>\n <p className=\"font-medium\">{formatRelativeTime(a2aAgent.updatedAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Revision</p>\n <p className=\"font-medium\">{a2aAgent.revision}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Visibility</p>\n <Badge variant=\"outline\">{a2aAgent.visibility}</Badge>\n </div>\n </div>\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 A2ARegistryPage: FC;
@@ -1,24 +1,24 @@
1
- import { useTr as e } from "../../shared/hooks/useTr.js";
2
- import { useBotlit as t } from "../providers/BotlitProvider.js";
3
- import { formatRelativeTime as n } from "../utils/formatters.js";
1
+ import { useBotlit as e } from "../providers/BotlitProvider.js";
2
+ import { useTr as t } from "../../shared/hooks/useTr.js";
3
+ import { PageLayout as n } from "../components/PageLayout.js";
4
4
  import { BOTMANOR_PERMISSIONS as r } from "../permissions/botmanorPermissions.js";
5
5
  import { BotmanorPermissionGate as i } from "../permissions/useBotmanorPermissions.js";
6
- import { PageLayout as a } from "../components/PageLayout.js";
7
- import { Button as o } from "../components/Button.js";
8
- import "../permissions/index.js";
9
- import { Card as s, CardContent as c, CardDescription as l, CardHeader as u, CardTitle as d } from "../components/Card.js";
6
+ import { Card as a, CardContent as o, CardDescription as s, CardHeader as c, CardTitle as l } from "../components/Card.js";
7
+ import { Button as u } from "../components/Button.js";
8
+ import { Input as d } from "../components/Input.js";
10
9
  import { Badge as f, StatusBadge as p } from "../components/Badge.js";
11
10
  import { EmptyState as m } from "../components/EmptyState.js";
12
- import { Input as h } from "../components/Input.js";
13
- import { a2aAgentSkillCount as g, useA2AAgents as _ } from "../hooks/useA2A.js";
14
- import { ErrorState as v } from "../components/ErrorState.js";
11
+ import { ErrorState as h } from "../components/ErrorState.js";
15
12
  import "../hooks/index.js";
13
+ import { a2aAgentSkillCount as g, useA2AAgents as _ } from "../hooks/useA2A.js";
14
+ import { formatRelativeTime as v } from "../utils/formatters.js";
15
+ import "../permissions/index.js";
16
16
  import { useState as y } from "react";
17
17
  import { GlassCard as b, PagePurpose as x } from "@burdenoff/fe-libs/ui";
18
18
  import { jsx as S, jsxs as C } from "react/jsx-runtime";
19
19
  import { Link as w } from "react-router";
20
20
  import { AlertCircle as T, CheckCircle as E, ExternalLink as D, Filter as O, Globe as k, Plus as A, Search as j, Shield as M, Zap as N } from "lucide-react";
21
- //#region src/botlit/pages/A2ARegistryPage.tsx
21
+ // src/botlit/pages/A2ARegistryPage.tsx
22
22
  var P = ({ level: e, t }) => {
23
23
  switch (e) {
24
24
  case "INTERNAL": return /* @__PURE__ */ C(f, {
@@ -38,13 +38,13 @@ var P = ({ level: e, t }) => {
38
38
  });
39
39
  }
40
40
  }, F = () => {
41
- let T = e(), { getPath: E } = t(), [F, I] = y(""), { data: L, loading: R, error: z, refetch: B } = _({ search: F });
42
- return /* @__PURE__ */ S(a, {
41
+ let T = t(), { getPath: E } = e(), [F, I] = y(""), { data: L, loading: R, error: z, refetch: B } = _({ search: F });
42
+ return /* @__PURE__ */ S(n, {
43
43
  title: T("botlit.a2aRegistry.title", "A2A Registry"),
44
44
  description: T("botlit.a2aRegistry.description", "Discover and connect to external agents via the Agent-to-Agent protocol"),
45
45
  actions: /* @__PURE__ */ S(i, {
46
46
  permission: r.A2A_REGISTRY_CREATE,
47
- children: /* @__PURE__ */ S(o, {
47
+ children: /* @__PURE__ */ S(u, {
48
48
  leftIcon: /* @__PURE__ */ S(A, { size: 16 }),
49
49
  children: /* @__PURE__ */ S(w, {
50
50
  to: E("a2a/register"),
@@ -63,13 +63,13 @@ var P = ({ level: e, t }) => {
63
63
  className: "flex items-center gap-4",
64
64
  children: [/* @__PURE__ */ C("div", {
65
65
  className: "relative flex-1 max-w-md",
66
- children: [/* @__PURE__ */ S(j, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ S(h, {
66
+ children: [/* @__PURE__ */ S(j, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ S(d, {
67
67
  placeholder: T("botlit.a2aRegistry.searchPlaceholder", "Search A2A agents..."),
68
68
  value: F,
69
69
  onChange: (e) => I(e.target.value),
70
70
  className: "pl-9"
71
71
  })]
72
- }), /* @__PURE__ */ S(o, {
72
+ }), /* @__PURE__ */ S(u, {
73
73
  variant: "outline",
74
74
  leftIcon: /* @__PURE__ */ S(O, { size: 16 }),
75
75
  children: T("botlit.a2aRegistry.actions.filters", "Filters")
@@ -83,7 +83,7 @@ var P = ({ level: e, t }) => {
83
83
  3,
84
84
  4
85
85
  ].map((e) => /* @__PURE__ */ S("div", { className: "h-56 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" }, e))
86
- }) : z ? /* @__PURE__ */ S(v, {
86
+ }) : z ? /* @__PURE__ */ S(h, {
87
87
  resource: "the A2A registry",
88
88
  error: z,
89
89
  onRetry: () => void B()
@@ -91,24 +91,24 @@ var P = ({ level: e, t }) => {
91
91
  className: "grid grid-cols-1 md:grid-cols-2 gap-4",
92
92
  children: L.map((e) => /* @__PURE__ */ S(w, {
93
93
  to: E(`a2a/${e.id}`),
94
- children: /* @__PURE__ */ C(s, {
94
+ children: /* @__PURE__ */ C(a, {
95
95
  className: "h-full hover:border-primary/50 transition-colors cursor-pointer",
96
- children: [/* @__PURE__ */ S(u, { children: /* @__PURE__ */ C("div", {
96
+ children: [/* @__PURE__ */ S(c, { children: /* @__PURE__ */ C("div", {
97
97
  className: "flex items-start justify-between",
98
98
  children: [/* @__PURE__ */ C("div", {
99
99
  className: "flex items-center gap-3",
100
100
  children: [/* @__PURE__ */ S("div", {
101
101
  className: "p-2 bg-action-primary-bg/10 rounded-lg",
102
102
  children: /* @__PURE__ */ S(k, { className: "h-5 w-5 text-primary" })
103
- }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S(d, {
103
+ }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S(l, {
104
104
  className: "text-base",
105
105
  children: e.name
106
- }), /* @__PURE__ */ S(l, {
106
+ }), /* @__PURE__ */ S(s, {
107
107
  className: "text-xs line-clamp-2",
108
108
  children: e.description
109
109
  })] })]
110
110
  }), /* @__PURE__ */ S(p, { status: e.status })]
111
- }) }), /* @__PURE__ */ S(c, { children: /* @__PURE__ */ C("div", {
111
+ }) }), /* @__PURE__ */ S(o, { children: /* @__PURE__ */ C("div", {
112
112
  className: "space-y-3",
113
113
  children: [
114
114
  /* @__PURE__ */ C("div", {
@@ -143,10 +143,10 @@ var P = ({ level: e, t }) => {
143
143
  children: [/* @__PURE__ */ C("span", { children: [
144
144
  T("botlit.a2aRegistry.list.added", "Added"),
145
145
  " ",
146
- n(e.createdAt)
146
+ v(e.createdAt)
147
147
  ] }), /* @__PURE__ */ S(i, {
148
148
  permission: r.A2A_REGISTRY_UPDATE,
149
- children: /* @__PURE__ */ C(o, {
149
+ children: /* @__PURE__ */ C(u, {
150
150
  variant: "ghost",
151
151
  size: "sm",
152
152
  className: "h-7 text-xs",
@@ -167,7 +167,7 @@ var P = ({ level: e, t }) => {
167
167
  description: T("botlit.a2aRegistry.empty.description", "Register external agents to enable agent-to-agent communication and delegation."),
168
168
  action: /* @__PURE__ */ S(i, {
169
169
  permission: r.A2A_REGISTRY_CREATE,
170
- children: /* @__PURE__ */ S(o, {
170
+ children: /* @__PURE__ */ S(u, {
171
171
  leftIcon: /* @__PURE__ */ S(A, { size: 16 }),
172
172
  children: /* @__PURE__ */ S(w, {
173
173
  to: E("a2a/register"),
@@ -238,7 +238,6 @@ var P = ({ level: e, t }) => {
238
238
  })
239
239
  });
240
240
  };
241
- //#endregion
242
241
  export { F as A2ARegistryPage };
243
242
 
244
243
  //# sourceMappingURL=A2ARegistryPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"A2ARegistryPage.js","names":[],"sources":["../../../src/botlit/pages/A2ARegistryPage.tsx"],"sourcesContent":["/**\n * A2A Registry Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { Link } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport {\n Plus,\n Search as SearchIcon,\n Filter,\n Globe,\n Shield,\n CheckCircle,\n AlertCircle,\n ExternalLink,\n Zap,\n} from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useA2AAgents, a2aAgentSkillCount, type A2AAgentRecord } from '../hooks';\nimport { formatRelativeTime, MISSING_VALUE } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nconst TrustBadge: FC<{ level: string; t: ReturnType<typeof useTr> }> = ({ level, t }) => {\n switch (level) {\n case 'INTERNAL':\n return (\n <Badge variant=\"success\" className=\"flex items-center gap-1\">\n <Shield size={12} />\n {t('botlit.a2aRegistry.trustBadge.internal', 'Internal')}\n </Badge>\n );\n case 'VERIFIED_PUBLISHER':\n return (\n <Badge variant=\"default\" className=\"flex items-center gap-1\">\n <CheckCircle size={12} />\n {t('botlit.a2aRegistry.trustBadge.verified', 'Verified')}\n </Badge>\n );\n case 'UNVERIFIED':\n default:\n return (\n <Badge variant=\"outline\" className=\"flex items-center gap-1\">\n <AlertCircle size={12} />\n {t('botlit.a2aRegistry.trustBadge.unverified', 'Unverified')}\n </Badge>\n );\n }\n};\n\nexport const A2ARegistryPage: FC = () => {\n const t = useTr();\n const { getPath } = useBotlit();\n const [search, setSearch] = useState('');\n const { data: agents, loading, error, refetch } = useA2AAgents({ search });\n\n return (\n <PageLayout\n title={t('botlit.a2aRegistry.title', 'A2A Registry')}\n description={t(\n 'botlit.a2aRegistry.description',\n 'Discover and connect to external agents via the Agent-to-Agent protocol'\n )}\n actions={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('a2a/register')}>\n {t('botlit.a2aRegistry.actions.registerAgent', 'Register Agent')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Globe size={18} />}>\n {t(\n 'botlit.a2aRegistry.purpose',\n 'The A2A (Agent-to-Agent) registry lets your bots collaborate with external agents — your own or third-party — over a shared open protocol. Register an agent by its /.well-known/agent.json card to discover its skills, set how much you trust it, and let your agents delegate tasks to it. Use this page to curate that network of partner agents.'\n )}\n </PagePurpose>\n\n {/* Search */}\n <div className=\"flex items-center gap-4\">\n <div className=\"relative flex-1 max-w-md\">\n <SearchIcon className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder={t('botlit.a2aRegistry.searchPlaceholder', 'Search A2A agents...')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <Button variant=\"outline\" leftIcon={<Filter size={16} />}>\n {t('botlit.a2aRegistry.actions.filters', 'Filters')}\n </Button>\n </div>\n\n {/* Agents List */}\n {loading ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className=\"h-56 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"the A2A registry\" error={error} onRetry={() => void refetch()} />\n ) : agents.length > 0 ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {agents.map((agent: A2AAgentRecord) => (\n <Link key={agent.id} to={getPath(`a2a/${agent.id}`)}>\n <Card className=\"h-full hover:border-primary/50 transition-colors cursor-pointer\">\n <CardHeader>\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 bg-action-primary-bg/10 rounded-lg\">\n <Globe className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <CardTitle className=\"text-base\">{agent.name}</CardTitle>\n <CardDescription className=\"text-xs line-clamp-2\">\n {agent.description}\n </CardDescription>\n </div>\n </div>\n <StatusBadge status={agent.status} />\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {/* Trust Level */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {t('botlit.a2aRegistry.list.trustLevel', 'Trust Level')}\n </span>\n <TrustBadge level={agent.trustLevel} t={t} />\n </div>\n\n {/* Skills Count */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {t('botlit.a2aRegistry.list.availableSkills', 'Available Skills')}\n </span>\n <Badge variant=\"secondary\">\n {t('botlit.a2aRegistry.list.skillsCount', '{{count}} skills', {\n count: a2aAgentSkillCount(agent),\n })}\n </Badge>\n </div>\n\n {/* Well-known URL */}\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <ExternalLink size={14} />\n <span className=\"truncate\">{agent.wellKnownUrl ?? MISSING_VALUE}</span>\n </div>\n\n {/* Footer */}\n <div className=\"pt-3 border-t border-border-subtle flex items-center justify-between text-xs text-text-secondary\">\n <span>\n {t('botlit.a2aRegistry.list.added', 'Added')}{' '}\n {formatRelativeTime(agent.createdAt)}\n </span>\n <BotmanorPermissionGate\n permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_UPDATE}\n >\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs\">\n <Zap size={12} className=\"mr-1\" />\n {t('botlit.a2aRegistry.actions.test', 'Test')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n </div>\n </CardContent>\n </Card>\n </Link>\n ))}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-people\"\n title={t('botlit.a2aRegistry.empty.title', 'No A2A agents registered')}\n description={t(\n 'botlit.a2aRegistry.empty.description',\n 'Register external agents to enable agent-to-agent communication and delegation.'\n )}\n action={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('a2a/register')}>\n {t('botlit.a2aRegistry.actions.registerAgent', 'Register Agent')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n />\n )}\n\n {/* A2A Protocol Info */}\n <GlassCard treatment=\"glass\" glow className=\"p-6\">\n <div className=\"mb-4\">\n <h2 className=\"flex items-center gap-2 text-lg font-semibold tracking-tight text-text-primary\">\n <Globe size={18} />\n {t('botlit.a2aRegistry.overview.title', 'Agent-to-Agent Protocol')}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.a2aRegistry.overview.description',\n 'A2A enables secure communication between agents across different systems'\n )}\n </p>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Shield size={16} className=\"text-primary\" />\n {t('botlit.a2aRegistry.overview.trustTitle', 'Trust Levels')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.a2aRegistry.overview.trustDescription',\n 'Internal: your own agents; Verified: publisher verified by BotManor; Unverified: community agents.'\n )}\n </li>\n </ul>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Zap size={16} className=\"text-primary\" />\n {t('botlit.a2aRegistry.overview.capabilitiesTitle', 'Capabilities')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.a2aRegistry.overview.capabilitiesDescription',\n 'Skill discovery via agent cards, secure task delegation, and structured input/output modes.'\n )}\n </li>\n </ul>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <ExternalLink size={16} className=\"text-primary\" />\n {t('botlit.a2aRegistry.overview.integrationTitle', 'Integration')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.a2aRegistry.overview.integrationDescription',\n 'Discover via /.well-known/agent.json, automatic capability negotiation, and entitlement-based access control.'\n )}\n </li>\n </ul>\n </div>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"A2ARegistryPage.js","names":["SearchIcon","TrustBadge","level","Badge","Shield","CheckCircle","AlertCircle","A2ARegistryPage","t","useTr","useBotlit","search","setSearch","useState","agents","useA2AAgents","PageLayout","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Button","Plus","Link","getPath","PagePurpose","Globe","Search","Input","Filter","loading","i","error","ErrorState","refetch","agent","Card","CardHeader","CardTitle","CardDescription","StatusBadge","CardContent","a2aAgentSkillCount","ExternalLink","formatRelativeTime","Zap","EmptyState","GlassCard"],"sources":["../../../src/botlit/pages/A2ARegistryPage.tsx"],"sourcesContent":["/**\n * A2A Registry Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { Link } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport {\n Plus,\n Search as SearchIcon,\n Filter,\n Globe,\n Shield,\n CheckCircle,\n AlertCircle,\n ExternalLink,\n Zap,\n} from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useA2AAgents, a2aAgentSkillCount, type A2AAgentRecord } from '../hooks';\nimport { formatRelativeTime, MISSING_VALUE } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nconst TrustBadge: FC<{ level: string; t: ReturnType<typeof useTr> }> = ({ level, t }) => {\n switch (level) {\n case 'INTERNAL':\n return (\n <Badge variant=\"success\" className=\"flex items-center gap-1\">\n <Shield size={12} />\n {t('botlit.a2aRegistry.trustBadge.internal', 'Internal')}\n </Badge>\n );\n case 'VERIFIED_PUBLISHER':\n return (\n <Badge variant=\"default\" className=\"flex items-center gap-1\">\n <CheckCircle size={12} />\n {t('botlit.a2aRegistry.trustBadge.verified', 'Verified')}\n </Badge>\n );\n case 'UNVERIFIED':\n default:\n return (\n <Badge variant=\"outline\" className=\"flex items-center gap-1\">\n <AlertCircle size={12} />\n {t('botlit.a2aRegistry.trustBadge.unverified', 'Unverified')}\n </Badge>\n );\n }\n};\n\nexport const A2ARegistryPage: FC = () => {\n const t = useTr();\n const { getPath } = useBotlit();\n const [search, setSearch] = useState('');\n const { data: agents, loading, error, refetch } = useA2AAgents({ search });\n\n return (\n <PageLayout\n title={t('botlit.a2aRegistry.title', 'A2A Registry')}\n description={t(\n 'botlit.a2aRegistry.description',\n 'Discover and connect to external agents via the Agent-to-Agent protocol'\n )}\n actions={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('a2a/register')}>\n {t('botlit.a2aRegistry.actions.registerAgent', 'Register Agent')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Globe size={18} />}>\n {t(\n 'botlit.a2aRegistry.purpose',\n 'The A2A (Agent-to-Agent) registry lets your bots collaborate with external agents — your own or third-party — over a shared open protocol. Register an agent by its /.well-known/agent.json card to discover its skills, set how much you trust it, and let your agents delegate tasks to it. Use this page to curate that network of partner agents.'\n )}\n </PagePurpose>\n\n {/* Search */}\n <div className=\"flex items-center gap-4\">\n <div className=\"relative flex-1 max-w-md\">\n <SearchIcon className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder={t('botlit.a2aRegistry.searchPlaceholder', 'Search A2A agents...')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <Button variant=\"outline\" leftIcon={<Filter size={16} />}>\n {t('botlit.a2aRegistry.actions.filters', 'Filters')}\n </Button>\n </div>\n\n {/* Agents List */}\n {loading ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <div\n key={i}\n className=\"h-56 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"the A2A registry\" error={error} onRetry={() => void refetch()} />\n ) : agents.length > 0 ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {agents.map((agent: A2AAgentRecord) => (\n <Link key={agent.id} to={getPath(`a2a/${agent.id}`)}>\n <Card className=\"h-full hover:border-primary/50 transition-colors cursor-pointer\">\n <CardHeader>\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 bg-action-primary-bg/10 rounded-lg\">\n <Globe className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <CardTitle className=\"text-base\">{agent.name}</CardTitle>\n <CardDescription className=\"text-xs line-clamp-2\">\n {agent.description}\n </CardDescription>\n </div>\n </div>\n <StatusBadge status={agent.status} />\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {/* Trust Level */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {t('botlit.a2aRegistry.list.trustLevel', 'Trust Level')}\n </span>\n <TrustBadge level={agent.trustLevel} t={t} />\n </div>\n\n {/* Skills Count */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">\n {t('botlit.a2aRegistry.list.availableSkills', 'Available Skills')}\n </span>\n <Badge variant=\"secondary\">\n {t('botlit.a2aRegistry.list.skillsCount', '{{count}} skills', {\n count: a2aAgentSkillCount(agent),\n })}\n </Badge>\n </div>\n\n {/* Well-known URL */}\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <ExternalLink size={14} />\n <span className=\"truncate\">{agent.wellKnownUrl ?? MISSING_VALUE}</span>\n </div>\n\n {/* Footer */}\n <div className=\"pt-3 border-t border-border-subtle flex items-center justify-between text-xs text-text-secondary\">\n <span>\n {t('botlit.a2aRegistry.list.added', 'Added')}{' '}\n {formatRelativeTime(agent.createdAt)}\n </span>\n <BotmanorPermissionGate\n permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_UPDATE}\n >\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs\">\n <Zap size={12} className=\"mr-1\" />\n {t('botlit.a2aRegistry.actions.test', 'Test')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n </div>\n </CardContent>\n </Card>\n </Link>\n ))}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-people\"\n title={t('botlit.a2aRegistry.empty.title', 'No A2A agents registered')}\n description={t(\n 'botlit.a2aRegistry.empty.description',\n 'Register external agents to enable agent-to-agent communication and delegation.'\n )}\n action={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.A2A_REGISTRY_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('a2a/register')}>\n {t('botlit.a2aRegistry.actions.registerAgent', 'Register Agent')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n />\n )}\n\n {/* A2A Protocol Info */}\n <GlassCard treatment=\"glass\" glow className=\"p-6\">\n <div className=\"mb-4\">\n <h2 className=\"flex items-center gap-2 text-lg font-semibold tracking-tight text-text-primary\">\n <Globe size={18} />\n {t('botlit.a2aRegistry.overview.title', 'Agent-to-Agent Protocol')}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.a2aRegistry.overview.description',\n 'A2A enables secure communication between agents across different systems'\n )}\n </p>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Shield size={16} className=\"text-primary\" />\n {t('botlit.a2aRegistry.overview.trustTitle', 'Trust Levels')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.a2aRegistry.overview.trustDescription',\n 'Internal: your own agents; Verified: publisher verified by BotManor; Unverified: community agents.'\n )}\n </li>\n </ul>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Zap size={16} className=\"text-primary\" />\n {t('botlit.a2aRegistry.overview.capabilitiesTitle', 'Capabilities')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.a2aRegistry.overview.capabilitiesDescription',\n 'Skill discovery via agent cards, secure task delegation, and structured input/output modes.'\n )}\n </li>\n </ul>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <ExternalLink size={16} className=\"text-primary\" />\n {t('botlit.a2aRegistry.overview.integrationTitle', 'Integration')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.a2aRegistry.overview.integrationDescription',\n 'Discover via /.well-known/agent.json, automatic capability negotiation, and entitlement-based access control.'\n )}\n </li>\n </ul>\n </div>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiCA,IAAMC,KAAkE,EAAE,UAAO,QAAQ;CACvF,QAAQC,GAAR;EACE,KAAK,YACH,OACE,kBAACC,GAAD;GAAO,SAAQ;GAAU,WAAU;GAAnC,UAAA,CACE,kBAACC,GAAD,EAAQ,MAAM,GAAK,CAAA,GAClB,EAAE,0CAA0C,UAAU,CAClD;;EAEX,KAAK,sBACH,OACE,kBAACD,GAAD;GAAO,SAAQ;GAAU,WAAU;GAAnC,UAAA,CACE,kBAACE,GAAD,EAAa,MAAM,GAAK,CAAA,GACvB,EAAE,0CAA0C,UAAU,CAClD;;EAGX,SACE,OACE,kBAACF,GAAD;GAAO,SAAQ;GAAU,WAAU;GAAnC,UAAA,CACE,kBAACG,GAAD,EAAa,MAAM,GAAK,CAAA,GACvB,EAAE,4CAA4C,YAAY,CACtD;;CAEb;AACF,GAEaC,UAA4B;CACvC,IAAMC,IAAIC,EAAM,GACV,EAAE,eAAYC,EAAU,GACxB,CAACC,GAAQC,KAAaC,EAAS,EAAE,GACjC,EAAE,MAAMC,GAAQ,YAAS,UAAO,eAAYC,EAAa,EAAE,UAAO,CAAC;CAEzE,OACE,kBAACC,GAAD;EACE,OAAOR,EAAE,4BAA4B,cAAc;EACnD,aAAaA,EACX,kCACA,yEACF;EACA,SACE,kBAACS,GAAD;GAAwB,YAAYC,EAAqB;GACvD,UAAA,kBAACC,GAAD;IAAQ,UAAU,kBAACC,GAAD,EAAM,MAAM,GAAK,CAAA;IACjC,UAAA,kBAACC,GAAD;KAAM,IAAIC,EAAQ,cAAc;KAC7B,UAAAd,EAAE,4CAA4C,gBAAgB;IAC3D,CAAA;GACA,CAAA;EACc,CAAA;EAG1B,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,kBAACe,GAAD;KAAa,MAAM,kBAACC,GAAD,EAAO,MAAM,GAAK,CAAA;KAClC,UAAAhB,EACC,8BACA,uVACF;IACW,CAAA;IAGb,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAACR,GAAD,EAAY,WAAU,uEAAwE,CAAA,GAC9F,kBAAC0B,GAAD;OACE,aAAalB,EAAE,wCAAwC,sBAAsB;OAC7E,OAAOG;OACP,WAAW,MAAMC,EAAU,EAAE,OAAO,KAAK;OACzC,WAAU;MACX,CAAA,CACE;KACL,CAAA,GAAA,kBAACO,GAAD;MAAQ,SAAQ;MAAU,UAAU,kBAACQ,GAAD,EAAQ,MAAM,GAAK,CAAA;MACpD,UAAAnB,EAAE,sCAAsC,SAAS;KAC5C,CAAA,CACL;;IAGJoB,IACC,kBAAC,OAAD;KAAK,WAAU;KACZ,UAAA;MAAC;MAAG;MAAG;MAAG;KAAC,CAAC,CAAC,KAAK,MACjB,kBAAC,OAAD,EAEE,WAAU,8DACX,GAFMC,CAEN,CACF;IACE,CAAA,IACHC,IACF,kBAACC,GAAD;KAAY,UAAS;KAA0B;KAAO,eAAe,KAAKC,EAAQ;IAAI,CAAA,IACpFlB,EAAO,SAAS,IAClB,kBAAC,OAAD;KAAK,WAAU;KACZ,UAAAA,EAAO,KAAK,MACX,kBAACO,GAAD;MAAqB,IAAIC,EAAQ,OAAOW,EAAM,IAAI;MAChD,UAAA,kBAACC,GAAD;OAAM,WAAU;OAAhB,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAAC,OAAD;QAAK,WAAU;QAAf,UAAA,CACE,kBAAC,OAAD;SAAK,WAAU;SAAf,UAAA,CACE,kBAAC,OAAD;UAAK,WAAU;UACb,UAAA,kBAACX,GAAD,EAAO,WAAU,uBAAwB,CAAA;SACtC,CAAA,GACL,kBAAC,OAAD,EAAA,UAAA,CACE,kBAACY,GAAD;UAAW,WAAU;UAAa,UAAAH,EAAM;SAAgB,CAAA,GACxD,kBAACI,GAAD;UAAiB,WAAU;UACxB,UAAAJ,EAAM;SACQ,CAAA,CACd,EAAA,CAAA,CACF;QACL,CAAA,GAAA,kBAACK,GAAD,EAAa,QAAQL,EAAM,OAAS,CAAA,CACjC;OACK,CAAA,EAAA,CAAA,GACZ,kBAACM,GAAD,EAAA,UACE,kBAAC,OAAD;QAAK,WAAU;QAAf,UAAA;SAEE,kBAAC,OAAD;UAAK,WAAU;UAAf,UAAA,CACE,kBAAC,QAAD;WAAM,WAAU;WACb,UAAA/B,EAAE,sCAAsC,aAAa;UAClD,CAAA,GACN,kBAACP,GAAD;WAAY,OAAOgC,EAAM;WAAe;UAAI,CAAA,CACzC;;SAGL,kBAAC,OAAD;UAAK,WAAU;UAAf,UAAA,CACE,kBAAC,QAAD;WAAM,WAAU;WACb,UAAAzB,EAAE,2CAA2C,kBAAkB;UAC5D,CAAA,GACN,kBAACL,GAAD;WAAO,SAAQ;WACZ,UAAAK,EAAE,uCAAuC,oBAAoB,EAC5D,OAAOgC,EAAmBP,CAAK,EACjC,CAAC;UACI,CAAA,CACJ;;SAGL,kBAAC,OAAD;UAAK,WAAU;UAAf,UAAA,CACE,kBAACQ,GAAD,EAAc,MAAM,GAAK,CAAA,GACzB,kBAAC,QAAD;WAAM,WAAU;WAAY,UAAAR,EAAM,gBAAA;UAAoC,CAAA,CACnE;;SAGL,kBAAC,OAAD;UAAK,WAAU;UAAf,UAAA,CACE,kBAAC,QAAD,EAAA,UAAA;WACGzB,EAAE,iCAAiC,OAAO;WAAG;WAC7CkC,EAAmBT,EAAM,SAAS;UAC/B,EAAA,CAAA,GACN,kBAAChB,GAAD;WACE,YAAYC,EAAqB;WAEjC,UAAA,kBAACC,GAAD;YAAQ,SAAQ;YAAQ,MAAK;YAAK,WAAU;YAA5C,UAAA,CACE,kBAACwB,GAAD;aAAK,MAAM;aAAI,WAAU;YAAQ,CAAA,GAChCnC,EAAE,mCAAmC,MAAM,CACtC;;UACc,CAAA,CACrB;;QACF;OACM,CAAA,EAAA,CAAA,CACT;;KACF,GAhEKyB,EAAM,EAgEX,CACP;IACE,CAAA,IAEL,kBAACW,GAAD;KACE,cAAa;KACb,OAAOpC,EAAE,kCAAkC,0BAA0B;KACrE,aAAaA,EACX,wCACA,iFACF;KACA,QACE,kBAACS,GAAD;MAAwB,YAAYC,EAAqB;MACvD,UAAA,kBAACC,GAAD;OAAQ,UAAU,kBAACC,GAAD,EAAM,MAAM,GAAK,CAAA;OACjC,UAAA,kBAACC,GAAD;QAAM,IAAIC,EAAQ,cAAc;QAC7B,UAAAd,EAAE,4CAA4C,gBAAgB;OAC3D,CAAA;MACA,CAAA;KACc,CAAA;IAE3B,CAAA;IAIH,kBAACqC,GAAD;KAAW,WAAU;KAAQ,MAAA;KAAK,WAAU;KAA5C,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAAC,MAAD;OAAI,WAAU;OAAd,UAAA,CACE,kBAACrB,GAAD,EAAO,MAAM,GAAK,CAAA,GACjBhB,EAAE,qCAAqC,yBAAyB,CAC/D;MACJ,CAAA,GAAA,kBAAC,KAAD;OAAG,WAAU;OACV,UAAAA,EACC,2CACA,0EACF;MACC,CAAA,CACA;KACL,CAAA,GAAA,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACE,kBAAC,OAAD;QAAK,WAAU;QAAf,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;SAAd,UAAA,CACE,kBAACJ,GAAD;UAAQ,MAAM;UAAI,WAAU;SAAgB,CAAA,GAC3CI,EAAE,0CAA0C,cAAc,CACzD;QACJ,CAAA,GAAA,kBAAC,MAAD;SAAI,WAAU;SACZ,UAAA,kBAAC,MAAD,EAAA,UACGA,EACC,gDACA,oGACF,EACE,CAAA;QACF,CAAA,CACD;;OACL,kBAAC,OAAD;QAAK,WAAU;QAAf,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;SAAd,UAAA,CACE,kBAACmC,GAAD;UAAK,MAAM;UAAI,WAAU;SAAgB,CAAA,GACxCnC,EAAE,iDAAiD,cAAc,CAChE;QACJ,CAAA,GAAA,kBAAC,MAAD;SAAI,WAAU;SACZ,UAAA,kBAAC,MAAD,EAAA,UACGA,EACC,uDACA,6FACF,EACE,CAAA;QACF,CAAA,CACD;;OACL,kBAAC,OAAD;QAAK,WAAU;QAAf,UAAA,CACE,kBAAC,MAAD;SAAI,WAAU;SAAd,UAAA,CACE,kBAACiC,GAAD;UAAc,MAAM;UAAI,WAAU;SAAgB,CAAA,GACjDjC,EAAE,gDAAgD,aAAa,CAC9D;QACJ,CAAA,GAAA,kBAAC,MAAD;SAAI,WAAU;SACZ,UAAA,kBAAC,MAAD,EAAA,UACGA,EACC,sDACA,+GACF,EACE,CAAA;QACF,CAAA,CACD;;MACF;KACI,CAAA,CAAA;;GACR;;CACK,CAAA;AAEhB"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const AgentApprovalsPage: FC;
@@ -1,25 +1,25 @@
1
1
  import { useTr as e } from "../../shared/hooks/useTr.js";
2
- import { useBotlit as t } from "../providers/BotlitProvider.js";
3
- import { useAgents as n } from "../hooks/useAgents.js";
4
- import { formatRelativeTime as r } from "../utils/formatters.js";
5
- import { BOTMANOR_PERMISSIONS as i } from "../permissions/botmanorPermissions.js";
6
- import { BotmanorPermissionGate as a } from "../permissions/useBotmanorPermissions.js";
7
- import { PageLayout as o } from "../components/PageLayout.js";
2
+ import { PageLayout as t } from "../components/PageLayout.js";
3
+ import { Card as n, CardContent as r, CardDescription as i, CardHeader as a, CardTitle as o } from "../components/Card.js";
8
4
  import { Button as s } from "../components/Button.js";
9
- import "../permissions/index.js";
10
- import { Card as c, CardContent as l, CardDescription as u, CardHeader as d, CardTitle as f } from "../components/Card.js";
11
- import { Badge as p } from "../components/Badge.js";
12
- import { ErrorState as m } from "../components/ErrorState.js";
5
+ import { BOTMANOR_PERMISSIONS as c } from "../permissions/botmanorPermissions.js";
6
+ import { BotmanorPermissionGate as l } from "../permissions/useBotmanorPermissions.js";
7
+ import { Badge as u } from "../components/Badge.js";
8
+ import { ErrorState as d } from "../components/ErrorState.js";
9
+ import { ApprovalDecisionDialog as f, approvalStatusVariant as p } from "../components/AgentApprovalPanel.js";
10
+ import { useAgents as m } from "../hooks/useAgents.js";
13
11
  import { useAgentApprovalActions as h, useAgentApprovalRequests as g, useAgentApprovalSettings as _ } from "../hooks/useAgentApprovals.js";
14
- import { ApprovalDecisionDialog as v, approvalStatusVariant as y } from "../components/AgentApprovalPanel.js";
12
+ import { useBotlit as v } from "../providers/BotlitProvider.js";
13
+ import { formatRelativeTime as y } from "../utils/formatters.js";
14
+ import "../permissions/index.js";
15
15
  import { useMemo as b, useState as x } from "react";
16
16
  import { PagePurpose as S } from "@burdenoff/fe-libs/ui";
17
17
  import { jsx as C, jsxs as w } from "react/jsx-runtime";
18
18
  import { AlertTriangle as T, ArrowLeft as E, CheckCircle2 as D, ShieldCheck as O, XCircle as k } from "lucide-react";
19
19
  import { toast as A } from "sonner";
20
- //#region src/botlit/pages/AgentApprovalsPage.tsx
20
+ // src/botlit/pages/AgentApprovalsPage.tsx
21
21
  var j = () => {
22
- let j = e(), { navigateTo: M, currentUser: N } = t(), P = _(), F = g({ status: "PENDING" }), I = g({}), { data: L } = n(), { run: R, pending: z } = h(), [B, V] = x(null), H = b(() => new Map(L.map((e) => [e.id, e.name])), [L]), U = I.data.filter((e) => e.status !== "PENDING").slice(0, 20), W = P.data?.requireActivationApproval === !0, G = (e) => e && e === N?.id ? j("botlit.agentApproval.you", "you") : e ?? "—", K = async () => {
22
+ let j = e(), { navigateTo: M, currentUser: N } = v(), P = _(), F = g({ status: "PENDING" }), I = g({}), { data: L } = m(), { run: R, pending: z } = h(), [B, V] = x(null), H = b(() => new Map(L.map((e) => [e.id, e.name])), [L]), U = I.data.filter((e) => e.status !== "PENDING").slice(0, 20), W = P.data?.requireActivationApproval === !0, G = (e) => e && e === N?.id ? j("botlit.agentApproval.you", "you") : e ?? "—", K = async () => {
23
23
  await Promise.all([F.refetch(), I.refetch()]);
24
24
  }, q = async () => {
25
25
  try {
@@ -29,7 +29,7 @@ var j = () => {
29
29
  A.error(e instanceof Error ? e.message : j("botlit.agentApprovals.toast.settingsError", "Failed to update the setting"));
30
30
  }
31
31
  };
32
- return /* @__PURE__ */ w(o, {
32
+ return /* @__PURE__ */ w(t, {
33
33
  title: /* @__PURE__ */ w("div", {
34
34
  className: "flex items-center gap-3",
35
35
  children: [/* @__PURE__ */ C(s, {
@@ -47,18 +47,18 @@ var j = () => {
47
47
  icon: /* @__PURE__ */ C(O, { size: 18 }),
48
48
  children: j("botlit.agentApprovals.purpose", "A reviewer checks an agent's prompt, model, tools and limits before it goes live. The person who requested activation cannot approve their own request, and every decision is kept in the history below.")
49
49
  }),
50
- /* @__PURE__ */ C(c, {
50
+ /* @__PURE__ */ C(n, {
51
51
  "data-testid": "agent-approvals-settings",
52
- children: /* @__PURE__ */ w(d, {
52
+ children: /* @__PURE__ */ w(a, {
53
53
  className: "flex flex-row items-start justify-between gap-4",
54
- children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w(f, {
54
+ children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w(o, {
55
55
  className: "flex items-center gap-2",
56
- children: [j("botlit.agentApprovals.settings.title", "Require approval before agents go live"), /* @__PURE__ */ C(p, {
56
+ children: [j("botlit.agentApprovals.settings.title", "Require approval before agents go live"), /* @__PURE__ */ C(u, {
57
57
  variant: W ? "warning" : "outline",
58
58
  children: W ? j("botlit.agentApprovals.settings.on", "On") : j("botlit.agentApprovals.settings.off", "Off")
59
59
  })]
60
- }), /* @__PURE__ */ C(u, { children: j("botlit.agentApprovals.settings.description", "When on, activating an agent, publishing a new version, or editing the prompt, model or tools of a live agent needs an approved request. Rolling a live agent back to an earlier version stays available for emergencies.") })] }), /* @__PURE__ */ C(a, {
61
- permission: i.AGENT_APPROVE,
60
+ }), /* @__PURE__ */ C(i, { children: j("botlit.agentApprovals.settings.description", "When on, activating an agent, publishing a new version, or editing the prompt, model or tools of a live agent needs an approved request. Rolling a live agent back to an earlier version stays available for emergencies.") })] }), /* @__PURE__ */ C(l, {
61
+ permission: c.AGENT_APPROVE,
62
62
  children: /* @__PURE__ */ C(s, {
63
63
  className: "shrink-0 whitespace-nowrap",
64
64
  variant: W ? "outline" : "default",
@@ -70,7 +70,7 @@ var j = () => {
70
70
  })]
71
71
  })
72
72
  }),
73
- /* @__PURE__ */ w(c, { children: [/* @__PURE__ */ C(d, { children: /* @__PURE__ */ C(f, { children: j("botlit.agentApprovals.pending.title", "Waiting for review") }) }), /* @__PURE__ */ C(l, { children: F.error ? /* @__PURE__ */ C(m, {
73
+ /* @__PURE__ */ w(n, { children: [/* @__PURE__ */ C(a, { children: /* @__PURE__ */ C(o, { children: j("botlit.agentApprovals.pending.title", "Waiting for review") }) }), /* @__PURE__ */ C(r, { children: F.error ? /* @__PURE__ */ C(d, {
74
74
  resource: j("botlit.agentApprovals.resource", "activation requests"),
75
75
  error: F.error,
76
76
  onRetry: () => void F.refetch()
@@ -94,7 +94,7 @@ var j = () => {
94
94
  onClick: () => M(`agents/${e.agentId}`),
95
95
  children: H.get(e.agentId) ?? e.agentId
96
96
  }),
97
- /* @__PURE__ */ C(p, {
97
+ /* @__PURE__ */ C(u, {
98
98
  variant: "warning",
99
99
  children: e.status
100
100
  }),
@@ -105,7 +105,7 @@ var j = () => {
105
105
  " ",
106
106
  G(e.requestedById),
107
107
  " ",
108
- r(e.createdAt)
108
+ y(e.createdAt)
109
109
  ]
110
110
  })
111
111
  ]
@@ -123,8 +123,8 @@ var j = () => {
123
123
  children: j("botlit.agentApprovals.ownRequest", "You requested this, so another reviewer has to decide it.")
124
124
  }) : /* @__PURE__ */ w("div", {
125
125
  className: "flex gap-2",
126
- children: [/* @__PURE__ */ C(a, {
127
- permission: i.AGENT_APPROVE,
126
+ children: [/* @__PURE__ */ C(l, {
127
+ permission: c.AGENT_APPROVE,
128
128
  children: /* @__PURE__ */ C(s, {
129
129
  size: "sm",
130
130
  leftIcon: /* @__PURE__ */ C(D, { size: 14 }),
@@ -135,8 +135,8 @@ var j = () => {
135
135
  }),
136
136
  children: j("botlit.agentApproval.approveAction", "Approve")
137
137
  })
138
- }), /* @__PURE__ */ C(a, {
139
- permission: i.AGENT_APPROVE,
138
+ }), /* @__PURE__ */ C(l, {
139
+ permission: c.AGENT_APPROVE,
140
140
  children: /* @__PURE__ */ C(s, {
141
141
  size: "sm",
142
142
  variant: "destructive",
@@ -153,7 +153,7 @@ var j = () => {
153
153
  }, e.id);
154
154
  })
155
155
  }) })] }),
156
- /* @__PURE__ */ w(c, { children: [/* @__PURE__ */ C(d, { children: /* @__PURE__ */ C(f, { children: j("botlit.agentApprovals.history.title", "Recent decisions") }) }), /* @__PURE__ */ C(l, { children: U.length === 0 ? /* @__PURE__ */ C("p", {
156
+ /* @__PURE__ */ w(n, { children: [/* @__PURE__ */ C(a, { children: /* @__PURE__ */ C(o, { children: j("botlit.agentApprovals.history.title", "Recent decisions") }) }), /* @__PURE__ */ C(r, { children: U.length === 0 ? /* @__PURE__ */ C("p", {
157
157
  className: "text-sm text-text-secondary",
158
158
  children: j("botlit.agentApprovals.history.empty", "No decisions yet.")
159
159
  }) : /* @__PURE__ */ C("ul", {
@@ -168,8 +168,8 @@ var j = () => {
168
168
  className: "font-medium",
169
169
  children: H.get(e.agentId) ?? e.agentId
170
170
  }),
171
- /* @__PURE__ */ C(p, {
172
- variant: y(e.status),
171
+ /* @__PURE__ */ C(u, {
172
+ variant: p(e.status),
173
173
  children: e.status
174
174
  }),
175
175
  /* @__PURE__ */ w("span", {
@@ -179,7 +179,7 @@ var j = () => {
179
179
  " ",
180
180
  G(e.reviewerId),
181
181
  " ",
182
- e.decidedAt ? r(e.decidedAt) : ""
182
+ e.decidedAt ? y(e.decidedAt) : ""
183
183
  ]
184
184
  })
185
185
  ]
@@ -190,7 +190,7 @@ var j = () => {
190
190
  }, e.id))
191
191
  }) })] })
192
192
  ]
193
- }), /* @__PURE__ */ C(v, {
193
+ }), /* @__PURE__ */ C(f, {
194
194
  kind: B?.kind ?? null,
195
195
  loading: z !== null,
196
196
  onClose: () => V(null),
@@ -212,7 +212,6 @@ var j = () => {
212
212
  })]
213
213
  });
214
214
  };
215
- //#endregion
216
215
  export { j as AgentApprovalsPage };
217
216
 
218
217
  //# sourceMappingURL=AgentApprovalsPage.js.map