@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":"SkillDetailPage.js","names":[],"sources":["../../../src/botlit/pages/SkillDetailPage.tsx"],"sourcesContent":["/**\n * Skill Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { useParams, Link } from 'react-router';\nimport { toast } from 'sonner';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeImpact, nativeNotify } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Zap,\n FileText,\n Wrench,\n Database,\n Shield,\n Settings,\n Save,\n ExternalLink,\n CheckCircle,\n XCircle,\n Edit,\n Trash2,\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 { Input, Textarea, FormField } from '../components/Input';\nimport { StatusBadge, Badge } from '../components/Badge';\nimport {\n useSkill,\n useCreateSkill,\n useUpdateSkill,\n useDeleteSkill,\n usePromptTemplates,\n usePolicies,\n useRetrievalProfiles,\n} from '../hooks';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { jsonBoolean, toUnion } from '../utils/unions';\nimport type { Visibility } from '../types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nconst VISIBILITIES: Visibility[] = ['PRIVATE', 'WORKSPACE', 'PUBLIC'];\n\ninterface SkillDetailPageProps {\n isNew?: boolean;\n}\n\nexport const SkillDetailPage: FC<SkillDetailPageProps> = ({ isNew }) => {\n const { skillId } = useParams();\n const { navigateTo, getPath } = useBotlit();\n const { data: skill, loading } = useSkill(isNew ? undefined : skillId);\n const { data: promptTemplates } = usePromptTemplates();\n const { data: policies } = usePolicies();\n const { data: retrievalProfiles } = useRetrievalProfiles();\n const { create: createSkill, loading: createLoading } = useCreateSkill();\n const { update: updateSkill, loading: updateLoading } = useUpdateSkill();\n const { remove: deleteSkill, loading: deleteLoading } = useDeleteSkill();\n\n const [isEditing, setIsEditing] = useState(false);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n\n const [formData, setFormData] = useState({\n name: '',\n description: '',\n visibility: 'PRIVATE' as Visibility,\n promptTemplateId: '',\n toolPolicyId: '',\n retrievalProfileId: '',\n toolPackDeps: '',\n recommendedPolicies: '',\n requiresTools: false,\n requiresKnowledge: false,\n requiresA2A: false,\n });\n\n const handleCreate = async () => {\n if (!formData.name) return;\n try {\n await createSkillOrThrow();\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to create skill');\n }\n };\n\n const createSkillOrThrow = async () => {\n await createSkill({\n name: formData.name,\n description: formData.description,\n visibility: formData.visibility,\n promptTemplateId: formData.promptTemplateId || undefined,\n toolPolicyId: formData.toolPolicyId || undefined,\n retrievalProfileId: formData.retrievalProfileId || undefined,\n toolPackDeps: formData.toolPackDeps\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean),\n recommendedPolicies: formData.recommendedPolicies\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean),\n capabilityFlags: {\n requiresTools: formData.requiresTools,\n requiresKnowledge: formData.requiresKnowledge,\n requiresA2A: formData.requiresA2A,\n },\n });\n toast.success(`Skill \"${formData.name}\" created`);\n navigateTo('skills');\n };\n\n const handleUpdate = async () => {\n if (!skillId || !formData.name) return;\n try {\n await updateSkillOrThrow();\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to update skill');\n }\n };\n\n const updateSkillOrThrow = async () => {\n if (!skillId) return;\n await updateSkill({\n skillId,\n input: {\n name: formData.name,\n description: formData.description,\n visibility: formData.visibility,\n promptTemplateId: formData.promptTemplateId || undefined,\n toolPolicyId: formData.toolPolicyId || undefined,\n retrievalProfileId: formData.retrievalProfileId || undefined,\n toolPackDeps: formData.toolPackDeps\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean),\n recommendedPolicies: formData.recommendedPolicies\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean),\n capabilityFlags: {\n requiresTools: formData.requiresTools,\n requiresKnowledge: formData.requiresKnowledge,\n requiresA2A: formData.requiresA2A,\n },\n },\n });\n toast.success('Skill updated');\n setIsEditing(false);\n };\n\n const handleDelete = async () => {\n if (!skillId) return;\n try {\n await deleteSkill(skillId);\n if (isNative()) void nativeNotify('success');\n toast.success('Skill deleted');\n navigateTo('skills');\n } catch (err) {\n if (isNative()) void nativeNotify('error');\n toast.error(err instanceof Error ? err.message : 'Failed to delete skill');\n }\n };\n\n const startEditing = () => {\n if (!skill) return;\n setFormData({\n name: skill.name,\n description: skill.description || '',\n visibility: toUnion(skill.visibility, VISIBILITIES, 'PRIVATE'),\n promptTemplateId: skill.promptTemplateId || '',\n toolPolicyId: skill.toolPolicyId || '',\n retrievalProfileId: skill.retrievalProfileId || '',\n toolPackDeps: skill.toolPackDeps.join(', '),\n recommendedPolicies: skill.recommendedPolicies.join(', '),\n requiresTools: jsonBoolean(skill.capabilityFlags, 'requiresTools'),\n requiresKnowledge: jsonBoolean(skill.capabilityFlags, 'requiresKnowledge'),\n requiresA2A: jsonBoolean(skill.capabilityFlags, 'requiresA2A'),\n });\n setIsEditing(true);\n };\n\n const toolPolicies =\n policies?.filter((p: { id: string; name: string; type: string }) => p.type === 'TOOL') || [];\n\n if (isNew) {\n return (\n <PageLayout\n title=\"Create Skill\"\n description=\"Bundle prompts, tools, and policies into a reusable skill\"\n actions={\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" onClick={() => navigateTo('skills')}>\n Cancel\n </Button>\n <Button\n leftIcon={<Save size={16} />}\n onClick={handleCreate}\n isLoading={createLoading}\n disabled={!formData.name}\n >\n Create\n </Button>\n </div>\n }\n >\n <div className=\"max-w-2xl space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Basic Information</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Skill Name\" required>\n <Input\n placeholder=\"e.g., Code Review Skill\"\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n />\n </FormField>\n\n <FormField label=\"Description\">\n <Textarea\n placeholder=\"What does this skill enable agents to do?\"\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n rows={3}\n />\n </FormField>\n\n <FormField label=\"Visibility\">\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.visibility}\n onChange={(e) =>\n setFormData({ ...formData, visibility: e.target.value as Visibility })\n }\n >\n <option value=\"PRIVATE\">Private</option>\n <option value=\"WORKSPACE\">Workspace</option>\n <option value=\"PUBLIC\">Public</option>\n </select>\n </FormField>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n Prompt Template\n </CardTitle>\n <CardDescription>Associate a prompt template with this skill</CardDescription>\n </CardHeader>\n <CardContent>\n <FormField label=\"Prompt Template\">\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.promptTemplateId}\n onChange={(e) => setFormData({ ...formData, promptTemplateId: e.target.value })}\n >\n <option value=\"\">None</option>\n {promptTemplates?.map(\n (template: { id: string; name: string; version?: string | null }) => (\n <option key={template.id} value={template.id}>\n {template.name} (v{template.version})\n </option>\n )\n )}\n </select>\n </FormField>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench size={18} />\n Tools Configuration\n </CardTitle>\n <CardDescription>Configure tool access for this skill</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Tool Policy\">\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.toolPolicyId}\n onChange={(e) => setFormData({ ...formData, toolPolicyId: e.target.value })}\n >\n <option value=\"\">None</option>\n {toolPolicies.map((policy: { id: string; name: string }) => (\n <option key={policy.id} value={policy.id}>\n {policy.name}\n </option>\n ))}\n </select>\n </FormField>\n\n <FormField label=\"Tool Pack Dependencies\" description=\"Comma-separated package slugs\">\n <Input\n placeholder=\"e.g., @botlit/github-tools, @botlit/web-browser\"\n value={formData.toolPackDeps}\n onChange={(e) => setFormData({ ...formData, toolPackDeps: e.target.value })}\n />\n </FormField>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Database size={18} />\n Knowledge Configuration\n </CardTitle>\n <CardDescription>Configure knowledge retrieval for this skill</CardDescription>\n </CardHeader>\n <CardContent>\n <FormField label=\"Retrieval Profile\">\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.retrievalProfileId}\n onChange={(e) => setFormData({ ...formData, retrievalProfileId: e.target.value })}\n >\n <option value=\"\">None</option>\n {retrievalProfiles?.map((profile: { id: string; name: string }) => (\n <option key={profile.id} value={profile.id}>\n {profile.name}\n </option>\n ))}\n </select>\n </FormField>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Policies & Capabilities\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Recommended Policies\" description=\"Comma-separated policy IDs\">\n <Input\n placeholder=\"e.g., content-policy-1, budget-policy-1\"\n value={formData.recommendedPolicies}\n onChange={(e) =>\n setFormData({ ...formData, recommendedPolicies: e.target.value })\n }\n />\n </FormField>\n\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium\">Capability Requirements</p>\n <div className=\"flex flex-wrap gap-4\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresTools}\n onChange={(e) =>\n setFormData({ ...formData, requiresTools: e.target.checked })\n }\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires Tools</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresKnowledge}\n onChange={(e) =>\n setFormData({ ...formData, requiresKnowledge: e.target.checked })\n }\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires Knowledge</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresA2A}\n onChange={(e) => setFormData({ ...formData, requiresA2A: e.target.checked })}\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires A2A</span>\n </label>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </PageLayout>\n );\n }\n\n if (loading) {\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 (!skill) {\n return (\n <PageLayout title=\"Skill Not Found\">\n <EmptyState\n illustration=\"empty-generic\"\n title=\"Skill Not Found\"\n description=\"This skill doesn't exist.\"\n action={<Button onClick={() => navigateTo('skills')}>Back to Skills</Button>}\n />\n </PageLayout>\n );\n }\n\n const CapabilityItem: FC<{ label: string; enabled: boolean }> = ({ label, enabled }) => (\n <div className=\"flex items-center gap-2\">\n {enabled ? (\n <CheckCircle className=\"h-4 w-4 text-green-500\" />\n ) : (\n <XCircle className=\"h-4 w-4 text-text-secondary\" />\n )}\n <span className={enabled ? 'text-text-primary' : 'text-text-secondary'}>{label}</span>\n </div>\n );\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigateTo('skills')}>\n <ArrowLeft size={20} />\n </Button>\n <div className=\"p-2 rounded-lg bg-action-primary-bg/10\">\n <Zap className=\"h-6 w-6 text-primary\" />\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{skill.name}</span>\n <StatusBadge status={skill.status} />\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">{skill.description}</p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {isEditing ? (\n <>\n <Button variant=\"outline\" onClick={() => setIsEditing(false)}>\n Cancel\n </Button>\n <Button\n leftIcon={<Save size={16} />}\n onClick={handleUpdate}\n isLoading={updateLoading}\n disabled={!formData.name}\n >\n Save Changes\n </Button>\n </>\n ) : (\n <>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.SKILL_UPDATE}>\n <Button variant=\"outline\" leftIcon={<Edit size={16} />} onClick={startEditing}>\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.SKILL_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={<Zap size={18} />}>\n This skill bundles a prompt, a set of tools and a knowledge profile into one reusable\n capability. Review what it includes and the policies it recommends, then attach it to any\n agent to grant all of those abilities at once — keeping your agents consistent without\n re-wiring the same pieces every time.\n </PagePurpose>\n\n {/* Edit Form */}\n {isEditing && (\n <Card>\n <CardHeader>\n <CardTitle>Edit Skill</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Skill Name\" required>\n <Input\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n />\n </FormField>\n <FormField label=\"Visibility\">\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.visibility}\n onChange={(e) =>\n setFormData({ ...formData, visibility: e.target.value as Visibility })\n }\n >\n <option value=\"PRIVATE\">Private</option>\n <option value=\"WORKSPACE\">Workspace</option>\n <option value=\"PUBLIC\">Public</option>\n </select>\n </FormField>\n </div>\n <FormField label=\"Description\">\n <Textarea\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n rows={2}\n />\n </FormField>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Prompt Template\">\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.promptTemplateId}\n onChange={(e) => setFormData({ ...formData, promptTemplateId: e.target.value })}\n >\n <option value=\"\">None</option>\n {promptTemplates?.map((template: { id: string; name: string }) => (\n <option key={template.id} value={template.id}>\n {template.name}\n </option>\n ))}\n </select>\n </FormField>\n <FormField label=\"Retrieval Profile\">\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.retrievalProfileId}\n onChange={(e) =>\n setFormData({ ...formData, retrievalProfileId: e.target.value })\n }\n >\n <option value=\"\">None</option>\n {retrievalProfiles?.map((profile: { id: string; name: string }) => (\n <option key={profile.id} value={profile.id}>\n {profile.name}\n </option>\n ))}\n </select>\n </FormField>\n </div>\n <FormField label=\"Tool Pack Dependencies\" description=\"Comma-separated\">\n <Input\n value={formData.toolPackDeps}\n onChange={(e) => setFormData({ ...formData, toolPackDeps: e.target.value })}\n placeholder=\"e.g., @botlit/github-tools, @botlit/web-browser\"\n />\n </FormField>\n <div className=\"flex gap-4\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresTools}\n onChange={(e) => setFormData({ ...formData, requiresTools: e.target.checked })}\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires Tools</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresKnowledge}\n onChange={(e) =>\n setFormData({ ...formData, requiresKnowledge: e.target.checked })\n }\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires Knowledge</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresA2A}\n onChange={(e) => setFormData({ ...formData, requiresA2A: e.target.checked })}\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires A2A</span>\n </label>\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Overview */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card treatment=\"glass\" glow>\n <CardContent className=\"pt-6 text-center\">\n <div className=\"p-3 rounded-full bg-action-primary-bg/10 w-fit mx-auto mb-2\">\n <Zap className=\"h-5 w-5 text-primary\" />\n </div>\n <p className=\"text-lg font-bold capitalize\">{skill.visibility.toLowerCase()}</p>\n <p className=\"text-sm text-text-secondary\">Visibility</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-3xl font-bold text-text-primary\">{skill.toolPackDeps.length}</p>\n <p className=\"text-sm text-text-secondary\">Tool Packs</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-3xl font-bold text-text-primary\">\n {skill.recommendedPolicies.length}\n </p>\n <p className=\"text-sm text-text-secondary\">Policies</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-3xl font-bold text-text-primary\">{skill.revision}</p>\n <p className=\"text-sm text-text-secondary\">Revision</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Capability Requirements */}\n <Card>\n <CardHeader>\n <CardTitle>Capability Requirements</CardTitle>\n <CardDescription>What this skill requires from agents</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex gap-8\">\n <CapabilityItem\n label=\"Tools\"\n enabled={jsonBoolean(skill.capabilityFlags, 'requiresTools')}\n />\n <CapabilityItem\n label=\"Knowledge\"\n enabled={jsonBoolean(skill.capabilityFlags, 'requiresKnowledge')}\n />\n <CapabilityItem\n label=\"A2A\"\n enabled={jsonBoolean(skill.capabilityFlags, 'requiresA2A')}\n />\n </div>\n </CardContent>\n </Card>\n\n {/* Components */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* Prompt Template */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n Prompt Template\n </CardTitle>\n </CardHeader>\n <CardContent>\n {skill.promptTemplateId ? (\n <div className=\"p-4 bg-bg-sunken rounded-lg\">\n <div className=\"flex items-center justify-between\">\n <span className=\"font-medium\">{skill.promptTemplateId}</span>\n <Link to={getPath(`prompt-templates/${skill.promptTemplateId}`)}>\n <Button variant=\"ghost\" size=\"sm\">\n <ExternalLink size={14} />\n </Button>\n </Link>\n </div>\n </div>\n ) : (\n <p className=\"text-text-secondary\">No prompt template associated</p>\n )}\n </CardContent>\n </Card>\n\n {/* Retrieval Profile */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Database size={18} />\n Retrieval Profile\n </CardTitle>\n </CardHeader>\n <CardContent>\n {skill.retrievalProfileId ? (\n <div className=\"p-4 bg-bg-sunken rounded-lg\">\n <div className=\"flex items-center justify-between\">\n <span className=\"font-medium\">{skill.retrievalProfileId}</span>\n <Link to={getPath(`retrieval-profiles/${skill.retrievalProfileId}`)}>\n <Button variant=\"ghost\" size=\"sm\">\n <ExternalLink size={14} />\n </Button>\n </Link>\n </div>\n </div>\n ) : (\n <p className=\"text-text-secondary\">No retrieval profile associated</p>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Tool Pack Dependencies */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench size={18} />\n Tool Pack Dependencies\n </CardTitle>\n </CardHeader>\n <CardContent>\n {skill.toolPackDeps.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {skill.toolPackDeps.map((dep: string) => (\n <Badge key={dep} variant=\"secondary\" className=\"font-mono\">\n {dep}\n </Badge>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No tool pack dependencies</p>\n )}\n </CardContent>\n </Card>\n\n {/* Recommended Policies */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Recommended Policies\n </CardTitle>\n </CardHeader>\n <CardContent>\n {skill.recommendedPolicies.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {skill.recommendedPolicies.map((policyId: string) => (\n <Badge key={policyId} variant=\"outline\">\n {policyId}\n </Badge>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No recommended policies</p>\n )}\n </CardContent>\n </Card>\n\n {/* Metadata */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Settings size={18} />\n Metadata\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-6 text-sm\">\n <div>\n <p className=\"text-text-secondary\">Created</p>\n <p className=\"font-medium\">{formatRelativeTime(skill.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Updated</p>\n <p className=\"font-medium\">{formatRelativeTime(skill.updatedAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Tags</p>\n <div className=\"flex gap-1\">\n {skill.tags.length > 0 ? (\n skill.tags.map((tag: string) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))\n ) : (\n <span className=\"text-text-secondary\">None</span>\n )}\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"SkillDetailPage.js","names":["Textarea","_Fragment","Textarea$1","VISIBILITIES","SkillDetailPage","useParams","useBotlit","skill","useSkill","isNew","skillId","promptTemplates","usePromptTemplates","policies","usePolicies","retrievalProfiles","useRetrievalProfiles","createSkill","createLoading","useCreateSkill","updateSkill","updateLoading","useUpdateSkill","deleteSkill","deleteLoading","useDeleteSkill","isEditing","setIsEditing","useState","showDeleteConfirm","setShowDeleteConfirm","formData","setFormData","handleCreate","createSkillOrThrow","err","t","p","toast","navigateTo","handleUpdate","updateSkillOrThrow","handleDelete","isNative","nativeNotify","startEditing","toUnion","jsonBoolean","toolPolicies","PageLayout","Button","Save","Card","CardHeader","CardTitle","CardContent","FormField","Input","FileText","CardDescription","template","Wrench","policy","Database","profile","Shield","loading","EmptyState","CapabilityItem","enabled","CheckCircle","XCircle","label","ArrowLeft","Zap","StatusBadge","Fragment","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Edit","nativeImpact","Trash2","PagePurpose","Link","getPath","ExternalLink","Badge","dep","policyId","Settings","formatRelativeTime","tag"],"sources":["../../../src/botlit/pages/SkillDetailPage.tsx"],"sourcesContent":["/**\n * Skill Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { useParams, Link } from 'react-router';\nimport { toast } from 'sonner';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { isNative, nativeImpact, nativeNotify } from '../../utils/nativeBridge';\nimport {\n ArrowLeft,\n Zap,\n FileText,\n Wrench,\n Database,\n Shield,\n Settings,\n Save,\n ExternalLink,\n CheckCircle,\n XCircle,\n Edit,\n Trash2,\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 { Input, Textarea, FormField } from '../components/Input';\nimport { StatusBadge, Badge } from '../components/Badge';\nimport {\n useSkill,\n useCreateSkill,\n useUpdateSkill,\n useDeleteSkill,\n usePromptTemplates,\n usePolicies,\n useRetrievalProfiles,\n} from '../hooks';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { jsonBoolean, toUnion } from '../utils/unions';\nimport type { Visibility } from '../types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nconst VISIBILITIES: Visibility[] = ['PRIVATE', 'WORKSPACE', 'PUBLIC'];\n\ninterface SkillDetailPageProps {\n isNew?: boolean;\n}\n\nexport const SkillDetailPage: FC<SkillDetailPageProps> = ({ isNew }) => {\n const { skillId } = useParams();\n const { navigateTo, getPath } = useBotlit();\n const { data: skill, loading } = useSkill(isNew ? undefined : skillId);\n const { data: promptTemplates } = usePromptTemplates();\n const { data: policies } = usePolicies();\n const { data: retrievalProfiles } = useRetrievalProfiles();\n const { create: createSkill, loading: createLoading } = useCreateSkill();\n const { update: updateSkill, loading: updateLoading } = useUpdateSkill();\n const { remove: deleteSkill, loading: deleteLoading } = useDeleteSkill();\n\n const [isEditing, setIsEditing] = useState(false);\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n\n const [formData, setFormData] = useState({\n name: '',\n description: '',\n visibility: 'PRIVATE' as Visibility,\n promptTemplateId: '',\n toolPolicyId: '',\n retrievalProfileId: '',\n toolPackDeps: '',\n recommendedPolicies: '',\n requiresTools: false,\n requiresKnowledge: false,\n requiresA2A: false,\n });\n\n const handleCreate = async () => {\n if (!formData.name) return;\n try {\n await createSkillOrThrow();\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to create skill');\n }\n };\n\n const createSkillOrThrow = async () => {\n await createSkill({\n name: formData.name,\n description: formData.description,\n visibility: formData.visibility,\n promptTemplateId: formData.promptTemplateId || undefined,\n toolPolicyId: formData.toolPolicyId || undefined,\n retrievalProfileId: formData.retrievalProfileId || undefined,\n toolPackDeps: formData.toolPackDeps\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean),\n recommendedPolicies: formData.recommendedPolicies\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean),\n capabilityFlags: {\n requiresTools: formData.requiresTools,\n requiresKnowledge: formData.requiresKnowledge,\n requiresA2A: formData.requiresA2A,\n },\n });\n toast.success(`Skill \"${formData.name}\" created`);\n navigateTo('skills');\n };\n\n const handleUpdate = async () => {\n if (!skillId || !formData.name) return;\n try {\n await updateSkillOrThrow();\n } catch (err) {\n toast.error(err instanceof Error ? err.message : 'Failed to update skill');\n }\n };\n\n const updateSkillOrThrow = async () => {\n if (!skillId) return;\n await updateSkill({\n skillId,\n input: {\n name: formData.name,\n description: formData.description,\n visibility: formData.visibility,\n promptTemplateId: formData.promptTemplateId || undefined,\n toolPolicyId: formData.toolPolicyId || undefined,\n retrievalProfileId: formData.retrievalProfileId || undefined,\n toolPackDeps: formData.toolPackDeps\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean),\n recommendedPolicies: formData.recommendedPolicies\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean),\n capabilityFlags: {\n requiresTools: formData.requiresTools,\n requiresKnowledge: formData.requiresKnowledge,\n requiresA2A: formData.requiresA2A,\n },\n },\n });\n toast.success('Skill updated');\n setIsEditing(false);\n };\n\n const handleDelete = async () => {\n if (!skillId) return;\n try {\n await deleteSkill(skillId);\n if (isNative()) void nativeNotify('success');\n toast.success('Skill deleted');\n navigateTo('skills');\n } catch (err) {\n if (isNative()) void nativeNotify('error');\n toast.error(err instanceof Error ? err.message : 'Failed to delete skill');\n }\n };\n\n const startEditing = () => {\n if (!skill) return;\n setFormData({\n name: skill.name,\n description: skill.description || '',\n visibility: toUnion(skill.visibility, VISIBILITIES, 'PRIVATE'),\n promptTemplateId: skill.promptTemplateId || '',\n toolPolicyId: skill.toolPolicyId || '',\n retrievalProfileId: skill.retrievalProfileId || '',\n toolPackDeps: skill.toolPackDeps.join(', '),\n recommendedPolicies: skill.recommendedPolicies.join(', '),\n requiresTools: jsonBoolean(skill.capabilityFlags, 'requiresTools'),\n requiresKnowledge: jsonBoolean(skill.capabilityFlags, 'requiresKnowledge'),\n requiresA2A: jsonBoolean(skill.capabilityFlags, 'requiresA2A'),\n });\n setIsEditing(true);\n };\n\n const toolPolicies =\n policies?.filter((p: { id: string; name: string; type: string }) => p.type === 'TOOL') || [];\n\n if (isNew) {\n return (\n <PageLayout\n title=\"Create Skill\"\n description=\"Bundle prompts, tools, and policies into a reusable skill\"\n actions={\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" onClick={() => navigateTo('skills')}>\n Cancel\n </Button>\n <Button\n leftIcon={<Save size={16} />}\n onClick={handleCreate}\n isLoading={createLoading}\n disabled={!formData.name}\n >\n Create\n </Button>\n </div>\n }\n >\n <div className=\"max-w-2xl space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Basic Information</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Skill Name\" required>\n <Input\n placeholder=\"e.g., Code Review Skill\"\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n />\n </FormField>\n\n <FormField label=\"Description\">\n <Textarea\n placeholder=\"What does this skill enable agents to do?\"\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n rows={3}\n />\n </FormField>\n\n <FormField label=\"Visibility\">\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.visibility}\n onChange={(e) =>\n setFormData({ ...formData, visibility: e.target.value as Visibility })\n }\n >\n <option value=\"PRIVATE\">Private</option>\n <option value=\"WORKSPACE\">Workspace</option>\n <option value=\"PUBLIC\">Public</option>\n </select>\n </FormField>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n Prompt Template\n </CardTitle>\n <CardDescription>Associate a prompt template with this skill</CardDescription>\n </CardHeader>\n <CardContent>\n <FormField label=\"Prompt Template\">\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.promptTemplateId}\n onChange={(e) => setFormData({ ...formData, promptTemplateId: e.target.value })}\n >\n <option value=\"\">None</option>\n {promptTemplates?.map(\n (template: { id: string; name: string; version?: string | null }) => (\n <option key={template.id} value={template.id}>\n {template.name} (v{template.version})\n </option>\n )\n )}\n </select>\n </FormField>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench size={18} />\n Tools Configuration\n </CardTitle>\n <CardDescription>Configure tool access for this skill</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Tool Policy\">\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.toolPolicyId}\n onChange={(e) => setFormData({ ...formData, toolPolicyId: e.target.value })}\n >\n <option value=\"\">None</option>\n {toolPolicies.map((policy: { id: string; name: string }) => (\n <option key={policy.id} value={policy.id}>\n {policy.name}\n </option>\n ))}\n </select>\n </FormField>\n\n <FormField label=\"Tool Pack Dependencies\" description=\"Comma-separated package slugs\">\n <Input\n placeholder=\"e.g., @botlit/github-tools, @botlit/web-browser\"\n value={formData.toolPackDeps}\n onChange={(e) => setFormData({ ...formData, toolPackDeps: e.target.value })}\n />\n </FormField>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Database size={18} />\n Knowledge Configuration\n </CardTitle>\n <CardDescription>Configure knowledge retrieval for this skill</CardDescription>\n </CardHeader>\n <CardContent>\n <FormField label=\"Retrieval Profile\">\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.retrievalProfileId}\n onChange={(e) => setFormData({ ...formData, retrievalProfileId: e.target.value })}\n >\n <option value=\"\">None</option>\n {retrievalProfiles?.map((profile: { id: string; name: string }) => (\n <option key={profile.id} value={profile.id}>\n {profile.name}\n </option>\n ))}\n </select>\n </FormField>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Policies & Capabilities\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <FormField label=\"Recommended Policies\" description=\"Comma-separated policy IDs\">\n <Input\n placeholder=\"e.g., content-policy-1, budget-policy-1\"\n value={formData.recommendedPolicies}\n onChange={(e) =>\n setFormData({ ...formData, recommendedPolicies: e.target.value })\n }\n />\n </FormField>\n\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium\">Capability Requirements</p>\n <div className=\"flex flex-wrap gap-4\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresTools}\n onChange={(e) =>\n setFormData({ ...formData, requiresTools: e.target.checked })\n }\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires Tools</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresKnowledge}\n onChange={(e) =>\n setFormData({ ...formData, requiresKnowledge: e.target.checked })\n }\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires Knowledge</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresA2A}\n onChange={(e) => setFormData({ ...formData, requiresA2A: e.target.checked })}\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires A2A</span>\n </label>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </PageLayout>\n );\n }\n\n if (loading) {\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 (!skill) {\n return (\n <PageLayout title=\"Skill Not Found\">\n <EmptyState\n illustration=\"empty-generic\"\n title=\"Skill Not Found\"\n description=\"This skill doesn't exist.\"\n action={<Button onClick={() => navigateTo('skills')}>Back to Skills</Button>}\n />\n </PageLayout>\n );\n }\n\n const CapabilityItem: FC<{ label: string; enabled: boolean }> = ({ label, enabled }) => (\n <div className=\"flex items-center gap-2\">\n {enabled ? (\n <CheckCircle className=\"h-4 w-4 text-green-500\" />\n ) : (\n <XCircle className=\"h-4 w-4 text-text-secondary\" />\n )}\n <span className={enabled ? 'text-text-primary' : 'text-text-secondary'}>{label}</span>\n </div>\n );\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigateTo('skills')}>\n <ArrowLeft size={20} />\n </Button>\n <div className=\"p-2 rounded-lg bg-action-primary-bg/10\">\n <Zap className=\"h-6 w-6 text-primary\" />\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{skill.name}</span>\n <StatusBadge status={skill.status} />\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">{skill.description}</p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {isEditing ? (\n <>\n <Button variant=\"outline\" onClick={() => setIsEditing(false)}>\n Cancel\n </Button>\n <Button\n leftIcon={<Save size={16} />}\n onClick={handleUpdate}\n isLoading={updateLoading}\n disabled={!formData.name}\n >\n Save Changes\n </Button>\n </>\n ) : (\n <>\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.SKILL_UPDATE}>\n <Button variant=\"outline\" leftIcon={<Edit size={16} />} onClick={startEditing}>\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.SKILL_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={<Zap size={18} />}>\n This skill bundles a prompt, a set of tools and a knowledge profile into one reusable\n capability. Review what it includes and the policies it recommends, then attach it to any\n agent to grant all of those abilities at once — keeping your agents consistent without\n re-wiring the same pieces every time.\n </PagePurpose>\n\n {/* Edit Form */}\n {isEditing && (\n <Card>\n <CardHeader>\n <CardTitle>Edit Skill</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Skill Name\" required>\n <Input\n value={formData.name}\n onChange={(e) => setFormData({ ...formData, name: e.target.value })}\n />\n </FormField>\n <FormField label=\"Visibility\">\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.visibility}\n onChange={(e) =>\n setFormData({ ...formData, visibility: e.target.value as Visibility })\n }\n >\n <option value=\"PRIVATE\">Private</option>\n <option value=\"WORKSPACE\">Workspace</option>\n <option value=\"PUBLIC\">Public</option>\n </select>\n </FormField>\n </div>\n <FormField label=\"Description\">\n <Textarea\n value={formData.description}\n onChange={(e) => setFormData({ ...formData, description: e.target.value })}\n rows={2}\n />\n </FormField>\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField label=\"Prompt Template\">\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.promptTemplateId}\n onChange={(e) => setFormData({ ...formData, promptTemplateId: e.target.value })}\n >\n <option value=\"\">None</option>\n {promptTemplates?.map((template: { id: string; name: string }) => (\n <option key={template.id} value={template.id}>\n {template.name}\n </option>\n ))}\n </select>\n </FormField>\n <FormField label=\"Retrieval Profile\">\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.retrievalProfileId}\n onChange={(e) =>\n setFormData({ ...formData, retrievalProfileId: e.target.value })\n }\n >\n <option value=\"\">None</option>\n {retrievalProfiles?.map((profile: { id: string; name: string }) => (\n <option key={profile.id} value={profile.id}>\n {profile.name}\n </option>\n ))}\n </select>\n </FormField>\n </div>\n <FormField label=\"Tool Pack Dependencies\" description=\"Comma-separated\">\n <Input\n value={formData.toolPackDeps}\n onChange={(e) => setFormData({ ...formData, toolPackDeps: e.target.value })}\n placeholder=\"e.g., @botlit/github-tools, @botlit/web-browser\"\n />\n </FormField>\n <div className=\"flex gap-4\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresTools}\n onChange={(e) => setFormData({ ...formData, requiresTools: e.target.checked })}\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires Tools</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresKnowledge}\n onChange={(e) =>\n setFormData({ ...formData, requiresKnowledge: e.target.checked })\n }\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires Knowledge</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={formData.requiresA2A}\n onChange={(e) => setFormData({ ...formData, requiresA2A: e.target.checked })}\n className=\"h-4 w-4\"\n />\n <span className=\"text-sm\">Requires A2A</span>\n </label>\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Overview */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card treatment=\"glass\" glow>\n <CardContent className=\"pt-6 text-center\">\n <div className=\"p-3 rounded-full bg-action-primary-bg/10 w-fit mx-auto mb-2\">\n <Zap className=\"h-5 w-5 text-primary\" />\n </div>\n <p className=\"text-lg font-bold capitalize\">{skill.visibility.toLowerCase()}</p>\n <p className=\"text-sm text-text-secondary\">Visibility</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-3xl font-bold text-text-primary\">{skill.toolPackDeps.length}</p>\n <p className=\"text-sm text-text-secondary\">Tool Packs</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-3xl font-bold text-text-primary\">\n {skill.recommendedPolicies.length}\n </p>\n <p className=\"text-sm text-text-secondary\">Policies</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-3xl font-bold text-text-primary\">{skill.revision}</p>\n <p className=\"text-sm text-text-secondary\">Revision</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Capability Requirements */}\n <Card>\n <CardHeader>\n <CardTitle>Capability Requirements</CardTitle>\n <CardDescription>What this skill requires from agents</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex gap-8\">\n <CapabilityItem\n label=\"Tools\"\n enabled={jsonBoolean(skill.capabilityFlags, 'requiresTools')}\n />\n <CapabilityItem\n label=\"Knowledge\"\n enabled={jsonBoolean(skill.capabilityFlags, 'requiresKnowledge')}\n />\n <CapabilityItem\n label=\"A2A\"\n enabled={jsonBoolean(skill.capabilityFlags, 'requiresA2A')}\n />\n </div>\n </CardContent>\n </Card>\n\n {/* Components */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* Prompt Template */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n Prompt Template\n </CardTitle>\n </CardHeader>\n <CardContent>\n {skill.promptTemplateId ? (\n <div className=\"p-4 bg-bg-sunken rounded-lg\">\n <div className=\"flex items-center justify-between\">\n <span className=\"font-medium\">{skill.promptTemplateId}</span>\n <Link to={getPath(`prompt-templates/${skill.promptTemplateId}`)}>\n <Button variant=\"ghost\" size=\"sm\">\n <ExternalLink size={14} />\n </Button>\n </Link>\n </div>\n </div>\n ) : (\n <p className=\"text-text-secondary\">No prompt template associated</p>\n )}\n </CardContent>\n </Card>\n\n {/* Retrieval Profile */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Database size={18} />\n Retrieval Profile\n </CardTitle>\n </CardHeader>\n <CardContent>\n {skill.retrievalProfileId ? (\n <div className=\"p-4 bg-bg-sunken rounded-lg\">\n <div className=\"flex items-center justify-between\">\n <span className=\"font-medium\">{skill.retrievalProfileId}</span>\n <Link to={getPath(`retrieval-profiles/${skill.retrievalProfileId}`)}>\n <Button variant=\"ghost\" size=\"sm\">\n <ExternalLink size={14} />\n </Button>\n </Link>\n </div>\n </div>\n ) : (\n <p className=\"text-text-secondary\">No retrieval profile associated</p>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Tool Pack Dependencies */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Wrench size={18} />\n Tool Pack Dependencies\n </CardTitle>\n </CardHeader>\n <CardContent>\n {skill.toolPackDeps.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {skill.toolPackDeps.map((dep: string) => (\n <Badge key={dep} variant=\"secondary\" className=\"font-mono\">\n {dep}\n </Badge>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No tool pack dependencies</p>\n )}\n </CardContent>\n </Card>\n\n {/* Recommended Policies */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Recommended Policies\n </CardTitle>\n </CardHeader>\n <CardContent>\n {skill.recommendedPolicies.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {skill.recommendedPolicies.map((policyId: string) => (\n <Badge key={policyId} variant=\"outline\">\n {policyId}\n </Badge>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary\">No recommended policies</p>\n )}\n </CardContent>\n </Card>\n\n {/* Metadata */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Settings size={18} />\n Metadata\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-6 text-sm\">\n <div>\n <p className=\"text-text-secondary\">Created</p>\n <p className=\"font-medium\">{formatRelativeTime(skill.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Updated</p>\n <p className=\"font-medium\">{formatRelativeTime(skill.updatedAt)}</p>\n </div>\n <div>\n <p className=\"text-text-secondary\">Tags</p>\n <div className=\"flex gap-1\">\n {skill.tags.length > 0 ? (\n skill.tags.map((tag: string) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))\n ) : (\n <span className=\"text-text-secondary\">None</span>\n )}\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,IAAMG,IAA6B;CAAC;CAAW;CAAa;AAAQ,GAMvDC,KAA6C,EAAE,eAAY;CACtE,IAAM,EAAE,eAAYC,GAAU,GACxB,EAAE,eAAY,eAAYC,EAAU,GACpC,EAAE,MAAMC,GAAO,gBAAYC,GAASC,IAAQ,KAAA,IAAYC,CAAO,GAC/D,EAAE,MAAMC,MAAoBC,GAAmB,GAC/C,EAAE,MAAMC,OAAaC,EAAY,GACjC,EAAE,MAAMC,MAAsBC,EAAqB,GACnD,EAAE,QAAQC,GAAa,SAASC,OAAkBC,GAAe,GACjE,EAAE,QAAQC,IAAa,SAASC,OAAkBC,GAAe,GACjE,EAAE,QAAQC,IAAa,SAASC,OAAkBC,GAAe,GAEjE,CAACC,GAAWC,KAAgBC,EAAS,EAAK,GAC1C,CAACC,IAAmBC,KAAwBF,EAAS,EAAK,GAE1D,CAACG,GAAUC,KAAeJ,EAAS;EACvC,MAAM;EACN,aAAa;EACb,YAAY;EACZ,kBAAkB;EAClB,cAAc;EACd,oBAAoB;EACpB,cAAc;EACd,qBAAqB;EACrB,eAAe;EACf,mBAAmB;EACnB,aAAa;CACf,CAAC,GAEKK,KAAe,YAAY;EAC/B,IAAKF,EAAS,MACd,IAAI;GACF,MAAMG,GAAmB;EAC3B,SAASC,GAAK;GACZ,EAAM,MAAMA,aAAe,QAAQA,EAAI,UAAU,wBAAwB;EAC3E;CACF,GAEMD,KAAqB,YAAY;EAuBrC,AAtBA,MAAMjB,EAAY;GAChB,MAAMc,EAAS;GACf,aAAaA,EAAS;GACtB,YAAYA,EAAS;GACrB,kBAAkBA,EAAS,oBAAoB,KAAA;GAC/C,cAAcA,EAAS,gBAAgB,KAAA;GACvC,oBAAoBA,EAAS,sBAAsB,KAAA;GACnD,cAAcA,EAAS,aACpB,MAAM,GAAG,CAAC,CACV,KAAK,MAAMK,EAAE,KAAK,CAAC,CAAC,CACpB,OAAO,OAAO;GACjB,qBAAqBL,EAAS,oBAC3B,MAAM,GAAG,CAAC,CACV,KAAK,MAAMM,EAAE,KAAK,CAAC,CAAC,CACpB,OAAO,OAAO;GACjB,iBAAiB;IACf,eAAeN,EAAS;IACxB,mBAAmBA,EAAS;IAC5B,aAAaA,EAAS;GACxB;EACF,CAAC,GACDO,EAAM,QAAQ,UAAUP,EAAS,KAAK,UAAU,GAChDQ,EAAW,QAAQ;CACrB,GAEMC,KAAe,YAAY;EAC/B,IAAK9B,KAAYqB,EAAS,MAC1B,IAAI;GACF,MAAMU,GAAmB;EAC3B,SAASN,GAAK;GACZ,EAAM,MAAMA,aAAe,QAAQA,EAAI,UAAU,wBAAwB;EAC3E;CACF,GAEMM,KAAqB,YAAY;EACrC,AAAK/B,MACL,MAAMU,GAAY;GAChB;GACA,OAAO;IACL,MAAMW,EAAS;IACf,aAAaA,EAAS;IACtB,YAAYA,EAAS;IACrB,kBAAkBA,EAAS,oBAAoB,KAAA;IAC/C,cAAcA,EAAS,gBAAgB,KAAA;IACvC,oBAAoBA,EAAS,sBAAsB,KAAA;IACnD,cAAcA,EAAS,aACpB,MAAM,GAAG,CAAC,CACV,KAAK,MAAMK,EAAE,KAAK,CAAC,CAAC,CACpB,OAAO,OAAO;IACjB,qBAAqBL,EAAS,oBAC3B,MAAM,GAAG,CAAC,CACV,KAAK,MAAMM,EAAE,KAAK,CAAC,CAAC,CACpB,OAAO,OAAO;IACjB,iBAAiB;KACf,eAAeN,EAAS;KACxB,mBAAmBA,EAAS;KAC5B,aAAaA,EAAS;IACxB;GACF;EACF,CAAC,GACDO,EAAM,QAAQ,eAAe,GAC7BX,EAAa,EAAK;CACpB,GAEMe,KAAe,YAAY;EAC/B,IAAKhC,GACL,IAAI;GAIF,AAHA,MAAMa,GAAYb,CAAO,GACrBiC,EAAS,KAAGC,EAAkB,SAAS,GAC3CN,EAAM,QAAQ,eAAe,GAC7BC,EAAW,QAAQ;EACrB,SAASJ,GAAK;GAEZ,AADIQ,EAAS,KAAGC,EAAkB,OAAO,GACzCN,EAAM,MAAMH,aAAe,QAAQA,EAAI,UAAU,wBAAwB;EAC3E;CACF,GAEMU,WAAqB;EACzB,AAAKtC,MACLyB,EAAY;GACV,MAAMzB,EAAM;GACZ,aAAaA,EAAM,eAAe;GAClC,YAAYuC,EAAQvC,EAAM,YAAYJ,GAAc,SAAS;GAC7D,kBAAkBI,EAAM,oBAAoB;GAC5C,cAAcA,EAAM,gBAAgB;GACpC,oBAAoBA,EAAM,sBAAsB;GAChD,cAAcA,EAAM,aAAa,KAAK,IAAI;GAC1C,qBAAqBA,EAAM,oBAAoB,KAAK,IAAI;GACxD,eAAewC,EAAYxC,EAAM,iBAAiB,eAAe;GACjE,mBAAmBwC,EAAYxC,EAAM,iBAAiB,mBAAmB;GACzE,aAAawC,EAAYxC,EAAM,iBAAiB,aAAa;EAC/D,CAAC,GACDoB,EAAa,EAAI;CACnB,GAEMqB,KACJnC,IAAU,QAAQ,MAAkDwB,EAAE,SAAS,MAAM,KAAK,CAAC;CAE7F,IAAI5B,GACF,OACE,kBAACwC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SACE,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,kBAACC,GAAD;IAAQ,SAAQ;IAAU,eAAeX,EAAW,QAAQ;IAAG,UAAA;GAEvD,CAAA,GACR,kBAACW,GAAD;IACE,UAAU,kBAACC,GAAD,EAAM,MAAM,GAAK,CAAA;IAC3B,SAASlB;IACT,WAAWf;IACX,UAAU,CAACa,EAAS;IACrB,UAAA;GAEO,CAAA,CACL;;EAGP,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,kBAACqB,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD,EAAA,UAAW,oBAA4B,CAAA,EAC7B,CAAA,GACZ,kBAACC,GAAD;KAAa,WAAU;KAAvB,UAAA;MACE,kBAACC,GAAD;OAAW,OAAM;OAAa,UAAA;OAC5B,UAAA,kBAACC,GAAD;QACE,aAAY;QACZ,OAAO1B,EAAS;QAChB,WAAW,MAAMC,EAAY;SAAE,GAAGD;SAAU,MAAM,EAAE,OAAO;QAAM,CAAC;OACnE,CAAA;MACQ,CAAA;MAEX,kBAACyB,GAAD;OAAW,OAAM;OACf,UAAA,kBAACxD,GAAD;QACE,aAAY;QACZ,OAAO+B,EAAS;QAChB,WAAW,MAAMC,EAAY;SAAE,GAAGD;SAAU,aAAa,EAAE,OAAO;QAAM,CAAC;QACzE,MAAM;OACP,CAAA;MACQ,CAAA;MAEX,kBAACyB,GAAD;OAAW,OAAM;OACf,UAAA,kBAAC,UAAD;QACE,WAAU;QACV,OAAOzB,EAAS;QAChB,WAAW,MACTC,EAAY;SAAE,GAAGD;SAAU,YAAY,EAAE,OAAO;QAAoB,CAAC;QAJzE,UAAA;SAOE,kBAAC,UAAD;UAAQ,OAAM;UAAU,UAAA;SAAe,CAAA;SACvC,kBAAC,UAAD;UAAQ,OAAM;UAAY,UAAA;SAAiB,CAAA;SAC3C,kBAAC,UAAD;UAAQ,OAAM;UAAS,UAAA;SAAc,CAAA;QAC/B;;MACC,CAAA;KACA;IACT,CAAA,CAAA,EAAA,CAAA;IAEN,kBAACqB,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD;KAAW,WAAU;KAArB,UAAA,CACE,kBAACI,GAAD,EAAU,MAAM,GAAK,CAAA,GAAC,iBAEb;IACX,CAAA,GAAA,kBAACC,GAAD,EAAA,UAAiB,8CAA4D,CAAA,CACnE,EAAA,CAAA,GACZ,kBAACJ,GAAD,EAAA,UACE,kBAACC,GAAD;KAAW,OAAM;KACf,UAAA,kBAAC,UAAD;MACE,WAAU;MACV,OAAOzB,EAAS;MAChB,WAAW,MAAMC,EAAY;OAAE,GAAGD;OAAU,kBAAkB,EAAE,OAAO;MAAM,CAAC;MAHhF,UAAA,CAKE,kBAAC,UAAD;OAAQ,OAAM;OAAG,UAAA;MAAY,CAAA,GAC5BpB,GAAiB,KACf,MACC,kBAAC,UAAD;OAA0B,OAAOiD,EAAS;OAA1C,UAAA;QACGA,EAAS;QAAK;QAAIA,EAAS;QAAQ;OAC9B;MAFK,GAAAA,EAAS,EAEd,CAEZ,CACM;;IACC,CAAA,EACA,CAAA,CACT,EAAA,CAAA;IAEN,kBAACR,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD;KAAW,WAAU;KAArB,UAAA,CACE,kBAACO,GAAD,EAAQ,MAAM,GAAK,CAAA,GAAC,qBAEX;IACX,CAAA,GAAA,kBAACF,GAAD,EAAA,UAAiB,uCAAqD,CAAA,CAC5D,EAAA,CAAA,GACZ,kBAACJ,GAAD;KAAa,WAAU;KAAvB,UAAA,CACE,kBAACC,GAAD;MAAW,OAAM;MACf,UAAA,kBAAC,UAAD;OACE,WAAU;OACV,OAAOzB,EAAS;OAChB,WAAW,MAAMC,EAAY;QAAE,GAAGD;QAAU,cAAc,EAAE,OAAO;OAAM,CAAC;OAH5E,UAAA,CAKE,kBAAC,UAAD;QAAQ,OAAM;QAAG,UAAA;OAAY,CAAA,GAC5BiB,GAAa,KAAK,MACjB,kBAAC,UAAD;QAAwB,OAAOc,EAAO;QACnC,UAAAA,EAAO;OACF,GAFKA,EAAO,EAEZ,CACT,CACK;;KACC,CAAA,GAEX,kBAACN,GAAD;MAAW,OAAM;MAAyB,aAAY;MACpD,UAAA,kBAACC,GAAD;OACE,aAAY;OACZ,OAAO1B,EAAS;OAChB,WAAW,MAAMC,EAAY;QAAE,GAAGD;QAAU,cAAc,EAAE,OAAO;OAAM,CAAC;MAC3E,CAAA;KACQ,CAAA,CACA;IACT,CAAA,CAAA,EAAA,CAAA;IAEN,kBAACqB,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD;KAAW,WAAU;KAArB,UAAA,CACE,kBAACS,GAAD,EAAU,MAAM,GAAK,CAAA,GAAC,yBAEb;IACX,CAAA,GAAA,kBAACJ,GAAD,EAAA,UAAiB,+CAA6D,CAAA,CACpE,EAAA,CAAA,GACZ,kBAACJ,GAAD,EAAA,UACE,kBAACC,GAAD;KAAW,OAAM;KACf,UAAA,kBAAC,UAAD;MACE,WAAU;MACV,OAAOzB,EAAS;MAChB,WAAW,MAAMC,EAAY;OAAE,GAAGD;OAAU,oBAAoB,EAAE,OAAO;MAAM,CAAC;MAHlF,UAAA,CAKE,kBAAC,UAAD;OAAQ,OAAM;OAAG,UAAA;MAAY,CAAA,GAC5BhB,GAAmB,KAAK,MACvB,kBAAC,UAAD;OAAyB,OAAOiD,EAAQ;OACrC,UAAAA,EAAQ;MACH,GAFKA,EAAQ,EAEb,CACT,CACK;;IACC,CAAA,EACA,CAAA,CACT,EAAA,CAAA;IAEN,kBAACZ,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD;KAAW,WAAU;KAArB,UAAA,CACE,kBAACW,GAAD,EAAQ,MAAM,GAAK,CAAA,GAAC,yBAEX;IACD,CAAA,EAAA,CAAA,GACZ,kBAACV,GAAD;KAAa,WAAU;KAAvB,UAAA,CACE,kBAACC,GAAD;MAAW,OAAM;MAAuB,aAAY;MAClD,UAAA,kBAACC,GAAD;OACE,aAAY;OACZ,OAAO1B,EAAS;OAChB,WAAW,MACTC,EAAY;QAAE,GAAGD;QAAU,qBAAqB,EAAE,OAAO;OAAM,CAAC;MAEnE,CAAA;KACQ,CAAA,GAEX,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;OAAsB,UAAA;MAA0B,CAAA,GAC7D,kBAAC,OAAD;OAAK,WAAU;OAAf,UAAA;QACE,kBAAC,SAAD;SAAO,WAAU;SAAjB,UAAA,CACE,kBAAC,SAAD;UACE,MAAK;UACL,SAASA,EAAS;UAClB,WAAW,MACTC,EAAY;WAAE,GAAGD;WAAU,eAAe,EAAE,OAAO;UAAQ,CAAC;UAE9D,WAAU;SACX,CAAA,GACD,kBAAC,QAAD;UAAM,WAAU;UAAU,UAAA;SAAoB,CAAA,CACzC;;QACP,kBAAC,SAAD;SAAO,WAAU;SAAjB,UAAA,CACE,kBAAC,SAAD;UACE,MAAK;UACL,SAASA,EAAS;UAClB,WAAW,MACTC,EAAY;WAAE,GAAGD;WAAU,mBAAmB,EAAE,OAAO;UAAQ,CAAC;UAElE,WAAU;SACX,CAAA,GACD,kBAAC,QAAD;UAAM,WAAU;UAAU,UAAA;SAAwB,CAAA,CAC7C;;QACP,kBAAC,SAAD;SAAO,WAAU;SAAjB,UAAA,CACE,kBAAC,SAAD;UACE,MAAK;UACL,SAASA,EAAS;UAClB,WAAW,MAAMC,EAAY;WAAE,GAAGD;WAAU,aAAa,EAAE,OAAO;UAAQ,CAAC;UAC3E,WAAU;SACX,CAAA,GACD,kBAAC,QAAD;UAAM,WAAU;UAAU,UAAA;SAAkB,CAAA,CACvC;;OACJ;MACF,CAAA,CAAA;KACM,CAAA,CAAA;IACT,CAAA,CAAA,EAAA,CAAA;GACH;;CACK,CAAA;CAIhB,IAAImC,IACF,OACE,kBAACjB,GAAD;EAAY,OAAM;EAChB,UAAA,kBAAC,OAAD,EAAK,WAAU,8DAA+D,CAAA;CACpE,CAAA;CAIhB,IAAI,CAAC1C,GACH,OACE,kBAAC0C,GAAD;EAAY,OAAM;EAChB,UAAA,kBAACkB,IAAD;GACE,cAAa;GACb,OAAM;GACN,aAAY;GACZ,QAAQ,kBAACjB,GAAD;IAAQ,eAAeX,EAAW,QAAQ;IAAG,UAAA;GAAsB,CAAA;EAC5E,CAAA;CACS,CAAA;CAIhB,IAAM6B,KAA2D,EAAE,UAAO,iBACxE,kBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACGC,IACC,kBAACC,IAAD,EAAa,WAAU,yBAA0B,CAAA,IAEjD,kBAACC,GAAD,EAAS,WAAU,8BAA+B,CAAA,GAEpD,kBAAC,QAAD;GAAM,WAAWF,IAAU,sBAAsB;GAAwB,UAAAG;EAAY,CAAA,CAClF;;CAGP,OACE,kBAACvB,GAAD;EACE,OACE,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,kBAACC,GAAD;KAAQ,SAAQ;KAAQ,MAAK;KAAO,eAAeX,EAAW,QAAQ;KACpE,UAAA,kBAACkC,IAAD,EAAW,MAAM,GAAK,CAAA;IAChB,CAAA;IACR,kBAAC,OAAD;KAAK,WAAU;KACb,UAAA,kBAACC,GAAD,EAAK,WAAU,uBAAwB,CAAA;IACpC,CAAA;IACL,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAAC,QAAD,EAAA,UAAOnE,EAAM,KAAW,CAAA,GACxB,kBAACoE,GAAD,EAAa,QAAQpE,EAAM,OAAS,CAAA,CACjC;IACL,CAAA,GAAA,kBAAC,KAAD;KAAG,WAAU;KAA2C,UAAAA,EAAM;IAAe,CAAA,CAC1E,EAAA,CAAA;GACF;;EAEP,SACE,kBAAC,OAAD;GAAK,WAAU;GACZ,UAAAmB,IACC,kBAAAzB,GAAA,EAAA,UAAA,CACE,kBAACiD,GAAD;IAAQ,SAAQ;IAAU,eAAevB,EAAa,EAAK;IAAG,UAAA;GAEtD,CAAA,GACR,kBAACuB,GAAD;IACE,UAAU,kBAACC,GAAD,EAAM,MAAM,GAAK,CAAA;IAC3B,SAASX;IACT,WAAWnB;IACX,UAAU,CAACU,EAAS;IACrB,UAAA;GAEO,CAAA,CACR,EAAA,CAAA,IAEF,kBAAA9B,GAAA,EAAA,UAAA,CACE,kBAAC4E,GAAD;IAAwB,YAAYC,EAAqB;IACvD,UAAA,kBAAC5B,GAAD;KAAQ,SAAQ;KAAU,UAAU,kBAAC6B,GAAD,EAAM,MAAM,GAAK,CAAA;KAAG,SAASlC;KAAc,UAAA;IAEvE,CAAA;GACc,CAAA,GACvBhB,KACC,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAACqB,GAAD;KAAQ,SAAQ;KAAU,MAAK;KAAK,eAAepB,EAAqB,EAAK;KAAG,UAAA;IAExE,CAAA,GACR,kBAACoB,GAAD;KACE,SAAQ;KACR,MAAK;KACL,eAAe;MAEb,AADA8B,EAAa,QAAQ,GACrBtC,GAAkB;KACpB;KACA,WAAWlB;KACZ,UAAA;IAEO,CAAA,CACL;GAEL,CAAA,IAAA,kBAACqD,GAAD;IAAwB,YAAYC,EAAqB;IACvD,UAAA,kBAAC5B,GAAD;KACE,SAAQ;KACR,UAAU,kBAAC+B,IAAD,EAAQ,MAAM,GAAK,CAAA;KAC7B,eAAenD,EAAqB,EAAI;KACzC,UAAA;IAEO,CAAA;GACc,CAAA,CAE1B,EAAA,CAAA;EAED,CAAA;EAGP,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,kBAACoD,GAAD;KAAa,MAAM,kBAACR,GAAD,EAAK,MAAM,GAAK,CAAA;KAAG,UAAA;IAKzB,CAAA;IAGZhD,KACC,kBAAC0B,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD,EAAA,UAAW,aAAqB,CAAA,EACtB,CAAA,GACZ,kBAACC,GAAD;KAAa,WAAU;KAAvB,UAAA;MACE,kBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACE,kBAACC,GAAD;QAAW,OAAM;QAAa,UAAA;QAC5B,UAAA,kBAACC,GAAD;SACE,OAAO1B,EAAS;SAChB,WAAW,MAAMC,EAAY;UAAE,GAAGD;UAAU,MAAM,EAAE,OAAO;SAAM,CAAC;QACnE,CAAA;OACQ,CAAA,GACX,kBAACyB,GAAD;QAAW,OAAM;QACf,UAAA,kBAAC,UAAD;SACE,WAAU;SACV,OAAOzB,EAAS;SAChB,WAAW,MACTC,EAAY;UAAE,GAAGD;UAAU,YAAY,EAAE,OAAO;SAAoB,CAAC;SAJzE,UAAA;UAOE,kBAAC,UAAD;WAAQ,OAAM;WAAU,UAAA;UAAe,CAAA;UACvC,kBAAC,UAAD;WAAQ,OAAM;WAAY,UAAA;UAAiB,CAAA;UAC3C,kBAAC,UAAD;WAAQ,OAAM;WAAS,UAAA;UAAc,CAAA;SAC/B;;OACC,CAAA,CACR;;MACL,kBAACyB,GAAD;OAAW,OAAM;OACf,UAAA,kBAACxD,GAAD;QACE,OAAO+B,EAAS;QAChB,WAAW,MAAMC,EAAY;SAAE,GAAGD;SAAU,aAAa,EAAE,OAAO;QAAM,CAAC;QACzE,MAAM;OACP,CAAA;MACQ,CAAA;MACX,kBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACE,kBAACyB,GAAD;QAAW,OAAM;QACf,UAAA,kBAAC,UAAD;SACE,WAAU;SACV,OAAOzB,EAAS;SAChB,WAAW,MAAMC,EAAY;UAAE,GAAGD;UAAU,kBAAkB,EAAE,OAAO;SAAM,CAAC;SAHhF,UAAA,CAKE,kBAAC,UAAD;UAAQ,OAAM;UAAG,UAAA;SAAY,CAAA,GAC5BpB,GAAiB,KAAK,MACrB,kBAAC,UAAD;UAA0B,OAAOiD,EAAS;UACvC,UAAAA,EAAS;SACJ,GAFKA,EAAS,EAEd,CACT,CACK;;OACC,CAAA,GACX,kBAACJ,GAAD;QAAW,OAAM;QACf,UAAA,kBAAC,UAAD;SACE,WAAU;SACV,OAAOzB,EAAS;SAChB,WAAW,MACTC,EAAY;UAAE,GAAGD;UAAU,oBAAoB,EAAE,OAAO;SAAM,CAAC;SAJnE,UAAA,CAOE,kBAAC,UAAD;UAAQ,OAAM;UAAG,UAAA;SAAY,CAAA,GAC5BhB,GAAmB,KAAK,MACvB,kBAAC,UAAD;UAAyB,OAAOiD,EAAQ;UACrC,UAAAA,EAAQ;SACH,GAFKA,EAAQ,EAEb,CACT,CACK;;OACC,CAAA,CACR;;MACL,kBAACR,GAAD;OAAW,OAAM;OAAyB,aAAY;OACpD,UAAA,kBAACC,GAAD;QACE,OAAO1B,EAAS;QAChB,WAAW,MAAMC,EAAY;SAAE,GAAGD;SAAU,cAAc,EAAE,OAAO;QAAM,CAAC;QAC1E,aAAY;OACb,CAAA;MACQ,CAAA;MACX,kBAAC,OAAD;OAAK,WAAU;OAAf,UAAA;QACE,kBAAC,SAAD;SAAO,WAAU;SAAjB,UAAA,CACE,kBAAC,SAAD;UACE,MAAK;UACL,SAASA,EAAS;UAClB,WAAW,MAAMC,EAAY;WAAE,GAAGD;WAAU,eAAe,EAAE,OAAO;UAAQ,CAAC;UAC7E,WAAU;SACX,CAAA,GACD,kBAAC,QAAD;UAAM,WAAU;UAAU,UAAA;SAAoB,CAAA,CACzC;;QACP,kBAAC,SAAD;SAAO,WAAU;SAAjB,UAAA,CACE,kBAAC,SAAD;UACE,MAAK;UACL,SAASA,EAAS;UAClB,WAAW,MACTC,EAAY;WAAE,GAAGD;WAAU,mBAAmB,EAAE,OAAO;UAAQ,CAAC;UAElE,WAAU;SACX,CAAA,GACD,kBAAC,QAAD;UAAM,WAAU;UAAU,UAAA;SAAwB,CAAA,CAC7C;;QACP,kBAAC,SAAD;SAAO,WAAU;SAAjB,UAAA,CACE,kBAAC,SAAD;UACE,MAAK;UACL,SAASA,EAAS;UAClB,WAAW,MAAMC,EAAY;WAAE,GAAGD;WAAU,aAAa,EAAE,OAAO;UAAQ,CAAC;UAC3E,WAAU;SACX,CAAA,GACD,kBAAC,QAAD;UAAM,WAAU;UAAU,UAAA;SAAkB,CAAA,CACvC;;OACJ;;KACM;IACT,CAAA,CAAA,EAAA,CAAA;IAIR,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,kBAACqB,GAAD;OAAM,WAAU;OAAQ,MAAA;OACtB,UAAA,kBAACG,GAAD;QAAa,WAAU;QAAvB,UAAA;SACE,kBAAC,OAAD;UAAK,WAAU;UACb,UAAA,kBAACmB,GAAD,EAAK,WAAU,uBAAwB,CAAA;SACpC,CAAA;SACL,kBAAC,KAAD;UAAG,WAAU;UAAgC,UAAAnE,EAAM,WAAW,YAAY;SAAK,CAAA;SAC/E,kBAAC,KAAD;UAAG,WAAU;UAA8B,UAAA;SAAa,CAAA;QAC7C;;MACT,CAAA;MACN,kBAAC6C,GAAD,EAAA,UACE,kBAACG,GAAD;OAAa,WAAU;OAAvB,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;QAAwC,UAAAhD,EAAM,aAAa;OAAU,CAAA,GAClF,kBAAC,KAAD;QAAG,WAAU;QAA8B,UAAA;OAAa,CAAA,CAC7C;MACT,CAAA,EAAA,CAAA;MACN,kBAAC6C,GAAD,EAAA,UACE,kBAACG,GAAD;OAAa,WAAU;OAAvB,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;QACV,UAAAhD,EAAM,oBAAoB;OAC1B,CAAA,GACH,kBAAC,KAAD;QAAG,WAAU;QAA8B,UAAA;OAAW,CAAA,CAC3C;MACT,CAAA,EAAA,CAAA;MACN,kBAAC6C,GAAD,EAAA,UACE,kBAACG,GAAD;OAAa,WAAU;OAAvB,UAAA,CACE,kBAAC,KAAD;QAAG,WAAU;QAAwC,UAAAhD,EAAM;OAAY,CAAA,GACvE,kBAAC,KAAD;QAAG,WAAU;QAA8B,UAAA;OAAW,CAAA,CAC3C;MACT,CAAA,EAAA,CAAA;KACH;;IAGL,kBAAC6C,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UAAW,0BAAkC,CAAA,GAC7C,kBAACK,GAAD,EAAA,UAAiB,uCAAqD,CAAA,CAC5D,EAAA,CAAA,GACZ,kBAACJ,GAAD,EAAA,UACE,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,kBAACa,GAAD;OACE,OAAM;OACN,SAASrB,EAAYxC,EAAM,iBAAiB,eAAe;MAC5D,CAAA;MACD,kBAAC6D,GAAD;OACE,OAAM;OACN,SAASrB,EAAYxC,EAAM,iBAAiB,mBAAmB;MAChE,CAAA;MACD,kBAAC6D,GAAD;OACE,OAAM;OACN,SAASrB,EAAYxC,EAAM,iBAAiB,aAAa;MAC1D,CAAA;KACE;IACM,CAAA,EAAA,CAAA,CACT,EAAA,CAAA;IAGN,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CAEE,kBAAC6C,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD;MAAW,WAAU;MAArB,UAAA,CACE,kBAACI,GAAD,EAAU,MAAM,GAAK,CAAA,GAAC,iBAEb;KACD,CAAA,EAAA,CAAA,GACZ,kBAACH,GAAD,EAAA,UACGhD,EAAM,mBACL,kBAAC,OAAD;MAAK,WAAU;MACb,UAAA,kBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACE,kBAAC,QAAD;QAAM,WAAU;QAAe,UAAAA,EAAM;OAAuB,CAAA,GAC5D,kBAAC4E,GAAD;QAAM,IAAIC,EAAQ,oBAAoB7E,EAAM,kBAAkB;QAC5D,UAAA,kBAAC2C,GAAD;SAAQ,SAAQ;SAAQ,MAAK;SAC3B,UAAA,kBAACmC,GAAD,EAAc,MAAM,GAAK,CAAA;QACnB,CAAA;OACJ,CAAA,CACH;;KACF,CAAA,IAEL,kBAAC,KAAD;MAAG,WAAU;MAAsB,UAAA;KAAgC,CAAA,EAE1D,CAAA,CACT,EAAA,CAAA,GAGN,kBAACjC,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD;MAAW,WAAU;MAArB,UAAA,CACE,kBAACS,GAAD,EAAU,MAAM,GAAK,CAAA,GAAC,mBAEb;KACD,CAAA,EAAA,CAAA,GACZ,kBAACR,GAAD,EAAA,UACGhD,EAAM,qBACL,kBAAC,OAAD;MAAK,WAAU;MACb,UAAA,kBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACE,kBAAC,QAAD;QAAM,WAAU;QAAe,UAAAA,EAAM;OAAyB,CAAA,GAC9D,kBAAC4E,GAAD;QAAM,IAAIC,EAAQ,sBAAsB7E,EAAM,oBAAoB;QAChE,UAAA,kBAAC2C,GAAD;SAAQ,SAAQ;SAAQ,MAAK;SAC3B,UAAA,kBAACmC,GAAD,EAAc,MAAM,GAAK,CAAA;QACnB,CAAA;OACJ,CAAA,CACH;;KACF,CAAA,IAEL,kBAAC,KAAD;MAAG,WAAU;MAAsB,UAAA;KAAkC,CAAA,EAE5D,CAAA,CACT,EAAA,CAAA,CACH;;IAGL,kBAACjC,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD;KAAW,WAAU;KAArB,UAAA,CACE,kBAACO,GAAD,EAAQ,MAAM,GAAK,CAAA,GAAC,wBAEX;IACD,CAAA,EAAA,CAAA,GACZ,kBAACN,GAAD,EAAA,UACGhD,EAAM,aAAa,SAAS,IAC3B,kBAAC,OAAD;KAAK,WAAU;KACZ,UAAAA,EAAM,aAAa,KAAK,MACvB,kBAAC+E,GAAD;MAAiB,SAAQ;MAAY,WAAU;MAC5C,UAAAC;KACI,GAFKA,CAEL,CACR;IACE,CAAA,IAEL,kBAAC,KAAD;KAAG,WAAU;KAAsB,UAAA;IAA4B,CAAA,EAEtD,CAAA,CACT,EAAA,CAAA;IAGN,kBAACnC,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD;KAAW,WAAU;KAArB,UAAA,CACE,kBAACW,GAAD,EAAQ,MAAM,GAAK,CAAA,GAAC,sBAEX;IACD,CAAA,EAAA,CAAA,GACZ,kBAACV,GAAD,EAAA,UACGhD,EAAM,oBAAoB,SAAS,IAClC,kBAAC,OAAD;KAAK,WAAU;KACZ,UAAAA,EAAM,oBAAoB,KAAK,MAC9B,kBAAC+E,GAAD;MAAsB,SAAQ;MAC3B,UAAAE;KACI,GAFKA,CAEL,CACR;IACE,CAAA,IAEL,kBAAC,KAAD;KAAG,WAAU;KAAsB,UAAA;IAA0B,CAAA,EAEpD,CAAA,CACT,EAAA,CAAA;IAGN,kBAACpC,GAAD,EAAA,UAAA,CACE,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD;KAAW,WAAU;KAArB,UAAA,CACE,kBAACmC,IAAD,EAAU,MAAM,GAAK,CAAA,GAAC,UAEb;IACD,CAAA,EAAA,CAAA,GACZ,kBAAClC,GAAD,EAAA,UACE,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;OAAsB,UAAA;MAAU,CAAA,GAC7C,kBAAC,KAAD;OAAG,WAAU;OAAe,UAAAmC,EAAmBnF,EAAM,SAAS;MAAK,CAAA,CAChE,EAAA,CAAA;MACL,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;OAAsB,UAAA;MAAU,CAAA,GAC7C,kBAAC,KAAD;OAAG,WAAU;OAAe,UAAAmF,EAAmBnF,EAAM,SAAS;MAAK,CAAA,CAChE,EAAA,CAAA;MACL,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;OAAsB,UAAA;MAAO,CAAA,GAC1C,kBAAC,OAAD;OAAK,WAAU;OACZ,UAAAA,EAAM,KAAK,SAAS,IACnBA,EAAM,KAAK,KAAK,MACd,kBAAC+E,GAAD;QAAiB,SAAQ;QAAY,WAAU;QAC5C,UAAAK;OACI,GAFKA,CAEL,CACR,IAED,kBAAC,QAAD;QAAM,WAAU;QAAsB,UAAA;OAAU,CAAA;MAE/C,CAAA,CACF,EAAA,CAAA;KACF;IACM,CAAA,EAAA,CAAA,CACT,EAAA,CAAA;GACH;;CACK,CAAA;AAEhB"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const SkillsPage: 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 { useSkills as _ } from "../hooks/useSkills.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 { useSkills as _ } from "../hooks/useSkills.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, FileText as T, Filter as E, Package as D, Plus as O, Search as k, Sparkles as A, Wrench as j } from "lucide-react";
21
- //#region src/botlit/pages/SkillsPage.tsx
21
+ // src/botlit/pages/SkillsPage.tsx
22
22
  var M = () => {
23
- let M = e(), { getPath: N } = t(), [P, F] = v(""), { data: I, loading: L, error: R, refetch: z } = _({ search: P });
24
- return /* @__PURE__ */ x(a, {
23
+ let M = t(), { getPath: N } = e(), [P, F] = v(""), { data: I, loading: L, error: R, refetch: z } = _({ search: P });
24
+ return /* @__PURE__ */ x(n, {
25
25
  title: M("botlit.skills.title", "Skills"),
26
26
  description: M("botlit.skills.description", "Reusable skill bundles that combine prompts, tools, and knowledge"),
27
27
  actions: /* @__PURE__ */ x(i, {
28
28
  permission: r.SKILL_CREATE,
29
- children: /* @__PURE__ */ x(o, {
29
+ children: /* @__PURE__ */ x(u, {
30
30
  leftIcon: /* @__PURE__ */ x(O, { size: 16 }),
31
31
  children: /* @__PURE__ */ x(C, {
32
32
  to: N("skills/new"),
@@ -45,13 +45,13 @@ var M = () => {
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(k, { 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(k, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ x(d, {
49
49
  placeholder: M("botlit.skills.searchPlaceholder", "Search skills..."),
50
50
  value: P,
51
51
  onChange: (e) => F(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(E, { size: 16 }),
57
57
  children: M("botlit.skills.actions.filters", "Filters")
@@ -67,7 +67,7 @@ var M = () => {
67
67
  5,
68
68
  6
69
69
  ].map((e) => /* @__PURE__ */ x("div", { className: "h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" }, e))
70
- }) : R ? /* @__PURE__ */ x(g, {
70
+ }) : R ? /* @__PURE__ */ x(h, {
71
71
  resource: "skills",
72
72
  error: R,
73
73
  onRetry: () => void z()
@@ -75,24 +75,24 @@ var M = () => {
75
75
  className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",
76
76
  children: I.map((e) => /* @__PURE__ */ x(C, {
77
77
  to: N(`skills/${e.id}`),
78
- children: /* @__PURE__ */ S(s, {
78
+ children: /* @__PURE__ */ S(a, {
79
79
  className: "h-full hover:border-primary/50 transition-colors cursor-pointer",
80
- children: [/* @__PURE__ */ x(u, { children: /* @__PURE__ */ S("div", {
80
+ children: [/* @__PURE__ */ x(c, { children: /* @__PURE__ */ S("div", {
81
81
  className: "flex items-start justify-between",
82
82
  children: [/* @__PURE__ */ S("div", {
83
83
  className: "flex items-center gap-3",
84
84
  children: [/* @__PURE__ */ x("div", {
85
85
  className: "p-2 bg-gradient-to-br from-primary/20 to-primary/5 rounded-lg",
86
86
  children: /* @__PURE__ */ x(A, { className: "h-5 w-5 text-primary" })
87
- }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x(d, {
87
+ }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x(l, {
88
88
  className: "text-base",
89
89
  children: e.name
90
- }), /* @__PURE__ */ x(l, {
90
+ }), /* @__PURE__ */ x(s, {
91
91
  className: "text-xs line-clamp-1",
92
92
  children: e.description
93
93
  })] })]
94
94
  }), /* @__PURE__ */ x(p, { status: e.status })]
95
- }) }), /* @__PURE__ */ x(c, { children: /* @__PURE__ */ S("div", {
95
+ }) }), /* @__PURE__ */ x(o, { children: /* @__PURE__ */ S("div", {
96
96
  className: "space-y-3",
97
97
  children: [/* @__PURE__ */ S("div", {
98
98
  className: "flex flex-wrap gap-2",
@@ -118,7 +118,7 @@ var M = () => {
118
118
  children: [
119
119
  M("botlit.botsList.createdLabel", "Created"),
120
120
  " ",
121
- n(e.createdAt)
121
+ g(e.createdAt)
122
122
  ]
123
123
  })]
124
124
  }) })]
@@ -130,7 +130,7 @@ var M = () => {
130
130
  description: M("botlit.skills.empty.description", "Create reusable skill bundles to quickly configure agents with common capabilities."),
131
131
  action: /* @__PURE__ */ x(i, {
132
132
  permission: r.SKILL_CREATE,
133
- children: /* @__PURE__ */ x(o, {
133
+ children: /* @__PURE__ */ x(u, {
134
134
  leftIcon: /* @__PURE__ */ x(O, { size: 16 }),
135
135
  children: /* @__PURE__ */ x(C, {
136
136
  to: N("skills/new"),
@@ -226,7 +226,6 @@ var M = () => {
226
226
  })
227
227
  });
228
228
  };
229
- //#endregion
230
229
  export { M as SkillsPage };
231
230
 
232
231
  //# sourceMappingURL=SkillsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SkillsPage.js","names":[],"sources":["../../../src/botlit/pages/SkillsPage.tsx"],"sourcesContent":["/**\n * Skills Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { Link } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport {\n Plus,\n Search as SearchIcon,\n Filter,\n Sparkles,\n FileText,\n Wrench,\n Database,\n Package,\n} from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useSkills } from '../hooks';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const SkillsPage: FC = () => {\n const t = useTr();\n const { getPath } = useBotlit();\n const [search, setSearch] = useState('');\n const { data: skills, loading, error, refetch } = useSkills({ search });\n\n return (\n <PageLayout\n title={t('botlit.skills.title', 'Skills')}\n description={t(\n 'botlit.skills.description',\n 'Reusable skill bundles that combine prompts, tools, and knowledge'\n )}\n actions={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.SKILL_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('skills/new')}>\n {t('botlit.skills.actions.createSkill', 'Create Skill')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Sparkles size={18} />}>\n {t(\n 'botlit.skills.purpose',\n 'A skill is a reusable bundle that packages a prompt template, a tool policy and a knowledge (retrieval) profile into one capability you can drop onto any agent. Build a skill once — say \"Customer Support\" or \"Code Review\" — and reuse it across agents instead of wiring the same prompt, tools and knowledge by hand each time.'\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.skills.searchPlaceholder', 'Search skills...')}\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.skills.actions.filters', 'Filters')}\n </Button>\n </div>\n\n {/* Skills List */}\n {loading ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {[1, 2, 3, 4, 5, 6].map((i) => (\n <div\n key={i}\n className=\"h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"skills\" error={error} onRetry={() => void refetch()} />\n ) : skills.length > 0 ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {skills.map(\n (skill: {\n id: string;\n name: string;\n description?: string | null;\n status: string;\n promptTemplateId?: string | null;\n toolPolicyId?: string | null;\n retrievalProfileId?: string | null;\n createdAt: string;\n }) => (\n <Link key={skill.id} to={getPath(`skills/${skill.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-gradient-to-br from-primary/20 to-primary/5 rounded-lg\">\n <Sparkles className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <CardTitle className=\"text-base\">{skill.name}</CardTitle>\n <CardDescription className=\"text-xs line-clamp-1\">\n {skill.description}\n </CardDescription>\n </div>\n </div>\n <StatusBadge status={skill.status} />\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {/* Capabilities */}\n <div className=\"flex flex-wrap gap-2\">\n {skill.promptTemplateId && (\n <Badge variant=\"outline\" className=\"text-xs flex items-center gap-1\">\n <FileText size={10} />\n {t('botlit.skills.badge.prompt', 'Prompt')}\n </Badge>\n )}\n {skill.toolPolicyId && (\n <Badge variant=\"outline\" className=\"text-xs flex items-center gap-1\">\n <Wrench size={10} />\n {t('botlit.skills.badge.tools', 'Tools')}\n </Badge>\n )}\n {skill.retrievalProfileId && (\n <Badge variant=\"outline\" className=\"text-xs flex items-center gap-1\">\n <Database size={10} />\n {t('botlit.skills.badge.knowledge', 'Knowledge')}\n </Badge>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"pt-3 border-t border-border-subtle text-xs text-text-secondary\">\n {t('botlit.botsList.createdLabel', 'Created')}{' '}\n {formatRelativeTime(skill.createdAt)}\n </div>\n </div>\n </CardContent>\n </Card>\n </Link>\n )\n )}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-generic\"\n title={t('botlit.skills.empty.title', 'No skills created')}\n description={t(\n 'botlit.skills.empty.description',\n 'Create reusable skill bundles to quickly configure agents with common capabilities.'\n )}\n action={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.SKILL_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('skills/new')}>\n {t('botlit.skills.actions.createSkill', 'Create Skill')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n />\n )}\n\n {/* Skills Overview */}\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 <Package size={18} />\n {t('botlit.skills.overview.title', 'What are Skills?')}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.skills.overview.description',\n 'Skills are composable bundles that encapsulate agent capabilities'\n )}\n </p>\n </div>\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 <FileText size={16} className=\"text-primary\" />\n {t('botlit.skills.overview.promptTitle', 'Prompt Templates')}\n </h4>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.skills.overview.promptDescription',\n 'Pre-configured system prompts with variable support for consistent agent behavior.'\n )}\n </p>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Wrench size={16} className=\"text-primary\" />\n {t('botlit.skills.overview.toolsTitle', 'Tool Configurations')}\n </h4>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.skills.overview.toolsDescription',\n 'Bundled MCP tool packs with policies defining allowed operations and limits.'\n )}\n </p>\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.skills.overview.knowledgeTitle', 'Knowledge Bindings')}\n </h4>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.skills.overview.knowledgeDescription',\n 'Pre-configured retrieval profiles for domain-specific knowledge access.'\n )}\n </p>\n </div>\n </div>\n\n <div className=\"mt-6 p-4 bg-bg-sunken rounded-lg\">\n <h4 className=\"font-medium mb-2\">\n {t('botlit.skills.overview.useCases.title', 'Use Cases')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n •{' '}\n {t(\n 'botlit.skills.overview.useCases.case1',\n 'Create a \"Customer Support\" skill with FAQ knowledge and ticketing tools'\n )}\n </li>\n <li>\n •{' '}\n {t(\n 'botlit.skills.overview.useCases.case2',\n 'Build a \"Code Review\" skill with GitHub tools and coding guidelines'\n )}\n </li>\n <li>\n •{' '}\n {t(\n 'botlit.skills.overview.useCases.case3',\n 'Package a \"Sales Assistant\" skill with CRM tools and product catalog'\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":"SkillsPage.js","names":["SearchIcon","SkillsPage","t","useTr","useBotlit","search","setSearch","useState","skills","useSkills","PageLayout","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Button","Plus","Link","getPath","PagePurpose","Sparkles","Search","Input","Filter","loading","i","error","ErrorState","refetch","skill","Card","CardHeader","CardTitle","CardDescription","StatusBadge","CardContent","Badge","FileText","Wrench","Database","formatRelativeTime","EmptyState","GlassCard","Package"],"sources":["../../../src/botlit/pages/SkillsPage.tsx"],"sourcesContent":["/**\n * Skills Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useState } from 'react';\nimport { Link } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport {\n Plus,\n Search as SearchIcon,\n Filter,\n Sparkles,\n FileText,\n Wrench,\n Database,\n Package,\n} from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { PagePurpose, GlassCard } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Input } from '../components/Input';\nimport { Badge, StatusBadge } from '../components/Badge';\nimport { EmptyState } from '../components/EmptyState';\nimport { ErrorState } from '../components/ErrorState';\nimport { useSkills } from '../hooks';\nimport { formatRelativeTime } from '../utils/formatters';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nexport const SkillsPage: FC = () => {\n const t = useTr();\n const { getPath } = useBotlit();\n const [search, setSearch] = useState('');\n const { data: skills, loading, error, refetch } = useSkills({ search });\n\n return (\n <PageLayout\n title={t('botlit.skills.title', 'Skills')}\n description={t(\n 'botlit.skills.description',\n 'Reusable skill bundles that combine prompts, tools, and knowledge'\n )}\n actions={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.SKILL_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('skills/new')}>\n {t('botlit.skills.actions.createSkill', 'Create Skill')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Sparkles size={18} />}>\n {t(\n 'botlit.skills.purpose',\n 'A skill is a reusable bundle that packages a prompt template, a tool policy and a knowledge (retrieval) profile into one capability you can drop onto any agent. Build a skill once — say \"Customer Support\" or \"Code Review\" — and reuse it across agents instead of wiring the same prompt, tools and knowledge by hand each time.'\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.skills.searchPlaceholder', 'Search skills...')}\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.skills.actions.filters', 'Filters')}\n </Button>\n </div>\n\n {/* Skills List */}\n {loading ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {[1, 2, 3, 4, 5, 6].map((i) => (\n <div\n key={i}\n className=\"h-48 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg\"\n />\n ))}\n </div>\n ) : error ? (\n <ErrorState resource=\"skills\" error={error} onRetry={() => void refetch()} />\n ) : skills.length > 0 ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {skills.map(\n (skill: {\n id: string;\n name: string;\n description?: string | null;\n status: string;\n promptTemplateId?: string | null;\n toolPolicyId?: string | null;\n retrievalProfileId?: string | null;\n createdAt: string;\n }) => (\n <Link key={skill.id} to={getPath(`skills/${skill.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-gradient-to-br from-primary/20 to-primary/5 rounded-lg\">\n <Sparkles className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <CardTitle className=\"text-base\">{skill.name}</CardTitle>\n <CardDescription className=\"text-xs line-clamp-1\">\n {skill.description}\n </CardDescription>\n </div>\n </div>\n <StatusBadge status={skill.status} />\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {/* Capabilities */}\n <div className=\"flex flex-wrap gap-2\">\n {skill.promptTemplateId && (\n <Badge variant=\"outline\" className=\"text-xs flex items-center gap-1\">\n <FileText size={10} />\n {t('botlit.skills.badge.prompt', 'Prompt')}\n </Badge>\n )}\n {skill.toolPolicyId && (\n <Badge variant=\"outline\" className=\"text-xs flex items-center gap-1\">\n <Wrench size={10} />\n {t('botlit.skills.badge.tools', 'Tools')}\n </Badge>\n )}\n {skill.retrievalProfileId && (\n <Badge variant=\"outline\" className=\"text-xs flex items-center gap-1\">\n <Database size={10} />\n {t('botlit.skills.badge.knowledge', 'Knowledge')}\n </Badge>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"pt-3 border-t border-border-subtle text-xs text-text-secondary\">\n {t('botlit.botsList.createdLabel', 'Created')}{' '}\n {formatRelativeTime(skill.createdAt)}\n </div>\n </div>\n </CardContent>\n </Card>\n </Link>\n )\n )}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-generic\"\n title={t('botlit.skills.empty.title', 'No skills created')}\n description={t(\n 'botlit.skills.empty.description',\n 'Create reusable skill bundles to quickly configure agents with common capabilities.'\n )}\n action={\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.SKILL_CREATE}>\n <Button leftIcon={<Plus size={16} />}>\n <Link to={getPath('skills/new')}>\n {t('botlit.skills.actions.createSkill', 'Create Skill')}\n </Link>\n </Button>\n </BotmanorPermissionGate>\n }\n />\n )}\n\n {/* Skills Overview */}\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 <Package size={18} />\n {t('botlit.skills.overview.title', 'What are Skills?')}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.skills.overview.description',\n 'Skills are composable bundles that encapsulate agent capabilities'\n )}\n </p>\n </div>\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 <FileText size={16} className=\"text-primary\" />\n {t('botlit.skills.overview.promptTitle', 'Prompt Templates')}\n </h4>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.skills.overview.promptDescription',\n 'Pre-configured system prompts with variable support for consistent agent behavior.'\n )}\n </p>\n </div>\n <div className=\"space-y-2\">\n <h4 className=\"font-medium flex items-center gap-2\">\n <Wrench size={16} className=\"text-primary\" />\n {t('botlit.skills.overview.toolsTitle', 'Tool Configurations')}\n </h4>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.skills.overview.toolsDescription',\n 'Bundled MCP tool packs with policies defining allowed operations and limits.'\n )}\n </p>\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.skills.overview.knowledgeTitle', 'Knowledge Bindings')}\n </h4>\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'botlit.skills.overview.knowledgeDescription',\n 'Pre-configured retrieval profiles for domain-specific knowledge access.'\n )}\n </p>\n </div>\n </div>\n\n <div className=\"mt-6 p-4 bg-bg-sunken rounded-lg\">\n <h4 className=\"font-medium mb-2\">\n {t('botlit.skills.overview.useCases.title', 'Use Cases')}\n </h4>\n <ul className=\"text-sm text-text-secondary space-y-1\">\n <li>\n •{' '}\n {t(\n 'botlit.skills.overview.useCases.case1',\n 'Create a \"Customer Support\" skill with FAQ knowledge and ticketing tools'\n )}\n </li>\n <li>\n •{' '}\n {t(\n 'botlit.skills.overview.useCases.case2',\n 'Build a \"Code Review\" skill with GitHub tools and coding guidelines'\n )}\n </li>\n <li>\n •{' '}\n {t(\n 'botlit.skills.overview.useCases.case3',\n 'Package a \"Sales Assistant\" skill with CRM tools and product catalog'\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 StorePackageDetailPage: FC;