@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":"AgentApprovalsPage.js","names":[],"sources":["../../../src/botlit/pages/AgentApprovalsPage.tsx"],"sourcesContent":["/**\n * Agent Activation Approvals Page (BOFF-9682)\n * @module botlit/pages\n *\n * Reviewer queue for the workspace: every pending request to take an agent\n * live, with approve / reject, the recent decisions, and the workspace switch\n * that makes review mandatory. Approving publishes the agent's draft and sets\n * it ACTIVE; a request whose agent changed after it was submitted is flagged\n * stale and cannot be approved.\n */\n\nimport { useMemo, useState, type FC } from 'react';\nimport { AlertTriangle, ArrowLeft, CheckCircle2, ShieldCheck, XCircle } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge } from '../components/Badge';\nimport { ErrorState } from '../components/ErrorState';\nimport { ApprovalDecisionDialog, approvalStatusVariant } from '../components/AgentApprovalPanel';\nimport { useAgents } from '../hooks/useAgents';\nimport {\n useAgentApprovalActions,\n useAgentApprovalRequests,\n useAgentApprovalSettings,\n type AgentApprovalRequestRecord,\n} from '../hooks/useAgentApprovals';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const AgentApprovalsPage: FC = () => {\n const t = useTr();\n const { navigateTo, currentUser } = useBotlit();\n const settings = useAgentApprovalSettings();\n const pendingRequests = useAgentApprovalRequests({ status: 'PENDING' });\n const allRequests = useAgentApprovalRequests({});\n const { data: agents } = useAgents();\n const { run, pending } = useAgentApprovalActions();\n const [dialog, setDialog] = useState<{\n kind: 'approve' | 'reject';\n request: AgentApprovalRequestRecord;\n } | null>(null);\n\n const agentNames = useMemo(\n () => new Map(agents.map((agent) => [agent.id, agent.name])),\n [agents]\n );\n const decided = allRequests.data.filter((request) => request.status !== 'PENDING').slice(0, 20);\n const required = settings.data?.requireActivationApproval === true;\n const who = (id?: string | null): string =>\n id && id === currentUser?.id ? t('botlit.agentApproval.you', 'you') : (id ?? '—');\n\n const refreshAll = async (): Promise<void> => {\n await Promise.all([pendingRequests.refetch(), allRequests.refetch()]);\n };\n\n const toggleRequired = async (): Promise<void> => {\n try {\n const next = await settings.update(!required);\n toast.success(\n next.requireActivationApproval\n ? t('botlit.agentApprovals.toast.enabled', 'Agents now need approval before going live')\n : t('botlit.agentApprovals.toast.disabled', 'Activation approval is now optional')\n );\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentApprovals.toast.settingsError', 'Failed to update the setting')\n );\n }\n };\n\n const confirm = async (text: string): Promise<void> => {\n if (!dialog) return;\n try {\n if (dialog.kind === 'approve') {\n await run({ kind: 'approve', id: dialog.request.id, reason: text });\n toast.success(t('botlit.agentApproval.toast.approved', 'Approved — the agent is live'));\n } else {\n await run({ kind: 'reject', id: dialog.request.id, reason: text });\n toast.success(t('botlit.agentApproval.toast.rejected', 'Activation rejected'));\n }\n setDialog(null);\n await refreshAll();\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentApproval.toast.error', 'Approval action failed')\n );\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('agents')}>\n <ArrowLeft size={20} />\n </Button>\n <span>{t('botlit.agentApprovals.title', 'Agent approvals')}</span>\n </div>\n }\n description={t('botlit.agentApprovals.description', 'Review requests to take agents live')}\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<ShieldCheck size={18} />}>\n {t(\n 'botlit.agentApprovals.purpose',\n \"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.\"\n )}\n </PagePurpose>\n\n <Card data-testid=\"agent-approvals-settings\">\n <CardHeader className=\"flex flex-row items-start justify-between gap-4\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n {t(\n 'botlit.agentApprovals.settings.title',\n 'Require approval before agents go live'\n )}\n <Badge variant={required ? 'warning' : 'outline'}>\n {required\n ? t('botlit.agentApprovals.settings.on', 'On')\n : t('botlit.agentApprovals.settings.off', 'Off')}\n </Badge>\n </CardTitle>\n <CardDescription>\n {t(\n 'botlit.agentApprovals.settings.description',\n '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.'\n )}\n </CardDescription>\n </div>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_APPROVE}>\n <Button\n className=\"shrink-0 whitespace-nowrap\"\n variant={required ? 'outline' : 'default'}\n isLoading={settings.saving}\n disabled={settings.loading || !settings.data}\n onClick={() => void toggleRequired()}\n >\n {required\n ? t('botlit.agentApprovals.settings.turnOff', 'Turn off')\n : t('botlit.agentApprovals.settings.turnOn', 'Turn on')}\n </Button>\n </BotmanorPermissionGate>\n </CardHeader>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>{t('botlit.agentApprovals.pending.title', 'Waiting for review')}</CardTitle>\n </CardHeader>\n <CardContent>\n {pendingRequests.error ? (\n <ErrorState\n resource={t('botlit.agentApprovals.resource', 'activation requests')}\n error={pendingRequests.error}\n onRetry={() => void pendingRequests.refetch()}\n />\n ) : pendingRequests.loading && pendingRequests.data.length === 0 ? (\n <div className=\"h-24 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n ) : pendingRequests.data.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentApprovals.pending.empty', 'No agents are waiting for review.')}\n </p>\n ) : (\n <ul className=\"space-y-3\" data-testid=\"agent-approvals-pending\">\n {pendingRequests.data.map((request) => {\n const own = request.requestedById === currentUser?.id;\n return (\n <li\n key={request.id}\n className=\"p-4 border border-border-subtle rounded-lg space-y-2\"\n >\n <div className=\"flex items-center gap-2 flex-wrap\">\n <button\n type=\"button\"\n className=\"font-medium text-primary hover:underline\"\n onClick={() => navigateTo(`agents/${request.agentId}`)}\n >\n {agentNames.get(request.agentId) ?? request.agentId}\n </button>\n <Badge variant=\"warning\">{request.status}</Badge>\n <span className=\"text-sm text-text-secondary\">\n {t('botlit.agentApproval.requestedBy', 'Requested by')}{' '}\n {who(request.requestedById)} {formatRelativeTime(request.createdAt)}\n </span>\n </div>\n {request.requestNote && (\n <p className=\"text-sm break-words\">{request.requestNote}</p>\n )}\n {request.isStale && (\n <p className=\"flex items-center gap-2 text-sm text-status-warning-text\">\n <AlertTriangle size={14} />\n {t(\n 'botlit.agentApproval.stale',\n 'The agent changed after this request. Submit a new request so the reviewer sees the current configuration.'\n )}\n </p>\n )}\n {own ? (\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'botlit.agentApprovals.ownRequest',\n 'You requested this, so another reviewer has to decide it.'\n )}\n </p>\n ) : (\n <div className=\"flex gap-2\">\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_APPROVE}>\n <Button\n size=\"sm\"\n leftIcon={<CheckCircle2 size={14} />}\n disabled={request.isStale}\n onClick={() => setDialog({ kind: 'approve', request })}\n >\n {t('botlit.agentApproval.approveAction', 'Approve')}\n </Button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_APPROVE}>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n leftIcon={<XCircle size={14} />}\n onClick={() => setDialog({ kind: 'reject', request })}\n >\n {t('botlit.agentApproval.rejectAction', 'Reject')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>{t('botlit.agentApprovals.history.title', 'Recent decisions')}</CardTitle>\n </CardHeader>\n <CardContent>\n {decided.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentApprovals.history.empty', 'No decisions yet.')}\n </p>\n ) : (\n <ul className=\"space-y-2\" data-testid=\"agent-approvals-history\">\n {decided.map((request) => (\n <li\n key={request.id}\n className=\"p-3 border border-border-subtle rounded-lg text-sm space-y-1\"\n >\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"font-medium\">\n {agentNames.get(request.agentId) ?? request.agentId}\n </span>\n <Badge variant={approvalStatusVariant(request.status)}>\n {request.status}\n </Badge>\n <span className=\"text-text-secondary\">\n {t('botlit.agentApproval.decidedBy', 'by')} {who(request.reviewerId)}{' '}\n {request.decidedAt ? formatRelativeTime(request.decidedAt) : ''}\n </span>\n </div>\n {request.decisionReason && (\n <p className=\"break-words\">{request.decisionReason}</p>\n )}\n </li>\n ))}\n </ul>\n )}\n </CardContent>\n </Card>\n </div>\n\n <ApprovalDecisionDialog\n kind={dialog?.kind ?? null}\n loading={pending !== null}\n onClose={() => setDialog(null)}\n onConfirm={confirm}\n />\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AgentApprovalsPage.js","names":["AgentApprovalsPage","t","useTr","useBotlit","settings","useAgentApprovalSettings","pendingRequests","useAgentApprovalRequests","allRequests","agents","useAgents","useAgentApprovalActions","dialog","setDialog","useState","agentNames","useMemo","agent","decided","request","required","who","id","currentUser","refreshAll","toggleRequired","next","err","PageLayout","Button","navigateTo","ArrowLeft","PagePurpose","ShieldCheck","Card","CardHeader","CardTitle","Badge","CardDescription","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","CardContent","ErrorState","own","formatRelativeTime","AlertTriangle","CheckCircle2","XCircle","approvalStatusVariant","ApprovalDecisionDialog","pending","run","text","toast"],"sources":["../../../src/botlit/pages/AgentApprovalsPage.tsx"],"sourcesContent":["/**\n * Agent Activation Approvals Page (BOFF-9682)\n * @module botlit/pages\n *\n * Reviewer queue for the workspace: every pending request to take an agent\n * live, with approve / reject, the recent decisions, and the workspace switch\n * that makes review mandatory. Approving publishes the agent's draft and sets\n * it ACTIVE; a request whose agent changed after it was submitted is flagged\n * stale and cannot be approved.\n */\n\nimport { useMemo, useState, type FC } from 'react';\nimport { AlertTriangle, ArrowLeft, CheckCircle2, ShieldCheck, XCircle } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge } from '../components/Badge';\nimport { ErrorState } from '../components/ErrorState';\nimport { ApprovalDecisionDialog, approvalStatusVariant } from '../components/AgentApprovalPanel';\nimport { useAgents } from '../hooks/useAgents';\nimport {\n useAgentApprovalActions,\n useAgentApprovalRequests,\n useAgentApprovalSettings,\n type AgentApprovalRequestRecord,\n} from '../hooks/useAgentApprovals';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const AgentApprovalsPage: FC = () => {\n const t = useTr();\n const { navigateTo, currentUser } = useBotlit();\n const settings = useAgentApprovalSettings();\n const pendingRequests = useAgentApprovalRequests({ status: 'PENDING' });\n const allRequests = useAgentApprovalRequests({});\n const { data: agents } = useAgents();\n const { run, pending } = useAgentApprovalActions();\n const [dialog, setDialog] = useState<{\n kind: 'approve' | 'reject';\n request: AgentApprovalRequestRecord;\n } | null>(null);\n\n const agentNames = useMemo(\n () => new Map(agents.map((agent) => [agent.id, agent.name])),\n [agents]\n );\n const decided = allRequests.data.filter((request) => request.status !== 'PENDING').slice(0, 20);\n const required = settings.data?.requireActivationApproval === true;\n const who = (id?: string | null): string =>\n id && id === currentUser?.id ? t('botlit.agentApproval.you', 'you') : (id ?? '—');\n\n const refreshAll = async (): Promise<void> => {\n await Promise.all([pendingRequests.refetch(), allRequests.refetch()]);\n };\n\n const toggleRequired = async (): Promise<void> => {\n try {\n const next = await settings.update(!required);\n toast.success(\n next.requireActivationApproval\n ? t('botlit.agentApprovals.toast.enabled', 'Agents now need approval before going live')\n : t('botlit.agentApprovals.toast.disabled', 'Activation approval is now optional')\n );\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentApprovals.toast.settingsError', 'Failed to update the setting')\n );\n }\n };\n\n const confirm = async (text: string): Promise<void> => {\n if (!dialog) return;\n try {\n if (dialog.kind === 'approve') {\n await run({ kind: 'approve', id: dialog.request.id, reason: text });\n toast.success(t('botlit.agentApproval.toast.approved', 'Approved — the agent is live'));\n } else {\n await run({ kind: 'reject', id: dialog.request.id, reason: text });\n toast.success(t('botlit.agentApproval.toast.rejected', 'Activation rejected'));\n }\n setDialog(null);\n await refreshAll();\n } catch (err: unknown) {\n toast.error(\n err instanceof Error\n ? err.message\n : t('botlit.agentApproval.toast.error', 'Approval action failed')\n );\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('agents')}>\n <ArrowLeft size={20} />\n </Button>\n <span>{t('botlit.agentApprovals.title', 'Agent approvals')}</span>\n </div>\n }\n description={t('botlit.agentApprovals.description', 'Review requests to take agents live')}\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<ShieldCheck size={18} />}>\n {t(\n 'botlit.agentApprovals.purpose',\n \"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.\"\n )}\n </PagePurpose>\n\n <Card data-testid=\"agent-approvals-settings\">\n <CardHeader className=\"flex flex-row items-start justify-between gap-4\">\n <div>\n <CardTitle className=\"flex items-center gap-2\">\n {t(\n 'botlit.agentApprovals.settings.title',\n 'Require approval before agents go live'\n )}\n <Badge variant={required ? 'warning' : 'outline'}>\n {required\n ? t('botlit.agentApprovals.settings.on', 'On')\n : t('botlit.agentApprovals.settings.off', 'Off')}\n </Badge>\n </CardTitle>\n <CardDescription>\n {t(\n 'botlit.agentApprovals.settings.description',\n '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.'\n )}\n </CardDescription>\n </div>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_APPROVE}>\n <Button\n className=\"shrink-0 whitespace-nowrap\"\n variant={required ? 'outline' : 'default'}\n isLoading={settings.saving}\n disabled={settings.loading || !settings.data}\n onClick={() => void toggleRequired()}\n >\n {required\n ? t('botlit.agentApprovals.settings.turnOff', 'Turn off')\n : t('botlit.agentApprovals.settings.turnOn', 'Turn on')}\n </Button>\n </BotmanorPermissionGate>\n </CardHeader>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>{t('botlit.agentApprovals.pending.title', 'Waiting for review')}</CardTitle>\n </CardHeader>\n <CardContent>\n {pendingRequests.error ? (\n <ErrorState\n resource={t('botlit.agentApprovals.resource', 'activation requests')}\n error={pendingRequests.error}\n onRetry={() => void pendingRequests.refetch()}\n />\n ) : pendingRequests.loading && pendingRequests.data.length === 0 ? (\n <div className=\"h-24 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n ) : pendingRequests.data.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentApprovals.pending.empty', 'No agents are waiting for review.')}\n </p>\n ) : (\n <ul className=\"space-y-3\" data-testid=\"agent-approvals-pending\">\n {pendingRequests.data.map((request) => {\n const own = request.requestedById === currentUser?.id;\n return (\n <li\n key={request.id}\n className=\"p-4 border border-border-subtle rounded-lg space-y-2\"\n >\n <div className=\"flex items-center gap-2 flex-wrap\">\n <button\n type=\"button\"\n className=\"font-medium text-primary hover:underline\"\n onClick={() => navigateTo(`agents/${request.agentId}`)}\n >\n {agentNames.get(request.agentId) ?? request.agentId}\n </button>\n <Badge variant=\"warning\">{request.status}</Badge>\n <span className=\"text-sm text-text-secondary\">\n {t('botlit.agentApproval.requestedBy', 'Requested by')}{' '}\n {who(request.requestedById)} {formatRelativeTime(request.createdAt)}\n </span>\n </div>\n {request.requestNote && (\n <p className=\"text-sm break-words\">{request.requestNote}</p>\n )}\n {request.isStale && (\n <p className=\"flex items-center gap-2 text-sm text-status-warning-text\">\n <AlertTriangle size={14} />\n {t(\n 'botlit.agentApproval.stale',\n 'The agent changed after this request. Submit a new request so the reviewer sees the current configuration.'\n )}\n </p>\n )}\n {own ? (\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'botlit.agentApprovals.ownRequest',\n 'You requested this, so another reviewer has to decide it.'\n )}\n </p>\n ) : (\n <div className=\"flex gap-2\">\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_APPROVE}>\n <Button\n size=\"sm\"\n leftIcon={<CheckCircle2 size={14} />}\n disabled={request.isStale}\n onClick={() => setDialog({ kind: 'approve', request })}\n >\n {t('botlit.agentApproval.approveAction', 'Approve')}\n </Button>\n </BotmanorPermissionGate>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.AGENT_APPROVE}>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n leftIcon={<XCircle size={14} />}\n onClick={() => setDialog({ kind: 'reject', request })}\n >\n {t('botlit.agentApproval.rejectAction', 'Reject')}\n </Button>\n </BotmanorPermissionGate>\n </div>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>{t('botlit.agentApprovals.history.title', 'Recent decisions')}</CardTitle>\n </CardHeader>\n <CardContent>\n {decided.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n {t('botlit.agentApprovals.history.empty', 'No decisions yet.')}\n </p>\n ) : (\n <ul className=\"space-y-2\" data-testid=\"agent-approvals-history\">\n {decided.map((request) => (\n <li\n key={request.id}\n className=\"p-3 border border-border-subtle rounded-lg text-sm space-y-1\"\n >\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"font-medium\">\n {agentNames.get(request.agentId) ?? request.agentId}\n </span>\n <Badge variant={approvalStatusVariant(request.status)}>\n {request.status}\n </Badge>\n <span className=\"text-text-secondary\">\n {t('botlit.agentApproval.decidedBy', 'by')} {who(request.reviewerId)}{' '}\n {request.decidedAt ? formatRelativeTime(request.decidedAt) : ''}\n </span>\n </div>\n {request.decisionReason && (\n <p className=\"break-words\">{request.decisionReason}</p>\n )}\n </li>\n ))}\n </ul>\n )}\n </CardContent>\n </Card>\n </div>\n\n <ApprovalDecisionDialog\n kind={dialog?.kind ?? null}\n loading={pending !== null}\n onClose={() => setDialog(null)}\n onConfirm={confirm}\n />\n </PageLayout>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const AgentBuilderPage: FC;
@@ -1,21 +1,21 @@
1
1
  import { useBotlit as e } from "../providers/BotlitProvider.js";
2
- import { useBots as t } from "../hooks/useBots.js";
3
- import { useAgent as ee, useCreateAgent as te, useUpdateAgent as ne } from "../hooks/useAgents.js";
4
- import { useLLMModels as n, useLLMProviders as re } from "../hooks/useLLMProviders.js";
5
- import { cn as r } from "../utils/cn.js";
6
- import { PageLayout as i } from "../components/PageLayout.js";
7
- import { Button as a } from "../components/Button.js";
8
- import { Card as o, CardContent as s, CardDescription as c, CardHeader as l, CardTitle as u } from "../components/Card.js";
9
- import { FormField as d, Input as f, Textarea as p } from "../components/Input.js";
10
- import { toUnion as m } from "../utils/unions.js";
11
- import { configuredAnswerModels as h } from "../utils/embedding-models.js";
12
- import { useEffect as g, useState as _ } from "react";
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";
4
+ import { Button as s } from "../components/Button.js";
5
+ import { FormField as c, Input as l, Textarea as u } from "../components/Input.js";
6
+ import { useAgent as d, useCreateAgent as f, useUpdateAgent as p } from "../hooks/useAgents.js";
7
+ import { useBots as m } from "../hooks/useBots.js";
8
+ import { useLLMModels as ee, useLLMProviders as te } from "../hooks/useLLMProviders.js";
9
+ import { cn as h } from "../utils/cn.js";
10
+ import { toUnion as g } from "../utils/unions.js";
11
+ import { configuredAnswerModels as ne } from "../utils/embedding-models.js";
12
+ import { useEffect as re, useState as _ } from "react";
13
13
  import { PagePurpose as ie } from "@burdenoff/fe-libs/ui";
14
14
  import { jsx as v, jsxs as y } from "react/jsx-runtime";
15
- import { useParams as ae } from "react-router";
16
- import { ArrowLeft as oe, Brain as se, Save as b, Settings as x, Sparkles as S, Wrench as C } from "lucide-react";
15
+ import { useParams as b } from "react-router";
16
+ import { ArrowLeft as ae, Brain as oe, Save as x, Settings as se, Sparkles as S, Wrench as C } from "lucide-react";
17
17
  import { toast as w } from "sonner";
18
- //#region src/botlit/pages/AgentBuilderPage.tsx
18
+ // src/botlit/pages/AgentBuilderPage.tsx
19
19
  var T = [
20
20
  "MCP_TOOLS",
21
21
  "RAG",
@@ -38,10 +38,10 @@ function D(e) {
38
38
  });
39
39
  }
40
40
  function O(e) {
41
- return m(e, E, "ASSISTANT");
41
+ return g(e, E, "ASSISTANT");
42
42
  }
43
43
  var k = () => {
44
- let { agentId: m } = ae(), { navigateTo: T, workspaceId: E } = e(), { data: k } = ee(m), { data: A } = t(), { data: j, loading: ce, error: M, refetch: N } = re(), { data: P, loading: F, error: I, refetch: L } = n(), R = ce || F, z = M || I, B = h(P ?? [], j ?? []), [V, H] = te(), [U, W] = ne(), G = !!m, [K, q] = _(0), [J, Y] = _({
44
+ let { agentId: g } = b(), { navigateTo: T, workspaceId: E } = e(), { data: k } = d(g), { data: A } = m(), { data: j, loading: ce, error: M, refetch: N } = te(), { data: P, loading: F, error: I, refetch: L } = ee(), R = ce || F, z = M || I, B = ne(P ?? [], j ?? []), [V, H] = f(), [U, W] = p(), G = !!g, [K, q] = _(0), [J, Y] = _({
45
45
  name: "",
46
46
  slug: "",
47
47
  description: "",
@@ -55,7 +55,7 @@ var k = () => {
55
55
  capabilities: ["MCP_TOOLS", "REASONING"],
56
56
  llmModelId: ""
57
57
  });
58
- g(() => {
58
+ re(() => {
59
59
  if (k) {
60
60
  let e = k;
61
61
  Y({
@@ -83,12 +83,12 @@ var k = () => {
83
83
  {
84
84
  id: 1,
85
85
  label: "Prompt",
86
- icon: /* @__PURE__ */ v(se, { size: 18 })
86
+ icon: /* @__PURE__ */ v(oe, { size: 18 })
87
87
  },
88
88
  {
89
89
  id: 2,
90
90
  label: "LLM Model",
91
- icon: /* @__PURE__ */ v(x, { size: 18 })
91
+ icon: /* @__PURE__ */ v(se, { size: 18 })
92
92
  },
93
93
  {
94
94
  id: 3,
@@ -161,8 +161,8 @@ var k = () => {
161
161
  }
162
162
  let e = J.slug || J.name.toLowerCase().replace(/\s+/g, "-");
163
163
  try {
164
- if (G && m) await U({
165
- agentId: m,
164
+ if (G && g) await U({
165
+ agentId: g,
166
166
  input: {
167
167
  name: J.name,
168
168
  slug: e,
@@ -174,7 +174,7 @@ var k = () => {
174
174
  llmModelId: J.llmModelId || void 0,
175
175
  type: O(J.type)
176
176
  }
177
- }), w.success(`Agent "${J.name}" updated successfully`), T(`agents/${m}`);
177
+ }), w.success(`Agent "${J.name}" updated successfully`), T(`agents/${g}`);
178
178
  else {
179
179
  if (!E) return;
180
180
  let t = await V({
@@ -196,24 +196,24 @@ var k = () => {
196
196
  w.error(t);
197
197
  }
198
198
  }, Q = H.loading, $ = W.loading;
199
- return /* @__PURE__ */ y(i, {
199
+ return /* @__PURE__ */ y(t, {
200
200
  title: /* @__PURE__ */ y("div", {
201
201
  className: "flex items-center gap-3",
202
- children: [/* @__PURE__ */ v(a, {
202
+ children: [/* @__PURE__ */ v(s, {
203
203
  variant: "ghost",
204
204
  size: "icon",
205
- onClick: () => T(m ? `agents/${m}` : "agents"),
206
- children: /* @__PURE__ */ v(oe, { size: 20 })
205
+ onClick: () => T(g ? `agents/${g}` : "agents"),
206
+ children: /* @__PURE__ */ v(ae, { size: 20 })
207
207
  }), /* @__PURE__ */ v("span", { children: G ? "Edit Agent" : "Create New Agent" })]
208
208
  }),
209
209
  actions: /* @__PURE__ */ y("div", {
210
210
  className: "flex gap-2",
211
- children: [/* @__PURE__ */ v(a, {
211
+ children: [/* @__PURE__ */ v(s, {
212
212
  variant: "outline",
213
- onClick: () => T(m ? `agents/${m}` : "agents"),
213
+ onClick: () => T(g ? `agents/${g}` : "agents"),
214
214
  children: "Cancel"
215
- }), /* @__PURE__ */ v(a, {
216
- leftIcon: /* @__PURE__ */ v(b, { size: 16 }),
215
+ }), /* @__PURE__ */ v(s, {
216
+ leftIcon: /* @__PURE__ */ v(x, { size: 16 }),
217
217
  onClick: Z,
218
218
  isLoading: Q || $,
219
219
  disabled: !J.name || !J.systemPrompt,
@@ -232,7 +232,7 @@ var k = () => {
232
232
  className: "flex items-center justify-between mb-8",
233
233
  children: X.map((e) => /* @__PURE__ */ y("button", {
234
234
  onClick: () => q(e.id),
235
- className: r("flex items-center gap-2 px-4 py-2 rounded-lg transition-colors", K === e.id ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-sunken text-text-secondary hover:bg-accent"),
235
+ className: h("flex items-center gap-2 px-4 py-2 rounded-lg transition-colors", K === e.id ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-sunken text-text-secondary hover:bg-accent"),
236
236
  children: [e.icon, /* @__PURE__ */ v("span", {
237
237
  className: "font-medium",
238
238
  children: e.label
@@ -242,10 +242,10 @@ var k = () => {
242
242
  /* @__PURE__ */ y("div", {
243
243
  className: "space-y-6",
244
244
  children: [
245
- K === 0 && /* @__PURE__ */ y(o, {
245
+ K === 0 && /* @__PURE__ */ y(n, {
246
246
  treatment: "glass",
247
247
  glow: !0,
248
- children: [/* @__PURE__ */ y(l, { children: [/* @__PURE__ */ v(u, { children: "Basic Information" }), /* @__PURE__ */ v(c, { children: "Set up the agent's identity and purpose" })] }), /* @__PURE__ */ y(s, {
248
+ children: [/* @__PURE__ */ y(a, { children: [/* @__PURE__ */ v(o, { children: "Basic Information" }), /* @__PURE__ */ v(i, { children: "Set up the agent's identity and purpose" })] }), /* @__PURE__ */ y(r, {
249
249
  className: "space-y-6",
250
250
  children: [
251
251
  /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
@@ -258,14 +258,14 @@ var k = () => {
258
258
  ...J,
259
259
  avatar: e
260
260
  }),
261
- className: r("text-3xl p-2 rounded-lg border-2 transition-colors", J.avatar === e ? "border-primary bg-action-primary-bg/10" : "border-border-subtle hover:border-primary/50"),
261
+ className: h("text-3xl p-2 rounded-lg border-2 transition-colors", J.avatar === e ? "border-primary bg-action-primary-bg/10" : "border-border-subtle hover:border-primary/50"),
262
262
  children: e
263
263
  }, e))
264
264
  })] }),
265
- /* @__PURE__ */ v(d, {
265
+ /* @__PURE__ */ v(c, {
266
266
  label: "Agent Name",
267
267
  required: !0,
268
- children: /* @__PURE__ */ v(f, {
268
+ children: /* @__PURE__ */ v(l, {
269
269
  placeholder: "e.g., Customer Support Agent",
270
270
  value: J.name,
271
271
  onChange: (e) => Y({
@@ -274,10 +274,10 @@ var k = () => {
274
274
  })
275
275
  })
276
276
  }),
277
- /* @__PURE__ */ v(d, {
277
+ /* @__PURE__ */ v(c, {
278
278
  label: "Slug",
279
279
  description: "URL-friendly identifier",
280
- children: /* @__PURE__ */ v(f, {
280
+ children: /* @__PURE__ */ v(l, {
281
281
  placeholder: "customer-support-agent",
282
282
  value: J.slug,
283
283
  onChange: (e) => Y({
@@ -286,9 +286,9 @@ var k = () => {
286
286
  })
287
287
  })
288
288
  }),
289
- /* @__PURE__ */ v(d, {
289
+ /* @__PURE__ */ v(c, {
290
290
  label: "Description",
291
- children: /* @__PURE__ */ v(p, {
291
+ children: /* @__PURE__ */ v(u, {
292
292
  placeholder: "Describe what this agent does...",
293
293
  value: J.description,
294
294
  onChange: (e) => Y({
@@ -322,16 +322,16 @@ var k = () => {
322
322
  ]
323
323
  })]
324
324
  }),
325
- K === 1 && /* @__PURE__ */ y(o, {
325
+ K === 1 && /* @__PURE__ */ y(n, {
326
326
  treatment: "glass",
327
327
  glow: !0,
328
- children: [/* @__PURE__ */ y(l, { children: [/* @__PURE__ */ v(u, { children: "Prompt Configuration" }), /* @__PURE__ */ v(c, { children: "Define how the agent communicates and behaves" })] }), /* @__PURE__ */ y(s, {
328
+ children: [/* @__PURE__ */ y(a, { children: [/* @__PURE__ */ v(o, { children: "Prompt Configuration" }), /* @__PURE__ */ v(i, { children: "Define how the agent communicates and behaves" })] }), /* @__PURE__ */ y(r, {
329
329
  className: "space-y-6",
330
- children: [/* @__PURE__ */ v(d, {
330
+ children: [/* @__PURE__ */ v(c, {
331
331
  label: "System Prompt",
332
332
  required: !0,
333
333
  description: "The core instructions that define the agent's behavior",
334
- children: /* @__PURE__ */ v(p, {
334
+ children: /* @__PURE__ */ v(u, {
335
335
  placeholder: "You are a helpful assistant...",
336
336
  value: J.systemPrompt,
337
337
  onChange: (e) => Y({
@@ -343,10 +343,10 @@ var k = () => {
343
343
  })
344
344
  }), /* @__PURE__ */ y("div", {
345
345
  className: "grid grid-cols-2 gap-4",
346
- children: [/* @__PURE__ */ v(d, {
346
+ children: [/* @__PURE__ */ v(c, {
347
347
  label: "Temperature",
348
348
  description: "Controls randomness (0-2)",
349
- children: /* @__PURE__ */ v(f, {
349
+ children: /* @__PURE__ */ v(l, {
350
350
  type: "number",
351
351
  step: "0.1",
352
352
  min: "0",
@@ -357,10 +357,10 @@ var k = () => {
357
357
  temperature: e.target.value
358
358
  })
359
359
  })
360
- }), /* @__PURE__ */ v(d, {
360
+ }), /* @__PURE__ */ v(c, {
361
361
  label: "Max Tokens",
362
362
  description: "Maximum response length",
363
- children: /* @__PURE__ */ v(f, {
363
+ children: /* @__PURE__ */ v(l, {
364
364
  type: "number",
365
365
  step: "256",
366
366
  min: "1",
@@ -374,13 +374,13 @@ var k = () => {
374
374
  })]
375
375
  })]
376
376
  }),
377
- K === 2 && /* @__PURE__ */ y(o, {
377
+ K === 2 && /* @__PURE__ */ y(n, {
378
378
  treatment: "glass",
379
379
  glow: !0,
380
- children: [/* @__PURE__ */ y(l, { children: [/* @__PURE__ */ v(u, { children: "LLM Configuration" }), /* @__PURE__ */ v(c, { children: "Select the LLM model for this agent" })] }), /* @__PURE__ */ y(s, {
380
+ children: [/* @__PURE__ */ y(a, { children: [/* @__PURE__ */ v(o, { children: "LLM Configuration" }), /* @__PURE__ */ v(i, { children: "Select the LLM model for this agent" })] }), /* @__PURE__ */ y(r, {
381
381
  className: "space-y-6",
382
382
  children: [
383
- /* @__PURE__ */ y(d, {
383
+ /* @__PURE__ */ y(c, {
384
384
  label: "LLM Model",
385
385
  description: "Select a model for this agent",
386
386
  children: [
@@ -390,7 +390,7 @@ var k = () => {
390
390
  }),
391
391
  z && /* @__PURE__ */ y("div", {
392
392
  role: "alert",
393
- children: [/* @__PURE__ */ v("p", { children: "Could not load answer models." }), /* @__PURE__ */ v(a, {
393
+ children: [/* @__PURE__ */ v("p", { children: "Could not load answer models." }), /* @__PURE__ */ v(s, {
394
394
  variant: "secondary",
395
395
  onClick: () => {
396
396
  L(), N();
@@ -457,13 +457,13 @@ var k = () => {
457
457
  }),
458
458
  K === 3 && /* @__PURE__ */ v("div", {
459
459
  className: "space-y-6",
460
- children: /* @__PURE__ */ y(o, {
460
+ children: /* @__PURE__ */ y(n, {
461
461
  treatment: "glass",
462
462
  glow: !0,
463
- children: [/* @__PURE__ */ y(l, { children: [/* @__PURE__ */ y(u, {
463
+ children: [/* @__PURE__ */ y(a, { children: [/* @__PURE__ */ y(o, {
464
464
  className: "flex items-center gap-2",
465
465
  children: [/* @__PURE__ */ v(C, { size: 18 }), "Tools & Knowledge"]
466
- }), /* @__PURE__ */ v(c, { children: "Configure tools and knowledge bases for this agent" })] }), /* @__PURE__ */ v(s, { children: /* @__PURE__ */ y("div", {
466
+ }), /* @__PURE__ */ v(i, { children: "Configure tools and knowledge bases for this agent" })] }), /* @__PURE__ */ v(r, { children: /* @__PURE__ */ y("div", {
467
467
  className: "text-center py-12 text-text-secondary",
468
468
  children: [
469
469
  /* @__PURE__ */ v(C, { className: "h-10 w-10 mx-auto mb-3 opacity-50" }),
@@ -481,16 +481,16 @@ var k = () => {
481
481
  }),
482
482
  /* @__PURE__ */ y("div", {
483
483
  className: "flex justify-between pt-6",
484
- children: [/* @__PURE__ */ v(a, {
484
+ children: [/* @__PURE__ */ v(s, {
485
485
  variant: "outline",
486
486
  onClick: () => q(Math.max(0, K - 1)),
487
487
  disabled: K === 0,
488
488
  children: "Previous"
489
- }), K < X.length - 1 ? /* @__PURE__ */ v(a, {
489
+ }), K < X.length - 1 ? /* @__PURE__ */ v(s, {
490
490
  onClick: () => q(K + 1),
491
491
  children: "Next"
492
- }) : /* @__PURE__ */ v(a, {
493
- leftIcon: /* @__PURE__ */ v(b, { size: 16 }),
492
+ }) : /* @__PURE__ */ v(s, {
493
+ leftIcon: /* @__PURE__ */ v(x, { size: 16 }),
494
494
  onClick: Z,
495
495
  isLoading: Q || $,
496
496
  disabled: !J.name || !J.systemPrompt,
@@ -503,7 +503,6 @@ var k = () => {
503
503
  }), A && A.length > 0 && null]
504
504
  });
505
505
  };
506
- //#endregion
507
506
  export { k as AgentBuilderPage };
508
507
 
509
508
  //# sourceMappingURL=AgentBuilderPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentBuilderPage.js","names":[],"sources":["../../../src/botlit/pages/AgentBuilderPage.tsx"],"sourcesContent":["/**\n * Agent Builder Page\n * @module botlit/pages\n *\n * Creates/edits agents with real GraphQL BotmanorAgent type:\n * - systemPrompt (string), temperature, maxTokens\n * - capabilities (enum array: MCP_TOOLS, RAG, REASONING, etc.)\n * - llmModelId (reference to LLM model)\n * - type (ASSISTANT, ANALYST, AUTOMATION, SPECIALIST)\n */\n\nimport type { FC } from 'react';\nimport { useState, useEffect } from 'react';\nimport { useParams } from 'react-router';\nimport { toast } from 'sonner';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { ArrowLeft, Save, Brain, Wrench, Settings, Sparkles } from 'lucide-react';\nimport { PagePurpose } 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, Textarea, FormField } from '../components/Input';\nimport { useAgent, useCreateAgent, useUpdateAgent } from '../hooks/useAgents';\nimport { useBots } from '../hooks/useBots';\nimport { useLLMProviders, useLLMModels } from '../hooks/useLLMProviders';\nimport { cn } from '../utils/cn';\nimport { toUnion } from '../utils/unions';\nimport { configuredAnswerModels } from '../utils/embedding-models';\n\n/** `BotmanorAgentCapability` values the builder offers. */\nconst AGENT_CAPABILITIES = [\n 'MCP_TOOLS',\n 'RAG',\n 'REASONING',\n 'MULTIMODAL',\n 'MEMORY',\n 'CODE_EXECUTION',\n 'A2A',\n 'WEB_BROWSING',\n] as const;\ntype AgentCapability = (typeof AGENT_CAPABILITIES)[number];\n\n/** `BotmanorAgentType` values the builder offers. */\nconst AGENT_TYPES = ['ASSISTANT', 'ANALYST', 'AUTOMATION', 'SPECIALIST'] as const;\n\n/** Drops any capability the schema does not declare rather than guessing one. */\nfunction toCapabilities(values: string[]): AgentCapability[] {\n return values.flatMap((value) => {\n const match = AGENT_CAPABILITIES.find((capability) => capability === value);\n return match ? [match] : [];\n });\n}\n\nfunction toAgentType(value: string): (typeof AGENT_TYPES)[number] {\n return toUnion(value, AGENT_TYPES, 'ASSISTANT');\n}\n\ninterface FormDataType {\n name: string;\n slug: string;\n description: string;\n avatar: string;\n tags: string[];\n // Flat fields matching real GraphQL API\n systemPrompt: string;\n temperature: string;\n maxTokens: string;\n type: string;\n status: string;\n capabilities: string[];\n llmModelId: string;\n}\n\nexport const AgentBuilderPage: FC = () => {\n const { agentId } = useParams();\n const { navigateTo, workspaceId } = useBotlit();\n const { data: existingAgent } = useAgent(agentId);\n const { data: bots } = useBots();\n const {\n data: providers,\n loading: providersLoading,\n error: providersError,\n refetch: refetchProviders,\n } = useLLMProviders();\n const {\n data: llmModels,\n loading: modelsLoading,\n error: modelsError,\n refetch: refetchModels,\n } = useLLMModels();\n const catalogLoading = providersLoading || modelsLoading;\n const catalogError = providersError || modelsError;\n const answerModels = configuredAnswerModels(llmModels ?? [], providers ?? []);\n const [createAgent, createAgentResult] = useCreateAgent();\n const [updateAgent, updateAgentResult] = useUpdateAgent();\n\n const isEditing = !!agentId;\n const [activeStep, setActiveStep] = useState(0);\n\n const [formData, setFormData] = useState<FormDataType>({\n name: '',\n slug: '',\n description: '',\n avatar: '🤖',\n tags: [],\n systemPrompt: 'You are a helpful AI assistant. Be concise, accurate, and friendly.',\n temperature: '0.7',\n maxTokens: '2048',\n type: 'ASSISTANT',\n status: 'DRAFT',\n capabilities: ['MCP_TOOLS', 'REASONING'],\n llmModelId: '',\n });\n\n // Update form when existing agent loads\n useEffect(() => {\n if (existingAgent) {\n const agent = existingAgent as {\n name: string;\n slug: string;\n description?: string;\n systemPrompt: string;\n temperature?: number;\n maxTokens?: number;\n type: string;\n status: string;\n capabilities: string[];\n llmModelId?: string;\n tagIds?: string[];\n };\n setFormData({\n name: agent.name,\n slug: agent.slug,\n description: agent.description || '',\n avatar: '🤖',\n tags: agent.tagIds || [],\n systemPrompt: agent.systemPrompt || '',\n temperature: String(agent.temperature ?? 0.7),\n maxTokens: String(agent.maxTokens ?? 2048),\n type: agent.type || 'ASSISTANT',\n status: agent.status || 'DRAFT',\n capabilities: agent.capabilities || [],\n llmModelId: agent.llmModelId || '',\n });\n }\n }, [existingAgent]);\n\n const steps = [\n { id: 0, label: 'Basic Info', icon: <Sparkles size={18} /> },\n { id: 1, label: 'Prompt', icon: <Brain size={18} /> },\n { id: 2, label: 'LLM Model', icon: <Settings size={18} /> },\n { id: 3, label: 'Tools & Knowledge', icon: <Wrench size={18} /> },\n ];\n\n const avatars = ['🤖', '🧠', '💡', '🎯', '🔧', '📊', '🎧', '💼', '🔍', '⚡', '🌟', '🚀'];\n\n const allCapabilities: { key: AgentCapability; label: string; description: string }[] = [\n { key: 'MCP_TOOLS', label: 'MCP Tools', description: 'Can use MCP tool servers' },\n { key: 'RAG', label: 'RAG', description: 'Retrieval-augmented generation' },\n { key: 'REASONING', label: 'Reasoning', description: 'Advanced reasoning' },\n { key: 'MULTIMODAL', label: 'Multimodal', description: 'Process images & media' },\n { key: 'MEMORY', label: 'Memory', description: 'Conversation memory' },\n { key: 'CODE_EXECUTION', label: 'Code Execution', description: 'Execute code' },\n { key: 'A2A', label: 'A2A', description: 'Agent-to-agent protocol' },\n { key: 'WEB_BROWSING', label: 'Web Browsing', description: 'Browse the web' },\n ];\n\n const toggleCapability = (cap: string) => {\n setFormData((prev) => ({\n ...prev,\n capabilities: prev.capabilities.includes(cap)\n ? prev.capabilities.filter((c) => c !== cap)\n : [...prev.capabilities, cap],\n }));\n };\n\n const handleSave = async () => {\n if (\n formData.llmModelId &&\n (catalogLoading ||\n catalogError ||\n !answerModels.some((model) => model.id === formData.llmModelId))\n ) {\n toast.error('Choose an active answer model from the available catalog.');\n return;\n }\n const slug = formData.slug || formData.name.toLowerCase().replace(/\\s+/g, '-');\n\n try {\n if (isEditing && agentId) {\n await updateAgent({\n agentId,\n input: {\n name: formData.name,\n slug,\n description: formData.description || undefined,\n systemPrompt: formData.systemPrompt,\n temperature: parseFloat(formData.temperature) || 0.7,\n maxTokens: parseInt(formData.maxTokens) || 2048,\n capabilities: toCapabilities(formData.capabilities),\n llmModelId: formData.llmModelId || undefined,\n type: toAgentType(formData.type),\n },\n });\n toast.success(`Agent \"${formData.name}\" updated successfully`);\n navigateTo(`agents/${agentId}`);\n } else {\n if (!workspaceId) return;\n const agent = await createAgent({\n workspaceId,\n name: formData.name,\n slug,\n type: toAgentType(formData.type),\n systemPrompt: formData.systemPrompt,\n temperature: parseFloat(formData.temperature) || 0.7,\n maxTokens: parseInt(formData.maxTokens) || 2048,\n capabilities: toCapabilities(formData.capabilities),\n llmModelId: formData.llmModelId || undefined,\n description: formData.description || undefined,\n });\n toast.success(`Agent \"${formData.name}\" created successfully`);\n if (agent?.id) navigateTo(`agents/${agent.id}`);\n }\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : 'Failed to save agent';\n toast.error(message);\n }\n };\n\n const isCreating = createAgentResult.loading;\n const isUpdating = updateAgentResult.loading;\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => navigateTo(agentId ? `agents/${agentId}` : 'agents')}\n >\n <ArrowLeft size={20} />\n </Button>\n <span>{isEditing ? 'Edit Agent' : 'Create New Agent'}</span>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => navigateTo(agentId ? `agents/${agentId}` : 'agents')}\n >\n Cancel\n </Button>\n <Button\n leftIcon={<Save size={16} />}\n onClick={handleSave}\n isLoading={isCreating || isUpdating}\n disabled={!formData.name || !formData.systemPrompt}\n >\n {isEditing ? 'Save Changes' : 'Create Agent'}\n </Button>\n </div>\n }\n >\n <div className=\"max-w-4xl mx-auto\">\n <PagePurpose className=\"mb-6\" icon={<Sparkles size={18} />}>\n This guided builder walks you through everything an agent needs — its identity and system\n prompt, the model and parameters it runs on, and the tools and knowledge it can reach.\n Work through the steps, then create the agent and test it in chat. You can come back and\n edit any step later.\n </PagePurpose>\n\n {/* Steps */}\n <div className=\"flex items-center justify-between mb-8\">\n {steps.map((step) => (\n <button\n key={step.id}\n onClick={() => setActiveStep(step.id)}\n className={cn(\n 'flex items-center gap-2 px-4 py-2 rounded-lg transition-colors',\n activeStep === step.id\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-sunken text-text-secondary hover:bg-accent'\n )}\n >\n {step.icon}\n <span className=\"font-medium\">{step.label}</span>\n </button>\n ))}\n </div>\n\n {/* Step Content */}\n <div className=\"space-y-6\">\n {activeStep === 0 && (\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle>Basic Information</CardTitle>\n <CardDescription>Set up the agent's identity and purpose</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n {/* Avatar Selection */}\n <div>\n <label className=\"text-sm font-medium\">Avatar</label>\n <div className=\"flex gap-2 mt-2 flex-wrap\">\n {avatars.map((avatar) => (\n <button\n key={avatar}\n onClick={() => setFormData({ ...formData, avatar })}\n className={cn(\n 'text-3xl p-2 rounded-lg border-2 transition-colors',\n formData.avatar === avatar\n ? 'border-primary bg-action-primary-bg/10'\n : 'border-border-subtle hover:border-primary/50'\n )}\n >\n {avatar}\n </button>\n ))}\n </div>\n </div>\n\n <FormField label=\"Agent Name\" required>\n <Input\n placeholder=\"e.g., Customer Support Agent\"\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n />\n </FormField>\n\n <FormField label=\"Slug\" description=\"URL-friendly identifier\">\n <Input\n placeholder=\"customer-support-agent\"\n value={formData.slug}\n onChange={(e) => setFormData({ ...formData, slug: e.target.value })}\n />\n </FormField>\n\n <FormField label=\"Description\">\n <Textarea\n placeholder=\"Describe what this agent does...\"\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n rows={3}\n />\n </FormField>\n\n {/* Capabilities */}\n <div>\n <label className=\"text-sm font-medium mb-2 block\">Capabilities</label>\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-3\">\n {allCapabilities.map((cap) => (\n <label\n key={cap.key}\n className=\"flex items-start gap-3 p-3 border border-border-subtle rounded-lg cursor-pointer hover:bg-accent\"\n >\n <input\n type=\"checkbox\"\n className=\"h-4 w-4 rounded border-border-default mt-0.5\"\n checked={formData.capabilities.includes(cap.key)}\n onChange={() => toggleCapability(cap.key)}\n />\n <div>\n <p className=\"font-medium text-sm\">{cap.label}</p>\n <p className=\"text-xs text-text-secondary\">{cap.description}</p>\n </div>\n </label>\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n\n {activeStep === 1 && (\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle>Prompt Configuration</CardTitle>\n <CardDescription>Define how the agent communicates and behaves</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n <FormField\n label=\"System Prompt\"\n required\n description=\"The core instructions that define the agent's behavior\"\n >\n <Textarea\n placeholder=\"You are a helpful assistant...\"\n value={formData.systemPrompt}\n onChange={(e) => setFormData({ ...formData, systemPrompt: e.target.value })}\n rows={8}\n className=\"font-mono text-sm\"\n />\n </FormField>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Temperature\" description=\"Controls randomness (0-2)\">\n <Input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n max=\"2\"\n value={formData.temperature}\n onChange={(e) => setFormData({ ...formData, temperature: e.target.value })}\n />\n </FormField>\n <FormField label=\"Max Tokens\" description=\"Maximum response length\">\n <Input\n type=\"number\"\n step=\"256\"\n min=\"1\"\n value={formData.maxTokens}\n onChange={(e) => setFormData({ ...formData, maxTokens: e.target.value })}\n />\n </FormField>\n </div>\n </CardContent>\n </Card>\n )}\n\n {activeStep === 2 && (\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle>LLM Configuration</CardTitle>\n <CardDescription>Select the LLM model for this agent</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n <FormField label=\"LLM Model\" description=\"Select a model for this agent\">\n {catalogLoading && <p role=\"status\">Loading answer models…</p>}\n {catalogError && (\n <div role=\"alert\">\n <p>Could not load answer models.</p>\n <Button\n variant=\"secondary\"\n onClick={() => {\n void refetchModels();\n void refetchProviders();\n }}\n >\n Retry model catalog\n </Button>\n </div>\n )}\n <select\n aria-label=\"LLM Model\"\n disabled={catalogLoading || Boolean(catalogError)}\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.llmModelId}\n onChange={(e) => setFormData({ ...formData, llmModelId: e.target.value })}\n >\n <option value=\"\">Select a model...</option>\n {answerModels.map((model) => (\n <option key={model.id} value={model.id}>\n {model.name} ({model.modelId})\n </option>\n ))}\n </select>\n </FormField>\n\n <div className=\"p-4 bg-bg-sunken rounded-lg\">\n <h4 className=\"text-sm font-medium mb-2\">Available Providers</h4>\n <div className=\"grid grid-cols-2 gap-2\">\n {providers?.map((provider: { id: string; name: string; type: string }) => (\n <div key={provider.id} className=\"text-sm\">\n <span className=\"font-medium\">{provider.name}</span>\n <span className=\"text-text-secondary ml-2\">({provider.type})</span>\n </div>\n ))}\n {!catalogLoading && !catalogError && !providers?.length && (\n <p className=\"text-sm text-text-secondary\">No providers configured</p>\n )}\n </div>\n </div>\n\n {!catalogLoading && !catalogError && !answerModels.length && (\n <p className=\"text-sm text-text-secondary\">\n No models available. Configure a provider and add models in Settings.\n </p>\n )}\n </CardContent>\n </Card>\n )}\n\n {activeStep === 3 && (\n <div className=\"space-y-6\">\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench size={18} />\n Tools & Knowledge\n </CardTitle>\n <CardDescription>\n Configure tools and knowledge bases for this agent\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"text-center py-12 text-text-secondary\">\n <Wrench className=\"h-10 w-10 mx-auto mb-3 opacity-50\" />\n <p className=\"font-medium\">Tools & Knowledge coming soon</p>\n <p className=\"text-sm mt-2\">\n MCP tool connections and knowledge base bindings will be configurable here in\n a future update.\n </p>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Navigation */}\n <div className=\"flex justify-between pt-6\">\n <Button\n variant=\"outline\"\n onClick={() => setActiveStep(Math.max(0, activeStep - 1))}\n disabled={activeStep === 0}\n >\n Previous\n </Button>\n {activeStep < steps.length - 1 ? (\n <Button onClick={() => setActiveStep(activeStep + 1)}>Next</Button>\n ) : (\n <Button\n leftIcon={<Save size={16} />}\n onClick={handleSave}\n isLoading={isCreating || isUpdating}\n disabled={!formData.name || !formData.systemPrompt}\n >\n {isEditing ? 'Save Changes' : 'Create Agent'}\n </Button>\n )}\n </div>\n </div>\n </div>\n\n {/* Show bots dropdown if needed */}\n {bots && bots.length > 0 && null}\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AgentBuilderPage.js","names":["Textarea","Textarea$1","AGENT_CAPABILITIES","AGENT_TYPES","toCapabilities","values","match","capability","value","toAgentType","toUnion","AgentBuilderPage","useParams","useBotlit","existingAgent","useAgent","agentId","bots","useBots","providers","providersLoading","providersError","refetchProviders","useLLMProviders","llmModels","modelsLoading","modelsError","refetchModels","useLLMModels","catalogLoading","catalogError","answerModels","configuredAnswerModels","createAgent","createAgentResult","useCreateAgent","updateAgent","updateAgentResult","useUpdateAgent","isEditing","activeStep","setActiveStep","useState","formData","setFormData","agent","steps","Sparkles","Brain","Settings","Wrench","avatars","allCapabilities","toggleCapability","prev","cap","c","handleSave","model","slug","toast","navigateTo","workspaceId","err","message","isCreating","isUpdating","PageLayout","Button","ArrowLeft","Save","PagePurpose","step","cn","Card","CardHeader","CardTitle","CardDescription","CardContent","avatar","FormField","Input","provider"],"sources":["../../../src/botlit/pages/AgentBuilderPage.tsx"],"sourcesContent":["/**\n * Agent Builder Page\n * @module botlit/pages\n *\n * Creates/edits agents with real GraphQL BotmanorAgent type:\n * - systemPrompt (string), temperature, maxTokens\n * - capabilities (enum array: MCP_TOOLS, RAG, REASONING, etc.)\n * - llmModelId (reference to LLM model)\n * - type (ASSISTANT, ANALYST, AUTOMATION, SPECIALIST)\n */\n\nimport type { FC } from 'react';\nimport { useState, useEffect } from 'react';\nimport { useParams } from 'react-router';\nimport { toast } from 'sonner';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { ArrowLeft, Save, Brain, Wrench, Settings, Sparkles } from 'lucide-react';\nimport { PagePurpose } 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, Textarea, FormField } from '../components/Input';\nimport { useAgent, useCreateAgent, useUpdateAgent } from '../hooks/useAgents';\nimport { useBots } from '../hooks/useBots';\nimport { useLLMProviders, useLLMModels } from '../hooks/useLLMProviders';\nimport { cn } from '../utils/cn';\nimport { toUnion } from '../utils/unions';\nimport { configuredAnswerModels } from '../utils/embedding-models';\n\n/** `BotmanorAgentCapability` values the builder offers. */\nconst AGENT_CAPABILITIES = [\n 'MCP_TOOLS',\n 'RAG',\n 'REASONING',\n 'MULTIMODAL',\n 'MEMORY',\n 'CODE_EXECUTION',\n 'A2A',\n 'WEB_BROWSING',\n] as const;\ntype AgentCapability = (typeof AGENT_CAPABILITIES)[number];\n\n/** `BotmanorAgentType` values the builder offers. */\nconst AGENT_TYPES = ['ASSISTANT', 'ANALYST', 'AUTOMATION', 'SPECIALIST'] as const;\n\n/** Drops any capability the schema does not declare rather than guessing one. */\nfunction toCapabilities(values: string[]): AgentCapability[] {\n return values.flatMap((value) => {\n const match = AGENT_CAPABILITIES.find((capability) => capability === value);\n return match ? [match] : [];\n });\n}\n\nfunction toAgentType(value: string): (typeof AGENT_TYPES)[number] {\n return toUnion(value, AGENT_TYPES, 'ASSISTANT');\n}\n\ninterface FormDataType {\n name: string;\n slug: string;\n description: string;\n avatar: string;\n tags: string[];\n // Flat fields matching real GraphQL API\n systemPrompt: string;\n temperature: string;\n maxTokens: string;\n type: string;\n status: string;\n capabilities: string[];\n llmModelId: string;\n}\n\nexport const AgentBuilderPage: FC = () => {\n const { agentId } = useParams();\n const { navigateTo, workspaceId } = useBotlit();\n const { data: existingAgent } = useAgent(agentId);\n const { data: bots } = useBots();\n const {\n data: providers,\n loading: providersLoading,\n error: providersError,\n refetch: refetchProviders,\n } = useLLMProviders();\n const {\n data: llmModels,\n loading: modelsLoading,\n error: modelsError,\n refetch: refetchModels,\n } = useLLMModels();\n const catalogLoading = providersLoading || modelsLoading;\n const catalogError = providersError || modelsError;\n const answerModels = configuredAnswerModels(llmModels ?? [], providers ?? []);\n const [createAgent, createAgentResult] = useCreateAgent();\n const [updateAgent, updateAgentResult] = useUpdateAgent();\n\n const isEditing = !!agentId;\n const [activeStep, setActiveStep] = useState(0);\n\n const [formData, setFormData] = useState<FormDataType>({\n name: '',\n slug: '',\n description: '',\n avatar: '🤖',\n tags: [],\n systemPrompt: 'You are a helpful AI assistant. Be concise, accurate, and friendly.',\n temperature: '0.7',\n maxTokens: '2048',\n type: 'ASSISTANT',\n status: 'DRAFT',\n capabilities: ['MCP_TOOLS', 'REASONING'],\n llmModelId: '',\n });\n\n // Update form when existing agent loads\n useEffect(() => {\n if (existingAgent) {\n const agent = existingAgent as {\n name: string;\n slug: string;\n description?: string;\n systemPrompt: string;\n temperature?: number;\n maxTokens?: number;\n type: string;\n status: string;\n capabilities: string[];\n llmModelId?: string;\n tagIds?: string[];\n };\n setFormData({\n name: agent.name,\n slug: agent.slug,\n description: agent.description || '',\n avatar: '🤖',\n tags: agent.tagIds || [],\n systemPrompt: agent.systemPrompt || '',\n temperature: String(agent.temperature ?? 0.7),\n maxTokens: String(agent.maxTokens ?? 2048),\n type: agent.type || 'ASSISTANT',\n status: agent.status || 'DRAFT',\n capabilities: agent.capabilities || [],\n llmModelId: agent.llmModelId || '',\n });\n }\n }, [existingAgent]);\n\n const steps = [\n { id: 0, label: 'Basic Info', icon: <Sparkles size={18} /> },\n { id: 1, label: 'Prompt', icon: <Brain size={18} /> },\n { id: 2, label: 'LLM Model', icon: <Settings size={18} /> },\n { id: 3, label: 'Tools & Knowledge', icon: <Wrench size={18} /> },\n ];\n\n const avatars = ['🤖', '🧠', '💡', '🎯', '🔧', '📊', '🎧', '💼', '🔍', '⚡', '🌟', '🚀'];\n\n const allCapabilities: { key: AgentCapability; label: string; description: string }[] = [\n { key: 'MCP_TOOLS', label: 'MCP Tools', description: 'Can use MCP tool servers' },\n { key: 'RAG', label: 'RAG', description: 'Retrieval-augmented generation' },\n { key: 'REASONING', label: 'Reasoning', description: 'Advanced reasoning' },\n { key: 'MULTIMODAL', label: 'Multimodal', description: 'Process images & media' },\n { key: 'MEMORY', label: 'Memory', description: 'Conversation memory' },\n { key: 'CODE_EXECUTION', label: 'Code Execution', description: 'Execute code' },\n { key: 'A2A', label: 'A2A', description: 'Agent-to-agent protocol' },\n { key: 'WEB_BROWSING', label: 'Web Browsing', description: 'Browse the web' },\n ];\n\n const toggleCapability = (cap: string) => {\n setFormData((prev) => ({\n ...prev,\n capabilities: prev.capabilities.includes(cap)\n ? prev.capabilities.filter((c) => c !== cap)\n : [...prev.capabilities, cap],\n }));\n };\n\n const handleSave = async () => {\n if (\n formData.llmModelId &&\n (catalogLoading ||\n catalogError ||\n !answerModels.some((model) => model.id === formData.llmModelId))\n ) {\n toast.error('Choose an active answer model from the available catalog.');\n return;\n }\n const slug = formData.slug || formData.name.toLowerCase().replace(/\\s+/g, '-');\n\n try {\n if (isEditing && agentId) {\n await updateAgent({\n agentId,\n input: {\n name: formData.name,\n slug,\n description: formData.description || undefined,\n systemPrompt: formData.systemPrompt,\n temperature: parseFloat(formData.temperature) || 0.7,\n maxTokens: parseInt(formData.maxTokens) || 2048,\n capabilities: toCapabilities(formData.capabilities),\n llmModelId: formData.llmModelId || undefined,\n type: toAgentType(formData.type),\n },\n });\n toast.success(`Agent \"${formData.name}\" updated successfully`);\n navigateTo(`agents/${agentId}`);\n } else {\n if (!workspaceId) return;\n const agent = await createAgent({\n workspaceId,\n name: formData.name,\n slug,\n type: toAgentType(formData.type),\n systemPrompt: formData.systemPrompt,\n temperature: parseFloat(formData.temperature) || 0.7,\n maxTokens: parseInt(formData.maxTokens) || 2048,\n capabilities: toCapabilities(formData.capabilities),\n llmModelId: formData.llmModelId || undefined,\n description: formData.description || undefined,\n });\n toast.success(`Agent \"${formData.name}\" created successfully`);\n if (agent?.id) navigateTo(`agents/${agent.id}`);\n }\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : 'Failed to save agent';\n toast.error(message);\n }\n };\n\n const isCreating = createAgentResult.loading;\n const isUpdating = updateAgentResult.loading;\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => navigateTo(agentId ? `agents/${agentId}` : 'agents')}\n >\n <ArrowLeft size={20} />\n </Button>\n <span>{isEditing ? 'Edit Agent' : 'Create New Agent'}</span>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => navigateTo(agentId ? `agents/${agentId}` : 'agents')}\n >\n Cancel\n </Button>\n <Button\n leftIcon={<Save size={16} />}\n onClick={handleSave}\n isLoading={isCreating || isUpdating}\n disabled={!formData.name || !formData.systemPrompt}\n >\n {isEditing ? 'Save Changes' : 'Create Agent'}\n </Button>\n </div>\n }\n >\n <div className=\"max-w-4xl mx-auto\">\n <PagePurpose className=\"mb-6\" icon={<Sparkles size={18} />}>\n This guided builder walks you through everything an agent needs — its identity and system\n prompt, the model and parameters it runs on, and the tools and knowledge it can reach.\n Work through the steps, then create the agent and test it in chat. You can come back and\n edit any step later.\n </PagePurpose>\n\n {/* Steps */}\n <div className=\"flex items-center justify-between mb-8\">\n {steps.map((step) => (\n <button\n key={step.id}\n onClick={() => setActiveStep(step.id)}\n className={cn(\n 'flex items-center gap-2 px-4 py-2 rounded-lg transition-colors',\n activeStep === step.id\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-sunken text-text-secondary hover:bg-accent'\n )}\n >\n {step.icon}\n <span className=\"font-medium\">{step.label}</span>\n </button>\n ))}\n </div>\n\n {/* Step Content */}\n <div className=\"space-y-6\">\n {activeStep === 0 && (\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle>Basic Information</CardTitle>\n <CardDescription>Set up the agent's identity and purpose</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n {/* Avatar Selection */}\n <div>\n <label className=\"text-sm font-medium\">Avatar</label>\n <div className=\"flex gap-2 mt-2 flex-wrap\">\n {avatars.map((avatar) => (\n <button\n key={avatar}\n onClick={() => setFormData({ ...formData, avatar })}\n className={cn(\n 'text-3xl p-2 rounded-lg border-2 transition-colors',\n formData.avatar === avatar\n ? 'border-primary bg-action-primary-bg/10'\n : 'border-border-subtle hover:border-primary/50'\n )}\n >\n {avatar}\n </button>\n ))}\n </div>\n </div>\n\n <FormField label=\"Agent Name\" required>\n <Input\n placeholder=\"e.g., Customer Support Agent\"\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n />\n </FormField>\n\n <FormField label=\"Slug\" description=\"URL-friendly identifier\">\n <Input\n placeholder=\"customer-support-agent\"\n value={formData.slug}\n onChange={(e) => setFormData({ ...formData, slug: e.target.value })}\n />\n </FormField>\n\n <FormField label=\"Description\">\n <Textarea\n placeholder=\"Describe what this agent does...\"\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n rows={3}\n />\n </FormField>\n\n {/* Capabilities */}\n <div>\n <label className=\"text-sm font-medium mb-2 block\">Capabilities</label>\n <div className=\"grid grid-cols-2 md:grid-cols-3 gap-3\">\n {allCapabilities.map((cap) => (\n <label\n key={cap.key}\n className=\"flex items-start gap-3 p-3 border border-border-subtle rounded-lg cursor-pointer hover:bg-accent\"\n >\n <input\n type=\"checkbox\"\n className=\"h-4 w-4 rounded border-border-default mt-0.5\"\n checked={formData.capabilities.includes(cap.key)}\n onChange={() => toggleCapability(cap.key)}\n />\n <div>\n <p className=\"font-medium text-sm\">{cap.label}</p>\n <p className=\"text-xs text-text-secondary\">{cap.description}</p>\n </div>\n </label>\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n\n {activeStep === 1 && (\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle>Prompt Configuration</CardTitle>\n <CardDescription>Define how the agent communicates and behaves</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n <FormField\n label=\"System Prompt\"\n required\n description=\"The core instructions that define the agent's behavior\"\n >\n <Textarea\n placeholder=\"You are a helpful assistant...\"\n value={formData.systemPrompt}\n onChange={(e) => setFormData({ ...formData, systemPrompt: e.target.value })}\n rows={8}\n className=\"font-mono text-sm\"\n />\n </FormField>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Temperature\" description=\"Controls randomness (0-2)\">\n <Input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n max=\"2\"\n value={formData.temperature}\n onChange={(e) => setFormData({ ...formData, temperature: e.target.value })}\n />\n </FormField>\n <FormField label=\"Max Tokens\" description=\"Maximum response length\">\n <Input\n type=\"number\"\n step=\"256\"\n min=\"1\"\n value={formData.maxTokens}\n onChange={(e) => setFormData({ ...formData, maxTokens: e.target.value })}\n />\n </FormField>\n </div>\n </CardContent>\n </Card>\n )}\n\n {activeStep === 2 && (\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle>LLM Configuration</CardTitle>\n <CardDescription>Select the LLM model for this agent</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n <FormField label=\"LLM Model\" description=\"Select a model for this agent\">\n {catalogLoading && <p role=\"status\">Loading answer models…</p>}\n {catalogError && (\n <div role=\"alert\">\n <p>Could not load answer models.</p>\n <Button\n variant=\"secondary\"\n onClick={() => {\n void refetchModels();\n void refetchProviders();\n }}\n >\n Retry model catalog\n </Button>\n </div>\n )}\n <select\n aria-label=\"LLM Model\"\n disabled={catalogLoading || Boolean(catalogError)}\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.llmModelId}\n onChange={(e) => setFormData({ ...formData, llmModelId: e.target.value })}\n >\n <option value=\"\">Select a model...</option>\n {answerModels.map((model) => (\n <option key={model.id} value={model.id}>\n {model.name} ({model.modelId})\n </option>\n ))}\n </select>\n </FormField>\n\n <div className=\"p-4 bg-bg-sunken rounded-lg\">\n <h4 className=\"text-sm font-medium mb-2\">Available Providers</h4>\n <div className=\"grid grid-cols-2 gap-2\">\n {providers?.map((provider: { id: string; name: string; type: string }) => (\n <div key={provider.id} className=\"text-sm\">\n <span className=\"font-medium\">{provider.name}</span>\n <span className=\"text-text-secondary ml-2\">({provider.type})</span>\n </div>\n ))}\n {!catalogLoading && !catalogError && !providers?.length && (\n <p className=\"text-sm text-text-secondary\">No providers configured</p>\n )}\n </div>\n </div>\n\n {!catalogLoading && !catalogError && !answerModels.length && (\n <p className=\"text-sm text-text-secondary\">\n No models available. Configure a provider and add models in Settings.\n </p>\n )}\n </CardContent>\n </Card>\n )}\n\n {activeStep === 3 && (\n <div className=\"space-y-6\">\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench size={18} />\n Tools & Knowledge\n </CardTitle>\n <CardDescription>\n Configure tools and knowledge bases for this agent\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"text-center py-12 text-text-secondary\">\n <Wrench className=\"h-10 w-10 mx-auto mb-3 opacity-50\" />\n <p className=\"font-medium\">Tools & Knowledge coming soon</p>\n <p className=\"text-sm mt-2\">\n MCP tool connections and knowledge base bindings will be configurable here in\n a future update.\n </p>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Navigation */}\n <div className=\"flex justify-between pt-6\">\n <Button\n variant=\"outline\"\n onClick={() => setActiveStep(Math.max(0, activeStep - 1))}\n disabled={activeStep === 0}\n >\n Previous\n </Button>\n {activeStep < steps.length - 1 ? (\n <Button onClick={() => setActiveStep(activeStep + 1)}>Next</Button>\n ) : (\n <Button\n leftIcon={<Save size={16} />}\n onClick={handleSave}\n isLoading={isCreating || isUpdating}\n disabled={!formData.name || !formData.systemPrompt}\n >\n {isEditing ? 'Save Changes' : 'Create Agent'}\n </Button>\n )}\n </div>\n </div>\n </div>\n\n {/* Show bots dropdown if needed */}\n {bots && bots.length > 0 && null}\n </PageLayout>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const AgentDetailPage: FC;