@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":"RetrievalProfileDetailPage.js","names":[],"sources":["../../../src/botlit/pages/RetrievalProfileDetailPage.tsx"],"sourcesContent":["/**\n * Retrieval Profile Detail Page\n * @module botlit/pages\n *\n * `RetrievalProfile` is FLAT on wspace-botlit-svc — `strategyMode`, `topK`,\n * `citationsRequired`, `minRelevanceScore` and friends all sit at the top\n * level. There is no nested `strategy`/`grounding`/`thresholds` object, so the\n * form state below mirrors the create/update inputs field for field and the\n * payload is built explicitly rather than handing the whole record back.\n */\n\nimport type { FC } from 'react';\nimport { useEffect, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { toast } from 'sonner';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeImpact, nativeNotify } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Edit,\n Trash2,\n Search,\n FileText,\n Settings,\n Target,\n CheckSquare,\n} from 'lucide-react';\nimport { PageLayout } from '../components/PageLayout';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { EmptyState } from '../components/EmptyState';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { Input, Textarea, FormField } from '../components/Input';\nimport {\n useRetrievalProfile,\n useCreateRetrievalProfile,\n useUpdateRetrievalProfile,\n useDeleteRetrievalProfile,\n type CreateRetrievalProfileVariables,\n type RetrievalProfileRecord,\n} from '../hooks/useRetrievalProfiles';\nimport { formatRelativeTime, MISSING_VALUE } from '../utils/formatters';\nimport type { RetrievalMode, RerankerMode } from '../types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\ninterface RetrievalProfileDetailPageProps {\n isNew?: boolean;\n}\n\n/** Editable subset of the retrieval profile — one field per input field. */\ninterface RetrievalProfileForm {\n name: string;\n description: string;\n strategyMode: RetrievalMode;\n topK: number;\n reranker: RerankerMode;\n queryRewrite: RerankerMode;\n multiHop: RerankerMode;\n citationsRequired: boolean;\n showSources: boolean;\n minSources: number;\n snippetMaxChars: number;\n citationFormat: string;\n minRelevanceScore: number;\n noAnswerIfBelowThreshold: boolean;\n}\n\nconst DEFAULT_FORM: RetrievalProfileForm = {\n name: '',\n description: '',\n strategyMode: 'HYBRID',\n topK: 10,\n reranker: 'OFF',\n queryRewrite: 'OFF',\n multiHop: 'OFF',\n citationsRequired: true,\n showSources: true,\n minSources: 1,\n snippetMaxChars: 500,\n citationFormat: '[{index}]',\n minRelevanceScore: 0.7,\n noAnswerIfBelowThreshold: true,\n};\n\nconst RETRIEVAL_MODES: RetrievalMode[] = ['VECTOR', 'HYBRID', 'BM25_ONLY'];\n\n/** `reranker`/`queryRewrite`/`multiHop` are free-form strings on the service. */\nfunction toRerankerMode(value: string): RerankerMode {\n return value === 'ON' ? 'ON' : 'OFF';\n}\n\nfunction toRetrievalMode(value: string): RetrievalMode {\n return RETRIEVAL_MODES.includes(value as RetrievalMode) ? (value as RetrievalMode) : 'HYBRID';\n}\n\n/** Seeds the form from a loaded profile. */\nfunction toForm(profile: RetrievalProfileRecord): RetrievalProfileForm {\n return {\n name: profile.name,\n description: profile.description ?? '',\n strategyMode: toRetrievalMode(profile.strategyMode),\n topK: profile.topK,\n reranker: toRerankerMode(profile.reranker),\n queryRewrite: toRerankerMode(profile.queryRewrite),\n multiHop: toRerankerMode(profile.multiHop),\n citationsRequired: profile.citationsRequired,\n showSources: profile.showSources,\n minSources: profile.minSources,\n snippetMaxChars: profile.snippetMaxChars,\n citationFormat: profile.citationFormat ?? DEFAULT_FORM.citationFormat,\n minRelevanceScore: profile.minRelevanceScore ?? DEFAULT_FORM.minRelevanceScore,\n noAnswerIfBelowThreshold: profile.noAnswerIfBelowThreshold,\n };\n}\n\n/**\n * Builds the mutation payload. Every key here is declared by both\n * `CreateRetrievalProfileInput` and `UpdateRetrievalProfileInput`, so the same\n * projection serves create and update.\n */\nfunction toInput(form: RetrievalProfileForm): CreateRetrievalProfileVariables {\n return {\n name: form.name.trim(),\n description: form.description.trim() || null,\n strategyMode: form.strategyMode,\n topK: form.topK,\n reranker: form.reranker,\n queryRewrite: form.queryRewrite,\n multiHop: form.multiHop,\n citationsRequired: form.citationsRequired,\n showSources: form.showSources,\n minSources: form.minSources,\n snippetMaxChars: form.snippetMaxChars,\n citationFormat: form.citationFormat.trim() || null,\n minRelevanceScore: form.minRelevanceScore,\n noAnswerIfBelowThreshold: form.noAnswerIfBelowThreshold,\n };\n}\n\n/** `Number('')` is 0 and `Number('abc')` is NaN — keep the previous value instead. */\nfunction toNumber(value: string, fallback: number): number {\n const parsed = Number(value);\n return value.trim() !== '' && Number.isFinite(parsed) ? parsed : fallback;\n}\n\nexport const RetrievalProfileDetailPage: FC<RetrievalProfileDetailPageProps> = ({\n isNew = false,\n}) => {\n const { profileId } = useParams();\n const { navigateTo } = useBotlit();\n const { data: profile, loading, refetch } = useRetrievalProfile(isNew ? undefined : profileId);\n const { create: createProfile, loading: createLoading } = useCreateRetrievalProfile();\n const { update: updateProfile, loading: updateLoading } = useUpdateRetrievalProfile();\n const { remove: deleteProfile, loading: deleteLoading } = useDeleteRetrievalProfile();\n\n const [isEditing, setIsEditing] = useState(isNew);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [formData, setFormData] = useState<RetrievalProfileForm>(DEFAULT_FORM);\n\n // Seed the form once the profile arrives so \"Edit\" always opens on current values.\n useEffect(() => {\n if (profile && !isNew) {\n setFormData(toForm(profile));\n }\n }, [profile, isNew]);\n\n if (loading && !isNew) {\n return (\n <PageLayout title=\"Loading...\">\n <div className=\"h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n </PageLayout>\n );\n }\n\n if (!profile && !isNew) {\n return (\n <PageLayout title=\"Profile Not Found\">\n <EmptyState\n illustration=\"empty-files\"\n title=\"Profile Not Found\"\n description=\"The retrieval profile doesn't exist.\"\n action={\n <Button onClick={() => navigateTo('retrieval-profiles')}>Back to Profiles</Button>\n }\n />\n </PageLayout>\n );\n }\n\n const handleSave = async () => {\n if (!formData.name.trim()) {\n toast.error('Name is required');\n return;\n }\n try {\n if (isNew) {\n const created = await createProfile(toInput(formData));\n toast.success(`Profile \"${created.name}\" created`);\n navigateTo(`retrieval-profiles/${created.id}`);\n return;\n }\n if (!profileId) return;\n await updateProfile({ profileId, input: toInput(formData) });\n await refetch();\n toast.success('Retrieval profile updated');\n setIsEditing(false);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to save retrieval profile');\n }\n };\n\n const handleDelete = async () => {\n if (!profileId) return;\n try {\n await deleteProfile(profileId);\n if (isNative()) void nativeNotify('success');\n toast.success('Retrieval profile deleted');\n navigateTo('retrieval-profiles');\n } catch (err) {\n if (isNative()) void nativeNotify('error');\n toast.error(err instanceof Error ? err.message : 'Failed to delete retrieval profile');\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('retrieval-profiles')}>\n <ArrowLeft size={20} />\n </Button>\n <Search size={24} className=\"text-primary\" />\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{isNew ? 'New Retrieval Profile' : profile?.name}</span>\n {!isNew && profile && <StatusBadge status={profile.status} />}\n </div>\n {!isNew && profile?.description && (\n <p className=\"text-sm font-normal text-text-secondary\">{profile.description}</p>\n )}\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {isEditing ? (\n <>\n <Button\n variant=\"outline\"\n onClick={() => {\n if (isNew) {\n navigateTo('retrieval-profiles');\n return;\n }\n if (profile) setFormData(toForm(profile));\n setIsEditing(false);\n }}\n >\n Cancel\n </Button>\n <Button onClick={handleSave} isLoading={createLoading || updateLoading}>\n {isNew ? 'Create Profile' : 'Save Changes'}\n </Button>\n </>\n ) : (\n <>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_UPDATE}>\n <Button\n variant=\"outline\"\n leftIcon={<Edit size={16} />}\n onClick={() => {\n if (profile) setFormData(toForm(profile));\n setIsEditing(true);\n }}\n >\n Edit\n </Button>\n </BotmanorPermissionGate>\n {showDeleteConfirm ? (\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowDeleteConfirm(false)}>\n Cancel\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => {\n nativeImpact('medium');\n void handleDelete();\n }}\n isLoading={deleteLoading}\n >\n Confirm Delete\n </Button>\n </div>\n ) : (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_DELETE}>\n <Button\n variant=\"destructive\"\n leftIcon={<Trash2 size={16} />}\n onClick={() => setShowDeleteConfirm(true)}\n >\n Delete\n </Button>\n </BotmanorPermissionGate>\n )}\n </>\n )}\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Settings size={18} />}>\n This profile defines exactly how an agent searches your knowledge — the retrieval mode,\n how many results to pull, whether to rerank them and whether to rewrite the query first.\n Adjust the strategy here to dial in the balance between answer accuracy and speed, then\n attach the profile to the agents that should use it.\n </PagePurpose>\n\n {/* Basic Info */}\n {isEditing ? (\n <Card>\n <CardHeader>\n <CardTitle>Basic Information</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Name\" required>\n <Input\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n placeholder=\"e.g., Default Hybrid Search\"\n />\n </FormField>\n <FormField label=\"Description\">\n <Textarea\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n placeholder=\"Describe when to use this profile...\"\n rows={3}\n />\n </FormField>\n </CardContent>\n </Card>\n ) : null}\n\n {/* Strategy Configuration */}\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Settings size={18} />\n Retrieval Strategy\n </CardTitle>\n <CardDescription>How documents are searched and ranked</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isEditing ? (\n <>\n <FormField label=\"Retrieval Mode\">\n <div className=\"flex gap-4\">\n {RETRIEVAL_MODES.map((mode) => (\n <label key={mode} className=\"flex items-center gap-2\">\n <input\n type=\"radio\"\n name=\"strategyMode\"\n checked={formData.strategyMode === mode}\n onChange={() => setFormData({ ...formData, strategyMode: mode })}\n />\n <span className=\"capitalize\">{mode.replace('_', ' ')}</span>\n </label>\n ))}\n </div>\n </FormField>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Top K Results\">\n <Input\n type=\"number\"\n value={formData.topK}\n onChange={(e) =>\n setFormData({\n ...formData,\n topK: toNumber(e.target.value, DEFAULT_FORM.topK),\n })\n }\n />\n </FormField>\n <FormField label=\"Reranker\">\n <select\n className=\"flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm\"\n value={formData.reranker}\n onChange={(e) =>\n setFormData({ ...formData, reranker: toRerankerMode(e.target.value) })\n }\n >\n <option value=\"OFF\">Disabled</option>\n <option value=\"ON\">Enabled</option>\n </select>\n </FormField>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Query Rewrite\">\n <select\n className=\"flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm\"\n value={formData.queryRewrite}\n onChange={(e) =>\n setFormData({ ...formData, queryRewrite: toRerankerMode(e.target.value) })\n }\n >\n <option value=\"OFF\">Disabled</option>\n <option value=\"ON\">Enabled</option>\n </select>\n </FormField>\n <FormField label=\"Multi-Hop\">\n <select\n className=\"flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm\"\n value={formData.multiHop}\n onChange={(e) =>\n setFormData({ ...formData, multiHop: toRerankerMode(e.target.value) })\n }\n >\n <option value=\"OFF\">Disabled</option>\n <option value=\"ON\">Enabled</option>\n </select>\n </FormField>\n </div>\n </>\n ) : (\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Mode</p>\n <Badge variant=\"outline\">{profile?.strategyMode}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Top K</p>\n <p className=\"font-medium\">{profile?.topK}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Reranker</p>\n <Badge variant={profile?.reranker === 'ON' ? 'success' : 'secondary'}>\n {profile?.reranker}\n </Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Query Rewrite</p>\n <Badge variant={profile?.queryRewrite === 'ON' ? 'success' : 'secondary'}>\n {profile?.queryRewrite}\n </Badge>\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Grounding Configuration */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n Grounding & Citations\n </CardTitle>\n <CardDescription>How sources are cited in responses</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isEditing ? (\n <>\n <div className=\"flex items-center gap-4\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.citationsRequired}\n onChange={(e) =>\n setFormData({ ...formData, citationsRequired: e.target.checked })\n }\n />\n <span>Citations Required</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.showSources}\n onChange={(e) => setFormData({ ...formData, showSources: e.target.checked })}\n />\n <span>Show Sources</span>\n </label>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Min Sources\">\n <Input\n type=\"number\"\n value={formData.minSources}\n onChange={(e) =>\n setFormData({\n ...formData,\n minSources: toNumber(e.target.value, DEFAULT_FORM.minSources),\n })\n }\n />\n </FormField>\n <FormField label=\"Max Snippet Chars\">\n <Input\n type=\"number\"\n value={formData.snippetMaxChars}\n onChange={(e) =>\n setFormData({\n ...formData,\n snippetMaxChars: toNumber(e.target.value, DEFAULT_FORM.snippetMaxChars),\n })\n }\n />\n </FormField>\n </div>\n <FormField label=\"Citation Format Template\">\n <Input\n value={formData.citationFormat}\n onChange={(e) => setFormData({ ...formData, citationFormat: e.target.value })}\n placeholder=\"[{index}]\"\n />\n </FormField>\n </>\n ) : (\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Citations Required</p>\n <Badge variant={profile?.citationsRequired ? 'success' : 'secondary'}>\n {profile?.citationsRequired ? 'Yes' : 'No'}\n </Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Min Sources</p>\n <p className=\"font-medium\">{profile?.minSources}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Max Snippet</p>\n <p className=\"font-medium\">{profile?.snippetMaxChars} chars</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Citation Format</p>\n <code className=\"text-sm\">{profile?.citationFormat ?? MISSING_VALUE}</code>\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Thresholds */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Target size={18} />\n Relevance Thresholds\n </CardTitle>\n <CardDescription>Minimum quality requirements for results</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isEditing ? (\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Min Relevance Score (0-1)\">\n <Input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n max=\"1\"\n value={formData.minRelevanceScore}\n onChange={(e) =>\n setFormData({\n ...formData,\n minRelevanceScore: toNumber(e.target.value, DEFAULT_FORM.minRelevanceScore),\n })\n }\n />\n </FormField>\n <div className=\"flex items-center\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.noAnswerIfBelowThreshold}\n onChange={(e) =>\n setFormData({ ...formData, noAnswerIfBelowThreshold: e.target.checked })\n }\n />\n <span>No Answer if Below Threshold</span>\n </label>\n </div>\n </div>\n ) : (\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Min Relevance Score</p>\n <p className=\"font-medium\">{profile?.minRelevanceScore ?? 'Not set'}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">No Answer Below Threshold</p>\n <Badge variant={profile?.noAnswerIfBelowThreshold ? 'warning' : 'secondary'}>\n {profile?.noAnswerIfBelowThreshold ? 'Yes' : 'No'}\n </Badge>\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Metadata (view only) */}\n {!isNew && profile && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <CheckSquare size={18} />\n Metadata\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm\">\n <div>\n <p className=\"text-text-secondary\">Created</p>\n <p className=\"font-medium\">{formatRelativeTime(profile.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Updated</p>\n <p className=\"font-medium\">{formatRelativeTime(profile.updatedAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Revision</p>\n <p className=\"font-medium\">{profile.revision}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Visibility</p>\n <Badge variant=\"outline\">{profile.visibility}</Badge>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"RetrievalProfileDetailPage.js","names":["_Fragment","Textarea","Textarea$1","DEFAULT_FORM","RETRIEVAL_MODES","toRerankerMode","value","toRetrievalMode","toForm","profile","toInput","form","toNumber","parsed","fallback","RetrievalProfileDetailPage","useParams","useBotlit","useRetrievalProfile","isNew","profileId","createProfile","createLoading","useCreateRetrievalProfile","updateProfile","updateLoading","useUpdateRetrievalProfile","deleteProfile","deleteLoading","useDeleteRetrievalProfile","isEditing","setIsEditing","useState","showDeleteConfirm","setShowDeleteConfirm","formData","setFormData","useEffect","loading","PageLayout","EmptyState","Button","navigateTo","handleSave","created","toast","refetch","err","handleDelete","isNative","nativeNotify","ArrowLeft","Search","StatusBadge","Fragment","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Edit","nativeImpact","Trash2","PagePurpose","Settings","Card","CardHeader","CardTitle","CardContent","FormField","Input","CardDescription","mode","Badge","FileText","Target","CheckSquare","formatRelativeTime"],"sources":["../../../src/botlit/pages/RetrievalProfileDetailPage.tsx"],"sourcesContent":["/**\n * Retrieval Profile Detail Page\n * @module botlit/pages\n *\n * `RetrievalProfile` is FLAT on wspace-botlit-svc — `strategyMode`, `topK`,\n * `citationsRequired`, `minRelevanceScore` and friends all sit at the top\n * level. There is no nested `strategy`/`grounding`/`thresholds` object, so the\n * form state below mirrors the create/update inputs field for field and the\n * payload is built explicitly rather than handing the whole record back.\n */\n\nimport type { FC } from 'react';\nimport { useEffect, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { toast } from 'sonner';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeImpact, nativeNotify } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Edit,\n Trash2,\n Search,\n FileText,\n Settings,\n Target,\n CheckSquare,\n} from 'lucide-react';\nimport { PageLayout } from '../components/PageLayout';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { EmptyState } from '../components/EmptyState';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { Input, Textarea, FormField } from '../components/Input';\nimport {\n useRetrievalProfile,\n useCreateRetrievalProfile,\n useUpdateRetrievalProfile,\n useDeleteRetrievalProfile,\n type CreateRetrievalProfileVariables,\n type RetrievalProfileRecord,\n} from '../hooks/useRetrievalProfiles';\nimport { formatRelativeTime, MISSING_VALUE } from '../utils/formatters';\nimport type { RetrievalMode, RerankerMode } from '../types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\ninterface RetrievalProfileDetailPageProps {\n isNew?: boolean;\n}\n\n/** Editable subset of the retrieval profile — one field per input field. */\ninterface RetrievalProfileForm {\n name: string;\n description: string;\n strategyMode: RetrievalMode;\n topK: number;\n reranker: RerankerMode;\n queryRewrite: RerankerMode;\n multiHop: RerankerMode;\n citationsRequired: boolean;\n showSources: boolean;\n minSources: number;\n snippetMaxChars: number;\n citationFormat: string;\n minRelevanceScore: number;\n noAnswerIfBelowThreshold: boolean;\n}\n\nconst DEFAULT_FORM: RetrievalProfileForm = {\n name: '',\n description: '',\n strategyMode: 'HYBRID',\n topK: 10,\n reranker: 'OFF',\n queryRewrite: 'OFF',\n multiHop: 'OFF',\n citationsRequired: true,\n showSources: true,\n minSources: 1,\n snippetMaxChars: 500,\n citationFormat: '[{index}]',\n minRelevanceScore: 0.7,\n noAnswerIfBelowThreshold: true,\n};\n\nconst RETRIEVAL_MODES: RetrievalMode[] = ['VECTOR', 'HYBRID', 'BM25_ONLY'];\n\n/** `reranker`/`queryRewrite`/`multiHop` are free-form strings on the service. */\nfunction toRerankerMode(value: string): RerankerMode {\n return value === 'ON' ? 'ON' : 'OFF';\n}\n\nfunction toRetrievalMode(value: string): RetrievalMode {\n return RETRIEVAL_MODES.includes(value as RetrievalMode) ? (value as RetrievalMode) : 'HYBRID';\n}\n\n/** Seeds the form from a loaded profile. */\nfunction toForm(profile: RetrievalProfileRecord): RetrievalProfileForm {\n return {\n name: profile.name,\n description: profile.description ?? '',\n strategyMode: toRetrievalMode(profile.strategyMode),\n topK: profile.topK,\n reranker: toRerankerMode(profile.reranker),\n queryRewrite: toRerankerMode(profile.queryRewrite),\n multiHop: toRerankerMode(profile.multiHop),\n citationsRequired: profile.citationsRequired,\n showSources: profile.showSources,\n minSources: profile.minSources,\n snippetMaxChars: profile.snippetMaxChars,\n citationFormat: profile.citationFormat ?? DEFAULT_FORM.citationFormat,\n minRelevanceScore: profile.minRelevanceScore ?? DEFAULT_FORM.minRelevanceScore,\n noAnswerIfBelowThreshold: profile.noAnswerIfBelowThreshold,\n };\n}\n\n/**\n * Builds the mutation payload. Every key here is declared by both\n * `CreateRetrievalProfileInput` and `UpdateRetrievalProfileInput`, so the same\n * projection serves create and update.\n */\nfunction toInput(form: RetrievalProfileForm): CreateRetrievalProfileVariables {\n return {\n name: form.name.trim(),\n description: form.description.trim() || null,\n strategyMode: form.strategyMode,\n topK: form.topK,\n reranker: form.reranker,\n queryRewrite: form.queryRewrite,\n multiHop: form.multiHop,\n citationsRequired: form.citationsRequired,\n showSources: form.showSources,\n minSources: form.minSources,\n snippetMaxChars: form.snippetMaxChars,\n citationFormat: form.citationFormat.trim() || null,\n minRelevanceScore: form.minRelevanceScore,\n noAnswerIfBelowThreshold: form.noAnswerIfBelowThreshold,\n };\n}\n\n/** `Number('')` is 0 and `Number('abc')` is NaN — keep the previous value instead. */\nfunction toNumber(value: string, fallback: number): number {\n const parsed = Number(value);\n return value.trim() !== '' && Number.isFinite(parsed) ? parsed : fallback;\n}\n\nexport const RetrievalProfileDetailPage: FC<RetrievalProfileDetailPageProps> = ({\n isNew = false,\n}) => {\n const { profileId } = useParams();\n const { navigateTo } = useBotlit();\n const { data: profile, loading, refetch } = useRetrievalProfile(isNew ? undefined : profileId);\n const { create: createProfile, loading: createLoading } = useCreateRetrievalProfile();\n const { update: updateProfile, loading: updateLoading } = useUpdateRetrievalProfile();\n const { remove: deleteProfile, loading: deleteLoading } = useDeleteRetrievalProfile();\n\n const [isEditing, setIsEditing] = useState(isNew);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n const [formData, setFormData] = useState<RetrievalProfileForm>(DEFAULT_FORM);\n\n // Seed the form once the profile arrives so \"Edit\" always opens on current values.\n useEffect(() => {\n if (profile && !isNew) {\n setFormData(toForm(profile));\n }\n }, [profile, isNew]);\n\n if (loading && !isNew) {\n return (\n <PageLayout title=\"Loading...\">\n <div className=\"h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\" />\n </PageLayout>\n );\n }\n\n if (!profile && !isNew) {\n return (\n <PageLayout title=\"Profile Not Found\">\n <EmptyState\n illustration=\"empty-files\"\n title=\"Profile Not Found\"\n description=\"The retrieval profile doesn't exist.\"\n action={\n <Button onClick={() => navigateTo('retrieval-profiles')}>Back to Profiles</Button>\n }\n />\n </PageLayout>\n );\n }\n\n const handleSave = async () => {\n if (!formData.name.trim()) {\n toast.error('Name is required');\n return;\n }\n try {\n if (isNew) {\n const created = await createProfile(toInput(formData));\n toast.success(`Profile \"${created.name}\" created`);\n navigateTo(`retrieval-profiles/${created.id}`);\n return;\n }\n if (!profileId) return;\n await updateProfile({ profileId, input: toInput(formData) });\n await refetch();\n toast.success('Retrieval profile updated');\n setIsEditing(false);\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to save retrieval profile');\n }\n };\n\n const handleDelete = async () => {\n if (!profileId) return;\n try {\n await deleteProfile(profileId);\n if (isNative()) void nativeNotify('success');\n toast.success('Retrieval profile deleted');\n navigateTo('retrieval-profiles');\n } catch (err) {\n if (isNative()) void nativeNotify('error');\n toast.error(err instanceof Error ? err.message : 'Failed to delete retrieval profile');\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('retrieval-profiles')}>\n <ArrowLeft size={20} />\n </Button>\n <Search size={24} className=\"text-primary\" />\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{isNew ? 'New Retrieval Profile' : profile?.name}</span>\n {!isNew && profile && <StatusBadge status={profile.status} />}\n </div>\n {!isNew && profile?.description && (\n <p className=\"text-sm font-normal text-text-secondary\">{profile.description}</p>\n )}\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {isEditing ? (\n <>\n <Button\n variant=\"outline\"\n onClick={() => {\n if (isNew) {\n navigateTo('retrieval-profiles');\n return;\n }\n if (profile) setFormData(toForm(profile));\n setIsEditing(false);\n }}\n >\n Cancel\n </Button>\n <Button onClick={handleSave} isLoading={createLoading || updateLoading}>\n {isNew ? 'Create Profile' : 'Save Changes'}\n </Button>\n </>\n ) : (\n <>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_UPDATE}>\n <Button\n variant=\"outline\"\n leftIcon={<Edit size={16} />}\n onClick={() => {\n if (profile) setFormData(toForm(profile));\n setIsEditing(true);\n }}\n >\n Edit\n </Button>\n </BotmanorPermissionGate>\n {showDeleteConfirm ? (\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowDeleteConfirm(false)}>\n Cancel\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => {\n nativeImpact('medium');\n void handleDelete();\n }}\n isLoading={deleteLoading}\n >\n Confirm Delete\n </Button>\n </div>\n ) : (\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_DELETE}>\n <Button\n variant=\"destructive\"\n leftIcon={<Trash2 size={16} />}\n onClick={() => setShowDeleteConfirm(true)}\n >\n Delete\n </Button>\n </BotmanorPermissionGate>\n )}\n </>\n )}\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Settings size={18} />}>\n This profile defines exactly how an agent searches your knowledge — the retrieval mode,\n how many results to pull, whether to rerank them and whether to rewrite the query first.\n Adjust the strategy here to dial in the balance between answer accuracy and speed, then\n attach the profile to the agents that should use it.\n </PagePurpose>\n\n {/* Basic Info */}\n {isEditing ? (\n <Card>\n <CardHeader>\n <CardTitle>Basic Information</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Name\" required>\n <Input\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n placeholder=\"e.g., Default Hybrid Search\"\n />\n </FormField>\n <FormField label=\"Description\">\n <Textarea\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n placeholder=\"Describe when to use this profile...\"\n rows={3}\n />\n </FormField>\n </CardContent>\n </Card>\n ) : null}\n\n {/* Strategy Configuration */}\n <Card treatment=\"glass\" glow>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Settings size={18} />\n Retrieval Strategy\n </CardTitle>\n <CardDescription>How documents are searched and ranked</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isEditing ? (\n <>\n <FormField label=\"Retrieval Mode\">\n <div className=\"flex gap-4\">\n {RETRIEVAL_MODES.map((mode) => (\n <label key={mode} className=\"flex items-center gap-2\">\n <input\n type=\"radio\"\n name=\"strategyMode\"\n checked={formData.strategyMode === mode}\n onChange={() => setFormData({ ...formData, strategyMode: mode })}\n />\n <span className=\"capitalize\">{mode.replace('_', ' ')}</span>\n </label>\n ))}\n </div>\n </FormField>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Top K Results\">\n <Input\n type=\"number\"\n value={formData.topK}\n onChange={(e) =>\n setFormData({\n ...formData,\n topK: toNumber(e.target.value, DEFAULT_FORM.topK),\n })\n }\n />\n </FormField>\n <FormField label=\"Reranker\">\n <select\n className=\"flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm\"\n value={formData.reranker}\n onChange={(e) =>\n setFormData({ ...formData, reranker: toRerankerMode(e.target.value) })\n }\n >\n <option value=\"OFF\">Disabled</option>\n <option value=\"ON\">Enabled</option>\n </select>\n </FormField>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Query Rewrite\">\n <select\n className=\"flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm\"\n value={formData.queryRewrite}\n onChange={(e) =>\n setFormData({ ...formData, queryRewrite: toRerankerMode(e.target.value) })\n }\n >\n <option value=\"OFF\">Disabled</option>\n <option value=\"ON\">Enabled</option>\n </select>\n </FormField>\n <FormField label=\"Multi-Hop\">\n <select\n className=\"flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm\"\n value={formData.multiHop}\n onChange={(e) =>\n setFormData({ ...formData, multiHop: toRerankerMode(e.target.value) })\n }\n >\n <option value=\"OFF\">Disabled</option>\n <option value=\"ON\">Enabled</option>\n </select>\n </FormField>\n </div>\n </>\n ) : (\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Mode</p>\n <Badge variant=\"outline\">{profile?.strategyMode}</Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Top K</p>\n <p className=\"font-medium\">{profile?.topK}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Reranker</p>\n <Badge variant={profile?.reranker === 'ON' ? 'success' : 'secondary'}>\n {profile?.reranker}\n </Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Query Rewrite</p>\n <Badge variant={profile?.queryRewrite === 'ON' ? 'success' : 'secondary'}>\n {profile?.queryRewrite}\n </Badge>\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Grounding Configuration */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n Grounding & Citations\n </CardTitle>\n <CardDescription>How sources are cited in responses</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isEditing ? (\n <>\n <div className=\"flex items-center gap-4\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.citationsRequired}\n onChange={(e) =>\n setFormData({ ...formData, citationsRequired: e.target.checked })\n }\n />\n <span>Citations Required</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.showSources}\n onChange={(e) => setFormData({ ...formData, showSources: e.target.checked })}\n />\n <span>Show Sources</span>\n </label>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Min Sources\">\n <Input\n type=\"number\"\n value={formData.minSources}\n onChange={(e) =>\n setFormData({\n ...formData,\n minSources: toNumber(e.target.value, DEFAULT_FORM.minSources),\n })\n }\n />\n </FormField>\n <FormField label=\"Max Snippet Chars\">\n <Input\n type=\"number\"\n value={formData.snippetMaxChars}\n onChange={(e) =>\n setFormData({\n ...formData,\n snippetMaxChars: toNumber(e.target.value, DEFAULT_FORM.snippetMaxChars),\n })\n }\n />\n </FormField>\n </div>\n <FormField label=\"Citation Format Template\">\n <Input\n value={formData.citationFormat}\n onChange={(e) => setFormData({ ...formData, citationFormat: e.target.value })}\n placeholder=\"[{index}]\"\n />\n </FormField>\n </>\n ) : (\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Citations Required</p>\n <Badge variant={profile?.citationsRequired ? 'success' : 'secondary'}>\n {profile?.citationsRequired ? 'Yes' : 'No'}\n </Badge>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Min Sources</p>\n <p className=\"font-medium\">{profile?.minSources}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Max Snippet</p>\n <p className=\"font-medium\">{profile?.snippetMaxChars} chars</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Citation Format</p>\n <code className=\"text-sm\">{profile?.citationFormat ?? MISSING_VALUE}</code>\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Thresholds */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Target size={18} />\n Relevance Thresholds\n </CardTitle>\n <CardDescription>Minimum quality requirements for results</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isEditing ? (\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Min Relevance Score (0-1)\">\n <Input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n max=\"1\"\n value={formData.minRelevanceScore}\n onChange={(e) =>\n setFormData({\n ...formData,\n minRelevanceScore: toNumber(e.target.value, DEFAULT_FORM.minRelevanceScore),\n })\n }\n />\n </FormField>\n <div className=\"flex items-center\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.noAnswerIfBelowThreshold}\n onChange={(e) =>\n setFormData({ ...formData, noAnswerIfBelowThreshold: e.target.checked })\n }\n />\n <span>No Answer if Below Threshold</span>\n </label>\n </div>\n </div>\n ) : (\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Min Relevance Score</p>\n <p className=\"font-medium\">{profile?.minRelevanceScore ?? 'Not set'}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">No Answer Below Threshold</p>\n <Badge variant={profile?.noAnswerIfBelowThreshold ? 'warning' : 'secondary'}>\n {profile?.noAnswerIfBelowThreshold ? 'Yes' : 'No'}\n </Badge>\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Metadata (view only) */}\n {!isNew && profile && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <CheckSquare size={18} />\n Metadata\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm\">\n <div>\n <p className=\"text-text-secondary\">Created</p>\n <p className=\"font-medium\">{formatRelativeTime(profile.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Updated</p>\n <p className=\"font-medium\">{formatRelativeTime(profile.updatedAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Revision</p>\n <p className=\"font-medium\">{profile.revision}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Visibility</p>\n <Badge variant=\"outline\">{profile.visibility}</Badge>\n </div>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const RetrievalProfilesPage: FC;
@@ -1,32 +1,32 @@
1
- import { useTr as e } from "../../shared/hooks/useTr.js";
2
- import { useBotlit as t } from "../providers/BotlitProvider.js";
3
- import { formatRelativeTime as n } from "../utils/formatters.js";
1
+ import { useBotlit as e } from "../providers/BotlitProvider.js";
2
+ import { useTr as t } from "../../shared/hooks/useTr.js";
3
+ import { PageLayout as n } from "../components/PageLayout.js";
4
4
  import { BOTMANOR_PERMISSIONS as r } from "../permissions/botmanorPermissions.js";
5
5
  import { BotmanorPermissionGate as i } from "../permissions/useBotmanorPermissions.js";
6
- import { PageLayout as a } from "../components/PageLayout.js";
7
- import { Button as o } from "../components/Button.js";
8
- import "../permissions/index.js";
9
- import { Card as s, CardContent as c, CardDescription as l, CardHeader as u, CardTitle as d } from "../components/Card.js";
6
+ import { Card as a, CardContent as o, CardDescription as s, CardHeader as c, CardTitle as l } from "../components/Card.js";
7
+ import { Button as u } from "../components/Button.js";
8
+ import { Input as d } from "../components/Input.js";
10
9
  import { Badge as f, StatusBadge as p } from "../components/Badge.js";
11
10
  import { EmptyState as m } from "../components/EmptyState.js";
12
- import { Input as h } from "../components/Input.js";
13
- import { ErrorState as g } from "../components/ErrorState.js";
14
- import { useRetrievalProfiles as _ } from "../hooks/useRetrievalProfiles.js";
11
+ import { ErrorState as h } from "../components/ErrorState.js";
15
12
  import "../hooks/index.js";
13
+ import { formatRelativeTime as g } from "../utils/formatters.js";
14
+ import { useRetrievalProfiles as _ } from "../hooks/useRetrievalProfiles.js";
15
+ import "../permissions/index.js";
16
16
  import { useState as v } from "react";
17
17
  import { GlassCard as y, PagePurpose as b } from "@burdenoff/fe-libs/ui";
18
18
  import { jsx as x, jsxs as S } from "react/jsx-runtime";
19
19
  import { Link as C } from "react-router";
20
20
  import { Database as w, Filter as T, Layers as E, Plus as D, Search as O, Settings as k, Zap as A } from "lucide-react";
21
- //#region src/botlit/pages/RetrievalProfilesPage.tsx
21
+ // src/botlit/pages/RetrievalProfilesPage.tsx
22
22
  var j = () => {
23
- let j = e(), { getPath: M } = t(), [N, P] = v(""), { data: F, loading: I, error: L, refetch: R } = _({ search: N });
24
- return /* @__PURE__ */ x(a, {
23
+ let j = t(), { getPath: M } = e(), [N, P] = v(""), { data: F, loading: I, error: L, refetch: R } = _({ search: N });
24
+ return /* @__PURE__ */ x(n, {
25
25
  title: j("botlit.retrievalProfiles.title", "Retrieval Profiles"),
26
26
  description: j("botlit.retrievalProfiles.description", "Configure how agents retrieve and rank knowledge from knowledge bases"),
27
27
  actions: /* @__PURE__ */ x(i, {
28
28
  permission: r.RETRIEVAL_PROFILE_CREATE,
29
- children: /* @__PURE__ */ x(o, {
29
+ children: /* @__PURE__ */ x(u, {
30
30
  leftIcon: /* @__PURE__ */ x(D, { size: 16 }),
31
31
  children: /* @__PURE__ */ x(C, {
32
32
  to: M("retrieval-profiles/new"),
@@ -45,13 +45,13 @@ var j = () => {
45
45
  className: "flex items-center gap-4",
46
46
  children: [/* @__PURE__ */ S("div", {
47
47
  className: "relative flex-1 max-w-md",
48
- children: [/* @__PURE__ */ x(O, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ x(h, {
48
+ children: [/* @__PURE__ */ x(O, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ x(d, {
49
49
  placeholder: j("botlit.retrievalProfiles.searchPlaceholder", "Search profiles..."),
50
50
  value: N,
51
51
  onChange: (e) => P(e.target.value),
52
52
  className: "pl-9"
53
53
  })]
54
- }), /* @__PURE__ */ x(o, {
54
+ }), /* @__PURE__ */ x(u, {
55
55
  variant: "outline",
56
56
  leftIcon: /* @__PURE__ */ x(T, { size: 16 }),
57
57
  children: j("botlit.retrievalProfiles.actions.filters", "Filters")
@@ -64,7 +64,7 @@ var j = () => {
64
64
  2,
65
65
  3
66
66
  ].map((e) => /* @__PURE__ */ x("div", { className: "h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" }, e))
67
- }) : L ? /* @__PURE__ */ x(g, {
67
+ }) : L ? /* @__PURE__ */ x(h, {
68
68
  resource: "retrieval profiles",
69
69
  error: L,
70
70
  onRetry: () => void R()
@@ -72,24 +72,24 @@ var j = () => {
72
72
  className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",
73
73
  children: F.map((e) => /* @__PURE__ */ x(C, {
74
74
  to: M(`retrieval-profiles/${e.id}`),
75
- children: /* @__PURE__ */ S(s, {
75
+ children: /* @__PURE__ */ S(a, {
76
76
  className: "h-full hover:border-primary/50 transition-colors cursor-pointer",
77
- children: [/* @__PURE__ */ x(u, { children: /* @__PURE__ */ S("div", {
77
+ children: [/* @__PURE__ */ x(c, { children: /* @__PURE__ */ S("div", {
78
78
  className: "flex items-start justify-between",
79
79
  children: [/* @__PURE__ */ S("div", {
80
80
  className: "flex items-center gap-3",
81
81
  children: [/* @__PURE__ */ x("div", {
82
82
  className: "p-2 bg-action-primary-bg/10 rounded-lg",
83
83
  children: /* @__PURE__ */ x(w, { className: "h-5 w-5 text-primary" })
84
- }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x(d, {
84
+ }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x(l, {
85
85
  className: "text-base",
86
86
  children: e.name
87
- }), /* @__PURE__ */ x(l, {
87
+ }), /* @__PURE__ */ x(s, {
88
88
  className: "text-xs",
89
89
  children: e.description
90
90
  })] })]
91
91
  }), /* @__PURE__ */ x(p, { status: e.status })]
92
- }) }), /* @__PURE__ */ x(c, { children: /* @__PURE__ */ S("div", {
92
+ }) }), /* @__PURE__ */ x(o, { children: /* @__PURE__ */ S("div", {
93
93
  className: "space-y-3",
94
94
  children: [
95
95
  /* @__PURE__ */ S("div", {
@@ -127,7 +127,7 @@ var j = () => {
127
127
  children: [/* @__PURE__ */ S("span", { children: [
128
128
  j("botlit.botsList.createdLabel", "Created"),
129
129
  " ",
130
- n(e.createdAt)
130
+ g(e.createdAt)
131
131
  ] }), /* @__PURE__ */ x(f, {
132
132
  variant: "outline",
133
133
  className: "text-xs capitalize",
@@ -144,7 +144,7 @@ var j = () => {
144
144
  description: j("botlit.retrievalProfiles.empty.description", "Create retrieval profiles to customize how agents search and rank knowledge."),
145
145
  action: /* @__PURE__ */ x(i, {
146
146
  permission: r.RETRIEVAL_PROFILE_CREATE,
147
- children: /* @__PURE__ */ x(o, {
147
+ children: /* @__PURE__ */ x(u, {
148
148
  leftIcon: /* @__PURE__ */ x(D, { size: 16 }),
149
149
  children: /* @__PURE__ */ x(C, {
150
150
  to: M("retrieval-profiles/new"),
@@ -215,7 +215,6 @@ var j = () => {
215
215
  })
216
216
  });
217
217
  };
218
- //#endregion
219
218
  export { j as RetrievalProfilesPage };
220
219
 
221
220
  //# sourceMappingURL=RetrievalProfilesPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RetrievalProfilesPage.js","names":[],"sources":["../../../src/botlit/pages/RetrievalProfilesPage.tsx"],"sourcesContent":["/**\n * Retrieval Profiles Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { Link } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { Plus, Search as SearchIcon, Filter, Database, Layers, Zap, Settings } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useRetrievalProfiles } from '../hooks';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const RetrievalProfilesPage: FC = () => {\n const t = useTr();\n const { getPath } = useBotlit();\n const [search, setSearch] = useState('');\n const { data: profiles, loading, error, refetch } = useRetrievalProfiles({ search });\n\n return (\n <PageLayout\n title={t('botlit.retrievalProfiles.title', 'Retrieval Profiles')}\n description={t(\n 'botlit.retrievalProfiles.description',\n 'Configure how agents retrieve and rank knowledge from knowledge bases'\n )}\n actions={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('retrieval-profiles/new')}>\n {t('botlit.retrievalProfiles.actions.createProfile', 'Create Profile')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Database size={18} />}>\n {t(\n 'botlit.retrievalProfiles.purpose',\n 'A retrieval profile decides how an agent searches your knowledge bases — which search strategy to use (semantic, keyword or hybrid), how many passages to pull back, whether to rerank for relevance and whether answers must cite their sources. Tune a profile here to control the accuracy-versus-speed trade-off of every grounded answer your agents give.'\n )}\n </PagePurpose>\n\n {/* Search */}\n <div className=\"flex items-center gap-4\">\n <div className=\"relative flex-1 max-w-md\">\n <SearchIcon className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder={t('botlit.retrievalProfiles.searchPlaceholder', 'Search profiles...')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <Button variant=\"outline\" leftIcon={<Filter size={16} />}>\n {t('botlit.retrievalProfiles.actions.filters', 'Filters')}\n </Button>\n </div>\n\n {/* Profiles List */}\n {loading ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"retrieval profiles\" error={error} onRetry={() => void refetch()} />\n ) : profiles.length > 0 ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {profiles.map(\n (profile: {\n id: string;\n name: string;\n description?: string | null;\n status: string;\n strategyMode: string;\n citationsRequired: boolean;\n topK: number;\n createdAt: string;\n }) => (\n <Link key={profile.id} to={getPath(`retrieval-profiles/${profile.id}`)}>\n <Card className=\"h-full hover:border-primary/50 transition-colors cursor-pointer\">\n <CardHeader>\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 bg-action-primary-bg/10 rounded-lg\">\n <Database className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <CardTitle className=\"text-base\">{profile.name}</CardTitle>\n <CardDescription className=\"text-xs\">\n {profile.description}\n </CardDescription>\n </div>\n </div>\n <StatusBadge status={profile.status} />\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {/* Retrieval Mode */}\n <div className=\"flex items-center gap-2\">\n <Layers size={14} className=\"text-text-secondary\" />\n <span className=\"text-sm capitalize\">\n {t('botlit.retrievalProfiles.overview.mode', '{{mode}} mode', {\n mode: profile.strategyMode.toLowerCase().replace('_', ' '),\n })}\n </span>\n </div>\n\n {/* Citations */}\n <div className=\"flex items-center gap-2\">\n <Zap size={14} className=\"text-text-secondary\" />\n <span className=\"text-sm\">\n {t(\n 'botlit.retrievalProfiles.overview.citations',\n 'Citations: {{status}}',\n {\n status: profile.citationsRequired\n ? t('botlit.retrievalProfiles.overview.required', 'Required')\n : t('botlit.retrievalProfiles.overview.optional', 'Optional'),\n }\n )}\n </span>\n </div>\n\n {/* Top K */}\n <div className=\"flex items-center gap-2\">\n <Database size={14} className=\"text-text-secondary\" />\n <span className=\"text-sm\">\n {t('botlit.retrievalProfiles.topK', 'Top K: {{value}}', {\n value: profile.topK,\n })}\n </span>\n </div>\n\n {/* Footer */}\n <div className=\"pt-3 border-t border-border-subtle flex items-center justify-between text-xs text-text-secondary\">\n <span>\n {t('botlit.botsList.createdLabel', 'Created')}{' '}\n {formatRelativeTime(profile.createdAt)}\n </span>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {profile.strategyMode.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n </div>\n </CardContent>\n </Card>\n </Link>\n )\n )}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-files\"\n title={t('botlit.retrievalProfiles.empty.title', 'No retrieval profiles')}\n description={t(\n 'botlit.retrievalProfiles.empty.description',\n 'Create retrieval profiles to customize how agents search and rank knowledge.'\n )}\n action={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('retrieval-profiles/new')}>\n {t('botlit.retrievalProfiles.actions.createProfile', 'Create Profile')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n />\n )}\n\n {/* Quick Start Guide */}\n <GlassCard treatment=\"glass\" glow className=\"p-6\">\n <div className=\"mb-4\">\n <h2 className=\"flex items-center gap-2 text-lg font-semibold tracking-tight text-text-primary\">\n <Settings size={18} />\n {t('botlit.retrievalProfiles.overview.title', 'Retrieval Profile Configuration')}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.retrievalProfiles.overview.description',\n 'Retrieval profiles control how knowledge is fetched and ranked for agent responses'\n )}\n </p>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Layers size={16} className=\"text-primary\" />\n {t('botlit.retrievalProfiles.overview.modesTitle', 'Retrieval Modes')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.retrievalProfiles.overview.modesDescription',\n 'Vector: semantic similarity search; Hybrid: vector + keyword combined; BM25: traditional keyword search.'\n )}\n </li>\n </ul>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Zap size={16} className=\"text-primary\" />\n {t('botlit.retrievalProfiles.overview.rerankingTitle', 'Reranking')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.retrievalProfiles.overview.rerankingDescription',\n 'Cross-encoder reranking for better relevance; improves precision at the cost of latency; recommended for complex queries.'\n )}\n </li>\n </ul>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Database size={16} className=\"text-primary\" />\n {t('botlit.retrievalProfiles.overview.knowledgeSourcesTitle', 'Knowledge Sources')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.retrievalProfiles.overview.knowledgeSourcesDescription',\n 'Bind multiple knowledge bases, configure priority and weights, and set per-KB retrieval limits.'\n )}\n </li>\n </ul>\n </div>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"RetrievalProfilesPage.js","names":["SearchIcon","RetrievalProfilesPage","t","useTr","useBotlit","search","setSearch","useState","profiles","useRetrievalProfiles","PageLayout","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Button","Plus","Link","getPath","PagePurpose","Database","Search","Input","Filter","loading","i","error","ErrorState","refetch","profile","Card","CardHeader","CardTitle","CardDescription","StatusBadge","CardContent","Layers","Zap","formatRelativeTime","Badge","EmptyState","GlassCard","Settings"],"sources":["../../../src/botlit/pages/RetrievalProfilesPage.tsx"],"sourcesContent":["/**\n * Retrieval Profiles Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { Link } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { Plus, Search as SearchIcon, Filter, Database, Layers, Zap, Settings } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useRetrievalProfiles } from '../hooks';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const RetrievalProfilesPage: FC = () => {\n const t = useTr();\n const { getPath } = useBotlit();\n const [search, setSearch] = useState('');\n const { data: profiles, loading, error, refetch } = useRetrievalProfiles({ search });\n\n return (\n <PageLayout\n title={t('botlit.retrievalProfiles.title', 'Retrieval Profiles')}\n description={t(\n 'botlit.retrievalProfiles.description',\n 'Configure how agents retrieve and rank knowledge from knowledge bases'\n )}\n actions={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('retrieval-profiles/new')}>\n {t('botlit.retrievalProfiles.actions.createProfile', 'Create Profile')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Database size={18} />}>\n {t(\n 'botlit.retrievalProfiles.purpose',\n 'A retrieval profile decides how an agent searches your knowledge bases — which search strategy to use (semantic, keyword or hybrid), how many passages to pull back, whether to rerank for relevance and whether answers must cite their sources. Tune a profile here to control the accuracy-versus-speed trade-off of every grounded answer your agents give.'\n )}\n </PagePurpose>\n\n {/* Search */}\n <div className=\"flex items-center gap-4\">\n <div className=\"relative flex-1 max-w-md\">\n <SearchIcon className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder={t('botlit.retrievalProfiles.searchPlaceholder', 'Search profiles...')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <Button variant=\"outline\" leftIcon={<Filter size={16} />}>\n {t('botlit.retrievalProfiles.actions.filters', 'Filters')}\n </Button>\n </div>\n\n {/* Profiles List */}\n {loading ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"retrieval profiles\" error={error} onRetry={() => void refetch()} />\n ) : profiles.length > 0 ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {profiles.map(\n (profile: {\n id: string;\n name: string;\n description?: string | null;\n status: string;\n strategyMode: string;\n citationsRequired: boolean;\n topK: number;\n createdAt: string;\n }) => (\n <Link key={profile.id} to={getPath(`retrieval-profiles/${profile.id}`)}>\n <Card className=\"h-full hover:border-primary/50 transition-colors cursor-pointer\">\n <CardHeader>\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 bg-action-primary-bg/10 rounded-lg\">\n <Database className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <CardTitle className=\"text-base\">{profile.name}</CardTitle>\n <CardDescription className=\"text-xs\">\n {profile.description}\n </CardDescription>\n </div>\n </div>\n <StatusBadge status={profile.status} />\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {/* Retrieval Mode */}\n <div className=\"flex items-center gap-2\">\n <Layers size={14} className=\"text-text-secondary\" />\n <span className=\"text-sm capitalize\">\n {t('botlit.retrievalProfiles.overview.mode', '{{mode}} mode', {\n mode: profile.strategyMode.toLowerCase().replace('_', ' '),\n })}\n </span>\n </div>\n\n {/* Citations */}\n <div className=\"flex items-center gap-2\">\n <Zap size={14} className=\"text-text-secondary\" />\n <span className=\"text-sm\">\n {t(\n 'botlit.retrievalProfiles.overview.citations',\n 'Citations: {{status}}',\n {\n status: profile.citationsRequired\n ? t('botlit.retrievalProfiles.overview.required', 'Required')\n : t('botlit.retrievalProfiles.overview.optional', 'Optional'),\n }\n )}\n </span>\n </div>\n\n {/* Top K */}\n <div className=\"flex items-center gap-2\">\n <Database size={14} className=\"text-text-secondary\" />\n <span className=\"text-sm\">\n {t('botlit.retrievalProfiles.topK', 'Top K: {{value}}', {\n value: profile.topK,\n })}\n </span>\n </div>\n\n {/* Footer */}\n <div className=\"pt-3 border-t border-border-subtle flex items-center justify-between text-xs text-text-secondary\">\n <span>\n {t('botlit.botsList.createdLabel', 'Created')}{' '}\n {formatRelativeTime(profile.createdAt)}\n </span>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {profile.strategyMode.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n </div>\n </CardContent>\n </Card>\n </Link>\n )\n )}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-files\"\n title={t('botlit.retrievalProfiles.empty.title', 'No retrieval profiles')}\n description={t(\n 'botlit.retrievalProfiles.empty.description',\n 'Create retrieval profiles to customize how agents search and rank knowledge.'\n )}\n action={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.RETRIEVAL_PROFILE_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('retrieval-profiles/new')}>\n {t('botlit.retrievalProfiles.actions.createProfile', 'Create Profile')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n />\n )}\n\n {/* Quick Start Guide */}\n <GlassCard treatment=\"glass\" glow className=\"p-6\">\n <div className=\"mb-4\">\n <h2 className=\"flex items-center gap-2 text-lg font-semibold tracking-tight text-text-primary\">\n <Settings size={18} />\n {t('botlit.retrievalProfiles.overview.title', 'Retrieval Profile Configuration')}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.retrievalProfiles.overview.description',\n 'Retrieval profiles control how knowledge is fetched and ranked for agent responses'\n )}\n </p>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Layers size={16} className=\"text-primary\" />\n {t('botlit.retrievalProfiles.overview.modesTitle', 'Retrieval Modes')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.retrievalProfiles.overview.modesDescription',\n 'Vector: semantic similarity search; Hybrid: vector + keyword combined; BM25: traditional keyword search.'\n )}\n </li>\n </ul>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Zap size={16} className=\"text-primary\" />\n {t('botlit.retrievalProfiles.overview.rerankingTitle', 'Reranking')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.retrievalProfiles.overview.rerankingDescription',\n 'Cross-encoder reranking for better relevance; improves precision at the cost of latency; recommended for complex queries.'\n )}\n </li>\n </ul>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Database size={16} className=\"text-primary\" />\n {t('botlit.retrievalProfiles.overview.knowledgeSourcesTitle', 'Knowledge Sources')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n {t(\n 'botlit.retrievalProfiles.overview.knowledgeSourcesDescription',\n 'Bind multiple knowledge bases, configure priority and weights, and set per-KB retrieval limits.'\n )}\n </li>\n </ul>\n </div>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const SettingsPage: FC;