@solidxai/core-ui 0.1.19 → 0.1.20-beta.1

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 (282) hide show
  1. package/dist/components/common/Link.d.ts.map +1 -1
  2. package/dist/components/common/Link.js +2 -1
  3. package/dist/components/common/Link.js.map +1 -1
  4. package/dist/components/common/Link.tsx +2 -1
  5. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts +1 -0
  6. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
  7. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +109 -23
  8. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
  9. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +155 -34
  10. package/dist/components/core/chatter/SolidChatter.js +2 -2
  11. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  12. package/dist/components/core/chatter/SolidChatter.tsx +2 -2
  13. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js +20 -19
  14. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js.map +1 -1
  15. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.tsx +16 -16
  16. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.d.ts.map +1 -1
  17. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.js +3 -10
  18. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.js.map +1 -1
  19. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.tsx +3 -8
  20. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.d.ts.map +1 -1
  21. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.js +36 -9
  22. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.js.map +1 -1
  23. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.tsx +78 -7
  24. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.d.ts +1 -0
  25. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.d.ts.map +1 -1
  26. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.js +1 -1
  27. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.js.map +1 -1
  28. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.tsx +1 -1
  29. package/dist/components/core/extension/solid-core/moduleMetadata/list/RestoreModulePackageRowAction.d.ts +4 -0
  30. package/dist/components/core/extension/solid-core/moduleMetadata/list/RestoreModulePackageRowAction.d.ts.map +1 -0
  31. package/dist/components/core/extension/solid-core/moduleMetadata/list/RestoreModulePackageRowAction.js +131 -0
  32. package/dist/components/core/extension/solid-core/moduleMetadata/list/RestoreModulePackageRowAction.js.map +1 -0
  33. package/dist/components/core/extension/solid-core/moduleMetadata/list/RestoreModulePackageRowAction.tsx +151 -0
  34. package/dist/components/core/extension/solid-core/moduleMetadata/list/UpdateModulePackageRowAction.d.ts +4 -0
  35. package/dist/components/core/extension/solid-core/moduleMetadata/list/UpdateModulePackageRowAction.d.ts.map +1 -0
  36. package/dist/components/core/extension/solid-core/moduleMetadata/list/UpdateModulePackageRowAction.js +13 -0
  37. package/dist/components/core/extension/solid-core/moduleMetadata/list/UpdateModulePackageRowAction.js.map +1 -0
  38. package/dist/components/core/extension/solid-core/moduleMetadata/list/UpdateModulePackageRowAction.tsx +20 -0
  39. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  40. package/dist/components/core/form/SolidFormView.js +4 -0
  41. package/dist/components/core/form/SolidFormView.js.map +1 -1
  42. package/dist/components/core/form/SolidFormView.tsx +4 -0
  43. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  44. package/dist/components/core/kanban/SolidKanbanView.js +50 -15
  45. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  46. package/dist/components/core/kanban/SolidKanbanView.tsx +22 -3
  47. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  48. package/dist/components/core/list/SolidListView.js +16 -3
  49. package/dist/components/core/list/SolidListView.js.map +1 -1
  50. package/dist/components/core/list/SolidListView.tsx +16 -2
  51. package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
  52. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +4 -1
  53. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
  54. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +4 -1
  55. package/dist/components/core/module/ModulePackageDialog.css +102 -0
  56. package/dist/components/core/module/ModulePackageDialog.d.ts +2 -1
  57. package/dist/components/core/module/ModulePackageDialog.d.ts.map +1 -1
  58. package/dist/components/core/module/ModulePackageDialog.js +216 -68
  59. package/dist/components/core/module/ModulePackageDialog.js.map +1 -1
  60. package/dist/components/core/module/ModulePackageDialog.tsx +356 -76
  61. package/dist/components/core/solid-agent/SolidAgentChat.d.ts.map +1 -1
  62. package/dist/components/core/solid-agent/SolidAgentChat.js +9 -3
  63. package/dist/components/core/solid-agent/SolidAgentChat.js.map +1 -1
  64. package/dist/components/core/solid-agent/SolidAgentChat.tsx +9 -4
  65. package/dist/components/core/solid-agent/SolidAgentMarkdown.d.ts.map +1 -1
  66. package/dist/components/core/solid-agent/SolidAgentMarkdown.js +25 -6
  67. package/dist/components/core/solid-agent/SolidAgentMarkdown.js.map +1 -1
  68. package/dist/components/core/solid-agent/SolidAgentMarkdown.tsx +15 -1
  69. package/dist/components/core/solid-agent/client/agentRuntime.d.ts +5 -0
  70. package/dist/components/core/solid-agent/client/agentRuntime.d.ts.map +1 -1
  71. package/dist/components/core/solid-agent/client/agentRuntime.js +77 -20
  72. package/dist/components/core/solid-agent/client/agentRuntime.js.map +1 -1
  73. package/dist/components/core/solid-agent/client/agentRuntime.ts +29 -1
  74. package/dist/components/core/solid-agent/client/agentSocket.d.ts +5 -1
  75. package/dist/components/core/solid-agent/client/agentSocket.d.ts.map +1 -1
  76. package/dist/components/core/solid-agent/client/agentSocket.js +27 -4
  77. package/dist/components/core/solid-agent/client/agentSocket.js.map +1 -1
  78. package/dist/components/core/solid-agent/client/agentSocket.ts +14 -3
  79. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js +2 -2
  80. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js.map +1 -1
  81. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.tsx +5 -5
  82. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts +2 -0
  83. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts.map +1 -1
  84. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js +2 -2
  85. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js.map +1 -1
  86. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.ts +4 -4
  87. package/dist/components/core/solid-agent/thread/AgentThread.d.ts.map +1 -1
  88. package/dist/components/core/solid-agent/thread/AgentThread.js +61 -26
  89. package/dist/components/core/solid-agent/thread/AgentThread.js.map +1 -1
  90. package/dist/components/core/solid-agent/thread/AgentThread.tsx +74 -40
  91. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.d.ts +2 -1
  92. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.d.ts.map +1 -1
  93. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.js +2 -1
  94. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.js.map +1 -1
  95. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.tsx +3 -1
  96. package/dist/components/core/solid-agent/types.d.ts +3 -0
  97. package/dist/components/core/solid-agent/types.d.ts.map +1 -1
  98. package/dist/components/core/solid-agent/types.js +0 -9
  99. package/dist/components/core/solid-agent/types.js.map +1 -1
  100. package/dist/components/core/solid-agent/types.ts +4 -2
  101. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.d.ts +1 -1
  102. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.d.ts.map +1 -1
  103. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.js +5 -2
  104. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.js.map +1 -1
  105. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.tsx +11 -5
  106. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.js +3 -0
  107. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.js.map +1 -1
  108. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.tsx +4 -0
  109. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.js +3 -0
  110. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.js.map +1 -1
  111. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.tsx +4 -0
  112. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.js +3 -0
  113. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.js.map +1 -1
  114. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.tsx +4 -0
  115. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.js +3 -0
  116. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.js.map +1 -1
  117. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.tsx +4 -0
  118. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.js +3 -0
  119. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.js.map +1 -1
  120. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.tsx +4 -0
  121. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js +3 -0
  122. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js.map +1 -1
  123. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx +4 -0
  124. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.js +3 -0
  125. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.js.map +1 -1
  126. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.tsx +4 -0
  127. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.js +3 -0
  128. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.js.map +1 -1
  129. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.tsx +4 -0
  130. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.js +3 -0
  131. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.js.map +1 -1
  132. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.tsx +4 -0
  133. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.js +19 -0
  134. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.js.map +1 -1
  135. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.tsx +20 -0
  136. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.js +3 -0
  137. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.js.map +1 -1
  138. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.tsx +4 -0
  139. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.js +3 -0
  140. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.js.map +1 -1
  141. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.tsx +4 -0
  142. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.js +3 -0
  143. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.js.map +1 -1
  144. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.tsx +4 -0
  145. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.js +3 -0
  146. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.js.map +1 -1
  147. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.tsx +4 -0
  148. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.js +3 -0
  149. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.js.map +1 -1
  150. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.tsx +4 -0
  151. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.js +3 -0
  152. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.js.map +1 -1
  153. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.tsx +4 -0
  154. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.js +3 -0
  155. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.js.map +1 -1
  156. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.tsx +4 -0
  157. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.js +3 -0
  158. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.js.map +1 -1
  159. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.tsx +4 -0
  160. package/dist/components/core/solid-agent/widgets/solidChatWidgets.module.css +9 -1
  161. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  162. package/dist/components/core/users/CreateUser.js +23 -8
  163. package/dist/components/core/users/CreateUser.js.map +1 -1
  164. package/dist/components/core/users/CreateUser.tsx +10 -6
  165. package/dist/components/layout/AdminHeaderActions.d.ts.map +1 -1
  166. package/dist/components/layout/AdminHeaderActions.js +1 -29
  167. package/dist/components/layout/AdminHeaderActions.js.map +1 -1
  168. package/dist/components/layout/AdminHeaderActions.tsx +0 -42
  169. package/dist/components/layout/AdminTopHeader.js +2 -2
  170. package/dist/components/layout/AdminTopHeader.js.map +1 -1
  171. package/dist/components/layout/AdminTopHeader.tsx +2 -2
  172. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  173. package/dist/components/layout/AppSidebar.js +21 -5
  174. package/dist/components/layout/AppSidebar.js.map +1 -1
  175. package/dist/components/layout/AppSidebar.tsx +24 -6
  176. package/dist/components/layout/SolidAiStudioLayout.d.ts +0 -1
  177. package/dist/components/layout/SolidAiStudioLayout.d.ts.map +1 -1
  178. package/dist/components/layout/SolidAiStudioLayout.js +8 -161
  179. package/dist/components/layout/SolidAiStudioLayout.js.map +1 -1
  180. package/dist/components/layout/SolidAiStudioLayout.tsx +6 -136
  181. package/dist/components/layout/user-profile-menu.js +10 -10
  182. package/dist/components/layout/user-profile-menu.js.map +1 -1
  183. package/dist/components/layout/user-profile-menu.tsx +3 -3
  184. package/dist/components/shad-cn-ui/SolidLightbox.d.ts +2 -1
  185. package/dist/components/shad-cn-ui/SolidLightbox.d.ts.map +1 -1
  186. package/dist/components/shad-cn-ui/SolidLightbox.js +11 -4
  187. package/dist/components/shad-cn-ui/SolidLightbox.js.map +1 -1
  188. package/dist/components/shad-cn-ui/SolidLightbox.tsx +14 -1
  189. package/dist/helpers/modelViewPersistence.d.ts +2 -0
  190. package/dist/helpers/modelViewPersistence.d.ts.map +1 -1
  191. package/dist/helpers/modelViewPersistence.js +72 -0
  192. package/dist/helpers/modelViewPersistence.js.map +1 -1
  193. package/dist/helpers/modelViewPersistence.ts +79 -0
  194. package/dist/helpers/registry.d.ts +6 -2
  195. package/dist/helpers/registry.d.ts.map +1 -1
  196. package/dist/helpers/registry.js +68 -3
  197. package/dist/helpers/registry.js.map +1 -1
  198. package/dist/helpers/registry.ts +62 -4
  199. package/dist/hooks/useModelsDevModels.d.ts +43 -0
  200. package/dist/hooks/useModelsDevModels.d.ts.map +1 -0
  201. package/dist/hooks/useModelsDevModels.js +81 -0
  202. package/dist/hooks/useModelsDevModels.js.map +1 -0
  203. package/dist/hooks/useModelsDevModels.ts +106 -0
  204. package/dist/hooks/useRouter.d.ts.map +1 -1
  205. package/dist/hooks/useRouter.js +3 -2
  206. package/dist/hooks/useRouter.js.map +1 -1
  207. package/dist/hooks/useRouter.ts +3 -2
  208. package/dist/index.d.ts +2 -2
  209. package/dist/index.d.ts.map +1 -1
  210. package/dist/index.js +1 -1
  211. package/dist/index.js.map +1 -1
  212. package/dist/index.ts +4 -1
  213. package/dist/modules/solidUiModule.d.ts +3 -2
  214. package/dist/modules/solidUiModule.d.ts.map +1 -1
  215. package/dist/modules/solidUiModule.js +1 -1
  216. package/dist/modules/solidUiModule.js.map +1 -1
  217. package/dist/modules/solidUiModule.ts +5 -1
  218. package/dist/redux/api/moduleApi.d.ts +12 -2
  219. package/dist/redux/api/moduleApi.d.ts.map +1 -1
  220. package/dist/redux/api/moduleApi.js +33 -3
  221. package/dist/redux/api/moduleApi.js.map +1 -1
  222. package/dist/redux/api/moduleApi.ts +17 -2
  223. package/dist/redux/api/solidChatterMessageApi.d.ts +3 -1
  224. package/dist/redux/api/solidChatterMessageApi.d.ts.map +1 -1
  225. package/dist/redux/api/solidChatterMessageApi.js +9 -1
  226. package/dist/redux/api/solidChatterMessageApi.js.map +1 -1
  227. package/dist/redux/api/solidChatterMessageApi.ts +9 -1
  228. package/dist/redux/store/defaultStoreConfig.d.ts +9 -1
  229. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  230. package/dist/resources/globals.css +30 -0
  231. package/dist/resources/solid-custom.css +10 -6
  232. package/dist/resources/solid-tailwind-generated.css +1 -1
  233. package/dist/routes/AppEventListener.d.ts.map +1 -1
  234. package/dist/routes/AppEventListener.js +3 -3
  235. package/dist/routes/AppEventListener.js.map +1 -1
  236. package/dist/routes/AppEventListener.tsx +2 -3
  237. package/dist/routes/pages/admin/core/AgentHubTagsField.css +21 -0
  238. package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts +17 -0
  239. package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts.map +1 -0
  240. package/dist/routes/pages/admin/core/AgentHubTagsField.js +171 -0
  241. package/dist/routes/pages/admin/core/AgentHubTagsField.js.map +1 -0
  242. package/dist/routes/pages/admin/core/AgentHubTagsField.tsx +125 -0
  243. package/dist/routes/pages/admin/core/AgentPersonaHistory.css +130 -0
  244. package/dist/routes/pages/admin/core/AgentPersonaHistory.d.ts +7 -0
  245. package/dist/routes/pages/admin/core/AgentPersonaHistory.d.ts.map +1 -0
  246. package/dist/routes/pages/admin/core/AgentPersonaHistory.js +228 -0
  247. package/dist/routes/pages/admin/core/AgentPersonaHistory.js.map +1 -0
  248. package/dist/routes/pages/admin/core/AgentPersonaHistory.tsx +234 -0
  249. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.css +13 -14
  250. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts.map +1 -1
  251. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js +218 -165
  252. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js.map +1 -1
  253. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.tsx +221 -127
  254. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts.map +1 -1
  255. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js +14 -69
  256. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js.map +1 -1
  257. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.tsx +15 -83
  258. package/dist/routes/pages/admin/core/AgentToolActivationDialog.d.ts +11 -0
  259. package/dist/routes/pages/admin/core/AgentToolActivationDialog.d.ts.map +1 -0
  260. package/dist/routes/pages/admin/core/AgentToolActivationDialog.js +166 -0
  261. package/dist/routes/pages/admin/core/AgentToolActivationDialog.js.map +1 -0
  262. package/dist/routes/pages/admin/core/AgentToolActivationDialog.tsx +140 -0
  263. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.css +26 -0
  264. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts.map +1 -1
  265. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js +94 -71
  266. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js.map +1 -1
  267. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.tsx +60 -52
  268. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.d.ts +2 -0
  269. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.d.ts.map +1 -0
  270. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js +108 -0
  271. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js.map +1 -0
  272. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.tsx +96 -0
  273. package/dist/routes/solidRoutes.d.ts.map +1 -1
  274. package/dist/routes/solidRoutes.js +2 -0
  275. package/dist/routes/solidRoutes.js.map +1 -1
  276. package/dist/routes/solidRoutes.tsx +2 -0
  277. package/dist/types/extension-registry.d.ts +12 -0
  278. package/dist/types/extension-registry.d.ts.map +1 -1
  279. package/dist/types/extension-registry.js.map +1 -1
  280. package/dist/types/extension-registry.ts +15 -0
  281. package/dist/types/solid-core.d.ts +2 -0
  282. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AppEventListener.d.ts","sourceRoot":"","sources":["../../src/routes/AppEventListener.tsx"],"names":[],"mappings":"AAkEA,wBAAgB,gBAAgB,4CAyD/B"}
1
+ {"version":3,"file":"AppEventListener.d.ts","sourceRoot":"","sources":["../../src/routes/AppEventListener.tsx"],"names":[],"mappings":"AAkEA,wBAAgB,gBAAgB,4CAwD/B"}
@@ -1,8 +1,8 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useEffect } from "react";
3
3
  import { eventBus, AppEvents } from "../helpers/eventBus";
4
4
  import { usePathname } from "../hooks/usePathname";
5
- import { SolidStudio, PreviewModePersist } from "../components/layout/SolidAiStudioLayout";
5
+ import { SolidStudio } from "../components/layout/SolidAiStudioLayout";
6
6
  import { useDispatch } from "react-redux";
7
7
  import { showToast } from "../redux/features/toastSlice";
8
8
  import { env } from "../adapters/env";
@@ -91,6 +91,6 @@ export function AppEventListener() {
91
91
  }));
92
92
  });
93
93
  }, [dispatch]);
94
- return (_jsxs(_Fragment, { children: [_jsx(SolidStudio, {}), _jsx(PreviewModePersist, {})] }));
94
+ return (_jsx(_Fragment, { children: window.self === window.top && !pathname.startsWith("/embed/agent/") && _jsx(SolidStudio, {}) }));
95
95
  }
96
96
  //# sourceMappingURL=AppEventListener.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppEventListener.js","sourceRoot":"","sources":["../../src/routes/AppEventListener.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect } from \"react\";\nimport { eventBus, AppEvents } from \"../helpers/eventBus\";\nimport { usePathname } from \"../hooks/usePathname\";\nimport { SolidStudio, PreviewModePersist } from \"../components/layout/SolidAiStudioLayout\";\nimport { useDispatch } from \"react-redux\";\nimport { showToast } from \"../redux/features/toastSlice\";\nimport { env } from \"../adapters/env\";\nimport { backendHealthMonitor, type BackendHealthState } from \"../helpers/backendHealthMonitor\";\n\ntype GlobalErrorPayload = {\n status?: number | string;\n message?: string;\n error?: unknown;\n};\n\nfunction isDevMode() {\n const envName = (env(\"VITE_SOLIDX_ENV\") || \"\").toLowerCase();\n return envName === \"dev\" || envName === \"development\";\n}\n\nfunction formatUnknownValue(value: unknown) {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return \"\";\n\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction buildDevErrorDetail(payload?: GlobalErrorPayload) {\n if (!payload) return undefined;\n\n const error = payload.error as any;\n const lines: string[] = [];\n\n if (payload.status !== undefined) {\n lines.push(`Status: ${String(payload.status)}`);\n }\n\n if (payload.message) {\n lines.push(`Summary: ${payload.message}`);\n }\n\n if (error?.message) {\n lines.push(`Error: ${error.message}`);\n }\n\n if (error?.code) {\n lines.push(`Code: ${error.code}`);\n }\n\n const responseData = error?.response?.data ?? error?.data;\n const responseText = formatUnknownValue(responseData);\n if (responseText) {\n lines.push(`Response:\\n${responseText}`);\n }\n\n if (error?.stack) {\n lines.push(`Stack:\\n${error.stack}`);\n }\n\n return lines.length > 0 ? lines.join(\"\\n\\n\") : undefined;\n}\n\nexport function AppEventListener() {\n const pathname = usePathname();\n const dispatch = useDispatch();\n\n useEffect(() => {\n const off = eventBus.on<GlobalErrorPayload>(AppEvents.GlobalError, (payload) => {\n if (!pathname.startsWith(\"/admin\") && !pathname.startsWith(\"/auth\")) {\n return;\n }\n\n dispatch(\n showToast({\n severity: \"error\",\n summary: payload?.message || \"Something went wrong\",\n detail: isDevMode() ? buildDevErrorDetail(payload) : undefined,\n sticky: isDevMode(),\n life: isDevMode() ? 10000 : 4000,\n })\n );\n });\n return () => off();\n }, [dispatch, pathname]);\n\n useEffect(() => {\n let previousStatus: BackendHealthState[\"status\"] = backendHealthMonitor.getState().status;\n\n return backendHealthMonitor.subscribe((state) => {\n const nextStatus = state.status;\n const didBecomeOffline = previousStatus !== \"offline\" && nextStatus === \"offline\";\n previousStatus = nextStatus;\n\n if (!didBecomeOffline) {\n return;\n }\n\n dispatch(\n showToast({\n severity: \"error\",\n summary: \"Server unreachable\",\n detail: isDevMode() ? buildDevErrorDetail({\n status: state.statusCode,\n message: state.message || \"Unable to reach the server. Please try again later.\",\n error: state.error,\n }) : `We have been trying to reconnect to the server for over ${Math.max(1, Math.round(state.unavailableToastDelayMs / 1000))} seconds.`,\n sticky: isDevMode(),\n life: isDevMode() ? 10000 : 5000,\n })\n );\n });\n }, [dispatch]);\n\n return (\n <>\n <SolidStudio />\n <PreviewModePersist />\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"AppEventListener.js","sourceRoot":"","sources":["../../src/routes/AppEventListener.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect } from \"react\";\nimport { eventBus, AppEvents } from \"../helpers/eventBus\";\nimport { usePathname } from \"../hooks/usePathname\";\nimport { SolidStudio } from \"../components/layout/SolidAiStudioLayout\";\nimport { useDispatch } from \"react-redux\";\nimport { showToast } from \"../redux/features/toastSlice\";\nimport { env } from \"../adapters/env\";\nimport { backendHealthMonitor, type BackendHealthState } from \"../helpers/backendHealthMonitor\";\n\ntype GlobalErrorPayload = {\n status?: number | string;\n message?: string;\n error?: unknown;\n};\n\nfunction isDevMode() {\n const envName = (env(\"VITE_SOLIDX_ENV\") || \"\").toLowerCase();\n return envName === \"dev\" || envName === \"development\";\n}\n\nfunction formatUnknownValue(value: unknown) {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return \"\";\n\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction buildDevErrorDetail(payload?: GlobalErrorPayload) {\n if (!payload) return undefined;\n\n const error = payload.error as any;\n const lines: string[] = [];\n\n if (payload.status !== undefined) {\n lines.push(`Status: ${String(payload.status)}`);\n }\n\n if (payload.message) {\n lines.push(`Summary: ${payload.message}`);\n }\n\n if (error?.message) {\n lines.push(`Error: ${error.message}`);\n }\n\n if (error?.code) {\n lines.push(`Code: ${error.code}`);\n }\n\n const responseData = error?.response?.data ?? error?.data;\n const responseText = formatUnknownValue(responseData);\n if (responseText) {\n lines.push(`Response:\\n${responseText}`);\n }\n\n if (error?.stack) {\n lines.push(`Stack:\\n${error.stack}`);\n }\n\n return lines.length > 0 ? lines.join(\"\\n\\n\") : undefined;\n}\n\nexport function AppEventListener() {\n const pathname = usePathname();\n const dispatch = useDispatch();\n\n useEffect(() => {\n const off = eventBus.on<GlobalErrorPayload>(AppEvents.GlobalError, (payload) => {\n if (!pathname.startsWith(\"/admin\") && !pathname.startsWith(\"/auth\")) {\n return;\n }\n\n dispatch(\n showToast({\n severity: \"error\",\n summary: payload?.message || \"Something went wrong\",\n detail: isDevMode() ? buildDevErrorDetail(payload) : undefined,\n sticky: isDevMode(),\n life: isDevMode() ? 10000 : 4000,\n })\n );\n });\n return () => off();\n }, [dispatch, pathname]);\n\n useEffect(() => {\n let previousStatus: BackendHealthState[\"status\"] = backendHealthMonitor.getState().status;\n\n return backendHealthMonitor.subscribe((state) => {\n const nextStatus = state.status;\n const didBecomeOffline = previousStatus !== \"offline\" && nextStatus === \"offline\";\n previousStatus = nextStatus;\n\n if (!didBecomeOffline) {\n return;\n }\n\n dispatch(\n showToast({\n severity: \"error\",\n summary: \"Server unreachable\",\n detail: isDevMode() ? buildDevErrorDetail({\n status: state.statusCode,\n message: state.message || \"Unable to reach the server. Please try again later.\",\n error: state.error,\n }) : `We have been trying to reconnect to the server for over ${Math.max(1, Math.round(state.unavailableToastDelayMs / 1000))} seconds.`,\n sticky: isDevMode(),\n life: isDevMode() ? 10000 : 5000,\n })\n );\n });\n }, [dispatch]);\n\n return (\n <>\n {window.self === window.top && !pathname.startsWith(\"/embed/agent/\") && <SolidStudio />}\n </>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { useEffect } from "react";
2
2
  import { eventBus, AppEvents } from "../helpers/eventBus";
3
3
  import { usePathname } from "../hooks/usePathname";
4
- import { SolidStudio, PreviewModePersist } from "../components/layout/SolidAiStudioLayout";
4
+ import { SolidStudio } from "../components/layout/SolidAiStudioLayout";
5
5
  import { useDispatch } from "react-redux";
6
6
  import { showToast } from "../redux/features/toastSlice";
7
7
  import { env } from "../adapters/env";
@@ -117,8 +117,7 @@ export function AppEventListener() {
117
117
 
118
118
  return (
119
119
  <>
120
- <SolidStudio />
121
- <PreviewModePersist />
120
+ {window.self === window.top && !pathname.startsWith("/embed/agent/") && <SolidStudio />}
122
121
  </>
123
122
  );
124
123
  }
@@ -0,0 +1,21 @@
1
+ .agent-hub-tags { display:flex; min-width:0; flex-direction:column; gap:.5rem; font-size:.875rem; }
2
+ .agent-hub-tags > label { display:flex; align-items:center; gap:.5rem; font-weight:600; }
3
+ .agent-hub-tags__count { min-width:1.3rem; padding:.1rem .35rem; border-radius:999px; background:var(--surface-ground,var(--background)); color:var(--text-color-secondary,var(--muted-foreground)); text-align:center; font-size:.7rem; }
4
+ .agent-hub-tags__selection { display:flex; align-items:center; flex-wrap:wrap; gap:.4rem; min-height:1.75rem; }
5
+ .agent-hub-tags__chip { display:inline-flex; align-items:center; gap:.3rem; max-width:100%; padding:.25rem .6rem; border-radius:999px; color:var(--primary-color,var(--primary)); background:color-mix(in srgb,var(--primary-color,var(--primary)) 11%,transparent); font-size:.78rem; overflow-wrap:anywhere; }
6
+ .agent-hub-tags__chip button { display:grid; flex-shrink:0; width:1.2rem; height:1.2rem; place-items:center; padding:0; border:0; border-radius:50%; background:transparent; color:inherit; cursor:pointer; }
7
+ .agent-hub-tags__chip button:hover { background:color-mix(in srgb,var(--primary-color,var(--primary)) 15%,transparent); }
8
+ .agent-hub-tags__search { display:flex; align-items:center; gap:.5rem; padding:.35rem .5rem; border:1px solid var(--surface-border,var(--border)); border-radius:.5rem; background:var(--surface-ground,var(--background)); }
9
+ .agent-hub-tags__search:focus-within { border-color:var(--primary-color,var(--primary)); }
10
+ .agent-hub-tags__search > svg { flex-shrink:0; color:var(--text-color-secondary,var(--muted-foreground)); }
11
+ .agent-hub-tags__search input { flex:1; width:100%; min-width:0; min-height:2rem; padding:0; border:0; outline:0; color:inherit; background:transparent; font:inherit; font-weight:400; }
12
+ .agent-hub-tags__search .solid-button { flex-shrink:0; }
13
+ .agent-hub-tags__options { max-height:12rem; overflow-y:auto; padding:.3rem; border:1px solid var(--surface-border,var(--border)); border-radius:.5rem; background:var(--surface-card,var(--card)); }
14
+ .agent-hub-tags__options > button { display:flex; justify-content:space-between; align-items:center; gap:.5rem; width:100%; padding:.5rem .6rem; border:0; border-radius:.3rem; background:transparent; color:inherit; text-align:left; font:inherit; overflow-wrap:anywhere; cursor:pointer; }
15
+ .agent-hub-tags__options > button:hover,.agent-hub-tags__options > button.is-active { background:color-mix(in srgb,var(--primary-color,var(--primary)) 8%,transparent); }
16
+ .agent-hub-tags__empty,.agent-hub-tags__hint { color:var(--text-color-secondary,var(--muted-foreground)); font-size:.8rem; font-weight:400; }
17
+ .agent-hub-tags__options > .agent-hub-tags__empty { padding:.6rem; }
18
+ .agent-hub-tags__error { color:var(--red-500,#dc2626); font-size:.8rem; }
19
+ .agent-hub-tags__error button { padding:0; border:0; background:transparent; color:inherit; text-decoration:underline; cursor:pointer; }
20
+ .agent-hub-tags button:focus-visible { outline:2px solid var(--primary-color,var(--primary)); outline-offset:2px; }
21
+ .agent-hub-tags button:disabled { cursor:default; opacity:.55; }
@@ -0,0 +1,17 @@
1
+ import "./AgentHubTagsField.css";
2
+ export type AgentHubTag = {
3
+ id: number;
4
+ name: string;
5
+ };
6
+ export declare function agentHubTagsFrom(value: unknown): AgentHubTag[];
7
+ export declare function agentHubTagsPayload(tags: AgentHubTag[]): {
8
+ tagsIds: number[];
9
+ tagsCommand: string;
10
+ };
11
+ export declare function AgentHubTagsField({ value, onChange, disabled, onBusyChange }: {
12
+ value: AgentHubTag[];
13
+ onChange: (tags: AgentHubTag[]) => void;
14
+ disabled?: boolean;
15
+ onBusyChange?: (busy: boolean) => void;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=AgentHubTagsField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentHubTagsField.d.ts","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/AgentHubTagsField.tsx"],"names":[],"mappings":"AAIA,OAAO,yBAAyB,CAAC;AAEjC,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,CAS9D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE;;;EAEtD;AAID,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAgB,EAAE,YAAY,EAAE,EAAE;IACrF,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC,2CA8FA"}
@@ -0,0 +1,171 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
38
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
39
+ if (ar || !(i in from)) {
40
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
41
+ ar[i] = from[i];
42
+ }
43
+ }
44
+ return to.concat(ar || Array.prototype.slice.call(from));
45
+ };
46
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
47
+ import React from "react";
48
+ import { Plus, Search, X } from "lucide-react";
49
+ import { createSolidEntityApi } from "../../../../redux/api/solidEntityApi";
50
+ import { SolidButton } from "../../../../components/shad-cn-ui/SolidButton";
51
+ import "./AgentHubTagsField.css";
52
+ export function agentHubTagsFrom(value) {
53
+ if (!Array.isArray(value))
54
+ return [];
55
+ var seen = new Set();
56
+ return value.flatMap(function (tag) {
57
+ var id = Number(tag === null || tag === void 0 ? void 0 : tag.id);
58
+ if (!Number.isInteger(id) || id <= 0 || typeof (tag === null || tag === void 0 ? void 0 : tag.name) !== "string" || seen.has(id))
59
+ return [];
60
+ seen.add(id);
61
+ return [{ id: id, name: tag.name }];
62
+ });
63
+ }
64
+ export function agentHubTagsPayload(tags) {
65
+ return { tagsIds: tags.map(function (tag) { return tag.id; }), tagsCommand: tags.length ? "set" : "clear" };
66
+ }
67
+ var tagApi = createSolidEntityApi("agentHubTag");
68
+ export function AgentHubTagsField(_a) {
69
+ var _this = this;
70
+ var value = _a.value, onChange = _a.onChange, _b = _a.disabled, disabled = _b === void 0 ? false : _b, onBusyChange = _a.onBusyChange;
71
+ var _c = tagApi.useGetSolidEntitiesQuery("offset=0&limit=1000&fields[0]=id&fields[1]=name", { skip: disabled }), data = _c.data, isFetching = _c.isFetching, isError = _c.isError, refetch = _c.refetch;
72
+ var _d = tagApi.useCreateSolidEntityMutation(), createTag = _d[0], isCreating = _d[1].isLoading;
73
+ var _e = React.useState(""), query = _e[0], setQuery = _e[1];
74
+ var _f = React.useState(false), open = _f[0], setOpen = _f[1];
75
+ var _g = React.useState(-1), activeIndex = _g[0], setActiveIndex = _g[1];
76
+ var _h = React.useState(""), error = _h[0], setError = _h[1];
77
+ var inputRef = React.useRef(null);
78
+ var fieldId = React.useId();
79
+ var name = query.trim();
80
+ var catalog = agentHubTagsFrom(data === null || data === void 0 ? void 0 : data.records);
81
+ var exact = __spreadArray(__spreadArray([], catalog, true), value, true).find(function (tag) { return tag.name.toLowerCase() === name.toLowerCase(); });
82
+ var options = catalog.filter(function (tag) { return !value.some(function (selected) { return selected.id === tag.id; })
83
+ && tag.name.toLowerCase().includes(name.toLowerCase()); }).sort(function (a, b) { return a.name.localeCompare(b.name); });
84
+ var canCreate = Boolean(name && !exact && !isFetching && !isError);
85
+ var select = function (tag) {
86
+ var _a;
87
+ if (!value.some(function (selected) { return selected.id === tag.id; }))
88
+ onChange(__spreadArray(__spreadArray([], value, true), [tag], false));
89
+ setQuery("");
90
+ setActiveIndex(-1);
91
+ setError("");
92
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
93
+ };
94
+ var add = function () { return __awaiter(_this, void 0, void 0, function () {
95
+ var result, depth, created, failure_1, refreshed, existing, message;
96
+ var _a, _b, _c, _d, _e, _f;
97
+ return __generator(this, function (_g) {
98
+ switch (_g.label) {
99
+ case 0:
100
+ if (disabled || isCreating || !name)
101
+ return [2 /*return*/];
102
+ if (exact) {
103
+ select(exact);
104
+ return [2 /*return*/];
105
+ }
106
+ if (!canCreate)
107
+ return [2 /*return*/];
108
+ setError("");
109
+ onBusyChange === null || onBusyChange === void 0 ? void 0 : onBusyChange(true);
110
+ _g.label = 1;
111
+ case 1:
112
+ _g.trys.push([1, 3, 5, 6]);
113
+ return [4 /*yield*/, createTag({ name: name }).unwrap()];
114
+ case 2:
115
+ result = _g.sent();
116
+ for (depth = 0; depth < 3 && result && !result.id; depth += 1)
117
+ result = result.data;
118
+ created = agentHubTagsFrom([result])[0];
119
+ if (!created)
120
+ throw new Error("The tag could not be loaded. Search for it again.");
121
+ select(created);
122
+ return [3 /*break*/, 6];
123
+ case 3:
124
+ failure_1 = _g.sent();
125
+ return [4 /*yield*/, refetch()];
126
+ case 4:
127
+ refreshed = _g.sent();
128
+ existing = agentHubTagsFrom((_a = refreshed.data) === null || _a === void 0 ? void 0 : _a.records).find(function (tag) { return tag.name.toLowerCase() === name.toLowerCase(); });
129
+ if (existing)
130
+ select(existing);
131
+ else {
132
+ message = (_f = (_d = (_c = (_b = failure_1 === null || failure_1 === void 0 ? void 0 : failure_1.data) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : (_e = failure_1 === null || failure_1 === void 0 ? void 0 : failure_1.data) === null || _e === void 0 ? void 0 : _e.message) !== null && _f !== void 0 ? _f : failure_1 === null || failure_1 === void 0 ? void 0 : failure_1.message;
133
+ setError(typeof message === "string" ? message : "Could not create this tag. Try again.");
134
+ }
135
+ return [3 /*break*/, 6];
136
+ case 5:
137
+ onBusyChange === null || onBusyChange === void 0 ? void 0 : onBusyChange(false);
138
+ return [7 /*endfinally*/];
139
+ case 6: return [2 /*return*/];
140
+ }
141
+ });
142
+ }); };
143
+ return _jsxs("div", { className: "agent-hub-tags", onBlur: function (event) {
144
+ if (!event.currentTarget.contains(event.relatedTarget))
145
+ setOpen(false);
146
+ }, children: [_jsxs("label", { htmlFor: fieldId, children: ["Tags ", _jsx("span", { className: "agent-hub-tags__count", children: value.length })] }), _jsxs("div", { className: "agent-hub-tags__selection", children: [value.map(function (tag) { return _jsxs("span", { className: "agent-hub-tags__chip", children: [tag.name, !disabled && _jsx("button", { type: "button", disabled: isCreating, "aria-label": "Remove ".concat(tag.name), onClick: function () { return onChange(value.filter(function (selected) { return selected.id !== tag.id; })); }, children: _jsx(X, { size: 13 }) })] }, tag.id); }), !value.length && _jsx("span", { className: "agent-hub-tags__empty", children: "No tags selected" })] }), !disabled && _jsxs(_Fragment, { children: [_jsxs("div", { className: "agent-hub-tags__search", children: [_jsx(Search, { size: 16, "aria-hidden": "true" }), _jsx("input", { ref: inputRef, id: fieldId, role: "combobox", autoComplete: "off", "aria-expanded": open, "aria-controls": "".concat(fieldId, "-options"), "aria-autocomplete": "list", "aria-activedescendant": open && options[activeIndex] ? "".concat(fieldId, "-option-").concat(activeIndex) : undefined, disabled: isCreating, value: query, placeholder: "Search or create tags\u2026", onFocus: function () { return setOpen(true); }, onChange: function (event) { setQuery(event.target.value); setActiveIndex(-1); setOpen(true); setError(""); }, onKeyDown: function (event) {
147
+ if (event.key === "Escape") {
148
+ event.preventDefault();
149
+ setOpen(false);
150
+ }
151
+ if (event.key === "ArrowDown") {
152
+ event.preventDefault();
153
+ setOpen(true);
154
+ setActiveIndex(function (index) { return Math.min(index + 1, options.length - 1); });
155
+ }
156
+ if (event.key === "ArrowUp") {
157
+ event.preventDefault();
158
+ setActiveIndex(function (index) { return Math.max(index - 1, 0); });
159
+ }
160
+ if (event.key === "Enter") {
161
+ event.preventDefault();
162
+ if (open && options[activeIndex])
163
+ select(options[activeIndex]);
164
+ else
165
+ void add();
166
+ }
167
+ } }), name && _jsx(SolidButton, { variant: "secondary", size: "small", loading: isCreating, disabled: !exact && !canCreate, onClick: function () { return void add(); }, leftIcon: _jsx(Plus, { size: 14 }), children: exact ? "Select" : "Create tag" })] }), isError && _jsxs("div", { className: "agent-hub-tags__error", role: "alert", children: ["Tags could not be loaded. ", _jsx("button", { type: "button", onClick: function () { return void refetch(); }, children: "Retry" })] }), open && _jsx("div", { className: "agent-hub-tags__options", id: "".concat(fieldId, "-options"), role: "listbox", "aria-label": "Available tags", children: isFetching ? _jsx("div", { className: "agent-hub-tags__empty", role: "status", children: "Loading tags\u2026" })
168
+ : options.length ? options.map(function (tag, index) { return _jsxs("button", { id: "".concat(fieldId, "-option-").concat(index), type: "button", role: "option", "aria-selected": false, disabled: isCreating, className: activeIndex === index ? "is-active" : undefined, onMouseDown: function (event) { return event.preventDefault(); }, onClick: function () { return select(tag); }, children: [tag.name, _jsx(Plus, { size: 14 })] }, tag.id); })
169
+ : !isError && _jsx("div", { className: "agent-hub-tags__empty", children: exact ? "Tag already selected." : canCreate ? "Create \u201C".concat(name, "\u201D to add it.") : "No tags available. Type a name to create one." }) }), error && _jsx("small", { className: "agent-hub-tags__error", role: "alert", children: error }), _jsx("small", { className: "agent-hub-tags__hint", children: "Tags are shared across agents, skills, and tools." })] })] });
170
+ }
171
+ //# sourceMappingURL=AgentHubTagsField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentHubTagsField.js","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/AgentHubTagsField.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { Plus, Search, X } from \"lucide-react\";\nimport { createSolidEntityApi } from \"../../../../redux/api/solidEntityApi\";\nimport { SolidButton } from \"../../../../components/shad-cn-ui/SolidButton\";\nimport \"./AgentHubTagsField.css\";\n\nexport type AgentHubTag = { id: number; name: string };\n\nexport function agentHubTagsFrom(value: unknown): AgentHubTag[] {\n if (!Array.isArray(value)) return [];\n const seen = new Set<number>();\n return value.flatMap((tag) => {\n const id = Number(tag?.id);\n if (!Number.isInteger(id) || id <= 0 || typeof tag?.name !== \"string\" || seen.has(id)) return [];\n seen.add(id);\n return [{ id, name: tag.name }];\n });\n}\n\nexport function agentHubTagsPayload(tags: AgentHubTag[]) {\n return { tagsIds: tags.map((tag) => tag.id), tagsCommand: tags.length ? \"set\" : \"clear\" };\n}\n\nconst tagApi = createSolidEntityApi(\"agentHubTag\");\n\nexport function AgentHubTagsField({ value, onChange, disabled = false, onBusyChange }: {\n value: AgentHubTag[];\n onChange: (tags: AgentHubTag[]) => void;\n disabled?: boolean;\n onBusyChange?: (busy: boolean) => void;\n}) {\n const { data, isFetching, isError, refetch } = tagApi.useGetSolidEntitiesQuery(\n \"offset=0&limit=1000&fields[0]=id&fields[1]=name\", { skip: disabled });\n const [createTag, { isLoading: isCreating }] = tagApi.useCreateSolidEntityMutation();\n const [query, setQuery] = React.useState(\"\");\n const [open, setOpen] = React.useState(false);\n const [activeIndex, setActiveIndex] = React.useState(-1);\n const [error, setError] = React.useState(\"\");\n const inputRef = React.useRef<HTMLInputElement>(null);\n const fieldId = React.useId();\n const name = query.trim();\n const catalog = agentHubTagsFrom(data?.records);\n const exact = [...catalog, ...value].find((tag) => tag.name.toLowerCase() === name.toLowerCase());\n const options = catalog.filter((tag) => !value.some((selected) => selected.id === tag.id)\n && tag.name.toLowerCase().includes(name.toLowerCase())).sort((a, b) => a.name.localeCompare(b.name));\n const canCreate = Boolean(name && !exact && !isFetching && !isError);\n\n const select = (tag: AgentHubTag) => {\n if (!value.some((selected) => selected.id === tag.id)) onChange([...value, tag]);\n setQuery(\"\");\n setActiveIndex(-1);\n setError(\"\");\n inputRef.current?.focus();\n };\n\n const add = async () => {\n if (disabled || isCreating || !name) return;\n if (exact) { select(exact); return; }\n if (!canCreate) return;\n setError(\"\");\n onBusyChange?.(true);\n try {\n let result = await createTag({ name }).unwrap();\n for (let depth = 0; depth < 3 && result && !result.id; depth += 1) result = result.data;\n const created = agentHubTagsFrom([result])[0];\n if (!created) throw new Error(\"The tag could not be loaded. Search for it again.\");\n select(created);\n } catch (failure: any) {\n const refreshed = await refetch();\n const existing = agentHubTagsFrom(refreshed.data?.records).find((tag) => tag.name.toLowerCase() === name.toLowerCase());\n if (existing) select(existing);\n else {\n const message = failure?.data?.data?.message ?? failure?.data?.message ?? failure?.message;\n setError(typeof message === \"string\" ? message : \"Could not create this tag. Try again.\");\n }\n } finally {\n onBusyChange?.(false);\n }\n };\n\n return <div className=\"agent-hub-tags\" onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setOpen(false);\n }}>\n <label htmlFor={fieldId}>Tags <span className=\"agent-hub-tags__count\">{value.length}</span></label>\n <div className=\"agent-hub-tags__selection\">\n {value.map((tag) => <span className=\"agent-hub-tags__chip\" key={tag.id}>{tag.name}\n {!disabled && <button type=\"button\" disabled={isCreating} aria-label={`Remove ${tag.name}`}\n onClick={() => onChange(value.filter((selected) => selected.id !== tag.id))}><X size={13} /></button>}\n </span>)}\n {!value.length && <span className=\"agent-hub-tags__empty\">No tags selected</span>}\n </div>\n {!disabled && <>\n <div className=\"agent-hub-tags__search\">\n <Search size={16} aria-hidden=\"true\" />\n <input ref={inputRef} id={fieldId} role=\"combobox\" autoComplete=\"off\" aria-expanded={open}\n aria-controls={`${fieldId}-options`} aria-autocomplete=\"list\"\n aria-activedescendant={open && options[activeIndex] ? `${fieldId}-option-${activeIndex}` : undefined}\n disabled={isCreating} value={query} placeholder=\"Search or create tags…\"\n onFocus={() => setOpen(true)}\n onChange={(event) => { setQuery(event.target.value); setActiveIndex(-1); setOpen(true); setError(\"\"); }}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") { event.preventDefault(); setOpen(false); }\n if (event.key === \"ArrowDown\") { event.preventDefault(); setOpen(true); setActiveIndex((index) => Math.min(index + 1, options.length - 1)); }\n if (event.key === \"ArrowUp\") { event.preventDefault(); setActiveIndex((index) => Math.max(index - 1, 0)); }\n if (event.key === \"Enter\") { event.preventDefault(); if (open && options[activeIndex]) select(options[activeIndex]); else void add(); }\n }} />\n {name && <SolidButton variant=\"secondary\" size=\"small\" loading={isCreating}\n disabled={!exact && !canCreate} onClick={() => void add()} leftIcon={<Plus size={14} />}>\n {exact ? \"Select\" : \"Create tag\"}\n </SolidButton>}\n </div>\n {isError && <div className=\"agent-hub-tags__error\" role=\"alert\">Tags could not be loaded. <button type=\"button\" onClick={() => void refetch()}>Retry</button></div>}\n {open && <div className=\"agent-hub-tags__options\" id={`${fieldId}-options`} role=\"listbox\" aria-label=\"Available tags\">\n {isFetching ? <div className=\"agent-hub-tags__empty\" role=\"status\">Loading tags…</div>\n : options.length ? options.map((tag, index) => <button key={tag.id} id={`${fieldId}-option-${index}`}\n type=\"button\" role=\"option\" aria-selected={false} disabled={isCreating}\n className={activeIndex === index ? \"is-active\" : undefined}\n onMouseDown={(event) => event.preventDefault()} onClick={() => select(tag)}>{tag.name}<Plus size={14} /></button>)\n : !isError && <div className=\"agent-hub-tags__empty\">{exact ? \"Tag already selected.\" : canCreate ? `Create “${name}” to add it.` : \"No tags available. Type a name to create one.\"}</div>}\n </div>}\n {error && <small className=\"agent-hub-tags__error\" role=\"alert\">{error}</small>}\n <small className=\"agent-hub-tags__hint\">Tags are shared across agents, skills, and tools.</small>\n </>}\n </div>;\n}\n"]}
@@ -0,0 +1,125 @@
1
+ import React from "react";
2
+ import { Plus, Search, X } from "lucide-react";
3
+ import { createSolidEntityApi } from "../../../../redux/api/solidEntityApi";
4
+ import { SolidButton } from "../../../../components/shad-cn-ui/SolidButton";
5
+ import "./AgentHubTagsField.css";
6
+
7
+ export type AgentHubTag = { id: number; name: string };
8
+
9
+ export function agentHubTagsFrom(value: unknown): AgentHubTag[] {
10
+ if (!Array.isArray(value)) return [];
11
+ const seen = new Set<number>();
12
+ return value.flatMap((tag) => {
13
+ const id = Number(tag?.id);
14
+ if (!Number.isInteger(id) || id <= 0 || typeof tag?.name !== "string" || seen.has(id)) return [];
15
+ seen.add(id);
16
+ return [{ id, name: tag.name }];
17
+ });
18
+ }
19
+
20
+ export function agentHubTagsPayload(tags: AgentHubTag[]) {
21
+ return { tagsIds: tags.map((tag) => tag.id), tagsCommand: tags.length ? "set" : "clear" };
22
+ }
23
+
24
+ const tagApi = createSolidEntityApi("agentHubTag");
25
+
26
+ export function AgentHubTagsField({ value, onChange, disabled = false, onBusyChange }: {
27
+ value: AgentHubTag[];
28
+ onChange: (tags: AgentHubTag[]) => void;
29
+ disabled?: boolean;
30
+ onBusyChange?: (busy: boolean) => void;
31
+ }) {
32
+ const { data, isFetching, isError, refetch } = tagApi.useGetSolidEntitiesQuery(
33
+ "offset=0&limit=1000&fields[0]=id&fields[1]=name", { skip: disabled });
34
+ const [createTag, { isLoading: isCreating }] = tagApi.useCreateSolidEntityMutation();
35
+ const [query, setQuery] = React.useState("");
36
+ const [open, setOpen] = React.useState(false);
37
+ const [activeIndex, setActiveIndex] = React.useState(-1);
38
+ const [error, setError] = React.useState("");
39
+ const inputRef = React.useRef<HTMLInputElement>(null);
40
+ const fieldId = React.useId();
41
+ const name = query.trim();
42
+ const catalog = agentHubTagsFrom(data?.records);
43
+ const exact = [...catalog, ...value].find((tag) => tag.name.toLowerCase() === name.toLowerCase());
44
+ const options = catalog.filter((tag) => !value.some((selected) => selected.id === tag.id)
45
+ && tag.name.toLowerCase().includes(name.toLowerCase())).sort((a, b) => a.name.localeCompare(b.name));
46
+ const canCreate = Boolean(name && !exact && !isFetching && !isError);
47
+
48
+ const select = (tag: AgentHubTag) => {
49
+ if (!value.some((selected) => selected.id === tag.id)) onChange([...value, tag]);
50
+ setQuery("");
51
+ setActiveIndex(-1);
52
+ setError("");
53
+ inputRef.current?.focus();
54
+ };
55
+
56
+ const add = async () => {
57
+ if (disabled || isCreating || !name) return;
58
+ if (exact) { select(exact); return; }
59
+ if (!canCreate) return;
60
+ setError("");
61
+ onBusyChange?.(true);
62
+ try {
63
+ let result = await createTag({ name }).unwrap();
64
+ for (let depth = 0; depth < 3 && result && !result.id; depth += 1) result = result.data;
65
+ const created = agentHubTagsFrom([result])[0];
66
+ if (!created) throw new Error("The tag could not be loaded. Search for it again.");
67
+ select(created);
68
+ } catch (failure: any) {
69
+ const refreshed = await refetch();
70
+ const existing = agentHubTagsFrom(refreshed.data?.records).find((tag) => tag.name.toLowerCase() === name.toLowerCase());
71
+ if (existing) select(existing);
72
+ else {
73
+ const message = failure?.data?.data?.message ?? failure?.data?.message ?? failure?.message;
74
+ setError(typeof message === "string" ? message : "Could not create this tag. Try again.");
75
+ }
76
+ } finally {
77
+ onBusyChange?.(false);
78
+ }
79
+ };
80
+
81
+ return <div className="agent-hub-tags" onBlur={(event) => {
82
+ if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setOpen(false);
83
+ }}>
84
+ <label htmlFor={fieldId}>Tags <span className="agent-hub-tags__count">{value.length}</span></label>
85
+ <div className="agent-hub-tags__selection">
86
+ {value.map((tag) => <span className="agent-hub-tags__chip" key={tag.id}>{tag.name}
87
+ {!disabled && <button type="button" disabled={isCreating} aria-label={`Remove ${tag.name}`}
88
+ onClick={() => onChange(value.filter((selected) => selected.id !== tag.id))}><X size={13} /></button>}
89
+ </span>)}
90
+ {!value.length && <span className="agent-hub-tags__empty">No tags selected</span>}
91
+ </div>
92
+ {!disabled && <>
93
+ <div className="agent-hub-tags__search">
94
+ <Search size={16} aria-hidden="true" />
95
+ <input ref={inputRef} id={fieldId} role="combobox" autoComplete="off" aria-expanded={open}
96
+ aria-controls={`${fieldId}-options`} aria-autocomplete="list"
97
+ aria-activedescendant={open && options[activeIndex] ? `${fieldId}-option-${activeIndex}` : undefined}
98
+ disabled={isCreating} value={query} placeholder="Search or create tags…"
99
+ onFocus={() => setOpen(true)}
100
+ onChange={(event) => { setQuery(event.target.value); setActiveIndex(-1); setOpen(true); setError(""); }}
101
+ onKeyDown={(event) => {
102
+ if (event.key === "Escape") { event.preventDefault(); setOpen(false); }
103
+ if (event.key === "ArrowDown") { event.preventDefault(); setOpen(true); setActiveIndex((index) => Math.min(index + 1, options.length - 1)); }
104
+ if (event.key === "ArrowUp") { event.preventDefault(); setActiveIndex((index) => Math.max(index - 1, 0)); }
105
+ if (event.key === "Enter") { event.preventDefault(); if (open && options[activeIndex]) select(options[activeIndex]); else void add(); }
106
+ }} />
107
+ {name && <SolidButton variant="secondary" size="small" loading={isCreating}
108
+ disabled={!exact && !canCreate} onClick={() => void add()} leftIcon={<Plus size={14} />}>
109
+ {exact ? "Select" : "Create tag"}
110
+ </SolidButton>}
111
+ </div>
112
+ {isError && <div className="agent-hub-tags__error" role="alert">Tags could not be loaded. <button type="button" onClick={() => void refetch()}>Retry</button></div>}
113
+ {open && <div className="agent-hub-tags__options" id={`${fieldId}-options`} role="listbox" aria-label="Available tags">
114
+ {isFetching ? <div className="agent-hub-tags__empty" role="status">Loading tags…</div>
115
+ : options.length ? options.map((tag, index) => <button key={tag.id} id={`${fieldId}-option-${index}`}
116
+ type="button" role="option" aria-selected={false} disabled={isCreating}
117
+ className={activeIndex === index ? "is-active" : undefined}
118
+ onMouseDown={(event) => event.preventDefault()} onClick={() => select(tag)}>{tag.name}<Plus size={14} /></button>)
119
+ : !isError && <div className="agent-hub-tags__empty">{exact ? "Tag already selected." : canCreate ? `Create “${name}” to add it.` : "No tags available. Type a name to create one."}</div>}
120
+ </div>}
121
+ {error && <small className="agent-hub-tags__error" role="alert">{error}</small>}
122
+ <small className="agent-hub-tags__hint">Tags are shared across agents, skills, and tools.</small>
123
+ </>}
124
+ </div>;
125
+ }
@@ -0,0 +1,130 @@
1
+ .persona-history__trigger {
2
+ display: grid;
3
+ flex: 0 0 auto;
4
+ place-items: center;
5
+ width: 2.15rem;
6
+ height: 2.15rem;
7
+ border: 1px solid var(--surface-border, var(--border));
8
+ border-radius: .6rem;
9
+ background: var(--surface-card, var(--card));
10
+ color: var(--text-color-secondary, var(--muted-foreground));
11
+ cursor: pointer;
12
+ transition: color .15s ease, border-color .15s ease, background .15s ease;
13
+ }
14
+ .persona-history__trigger:hover,
15
+ .persona-history__trigger[data-state="open"] {
16
+ border-color: color-mix(in srgb, var(--primary-color, var(--primary)) 42%, var(--surface-border, var(--border)));
17
+ background: color-mix(in srgb, var(--primary-color, var(--primary)) 7%, var(--surface-card, var(--card)));
18
+ color: var(--primary-color, var(--primary));
19
+ }
20
+ .persona-history__trigger:focus-visible,
21
+ .persona-history__selector:focus-visible,
22
+ .persona-history__refresh:focus-visible {
23
+ outline: 2px solid var(--primary-color, var(--primary));
24
+ outline-offset: 2px;
25
+ }
26
+ .persona-history__menu.solid-dropdown-menu-content {
27
+ z-index: calc(var(--z-overlay, 1000) + 10);
28
+ width: min(25rem, calc(100vw - 1.5rem));
29
+ max-height: min(27rem, calc(100vh - 2rem));
30
+ overflow: hidden;
31
+ padding: .4rem;
32
+ border-radius: .8rem;
33
+ box-shadow: 0 18px 50px rgba(15, 23, 42, .2);
34
+ }
35
+ .persona-history__menu-header {
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: space-between;
39
+ gap: .75rem;
40
+ padding: .55rem .6rem .7rem;
41
+ border-bottom: 1px solid var(--surface-border, var(--border));
42
+ }
43
+ .persona-history__menu-header > span { display: grid; gap: .16rem; }
44
+ .persona-history__menu-header strong { font-size: .87rem; }
45
+ .persona-history__menu-header small,
46
+ .persona-history__menu-heading { color: var(--text-color-secondary, var(--muted-foreground)); font-size: .72rem; }
47
+ .persona-history__menu-heading { padding: .55rem .65rem .45rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; }
48
+ .persona-history__refresh {
49
+ display: grid;
50
+ flex: 0 0 auto;
51
+ place-items: center;
52
+ width: 1.8rem;
53
+ height: 1.8rem;
54
+ border: 0;
55
+ border-radius: .45rem;
56
+ background: transparent;
57
+ color: var(--text-color-secondary, var(--muted-foreground));
58
+ cursor: pointer;
59
+ }
60
+ .persona-history__refresh:hover { background: var(--surface-hover, #f2f3f4); color: var(--primary-color, var(--primary)); }
61
+ .persona-history__menu-list { max-height: min(22rem, calc(100vh - 7rem)); overflow: auto; padding: .25rem 0; }
62
+ .persona-history__menu-option.solid-dropdown-menu-item {
63
+ display: block;
64
+ min-height: 0;
65
+ padding: .62rem .65rem;
66
+ text-align: left;
67
+ cursor: pointer;
68
+ }
69
+ .persona-history__menu-option[data-highlighted] { background: color-mix(in srgb, var(--primary-color, var(--primary)) 8%, var(--surface-card, var(--card))); }
70
+ .persona-history__item { display: grid; width: 100%; min-width: 0; gap: .32rem; }
71
+ .persona-history__item-main,
72
+ .persona-history__item-meta { display: flex; align-items: center; gap: .42rem; min-width: 0; }
73
+ .persona-history__item-main { justify-content: space-between; }
74
+ .persona-history__item-main strong { overflow: hidden; font-size: .82rem; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }
75
+ .persona-history__item-meta { overflow: hidden; color: var(--text-color-secondary, var(--muted-foreground)); font-size: .72rem; }
76
+ .persona-history__item-meta > span:not(.persona-history__selected) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
77
+ .persona-history__selected { margin-left: auto; color: var(--primary-color, var(--primary)); font-size: .68rem; font-weight: 700; }
78
+ .persona-history__status { padding: 1.2rem .65rem; color: var(--text-color-secondary, var(--muted-foreground)); font-size: .8rem; text-align: center; }
79
+ .persona-history__status--error { color: #b42318; }
80
+
81
+ .persona-history__dialog.solid-radix-dialog-content {
82
+ display: flex;
83
+ flex-direction: column;
84
+ width: min(1380px, calc(100vw - 3rem));
85
+ height: calc(100dvh - 2rem);
86
+ max-width: calc(100vw - 3rem);
87
+ max-height: calc(100dvh - 2rem);
88
+ overflow: hidden;
89
+ border-radius: 1rem;
90
+ }
91
+ .persona-history__dialog .solid-radix-dialog-header { flex: 0 0 auto; align-items: center; padding: .7rem 1.1rem; border-bottom: 1px solid var(--surface-border, var(--border)); }
92
+ .persona-history__dialog-title { display: inline-flex; align-items: center; gap: .55rem; }
93
+ .persona-history__dialog-title svg { color: var(--primary-color, var(--primary)); }
94
+ .persona-history__dialog-body.solid-radix-dialog-body { display: flex; flex: 1 1 auto; flex-direction: column; min-height: 0; padding: 0; overflow: hidden; }
95
+ .persona-history__compare-controls { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: .65rem; padding: .55rem 1rem; border-bottom: 1px solid var(--surface-border, var(--border)); }
96
+ .persona-history__selector {
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: space-between;
100
+ gap: .7rem;
101
+ width: 100%;
102
+ min-width: 0;
103
+ padding: .46rem .65rem;
104
+ border: 1px solid var(--surface-border, var(--border));
105
+ border-radius: .65rem;
106
+ background: var(--surface-card, var(--card));
107
+ color: var(--text-color, var(--foreground));
108
+ text-align: left;
109
+ cursor: pointer;
110
+ }
111
+ .persona-history__selector:hover,
112
+ .persona-history__selector[data-state="open"] { border-color: color-mix(in srgb, var(--primary-color, var(--primary)) 42%, var(--surface-border, var(--border))); background: color-mix(in srgb, var(--primary-color, var(--primary)) 4%, var(--surface-card, var(--card))); }
113
+ .persona-history__selector-copy { display: grid; min-width: 0; width: 100%; gap: .1rem; }
114
+ .persona-history__selector-meta { display: flex; justify-content: space-between; align-items: baseline; gap: .5rem; min-width: 0; }
115
+ .persona-history__selector-copy small { color: var(--primary-color, var(--primary)); font-size: .64rem; font-weight: 800; letter-spacing: .07em; }
116
+ .persona-history__selector-meta time { overflow: hidden; color: var(--text-color-secondary, var(--muted-foreground)); font-size: .68rem; font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
117
+ .persona-history__selector-copy strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
118
+ .persona-history__selector-copy strong { font-size: .85rem; }
119
+ .persona-history__selector > svg { flex: 0 0 auto; color: var(--text-color-secondary, var(--muted-foreground)); }
120
+ .persona-history__compare-icon { display: grid; place-items: center; width: 1.7rem; height: 1.7rem; border-radius: 50%; background: var(--surface-ground, var(--background)); color: var(--text-color-secondary, var(--muted-foreground)); }
121
+ .persona-history__diff { flex: 1 1 auto; min-height: 0; overflow: auto; background: var(--surface-card, var(--card)); }
122
+ .persona-history__diff > div { min-width: 760px; }
123
+ .persona-history__diff table { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 12px; }
124
+ .persona-history__diff pre { white-space: pre-wrap !important; overflow-wrap: anywhere; }
125
+
126
+ @media (max-width: 720px) {
127
+ .persona-history__dialog.solid-radix-dialog-content { width: calc(100vw - 1rem); height: calc(100dvh - 1rem); max-width: calc(100vw - 1rem); max-height: calc(100dvh - 1rem); }
128
+ .persona-history__compare-controls { grid-template-columns: minmax(0, 1fr); gap: .35rem; }
129
+ .persona-history__compare-icon { justify-self: center; transform: rotate(90deg); }
130
+ }
@@ -0,0 +1,7 @@
1
+ import "./AgentPersonaHistory.css";
2
+ export declare function AgentPersonaHistory({ agentId, savedPrompt, refreshVersion }: {
3
+ agentId: number;
4
+ savedPrompt: string;
5
+ refreshVersion: number;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=AgentPersonaHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentPersonaHistory.d.ts","sourceRoot":"","sources":["../../../../../src/routes/pages/admin/core/AgentPersonaHistory.tsx"],"names":[],"mappings":"AAQA,OAAO,2BAA2B,CAAC;AA8HnC,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB,2CA+FA"}