@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,23 +1,23 @@
1
1
  import { useBotlit as e } from "../providers/BotlitProvider.js";
2
- import { formatRelativeTime as t } from "../utils/formatters.js";
2
+ import { PageLayout as t } from "../components/PageLayout.js";
3
3
  import { BOTMANOR_PERMISSIONS as n } from "../permissions/botmanorPermissions.js";
4
4
  import { BotmanorPermissionGate as r } from "../permissions/useBotmanorPermissions.js";
5
- import { PageLayout as i } from "../components/PageLayout.js";
6
- import { Button as a } from "../components/Button.js";
7
- import "../permissions/index.js";
8
- import { Card as o, CardContent as s, CardDescription as c, CardHeader as l, CardTitle as u } from "../components/Card.js";
5
+ import { EmptyState as i } from "../components/EmptyState.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";
9
8
  import { Badge as d } from "../components/Badge.js";
10
- import { EmptyState as f } from "../components/EmptyState.js";
11
- import { useInstallPackage as p, useStorePackage as m } from "../hooks/useStore.js";
12
9
  import "../hooks/index.js";
10
+ import { formatRelativeTime as f } from "../utils/formatters.js";
11
+ import { useInstallPackage as p, useStorePackage as m } from "../hooks/useStore.js";
13
12
  import { InstallMode as h } from "../../generated/wspace-types.js";
13
+ import "../permissions/index.js";
14
14
  import { useMemo as g, useState as _ } from "react";
15
15
  import { PagePurpose as v } from "@burdenoff/fe-libs/ui";
16
16
  import { jsx as y, jsxs as b } from "react/jsx-runtime";
17
17
  import { useParams as x } from "react-router";
18
18
  import { AlertTriangle as S, ArrowLeft as C, CheckCircle as w, Download as T, ExternalLink as E, FileText as D, GitBranch as O, Globe as k, Package as A, Shield as j, Tag as M } from "lucide-react";
19
19
  import { toast as N } from "sonner";
20
- //#region src/botlit/pages/StorePackageDetailPage.tsx
20
+ // src/botlit/pages/StorePackageDetailPage.tsx
21
21
  var P = {
22
22
  APP: "Bot",
23
23
  AGENT: "Agent",
@@ -101,14 +101,14 @@ var z = () => {
101
101
  N.success(`Installed "${q.name ?? z.slug}"`), K(!1), L("store/installed");
102
102
  }
103
103
  };
104
- return B ? /* @__PURE__ */ y(i, {
104
+ return B ? /* @__PURE__ */ y(t, {
105
105
  title: "Loading...",
106
106
  children: /* @__PURE__ */ y("div", { className: "h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" })
107
- }) : z ? /* @__PURE__ */ b(i, {
107
+ }) : z ? /* @__PURE__ */ b(t, {
108
108
  title: /* @__PURE__ */ b("div", {
109
109
  className: "flex items-center gap-3",
110
110
  children: [
111
- /* @__PURE__ */ y(a, {
111
+ /* @__PURE__ */ y(u, {
112
112
  variant: "ghost",
113
113
  size: "icon",
114
114
  onClick: () => L("store"),
@@ -139,14 +139,14 @@ var z = () => {
139
139
  href: q.homepage,
140
140
  target: "_blank",
141
141
  rel: "noopener noreferrer",
142
- children: /* @__PURE__ */ y(a, {
142
+ children: /* @__PURE__ */ y(u, {
143
143
  variant: "outline",
144
144
  leftIcon: /* @__PURE__ */ y(E, { size: 16 }),
145
145
  children: "Homepage"
146
146
  })
147
147
  }), /* @__PURE__ */ y(r, {
148
148
  permission: n.STORE_CREATE,
149
- children: /* @__PURE__ */ y(a, {
149
+ children: /* @__PURE__ */ y(u, {
150
150
  leftIcon: /* @__PURE__ */ y(T, { size: 16 }),
151
151
  onClick: () => K(!0),
152
152
  children: "Install"
@@ -163,10 +163,10 @@ var z = () => {
163
163
  /* @__PURE__ */ b("div", {
164
164
  className: "grid grid-cols-2 md:grid-cols-4 gap-4",
165
165
  children: [
166
- /* @__PURE__ */ y(o, {
166
+ /* @__PURE__ */ y(a, {
167
167
  treatment: "glass",
168
168
  glow: !0,
169
- children: /* @__PURE__ */ b(s, {
169
+ children: /* @__PURE__ */ b(o, {
170
170
  className: "pt-6 text-center",
171
171
  children: [/* @__PURE__ */ y(d, {
172
172
  variant: "outline",
@@ -178,7 +178,7 @@ var z = () => {
178
178
  })]
179
179
  })
180
180
  }),
181
- /* @__PURE__ */ y(o, { children: /* @__PURE__ */ b(s, {
181
+ /* @__PURE__ */ y(a, { children: /* @__PURE__ */ b(o, {
182
182
  className: "pt-6 text-center",
183
183
  children: [/* @__PURE__ */ b("p", {
184
184
  className: "text-lg font-bold",
@@ -188,14 +188,14 @@ var z = () => {
188
188
  children: "Version"
189
189
  })]
190
190
  }) }),
191
- /* @__PURE__ */ y(o, { children: /* @__PURE__ */ b(s, {
191
+ /* @__PURE__ */ y(a, { children: /* @__PURE__ */ b(o, {
192
192
  className: "pt-6 text-center",
193
193
  children: [/* @__PURE__ */ y(F, { risk: q.risk }), /* @__PURE__ */ y("p", {
194
194
  className: "text-sm text-text-secondary mt-1",
195
195
  children: "Security"
196
196
  })]
197
197
  }) }),
198
- /* @__PURE__ */ y(o, { children: /* @__PURE__ */ b(s, {
198
+ /* @__PURE__ */ y(a, { children: /* @__PURE__ */ b(o, {
199
199
  className: "pt-6 text-center",
200
200
  children: [/* @__PURE__ */ y("p", {
201
201
  className: "text-lg font-bold",
@@ -207,7 +207,7 @@ var z = () => {
207
207
  }) })
208
208
  ]
209
209
  }),
210
- /* @__PURE__ */ b(o, { children: [/* @__PURE__ */ y(l, { children: /* @__PURE__ */ y(u, { children: "Description" }) }), /* @__PURE__ */ b(s, { children: [/* @__PURE__ */ y("p", {
210
+ /* @__PURE__ */ b(a, { children: [/* @__PURE__ */ y(c, { children: /* @__PURE__ */ y(l, { children: "Description" }) }), /* @__PURE__ */ b(o, { children: [/* @__PURE__ */ y("p", {
211
211
  className: "text-text-primary",
212
212
  children: q.description ?? "—"
213
213
  }), q.tags.length > 0 && /* @__PURE__ */ b("div", {
@@ -220,17 +220,17 @@ var z = () => {
220
220
  children: e
221
221
  }, e))]
222
222
  })] })] }),
223
- z.readme && /* @__PURE__ */ b(o, { children: [/* @__PURE__ */ y(l, { children: /* @__PURE__ */ b(u, {
223
+ z.readme && /* @__PURE__ */ b(a, { children: [/* @__PURE__ */ y(c, { children: /* @__PURE__ */ b(l, {
224
224
  className: "flex items-center gap-2",
225
225
  children: [/* @__PURE__ */ y(D, { size: 18 }), "README"]
226
- }) }), /* @__PURE__ */ y(s, { children: /* @__PURE__ */ y("div", {
226
+ }) }), /* @__PURE__ */ y(o, { children: /* @__PURE__ */ y("div", {
227
227
  className: "prose prose-sm max-w-none dark:prose-invert",
228
228
  children: /* @__PURE__ */ y("pre", {
229
229
  className: "whitespace-pre-wrap text-sm",
230
230
  children: z.readme
231
231
  })
232
232
  }) })] }),
233
- /* @__PURE__ */ b(o, { children: [/* @__PURE__ */ y(l, { children: /* @__PURE__ */ y(u, { children: "Author & Links" }) }), /* @__PURE__ */ y(s, { children: /* @__PURE__ */ b("div", {
233
+ /* @__PURE__ */ b(a, { children: [/* @__PURE__ */ y(c, { children: /* @__PURE__ */ y(l, { children: "Author & Links" }) }), /* @__PURE__ */ y(o, { children: /* @__PURE__ */ b("div", {
234
234
  className: "grid grid-cols-2 md:grid-cols-4 gap-6",
235
235
  children: [
236
236
  /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
@@ -254,7 +254,7 @@ var z = () => {
254
254
  children: "Published"
255
255
  }), /* @__PURE__ */ y("p", {
256
256
  className: "font-medium mt-1",
257
- children: t(z.publishedAt)
257
+ children: f(z.publishedAt)
258
258
  })] }),
259
259
  q.repository && /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
260
260
  className: "text-sm text-text-secondary",
@@ -278,11 +278,11 @@ var z = () => {
278
278
  })] })
279
279
  ]
280
280
  }) })] }),
281
- q.dependencies.length > 0 && /* @__PURE__ */ b(o, { children: [/* @__PURE__ */ b(l, { children: [/* @__PURE__ */ y(u, { children: "Dependencies" }), /* @__PURE__ */ b(c, { children: [
281
+ q.dependencies.length > 0 && /* @__PURE__ */ b(a, { children: [/* @__PURE__ */ b(c, { children: [/* @__PURE__ */ y(l, { children: "Dependencies" }), /* @__PURE__ */ b(s, { children: [
282
282
  "This package depends on ",
283
283
  q.dependencies.length,
284
284
  " other package(s)"
285
- ] })] }), /* @__PURE__ */ y(s, { children: /* @__PURE__ */ y("div", {
285
+ ] })] }), /* @__PURE__ */ y(o, { children: /* @__PURE__ */ y("div", {
286
286
  className: "flex flex-wrap gap-2",
287
287
  children: q.dependencies.map((e) => /* @__PURE__ */ b(d, {
288
288
  variant: "outline",
@@ -296,10 +296,10 @@ var z = () => {
296
296
  }) })] }),
297
297
  /* @__PURE__ */ b("div", {
298
298
  className: "grid grid-cols-1 md:grid-cols-2 gap-6",
299
- children: [/* @__PURE__ */ b(o, { children: [/* @__PURE__ */ y(l, { children: /* @__PURE__ */ b(u, {
299
+ children: [/* @__PURE__ */ b(a, { children: [/* @__PURE__ */ y(c, { children: /* @__PURE__ */ b(l, {
300
300
  className: "flex items-center gap-2",
301
301
  children: [/* @__PURE__ */ y(w, { size: 18 }), "Compatibility"]
302
- }) }), /* @__PURE__ */ y(s, { children: /* @__PURE__ */ y("div", {
302
+ }) }), /* @__PURE__ */ y(o, { children: /* @__PURE__ */ y("div", {
303
303
  className: "space-y-2",
304
304
  children: Object.keys(q.compatibility).length === 0 ? /* @__PURE__ */ y("p", {
305
305
  className: "text-sm text-text-secondary",
@@ -314,10 +314,10 @@ var z = () => {
314
314
  children: t
315
315
  })]
316
316
  }, e))
317
- }) })] }), /* @__PURE__ */ b(o, { children: [/* @__PURE__ */ y(l, { children: /* @__PURE__ */ b(u, {
317
+ }) })] }), /* @__PURE__ */ b(a, { children: [/* @__PURE__ */ y(c, { children: /* @__PURE__ */ b(l, {
318
318
  className: "flex items-center gap-2",
319
319
  children: [/* @__PURE__ */ y(j, { size: 18 }), "Security"]
320
- }) }), /* @__PURE__ */ y(s, { children: /* @__PURE__ */ b("div", {
320
+ }) }), /* @__PURE__ */ y(o, { children: /* @__PURE__ */ b("div", {
321
321
  className: "space-y-3",
322
322
  children: [
323
323
  /* @__PURE__ */ b("div", {
@@ -351,7 +351,7 @@ var z = () => {
351
351
  ]
352
352
  }) })] })]
353
353
  }),
354
- /* @__PURE__ */ b(o, { children: [/* @__PURE__ */ y(l, { children: /* @__PURE__ */ y(u, { children: "Integrity" }) }), /* @__PURE__ */ y(s, { children: /* @__PURE__ */ b("div", {
354
+ /* @__PURE__ */ b(a, { children: [/* @__PURE__ */ y(c, { children: /* @__PURE__ */ y(l, { children: "Integrity" }) }), /* @__PURE__ */ y(o, { children: /* @__PURE__ */ b("div", {
355
355
  className: "space-y-2",
356
356
  children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
357
357
  className: "text-sm text-text-secondary",
@@ -370,14 +370,14 @@ var z = () => {
370
370
  ]
371
371
  }), G && /* @__PURE__ */ y("div", {
372
372
  className: "fixed inset-0 bg-black/50 flex items-center justify-center z-50",
373
- children: /* @__PURE__ */ b(o, {
373
+ children: /* @__PURE__ */ b(a, {
374
374
  className: "w-full max-w-md",
375
- children: [/* @__PURE__ */ b(l, { children: [/* @__PURE__ */ y(u, { children: "Install Package" }), /* @__PURE__ */ b(c, { children: [
375
+ children: [/* @__PURE__ */ b(c, { children: [/* @__PURE__ */ y(l, { children: "Install Package" }), /* @__PURE__ */ b(s, { children: [
376
376
  "Install ",
377
377
  q.name ?? z.slug,
378
378
  " v",
379
379
  z.version
380
- ] })] }), /* @__PURE__ */ b(s, {
380
+ ] })] }), /* @__PURE__ */ b(o, {
381
381
  className: "space-y-4",
382
382
  children: [
383
383
  /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
@@ -434,11 +434,11 @@ var z = () => {
434
434
  }),
435
435
  /* @__PURE__ */ b("div", {
436
436
  className: "flex justify-end gap-2 pt-4",
437
- children: [/* @__PURE__ */ y(a, {
437
+ children: [/* @__PURE__ */ y(u, {
438
438
  variant: "outline",
439
439
  onClick: () => K(!1),
440
440
  children: "Cancel"
441
- }), /* @__PURE__ */ y(a, {
441
+ }), /* @__PURE__ */ y(u, {
442
442
  onClick: () => void J(),
443
443
  isLoading: H,
444
444
  leftIcon: /* @__PURE__ */ y(T, { size: 16 }),
@@ -449,20 +449,19 @@ var z = () => {
449
449
  })]
450
450
  })
451
451
  })]
452
- }) : /* @__PURE__ */ y(i, {
452
+ }) : /* @__PURE__ */ y(t, {
453
453
  title: "Package Not Found",
454
- children: /* @__PURE__ */ y(f, {
454
+ children: /* @__PURE__ */ y(i, {
455
455
  illustration: "empty-search",
456
456
  title: "Package Not Found",
457
457
  description: "This package doesn't exist.",
458
- action: /* @__PURE__ */ y(a, {
458
+ action: /* @__PURE__ */ y(u, {
459
459
  onClick: () => L("store"),
460
460
  children: "Back to Store"
461
461
  })
462
462
  })
463
463
  });
464
464
  };
465
- //#endregion
466
465
  export { z as StorePackageDetailPage };
467
466
 
468
467
  //# sourceMappingURL=StorePackageDetailPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorePackageDetailPage.js","names":[],"sources":["../../../src/botlit/pages/StorePackageDetailPage.tsx"],"sourcesContent":["/**\n * Store Package Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useMemo, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport {\n ArrowLeft,\n Package,\n Download,\n Shield,\n ExternalLink,\n FileText,\n Tag,\n GitBranch,\n CheckCircle,\n AlertTriangle,\n Globe,\n} from 'lucide-react';\nimport { PageLayout } from '../components/PageLayout';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { EmptyState } from '../components/EmptyState';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge } from '../components/Badge';\nimport { toast } from 'sonner';\nimport { useStorePackage, useInstallPackage } from '../hooks';\nimport { formatRelativeTime, MISSING_VALUE } from '../utils/formatters';\nimport { InstallMode as GqlInstallMode } from '../../generated/wspace-types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nconst KindLabel: Record<string, string> = {\n APP: 'Bot',\n AGENT: 'Agent',\n MCP_PACK: 'MCP Pack',\n PROMPT_TEMPLATE: 'Prompt Template',\n PROMPT: 'Prompt',\n SKILL: 'Skill',\n RETRIEVAL_PROFILE: 'Retrieval Profile',\n POLICY_BUNDLE: 'Policy Bundle',\n CHANNEL_TEMPLATE: 'Channel Template',\n A2A_AGENT: 'A2A Agent',\n KB_TEMPLATE: 'KB Template',\n KNOWLEDGE_BASE: 'Knowledge Base',\n INTEGRATION: 'Integration',\n TEMPLATE: 'Template',\n TOOL: 'Tool',\n WORKFLOW: 'Workflow',\n};\n\nconst RiskBadge: FC<{ risk: string | undefined }> = ({ risk }) => {\n const variants: Record<string, 'success' | 'warning' | 'destructive'> = {\n low: 'success',\n medium: 'warning',\n high: 'destructive',\n };\n if (!risk) {\n return <Badge variant=\"secondary\">Risk unknown</Badge>;\n }\n return (\n <Badge variant={variants[risk] ?? 'secondary'} className=\"capitalize\">\n {risk} Risk\n </Badge>\n );\n};\n\ninterface PackageDependencyView {\n slug: string;\n version: string;\n}\n\n/**\n * The manifest is free-form JSON on the service, so every field is read\n * defensively — a package published without a section must not blank the page.\n */\ninterface ManifestView {\n name?: string;\n slug?: string;\n description?: string;\n icon?: string;\n license?: string;\n homepage?: string;\n repository?: string;\n authorName?: string;\n authorUrl?: string;\n tags: string[];\n dependencies: PackageDependencyView[];\n compatibility: Record<string, string>;\n risk?: string;\n requiresSecrets: boolean;\n networkEgress?: string;\n checksum?: string;\n signature?: string;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === 'string' && value !== '' ? value : undefined;\n}\n\nfunction readManifest(manifest: Record<string, unknown>): ManifestView {\n const info = asRecord(manifest.package);\n const author = asRecord(info.author);\n const security = asRecord(manifest.security);\n const integrity = asRecord(manifest.integrity);\n const compatibilitySource = asRecord(manifest.compatibility);\n\n const compatibility: Record<string, string> = {};\n for (const [key, value] of Object.entries(compatibilitySource)) {\n const text = asString(value);\n if (text) compatibility[key] = text;\n }\n\n const dependencies: PackageDependencyView[] = Array.isArray(manifest.dependencies)\n ? manifest.dependencies.flatMap((entry) => {\n const dep = asRecord(entry);\n const slug = asString(dep.slug);\n return slug ? [{ slug, version: asString(dep.version) ?? '*' }] : [];\n })\n : [];\n\n return {\n name: asString(info.name),\n slug: asString(info.slug),\n description: asString(info.description),\n icon: asString(info.icon),\n license: asString(info.license),\n homepage: asString(info.homepage),\n repository: asString(info.repository),\n authorName: asString(author.name),\n authorUrl: asString(author.url),\n tags: Array.isArray(info.tags)\n ? info.tags.filter((tag): tag is string => typeof tag === 'string')\n : [],\n dependencies,\n compatibility,\n risk: asString(security.risk),\n requiresSecrets: security.requiresSecrets === true,\n networkEgress: asString(asRecord(security.network).egress),\n checksum: asString(integrity.checksum),\n signature: asString(integrity.signature),\n };\n}\n\nexport const StorePackageDetailPage: FC = () => {\n const { slug } = useParams();\n const { navigateTo } = useBotlit();\n const decodedSlug = slug ? decodeURIComponent(slug) : undefined;\n const { data: pkg, loading } = useStorePackage(decodedSlug);\n const { install, loading: installLoading } = useInstallPackage();\n\n const [installMode, setInstallMode] = useState<GqlInstallMode>(GqlInstallMode.Linked);\n const [showInstallDialog, setShowInstallDialog] = useState(false);\n\n const manifest = useMemo(() => readManifest(pkg?.manifest ?? {}), [pkg?.manifest]);\n\n const handleInstall = async () => {\n if (!pkg) return;\n try {\n await install({ packageId: pkg.id, mode: installMode });\n } catch (err) {\n // Keep the dialog open so a failed install is never mistaken for a success.\n toast.error(err instanceof Error ? err.message : 'Failed to install package');\n return;\n }\n toast.success(`Installed \"${manifest.name ?? pkg.slug}\"`);\n setShowInstallDialog(false);\n navigateTo('store/installed');\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 (!pkg) {\n return (\n <PageLayout title=\"Package Not Found\">\n <EmptyState\n illustration=\"empty-search\"\n title=\"Package Not Found\"\n description=\"This package doesn't exist.\"\n action={<Button onClick={() => navigateTo('store')}>Back to Store</Button>}\n />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigateTo('store')}>\n <ArrowLeft size={20} />\n </Button>\n <div className=\"p-2 rounded-lg bg-action-primary-bg/10\">\n {manifest.icon ? (\n <span className=\"text-2xl\">{manifest.icon}</span>\n ) : (\n <Package className=\"h-6 w-6 text-primary\" />\n )}\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{manifest.name ?? pkg.slug}</span>\n <Badge variant=\"outline\">v{pkg.version}</Badge>\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">{pkg.slug}</p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {manifest.homepage && (\n <a href={manifest.homepage} target=\"_blank\" rel=\"noopener noreferrer\">\n <Button variant=\"outline\" leftIcon={<ExternalLink size={16} />}>\n Homepage\n </Button>\n </a>\n )}\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.STORE_CREATE}>\n <Button leftIcon={<Download size={16} />} onClick={() => setShowInstallDialog(true)}>\n Install\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Package size={18} />}>\n This is a store package — a ready-made bot, agent, skill, tool pack or template you can\n install into your workspace. Review what it does, its security posture and version, then\n install it (linked so it stays updated, or forked as your own copy) to get a head start\n instead of building from scratch.\n </PagePurpose>\n\n {/* Overview Cards */}\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 <Badge variant=\"outline\" className=\"text-xs\">\n {KindLabel[pkg.kind] ?? pkg.kind}\n </Badge>\n <p className=\"text-sm text-text-secondary mt-1\">Type</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-lg font-bold\">v{pkg.version}</p>\n <p className=\"text-sm text-text-secondary\">Version</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <RiskBadge risk={manifest.risk} />\n <p className=\"text-sm text-text-secondary mt-1\">Security</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-lg font-bold\">{manifest.license ?? MISSING_VALUE}</p>\n <p className=\"text-sm text-text-secondary\">License</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Description */}\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-text-primary\">{manifest.description ?? MISSING_VALUE}</p>\n {manifest.tags.length > 0 && (\n <div className=\"flex items-center gap-2 mt-4\">\n <Tag size={14} className=\"text-text-secondary\" />\n {manifest.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* README */}\n {pkg.readme && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n README\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"prose prose-sm max-w-none dark:prose-invert\">\n <pre className=\"whitespace-pre-wrap text-sm\">{pkg.readme}</pre>\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Author & Links */}\n <Card>\n <CardHeader>\n <CardTitle>Author & Links</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary\">Author</p>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"font-medium\">{manifest.authorName ?? MISSING_VALUE}</span>\n {manifest.authorUrl && (\n <a\n href={manifest.authorUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:underline\"\n >\n <ExternalLink size={12} />\n </a>\n )}\n </div>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Published</p>\n <p className=\"font-medium mt-1\">{formatRelativeTime(pkg.publishedAt)}</p>\n </div>\n {manifest.repository && (\n <div>\n <p className=\"text-sm text-text-secondary\">Repository</p>\n <a\n href={manifest.repository}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1 mt-1 text-primary hover:underline\"\n >\n <GitBranch size={14} />\n View Source\n </a>\n </div>\n )}\n {manifest.homepage && (\n <div>\n <p className=\"text-sm text-text-secondary\">Homepage</p>\n <a\n href={manifest.homepage}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1 mt-1 text-primary hover:underline\"\n >\n <Globe size={14} />\n Visit Site\n </a>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n\n {/* Dependencies */}\n {manifest.dependencies.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Dependencies</CardTitle>\n <CardDescription>\n This package depends on {manifest.dependencies.length} other package(s)\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-wrap gap-2\">\n {manifest.dependencies.map((dep) => (\n <Badge key={dep.slug} variant=\"outline\" className=\"font-mono\">\n {dep.slug}@{dep.version}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Compatibility & Security */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <CheckCircle size={18} />\n Compatibility\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n {Object.keys(manifest.compatibility).length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n This package does not declare compatibility ranges.\n </p>\n ) : (\n Object.entries(manifest.compatibility).map(([target, range]) => (\n <div key={target} className=\"flex justify-between\">\n <span className=\"text-text-secondary capitalize\">{target}</span>\n <Badge variant=\"outline\">{range}</Badge>\n </div>\n ))\n )}\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Security\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-text-secondary\">Risk Level</span>\n <RiskBadge risk={manifest.risk} />\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-text-secondary\">Requires Secrets</span>\n <Badge variant={manifest.requiresSecrets ? 'warning' : 'secondary'}>\n {manifest.requiresSecrets ? 'Yes' : 'No'}\n </Badge>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-text-secondary\">Network Egress</span>\n <Badge\n variant={\n manifest.networkEgress === 'any'\n ? 'warning'\n : manifest.networkEgress === 'restricted'\n ? 'secondary'\n : 'success'\n }\n className=\"capitalize\"\n >\n {manifest.networkEgress ?? 'unknown'}\n </Badge>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Integrity */}\n <Card>\n <CardHeader>\n <CardTitle>Integrity</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div>\n <p className=\"text-sm text-text-secondary\">Checksum</p>\n <p className=\"font-mono text-sm break-all\">{manifest.checksum ?? MISSING_VALUE}</p>\n </div>\n {manifest.signature && (\n <div>\n <p className=\"text-sm text-text-secondary\">Signature</p>\n <p className=\"font-mono text-sm break-all\">{manifest.signature}</p>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Install Dialog */}\n {showInstallDialog && (\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\n <Card className=\"w-full max-w-md\">\n <CardHeader>\n <CardTitle>Install Package</CardTitle>\n <CardDescription>\n Install {manifest.name ?? pkg.slug} v{pkg.version}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm font-medium mb-2\">Install Mode</p>\n <div className=\"space-y-2\">\n <label className=\"flex items-start gap-3 p-3 border border-border-subtle rounded-lg cursor-pointer hover:bg-accent\">\n <input\n type=\"radio\"\n name=\"mode\"\n value=\"LINKED\"\n checked={installMode === GqlInstallMode.Linked}\n onChange={() => setInstallMode(GqlInstallMode.Linked)}\n className=\"mt-1\"\n />\n <div>\n <p className=\"font-medium\">Linked</p>\n <p className=\"text-sm text-text-secondary\">\n Stay in sync with store updates. Recommended for most cases.\n </p>\n </div>\n </label>\n <label className=\"flex items-start gap-3 p-3 border border-border-subtle rounded-lg cursor-pointer hover:bg-accent\">\n <input\n type=\"radio\"\n name=\"mode\"\n value=\"FORKED\"\n checked={installMode === GqlInstallMode.Forked}\n onChange={() => setInstallMode(GqlInstallMode.Forked)}\n className=\"mt-1\"\n />\n <div>\n <p className=\"font-medium\">Forked</p>\n <p className=\"text-sm text-text-secondary\">\n Create a local copy you can customize. No automatic updates.\n </p>\n </div>\n </label>\n </div>\n </div>\n\n {manifest.requiresSecrets && (\n <div className=\"p-3 bg-status-warning-bg-subtle rounded-lg\">\n <div className=\"flex items-center gap-2 text-status-warning-text\">\n <AlertTriangle size={16} />\n <span className=\"text-sm font-medium\">Requires Secrets</span>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">\n This package requires secret configuration after installation.\n </p>\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button variant=\"outline\" onClick={() => setShowInstallDialog(false)}>\n Cancel\n </Button>\n <Button\n onClick={() => void handleInstall()}\n isLoading={installLoading}\n leftIcon={<Download size={16} />}\n >\n Install\n </Button>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"StorePackageDetailPage.js","names":["GqlInstallMode","KindLabel","RiskBadge","risk","Badge","asRecord","value","asString","readManifest","info","manifest","author","security","integrity","compatibilitySource","compatibility","key","text","dependencies","dep","entry","slug","tag","StorePackageDetailPage","useParams","useBotlit","pkg","useStorePackage","installLoading","useInstallPackage","installMode","setInstallMode","useState","InstallMode","showInstallDialog","setShowInstallDialog","useMemo","handleInstall","install","err","toast","navigateTo","loading","PageLayout","Button","ArrowLeft","Package","ExternalLink","BotmanorPermissionGate","BOTMANOR_PERMISSIONS","Download","PagePurpose","Card","CardContent","CardHeader","CardTitle","Tag","FileText","formatRelativeTime","GitBranch","Globe","CardDescription","CheckCircle","target","range","Shield","AlertTriangle","EmptyState"],"sources":["../../../src/botlit/pages/StorePackageDetailPage.tsx"],"sourcesContent":["/**\n * Store Package Detail Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { useMemo, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport {\n ArrowLeft,\n Package,\n Download,\n Shield,\n ExternalLink,\n FileText,\n Tag,\n GitBranch,\n CheckCircle,\n AlertTriangle,\n Globe,\n} from 'lucide-react';\nimport { PageLayout } from '../components/PageLayout';\nimport { PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { EmptyState } from '../components/EmptyState';\nimport { Card, CardHeader, CardTitle, CardContent, CardDescription } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { Badge } from '../components/Badge';\nimport { toast } from 'sonner';\nimport { useStorePackage, useInstallPackage } from '../hooks';\nimport { formatRelativeTime, MISSING_VALUE } from '../utils/formatters';\nimport { InstallMode as GqlInstallMode } from '../../generated/wspace-types';\nimport { BOTMANOR_PERMISSIONS, BotmanorPermissionGate } from '../permissions';\n\nconst KindLabel: Record<string, string> = {\n APP: 'Bot',\n AGENT: 'Agent',\n MCP_PACK: 'MCP Pack',\n PROMPT_TEMPLATE: 'Prompt Template',\n PROMPT: 'Prompt',\n SKILL: 'Skill',\n RETRIEVAL_PROFILE: 'Retrieval Profile',\n POLICY_BUNDLE: 'Policy Bundle',\n CHANNEL_TEMPLATE: 'Channel Template',\n A2A_AGENT: 'A2A Agent',\n KB_TEMPLATE: 'KB Template',\n KNOWLEDGE_BASE: 'Knowledge Base',\n INTEGRATION: 'Integration',\n TEMPLATE: 'Template',\n TOOL: 'Tool',\n WORKFLOW: 'Workflow',\n};\n\nconst RiskBadge: FC<{ risk: string | undefined }> = ({ risk }) => {\n const variants: Record<string, 'success' | 'warning' | 'destructive'> = {\n low: 'success',\n medium: 'warning',\n high: 'destructive',\n };\n if (!risk) {\n return <Badge variant=\"secondary\">Risk unknown</Badge>;\n }\n return (\n <Badge variant={variants[risk] ?? 'secondary'} className=\"capitalize\">\n {risk} Risk\n </Badge>\n );\n};\n\ninterface PackageDependencyView {\n slug: string;\n version: string;\n}\n\n/**\n * The manifest is free-form JSON on the service, so every field is read\n * defensively — a package published without a section must not blank the page.\n */\ninterface ManifestView {\n name?: string;\n slug?: string;\n description?: string;\n icon?: string;\n license?: string;\n homepage?: string;\n repository?: string;\n authorName?: string;\n authorUrl?: string;\n tags: string[];\n dependencies: PackageDependencyView[];\n compatibility: Record<string, string>;\n risk?: string;\n requiresSecrets: boolean;\n networkEgress?: string;\n checksum?: string;\n signature?: string;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === 'string' && value !== '' ? value : undefined;\n}\n\nfunction readManifest(manifest: Record<string, unknown>): ManifestView {\n const info = asRecord(manifest.package);\n const author = asRecord(info.author);\n const security = asRecord(manifest.security);\n const integrity = asRecord(manifest.integrity);\n const compatibilitySource = asRecord(manifest.compatibility);\n\n const compatibility: Record<string, string> = {};\n for (const [key, value] of Object.entries(compatibilitySource)) {\n const text = asString(value);\n if (text) compatibility[key] = text;\n }\n\n const dependencies: PackageDependencyView[] = Array.isArray(manifest.dependencies)\n ? manifest.dependencies.flatMap((entry) => {\n const dep = asRecord(entry);\n const slug = asString(dep.slug);\n return slug ? [{ slug, version: asString(dep.version) ?? '*' }] : [];\n })\n : [];\n\n return {\n name: asString(info.name),\n slug: asString(info.slug),\n description: asString(info.description),\n icon: asString(info.icon),\n license: asString(info.license),\n homepage: asString(info.homepage),\n repository: asString(info.repository),\n authorName: asString(author.name),\n authorUrl: asString(author.url),\n tags: Array.isArray(info.tags)\n ? info.tags.filter((tag): tag is string => typeof tag === 'string')\n : [],\n dependencies,\n compatibility,\n risk: asString(security.risk),\n requiresSecrets: security.requiresSecrets === true,\n networkEgress: asString(asRecord(security.network).egress),\n checksum: asString(integrity.checksum),\n signature: asString(integrity.signature),\n };\n}\n\nexport const StorePackageDetailPage: FC = () => {\n const { slug } = useParams();\n const { navigateTo } = useBotlit();\n const decodedSlug = slug ? decodeURIComponent(slug) : undefined;\n const { data: pkg, loading } = useStorePackage(decodedSlug);\n const { install, loading: installLoading } = useInstallPackage();\n\n const [installMode, setInstallMode] = useState<GqlInstallMode>(GqlInstallMode.Linked);\n const [showInstallDialog, setShowInstallDialog] = useState(false);\n\n const manifest = useMemo(() => readManifest(pkg?.manifest ?? {}), [pkg?.manifest]);\n\n const handleInstall = async () => {\n if (!pkg) return;\n try {\n await install({ packageId: pkg.id, mode: installMode });\n } catch (err) {\n // Keep the dialog open so a failed install is never mistaken for a success.\n toast.error(err instanceof Error ? err.message : 'Failed to install package');\n return;\n }\n toast.success(`Installed \"${manifest.name ?? pkg.slug}\"`);\n setShowInstallDialog(false);\n navigateTo('store/installed');\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 (!pkg) {\n return (\n <PageLayout title=\"Package Not Found\">\n <EmptyState\n illustration=\"empty-search\"\n title=\"Package Not Found\"\n description=\"This package doesn't exist.\"\n action={<Button onClick={() => navigateTo('store')}>Back to Store</Button>}\n />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigateTo('store')}>\n <ArrowLeft size={20} />\n </Button>\n <div className=\"p-2 rounded-lg bg-action-primary-bg/10\">\n {manifest.icon ? (\n <span className=\"text-2xl\">{manifest.icon}</span>\n ) : (\n <Package className=\"h-6 w-6 text-primary\" />\n )}\n </div>\n <div>\n <div className=\"flex items-center gap-2\">\n <span>{manifest.name ?? pkg.slug}</span>\n <Badge variant=\"outline\">v{pkg.version}</Badge>\n </div>\n <p className=\"text-sm font-normal text-text-secondary\">{pkg.slug}</p>\n </div>\n </div>\n }\n actions={\n <div className=\"flex gap-2\">\n {manifest.homepage && (\n <a href={manifest.homepage} target=\"_blank\" rel=\"noopener noreferrer\">\n <Button variant=\"outline\" leftIcon={<ExternalLink size={16} />}>\n Homepage\n </Button>\n </a>\n )}\n <BotmanorPermissionGate permission={BOTMANOR_PERMISSIONS.STORE_CREATE}>\n <Button leftIcon={<Download size={16} />} onClick={() => setShowInstallDialog(true)}>\n Install\n </Button>\n </BotmanorPermissionGate>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Package size={18} />}>\n This is a store package — a ready-made bot, agent, skill, tool pack or template you can\n install into your workspace. Review what it does, its security posture and version, then\n install it (linked so it stays updated, or forked as your own copy) to get a head start\n instead of building from scratch.\n </PagePurpose>\n\n {/* Overview Cards */}\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 <Badge variant=\"outline\" className=\"text-xs\">\n {KindLabel[pkg.kind] ?? pkg.kind}\n </Badge>\n <p className=\"text-sm text-text-secondary mt-1\">Type</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-lg font-bold\">v{pkg.version}</p>\n <p className=\"text-sm text-text-secondary\">Version</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <RiskBadge risk={manifest.risk} />\n <p className=\"text-sm text-text-secondary mt-1\">Security</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6 text-center\">\n <p className=\"text-lg font-bold\">{manifest.license ?? MISSING_VALUE}</p>\n <p className=\"text-sm text-text-secondary\">License</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Description */}\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-text-primary\">{manifest.description ?? MISSING_VALUE}</p>\n {manifest.tags.length > 0 && (\n <div className=\"flex items-center gap-2 mt-4\">\n <Tag size={14} className=\"text-text-secondary\" />\n {manifest.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* README */}\n {pkg.readme && (\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FileText size={18} />\n README\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"prose prose-sm max-w-none dark:prose-invert\">\n <pre className=\"whitespace-pre-wrap text-sm\">{pkg.readme}</pre>\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Author & Links */}\n <Card>\n <CardHeader>\n <CardTitle>Author & Links</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary\">Author</p>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"font-medium\">{manifest.authorName ?? MISSING_VALUE}</span>\n {manifest.authorUrl && (\n <a\n href={manifest.authorUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:underline\"\n >\n <ExternalLink size={12} />\n </a>\n )}\n </div>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Published</p>\n <p className=\"font-medium mt-1\">{formatRelativeTime(pkg.publishedAt)}</p>\n </div>\n {manifest.repository && (\n <div>\n <p className=\"text-sm text-text-secondary\">Repository</p>\n <a\n href={manifest.repository}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1 mt-1 text-primary hover:underline\"\n >\n <GitBranch size={14} />\n View Source\n </a>\n </div>\n )}\n {manifest.homepage && (\n <div>\n <p className=\"text-sm text-text-secondary\">Homepage</p>\n <a\n href={manifest.homepage}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1 mt-1 text-primary hover:underline\"\n >\n <Globe size={14} />\n Visit Site\n </a>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n\n {/* Dependencies */}\n {manifest.dependencies.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Dependencies</CardTitle>\n <CardDescription>\n This package depends on {manifest.dependencies.length} other package(s)\n </CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-wrap gap-2\">\n {manifest.dependencies.map((dep) => (\n <Badge key={dep.slug} variant=\"outline\" className=\"font-mono\">\n {dep.slug}@{dep.version}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n\n {/* Compatibility & Security */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <CheckCircle size={18} />\n Compatibility\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n {Object.keys(manifest.compatibility).length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n This package does not declare compatibility ranges.\n </p>\n ) : (\n Object.entries(manifest.compatibility).map(([target, range]) => (\n <div key={target} className=\"flex justify-between\">\n <span className=\"text-text-secondary capitalize\">{target}</span>\n <Badge variant=\"outline\">{range}</Badge>\n </div>\n ))\n )}\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Shield size={18} />\n Security\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-text-secondary\">Risk Level</span>\n <RiskBadge risk={manifest.risk} />\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-text-secondary\">Requires Secrets</span>\n <Badge variant={manifest.requiresSecrets ? 'warning' : 'secondary'}>\n {manifest.requiresSecrets ? 'Yes' : 'No'}\n </Badge>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-text-secondary\">Network Egress</span>\n <Badge\n variant={\n manifest.networkEgress === 'any'\n ? 'warning'\n : manifest.networkEgress === 'restricted'\n ? 'secondary'\n : 'success'\n }\n className=\"capitalize\"\n >\n {manifest.networkEgress ?? 'unknown'}\n </Badge>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Integrity */}\n <Card>\n <CardHeader>\n <CardTitle>Integrity</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div>\n <p className=\"text-sm text-text-secondary\">Checksum</p>\n <p className=\"font-mono text-sm break-all\">{manifest.checksum ?? MISSING_VALUE}</p>\n </div>\n {manifest.signature && (\n <div>\n <p className=\"text-sm text-text-secondary\">Signature</p>\n <p className=\"font-mono text-sm break-all\">{manifest.signature}</p>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Install Dialog */}\n {showInstallDialog && (\n <div className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-50\">\n <Card className=\"w-full max-w-md\">\n <CardHeader>\n <CardTitle>Install Package</CardTitle>\n <CardDescription>\n Install {manifest.name ?? pkg.slug} v{pkg.version}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <p className=\"text-sm font-medium mb-2\">Install Mode</p>\n <div className=\"space-y-2\">\n <label className=\"flex items-start gap-3 p-3 border border-border-subtle rounded-lg cursor-pointer hover:bg-accent\">\n <input\n type=\"radio\"\n name=\"mode\"\n value=\"LINKED\"\n checked={installMode === GqlInstallMode.Linked}\n onChange={() => setInstallMode(GqlInstallMode.Linked)}\n className=\"mt-1\"\n />\n <div>\n <p className=\"font-medium\">Linked</p>\n <p className=\"text-sm text-text-secondary\">\n Stay in sync with store updates. Recommended for most cases.\n </p>\n </div>\n </label>\n <label className=\"flex items-start gap-3 p-3 border border-border-subtle rounded-lg cursor-pointer hover:bg-accent\">\n <input\n type=\"radio\"\n name=\"mode\"\n value=\"FORKED\"\n checked={installMode === GqlInstallMode.Forked}\n onChange={() => setInstallMode(GqlInstallMode.Forked)}\n className=\"mt-1\"\n />\n <div>\n <p className=\"font-medium\">Forked</p>\n <p className=\"text-sm text-text-secondary\">\n Create a local copy you can customize. No automatic updates.\n </p>\n </div>\n </label>\n </div>\n </div>\n\n {manifest.requiresSecrets && (\n <div className=\"p-3 bg-status-warning-bg-subtle rounded-lg\">\n <div className=\"flex items-center gap-2 text-status-warning-text\">\n <AlertTriangle size={16} />\n <span className=\"text-sm font-medium\">Requires Secrets</span>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">\n This package requires secret configuration after installation.\n </p>\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button variant=\"outline\" onClick={() => setShowInstallDialog(false)}>\n Cancel\n </Button>\n <Button\n onClick={() => void handleInstall()}\n isLoading={installLoading}\n leftIcon={<Download size={16} />}\n >\n Install\n </Button>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </PageLayout>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const StorePage: FC;