@solidxai/core-ui 0.1.19-beta.0 → 0.1.19

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 (512) hide show
  1. package/README.md +19 -0
  2. package/dist/components/common/SolidPopupContainer.d.ts.map +1 -1
  3. package/dist/components/common/SolidPopupContainer.js +3 -2
  4. package/dist/components/common/SolidPopupContainer.js.map +1 -1
  5. package/dist/components/common/SolidPopupContainer.tsx +3 -2
  6. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
  7. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +4 -1
  8. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
  9. package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +11 -5
  10. package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
  11. package/dist/components/core/chatter/SolidChatter.js +2 -1
  12. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  13. package/dist/components/core/chatter/SolidChatter.tsx +2 -0
  14. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts +2 -0
  15. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts.map +1 -1
  16. package/dist/components/core/chatter/SolidChatterMessageBox.js +7 -4
  17. package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
  18. package/dist/components/core/chatter/SolidChatterMessageBox.tsx +8 -3
  19. package/dist/components/core/chatter/SolidChatterMessageWidget.d.ts +5 -0
  20. package/dist/components/core/chatter/SolidChatterMessageWidget.d.ts.map +1 -0
  21. package/dist/components/core/chatter/SolidChatterMessageWidget.js +85 -0
  22. package/dist/components/core/chatter/SolidChatterMessageWidget.js.map +1 -0
  23. package/dist/components/core/chatter/SolidChatterMessageWidget.tsx +59 -0
  24. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  25. package/dist/components/core/common/SolidGlobalSearchElement.js +6 -5
  26. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  27. package/dist/components/core/common/SolidGlobalSearchElement.tsx +6 -5
  28. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.d.ts +11 -0
  29. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.d.ts.map +1 -0
  30. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.js +102 -0
  31. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.js.map +1 -0
  32. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.tsx +129 -0
  33. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.d.ts +4 -0
  34. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.d.ts.map +1 -0
  35. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.js +29 -0
  36. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.js.map +1 -0
  37. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.module.css +226 -0
  38. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.tsx +57 -0
  39. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.d.ts +4 -0
  40. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.d.ts.map +1 -0
  41. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.js +33 -0
  42. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.js.map +1 -0
  43. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.tsx +47 -0
  44. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.d.ts +5 -0
  45. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.d.ts.map +1 -0
  46. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.js +59 -0
  47. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.js.map +1 -0
  48. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.tsx +82 -0
  49. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.d.ts +17 -0
  50. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.d.ts.map +1 -0
  51. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.js +258 -0
  52. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.js.map +1 -0
  53. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.tsx +286 -0
  54. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
  55. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +102 -62
  56. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
  57. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +116 -106
  58. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.d.ts +6 -0
  59. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.d.ts.map +1 -0
  60. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.js +37 -0
  61. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.js.map +1 -0
  62. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.tsx +89 -0
  63. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.d.ts +3 -0
  64. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.d.ts.map +1 -0
  65. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.js +18 -0
  66. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.js.map +1 -0
  67. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.tsx +51 -0
  68. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.d.ts +10 -0
  69. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.d.ts.map +1 -0
  70. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.js +63 -0
  71. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.js.map +1 -0
  72. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.tsx +111 -0
  73. package/dist/components/core/field/FieldListViewData.d.ts.map +1 -1
  74. package/dist/components/core/field/FieldListViewData.js +29 -9
  75. package/dist/components/core/field/FieldListViewData.js.map +1 -1
  76. package/dist/components/core/field/FieldListViewData.tsx +7 -6
  77. package/dist/components/core/form/SolidFormView.d.ts +1 -0
  78. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  79. package/dist/components/core/form/SolidFormView.js +49 -48
  80. package/dist/components/core/form/SolidFormView.js.map +1 -1
  81. package/dist/components/core/form/SolidFormView.tsx +4 -3
  82. package/dist/components/core/form/fields/SolidPasswordField.d.ts.map +1 -1
  83. package/dist/components/core/form/fields/SolidPasswordField.js +13 -1
  84. package/dist/components/core/form/fields/SolidPasswordField.js.map +1 -1
  85. package/dist/components/core/form/fields/SolidPasswordField.tsx +14 -3
  86. package/dist/components/core/kanban/KanbanBoard.d.ts +1 -1
  87. package/dist/components/core/kanban/KanbanBoard.d.ts.map +1 -1
  88. package/dist/components/core/kanban/KanbanBoard.js +2 -2
  89. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  90. package/dist/components/core/kanban/KanbanBoard.tsx +5 -1
  91. package/dist/components/core/kanban/KanbanCard.d.ts +3 -0
  92. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  93. package/dist/components/core/kanban/KanbanCard.js +5 -4
  94. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  95. package/dist/components/core/kanban/KanbanCard.tsx +31 -11
  96. package/dist/components/core/kanban/KanbanColumn.d.ts +5 -1
  97. package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
  98. package/dist/components/core/kanban/KanbanColumn.js +14 -3
  99. package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
  100. package/dist/components/core/kanban/KanbanColumn.tsx +43 -3
  101. package/dist/components/core/kanban/SolidKanbanView.d.ts +2 -0
  102. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  103. package/dist/components/core/kanban/SolidKanbanView.js +90 -52
  104. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  105. package/dist/components/core/kanban/SolidKanbanView.tsx +93 -13
  106. package/dist/components/core/list/SolidDataTable.d.ts +2 -1
  107. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  108. package/dist/components/core/list/SolidDataTable.js +2 -2
  109. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  110. package/dist/components/core/list/SolidDataTable.tsx +3 -0
  111. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  112. package/dist/components/core/list/SolidListView.js +114 -57
  113. package/dist/components/core/list/SolidListView.js.map +1 -1
  114. package/dist/components/core/list/SolidListView.tsx +71 -7
  115. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts.map +1 -1
  116. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js +14 -0
  117. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js.map +1 -1
  118. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +13 -0
  119. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.d.ts +3 -0
  120. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.d.ts.map +1 -0
  121. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.js +51 -0
  122. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.js.map +1 -0
  123. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.tsx +60 -0
  124. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.d.ts +4 -0
  125. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.d.ts.map +1 -0
  126. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.js +24 -0
  127. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.js.map +1 -0
  128. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.tsx +32 -0
  129. package/dist/components/core/model/ModelListViewData.d.ts.map +1 -1
  130. package/dist/components/core/model/ModelListViewData.js +6 -23
  131. package/dist/components/core/model/ModelListViewData.js.map +1 -1
  132. package/dist/components/core/model/ModelListViewData.tsx +1 -48
  133. package/dist/components/core/solid-agent/AgentModelIndicator.d.ts +5 -0
  134. package/dist/components/core/solid-agent/AgentModelIndicator.d.ts.map +1 -0
  135. package/dist/components/core/solid-agent/AgentModelIndicator.js +14 -0
  136. package/dist/components/core/solid-agent/AgentModelIndicator.js.map +1 -0
  137. package/dist/components/core/solid-agent/AgentModelIndicator.tsx +40 -0
  138. package/dist/components/core/solid-agent/AgentSignIn.d.ts +12 -0
  139. package/dist/components/core/solid-agent/AgentSignIn.d.ts.map +1 -0
  140. package/dist/components/core/solid-agent/AgentSignIn.js +82 -0
  141. package/dist/components/core/solid-agent/AgentSignIn.js.map +1 -0
  142. package/dist/components/core/solid-agent/AgentSignIn.tsx +91 -0
  143. package/dist/components/core/solid-agent/SolidAgent.module.css +596 -0
  144. package/dist/components/core/solid-agent/SolidAgentChat.d.ts +30 -0
  145. package/dist/components/core/solid-agent/SolidAgentChat.d.ts.map +1 -0
  146. package/dist/components/core/solid-agent/SolidAgentChat.js +300 -0
  147. package/dist/components/core/solid-agent/SolidAgentChat.js.map +1 -0
  148. package/dist/components/core/solid-agent/SolidAgentChat.tsx +451 -0
  149. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts +44 -0
  150. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts.map +1 -0
  151. package/dist/components/core/solid-agent/SolidAgentEmbedded.js +46 -0
  152. package/dist/components/core/solid-agent/SolidAgentEmbedded.js.map +1 -0
  153. package/dist/components/core/solid-agent/SolidAgentEmbedded.tsx +87 -0
  154. package/dist/components/core/solid-agent/SolidAgentHost.d.ts +8 -0
  155. package/dist/components/core/solid-agent/SolidAgentHost.d.ts.map +1 -0
  156. package/dist/components/core/solid-agent/SolidAgentHost.js +152 -0
  157. package/dist/components/core/solid-agent/SolidAgentHost.js.map +1 -0
  158. package/dist/components/core/solid-agent/SolidAgentHost.tsx +164 -0
  159. package/dist/components/core/solid-agent/SolidAgentMarkdown.d.ts +16 -0
  160. package/dist/components/core/solid-agent/SolidAgentMarkdown.d.ts.map +1 -0
  161. package/dist/components/core/solid-agent/SolidAgentMarkdown.js +161 -0
  162. package/dist/components/core/solid-agent/SolidAgentMarkdown.js.map +1 -0
  163. package/dist/components/core/solid-agent/SolidAgentMarkdown.tsx +133 -0
  164. package/dist/components/core/solid-agent/SolidAgentMount.d.ts +3 -0
  165. package/dist/components/core/solid-agent/SolidAgentMount.d.ts.map +1 -0
  166. package/dist/components/core/solid-agent/SolidAgentMount.js +62 -0
  167. package/dist/components/core/solid-agent/SolidAgentMount.js.map +1 -0
  168. package/dist/components/core/solid-agent/SolidAgentMount.tsx +31 -0
  169. package/dist/components/core/solid-agent/SolidXAIIcon.d.ts +5 -0
  170. package/dist/components/core/solid-agent/SolidXAIIcon.d.ts.map +1 -0
  171. package/dist/components/core/solid-agent/SolidXAIIcon.js +7 -0
  172. package/dist/components/core/solid-agent/SolidXAIIcon.js.map +1 -0
  173. package/dist/components/core/solid-agent/SolidXAIIcon.tsx +6 -0
  174. package/dist/components/core/solid-agent/agentAttachments.d.ts +20 -0
  175. package/dist/components/core/solid-agent/agentAttachments.d.ts.map +1 -0
  176. package/dist/components/core/solid-agent/agentAttachments.js +184 -0
  177. package/dist/components/core/solid-agent/agentAttachments.js.map +1 -0
  178. package/dist/components/core/solid-agent/agentAttachments.ts +119 -0
  179. package/dist/components/core/solid-agent/agentEvents.d.ts +34 -0
  180. package/dist/components/core/solid-agent/agentEvents.d.ts.map +1 -0
  181. package/dist/components/core/solid-agent/agentEvents.js +282 -0
  182. package/dist/components/core/solid-agent/agentEvents.js.map +1 -0
  183. package/dist/components/core/solid-agent/agentEvents.ts +292 -0
  184. package/dist/components/core/solid-agent/agentFormat.d.ts +18 -0
  185. package/dist/components/core/solid-agent/agentFormat.d.ts.map +1 -0
  186. package/dist/components/core/solid-agent/agentFormat.js +179 -0
  187. package/dist/components/core/solid-agent/agentFormat.js.map +1 -0
  188. package/dist/components/core/solid-agent/agentFormat.ts +160 -0
  189. package/dist/components/core/solid-agent/client/agentAttachmentMedia.d.ts +9 -0
  190. package/dist/components/core/solid-agent/client/agentAttachmentMedia.d.ts.map +1 -0
  191. package/dist/components/core/solid-agent/client/agentAttachmentMedia.js +129 -0
  192. package/dist/components/core/solid-agent/client/agentAttachmentMedia.js.map +1 -0
  193. package/dist/components/core/solid-agent/client/agentAttachmentMedia.ts +69 -0
  194. package/dist/components/core/solid-agent/client/agentAuth.d.ts +63 -0
  195. package/dist/components/core/solid-agent/client/agentAuth.d.ts.map +1 -0
  196. package/dist/components/core/solid-agent/client/agentAuth.js +307 -0
  197. package/dist/components/core/solid-agent/client/agentAuth.js.map +1 -0
  198. package/dist/components/core/solid-agent/client/agentAuth.ts +222 -0
  199. package/dist/components/core/solid-agent/client/agentRest.d.ts +30 -0
  200. package/dist/components/core/solid-agent/client/agentRest.d.ts.map +1 -0
  201. package/dist/components/core/solid-agent/client/agentRest.js +178 -0
  202. package/dist/components/core/solid-agent/client/agentRest.js.map +1 -0
  203. package/dist/components/core/solid-agent/client/agentRest.ts +100 -0
  204. package/dist/components/core/solid-agent/client/agentRuntime.d.ts +48 -0
  205. package/dist/components/core/solid-agent/client/agentRuntime.d.ts.map +1 -0
  206. package/dist/components/core/solid-agent/client/agentRuntime.js +406 -0
  207. package/dist/components/core/solid-agent/client/agentRuntime.js.map +1 -0
  208. package/dist/components/core/solid-agent/client/agentRuntime.ts +226 -0
  209. package/dist/components/core/solid-agent/client/agentSocket.d.ts +46 -0
  210. package/dist/components/core/solid-agent/client/agentSocket.d.ts.map +1 -0
  211. package/dist/components/core/solid-agent/client/agentSocket.js +535 -0
  212. package/dist/components/core/solid-agent/client/agentSocket.js.map +1 -0
  213. package/dist/components/core/solid-agent/client/agentSocket.ts +276 -0
  214. package/dist/components/core/solid-agent/client/agentUrls.d.ts +11 -0
  215. package/dist/components/core/solid-agent/client/agentUrls.d.ts.map +1 -0
  216. package/dist/components/core/solid-agent/client/agentUrls.js +18 -0
  217. package/dist/components/core/solid-agent/client/agentUrls.js.map +1 -0
  218. package/dist/components/core/solid-agent/client/agentUrls.ts +19 -0
  219. package/dist/components/core/solid-agent/composer/AgentComposer.d.ts +21 -0
  220. package/dist/components/core/solid-agent/composer/AgentComposer.d.ts.map +1 -0
  221. package/dist/components/core/solid-agent/composer/AgentComposer.js +219 -0
  222. package/dist/components/core/solid-agent/composer/AgentComposer.js.map +1 -0
  223. package/dist/components/core/solid-agent/composer/AgentComposer.tsx +241 -0
  224. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.d.ts +8 -0
  225. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.d.ts.map +1 -0
  226. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js +87 -0
  227. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js.map +1 -0
  228. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.tsx +58 -0
  229. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts +20 -0
  230. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts.map +1 -0
  231. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js +103 -0
  232. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js.map +1 -0
  233. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.ts +60 -0
  234. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts +11 -0
  235. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts.map +1 -0
  236. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js +21 -0
  237. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js.map +1 -0
  238. package/dist/components/core/solid-agent/embed/agentEmbedSamples.ts +266 -0
  239. package/dist/components/core/solid-agent/processes/agentHubProcessApi.d.ts +15 -0
  240. package/dist/components/core/solid-agent/processes/agentHubProcessApi.d.ts.map +1 -0
  241. package/dist/components/core/solid-agent/processes/agentHubProcessApi.js +122 -0
  242. package/dist/components/core/solid-agent/processes/agentHubProcessApi.js.map +1 -0
  243. package/dist/components/core/solid-agent/processes/agentHubProcessApi.ts +64 -0
  244. package/dist/components/core/solid-agent/sdk/solidAgent.d.ts +39 -0
  245. package/dist/components/core/solid-agent/sdk/solidAgent.d.ts.map +1 -0
  246. package/dist/components/core/solid-agent/sdk/solidAgent.js +44 -0
  247. package/dist/components/core/solid-agent/sdk/solidAgent.js.map +1 -0
  248. package/dist/components/core/solid-agent/sdk/solidAgent.ts +56 -0
  249. package/dist/components/core/solid-agent/thread/AgentThread.d.ts +17 -0
  250. package/dist/components/core/solid-agent/thread/AgentThread.d.ts.map +1 -0
  251. package/dist/components/core/solid-agent/thread/AgentThread.js +166 -0
  252. package/dist/components/core/solid-agent/thread/AgentThread.js.map +1 -0
  253. package/dist/components/core/solid-agent/thread/AgentThread.tsx +248 -0
  254. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.d.ts +36 -0
  255. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.d.ts.map +1 -0
  256. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.js +148 -0
  257. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.js.map +1 -0
  258. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.tsx +116 -0
  259. package/dist/components/core/solid-agent/thread/inlineWidget.d.ts +8 -0
  260. package/dist/components/core/solid-agent/thread/inlineWidget.d.ts.map +1 -0
  261. package/dist/components/core/solid-agent/thread/inlineWidget.js +30 -0
  262. package/dist/components/core/solid-agent/thread/inlineWidget.js.map +1 -0
  263. package/dist/components/core/solid-agent/thread/inlineWidget.ts +27 -0
  264. package/dist/components/core/solid-agent/types.d.ts +155 -0
  265. package/dist/components/core/solid-agent/types.d.ts.map +1 -0
  266. package/dist/components/core/solid-agent/types.js +31 -0
  267. package/dist/components/core/solid-agent/types.js.map +1 -0
  268. package/dist/components/core/solid-agent/types.ts +148 -0
  269. package/dist/components/core/solid-agent/useAdminInputContext.d.ts +4 -0
  270. package/dist/components/core/solid-agent/useAdminInputContext.d.ts.map +1 -0
  271. package/dist/components/core/solid-agent/useAdminInputContext.js +49 -0
  272. package/dist/components/core/solid-agent/useAdminInputContext.js.map +1 -0
  273. package/dist/components/core/solid-agent/useAdminInputContext.ts +52 -0
  274. package/dist/components/core/solid-agent/useAgentAuth.d.ts +14 -0
  275. package/dist/components/core/solid-agent/useAgentAuth.d.ts.map +1 -0
  276. package/dist/components/core/solid-agent/useAgentAuth.js +88 -0
  277. package/dist/components/core/solid-agent/useAgentAuth.js.map +1 -0
  278. package/dist/components/core/solid-agent/useAgentAuth.ts +40 -0
  279. package/dist/components/core/solid-agent/useAgentAvailability.d.ts +19 -0
  280. package/dist/components/core/solid-agent/useAgentAvailability.d.ts.map +1 -0
  281. package/dist/components/core/solid-agent/useAgentAvailability.js +109 -0
  282. package/dist/components/core/solid-agent/useAgentAvailability.js.map +1 -0
  283. package/dist/components/core/solid-agent/useAgentAvailability.ts +80 -0
  284. package/dist/components/core/solid-agent/useAgentChat.d.ts +22 -0
  285. package/dist/components/core/solid-agent/useAgentChat.d.ts.map +1 -0
  286. package/dist/components/core/solid-agent/useAgentChat.js +45 -0
  287. package/dist/components/core/solid-agent/useAgentChat.js.map +1 -0
  288. package/dist/components/core/solid-agent/useAgentChat.ts +57 -0
  289. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.d.ts +7 -0
  290. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.d.ts.map +1 -0
  291. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.js +15 -0
  292. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.js.map +1 -0
  293. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.tsx +24 -0
  294. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.d.ts +7 -0
  295. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.d.ts.map +1 -0
  296. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.js +15 -0
  297. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.js.map +1 -0
  298. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.tsx +28 -0
  299. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.d.ts +4 -0
  300. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.d.ts.map +1 -0
  301. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.js +20 -0
  302. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.js.map +1 -0
  303. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.tsx +8 -0
  304. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.d.ts +7 -0
  305. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.d.ts.map +1 -0
  306. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.js +11 -0
  307. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.js.map +1 -0
  308. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.tsx +16 -0
  309. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.d.ts +7 -0
  310. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.d.ts.map +1 -0
  311. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.js +67 -0
  312. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.js.map +1 -0
  313. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.tsx +135 -0
  314. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.d.ts +7 -0
  315. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.d.ts.map +1 -0
  316. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.js +24 -0
  317. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.js.map +1 -0
  318. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.tsx +17 -0
  319. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.d.ts +8 -0
  320. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.d.ts.map +1 -0
  321. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js +30 -0
  322. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js.map +1 -0
  323. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx +77 -0
  324. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.d.ts +7 -0
  325. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.d.ts.map +1 -0
  326. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.js +40 -0
  327. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.js.map +1 -0
  328. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.tsx +57 -0
  329. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.d.ts +4 -0
  330. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.d.ts.map +1 -0
  331. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.js +13 -0
  332. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.js.map +1 -0
  333. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.tsx +19 -0
  334. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.d.ts +7 -0
  335. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.d.ts.map +1 -0
  336. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.js +55 -0
  337. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.js.map +1 -0
  338. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.tsx +81 -0
  339. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.d.ts +4 -0
  340. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.d.ts.map +1 -0
  341. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.js +15 -0
  342. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.js.map +1 -0
  343. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.tsx +30 -0
  344. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.d.ts +4 -0
  345. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.d.ts.map +1 -0
  346. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.js +15 -0
  347. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.js.map +1 -0
  348. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.tsx +21 -0
  349. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.d.ts +7 -0
  350. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.d.ts.map +1 -0
  351. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.js +21 -0
  352. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.js.map +1 -0
  353. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.tsx +33 -0
  354. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.d.ts +4 -0
  355. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.d.ts.map +1 -0
  356. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.js +11 -0
  357. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.js.map +1 -0
  358. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.tsx +9 -0
  359. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.d.ts +15 -0
  360. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.d.ts.map +1 -0
  361. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.js +26 -0
  362. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.js.map +1 -0
  363. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.tsx +42 -0
  364. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.d.ts +7 -0
  365. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.d.ts.map +1 -0
  366. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.js +41 -0
  367. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.js.map +1 -0
  368. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.tsx +69 -0
  369. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.d.ts +7 -0
  370. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.d.ts.map +1 -0
  371. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.js +23 -0
  372. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.js.map +1 -0
  373. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.tsx +40 -0
  374. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.d.ts +4 -0
  375. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.d.ts.map +1 -0
  376. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.js +32 -0
  377. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.js.map +1 -0
  378. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.tsx +55 -0
  379. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.d.ts +7 -0
  380. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.d.ts.map +1 -0
  381. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.js +17 -0
  382. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.js.map +1 -0
  383. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.tsx +31 -0
  384. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.d.ts +12 -0
  385. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.d.ts.map +1 -0
  386. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.js +17 -0
  387. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.js.map +1 -0
  388. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.ts +19 -0
  389. package/dist/components/core/solid-agent/widgets/solidChatWidgets.module.css +909 -0
  390. package/dist/components/core/solid-ai/SolidAiChat.js +1 -1
  391. package/dist/components/core/solid-ai/SolidAiChat.js.map +1 -1
  392. package/dist/components/core/solid-ai/SolidAiChat.tsx +2 -2
  393. package/dist/components/layout/AdminLayout.d.ts.map +1 -1
  394. package/dist/components/layout/AdminLayout.js +2 -1
  395. package/dist/components/layout/AdminLayout.js.map +1 -1
  396. package/dist/components/layout/AdminLayout.tsx +2 -0
  397. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +1 -1
  398. package/dist/components/shad-cn-ui/SolidAutocomplete.js +2 -2
  399. package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +1 -1
  400. package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +19 -15
  401. package/dist/components/shad-cn-ui/SolidDialog.d.ts +2 -1
  402. package/dist/components/shad-cn-ui/SolidDialog.d.ts.map +1 -1
  403. package/dist/components/shad-cn-ui/SolidDialog.js +2 -2
  404. package/dist/components/shad-cn-ui/SolidDialog.js.map +1 -1
  405. package/dist/components/shad-cn-ui/SolidDialog.tsx +3 -0
  406. package/dist/components/shad-cn-ui/SolidIconPicker.d.ts +7 -0
  407. package/dist/components/shad-cn-ui/SolidIconPicker.d.ts.map +1 -0
  408. package/dist/components/shad-cn-ui/SolidIconPicker.js +43 -0
  409. package/dist/components/shad-cn-ui/SolidIconPicker.js.map +1 -0
  410. package/dist/components/shad-cn-ui/SolidIconPicker.tsx +73 -0
  411. package/dist/components/shad-cn-ui/index.d.ts +1 -0
  412. package/dist/components/shad-cn-ui/index.d.ts.map +1 -1
  413. package/dist/components/shad-cn-ui/index.js +1 -0
  414. package/dist/components/shad-cn-ui/index.js.map +1 -1
  415. package/dist/components/shad-cn-ui/index.ts +1 -0
  416. package/dist/constants/allowed-ai-models.d.ts +8 -0
  417. package/dist/constants/allowed-ai-models.d.ts.map +1 -0
  418. package/dist/constants/allowed-ai-models.js +33 -0
  419. package/dist/constants/allowed-ai-models.js.map +1 -0
  420. package/dist/constants/allowed-ai-models.ts +39 -0
  421. package/dist/helpers/hydrateRelationRules.d.ts.map +1 -1
  422. package/dist/helpers/hydrateRelationRules.js +3 -1
  423. package/dist/helpers/hydrateRelationRules.js.map +1 -1
  424. package/dist/helpers/hydrateRelationRules.ts +5 -1
  425. package/dist/helpers/registry.d.ts +4 -2
  426. package/dist/helpers/registry.d.ts.map +1 -1
  427. package/dist/helpers/registry.js +75 -12
  428. package/dist/helpers/registry.js.map +1 -1
  429. package/dist/helpers/registry.ts +73 -16
  430. package/dist/helpers/updatePasswordField.d.ts.map +1 -1
  431. package/dist/helpers/updatePasswordField.js +21 -15
  432. package/dist/helpers/updatePasswordField.js.map +1 -1
  433. package/dist/helpers/updatePasswordField.ts +6 -1
  434. package/dist/index.d.ts +21 -5
  435. package/dist/index.d.ts.map +1 -1
  436. package/dist/index.js +16 -3
  437. package/dist/index.js.map +1 -1
  438. package/dist/index.ts +34 -3
  439. package/dist/redux/api/fieldApi.js +1 -1
  440. package/dist/redux/api/fieldApi.js.map +1 -1
  441. package/dist/redux/api/fieldApi.ts +2 -2
  442. package/dist/redux/api/modelApi.d.ts +13 -13
  443. package/dist/redux/api/modelApi.d.ts.map +1 -1
  444. package/dist/redux/api/modelApi.js +15 -15
  445. package/dist/redux/api/modelApi.js.map +1 -1
  446. package/dist/redux/api/modelApi.ts +12 -15
  447. package/dist/redux/features/agentSlice.d.ts +34 -0
  448. package/dist/redux/features/agentSlice.d.ts.map +1 -0
  449. package/dist/redux/features/agentSlice.js +92 -0
  450. package/dist/redux/features/agentSlice.js.map +1 -0
  451. package/dist/redux/features/agentSlice.ts +119 -0
  452. package/dist/redux/store/defaultStoreConfig.d.ts +11 -10
  453. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  454. package/dist/redux/store/defaultStoreConfig.js +2 -0
  455. package/dist/redux/store/defaultStoreConfig.js.map +1 -1
  456. package/dist/redux/store/defaultStoreConfig.ts +2 -0
  457. package/dist/redux/store/solidEntityApiPool.d.ts.map +1 -1
  458. package/dist/redux/store/solidEntityApiPool.js +7 -0
  459. package/dist/redux/store/solidEntityApiPool.js.map +1 -1
  460. package/dist/redux/store/solidEntityApiPool.ts +6 -0
  461. package/dist/resources/globals.css +109 -1
  462. package/dist/resources/solid-custom.css +295 -0
  463. package/dist/resources/solid-tailwind-generated.css +1 -1
  464. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.css +47 -0
  465. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.d.ts +12 -0
  466. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.d.ts.map +1 -0
  467. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.js +80 -0
  468. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.js.map +1 -0
  469. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.tsx +123 -0
  470. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.css +110 -0
  471. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts +3 -0
  472. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts.map +1 -0
  473. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js +702 -0
  474. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js.map +1 -0
  475. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.tsx +630 -0
  476. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.css +303 -0
  477. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts +3 -0
  478. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts.map +1 -0
  479. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js +330 -0
  480. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js.map +1 -0
  481. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.tsx +460 -0
  482. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.css +125 -0
  483. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts +3 -0
  484. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts.map +1 -0
  485. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js +295 -0
  486. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js.map +1 -0
  487. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.tsx +275 -0
  488. package/dist/routes/pages/admin/core/WorkflowDefinitionEditorPage.js +11 -11
  489. package/dist/routes/pages/admin/core/WorkflowDefinitionEditorPage.js.map +1 -1
  490. package/dist/routes/pages/admin/core/WorkflowDefinitionEditorPage.tsx +15 -15
  491. package/dist/routes/pages/embed/AgentEmbedPage.d.ts +3 -0
  492. package/dist/routes/pages/embed/AgentEmbedPage.d.ts.map +1 -0
  493. package/dist/routes/pages/embed/AgentEmbedPage.js +170 -0
  494. package/dist/routes/pages/embed/AgentEmbedPage.js.map +1 -0
  495. package/dist/routes/pages/embed/AgentEmbedPage.module.css +195 -0
  496. package/dist/routes/pages/embed/AgentEmbedPage.tsx +169 -0
  497. package/dist/routes/solidRoutes.d.ts.map +1 -1
  498. package/dist/routes/solidRoutes.js +8 -0
  499. package/dist/routes/solidRoutes.js.map +1 -1
  500. package/dist/routes/solidRoutes.tsx +8 -0
  501. package/dist/types/extension-registry.d.ts +4 -0
  502. package/dist/types/extension-registry.d.ts.map +1 -1
  503. package/dist/types/extension-registry.js +7 -0
  504. package/dist/types/extension-registry.js.map +1 -1
  505. package/dist/types/extension-registry.ts +7 -0
  506. package/dist/types/index.d.ts +4 -0
  507. package/dist/types/list-row-action.d.ts +2 -0
  508. package/dist/types/list-row-action.d.ts.map +1 -1
  509. package/dist/types/list-row-action.js.map +1 -1
  510. package/dist/types/list-row-action.ts +3 -0
  511. package/dist/types/solid-core.d.ts +36 -0
  512. package/package.json +1 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Agent login (same flow as the SolidX agent-ui).
3
+ *
4
+ * The user pastes a Solid API key once; POST <backend>/api/agent/api-keys/me (with the agentId, if
5
+ * any) checks it with Solid and returns a random `agentToken`, a few public user fields, and where
6
+ * to chat: `wsUrl` for the WebSocket and `httpUrl` for the REST calls. The configured backend URL is
7
+ * only used to sign in and out. The API key stays on the agent server. The UI keeps the reply in
8
+ * sessionStorage, so it is gone when the tab closes, and sends the agentToken on every WebSocket
9
+ * frame and REST call. One entry per agent URL (backend + agent id).
10
+ * An entry is also tied to the Solid user who created it, so another user in the same tab never
11
+ * reuses it.
12
+ */
13
+ export type AgentUser = {
14
+ id?: number | string;
15
+ username?: string;
16
+ email?: string;
17
+ mobile?: string;
18
+ [key: string]: unknown;
19
+ };
20
+ export type AgentAuth = {
21
+ agentToken: string;
22
+ user: AgentUser;
23
+ solidUserId: string | null;
24
+ /** WebSocket URL to chat on. */
25
+ wsUrl: string;
26
+ /** Base URL for the REST calls (sessions, history). */
27
+ httpUrl: string;
28
+ };
29
+ export type AgentSignInResult = {
30
+ ok: true;
31
+ } | {
32
+ ok: false;
33
+ error: string;
34
+ status: number;
35
+ };
36
+ type Listener = () => void;
37
+ export type AgentBootstrap = Pick<AgentAuth, "agentToken" | "wsUrl" | "httpUrl" | "user">;
38
+ export declare function isExternalAgentAuth(agentUrl: string): boolean;
39
+ export declare function registerExternalAgentAuth(agentUrl: string, renew: () => Promise<AgentAuth>): {
40
+ setAuth(auth: AgentAuth): void;
41
+ dispose(): void;
42
+ };
43
+ export declare function renewExternalAgentAuth(agentUrl: string): Promise<void>;
44
+ /** The stored login for this agent backend, if it belongs to the signed-in Solid user. */
45
+ export declare function loadAgentAuth(agentUrl: string): Promise<AgentAuth | null>;
46
+ export declare function clearAgentAuth(agentUrl: string): void;
47
+ /**
48
+ * Signs out of the agent: forgets the login in this tab and asks the sign-in backend to forget the
49
+ * token too (`DELETE /api/agent/api-keys/me`). A backend without that call just lets the token expire.
50
+ */
51
+ export declare function signOutOfAgent(agentUrl: string): Promise<void>;
52
+ /** Forget every agent login in this tab (e.g. on logout). */
53
+ export declare function clearAllAgentAuth(): void;
54
+ /** The chat's full WebSocket endpoint, as named at sign-in; null until signed in. */
55
+ export declare function agentWsUrl(agentUrl: string): string | null;
56
+ /** Checks the process named by the most recent AgentHub login before reusing its WebSocket URL. */
57
+ export declare function isAgentProcessAvailable(auth: AgentAuth): Promise<boolean>;
58
+ /** Exchanges a Solid API key for an agentToken and stores it for this tab. */
59
+ export declare function signInWithApiKey(agentUrl: string, apiKey: string): Promise<AgentSignInResult>;
60
+ /** Calls `listener` whenever this agent backend's login is stored or cleared. Returns an unsubscribe. */
61
+ export declare function onAgentAuthChange(agentUrl: string, listener: Listener): () => void;
62
+ export {};
63
+ //# sourceMappingURL=agentAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentAuth.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/client/agentAuth.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,SAAS,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE7H,MAAM,MAAM,SAAS,GAAG;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAI5F,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC;AAM3B,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;AAE1F,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAA+C;AAE7G,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC;kBAKrE,SAAS;;EAG9B;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS5E;AAoCD,0FAA0F;AAC1F,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAU/E;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,QAc9C;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,iBASpD;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,SAShC;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE1D;AAED,mGAAmG;AACnG,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB/E;AAED,8EAA8E;AAC9E,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiCnG;AAED,yGAAyG;AACzG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,cAOrE"}
@@ -0,0 +1,307 @@
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
+ import { getSession } from "../../../../adapters/auth/getSession";
38
+ import { agentIdOf, toHttpBase } from "./agentUrls";
39
+ var STORAGE_PREFIX = "solidx.agent-session:";
40
+ var listeners = new Map();
41
+ // Embed credentials never enter browser storage or depend on a Solid admin login.
42
+ var external = new Map();
43
+ export function isExternalAgentAuth(agentUrl) { return external.has(loginScope(agentUrl)); }
44
+ export function registerExternalAgentAuth(agentUrl, renew) {
45
+ var scope = loginScope(agentUrl);
46
+ var entry = { auth: null, renew: renew };
47
+ external.set(scope, entry);
48
+ return {
49
+ setAuth: function (auth) { entry.auth = auth; notify(agentUrl); },
50
+ dispose: function () { if (external.get(scope) === entry) {
51
+ external.delete(scope);
52
+ notify(agentUrl);
53
+ } },
54
+ };
55
+ }
56
+ export function renewExternalAgentAuth(agentUrl) {
57
+ return __awaiter(this, void 0, void 0, function () {
58
+ var entry;
59
+ return __generator(this, function (_a) {
60
+ entry = external.get(loginScope(agentUrl));
61
+ if (!entry)
62
+ return [2 /*return*/];
63
+ if (!entry.pending) {
64
+ entry.pending = entry.renew().then(function (auth) {
65
+ if (external.get(loginScope(agentUrl)) === entry) {
66
+ entry.auth = auth;
67
+ notify(agentUrl);
68
+ }
69
+ }).finally(function () { entry.pending = undefined; });
70
+ }
71
+ return [2 /*return*/, entry.pending];
72
+ });
73
+ });
74
+ }
75
+ /** One login per backend and agent. */
76
+ function loginScope(agentUrl) {
77
+ if (/[?&]embedInstance=/.test(agentUrl))
78
+ return agentUrl;
79
+ var agentId = agentIdOf(agentUrl);
80
+ return agentId === undefined ? toHttpBase(agentUrl) : "".concat(toHttpBase(agentUrl), "?agentId=").concat(agentId);
81
+ }
82
+ function storageKey(agentUrl) {
83
+ return "".concat(STORAGE_PREFIX).concat(loginScope(agentUrl));
84
+ }
85
+ function notify(agentUrl) {
86
+ var _a;
87
+ (_a = listeners.get(loginScope(agentUrl))) === null || _a === void 0 ? void 0 : _a.forEach(function (listener) { return listener(); });
88
+ }
89
+ function currentSolidUserId() {
90
+ var _a;
91
+ return __awaiter(this, void 0, void 0, function () {
92
+ var session, id;
93
+ return __generator(this, function (_b) {
94
+ switch (_b.label) {
95
+ case 0: return [4 /*yield*/, getSession()];
96
+ case 1:
97
+ session = _b.sent();
98
+ id = (_a = session === null || session === void 0 ? void 0 : session.user) === null || _a === void 0 ? void 0 : _a.id;
99
+ return [2 /*return*/, id === undefined || id === null ? null : String(id)];
100
+ }
101
+ });
102
+ });
103
+ }
104
+ function readStored(agentUrl) {
105
+ var embed = external.get(loginScope(agentUrl));
106
+ if (embed)
107
+ return embed.auth;
108
+ try {
109
+ var raw = sessionStorage.getItem(storageKey(agentUrl));
110
+ var parsed = raw ? JSON.parse(raw) : null;
111
+ // Entries from before sign-in returned wsUrl/httpUrl are dropped, so the user signs in again.
112
+ return (parsed === null || parsed === void 0 ? void 0 : parsed.agentToken) && parsed.wsUrl && parsed.httpUrl ? parsed : null;
113
+ }
114
+ catch (_a) {
115
+ return null;
116
+ }
117
+ }
118
+ /** The stored login for this agent backend, if it belongs to the signed-in Solid user. */
119
+ export function loadAgentAuth(agentUrl) {
120
+ return __awaiter(this, void 0, void 0, function () {
121
+ var embed, stored, _a;
122
+ return __generator(this, function (_b) {
123
+ switch (_b.label) {
124
+ case 0:
125
+ embed = external.get(loginScope(agentUrl));
126
+ if (embed)
127
+ return [2 /*return*/, embed.auth];
128
+ stored = readStored(agentUrl);
129
+ if (!stored)
130
+ return [2 /*return*/, null];
131
+ _a = stored.solidUserId;
132
+ return [4 /*yield*/, currentSolidUserId()];
133
+ case 1:
134
+ if (_a !== (_b.sent())) {
135
+ clearAgentAuth(agentUrl);
136
+ return [2 /*return*/, null];
137
+ }
138
+ return [2 /*return*/, stored];
139
+ }
140
+ });
141
+ });
142
+ }
143
+ export function clearAgentAuth(agentUrl) {
144
+ var embed = external.get(loginScope(agentUrl));
145
+ if (embed) {
146
+ embed.auth = null;
147
+ notify(agentUrl);
148
+ void renewExternalAgentAuth(agentUrl).catch(function () { });
149
+ return;
150
+ }
151
+ try {
152
+ sessionStorage.removeItem(storageKey(agentUrl));
153
+ }
154
+ catch (_a) {
155
+ // Storage blocked: nothing was stored.
156
+ }
157
+ notify(agentUrl);
158
+ }
159
+ /**
160
+ * Signs out of the agent: forgets the login in this tab and asks the sign-in backend to forget the
161
+ * token too (`DELETE /api/agent/api-keys/me`). A backend without that call just lets the token expire.
162
+ */
163
+ export function signOutOfAgent(agentUrl) {
164
+ return __awaiter(this, void 0, void 0, function () {
165
+ var stored, _a;
166
+ return __generator(this, function (_b) {
167
+ switch (_b.label) {
168
+ case 0:
169
+ stored = readStored(agentUrl);
170
+ clearAgentAuth(agentUrl);
171
+ if (!stored)
172
+ return [2 /*return*/];
173
+ _b.label = 1;
174
+ case 1:
175
+ _b.trys.push([1, 3, , 4]);
176
+ return [4 /*yield*/, fetch("".concat(toHttpBase(agentUrl), "/api/agent/api-keys/me"), { method: "DELETE", headers: { Authorization: "Bearer ".concat(stored.agentToken) } })];
177
+ case 2:
178
+ _b.sent();
179
+ return [3 /*break*/, 4];
180
+ case 3:
181
+ _a = _b.sent();
182
+ return [3 /*break*/, 4];
183
+ case 4: return [2 /*return*/];
184
+ }
185
+ });
186
+ });
187
+ }
188
+ /** Forget every agent login in this tab (e.g. on logout). */
189
+ export function clearAllAgentAuth() {
190
+ try {
191
+ Object.keys(sessionStorage)
192
+ .filter(function (key) { return key.startsWith(STORAGE_PREFIX); })
193
+ .forEach(function (key) { return sessionStorage.removeItem(key); });
194
+ }
195
+ catch (_a) {
196
+ // Storage blocked: nothing was stored.
197
+ }
198
+ listeners.forEach(function (set) { return set.forEach(function (listener) { return listener(); }); });
199
+ }
200
+ /** The chat's full WebSocket endpoint, as named at sign-in; null until signed in. */
201
+ export function agentWsUrl(agentUrl) {
202
+ var _a, _b;
203
+ return (_b = (_a = readStored(agentUrl)) === null || _a === void 0 ? void 0 : _a.wsUrl) !== null && _b !== void 0 ? _b : null;
204
+ }
205
+ /** Checks the process named by the most recent AgentHub login before reusing its WebSocket URL. */
206
+ export function isAgentProcessAvailable(auth) {
207
+ return __awaiter(this, void 0, void 0, function () {
208
+ var controller, timeout, response, body, _a;
209
+ return __generator(this, function (_b) {
210
+ switch (_b.label) {
211
+ case 0:
212
+ controller = new AbortController();
213
+ timeout = window.setTimeout(function () { return controller.abort(); }, 5000);
214
+ _b.label = 1;
215
+ case 1:
216
+ _b.trys.push([1, 4, 5, 6]);
217
+ return [4 /*yield*/, fetch("".concat(auth.httpUrl.replace(/\/$/, ""), "/health"), {
218
+ cache: "no-store",
219
+ signal: controller.signal,
220
+ })];
221
+ case 2:
222
+ response = _b.sent();
223
+ if (!response.ok)
224
+ return [2 /*return*/, false];
225
+ return [4 /*yield*/, response.json().catch(function () { return null; })];
226
+ case 3:
227
+ body = _b.sent();
228
+ return [2 /*return*/, (body === null || body === void 0 ? void 0 : body.status) === "ready"];
229
+ case 4:
230
+ _a = _b.sent();
231
+ return [2 /*return*/, false];
232
+ case 5:
233
+ window.clearTimeout(timeout);
234
+ return [7 /*endfinally*/];
235
+ case 6: return [2 /*return*/];
236
+ }
237
+ });
238
+ });
239
+ }
240
+ /** Exchanges a Solid API key for an agentToken and stores it for this tab. */
241
+ export function signInWithApiKey(agentUrl, apiKey) {
242
+ var _a;
243
+ return __awaiter(this, void 0, void 0, function () {
244
+ var key, res, body, detail, auth, error_1;
245
+ var _b;
246
+ return __generator(this, function (_c) {
247
+ switch (_c.label) {
248
+ case 0:
249
+ key = apiKey.trim();
250
+ if (!key)
251
+ return [2 /*return*/, { ok: false, error: "Enter your API key.", status: 0 }];
252
+ _c.label = 1;
253
+ case 1:
254
+ _c.trys.push([1, 5, , 6]);
255
+ return [4 /*yield*/, fetch("".concat(toHttpBase(agentUrl), "/api/agent/api-keys/me"), {
256
+ method: "POST",
257
+ headers: { "Content-Type": "application/json" },
258
+ body: JSON.stringify({ apiKey: key, agentId: agentIdOf(agentUrl) }),
259
+ })];
260
+ case 2:
261
+ res = _c.sent();
262
+ return [4 /*yield*/, res.json().catch(function () { return null; })];
263
+ case 3:
264
+ body = _c.sent();
265
+ if (!res.ok) {
266
+ detail = typeof (body === null || body === void 0 ? void 0 : body.detail) === "string" ? body.detail : null;
267
+ return [2 /*return*/, { ok: false, error: detail !== null && detail !== void 0 ? detail : "Sign-in failed (HTTP ".concat(res.status, ")."), status: res.status }];
268
+ }
269
+ if (typeof (body === null || body === void 0 ? void 0 : body.agentToken) !== "string" || !body.agentToken) {
270
+ return [2 /*return*/, { ok: false, error: "The agent did not return a token.", status: res.status }];
271
+ }
272
+ if (typeof body.wsUrl !== "string" || !body.wsUrl || typeof body.httpUrl !== "string" || !body.httpUrl) {
273
+ return [2 /*return*/, { ok: false, error: "The agent did not say where to connect.", status: res.status }];
274
+ }
275
+ _b = {
276
+ agentToken: body.agentToken,
277
+ user: (_a = body.user) !== null && _a !== void 0 ? _a : {}
278
+ };
279
+ return [4 /*yield*/, currentSolidUserId()];
280
+ case 4:
281
+ auth = (_b.solidUserId = _c.sent(),
282
+ _b.wsUrl = body.wsUrl,
283
+ _b.httpUrl = body.httpUrl,
284
+ _b);
285
+ sessionStorage.setItem(storageKey(agentUrl), JSON.stringify(auth));
286
+ notify(agentUrl);
287
+ return [2 /*return*/, { ok: true }];
288
+ case 5:
289
+ error_1 = _c.sent();
290
+ return [2 /*return*/, { ok: false, error: error_1 instanceof Error ? error_1.message : "Could not reach the agent.", status: 0 }];
291
+ case 6: return [2 /*return*/];
292
+ }
293
+ });
294
+ });
295
+ }
296
+ /** Calls `listener` whenever this agent backend's login is stored or cleared. Returns an unsubscribe. */
297
+ export function onAgentAuthChange(agentUrl, listener) {
298
+ var base = loginScope(agentUrl);
299
+ if (!listeners.has(base))
300
+ listeners.set(base, new Set());
301
+ listeners.get(base).add(listener);
302
+ return function () {
303
+ var _a;
304
+ (_a = listeners.get(base)) === null || _a === void 0 ? void 0 : _a.delete(listener);
305
+ };
306
+ }
307
+ //# sourceMappingURL=agentAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentAuth.js","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/client/agentAuth.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSession } from \"../../../../adapters/auth/getSession\";\nimport { agentIdOf, toHttpBase } from \"./agentUrls\";\n\n/**\n * Agent login (same flow as the SolidX agent-ui).\n *\n * The user pastes a Solid API key once; POST <backend>/api/agent/api-keys/me (with the agentId, if\n * any) checks it with Solid and returns a random `agentToken`, a few public user fields, and where\n * to chat: `wsUrl` for the WebSocket and `httpUrl` for the REST calls. The configured backend URL is\n * only used to sign in and out. The API key stays on the agent server. The UI keeps the reply in\n * sessionStorage, so it is gone when the tab closes, and sends the agentToken on every WebSocket\n * frame and REST call. One entry per agent URL (backend + agent id).\n * An entry is also tied to the Solid user who created it, so another user in the same tab never\n * reuses it.\n */\n\nexport type AgentUser = { id?: number | string; username?: string; email?: string; mobile?: string; [key: string]: unknown };\n\nexport type AgentAuth = {\n agentToken: string;\n user: AgentUser;\n solidUserId: string | null;\n /** WebSocket URL to chat on. */\n wsUrl: string;\n /** Base URL for the REST calls (sessions, history). */\n httpUrl: string;\n};\n\nexport type AgentSignInResult = { ok: true } | { ok: false; error: string; status: number };\n\nconst STORAGE_PREFIX = \"solidx.agent-session:\";\n\ntype Listener = () => void;\nconst listeners = new Map<string, Set<Listener>>();\n\n// Embed credentials never enter browser storage or depend on a Solid admin login.\nconst external = new Map<string, { auth: AgentAuth | null; renew: () => Promise<AgentAuth>; pending?: Promise<void> }>();\n\nexport type AgentBootstrap = Pick<AgentAuth, \"agentToken\" | \"wsUrl\" | \"httpUrl\" | \"user\">;\n\nexport function isExternalAgentAuth(agentUrl: string): boolean { return external.has(loginScope(agentUrl)); }\n\nexport function registerExternalAgentAuth(agentUrl: string, renew: () => Promise<AgentAuth>) {\n const scope = loginScope(agentUrl);\n const entry = { auth: null as AgentAuth | null, renew };\n external.set(scope, entry);\n return {\n setAuth(auth: AgentAuth) { entry.auth = auth; notify(agentUrl); },\n dispose() { if (external.get(scope) === entry) { external.delete(scope); notify(agentUrl); } },\n };\n}\n\nexport async function renewExternalAgentAuth(agentUrl: string): Promise<void> {\n const entry = external.get(loginScope(agentUrl));\n if (!entry) return;\n if (!entry.pending) {\n entry.pending = entry.renew().then((auth) => {\n if (external.get(loginScope(agentUrl)) === entry) { entry.auth = auth; notify(agentUrl); }\n }).finally(() => { entry.pending = undefined; });\n }\n return entry.pending;\n}\n\n/** One login per backend and agent. */\nfunction loginScope(agentUrl: string) {\n if (/[?&]embedInstance=/.test(agentUrl)) return agentUrl;\n const agentId = agentIdOf(agentUrl);\n return agentId === undefined ? toHttpBase(agentUrl) : `${toHttpBase(agentUrl)}?agentId=${agentId}`;\n}\n\nfunction storageKey(agentUrl: string) {\n return `${STORAGE_PREFIX}${loginScope(agentUrl)}`;\n}\n\nfunction notify(agentUrl: string) {\n listeners.get(loginScope(agentUrl))?.forEach((listener) => listener());\n}\n\nasync function currentSolidUserId(): Promise<string | null> {\n const session = await getSession();\n const id = (session as any)?.user?.id;\n return id === undefined || id === null ? null : String(id);\n}\n\nfunction readStored(agentUrl: string): AgentAuth | null {\n const embed = external.get(loginScope(agentUrl));\n if (embed) return embed.auth;\n try {\n const raw = sessionStorage.getItem(storageKey(agentUrl));\n const parsed = raw ? (JSON.parse(raw) as AgentAuth) : null;\n // Entries from before sign-in returned wsUrl/httpUrl are dropped, so the user signs in again.\n return parsed?.agentToken && parsed.wsUrl && parsed.httpUrl ? parsed : null;\n } catch {\n return null;\n }\n}\n\n/** The stored login for this agent backend, if it belongs to the signed-in Solid user. */\nexport async function loadAgentAuth(agentUrl: string): Promise<AgentAuth | null> {\n const embed = external.get(loginScope(agentUrl));\n if (embed) return embed.auth;\n const stored = readStored(agentUrl);\n if (!stored) return null;\n if (stored.solidUserId !== (await currentSolidUserId())) {\n clearAgentAuth(agentUrl);\n return null;\n }\n return stored;\n}\n\nexport function clearAgentAuth(agentUrl: string) {\n const embed = external.get(loginScope(agentUrl));\n if (embed) {\n embed.auth = null;\n notify(agentUrl);\n void renewExternalAgentAuth(agentUrl).catch(() => { /* The embed route displays the failure and retry action. */ });\n return;\n }\n try {\n sessionStorage.removeItem(storageKey(agentUrl));\n } catch {\n // Storage blocked: nothing was stored.\n }\n notify(agentUrl);\n}\n\n/**\n * Signs out of the agent: forgets the login in this tab and asks the sign-in backend to forget the\n * token too (`DELETE /api/agent/api-keys/me`). A backend without that call just lets the token expire.\n */\nexport async function signOutOfAgent(agentUrl: string) {\n const stored = readStored(agentUrl);\n clearAgentAuth(agentUrl);\n if (!stored) return;\n try {\n await fetch(`${toHttpBase(agentUrl)}/api/agent/api-keys/me`, { method: \"DELETE\", headers: { Authorization: `Bearer ${stored.agentToken}` } });\n } catch {\n // Offline or unknown call: the token still expires when idle.\n }\n}\n\n/** Forget every agent login in this tab (e.g. on logout). */\nexport function clearAllAgentAuth() {\n try {\n Object.keys(sessionStorage)\n .filter((key) => key.startsWith(STORAGE_PREFIX))\n .forEach((key) => sessionStorage.removeItem(key));\n } catch {\n // Storage blocked: nothing was stored.\n }\n listeners.forEach((set) => set.forEach((listener) => listener()));\n}\n\n/** The chat's full WebSocket endpoint, as named at sign-in; null until signed in. */\nexport function agentWsUrl(agentUrl: string): string | null {\n return readStored(agentUrl)?.wsUrl ?? null;\n}\n\n/** Checks the process named by the most recent AgentHub login before reusing its WebSocket URL. */\nexport async function isAgentProcessAvailable(auth: AgentAuth): Promise<boolean> {\n const controller = new AbortController();\n const timeout = window.setTimeout(() => controller.abort(), 5000);\n try {\n const response = await fetch(`${auth.httpUrl.replace(/\\/$/, \"\")}/health`, {\n cache: \"no-store\",\n signal: controller.signal,\n });\n if (!response.ok) return false;\n const body = await response.json().catch(() => null);\n return body?.status === \"ready\";\n } catch {\n return false;\n } finally {\n window.clearTimeout(timeout);\n }\n}\n\n/** Exchanges a Solid API key for an agentToken and stores it for this tab. */\nexport async function signInWithApiKey(agentUrl: string, apiKey: string): Promise<AgentSignInResult> {\n const key = apiKey.trim();\n if (!key) return { ok: false, error: \"Enter your API key.\", status: 0 };\n try {\n const res = await fetch(`${toHttpBase(agentUrl)}/api/agent/api-keys/me`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ apiKey: key, agentId: agentIdOf(agentUrl) }),\n });\n const body = await res.json().catch(() => null);\n if (!res.ok) {\n const detail = typeof body?.detail === \"string\" ? body.detail : null;\n return { ok: false, error: detail ?? `Sign-in failed (HTTP ${res.status}).`, status: res.status };\n }\n if (typeof body?.agentToken !== \"string\" || !body.agentToken) {\n return { ok: false, error: \"The agent did not return a token.\", status: res.status };\n }\n if (typeof body.wsUrl !== \"string\" || !body.wsUrl || typeof body.httpUrl !== \"string\" || !body.httpUrl) {\n return { ok: false, error: \"The agent did not say where to connect.\", status: res.status };\n }\n const auth: AgentAuth = {\n agentToken: body.agentToken,\n user: body.user ?? {},\n solidUserId: await currentSolidUserId(),\n wsUrl: body.wsUrl,\n httpUrl: body.httpUrl,\n };\n sessionStorage.setItem(storageKey(agentUrl), JSON.stringify(auth));\n notify(agentUrl);\n return { ok: true };\n } catch (error) {\n return { ok: false, error: error instanceof Error ? error.message : \"Could not reach the agent.\", status: 0 };\n }\n}\n\n/** Calls `listener` whenever this agent backend's login is stored or cleared. Returns an unsubscribe. */\nexport function onAgentAuthChange(agentUrl: string, listener: Listener) {\n const base = loginScope(agentUrl);\n if (!listeners.has(base)) listeners.set(base, new Set());\n listeners.get(base)!.add(listener);\n return () => {\n listeners.get(base)?.delete(listener);\n };\n}\n"]}
@@ -0,0 +1,222 @@
1
+ import { getSession } from "../../../../adapters/auth/getSession";
2
+ import { agentIdOf, toHttpBase } from "./agentUrls";
3
+
4
+ /**
5
+ * Agent login (same flow as the SolidX agent-ui).
6
+ *
7
+ * The user pastes a Solid API key once; POST <backend>/api/agent/api-keys/me (with the agentId, if
8
+ * any) checks it with Solid and returns a random `agentToken`, a few public user fields, and where
9
+ * to chat: `wsUrl` for the WebSocket and `httpUrl` for the REST calls. The configured backend URL is
10
+ * only used to sign in and out. The API key stays on the agent server. The UI keeps the reply in
11
+ * sessionStorage, so it is gone when the tab closes, and sends the agentToken on every WebSocket
12
+ * frame and REST call. One entry per agent URL (backend + agent id).
13
+ * An entry is also tied to the Solid user who created it, so another user in the same tab never
14
+ * reuses it.
15
+ */
16
+
17
+ export type AgentUser = { id?: number | string; username?: string; email?: string; mobile?: string; [key: string]: unknown };
18
+
19
+ export type AgentAuth = {
20
+ agentToken: string;
21
+ user: AgentUser;
22
+ solidUserId: string | null;
23
+ /** WebSocket URL to chat on. */
24
+ wsUrl: string;
25
+ /** Base URL for the REST calls (sessions, history). */
26
+ httpUrl: string;
27
+ };
28
+
29
+ export type AgentSignInResult = { ok: true } | { ok: false; error: string; status: number };
30
+
31
+ const STORAGE_PREFIX = "solidx.agent-session:";
32
+
33
+ type Listener = () => void;
34
+ const listeners = new Map<string, Set<Listener>>();
35
+
36
+ // Embed credentials never enter browser storage or depend on a Solid admin login.
37
+ const external = new Map<string, { auth: AgentAuth | null; renew: () => Promise<AgentAuth>; pending?: Promise<void> }>();
38
+
39
+ export type AgentBootstrap = Pick<AgentAuth, "agentToken" | "wsUrl" | "httpUrl" | "user">;
40
+
41
+ export function isExternalAgentAuth(agentUrl: string): boolean { return external.has(loginScope(agentUrl)); }
42
+
43
+ export function registerExternalAgentAuth(agentUrl: string, renew: () => Promise<AgentAuth>) {
44
+ const scope = loginScope(agentUrl);
45
+ const entry = { auth: null as AgentAuth | null, renew };
46
+ external.set(scope, entry);
47
+ return {
48
+ setAuth(auth: AgentAuth) { entry.auth = auth; notify(agentUrl); },
49
+ dispose() { if (external.get(scope) === entry) { external.delete(scope); notify(agentUrl); } },
50
+ };
51
+ }
52
+
53
+ export async function renewExternalAgentAuth(agentUrl: string): Promise<void> {
54
+ const entry = external.get(loginScope(agentUrl));
55
+ if (!entry) return;
56
+ if (!entry.pending) {
57
+ entry.pending = entry.renew().then((auth) => {
58
+ if (external.get(loginScope(agentUrl)) === entry) { entry.auth = auth; notify(agentUrl); }
59
+ }).finally(() => { entry.pending = undefined; });
60
+ }
61
+ return entry.pending;
62
+ }
63
+
64
+ /** One login per backend and agent. */
65
+ function loginScope(agentUrl: string) {
66
+ if (/[?&]embedInstance=/.test(agentUrl)) return agentUrl;
67
+ const agentId = agentIdOf(agentUrl);
68
+ return agentId === undefined ? toHttpBase(agentUrl) : `${toHttpBase(agentUrl)}?agentId=${agentId}`;
69
+ }
70
+
71
+ function storageKey(agentUrl: string) {
72
+ return `${STORAGE_PREFIX}${loginScope(agentUrl)}`;
73
+ }
74
+
75
+ function notify(agentUrl: string) {
76
+ listeners.get(loginScope(agentUrl))?.forEach((listener) => listener());
77
+ }
78
+
79
+ async function currentSolidUserId(): Promise<string | null> {
80
+ const session = await getSession();
81
+ const id = (session as any)?.user?.id;
82
+ return id === undefined || id === null ? null : String(id);
83
+ }
84
+
85
+ function readStored(agentUrl: string): AgentAuth | null {
86
+ const embed = external.get(loginScope(agentUrl));
87
+ if (embed) return embed.auth;
88
+ try {
89
+ const raw = sessionStorage.getItem(storageKey(agentUrl));
90
+ const parsed = raw ? (JSON.parse(raw) as AgentAuth) : null;
91
+ // Entries from before sign-in returned wsUrl/httpUrl are dropped, so the user signs in again.
92
+ return parsed?.agentToken && parsed.wsUrl && parsed.httpUrl ? parsed : null;
93
+ } catch {
94
+ return null;
95
+ }
96
+ }
97
+
98
+ /** The stored login for this agent backend, if it belongs to the signed-in Solid user. */
99
+ export async function loadAgentAuth(agentUrl: string): Promise<AgentAuth | null> {
100
+ const embed = external.get(loginScope(agentUrl));
101
+ if (embed) return embed.auth;
102
+ const stored = readStored(agentUrl);
103
+ if (!stored) return null;
104
+ if (stored.solidUserId !== (await currentSolidUserId())) {
105
+ clearAgentAuth(agentUrl);
106
+ return null;
107
+ }
108
+ return stored;
109
+ }
110
+
111
+ export function clearAgentAuth(agentUrl: string) {
112
+ const embed = external.get(loginScope(agentUrl));
113
+ if (embed) {
114
+ embed.auth = null;
115
+ notify(agentUrl);
116
+ void renewExternalAgentAuth(agentUrl).catch(() => { /* The embed route displays the failure and retry action. */ });
117
+ return;
118
+ }
119
+ try {
120
+ sessionStorage.removeItem(storageKey(agentUrl));
121
+ } catch {
122
+ // Storage blocked: nothing was stored.
123
+ }
124
+ notify(agentUrl);
125
+ }
126
+
127
+ /**
128
+ * Signs out of the agent: forgets the login in this tab and asks the sign-in backend to forget the
129
+ * token too (`DELETE /api/agent/api-keys/me`). A backend without that call just lets the token expire.
130
+ */
131
+ export async function signOutOfAgent(agentUrl: string) {
132
+ const stored = readStored(agentUrl);
133
+ clearAgentAuth(agentUrl);
134
+ if (!stored) return;
135
+ try {
136
+ await fetch(`${toHttpBase(agentUrl)}/api/agent/api-keys/me`, { method: "DELETE", headers: { Authorization: `Bearer ${stored.agentToken}` } });
137
+ } catch {
138
+ // Offline or unknown call: the token still expires when idle.
139
+ }
140
+ }
141
+
142
+ /** Forget every agent login in this tab (e.g. on logout). */
143
+ export function clearAllAgentAuth() {
144
+ try {
145
+ Object.keys(sessionStorage)
146
+ .filter((key) => key.startsWith(STORAGE_PREFIX))
147
+ .forEach((key) => sessionStorage.removeItem(key));
148
+ } catch {
149
+ // Storage blocked: nothing was stored.
150
+ }
151
+ listeners.forEach((set) => set.forEach((listener) => listener()));
152
+ }
153
+
154
+ /** The chat's full WebSocket endpoint, as named at sign-in; null until signed in. */
155
+ export function agentWsUrl(agentUrl: string): string | null {
156
+ return readStored(agentUrl)?.wsUrl ?? null;
157
+ }
158
+
159
+ /** Checks the process named by the most recent AgentHub login before reusing its WebSocket URL. */
160
+ export async function isAgentProcessAvailable(auth: AgentAuth): Promise<boolean> {
161
+ const controller = new AbortController();
162
+ const timeout = window.setTimeout(() => controller.abort(), 5000);
163
+ try {
164
+ const response = await fetch(`${auth.httpUrl.replace(/\/$/, "")}/health`, {
165
+ cache: "no-store",
166
+ signal: controller.signal,
167
+ });
168
+ if (!response.ok) return false;
169
+ const body = await response.json().catch(() => null);
170
+ return body?.status === "ready";
171
+ } catch {
172
+ return false;
173
+ } finally {
174
+ window.clearTimeout(timeout);
175
+ }
176
+ }
177
+
178
+ /** Exchanges a Solid API key for an agentToken and stores it for this tab. */
179
+ export async function signInWithApiKey(agentUrl: string, apiKey: string): Promise<AgentSignInResult> {
180
+ const key = apiKey.trim();
181
+ if (!key) return { ok: false, error: "Enter your API key.", status: 0 };
182
+ try {
183
+ const res = await fetch(`${toHttpBase(agentUrl)}/api/agent/api-keys/me`, {
184
+ method: "POST",
185
+ headers: { "Content-Type": "application/json" },
186
+ body: JSON.stringify({ apiKey: key, agentId: agentIdOf(agentUrl) }),
187
+ });
188
+ const body = await res.json().catch(() => null);
189
+ if (!res.ok) {
190
+ const detail = typeof body?.detail === "string" ? body.detail : null;
191
+ return { ok: false, error: detail ?? `Sign-in failed (HTTP ${res.status}).`, status: res.status };
192
+ }
193
+ if (typeof body?.agentToken !== "string" || !body.agentToken) {
194
+ return { ok: false, error: "The agent did not return a token.", status: res.status };
195
+ }
196
+ if (typeof body.wsUrl !== "string" || !body.wsUrl || typeof body.httpUrl !== "string" || !body.httpUrl) {
197
+ return { ok: false, error: "The agent did not say where to connect.", status: res.status };
198
+ }
199
+ const auth: AgentAuth = {
200
+ agentToken: body.agentToken,
201
+ user: body.user ?? {},
202
+ solidUserId: await currentSolidUserId(),
203
+ wsUrl: body.wsUrl,
204
+ httpUrl: body.httpUrl,
205
+ };
206
+ sessionStorage.setItem(storageKey(agentUrl), JSON.stringify(auth));
207
+ notify(agentUrl);
208
+ return { ok: true };
209
+ } catch (error) {
210
+ return { ok: false, error: error instanceof Error ? error.message : "Could not reach the agent.", status: 0 };
211
+ }
212
+ }
213
+
214
+ /** Calls `listener` whenever this agent backend's login is stored or cleared. Returns an unsubscribe. */
215
+ export function onAgentAuthChange(agentUrl: string, listener: Listener) {
216
+ const base = loginScope(agentUrl);
217
+ if (!listeners.has(base)) listeners.set(base, new Set());
218
+ listeners.get(base)!.add(listener);
219
+ return () => {
220
+ listeners.get(base)?.delete(listener);
221
+ };
222
+ }
@@ -0,0 +1,30 @@
1
+ import type { AgentUploadedAttachment } from "../types";
2
+ import type { AgentModelAssignments } from "../types";
3
+ export declare const HISTORY_PAGE_SIZE = 50;
4
+ export type AgentSessionSummary = {
5
+ session_id: string;
6
+ status: string;
7
+ totalSteps: number;
8
+ created_at: string | null;
9
+ preview: string;
10
+ };
11
+ export type AgentHistoryPage = {
12
+ messages: any[];
13
+ has_more: boolean;
14
+ };
15
+ export type AgentConfigVersionStatus = {
16
+ processConfigVersion: number;
17
+ latestConfigVersion: number;
18
+ stale: boolean;
19
+ };
20
+ /** One page of a session's stored events, oldest first (page 1 = most recent page). */
21
+ export declare function fetchSessionHistory(agentUrl: string, sessionId: string, page?: number): Promise<AgentHistoryPage | null>;
22
+ /** The current user's past conversations (the agent derives the user from the token). */
23
+ export declare function fetchSessionList(agentUrl: string): Promise<AgentSessionSummary[] | null>;
24
+ export declare function fetchAgentConfigVersionStatus(agentUrl: string): Promise<AgentConfigVersionStatus | null>;
25
+ /** Model labels reported by the connected agent backend (never provider credentials). */
26
+ export declare function fetchAgentModelAssignments(agentUrl: string): Promise<AgentModelAssignments | null>;
27
+ export declare function deleteSession(agentUrl: string, sessionId: string): Promise<unknown>;
28
+ /** Upload files through the agent runtime into SolidX media storage. */
29
+ export declare function uploadAgentAttachments(agentUrl: string, files: File[], retried?: boolean): Promise<AgentUploadedAttachment[]>;
30
+ //# sourceMappingURL=agentRest.d.ts.map