@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,9 +1,9 @@
1
- import { buildMutationInput as e, fieldsOf as t } from "./internal/mutationInput.js";
2
- import { CreateChannelConnectorDocument as n, CreateChannelRouteDocument as r, DeleteChannelConnectorDocument as i, DeleteChannelRouteDocument as a, GetChannelConnectorDocument as o, ListChannelConnectorsDocument as s, ListChannelRoutesDocument as c, UpdateChannelConnectorDocument as l } from "../../generated/wspace-operations.js";
1
+ import { CreateChannelConnectorDocument as e, CreateChannelRouteDocument as t, DeleteChannelConnectorDocument as n, DeleteChannelRouteDocument as r, GetChannelConnectorDocument as i, ListChannelConnectorsDocument as a, ListChannelRoutesDocument as o, UpdateChannelConnectorDocument as s } from "../../generated/wspace-operations.js";
2
+ import { buildMutationInput as c, fieldsOf as l } from "./internal/mutationInput.js";
3
3
  import { useWorkspaceId as u, useWorkspaceMutation as d, useWorkspaceQuery as f } from "./internal/workspaceGateway.js";
4
4
  import { useCallback as p, useMemo as m } from "react";
5
- //#region src/botlit/hooks/useChannels.ts
6
- var h = 100, g = t({
5
+ // src/botlit/hooks/useChannels.ts
6
+ var h = 100, g = l({
7
7
  bucketId: !0,
8
8
  credentialsRefId: !0,
9
9
  defaultPolicyBindings: !0,
@@ -15,7 +15,7 @@ var h = 100, g = t({
15
15
  type: !0,
16
16
  visibility: !0,
17
17
  workspaceId: !0
18
- }), _ = t({
18
+ }), _ = l({
19
19
  bucketId: !0,
20
20
  credentialsRefId: !0,
21
21
  defaultPolicyBindings: !0,
@@ -25,7 +25,7 @@ var h = 100, g = t({
25
25
  status: !0,
26
26
  tags: !0,
27
27
  visibility: !0
28
- }), v = t({
28
+ }), v = l({
29
29
  appId: !0,
30
30
  connectorId: !0,
31
31
  formatPolicyId: !0,
@@ -35,7 +35,7 @@ var h = 100, g = t({
35
35
  routingOverrides: !0,
36
36
  workspaceId: !0
37
37
  });
38
- t({
38
+ l({
39
39
  appId: !0,
40
40
  formatPolicyId: !0,
41
41
  locationId: !0,
@@ -78,28 +78,28 @@ function O(e, t) {
78
78
  return typeof n == "string" ? n : void 0;
79
79
  }
80
80
  function k(e) {
81
- let t = u(), n = e?.search, r = e?.type?.[0], i = e?.status?.[0], a = e?.bucketId;
81
+ let t = u(), n = e?.search, r = e?.type?.[0], i = e?.status?.[0], o = e?.bucketId, s = m(() => ({
82
+ filters: {
83
+ workspaceId: t,
84
+ search: n || void 0,
85
+ type: r,
86
+ status: i,
87
+ bucketId: o
88
+ },
89
+ pagination: {
90
+ limit: h,
91
+ offset: 0
92
+ }
93
+ }), [
94
+ t,
95
+ n,
96
+ r,
97
+ i,
98
+ o
99
+ ]);
82
100
  return f({
83
- document: s,
84
- variables: m(() => ({
85
- filters: {
86
- workspaceId: t,
87
- search: n || void 0,
88
- type: r,
89
- status: i,
90
- bucketId: a
91
- },
92
- pagination: {
93
- limit: h,
94
- offset: 0
95
- }
96
- }), [
97
- t,
98
- n,
99
- r,
100
- i,
101
- a
102
- ]),
101
+ document: a,
102
+ variables: s,
103
103
  select: x,
104
104
  fallback: y,
105
105
  enabled: !!t,
@@ -107,9 +107,10 @@ function k(e) {
107
107
  });
108
108
  }
109
109
  function A(e) {
110
+ let t = m(() => ({ id: e ?? "" }), [e]);
110
111
  return f({
111
- document: o,
112
- variables: m(() => ({ id: e ?? "" }), [e]),
112
+ document: i,
113
+ variables: t,
113
114
  select: S,
114
115
  fallback: null,
115
116
  enabled: !!e,
@@ -117,23 +118,23 @@ function A(e) {
117
118
  });
118
119
  }
119
120
  function j() {
120
- let t = u();
121
+ let t = u(), n = p((e) => ({ input: c({
122
+ ...e,
123
+ workspaceId: t
124
+ }, g) }), [t]);
121
125
  return d({
122
- document: n,
123
- variables: p((n) => ({ input: e({
124
- ...n,
125
- workspaceId: t
126
- }, g) }), [t]),
126
+ document: e,
127
+ variables: n,
127
128
  select: (e) => e?.createChannelConnector,
128
129
  errorMessage: "Failed to create channel connector"
129
130
  });
130
131
  }
131
132
  function M() {
132
133
  return d({
133
- document: l,
134
- variables: ({ connectorId: t, input: n }) => ({
135
- id: t,
136
- input: e(n, _)
134
+ document: s,
135
+ variables: ({ connectorId: e, input: t }) => ({
136
+ id: e,
137
+ input: c(t, _)
137
138
  }),
138
139
  select: (e) => e?.updateChannelConnector,
139
140
  errorMessage: "Failed to update channel connector"
@@ -141,26 +142,26 @@ function M() {
141
142
  }
142
143
  function N() {
143
144
  return d({
144
- document: i,
145
+ document: n,
145
146
  variables: (e) => ({ id: e }),
146
147
  select: (e) => e?.deleteChannelConnector,
147
148
  errorMessage: "Failed to delete channel connector"
148
149
  });
149
150
  }
150
151
  function P(e) {
151
- let t = u();
152
+ let t = u(), n = m(() => ({
153
+ filters: {
154
+ workspaceId: t,
155
+ connectorId: e || void 0
156
+ },
157
+ pagination: {
158
+ limit: h,
159
+ offset: 0
160
+ }
161
+ }), [t, e]);
152
162
  return f({
153
- document: c,
154
- variables: m(() => ({
155
- filters: {
156
- workspaceId: t,
157
- connectorId: e || void 0
158
- },
159
- pagination: {
160
- limit: h,
161
- offset: 0
162
- }
163
- }), [t, e]),
163
+ document: o,
164
+ variables: n,
164
165
  select: C,
165
166
  fallback: b,
166
167
  enabled: !!t,
@@ -168,19 +169,19 @@ function P(e) {
168
169
  });
169
170
  }
170
171
  function F(e) {
171
- let t = u();
172
+ let t = u(), n = m(() => ({
173
+ filters: {
174
+ workspaceId: t,
175
+ appId: e
176
+ },
177
+ pagination: {
178
+ limit: h,
179
+ offset: 0
180
+ }
181
+ }), [t, e]);
172
182
  return f({
173
- document: c,
174
- variables: m(() => ({
175
- filters: {
176
- workspaceId: t,
177
- appId: e
178
- },
179
- pagination: {
180
- limit: h,
181
- offset: 0
182
- }
183
- }), [t, e]),
183
+ document: o,
184
+ variables: n,
184
185
  select: C,
185
186
  fallback: b,
186
187
  enabled: !!t && !!e,
@@ -188,26 +189,25 @@ function F(e) {
188
189
  });
189
190
  }
190
191
  function I() {
191
- let t = u();
192
+ let e = u(), n = p((t) => ({ input: c({
193
+ ...t,
194
+ workspaceId: e
195
+ }, v) }), [e]);
192
196
  return d({
193
- document: r,
194
- variables: p((n) => ({ input: e({
195
- ...n,
196
- workspaceId: t
197
- }, v) }), [t]),
197
+ document: t,
198
+ variables: n,
198
199
  select: (e) => e?.createChannelRoute,
199
200
  errorMessage: "Failed to create channel route"
200
201
  });
201
202
  }
202
203
  function L() {
203
204
  return d({
204
- document: a,
205
+ document: r,
205
206
  variables: (e) => ({ id: e }),
206
207
  select: (e) => e?.deleteChannelRoute,
207
208
  errorMessage: "Failed to delete channel route"
208
209
  });
209
210
  }
210
- //#endregion
211
211
  export { w as WIDGET_METADATA_KEY, E as readWidgetConfig, O as routeMetadataString, F as useBotChannelRoutes, A as useChannelConnector, k as useChannelConnectors, P as useChannelRoutes, j as useCreateChannelConnector, I as useCreateChannelRoute, N as useDeleteChannelConnector, L as useDeleteChannelRoute, M as useUpdateChannelConnector };
212
212
 
213
213
  //# sourceMappingURL=useChannels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useChannels.js","names":[],"sources":["../../../src/botlit/hooks/useChannels.ts"],"sourcesContent":["/**\n * Channels Hooks\n * @module botlit/hooks\n *\n * Backed by the live `listChannelConnectors` / `listChannelRoutes` operations\n * (and their get/create/update/delete counterparts) on wspace-botlit-svc.\n *\n * Connectors are the platform integrations (Slack, web widget, webhook…).\n * Routes bind a location on a connector to a bot app.\n */\n\nimport { useCallback, useMemo } from 'react';\nimport {\n CreateChannelConnectorDocument,\n CreateChannelRouteDocument,\n DeleteChannelConnectorDocument,\n DeleteChannelRouteDocument,\n GetChannelConnectorDocument,\n GetChannelRouteDocument,\n ListChannelConnectorsDocument,\n ListChannelRoutesDocument,\n UpdateChannelConnectorDocument,\n UpdateChannelRouteDocument,\n type CreateChannelConnectorMutation,\n type CreateChannelRouteMutation,\n type DeleteChannelConnectorMutation,\n type DeleteChannelRouteMutation,\n type GetChannelConnectorQuery,\n type GetChannelRouteQuery,\n type ListChannelConnectorsQuery,\n type ListChannelRoutesQuery,\n type UpdateChannelConnectorMutation,\n type UpdateChannelRouteMutation,\n} from '../../generated/wspace-operations';\nimport type {\n CreateChannelConnectorInput,\n CreateChannelRouteInput,\n UpdateChannelConnectorInput,\n UpdateChannelRouteInput,\n} from '../../generated/wspace-types';\nimport type { ChannelFilter } from '../types';\nimport { buildMutationInput, fieldsOf, type GraphQLInput } from './internal/mutationInput';\nimport {\n useWorkspaceId,\n useWorkspaceMutation,\n useWorkspaceQuery,\n type QueryResult,\n} from './internal/workspaceGateway';\n\nconst LIST_LIMIT = 100;\n\nexport interface ChannelConnectorRecord {\n id: string;\n name: string;\n type: string;\n status: string;\n visibility: string;\n description?: string | null;\n bucketId?: string | null;\n credentialsRefId?: string | null;\n defaultPolicyBindings?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n revision: number;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n createdById: string;\n updatedById: string;\n workspaceId: string;\n}\n\nexport interface ChannelRouteRecord {\n id: string;\n appId: string;\n connectorId: string;\n locationId: string;\n formatPolicyId?: string | null;\n policyBindings?: Record<string, unknown> | null;\n routingOverrides?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n revision: number;\n createdAt: string;\n updatedAt: string;\n workspaceId: string;\n}\n\n/** `CreateChannelConnectorInput` minus the `workspaceId` the hook supplies. */\nexport type CreateChannelConnectorVariables = Omit<\n GraphQLInput<CreateChannelConnectorInput>,\n 'workspaceId'\n>;\n\nexport interface UpdateChannelConnectorVariables {\n connectorId: string;\n input: GraphQLInput<UpdateChannelConnectorInput>;\n}\n\n/** `CreateChannelRouteInput` minus the `workspaceId` the hook supplies. */\nexport type CreateChannelRouteVariables = Omit<\n GraphQLInput<CreateChannelRouteInput>,\n 'workspaceId'\n>;\n\nexport interface UpdateChannelRouteVariables {\n routeId: string;\n input: GraphQLInput<UpdateChannelRouteInput>;\n}\n\nconst CREATE_CONNECTOR_FIELDS = fieldsOf<CreateChannelConnectorInput>({\n bucketId: true,\n credentialsRefId: true,\n defaultPolicyBindings: true,\n description: true,\n metadata: true,\n name: true,\n status: true,\n tags: true,\n type: true,\n visibility: true,\n workspaceId: true,\n});\n\nconst UPDATE_CONNECTOR_FIELDS = fieldsOf<UpdateChannelConnectorInput>({\n bucketId: true,\n credentialsRefId: true,\n defaultPolicyBindings: true,\n description: true,\n metadata: true,\n name: true,\n status: true,\n tags: true,\n visibility: true,\n});\n\nconst CREATE_ROUTE_FIELDS = fieldsOf<CreateChannelRouteInput>({\n appId: true,\n connectorId: true,\n formatPolicyId: true,\n locationId: true,\n metadata: true,\n policyBindings: true,\n routingOverrides: true,\n workspaceId: true,\n});\n\nconst UPDATE_ROUTE_FIELDS = fieldsOf<UpdateChannelRouteInput>({\n appId: true,\n formatPolicyId: true,\n locationId: true,\n metadata: true,\n policyBindings: true,\n routingOverrides: true,\n});\n\nconst NO_CONNECTORS: ChannelConnectorRecord[] = [];\nconst NO_ROUTES: ChannelRouteRecord[] = [];\n\nfunction selectConnectors(data: ListChannelConnectorsQuery | undefined): ChannelConnectorRecord[] {\n return data?.listChannelConnectors ?? NO_CONNECTORS;\n}\n\nfunction selectConnector(\n data: GetChannelConnectorQuery | undefined\n): ChannelConnectorRecord | null {\n return data?.getChannelConnector ?? null;\n}\n\nfunction selectRoutes(data: ListChannelRoutesQuery | undefined): ChannelRouteRecord[] {\n return data?.listChannelRoutes ?? NO_ROUTES;\n}\n\nfunction selectRoute(data: GetChannelRouteQuery | undefined): ChannelRouteRecord | null {\n return data?.getChannelRoute ?? null;\n}\n\n/**\n * Web-widget appearance settings.\n *\n * `ChannelConnector` has no widget column — the settings live under\n * `metadata.webWidget`, which is where the connector form writes them.\n */\nexport interface ChannelWidgetConfig {\n allowedOrigins: string[];\n primaryColor: string;\n fontFamily: string;\n starterPrompts: string[];\n}\n\nexport const WIDGET_METADATA_KEY = 'webWidget';\n\nconst DEFAULT_WIDGET_CONFIG: ChannelWidgetConfig = {\n allowedOrigins: [],\n primaryColor: '#3b82f6',\n fontFamily: 'Inter, sans-serif',\n starterPrompts: [],\n};\n\n/** Reads the widget settings back, or `undefined` when none were saved. */\nexport function readWidgetConfig(\n connector: Pick<ChannelConnectorRecord, 'metadata'>\n): ChannelWidgetConfig | undefined {\n const stored = connector.metadata?.[WIDGET_METADATA_KEY];\n if (typeof stored !== 'object' || stored === null || Array.isArray(stored)) return undefined;\n\n const source = stored as Record<string, unknown>;\n return {\n allowedOrigins: jsonStringList(source.allowedOrigins),\n primaryColor:\n typeof source.primaryColor === 'string'\n ? source.primaryColor\n : DEFAULT_WIDGET_CONFIG.primaryColor,\n fontFamily:\n typeof source.fontFamily === 'string' ? source.fontFamily : DEFAULT_WIDGET_CONFIG.fontFamily,\n starterPrompts: jsonStringList(source.starterPrompts),\n };\n}\n\nfunction jsonStringList(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((entry): entry is string => typeof entry === 'string')\n : [];\n}\n\n/** Reads a display label the UI stashed on the route's free-form metadata. */\nexport function routeMetadataString(\n route: Pick<ChannelRouteRecord, 'metadata'>,\n key: string\n): string | undefined {\n const value = route.metadata?.[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport const channelKeys = {\n all: ['channels'] as const,\n connectors: () => [...channelKeys.all, 'connectors'] as const,\n connectorList: (filter?: ChannelFilter) => [...channelKeys.connectors(), 'list', filter] as const,\n connectorDetail: (id: string) => [...channelKeys.connectors(), 'detail', id] as const,\n routes: () => [...channelKeys.all, 'routes'] as const,\n routeList: (connectorId?: string) => [...channelKeys.routes(), 'list', connectorId] as const,\n routeDetail: (id: string) => [...channelKeys.routes(), 'detail', id] as const,\n};\n\n// ============================================================================\n// Connectors\n// ============================================================================\n\nexport function useChannelConnectors(\n filter?: ChannelFilter\n): QueryResult<ChannelConnectorRecord[]> {\n const workspaceId = useWorkspaceId();\n const search = filter?.search;\n const type = filter?.type?.[0];\n const status = filter?.status?.[0];\n const bucketId = filter?.bucketId;\n\n const variables = useMemo(\n () => ({\n filters: {\n workspaceId,\n search: search || undefined,\n type,\n status,\n bucketId,\n },\n pagination: { limit: LIST_LIMIT, offset: 0 },\n }),\n [workspaceId, search, type, status, bucketId]\n );\n\n return useWorkspaceQuery<ListChannelConnectorsQuery, ChannelConnectorRecord[]>({\n document: ListChannelConnectorsDocument,\n variables,\n select: selectConnectors,\n fallback: NO_CONNECTORS,\n enabled: Boolean(workspaceId),\n errorMessage: 'Failed to load channel connectors',\n });\n}\n\nexport function useChannelConnector(\n connectorId: string | undefined\n): QueryResult<ChannelConnectorRecord | null> {\n const variables = useMemo(() => ({ id: connectorId ?? '' }), [connectorId]);\n\n return useWorkspaceQuery<GetChannelConnectorQuery, ChannelConnectorRecord | null>({\n document: GetChannelConnectorDocument,\n variables,\n select: selectConnector,\n fallback: null,\n enabled: Boolean(connectorId),\n errorMessage: 'Failed to load channel connector',\n });\n}\n\nexport function useCreateChannelConnector() {\n const workspaceId = useWorkspaceId();\n\n const variables = useCallback(\n (input: CreateChannelConnectorVariables) => ({\n input: buildMutationInput({ ...input, workspaceId }, CREATE_CONNECTOR_FIELDS),\n }),\n [workspaceId]\n );\n\n return useWorkspaceMutation<\n CreateChannelConnectorMutation,\n CreateChannelConnectorVariables,\n ChannelConnectorRecord\n >({\n document: CreateChannelConnectorDocument,\n variables,\n select: (data) => data?.createChannelConnector,\n errorMessage: 'Failed to create channel connector',\n });\n}\n\nexport function useUpdateChannelConnector() {\n return useWorkspaceMutation<\n UpdateChannelConnectorMutation,\n UpdateChannelConnectorVariables,\n ChannelConnectorRecord\n >({\n document: UpdateChannelConnectorDocument,\n variables: ({ connectorId, input }) => ({\n id: connectorId,\n input: buildMutationInput(input, UPDATE_CONNECTOR_FIELDS),\n }),\n select: (data) => data?.updateChannelConnector,\n errorMessage: 'Failed to update channel connector',\n });\n}\n\nexport function useDeleteChannelConnector() {\n return useWorkspaceMutation<DeleteChannelConnectorMutation, string, boolean>({\n document: DeleteChannelConnectorDocument,\n variables: (connectorId) => ({ id: connectorId }),\n select: (data) => data?.deleteChannelConnector,\n errorMessage: 'Failed to delete channel connector',\n });\n}\n\n// ============================================================================\n// Routes\n// ============================================================================\n\nexport function useChannelRoutes(connectorId?: string): QueryResult<ChannelRouteRecord[]> {\n const workspaceId = useWorkspaceId();\n\n const variables = useMemo(\n () => ({\n filters: { workspaceId, connectorId: connectorId || undefined },\n pagination: { limit: LIST_LIMIT, offset: 0 },\n }),\n [workspaceId, connectorId]\n );\n\n return useWorkspaceQuery<ListChannelRoutesQuery, ChannelRouteRecord[]>({\n document: ListChannelRoutesDocument,\n variables,\n select: selectRoutes,\n fallback: NO_ROUTES,\n enabled: Boolean(workspaceId),\n errorMessage: 'Failed to load channel routes',\n });\n}\n\n/** Routes bound to a specific bot app (Bot Detail → Channels tab). */\nexport function useBotChannelRoutes(botId: string | undefined): QueryResult<ChannelRouteRecord[]> {\n const workspaceId = useWorkspaceId();\n\n const variables = useMemo(\n () => ({\n filters: { workspaceId, appId: botId },\n pagination: { limit: LIST_LIMIT, offset: 0 },\n }),\n [workspaceId, botId]\n );\n\n return useWorkspaceQuery<ListChannelRoutesQuery, ChannelRouteRecord[]>({\n document: ListChannelRoutesDocument,\n variables,\n select: selectRoutes,\n fallback: NO_ROUTES,\n enabled: Boolean(workspaceId) && Boolean(botId),\n errorMessage: 'Failed to load channel routes for this bot',\n });\n}\n\nexport function useChannelRoute(\n routeId: string | undefined\n): QueryResult<ChannelRouteRecord | null> {\n const variables = useMemo(() => ({ id: routeId ?? '' }), [routeId]);\n\n return useWorkspaceQuery<GetChannelRouteQuery, ChannelRouteRecord | null>({\n document: GetChannelRouteDocument,\n variables,\n select: selectRoute,\n fallback: null,\n enabled: Boolean(routeId),\n errorMessage: 'Failed to load channel route',\n });\n}\n\nexport function useCreateChannelRoute() {\n const workspaceId = useWorkspaceId();\n\n const variables = useCallback(\n (input: CreateChannelRouteVariables) => ({\n input: buildMutationInput({ ...input, workspaceId }, CREATE_ROUTE_FIELDS),\n }),\n [workspaceId]\n );\n\n return useWorkspaceMutation<\n CreateChannelRouteMutation,\n CreateChannelRouteVariables,\n ChannelRouteRecord\n >({\n document: CreateChannelRouteDocument,\n variables,\n select: (data) => data?.createChannelRoute,\n errorMessage: 'Failed to create channel route',\n });\n}\n\nexport function useUpdateChannelRoute() {\n return useWorkspaceMutation<\n UpdateChannelRouteMutation,\n UpdateChannelRouteVariables,\n ChannelRouteRecord\n >({\n document: UpdateChannelRouteDocument,\n variables: ({ routeId, input }) => ({\n id: routeId,\n input: buildMutationInput(input, UPDATE_ROUTE_FIELDS),\n }),\n select: (data) => data?.updateChannelRoute,\n errorMessage: 'Failed to update channel route',\n });\n}\n\nexport function useDeleteChannelRoute() {\n return useWorkspaceMutation<DeleteChannelRouteMutation, string, boolean>({\n document: DeleteChannelRouteDocument,\n variables: (routeId) => ({ id: routeId }),\n select: (data) => data?.deleteChannelRoute,\n errorMessage: 'Failed to delete channel route',\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useChannels.js","names":["LIST_LIMIT","CREATE_CONNECTOR_FIELDS","fieldsOf","UPDATE_CONNECTOR_FIELDS","CREATE_ROUTE_FIELDS","NO_CONNECTORS","NO_ROUTES","selectConnectors","data","selectConnector","selectRoutes","WIDGET_METADATA_KEY","DEFAULT_WIDGET_CONFIG","readWidgetConfig","stored","connector","source","jsonStringList","value","entry","routeMetadataString","route","key","useChannelConnectors","workspaceId","useWorkspaceId","search","filter","type","status","bucketId","variables","useMemo","useWorkspaceQuery","ListChannelConnectorsDocument","useChannelConnector","connectorId","GetChannelConnectorDocument","useCreateChannelConnector","useCallback","buildMutationInput","input","useWorkspaceMutation","CreateChannelConnectorDocument","useUpdateChannelConnector","UpdateChannelConnectorDocument","useDeleteChannelConnector","DeleteChannelConnectorDocument","useChannelRoutes","ListChannelRoutesDocument","useBotChannelRoutes","botId","useCreateChannelRoute","CreateChannelRouteDocument","useDeleteChannelRoute","DeleteChannelRouteDocument","routeId"],"sources":["../../../src/botlit/hooks/useChannels.ts"],"sourcesContent":["/**\n * Channels Hooks\n * @module botlit/hooks\n *\n * Backed by the live `listChannelConnectors` / `listChannelRoutes` operations\n * (and their get/create/update/delete counterparts) on wspace-botlit-svc.\n *\n * Connectors are the platform integrations (Slack, web widget, webhook…).\n * Routes bind a location on a connector to a bot app.\n */\n\nimport { useCallback, useMemo } from 'react';\nimport {\n CreateChannelConnectorDocument,\n CreateChannelRouteDocument,\n DeleteChannelConnectorDocument,\n DeleteChannelRouteDocument,\n GetChannelConnectorDocument,\n GetChannelRouteDocument,\n ListChannelConnectorsDocument,\n ListChannelRoutesDocument,\n UpdateChannelConnectorDocument,\n UpdateChannelRouteDocument,\n type CreateChannelConnectorMutation,\n type CreateChannelRouteMutation,\n type DeleteChannelConnectorMutation,\n type DeleteChannelRouteMutation,\n type GetChannelConnectorQuery,\n type GetChannelRouteQuery,\n type ListChannelConnectorsQuery,\n type ListChannelRoutesQuery,\n type UpdateChannelConnectorMutation,\n type UpdateChannelRouteMutation,\n} from '../../generated/wspace-operations';\nimport type {\n CreateChannelConnectorInput,\n CreateChannelRouteInput,\n UpdateChannelConnectorInput,\n UpdateChannelRouteInput,\n} from '../../generated/wspace-types';\nimport type { ChannelFilter } from '../types';\nimport { buildMutationInput, fieldsOf, type GraphQLInput } from './internal/mutationInput';\nimport {\n useWorkspaceId,\n useWorkspaceMutation,\n useWorkspaceQuery,\n type QueryResult,\n} from './internal/workspaceGateway';\n\nconst LIST_LIMIT = 100;\n\nexport interface ChannelConnectorRecord {\n id: string;\n name: string;\n type: string;\n status: string;\n visibility: string;\n description?: string | null;\n bucketId?: string | null;\n credentialsRefId?: string | null;\n defaultPolicyBindings?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n revision: number;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n createdById: string;\n updatedById: string;\n workspaceId: string;\n}\n\nexport interface ChannelRouteRecord {\n id: string;\n appId: string;\n connectorId: string;\n locationId: string;\n formatPolicyId?: string | null;\n policyBindings?: Record<string, unknown> | null;\n routingOverrides?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n revision: number;\n createdAt: string;\n updatedAt: string;\n workspaceId: string;\n}\n\n/** `CreateChannelConnectorInput` minus the `workspaceId` the hook supplies. */\nexport type CreateChannelConnectorVariables = Omit<\n GraphQLInput<CreateChannelConnectorInput>,\n 'workspaceId'\n>;\n\nexport interface UpdateChannelConnectorVariables {\n connectorId: string;\n input: GraphQLInput<UpdateChannelConnectorInput>;\n}\n\n/** `CreateChannelRouteInput` minus the `workspaceId` the hook supplies. */\nexport type CreateChannelRouteVariables = Omit<\n GraphQLInput<CreateChannelRouteInput>,\n 'workspaceId'\n>;\n\nexport interface UpdateChannelRouteVariables {\n routeId: string;\n input: GraphQLInput<UpdateChannelRouteInput>;\n}\n\nconst CREATE_CONNECTOR_FIELDS = fieldsOf<CreateChannelConnectorInput>({\n bucketId: true,\n credentialsRefId: true,\n defaultPolicyBindings: true,\n description: true,\n metadata: true,\n name: true,\n status: true,\n tags: true,\n type: true,\n visibility: true,\n workspaceId: true,\n});\n\nconst UPDATE_CONNECTOR_FIELDS = fieldsOf<UpdateChannelConnectorInput>({\n bucketId: true,\n credentialsRefId: true,\n defaultPolicyBindings: true,\n description: true,\n metadata: true,\n name: true,\n status: true,\n tags: true,\n visibility: true,\n});\n\nconst CREATE_ROUTE_FIELDS = fieldsOf<CreateChannelRouteInput>({\n appId: true,\n connectorId: true,\n formatPolicyId: true,\n locationId: true,\n metadata: true,\n policyBindings: true,\n routingOverrides: true,\n workspaceId: true,\n});\n\nconst UPDATE_ROUTE_FIELDS = fieldsOf<UpdateChannelRouteInput>({\n appId: true,\n formatPolicyId: true,\n locationId: true,\n metadata: true,\n policyBindings: true,\n routingOverrides: true,\n});\n\nconst NO_CONNECTORS: ChannelConnectorRecord[] = [];\nconst NO_ROUTES: ChannelRouteRecord[] = [];\n\nfunction selectConnectors(data: ListChannelConnectorsQuery | undefined): ChannelConnectorRecord[] {\n return data?.listChannelConnectors ?? NO_CONNECTORS;\n}\n\nfunction selectConnector(\n data: GetChannelConnectorQuery | undefined\n): ChannelConnectorRecord | null {\n return data?.getChannelConnector ?? null;\n}\n\nfunction selectRoutes(data: ListChannelRoutesQuery | undefined): ChannelRouteRecord[] {\n return data?.listChannelRoutes ?? NO_ROUTES;\n}\n\nfunction selectRoute(data: GetChannelRouteQuery | undefined): ChannelRouteRecord | null {\n return data?.getChannelRoute ?? null;\n}\n\n/**\n * Web-widget appearance settings.\n *\n * `ChannelConnector` has no widget column — the settings live under\n * `metadata.webWidget`, which is where the connector form writes them.\n */\nexport interface ChannelWidgetConfig {\n allowedOrigins: string[];\n primaryColor: string;\n fontFamily: string;\n starterPrompts: string[];\n}\n\nexport const WIDGET_METADATA_KEY = 'webWidget';\n\nconst DEFAULT_WIDGET_CONFIG: ChannelWidgetConfig = {\n allowedOrigins: [],\n primaryColor: '#3b82f6',\n fontFamily: 'Inter, sans-serif',\n starterPrompts: [],\n};\n\n/** Reads the widget settings back, or `undefined` when none were saved. */\nexport function readWidgetConfig(\n connector: Pick<ChannelConnectorRecord, 'metadata'>\n): ChannelWidgetConfig | undefined {\n const stored = connector.metadata?.[WIDGET_METADATA_KEY];\n if (typeof stored !== 'object' || stored === null || Array.isArray(stored)) return undefined;\n\n const source = stored as Record<string, unknown>;\n return {\n allowedOrigins: jsonStringList(source.allowedOrigins),\n primaryColor:\n typeof source.primaryColor === 'string'\n ? source.primaryColor\n : DEFAULT_WIDGET_CONFIG.primaryColor,\n fontFamily:\n typeof source.fontFamily === 'string' ? source.fontFamily : DEFAULT_WIDGET_CONFIG.fontFamily,\n starterPrompts: jsonStringList(source.starterPrompts),\n };\n}\n\nfunction jsonStringList(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((entry): entry is string => typeof entry === 'string')\n : [];\n}\n\n/** Reads a display label the UI stashed on the route's free-form metadata. */\nexport function routeMetadataString(\n route: Pick<ChannelRouteRecord, 'metadata'>,\n key: string\n): string | undefined {\n const value = route.metadata?.[key];\n return typeof value === 'string' ? value : undefined;\n}\n\nexport const channelKeys = {\n all: ['channels'] as const,\n connectors: () => [...channelKeys.all, 'connectors'] as const,\n connectorList: (filter?: ChannelFilter) => [...channelKeys.connectors(), 'list', filter] as const,\n connectorDetail: (id: string) => [...channelKeys.connectors(), 'detail', id] as const,\n routes: () => [...channelKeys.all, 'routes'] as const,\n routeList: (connectorId?: string) => [...channelKeys.routes(), 'list', connectorId] as const,\n routeDetail: (id: string) => [...channelKeys.routes(), 'detail', id] as const,\n};\n\n// ============================================================================\n// Connectors\n// ============================================================================\n\nexport function useChannelConnectors(\n filter?: ChannelFilter\n): QueryResult<ChannelConnectorRecord[]> {\n const workspaceId = useWorkspaceId();\n const search = filter?.search;\n const type = filter?.type?.[0];\n const status = filter?.status?.[0];\n const bucketId = filter?.bucketId;\n\n const variables = useMemo(\n () => ({\n filters: {\n workspaceId,\n search: search || undefined,\n type,\n status,\n bucketId,\n },\n pagination: { limit: LIST_LIMIT, offset: 0 },\n }),\n [workspaceId, search, type, status, bucketId]\n );\n\n return useWorkspaceQuery<ListChannelConnectorsQuery, ChannelConnectorRecord[]>({\n document: ListChannelConnectorsDocument,\n variables,\n select: selectConnectors,\n fallback: NO_CONNECTORS,\n enabled: Boolean(workspaceId),\n errorMessage: 'Failed to load channel connectors',\n });\n}\n\nexport function useChannelConnector(\n connectorId: string | undefined\n): QueryResult<ChannelConnectorRecord | null> {\n const variables = useMemo(() => ({ id: connectorId ?? '' }), [connectorId]);\n\n return useWorkspaceQuery<GetChannelConnectorQuery, ChannelConnectorRecord | null>({\n document: GetChannelConnectorDocument,\n variables,\n select: selectConnector,\n fallback: null,\n enabled: Boolean(connectorId),\n errorMessage: 'Failed to load channel connector',\n });\n}\n\nexport function useCreateChannelConnector() {\n const workspaceId = useWorkspaceId();\n\n const variables = useCallback(\n (input: CreateChannelConnectorVariables) => ({\n input: buildMutationInput({ ...input, workspaceId }, CREATE_CONNECTOR_FIELDS),\n }),\n [workspaceId]\n );\n\n return useWorkspaceMutation<\n CreateChannelConnectorMutation,\n CreateChannelConnectorVariables,\n ChannelConnectorRecord\n >({\n document: CreateChannelConnectorDocument,\n variables,\n select: (data) => data?.createChannelConnector,\n errorMessage: 'Failed to create channel connector',\n });\n}\n\nexport function useUpdateChannelConnector() {\n return useWorkspaceMutation<\n UpdateChannelConnectorMutation,\n UpdateChannelConnectorVariables,\n ChannelConnectorRecord\n >({\n document: UpdateChannelConnectorDocument,\n variables: ({ connectorId, input }) => ({\n id: connectorId,\n input: buildMutationInput(input, UPDATE_CONNECTOR_FIELDS),\n }),\n select: (data) => data?.updateChannelConnector,\n errorMessage: 'Failed to update channel connector',\n });\n}\n\nexport function useDeleteChannelConnector() {\n return useWorkspaceMutation<DeleteChannelConnectorMutation, string, boolean>({\n document: DeleteChannelConnectorDocument,\n variables: (connectorId) => ({ id: connectorId }),\n select: (data) => data?.deleteChannelConnector,\n errorMessage: 'Failed to delete channel connector',\n });\n}\n\n// ============================================================================\n// Routes\n// ============================================================================\n\nexport function useChannelRoutes(connectorId?: string): QueryResult<ChannelRouteRecord[]> {\n const workspaceId = useWorkspaceId();\n\n const variables = useMemo(\n () => ({\n filters: { workspaceId, connectorId: connectorId || undefined },\n pagination: { limit: LIST_LIMIT, offset: 0 },\n }),\n [workspaceId, connectorId]\n );\n\n return useWorkspaceQuery<ListChannelRoutesQuery, ChannelRouteRecord[]>({\n document: ListChannelRoutesDocument,\n variables,\n select: selectRoutes,\n fallback: NO_ROUTES,\n enabled: Boolean(workspaceId),\n errorMessage: 'Failed to load channel routes',\n });\n}\n\n/** Routes bound to a specific bot app (Bot Detail → Channels tab). */\nexport function useBotChannelRoutes(botId: string | undefined): QueryResult<ChannelRouteRecord[]> {\n const workspaceId = useWorkspaceId();\n\n const variables = useMemo(\n () => ({\n filters: { workspaceId, appId: botId },\n pagination: { limit: LIST_LIMIT, offset: 0 },\n }),\n [workspaceId, botId]\n );\n\n return useWorkspaceQuery<ListChannelRoutesQuery, ChannelRouteRecord[]>({\n document: ListChannelRoutesDocument,\n variables,\n select: selectRoutes,\n fallback: NO_ROUTES,\n enabled: Boolean(workspaceId) && Boolean(botId),\n errorMessage: 'Failed to load channel routes for this bot',\n });\n}\n\nexport function useChannelRoute(\n routeId: string | undefined\n): QueryResult<ChannelRouteRecord | null> {\n const variables = useMemo(() => ({ id: routeId ?? '' }), [routeId]);\n\n return useWorkspaceQuery<GetChannelRouteQuery, ChannelRouteRecord | null>({\n document: GetChannelRouteDocument,\n variables,\n select: selectRoute,\n fallback: null,\n enabled: Boolean(routeId),\n errorMessage: 'Failed to load channel route',\n });\n}\n\nexport function useCreateChannelRoute() {\n const workspaceId = useWorkspaceId();\n\n const variables = useCallback(\n (input: CreateChannelRouteVariables) => ({\n input: buildMutationInput({ ...input, workspaceId }, CREATE_ROUTE_FIELDS),\n }),\n [workspaceId]\n );\n\n return useWorkspaceMutation<\n CreateChannelRouteMutation,\n CreateChannelRouteVariables,\n ChannelRouteRecord\n >({\n document: CreateChannelRouteDocument,\n variables,\n select: (data) => data?.createChannelRoute,\n errorMessage: 'Failed to create channel route',\n });\n}\n\nexport function useUpdateChannelRoute() {\n return useWorkspaceMutation<\n UpdateChannelRouteMutation,\n UpdateChannelRouteVariables,\n ChannelRouteRecord\n >({\n document: UpdateChannelRouteDocument,\n variables: ({ routeId, input }) => ({\n id: routeId,\n input: buildMutationInput(input, UPDATE_ROUTE_FIELDS),\n }),\n select: (data) => data?.updateChannelRoute,\n errorMessage: 'Failed to update channel route',\n });\n}\n\nexport function useDeleteChannelRoute() {\n return useWorkspaceMutation<DeleteChannelRouteMutation, string, boolean>({\n document: DeleteChannelRouteDocument,\n variables: (routeId) => ({ id: routeId }),\n select: (data) => data?.deleteChannelRoute,\n errorMessage: 'Failed to delete channel route',\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { CreateExecutionInput, ExecutionStatus } from '../../generated/wspace-types';
2
+ import { GraphQLInput } from './internal/mutationInput';
3
+ import { QueryResult } from './internal/workspaceGateway';
4
+ export interface ExecutionRecord {
5
+ id: string;
6
+ status: string;
7
+ type: string;
8
+ input: string;
9
+ output?: string | null;
10
+ agentId?: string | null;
11
+ appId?: string | null;
12
+ conversationId?: string | null;
13
+ cost?: number | null;
14
+ duration?: number | null;
15
+ tokensUsed?: number | null;
16
+ errorCode?: string | null;
17
+ errorMessage?: string | null;
18
+ errorDetails?: Record<string, unknown> | null;
19
+ metadata?: Record<string, unknown> | null;
20
+ completedAt?: string | null;
21
+ createdAt: string;
22
+ workspaceId: string;
23
+ }
24
+ export interface ExecutionMetricsRecord {
25
+ executionId: string;
26
+ cost: number;
27
+ inputTokens: number;
28
+ outputTokens: number;
29
+ totalTokens: number;
30
+ ragChunks: number;
31
+ toolCalls: number;
32
+ }
33
+ export interface ExecutionsFilter {
34
+ search?: string;
35
+ status?: string[];
36
+ agentId?: string;
37
+ appId?: string;
38
+ conversationId?: string;
39
+ type?: string;
40
+ }
41
+ export interface ExecutionMetricsFilter {
42
+ agentId?: string;
43
+ appId?: string;
44
+ startDate?: string;
45
+ endDate?: string;
46
+ }
47
+ export interface CreateExecutionVariables {
48
+ input: GraphQLInput<CreateExecutionInput>;
49
+ }
50
+ export interface UpdateExecutionStatusVariables {
51
+ id: string;
52
+ status: ExecutionStatus;
53
+ output?: string;
54
+ error?: Record<string, unknown>;
55
+ }
56
+ export declare const executionKeys: {
57
+ all: readonly ["executions"];
58
+ lists: () => readonly ["executions", "list"];
59
+ list: (filter?: ExecutionsFilter) => readonly ["executions", "list", ExecutionsFilter | undefined];
60
+ details: () => readonly ["executions", "detail"];
61
+ detail: (id: string) => readonly ["executions", "detail", string];
62
+ metrics: () => readonly ["executions", "metrics"];
63
+ };
64
+ export declare function useExecutions(filter?: ExecutionsFilter): QueryResult<ExecutionRecord[]>;
65
+ export declare function useExecution(executionId: string | undefined): QueryResult<ExecutionRecord | null>;
66
+ /**
67
+ * Token/cost metrics for the workspace, optionally narrowed to an agent, app or
68
+ * date window. Returns `null` when the service has nothing recorded yet.
69
+ */
70
+ export declare function useExecutionMetrics(filter?: ExecutionMetricsFilter): QueryResult<ExecutionMetricsRecord | null>;
71
+ export interface ExecutionRollup {
72
+ total: number;
73
+ succeeded: number;
74
+ failed: number;
75
+ successRate: number;
76
+ avgDurationMs: number;
77
+ totalCost: number;
78
+ totalTokens: number;
79
+ }
80
+ /**
81
+ * Rolls a list of executions up into the headline numbers shown above the table.
82
+ * Derived purely from the rows that were actually loaded — no server aggregate
83
+ * exists for this, so callers must label it as such.
84
+ */
85
+ export declare function summariseExecutions(executions: readonly ExecutionRecord[]): ExecutionRollup;
86
+ export declare function useCreateExecution(): readonly [(input: CreateExecutionVariables) => Promise<ExecutionRecord>, import('./internal/workspaceGateway').MutationState<ExecutionRecord>];
87
+ export declare function useUpdateExecutionStatus(): readonly [(input: UpdateExecutionStatusVariables) => Promise<ExecutionRecord>, import('./internal/workspaceGateway').MutationState<ExecutionRecord>];
@@ -1,9 +1,9 @@
1
- import { buildMutationInput as e, fieldsOf as t } from "./internal/mutationInput.js";
2
- import { CreateExecutionDocument as n, GetExecutionDocument as r, ListExecutionsDocument as i } from "../../generated/wspace-operations.js";
1
+ import { CreateExecutionDocument as e, GetExecutionDocument as t, ListExecutionsDocument as n } from "../../generated/wspace-operations.js";
2
+ import { buildMutationInput as r, fieldsOf as i } from "./internal/mutationInput.js";
3
3
  import { useWorkspaceId as a, useWorkspaceMutation as o, useWorkspaceQuery as s } from "./internal/workspaceGateway.js";
4
4
  import { useCallback as c, useMemo as l } from "react";
5
- //#region src/botlit/hooks/useExecutions.ts
6
- var u = 100, d = t({
5
+ // src/botlit/hooks/useExecutions.ts
6
+ var u = 100, d = i({
7
7
  agentId: !0,
8
8
  appId: !0,
9
9
  conversationId: !0,
@@ -11,48 +11,49 @@ var u = 100, d = t({
11
11
  metadata: !0,
12
12
  type: !0,
13
13
  workspaceId: !0
14
- }), f = new Set(["COMPLETED"]), p = [];
14
+ }), f = /* @__PURE__ */ new Set(["COMPLETED"]), p = [];
15
15
  function m(e, t) {
16
16
  return e.id.toLowerCase().includes(t) || (e.agentId ?? "").toLowerCase().includes(t) || (e.appId ?? "").toLowerCase().includes(t) || e.input.toLowerCase().includes(t);
17
17
  }
18
18
  function h(e) {
19
- let t = a(), n = e?.search?.trim().toLowerCase() ?? "", r = e?.status, o = r?.length === 1 ? r[0] : void 0, d = r?.join(",") ?? "", { agentId: f, appId: h, conversationId: g, type: _ } = e ?? {};
19
+ let t = a(), r = e?.search?.trim().toLowerCase() ?? "", i = e?.status, o = i?.length === 1 ? i[0] : void 0, d = i?.join(",") ?? "", { agentId: f, appId: h, conversationId: g, type: _ } = e ?? {}, v = l(() => ({
20
+ filters: {
21
+ workspaceId: t,
22
+ status: o,
23
+ agentId: f,
24
+ appId: h,
25
+ conversationId: g,
26
+ type: _
27
+ },
28
+ pagination: {
29
+ limit: u,
30
+ offset: 0
31
+ }
32
+ }), [
33
+ t,
34
+ o,
35
+ f,
36
+ h,
37
+ g,
38
+ _
39
+ ]), y = c((e) => {
40
+ let t = e?.listExecutions ?? p, n = d ? new Set(d.split(",")) : void 0, i = n && n.size > 1 ? t.filter((e) => n.has(e.status)) : t;
41
+ return r ? i.filter((e) => m(e, r)) : i;
42
+ }, [r, d]);
20
43
  return s({
21
- document: i,
22
- variables: l(() => ({
23
- filters: {
24
- workspaceId: t,
25
- status: o,
26
- agentId: f,
27
- appId: h,
28
- conversationId: g,
29
- type: _
30
- },
31
- pagination: {
32
- limit: u,
33
- offset: 0
34
- }
35
- }), [
36
- t,
37
- o,
38
- f,
39
- h,
40
- g,
41
- _
42
- ]),
43
- select: c((e) => {
44
- let t = e?.listExecutions ?? p, r = d ? new Set(d.split(",")) : void 0, i = r && r.size > 1 ? t.filter((e) => r.has(e.status)) : t;
45
- return n ? i.filter((e) => m(e, n)) : i;
46
- }, [n, d]),
44
+ document: n,
45
+ variables: v,
46
+ select: y,
47
47
  fallback: p,
48
48
  enabled: !!t,
49
49
  errorMessage: "Failed to load executions"
50
50
  });
51
51
  }
52
52
  function g(e) {
53
+ let n = l(() => ({ id: e ?? "" }), [e]);
53
54
  return s({
54
- document: r,
55
- variables: l(() => ({ id: e ?? "" }), [e]),
55
+ document: t,
56
+ variables: n,
56
57
  select: (e) => e?.getExecution ?? null,
57
58
  fallback: null,
58
59
  enabled: !!e,
@@ -74,13 +75,12 @@ function _(e) {
74
75
  }
75
76
  function v() {
76
77
  return o({
77
- document: n,
78
- variables: ({ input: t }) => ({ input: e(t, d) }),
78
+ document: e,
79
+ variables: ({ input: e }) => ({ input: r(e, d) }),
79
80
  select: (e) => e?.createExecution,
80
81
  errorMessage: "Failed to start execution"
81
82
  });
82
83
  }
83
- //#endregion
84
84
  export { _ as summariseExecutions, v as useCreateExecution, g as useExecution, h as useExecutions };
85
85
 
86
86
  //# sourceMappingURL=useExecutions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useExecutions.js","names":[],"sources":["../../../src/botlit/hooks/useExecutions.ts"],"sourcesContent":["/**\n * Executions Hooks\n * @module botlit/hooks\n *\n * Backed by the live `listExecutions` / `getExecution` / `getExecutionMetrics`\n * operations plus the `createExecution` / `updateExecutionStatus` mutations on\n * wspace-botlit-svc.\n *\n * Note on filtering: `ExecutionFilterInput` accepts a SINGLE status and has no\n * free-text field, so multi-status selections and search are narrowed on the\n * client over the fetched page.\n */\n\nimport { useCallback, useMemo } from 'react';\nimport {\n CreateExecutionDocument,\n GetExecutionDocument,\n GetExecutionMetricsDocument,\n ListExecutionsDocument,\n UpdateExecutionStatusDocument,\n type CreateExecutionMutation,\n type GetExecutionMetricsQuery,\n type GetExecutionQuery,\n type ListExecutionsQuery,\n type UpdateExecutionStatusMutation,\n} from '../../generated/wspace-operations';\nimport type { CreateExecutionInput, ExecutionStatus } from '../../generated/wspace-types';\nimport { buildMutationInput, fieldsOf, type GraphQLInput } from './internal/mutationInput';\nimport {\n useWorkspaceId,\n useWorkspaceMutation,\n useWorkspaceQuery,\n type QueryResult,\n} from './internal/workspaceGateway';\n\nconst LIST_LIMIT = 100;\n\nexport interface ExecutionRecord {\n id: string;\n status: string;\n type: string;\n input: string;\n output?: string | null;\n agentId?: string | null;\n appId?: string | null;\n conversationId?: string | null;\n cost?: number | null;\n duration?: number | null;\n tokensUsed?: number | null;\n errorCode?: string | null;\n errorMessage?: string | null;\n errorDetails?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n completedAt?: string | null;\n createdAt: string;\n workspaceId: string;\n}\n\nexport interface ExecutionMetricsRecord {\n executionId: string;\n cost: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n ragChunks: number;\n toolCalls: number;\n}\n\nexport interface ExecutionsFilter {\n search?: string;\n status?: string[];\n agentId?: string;\n appId?: string;\n conversationId?: string;\n type?: string;\n}\n\nexport interface ExecutionMetricsFilter {\n agentId?: string;\n appId?: string;\n startDate?: string;\n endDate?: string;\n}\n\nexport interface CreateExecutionVariables {\n input: GraphQLInput<CreateExecutionInput>;\n}\n\nconst CREATE_EXECUTION_FIELDS = fieldsOf<CreateExecutionInput>({\n agentId: true,\n appId: true,\n conversationId: true,\n input: true,\n metadata: true,\n type: true,\n workspaceId: true,\n});\n\nexport interface UpdateExecutionStatusVariables {\n id: string;\n status: ExecutionStatus;\n output?: string;\n error?: Record<string, unknown>;\n}\n\n/** Terminal statuses that count as a successful run. */\nconst SUCCESS_STATUSES = new Set(['COMPLETED']);\n\nconst NO_EXECUTIONS: ExecutionRecord[] = [];\n\nexport const executionKeys = {\n all: ['executions'] as const,\n lists: () => [...executionKeys.all, 'list'] as const,\n list: (filter?: ExecutionsFilter) => [...executionKeys.lists(), filter] as const,\n details: () => [...executionKeys.all, 'detail'] as const,\n detail: (id: string) => [...executionKeys.details(), id] as const,\n metrics: () => [...executionKeys.all, 'metrics'] as const,\n};\n\nfunction matchesSearch(execution: ExecutionRecord, needle: string): boolean {\n return (\n execution.id.toLowerCase().includes(needle) ||\n (execution.agentId ?? '').toLowerCase().includes(needle) ||\n (execution.appId ?? '').toLowerCase().includes(needle) ||\n execution.input.toLowerCase().includes(needle)\n );\n}\n\nexport function useExecutions(filter?: ExecutionsFilter): QueryResult<ExecutionRecord[]> {\n const workspaceId = useWorkspaceId();\n const search = filter?.search?.trim().toLowerCase() ?? '';\n const statuses = filter?.status;\n const singleStatus = statuses?.length === 1 ? statuses[0] : undefined;\n const statusKey = statuses?.join(',') ?? '';\n const { agentId, appId, conversationId, type } = filter ?? {};\n\n const variables = useMemo(\n () => ({\n filters: {\n workspaceId,\n status: singleStatus,\n agentId,\n appId,\n conversationId,\n type,\n },\n pagination: { limit: LIST_LIMIT, offset: 0 },\n }),\n [workspaceId, singleStatus, agentId, appId, conversationId, type]\n );\n\n const select = useCallback(\n (data: ListExecutionsQuery | undefined): ExecutionRecord[] => {\n const rows: ExecutionRecord[] = data?.listExecutions ?? NO_EXECUTIONS;\n const wanted = statusKey ? new Set(statusKey.split(',')) : undefined;\n const narrowed =\n // A single status is already applied server-side.\n wanted && wanted.size > 1 ? rows.filter((row) => wanted.has(row.status)) : rows;\n return search ? narrowed.filter((row) => matchesSearch(row, search)) : narrowed;\n },\n [search, statusKey]\n );\n\n return useWorkspaceQuery<ListExecutionsQuery, ExecutionRecord[]>({\n document: ListExecutionsDocument,\n variables,\n select,\n fallback: NO_EXECUTIONS,\n enabled: Boolean(workspaceId),\n errorMessage: 'Failed to load executions',\n });\n}\n\nexport function useExecution(executionId: string | undefined): QueryResult<ExecutionRecord | null> {\n const variables = useMemo(() => ({ id: executionId ?? '' }), [executionId]);\n\n return useWorkspaceQuery<GetExecutionQuery, ExecutionRecord | null>({\n document: GetExecutionDocument,\n variables,\n select: (data) => data?.getExecution ?? null,\n fallback: null,\n enabled: Boolean(executionId),\n errorMessage: 'Failed to load execution',\n });\n}\n\n/**\n * Token/cost metrics for the workspace, optionally narrowed to an agent, app or\n * date window. Returns `null` when the service has nothing recorded yet.\n */\nexport function useExecutionMetrics(\n filter?: ExecutionMetricsFilter\n): QueryResult<ExecutionMetricsRecord | null> {\n const workspaceId = useWorkspaceId();\n const { agentId, appId, startDate, endDate } = filter ?? {};\n\n const variables = useMemo(\n () => ({ filter: { workspaceId, agentId, appId, startDate, endDate } }),\n [workspaceId, agentId, appId, startDate, endDate]\n );\n\n return useWorkspaceQuery<GetExecutionMetricsQuery, ExecutionMetricsRecord | null>({\n document: GetExecutionMetricsDocument,\n variables,\n select: (data) => data?.getExecutionMetrics ?? null,\n fallback: null,\n enabled: Boolean(workspaceId),\n errorMessage: 'Failed to load execution metrics',\n });\n}\n\nexport interface ExecutionRollup {\n total: number;\n succeeded: number;\n failed: number;\n successRate: number;\n avgDurationMs: number;\n totalCost: number;\n totalTokens: number;\n}\n\n/**\n * Rolls a list of executions up into the headline numbers shown above the table.\n * Derived purely from the rows that were actually loaded — no server aggregate\n * exists for this, so callers must label it as such.\n */\nexport function summariseExecutions(executions: readonly ExecutionRecord[]): ExecutionRollup {\n const total = executions.length;\n let succeeded = 0;\n let failed = 0;\n let durationSum = 0;\n let durationCount = 0;\n let totalCost = 0;\n let totalTokens = 0;\n\n for (const execution of executions) {\n if (SUCCESS_STATUSES.has(execution.status)) succeeded += 1;\n if (execution.status === 'FAILED' || execution.status === 'TIMEOUT') failed += 1;\n if (typeof execution.duration === 'number') {\n durationSum += execution.duration;\n durationCount += 1;\n }\n totalCost += execution.cost ?? 0;\n totalTokens += execution.tokensUsed ?? 0;\n }\n\n return {\n total,\n succeeded,\n failed,\n successRate: total > 0 ? succeeded / total : 0,\n avgDurationMs: durationCount > 0 ? durationSum / durationCount : 0,\n totalCost,\n totalTokens,\n };\n}\n\nexport function useCreateExecution() {\n return useWorkspaceMutation<CreateExecutionMutation, CreateExecutionVariables, ExecutionRecord>({\n document: CreateExecutionDocument,\n variables: ({ input }) => ({ input: buildMutationInput(input, CREATE_EXECUTION_FIELDS) }),\n select: (data) => data?.createExecution,\n errorMessage: 'Failed to start execution',\n });\n}\n\nexport function useUpdateExecutionStatus() {\n return useWorkspaceMutation<\n UpdateExecutionStatusMutation,\n UpdateExecutionStatusVariables,\n ExecutionRecord\n >({\n document: UpdateExecutionStatusDocument,\n variables: ({ id, status, output, error }) => ({\n id,\n input: {\n status,\n output,\n // The subgraph takes the failure as a message plus a JSON detail blob\n // (UpdateExecutionStatusInput); pass the caller's object through whole.\n errorMessage: typeof error?.message === 'string' ? error.message : undefined,\n errorDetails: error,\n },\n }),\n select: (data) => data?.updateExecutionStatus,\n errorMessage: 'Failed to update execution status',\n });\n}\n"],"mappings":";;;;;AAmCA,IAAM,IAAa,KAqDb,IAA0B,EAA+B;CAC7D,SAAS;CACT,OAAO;CACP,gBAAgB;CAChB,OAAO;CACP,UAAU;CACV,MAAM;CACN,aAAa;CACd,CAAC,EAUI,IAAmB,IAAI,IAAI,CAAC,YAAY,CAAC,EAEzC,IAAmC,EAAE;AAW3C,SAAS,EAAc,GAA4B,GAAyB;AAC1E,QACE,EAAU,GAAG,aAAa,CAAC,SAAS,EAAO,KAC1C,EAAU,WAAW,IAAI,aAAa,CAAC,SAAS,EAAO,KACvD,EAAU,SAAS,IAAI,aAAa,CAAC,SAAS,EAAO,IACtD,EAAU,MAAM,aAAa,CAAC,SAAS,EAAO;;AAIlD,SAAgB,EAAc,GAA2D;CACvF,IAAM,IAAc,GAAgB,EAC9B,IAAS,GAAQ,QAAQ,MAAM,CAAC,aAAa,IAAI,IACjD,IAAW,GAAQ,QACnB,IAAe,GAAU,WAAW,IAAI,EAAS,KAAK,KAAA,GACtD,IAAY,GAAU,KAAK,IAAI,IAAI,IACnC,EAAE,YAAS,UAAO,mBAAgB,YAAS,KAAU,EAAE;AA6B7D,QAAO,EAA0D;EAC/D,UAAU;EACV,WA7BgB,SACT;GACL,SAAS;IACP;IACA,QAAQ;IACR;IACA;IACA;IACA;IACD;GACD,YAAY;IAAE,OAAO;IAAY,QAAQ;IAAG;GAC7C,GACD;GAAC;GAAa;GAAc;GAAS;GAAO;GAAgB;GAAK,CAClE;EAiBC,QAfa,GACZ,MAA6D;GAC5D,IAAM,IAA0B,GAAM,kBAAkB,GAClD,IAAS,IAAY,IAAI,IAAI,EAAU,MAAM,IAAI,CAAC,GAAG,KAAA,GACrD,IAEJ,KAAU,EAAO,OAAO,IAAI,EAAK,QAAQ,MAAQ,EAAO,IAAI,EAAI,OAAO,CAAC,GAAG;AAC7E,UAAO,IAAS,EAAS,QAAQ,MAAQ,EAAc,GAAK,EAAO,CAAC,GAAG;KAEzE,CAAC,GAAQ,EAAU,CACpB;EAMC,UAAU;EACV,SAAS,EAAQ;EACjB,cAAc;EACf,CAAC;;AAGJ,SAAgB,EAAa,GAAsE;AAGjG,QAAO,EAA6D;EAClE,UAAU;EACV,WAJgB,SAAe,EAAE,IAAI,KAAe,IAAI,GAAG,CAAC,EAAY,CAAC;EAKzE,SAAS,MAAS,GAAM,gBAAgB;EACxC,UAAU;EACV,SAAS,EAAQ;EACjB,cAAc;EACf,CAAC;;AA2CJ,SAAgB,EAAoB,GAAyD;CAC3F,IAAM,IAAQ,EAAW,QACrB,IAAY,GACZ,IAAS,GACT,IAAc,GACd,IAAgB,GAChB,IAAY,GACZ,IAAc;AAElB,MAAK,IAAM,KAAa,EAQtB,CAPI,EAAiB,IAAI,EAAU,OAAO,KAAE,KAAa,KACrD,EAAU,WAAW,YAAY,EAAU,WAAW,eAAW,KAAU,IAC3E,OAAO,EAAU,YAAa,aAChC,KAAe,EAAU,UACzB,KAAiB,IAEnB,KAAa,EAAU,QAAQ,GAC/B,KAAe,EAAU,cAAc;AAGzC,QAAO;EACL;EACA;EACA;EACA,aAAa,IAAQ,IAAI,IAAY,IAAQ;EAC7C,eAAe,IAAgB,IAAI,IAAc,IAAgB;EACjE;EACA;EACD;;AAGH,SAAgB,IAAqB;AACnC,QAAO,EAAyF;EAC9F,UAAU;EACV,YAAY,EAAE,gBAAa,EAAE,OAAO,EAAmB,GAAO,EAAwB,EAAE;EACxF,SAAS,MAAS,GAAM;EACxB,cAAc;EACf,CAAC"}
1
+ {"version":3,"file":"useExecutions.js","names":["LIST_LIMIT","CREATE_EXECUTION_FIELDS","fieldsOf","SUCCESS_STATUSES","NO_EXECUTIONS","matchesSearch","execution","needle","useExecutions","workspaceId","useWorkspaceId","search","filter","statuses","singleStatus","statusKey","variables","useMemo","agentId","appId","conversationId","type","select","useCallback","rows","data","wanted","narrowed","row","useWorkspaceQuery","ListExecutionsDocument","useExecution","executionId","GetExecutionDocument","summariseExecutions","total","executions","succeeded","failed","durationSum","durationCount","totalCost","totalTokens","useCreateExecution","useWorkspaceMutation","CreateExecutionDocument","buildMutationInput","input"],"sources":["../../../src/botlit/hooks/useExecutions.ts"],"sourcesContent":["/**\n * Executions Hooks\n * @module botlit/hooks\n *\n * Backed by the live `listExecutions` / `getExecution` / `getExecutionMetrics`\n * operations plus the `createExecution` / `updateExecutionStatus` mutations on\n * wspace-botlit-svc.\n *\n * Note on filtering: `ExecutionFilterInput` accepts a SINGLE status and has no\n * free-text field, so multi-status selections and search are narrowed on the\n * client over the fetched page.\n */\n\nimport { useCallback, useMemo } from 'react';\nimport {\n CreateExecutionDocument,\n GetExecutionDocument,\n GetExecutionMetricsDocument,\n ListExecutionsDocument,\n UpdateExecutionStatusDocument,\n type CreateExecutionMutation,\n type GetExecutionMetricsQuery,\n type GetExecutionQuery,\n type ListExecutionsQuery,\n type UpdateExecutionStatusMutation,\n} from '../../generated/wspace-operations';\nimport type { CreateExecutionInput, ExecutionStatus } from '../../generated/wspace-types';\nimport { buildMutationInput, fieldsOf, type GraphQLInput } from './internal/mutationInput';\nimport {\n useWorkspaceId,\n useWorkspaceMutation,\n useWorkspaceQuery,\n type QueryResult,\n} from './internal/workspaceGateway';\n\nconst LIST_LIMIT = 100;\n\nexport interface ExecutionRecord {\n id: string;\n status: string;\n type: string;\n input: string;\n output?: string | null;\n agentId?: string | null;\n appId?: string | null;\n conversationId?: string | null;\n cost?: number | null;\n duration?: number | null;\n tokensUsed?: number | null;\n errorCode?: string | null;\n errorMessage?: string | null;\n errorDetails?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n completedAt?: string | null;\n createdAt: string;\n workspaceId: string;\n}\n\nexport interface ExecutionMetricsRecord {\n executionId: string;\n cost: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n ragChunks: number;\n toolCalls: number;\n}\n\nexport interface ExecutionsFilter {\n search?: string;\n status?: string[];\n agentId?: string;\n appId?: string;\n conversationId?: string;\n type?: string;\n}\n\nexport interface ExecutionMetricsFilter {\n agentId?: string;\n appId?: string;\n startDate?: string;\n endDate?: string;\n}\n\nexport interface CreateExecutionVariables {\n input: GraphQLInput<CreateExecutionInput>;\n}\n\nconst CREATE_EXECUTION_FIELDS = fieldsOf<CreateExecutionInput>({\n agentId: true,\n appId: true,\n conversationId: true,\n input: true,\n metadata: true,\n type: true,\n workspaceId: true,\n});\n\nexport interface UpdateExecutionStatusVariables {\n id: string;\n status: ExecutionStatus;\n output?: string;\n error?: Record<string, unknown>;\n}\n\n/** Terminal statuses that count as a successful run. */\nconst SUCCESS_STATUSES = new Set(['COMPLETED']);\n\nconst NO_EXECUTIONS: ExecutionRecord[] = [];\n\nexport const executionKeys = {\n all: ['executions'] as const,\n lists: () => [...executionKeys.all, 'list'] as const,\n list: (filter?: ExecutionsFilter) => [...executionKeys.lists(), filter] as const,\n details: () => [...executionKeys.all, 'detail'] as const,\n detail: (id: string) => [...executionKeys.details(), id] as const,\n metrics: () => [...executionKeys.all, 'metrics'] as const,\n};\n\nfunction matchesSearch(execution: ExecutionRecord, needle: string): boolean {\n return (\n execution.id.toLowerCase().includes(needle) ||\n (execution.agentId ?? '').toLowerCase().includes(needle) ||\n (execution.appId ?? '').toLowerCase().includes(needle) ||\n execution.input.toLowerCase().includes(needle)\n );\n}\n\nexport function useExecutions(filter?: ExecutionsFilter): QueryResult<ExecutionRecord[]> {\n const workspaceId = useWorkspaceId();\n const search = filter?.search?.trim().toLowerCase() ?? '';\n const statuses = filter?.status;\n const singleStatus = statuses?.length === 1 ? statuses[0] : undefined;\n const statusKey = statuses?.join(',') ?? '';\n const { agentId, appId, conversationId, type } = filter ?? {};\n\n const variables = useMemo(\n () => ({\n filters: {\n workspaceId,\n status: singleStatus,\n agentId,\n appId,\n conversationId,\n type,\n },\n pagination: { limit: LIST_LIMIT, offset: 0 },\n }),\n [workspaceId, singleStatus, agentId, appId, conversationId, type]\n );\n\n const select = useCallback(\n (data: ListExecutionsQuery | undefined): ExecutionRecord[] => {\n const rows: ExecutionRecord[] = data?.listExecutions ?? NO_EXECUTIONS;\n const wanted = statusKey ? new Set(statusKey.split(',')) : undefined;\n const narrowed =\n // A single status is already applied server-side.\n wanted && wanted.size > 1 ? rows.filter((row) => wanted.has(row.status)) : rows;\n return search ? narrowed.filter((row) => matchesSearch(row, search)) : narrowed;\n },\n [search, statusKey]\n );\n\n return useWorkspaceQuery<ListExecutionsQuery, ExecutionRecord[]>({\n document: ListExecutionsDocument,\n variables,\n select,\n fallback: NO_EXECUTIONS,\n enabled: Boolean(workspaceId),\n errorMessage: 'Failed to load executions',\n });\n}\n\nexport function useExecution(executionId: string | undefined): QueryResult<ExecutionRecord | null> {\n const variables = useMemo(() => ({ id: executionId ?? '' }), [executionId]);\n\n return useWorkspaceQuery<GetExecutionQuery, ExecutionRecord | null>({\n document: GetExecutionDocument,\n variables,\n select: (data) => data?.getExecution ?? null,\n fallback: null,\n enabled: Boolean(executionId),\n errorMessage: 'Failed to load execution',\n });\n}\n\n/**\n * Token/cost metrics for the workspace, optionally narrowed to an agent, app or\n * date window. Returns `null` when the service has nothing recorded yet.\n */\nexport function useExecutionMetrics(\n filter?: ExecutionMetricsFilter\n): QueryResult<ExecutionMetricsRecord | null> {\n const workspaceId = useWorkspaceId();\n const { agentId, appId, startDate, endDate } = filter ?? {};\n\n const variables = useMemo(\n () => ({ filter: { workspaceId, agentId, appId, startDate, endDate } }),\n [workspaceId, agentId, appId, startDate, endDate]\n );\n\n return useWorkspaceQuery<GetExecutionMetricsQuery, ExecutionMetricsRecord | null>({\n document: GetExecutionMetricsDocument,\n variables,\n select: (data) => data?.getExecutionMetrics ?? null,\n fallback: null,\n enabled: Boolean(workspaceId),\n errorMessage: 'Failed to load execution metrics',\n });\n}\n\nexport interface ExecutionRollup {\n total: number;\n succeeded: number;\n failed: number;\n successRate: number;\n avgDurationMs: number;\n totalCost: number;\n totalTokens: number;\n}\n\n/**\n * Rolls a list of executions up into the headline numbers shown above the table.\n * Derived purely from the rows that were actually loaded — no server aggregate\n * exists for this, so callers must label it as such.\n */\nexport function summariseExecutions(executions: readonly ExecutionRecord[]): ExecutionRollup {\n const total = executions.length;\n let succeeded = 0;\n let failed = 0;\n let durationSum = 0;\n let durationCount = 0;\n let totalCost = 0;\n let totalTokens = 0;\n\n for (const execution of executions) {\n if (SUCCESS_STATUSES.has(execution.status)) succeeded += 1;\n if (execution.status === 'FAILED' || execution.status === 'TIMEOUT') failed += 1;\n if (typeof execution.duration === 'number') {\n durationSum += execution.duration;\n durationCount += 1;\n }\n totalCost += execution.cost ?? 0;\n totalTokens += execution.tokensUsed ?? 0;\n }\n\n return {\n total,\n succeeded,\n failed,\n successRate: total > 0 ? succeeded / total : 0,\n avgDurationMs: durationCount > 0 ? durationSum / durationCount : 0,\n totalCost,\n totalTokens,\n };\n}\n\nexport function useCreateExecution() {\n return useWorkspaceMutation<CreateExecutionMutation, CreateExecutionVariables, ExecutionRecord>({\n document: CreateExecutionDocument,\n variables: ({ input }) => ({ input: buildMutationInput(input, CREATE_EXECUTION_FIELDS) }),\n select: (data) => data?.createExecution,\n errorMessage: 'Failed to start execution',\n });\n}\n\nexport function useUpdateExecutionStatus() {\n return useWorkspaceMutation<\n UpdateExecutionStatusMutation,\n UpdateExecutionStatusVariables,\n ExecutionRecord\n >({\n document: UpdateExecutionStatusDocument,\n variables: ({ id, status, output, error }) => ({\n id,\n input: {\n status,\n output,\n // The subgraph takes the failure as a message plus a JSON detail blob\n // (UpdateExecutionStatusInput); pass the caller's object through whole.\n errorMessage: typeof error?.message === 'string' ? error.message : undefined,\n errorDetails: error,\n },\n }),\n select: (data) => data?.updateExecutionStatus,\n errorMessage: 'Failed to update execution status',\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { CreateKnowledgeBaseInput, UpdateKnowledgeBaseInput } from '../../generated/wspace-types';
2
+ import { BaseFilter } from '../types';
3
+ import { GraphQLInput } from './internal/mutationInput';
4
+ import { QueryResult } from './internal/workspaceGateway';
5
+ export interface KnowledgeBaseRecord {
6
+ id: string;
7
+ name: string;
8
+ description?: string | null;
9
+ indexStatus: string;
10
+ embeddingModel: string;
11
+ embeddingDimensions: number;
12
+ chunkingStrategy: string;
13
+ chunkSize: number;
14
+ chunkOverlap: number;
15
+ totalDocuments: number;
16
+ totalChunks: number;
17
+ vectorCount: number;
18
+ lastIndexedAt?: string | null;
19
+ metadata?: Record<string, unknown> | null;
20
+ createdAt: string;
21
+ updatedAt: string;
22
+ createdById: string;
23
+ updatedById: string;
24
+ workspaceId: string;
25
+ }
26
+ export interface KnowledgeDocumentRecord {
27
+ id: string;
28
+ knowledgeBaseId: string;
29
+ title: string;
30
+ fileId: string;
31
+ status: string;
32
+ chunkCount: number;
33
+ processingError?: string | null;
34
+ processedAt?: string | null;
35
+ addedAt: string;
36
+ addedById: string;
37
+ updatedAt: string;
38
+ }
39
+ /**
40
+ * `CreateKnowledgeBaseInput` minus the `workspaceId` the hook supplies.
41
+ * `embeddingModel`/`embeddingDimensions` are required by the service.
42
+ */
43
+ export type CreateKnowledgeBaseVariables = Omit<GraphQLInput<CreateKnowledgeBaseInput>, 'workspaceId'>;
44
+ export interface UpdateKnowledgeBaseVariables {
45
+ kbId: string;
46
+ input: GraphQLInput<UpdateKnowledgeBaseInput>;
47
+ }
48
+ export declare const knowledgeBaseKeys: {
49
+ all: readonly ["knowledgeBases"];
50
+ lists: () => readonly ["knowledgeBases", "list"];
51
+ list: (filter?: BaseFilter) => readonly ["knowledgeBases", "list", BaseFilter | undefined];
52
+ details: () => readonly ["knowledgeBases", "detail"];
53
+ detail: (id: string) => readonly ["knowledgeBases", "detail", string];
54
+ documents: (kbId: string) => readonly ["knowledgeBases", "detail", string, "documents"];
55
+ };
56
+ export declare function useKnowledgeBases(filter?: BaseFilter): QueryResult<KnowledgeBaseRecord[]>;
57
+ export declare function useKnowledgeBase(kbId: string | undefined): QueryResult<KnowledgeBaseRecord | null>;
58
+ export declare function useKnowledgeDocuments(kbId: string | undefined): QueryResult<KnowledgeDocumentRecord[]>;
59
+ export declare function useCreateKnowledgeBase(): readonly [(input: CreateKnowledgeBaseVariables) => Promise<{
60
+ id: string;
61
+ name: string;
62
+ workspaceId: string;
63
+ }>, import('./internal/workspaceGateway').MutationState<{
64
+ id: string;
65
+ name: string;
66
+ workspaceId: string;
67
+ }>];
68
+ export declare function useUpdateKnowledgeBase(): readonly [(input: UpdateKnowledgeBaseVariables) => Promise<{
69
+ id: string;
70
+ name: string;
71
+ indexStatus: string;
72
+ }>, import('./internal/workspaceGateway').MutationState<{
73
+ id: string;
74
+ name: string;
75
+ indexStatus: string;
76
+ }>];
77
+ /** Re-indexes every document in the knowledge base (`rebuildKnowledgeBaseIndex`). */
78
+ export declare function useRebuildKnowledgeBaseIndex(): readonly [(input: string) => Promise<boolean>, import('./internal/workspaceGateway').MutationState<boolean>];
79
+ export declare function useDeleteKnowledgeBase(): readonly [(input: string) => Promise<boolean>, import('./internal/workspaceGateway').MutationState<boolean>];