@solidxai/core-ui 0.1.19-beta.0 → 0.1.19-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 (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,276 @@
1
+ import type { AgentAction, AgentConnection, AgentWireFrame } from "../types";
2
+ import { agentWsUrl, clearAgentAuth, isAgentProcessAvailable, loadAgentAuth, onAgentAuthChange } from "./agentAuth";
3
+
4
+ /**
5
+ * WebSocket client for the agent, connecting to the full `wsUrl` named at sign-in (agentAuth.ts).
6
+ *
7
+ * Held outside Redux because sockets are not serializable; the host wires its listeners to
8
+ * dispatch into agentSlice. Every outbound frame carries the `agentToken` from the agent login;
9
+ * there is no socket until the user has signed in with an API key, and signing out closes it. Unexpected closes
10
+ * reconnect with backoff (1s, 2s, 4s, then 15s) and re-send `resume_session`; frames sent
11
+ * while disconnected are queued and flushed once the session is re-established.
12
+ */
13
+
14
+ const BACKOFF_MS = [1000, 2000, 4000, 8000, 15000];
15
+
16
+ type EventListener = (frame: AgentWireFrame) => void;
17
+ type StatusListener = (status: AgentConnection) => void;
18
+
19
+ export class AgentSocket {
20
+ private ws: WebSocket | null = null;
21
+ private attempt = 0;
22
+ private timer: ReturnType<typeof setTimeout> | null = null;
23
+ private closedByUser = false;
24
+ private queue: AgentAction[] = [];
25
+ private eventListeners = new Set<EventListener>();
26
+ private statusListeners = new Set<StatusListener>();
27
+ private sessionId: string | null = null;
28
+ /** False until the agent confirms the session (session_started) on the current socket. */
29
+ private sessionReady = false;
30
+ private checkingProcessAvailability = false;
31
+ private unacknowledgedMessage: AgentAction | null = null;
32
+
33
+ private offAuthChange: () => void;
34
+ private readonly debugEmbed: boolean;
35
+
36
+ constructor(
37
+ private agentUrl: string,
38
+ private initialSessionId: string | null = null,
39
+ private checkProcessAvailability = false,
40
+ ) {
41
+ this.sessionId = initialSessionId;
42
+ this.debugEmbed = !checkProcessAvailability;
43
+ if (this.debugEmbed) console.info("[agent-embed][runtime] socket created", { endpoint: this.safeEndpoint(), hasInitialSession: !!initialSessionId });
44
+ // Signing in opens the socket on the wsUrl it named; signing out (or the token expiring) closes it.
45
+ this.offAuthChange = onAgentAuthChange(agentUrl, () => {
46
+ if (this.closedByUser) return;
47
+ if (agentWsUrl(agentUrl)) this.connect();
48
+ else this.disconnect();
49
+ });
50
+ }
51
+
52
+ private openSession() {
53
+ void this.sendRaw(this.sessionId ? { action: "resume_session", session_id: this.sessionId } : { action: "start_session" });
54
+ }
55
+
56
+ get currentSessionId() {
57
+ return this.sessionId;
58
+ }
59
+
60
+ onEvent(listener: EventListener) {
61
+ this.eventListeners.add(listener);
62
+ return () => this.eventListeners.delete(listener);
63
+ }
64
+
65
+ onStatus(listener: StatusListener) {
66
+ this.statusListeners.add(listener);
67
+ return () => this.statusListeners.delete(listener);
68
+ }
69
+
70
+ connect() {
71
+ if (this.closedByUser) return;
72
+ const state = this.ws?.readyState;
73
+ if (state === WebSocket.OPEN || state === WebSocket.CONNECTING) return;
74
+ this.closedByUser = false;
75
+ const url = agentWsUrl(this.agentUrl);
76
+ if (!url) {
77
+ if (this.debugEmbed) console.warn("[agent-embed][runtime] no WebSocket URL is available from auth yet");
78
+ // Not signed in: the auth listener connects once sign-in names the wsUrl.
79
+ this.setStatus("idle");
80
+ return;
81
+ }
82
+ this.setStatus(this.attempt === 0 ? "connecting" : "reconnecting");
83
+ if (this.debugEmbed) console.info("[agent-embed][runtime] opening WebSocket", { endpoint: this.safeEndpoint(url), attempt: this.attempt + 1 });
84
+
85
+ let ws: WebSocket;
86
+ try {
87
+ ws = new WebSocket(url);
88
+ } catch (error) {
89
+ if (this.debugEmbed) console.error("[agent-embed][runtime] WebSocket construction failed", { name: error instanceof Error ? error.name : "unknown", message: error instanceof Error ? error.message : String(error) });
90
+ this.scheduleReconnect();
91
+ return;
92
+ }
93
+ this.ws = ws;
94
+
95
+ ws.onopen = () => {
96
+ if (this.ws !== ws) return;
97
+ if (this.debugEmbed) console.info("[agent-embed][runtime] WebSocket open");
98
+ this.attempt = 0;
99
+ this.sessionReady = false;
100
+ this.setStatus("open");
101
+ this.openSession();
102
+ };
103
+
104
+ ws.onmessage = (message) => {
105
+ if (this.ws !== ws) return;
106
+ let frame: AgentWireFrame;
107
+ try {
108
+ frame = JSON.parse(message.data);
109
+ } catch {
110
+ return;
111
+ }
112
+ const eventType = frame.event_type ?? frame.type;
113
+ const payload = frame.event_data ?? frame.data;
114
+ if (this.debugEmbed) console.info("[agent-embed][runtime] WebSocket frame", { eventType, hasSessionId: !!(frame.session_id ?? payload?.session_id), isError: eventType === "error" });
115
+ if (eventType === "session_started") {
116
+ // After an agent restart the old session is gone and resume returns a new id.
117
+ this.sessionId = frame.session_id ?? payload?.session_id ?? null;
118
+ this.sessionReady = true;
119
+ this.flushQueue();
120
+ } else if (eventType === "error" && /agent token/i.test(String(payload?.error ?? ""))) {
121
+ // The agent forgot the token (idle 30 min or restarted): sign in again.
122
+ this.sessionReady = false;
123
+ if (this.unacknowledgedMessage) this.queue.push(this.unacknowledgedMessage);
124
+ this.unacknowledgedMessage = null;
125
+ clearAgentAuth(this.agentUrl);
126
+ } else if (eventType === "error" && !this.sessionReady) {
127
+ // Start/resume failed (e.g. auth); stop holding messages so their errors show.
128
+ this.sessionReady = true;
129
+ this.flushQueue();
130
+ }
131
+ if (eventType === "UserMessage" || eventType === "turn_complete" || eventType === "error") {
132
+ this.unacknowledgedMessage = null;
133
+ }
134
+ // Drop frames for a different session (e.g. a late event after a switch).
135
+ const frameSession = frame.session_id ?? payload?.session_id;
136
+ if (eventType !== "session_started" && frameSession && this.sessionId && frameSession !== this.sessionId) return;
137
+ this.eventListeners.forEach((listener) => listener(frame));
138
+ };
139
+
140
+ ws.onclose = (event) => {
141
+ if (this.ws !== ws) return;
142
+ if (this.debugEmbed) console.warn("[agent-embed][runtime] WebSocket closed", { code: event.code, reason: event.reason, clean: event.wasClean });
143
+ this.ws = null;
144
+ this.sessionReady = false;
145
+ if (this.closedByUser) {
146
+ this.setStatus("idle");
147
+ return;
148
+ }
149
+ this.scheduleReconnect();
150
+ };
151
+
152
+ ws.onerror = () => {
153
+ if (this.debugEmbed) console.error("[agent-embed][runtime] WebSocket error event");
154
+ // onclose follows and handles the reconnect.
155
+ };
156
+ }
157
+
158
+ /** Sends an action, or queues it until the socket and session are ready. */
159
+ send(action: AgentAction) {
160
+ if (this.closedByUser) return;
161
+ if (this.ws?.readyState === WebSocket.OPEN && this.sessionId && this.sessionReady) {
162
+ void this.sendRaw(action);
163
+ } else {
164
+ this.queue.push(action);
165
+ this.connect();
166
+ }
167
+ }
168
+
169
+ /** Starts a fresh conversation (drops the current session id). */
170
+ newSession() {
171
+ this.unacknowledgedMessage = null;
172
+ this.sessionId = null;
173
+ this.sessionReady = false;
174
+ this.queue = [];
175
+ if (this.ws?.readyState === WebSocket.OPEN) void this.sendRaw({ action: "start_session" });
176
+ else this.connect();
177
+ }
178
+
179
+ /** Switches to an existing conversation. */
180
+ resume(sessionId: string) {
181
+ this.sessionId = sessionId;
182
+ this.sessionReady = false;
183
+ if (this.ws?.readyState === WebSocket.OPEN) void this.sendRaw({ action: "resume_session", session_id: sessionId });
184
+ else this.connect();
185
+ }
186
+
187
+ /** Closes for good (the runtime is being disposed). */
188
+ close() {
189
+ this.offAuthChange();
190
+ this.closedByUser = true;
191
+ if (this.timer) clearTimeout(this.timer);
192
+ this.timer = null;
193
+ this.ws?.close();
194
+ this.ws = null;
195
+ }
196
+
197
+ /** Drops the socket after sign-out; the next sign-in reconnects. */
198
+ private disconnect() {
199
+ if (this.timer) clearTimeout(this.timer);
200
+ this.timer = null;
201
+ this.attempt = 0;
202
+ this.sessionReady = false;
203
+ if (this.ws) {
204
+ this.ws.onclose = null; // No reconnect.
205
+ this.ws.close();
206
+ this.ws = null;
207
+ }
208
+ this.setStatus("idle");
209
+ }
210
+
211
+ private flushQueue() {
212
+ const pending = this.queue;
213
+ this.queue = [];
214
+ pending.forEach((action) => {
215
+ // Queued messages were addressed before a session existed; point them at the current one.
216
+ const addressed = "session_id" in action && this.sessionId ? { ...action, session_id: this.sessionId } : action;
217
+ void this.sendRaw(addressed as AgentAction);
218
+ });
219
+ }
220
+
221
+ private async sendRaw(action: AgentAction) {
222
+ const agentToken = (await loadAgentAuth(this.agentUrl))?.agentToken;
223
+ if (!agentToken || this.ws?.readyState !== WebSocket.OPEN) {
224
+ if (this.debugEmbed) console.warn("[agent-embed][runtime] skipped outbound frame", { action: action.action, hasAgentToken: !!agentToken, socketOpen: this.ws?.readyState === WebSocket.OPEN });
225
+ if (action.action !== "start_session" && action.action !== "resume_session") this.queue.push(action);
226
+ return;
227
+ }
228
+ if (this.debugEmbed) console.info("[agent-embed][runtime] sending WebSocket action", { action: action.action });
229
+ this.ws.send(JSON.stringify({ ...action, agentToken }));
230
+ if (action.action === "message") this.unacknowledgedMessage = action;
231
+ }
232
+
233
+ private scheduleReconnect() {
234
+ if (this.timer) return;
235
+ const delay = BACKOFF_MS[Math.min(this.attempt, BACKOFF_MS.length - 1)];
236
+ this.attempt += 1;
237
+ this.setStatus(this.attempt > BACKOFF_MS.length ? "offline" : "reconnecting");
238
+ if (this.checkProcessAvailability && this.attempt >= 2 && this.attempt % 3 === 2) {
239
+ void this.checkAgentProcess(this.attempt);
240
+ }
241
+ this.timer = setTimeout(() => {
242
+ this.timer = null;
243
+ this.connect();
244
+ }, delay);
245
+ }
246
+
247
+ private async checkAgentProcess(failedAttempt: number) {
248
+ if (this.checkingProcessAvailability) return;
249
+ this.checkingProcessAvailability = true;
250
+ try {
251
+ const auth = await loadAgentAuth(this.agentUrl);
252
+ if (!auth || this.closedByUser || this.attempt !== failedAttempt) return;
253
+ if (!(await isAgentProcessAvailable(auth)) && !this.closedByUser && this.attempt === failedAttempt) {
254
+ // Repeated WebSocket failures plus a failed process health check mean the stored
255
+ // endpoint is stale. Returning to sign-in lets the manager issue a fresh wsUrl.
256
+ clearAgentAuth(this.agentUrl);
257
+ }
258
+ } finally {
259
+ this.checkingProcessAvailability = false;
260
+ }
261
+ }
262
+
263
+ private setStatus(status: AgentConnection) {
264
+ if (this.debugEmbed) console.info("[agent-embed][runtime] connection status", { status });
265
+ this.statusListeners.forEach((listener) => listener(status));
266
+ }
267
+
268
+ private safeEndpoint(url = this.agentUrl) {
269
+ try {
270
+ const parsed = new URL(url);
271
+ return `${parsed.origin}${parsed.pathname}`;
272
+ } catch {
273
+ return "invalid-url";
274
+ }
275
+ }
276
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * A chat's agent URL is the configured backend URL (used only to sign in), plus the agent it talks to
3
+ * when one is given (`<backend>?agentId=5`): required for the Agent Hub, optional for SolidX.
4
+ * Each agent URL has its own login.
5
+ */
6
+ export declare function withAgentId(url: string, agentId?: number): string;
7
+ /** The agent id named by an agent URL, if any. */
8
+ export declare function agentIdOf(url: string): number | undefined;
9
+ /** `http(s)://host[:port]` of the sign-in backend, from a configured agent URL (http or ws, trailing slash ok). */
10
+ export declare function toHttpBase(url: string): string;
11
+ //# sourceMappingURL=agentUrls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentUrls.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/client/agentUrls.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzD;AAED,mHAAmH;AACnH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * A chat's agent URL is the configured backend URL (used only to sign in), plus the agent it talks to
3
+ * when one is given (`<backend>?agentId=5`): required for the Agent Hub, optional for SolidX.
4
+ * Each agent URL has its own login.
5
+ */
6
+ export function withAgentId(url, agentId) {
7
+ return agentId === undefined ? url : "".concat(toHttpBase(url), "?agentId=").concat(agentId);
8
+ }
9
+ /** The agent id named by an agent URL, if any. */
10
+ export function agentIdOf(url) {
11
+ var match = url.match(/[?&]agentId=(\d+)/);
12
+ return match ? Number(match[1]) : undefined;
13
+ }
14
+ /** `http(s)://host[:port]` of the sign-in backend, from a configured agent URL (http or ws, trailing slash ok). */
15
+ export function toHttpBase(url) {
16
+ return url.trim().split("?")[0].replace(/\/$/, "").replace(/^ws(s?):\/\//i, "http$1://");
17
+ }
18
+ //# sourceMappingURL=agentUrls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentUrls.js","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/client/agentUrls.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,OAAgB;IACrD,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAG,UAAU,CAAC,GAAG,CAAC,sBAAY,OAAO,CAAE,CAAC;AACjF,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,SAAS,CAAC,GAAW;IACjC,IAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,mHAAmH;AACnH,MAAM,UAAU,UAAU,CAAC,GAAW;IAClC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;AAC7F,CAAC","sourcesContent":["/**\n * A chat's agent URL is the configured backend URL (used only to sign in), plus the agent it talks to\n * when one is given (`<backend>?agentId=5`): required for the Agent Hub, optional for SolidX.\n * Each agent URL has its own login.\n */\nexport function withAgentId(url: string, agentId?: number): string {\n return agentId === undefined ? url : `${toHttpBase(url)}?agentId=${agentId}`;\n}\n\n/** The agent id named by an agent URL, if any. */\nexport function agentIdOf(url: string): number | undefined {\n const match = url.match(/[?&]agentId=(\\d+)/);\n return match ? Number(match[1]) : undefined;\n}\n\n/** `http(s)://host[:port]` of the sign-in backend, from a configured agent URL (http or ws, trailing slash ok). */\nexport function toHttpBase(url: string): string {\n return url.trim().split(\"?\")[0].replace(/\\/$/, \"\").replace(/^ws(s?):\\/\\//i, \"http$1://\");\n}\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * A chat's agent URL is the configured backend URL (used only to sign in), plus the agent it talks to
3
+ * when one is given (`<backend>?agentId=5`): required for the Agent Hub, optional for SolidX.
4
+ * Each agent URL has its own login.
5
+ */
6
+ export function withAgentId(url: string, agentId?: number): string {
7
+ return agentId === undefined ? url : `${toHttpBase(url)}?agentId=${agentId}`;
8
+ }
9
+
10
+ /** The agent id named by an agent URL, if any. */
11
+ export function agentIdOf(url: string): number | undefined {
12
+ const match = url.match(/[?&]agentId=(\d+)/);
13
+ return match ? Number(match[1]) : undefined;
14
+ }
15
+
16
+ /** `http(s)://host[:port]` of the sign-in backend, from a configured agent URL (http or ws, trailing slash ok). */
17
+ export function toHttpBase(url: string): string {
18
+ return url.trim().split("?")[0].replace(/\/$/, "").replace(/^ws(s?):\/\//i, "http$1://");
19
+ }
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import type { AgentAttachment, AgentCommand } from "../types";
3
+ type Props = {
4
+ working: boolean;
5
+ disabled: boolean;
6
+ placeholder?: string;
7
+ commands: AgentCommand[];
8
+ /** Text to place in the box (e.g. a prefilled prompt); changing `seedKey` re-applies it. */
9
+ seed?: string;
10
+ seedKey?: number;
11
+ onSend: (text: string, attachments: AgentAttachment[]) => void | Promise<void>;
12
+ onStop: () => void;
13
+ modelIndicator?: React.ReactNode;
14
+ };
15
+ /**
16
+ * Message box: Enter sends, Shift+Enter adds a line, "/" at the start lists the agent's commands.
17
+ * Files can be attached with the paperclip, dropped onto the box, or pasted.
18
+ */
19
+ export declare function AgentComposer({ working, disabled, placeholder, commands, seed, seedKey, onSend, onStop, modelIndicator }: Props): import("react/jsx-runtime").JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=AgentComposer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentComposer.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/composer/AgentComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAGpE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG9D,KAAK,KAAK,GAAG;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,4FAA4F;IAC5F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,2CAyN/H"}
@@ -0,0 +1,219 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ 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;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
49
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
+ if (ar || !(i in from)) {
51
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
+ ar[i] = from[i];
53
+ }
54
+ }
55
+ return to.concat(ar || Array.prototype.slice.call(from));
56
+ };
57
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
58
+ import { useEffect, useMemo, useRef, useState } from "react";
59
+ import { ArrowUp, FileText, Paperclip, Square, X } from "lucide-react";
60
+ import styles from "../SolidAgent.module.css";
61
+ import { AGENT_ATTACHMENT_ACCEPT, MAX_AGENT_ATTACHMENTS, formatFileSize, readAgentAttachments } from "../agentAttachments";
62
+ /**
63
+ * Message box: Enter sends, Shift+Enter adds a line, "/" at the start lists the agent's commands.
64
+ * Files can be attached with the paperclip, dropped onto the box, or pasted.
65
+ */
66
+ export function AgentComposer(_a) {
67
+ var _this = this;
68
+ var working = _a.working, disabled = _a.disabled, placeholder = _a.placeholder, commands = _a.commands, seed = _a.seed, seedKey = _a.seedKey, onSend = _a.onSend, onStop = _a.onStop, modelIndicator = _a.modelIndicator;
69
+ var _b = useState(""), text = _b[0], setText = _b[1];
70
+ var _c = useState(0), active = _c[0], setActive = _c[1];
71
+ var _d = useState([]), attachments = _d[0], setAttachments = _d[1];
72
+ var _e = useState([]), attachErrors = _e[0], setAttachErrors = _e[1];
73
+ var _f = useState(false), dragging = _f[0], setDragging = _f[1];
74
+ var _g = useState(false), sending = _g[0], setSending = _g[1];
75
+ var ref = useRef(null);
76
+ var fileInputRef = useRef(null);
77
+ useEffect(function () {
78
+ if (seed == null)
79
+ return;
80
+ setText(seed);
81
+ requestAnimationFrame(function () {
82
+ var _a;
83
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus();
84
+ autosize();
85
+ });
86
+ // eslint-disable-next-line react-hooks/exhaustive-deps
87
+ }, [seedKey]);
88
+ useEffect(function () {
89
+ var _a;
90
+ if (!disabled)
91
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus();
92
+ }, [disabled]);
93
+ var slashQuery = text.startsWith("/") && !text.includes(" ") ? text.slice(1).toLowerCase() : null;
94
+ var matches = useMemo(function () { return (slashQuery == null ? [] : commands.filter(function (cmd) { return cmd.name.replace(/^\//, "").toLowerCase().startsWith(slashQuery); })); }, [commands, slashQuery]);
95
+ function autosize() {
96
+ var el = ref.current;
97
+ if (!el)
98
+ return;
99
+ el.style.height = "auto";
100
+ el.style.height = "".concat(Math.min(el.scrollHeight, 200), "px");
101
+ }
102
+ var addFiles = function (files) { return __awaiter(_this, void 0, void 0, function () {
103
+ var _a, added, errors;
104
+ return __generator(this, function (_b) {
105
+ switch (_b.label) {
106
+ case 0:
107
+ if (!files.length || disabled || sending)
108
+ return [2 /*return*/];
109
+ return [4 /*yield*/, readAgentAttachments(files, attachments)];
110
+ case 1:
111
+ _a = _b.sent(), added = _a.added, errors = _a.errors;
112
+ if (added.length)
113
+ setAttachments(function (prev) { return __spreadArray(__spreadArray([], prev, true), added, true); });
114
+ setAttachErrors(errors);
115
+ return [2 /*return*/];
116
+ }
117
+ });
118
+ }); };
119
+ var removeAttachment = function (index) {
120
+ setAttachments(function (prev) { return prev.filter(function (_, i) { return i !== index; }); });
121
+ setAttachErrors([]);
122
+ };
123
+ var canSend = (!!text.trim() || attachments.length > 0) && !working && !disabled && !sending;
124
+ var submit = function () { return __awaiter(_this, void 0, void 0, function () {
125
+ var error_1;
126
+ return __generator(this, function (_a) {
127
+ switch (_a.label) {
128
+ case 0:
129
+ if (!canSend)
130
+ return [2 /*return*/];
131
+ setSending(true);
132
+ setAttachErrors([]);
133
+ _a.label = 1;
134
+ case 1:
135
+ _a.trys.push([1, 3, 4, 5]);
136
+ return [4 /*yield*/, onSend(text.trim(), attachments)];
137
+ case 2:
138
+ _a.sent();
139
+ setText("");
140
+ setAttachments([]);
141
+ requestAnimationFrame(autosize);
142
+ return [3 /*break*/, 5];
143
+ case 3:
144
+ error_1 = _a.sent();
145
+ setAttachErrors([error_1 instanceof Error ? error_1.message : "The message could not be sent."]);
146
+ return [3 /*break*/, 5];
147
+ case 4:
148
+ setSending(false);
149
+ return [7 /*endfinally*/];
150
+ case 5: return [2 /*return*/];
151
+ }
152
+ });
153
+ }); };
154
+ var pickCommand = function (cmd) {
155
+ var _a;
156
+ setText("/".concat(cmd.name.replace(/^\//, ""), " "));
157
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.focus();
158
+ };
159
+ var onKeyDown = function (event) {
160
+ if (matches.length) {
161
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
162
+ event.preventDefault();
163
+ setActive(function (i) { return (i + (event.key === "ArrowDown" ? 1 : -1) + matches.length) % matches.length; });
164
+ return;
165
+ }
166
+ if (event.key === "Tab" || (event.key === "Enter" && !event.shiftKey)) {
167
+ event.preventDefault();
168
+ pickCommand(matches[Math.min(active, matches.length - 1)]);
169
+ return;
170
+ }
171
+ }
172
+ if (event.key === "Enter" && !event.shiftKey) {
173
+ event.preventDefault();
174
+ submit();
175
+ }
176
+ };
177
+ var onPaste = function (event) {
178
+ var _a, _b;
179
+ var files = Array.from((_b = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.files) !== null && _b !== void 0 ? _b : []);
180
+ if (files.length) {
181
+ event.preventDefault();
182
+ void addFiles(files);
183
+ }
184
+ };
185
+ var dropHandlers = {
186
+ onDragOver: function (event) {
187
+ var _a, _b;
188
+ if (disabled || sending || !((_b = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.types) === null || _b === void 0 ? void 0 : _b.includes("Files")))
189
+ return;
190
+ event.preventDefault();
191
+ setDragging(true);
192
+ },
193
+ onDragLeave: function (event) {
194
+ if (!event.currentTarget.contains(event.relatedTarget))
195
+ setDragging(false);
196
+ },
197
+ onDrop: function (event) {
198
+ var _a, _b;
199
+ if (disabled || sending)
200
+ return;
201
+ event.preventDefault();
202
+ setDragging(false);
203
+ void addFiles(Array.from((_b = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) !== null && _b !== void 0 ? _b : []));
204
+ },
205
+ };
206
+ return (_jsxs("div", __assign({ className: "".concat(styles.composer, " ").concat(dragging ? styles.composerDragging : "") }, dropHandlers, { children: [matches.length > 0 && (_jsx("div", { className: styles.popover, role: "listbox", "aria-label": "Commands", children: matches.map(function (cmd, i) { return (_jsxs("button", { type: "button", role: "option", "aria-selected": i === active, className: "".concat(styles.popoverItem, " ").concat(i === active ? styles.popoverItemActive : ""), onMouseDown: function (event) {
207
+ event.preventDefault();
208
+ pickCommand(cmd);
209
+ }, children: [_jsxs("span", { className: styles.popoverCmd, children: ["/", cmd.name.replace(/^\//, "")] }), cmd.description && _jsx("span", { className: styles.popoverDesc, children: cmd.description })] }, cmd.name)); }) })), attachments.length > 0 && (_jsx("ul", { className: styles.attachmentTray, "aria-label": "Attached files", children: attachments.map(function (item, index) { return (_jsxs("li", { className: styles.attachmentChip, children: [item.meta.previewUrl ? (_jsx("img", { className: styles.attachmentThumb, src: item.meta.previewUrl, alt: "" })) : (_jsx("span", { className: styles.attachmentIcon, children: _jsx(FileText, { size: 14 }) })), _jsxs("span", { className: styles.attachmentText, children: [_jsx("span", { className: styles.attachmentName, title: item.meta.name, children: item.meta.name }), _jsx("span", { className: styles.attachmentSize, children: formatFileSize(item.meta.size) })] }), _jsx("button", { type: "button", className: styles.attachmentRemove, "aria-label": "Remove ".concat(item.meta.name), onClick: function () { return removeAttachment(index); }, children: _jsx(X, { size: 12 }) })] }, "".concat(item.meta.name, "-").concat(index))); }) })), attachErrors.length > 0 && (_jsx("div", { className: styles.attachmentErrors, role: "alert", children: attachErrors.map(function (error) { return _jsx("div", { children: error }, error); }) })), _jsx("textarea", { ref: ref, className: styles.textarea, rows: 1, value: text, disabled: disabled || sending, "aria-label": "Message the SolidX Agent", placeholder: dragging ? "Drop files to attach" : placeholder !== null && placeholder !== void 0 ? placeholder : "Ask the agent…", onChange: function (event) {
210
+ setText(event.target.value);
211
+ setActive(0);
212
+ autosize();
213
+ }, onKeyDown: onKeyDown, onPaste: onPaste }), _jsxs("div", { className: styles.composerRow, children: [_jsx("input", { ref: fileInputRef, type: "file", multiple: true, accept: AGENT_ATTACHMENT_ACCEPT, hidden: true, onChange: function (event) {
214
+ var _a;
215
+ void addFiles(Array.from((_a = event.target.files) !== null && _a !== void 0 ? _a : []));
216
+ event.target.value = "";
217
+ } }), _jsx("button", { type: "button", className: styles.iconBtn, "aria-label": "Attach files", title: "Attach files (up to ".concat(MAX_AGENT_ATTACHMENTS, ": images or text files)"), disabled: disabled || sending || attachments.length >= MAX_AGENT_ATTACHMENTS, onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: _jsx(Paperclip, { size: 16 }) }), modelIndicator, working ? (_jsxs("button", { type: "button", className: styles.stopBtn, onClick: onStop, "aria-label": "Stop the agent", children: [_jsx(Square, { size: 10, fill: "currentColor" }), " Stop"] })) : (_jsx("button", { type: "button", className: styles.sendBtn, onClick: submit, disabled: !canSend, "aria-label": "Send", children: _jsx(ArrowUp, { size: 16 }) }))] })] })));
218
+ }
219
+ //# sourceMappingURL=AgentComposer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentComposer.js","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/composer/AgentComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { ArrowUp, FileText, Paperclip, Square, X } from \"lucide-react\";\nimport styles from \"../SolidAgent.module.css\";\nimport type { AgentAttachment, AgentCommand } from \"../types\";\nimport { AGENT_ATTACHMENT_ACCEPT, MAX_AGENT_ATTACHMENTS, formatFileSize, readAgentAttachments } from \"../agentAttachments\";\n\ntype Props = {\n working: boolean;\n disabled: boolean;\n placeholder?: string;\n commands: AgentCommand[];\n /** Text to place in the box (e.g. a prefilled prompt); changing `seedKey` re-applies it. */\n seed?: string;\n seedKey?: number;\n onSend: (text: string, attachments: AgentAttachment[]) => void | Promise<void>;\n onStop: () => void;\n modelIndicator?: React.ReactNode;\n};\n\n/**\n * Message box: Enter sends, Shift+Enter adds a line, \"/\" at the start lists the agent's commands.\n * Files can be attached with the paperclip, dropped onto the box, or pasted.\n */\nexport function AgentComposer({ working, disabled, placeholder, commands, seed, seedKey, onSend, onStop, modelIndicator }: Props) {\n const [text, setText] = useState(\"\");\n const [active, setActive] = useState(0);\n const [attachments, setAttachments] = useState<AgentAttachment[]>([]);\n const [attachErrors, setAttachErrors] = useState<string[]>([]);\n const [dragging, setDragging] = useState(false);\n const [sending, setSending] = useState(false);\n const ref = useRef<HTMLTextAreaElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (seed == null) return;\n setText(seed);\n requestAnimationFrame(() => {\n ref.current?.focus();\n autosize();\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [seedKey]);\n\n useEffect(() => {\n if (!disabled) ref.current?.focus();\n }, [disabled]);\n\n const slashQuery = text.startsWith(\"/\") && !text.includes(\" \") ? text.slice(1).toLowerCase() : null;\n const matches = useMemo(\n () => (slashQuery == null ? [] : commands.filter((cmd) => cmd.name.replace(/^\\//, \"\").toLowerCase().startsWith(slashQuery))),\n [commands, slashQuery],\n );\n\n function autosize() {\n const el = ref.current;\n if (!el) return;\n el.style.height = \"auto\";\n el.style.height = `${Math.min(el.scrollHeight, 200)}px`;\n }\n\n const addFiles = async (files: File[]) => {\n if (!files.length || disabled || sending) return;\n const { added, errors } = await readAgentAttachments(files, attachments);\n if (added.length) setAttachments((prev) => [...prev, ...added]);\n setAttachErrors(errors);\n };\n\n const removeAttachment = (index: number) => {\n setAttachments((prev) => prev.filter((_, i) => i !== index));\n setAttachErrors([]);\n };\n\n const canSend = (!!text.trim() || attachments.length > 0) && !working && !disabled && !sending;\n\n const submit = async () => {\n if (!canSend) return;\n setSending(true);\n setAttachErrors([]);\n try {\n await onSend(text.trim(), attachments);\n setText(\"\");\n setAttachments([]);\n requestAnimationFrame(autosize);\n } catch (error) {\n setAttachErrors([error instanceof Error ? error.message : \"The message could not be sent.\"]);\n } finally {\n setSending(false);\n }\n };\n\n const pickCommand = (cmd: AgentCommand) => {\n setText(`/${cmd.name.replace(/^\\//, \"\")} `);\n ref.current?.focus();\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (matches.length) {\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n setActive((i) => (i + (event.key === \"ArrowDown\" ? 1 : -1) + matches.length) % matches.length);\n return;\n }\n if (event.key === \"Tab\" || (event.key === \"Enter\" && !event.shiftKey)) {\n event.preventDefault();\n pickCommand(matches[Math.min(active, matches.length - 1)]);\n return;\n }\n }\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n submit();\n }\n };\n\n const onPaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n const files = Array.from(event.clipboardData?.files ?? []);\n if (files.length) {\n event.preventDefault();\n void addFiles(files);\n }\n };\n\n const dropHandlers = {\n onDragOver: (event: React.DragEvent) => {\n if (disabled || sending || !event.dataTransfer?.types?.includes(\"Files\")) return;\n event.preventDefault();\n setDragging(true);\n },\n onDragLeave: (event: React.DragEvent) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node)) setDragging(false);\n },\n onDrop: (event: React.DragEvent) => {\n if (disabled || sending) return;\n event.preventDefault();\n setDragging(false);\n void addFiles(Array.from(event.dataTransfer?.files ?? []));\n },\n };\n\n return (\n <div className={`${styles.composer} ${dragging ? styles.composerDragging : \"\"}`} {...dropHandlers}>\n {matches.length > 0 && (\n <div className={styles.popover} role=\"listbox\" aria-label=\"Commands\">\n {matches.map((cmd, i) => (\n <button\n key={cmd.name}\n type=\"button\"\n role=\"option\"\n aria-selected={i === active}\n className={`${styles.popoverItem} ${i === active ? styles.popoverItemActive : \"\"}`}\n onMouseDown={(event) => {\n event.preventDefault();\n pickCommand(cmd);\n }}\n >\n <span className={styles.popoverCmd}>/{cmd.name.replace(/^\\//, \"\")}</span>\n {cmd.description && <span className={styles.popoverDesc}>{cmd.description}</span>}\n </button>\n ))}\n </div>\n )}\n\n {attachments.length > 0 && (\n <ul className={styles.attachmentTray} aria-label=\"Attached files\">\n {attachments.map((item, index) => (\n <li key={`${item.meta.name}-${index}`} className={styles.attachmentChip}>\n {item.meta.previewUrl ? (\n <img className={styles.attachmentThumb} src={item.meta.previewUrl} alt=\"\" />\n ) : (\n <span className={styles.attachmentIcon}><FileText size={14} /></span>\n )}\n <span className={styles.attachmentText}>\n <span className={styles.attachmentName} title={item.meta.name}>{item.meta.name}</span>\n <span className={styles.attachmentSize}>{formatFileSize(item.meta.size)}</span>\n </span>\n <button type=\"button\" className={styles.attachmentRemove} aria-label={`Remove ${item.meta.name}`} onClick={() => removeAttachment(index)}>\n <X size={12} />\n </button>\n </li>\n ))}\n </ul>\n )}\n\n {attachErrors.length > 0 && (\n <div className={styles.attachmentErrors} role=\"alert\">\n {attachErrors.map((error) => <div key={error}>{error}</div>)}\n </div>\n )}\n\n <textarea\n ref={ref}\n className={styles.textarea}\n rows={1}\n value={text}\n disabled={disabled || sending}\n aria-label=\"Message the SolidX Agent\"\n placeholder={dragging ? \"Drop files to attach\" : placeholder ?? \"Ask the agent…\"}\n onChange={(event) => {\n setText(event.target.value);\n setActive(0);\n autosize();\n }}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n />\n <div className={styles.composerRow}>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={AGENT_ATTACHMENT_ACCEPT}\n hidden\n onChange={(event) => {\n void addFiles(Array.from(event.target.files ?? []));\n event.target.value = \"\";\n }}\n />\n <button\n type=\"button\"\n className={styles.iconBtn}\n aria-label=\"Attach files\"\n title={`Attach files (up to ${MAX_AGENT_ATTACHMENTS}: images or text files)`}\n disabled={disabled || sending || attachments.length >= MAX_AGENT_ATTACHMENTS}\n onClick={() => fileInputRef.current?.click()}\n >\n <Paperclip size={16} />\n </button>\n {modelIndicator}\n {working ? (\n <button type=\"button\" className={styles.stopBtn} onClick={onStop} aria-label=\"Stop the agent\">\n <Square size={10} fill=\"currentColor\" /> Stop\n </button>\n ) : (\n <button type=\"button\" className={styles.sendBtn} onClick={submit} disabled={!canSend} aria-label=\"Send\">\n <ArrowUp size={16} />\n </button>\n )}\n </div>\n </div>\n );\n}\n"]}