@solidxai/core-ui 0.1.18 → 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 (571) 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/common/SolidThemeLink.d.ts.map +1 -1
  11. package/dist/components/common/SolidThemeLink.js +2 -2
  12. package/dist/components/common/SolidThemeLink.js.map +1 -1
  13. package/dist/components/common/SolidThemeLink.tsx +5 -2
  14. package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
  15. package/dist/components/core/chatter/SolidChatter.js +2 -1
  16. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  17. package/dist/components/core/chatter/SolidChatter.tsx +2 -0
  18. package/dist/components/core/chatter/SolidChatterHeader.d.ts.map +1 -1
  19. package/dist/components/core/chatter/SolidChatterHeader.js +2 -1
  20. package/dist/components/core/chatter/SolidChatterHeader.js.map +1 -1
  21. package/dist/components/core/chatter/SolidChatterHeader.tsx +6 -4
  22. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts +2 -0
  23. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts.map +1 -1
  24. package/dist/components/core/chatter/SolidChatterMessageBox.js +7 -4
  25. package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
  26. package/dist/components/core/chatter/SolidChatterMessageBox.tsx +8 -3
  27. package/dist/components/core/chatter/SolidChatterMessageWidget.d.ts +5 -0
  28. package/dist/components/core/chatter/SolidChatterMessageWidget.d.ts.map +1 -0
  29. package/dist/components/core/chatter/SolidChatterMessageWidget.js +85 -0
  30. package/dist/components/core/chatter/SolidChatterMessageWidget.js.map +1 -0
  31. package/dist/components/core/chatter/SolidChatterMessageWidget.tsx +59 -0
  32. package/dist/components/core/common/SolidCollectionRowActionMenuItems.d.ts +2 -1
  33. package/dist/components/core/common/SolidCollectionRowActionMenuItems.d.ts.map +1 -1
  34. package/dist/components/core/common/SolidCollectionRowActionMenuItems.js +3 -2
  35. package/dist/components/core/common/SolidCollectionRowActionMenuItems.js.map +1 -1
  36. package/dist/components/core/common/SolidCollectionRowActionMenuItems.tsx +5 -3
  37. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  38. package/dist/components/core/common/SolidGlobalSearchElement.js +35 -18
  39. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  40. package/dist/components/core/common/SolidGlobalSearchElement.tsx +40 -15
  41. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.d.ts.map +1 -1
  42. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.js +2 -2
  43. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.js.map +1 -1
  44. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.tsx +6 -6
  45. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.d.ts +11 -0
  46. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.d.ts.map +1 -0
  47. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.js +102 -0
  48. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.js.map +1 -0
  49. package/dist/components/core/extension/solid-core/agentEvent/list/AgentEventOutcomeListWidget.tsx +129 -0
  50. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.d.ts +4 -0
  51. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.d.ts.map +1 -0
  52. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.js +29 -0
  53. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.js.map +1 -0
  54. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.module.css +226 -0
  55. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentRegistryCardWidget.tsx +57 -0
  56. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.d.ts +4 -0
  57. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.d.ts.map +1 -0
  58. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.js +33 -0
  59. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.js.map +1 -0
  60. package/dist/components/core/extension/solid-core/agentRegistry/card/AgentResourceCardWidget.tsx +47 -0
  61. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.d.ts +5 -0
  62. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.d.ts.map +1 -0
  63. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.js +59 -0
  64. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.js.map +1 -0
  65. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentProcessesPanel.tsx +82 -0
  66. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.d.ts +17 -0
  67. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.d.ts.map +1 -0
  68. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.js +258 -0
  69. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.js.map +1 -0
  70. package/dist/components/core/extension/solid-core/agentToolRegistry/AgentToolSessionsPanel.tsx +286 -0
  71. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
  72. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +102 -62
  73. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
  74. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +116 -106
  75. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.d.ts +6 -0
  76. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.d.ts.map +1 -0
  77. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.js +37 -0
  78. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.js.map +1 -0
  79. package/dist/components/core/extension/solid-core/mqMessage/MqMessageSelectedRecordsSummaryHeaderAction.tsx +89 -0
  80. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.d.ts +3 -0
  81. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.d.ts.map +1 -0
  82. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.js +18 -0
  83. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.js.map +1 -0
  84. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageDetailsKanbanCardAction.tsx +51 -0
  85. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.d.ts +10 -0
  86. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.d.ts.map +1 -0
  87. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.js +63 -0
  88. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.js.map +1 -0
  89. package/dist/components/core/extension/solid-core/mqMessage/kanban/MqMessageKanbanQuickFilterHeaderAction.tsx +111 -0
  90. package/dist/components/core/field/FieldListViewData.d.ts.map +1 -1
  91. package/dist/components/core/field/FieldListViewData.js +29 -9
  92. package/dist/components/core/field/FieldListViewData.js.map +1 -1
  93. package/dist/components/core/field/FieldListViewData.tsx +7 -6
  94. package/dist/components/core/form/SolidFormView.d.ts +1 -0
  95. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  96. package/dist/components/core/form/SolidFormView.js +49 -48
  97. package/dist/components/core/form/SolidFormView.js.map +1 -1
  98. package/dist/components/core/form/SolidFormView.tsx +4 -3
  99. package/dist/components/core/form/fields/SolidDecimalField.d.ts.map +1 -1
  100. package/dist/components/core/form/fields/SolidDecimalField.js +12 -9
  101. package/dist/components/core/form/fields/SolidDecimalField.js.map +1 -1
  102. package/dist/components/core/form/fields/SolidDecimalField.tsx +11 -8
  103. package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
  104. package/dist/components/core/form/fields/SolidIntegerField.js +16 -14
  105. package/dist/components/core/form/fields/SolidIntegerField.js.map +1 -1
  106. package/dist/components/core/form/fields/SolidIntegerField.tsx +13 -10
  107. package/dist/components/core/form/fields/SolidPasswordField.d.ts.map +1 -1
  108. package/dist/components/core/form/fields/SolidPasswordField.js +13 -1
  109. package/dist/components/core/form/fields/SolidPasswordField.js.map +1 -1
  110. package/dist/components/core/form/fields/SolidPasswordField.tsx +14 -3
  111. package/dist/components/core/kanban/KanbanBoard.d.ts +1 -1
  112. package/dist/components/core/kanban/KanbanBoard.d.ts.map +1 -1
  113. package/dist/components/core/kanban/KanbanBoard.js +2 -2
  114. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  115. package/dist/components/core/kanban/KanbanBoard.tsx +5 -1
  116. package/dist/components/core/kanban/KanbanCard.d.ts +3 -0
  117. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  118. package/dist/components/core/kanban/KanbanCard.js +5 -4
  119. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  120. package/dist/components/core/kanban/KanbanCard.tsx +31 -11
  121. package/dist/components/core/kanban/KanbanColumn.d.ts +5 -1
  122. package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
  123. package/dist/components/core/kanban/KanbanColumn.js +14 -3
  124. package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
  125. package/dist/components/core/kanban/KanbanColumn.tsx +43 -3
  126. package/dist/components/core/kanban/SolidKanbanView.d.ts +2 -0
  127. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  128. package/dist/components/core/kanban/SolidKanbanView.js +90 -52
  129. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  130. package/dist/components/core/kanban/SolidKanbanView.tsx +93 -13
  131. package/dist/components/core/list/SolidDataTable.d.ts +2 -1
  132. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  133. package/dist/components/core/list/SolidDataTable.js +4 -2
  134. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  135. package/dist/components/core/list/SolidDataTable.tsx +4 -0
  136. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  137. package/dist/components/core/list/SolidListView.js +197 -96
  138. package/dist/components/core/list/SolidListView.js.map +1 -1
  139. package/dist/components/core/list/SolidListView.tsx +96 -37
  140. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts.map +1 -1
  141. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js +14 -0
  142. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js.map +1 -1
  143. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +13 -0
  144. package/dist/components/core/list/SolidListViewRowActionMenuItem.d.ts.map +1 -1
  145. package/dist/components/core/list/SolidListViewRowActionMenuItem.js.map +1 -1
  146. package/dist/components/core/list/SolidListViewRowActionMenuItem.tsx +2 -1
  147. package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
  148. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +1 -0
  149. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
  150. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +1 -0
  151. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.d.ts +3 -0
  152. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.d.ts.map +1 -0
  153. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.js +51 -0
  154. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.js.map +1 -0
  155. package/dist/components/core/list/widgets/AgentProcessNeedsRestartListWidget.tsx +60 -0
  156. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.d.ts +4 -0
  157. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.d.ts.map +1 -0
  158. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.js +24 -0
  159. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.js.map +1 -0
  160. package/dist/components/core/list/widgets/SolidIconNameListViewWidget.tsx +32 -0
  161. package/dist/components/core/model/ModelListViewData.d.ts.map +1 -1
  162. package/dist/components/core/model/ModelListViewData.js +6 -23
  163. package/dist/components/core/model/ModelListViewData.js.map +1 -1
  164. package/dist/components/core/model/ModelListViewData.tsx +1 -48
  165. package/dist/components/core/module/CreateModule.css +42 -0
  166. package/dist/components/core/module/CreateModule.js +1 -1
  167. package/dist/components/core/module/CreateModule.js.map +1 -1
  168. package/dist/components/core/module/CreateModule.tsx +5 -5
  169. package/dist/components/core/solid-agent/AgentModelIndicator.d.ts +5 -0
  170. package/dist/components/core/solid-agent/AgentModelIndicator.d.ts.map +1 -0
  171. package/dist/components/core/solid-agent/AgentModelIndicator.js +14 -0
  172. package/dist/components/core/solid-agent/AgentModelIndicator.js.map +1 -0
  173. package/dist/components/core/solid-agent/AgentModelIndicator.tsx +40 -0
  174. package/dist/components/core/solid-agent/AgentSignIn.d.ts +12 -0
  175. package/dist/components/core/solid-agent/AgentSignIn.d.ts.map +1 -0
  176. package/dist/components/core/solid-agent/AgentSignIn.js +82 -0
  177. package/dist/components/core/solid-agent/AgentSignIn.js.map +1 -0
  178. package/dist/components/core/solid-agent/AgentSignIn.tsx +91 -0
  179. package/dist/components/core/solid-agent/SolidAgent.module.css +596 -0
  180. package/dist/components/core/solid-agent/SolidAgentChat.d.ts +30 -0
  181. package/dist/components/core/solid-agent/SolidAgentChat.d.ts.map +1 -0
  182. package/dist/components/core/solid-agent/SolidAgentChat.js +300 -0
  183. package/dist/components/core/solid-agent/SolidAgentChat.js.map +1 -0
  184. package/dist/components/core/solid-agent/SolidAgentChat.tsx +451 -0
  185. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts +44 -0
  186. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts.map +1 -0
  187. package/dist/components/core/solid-agent/SolidAgentEmbedded.js +46 -0
  188. package/dist/components/core/solid-agent/SolidAgentEmbedded.js.map +1 -0
  189. package/dist/components/core/solid-agent/SolidAgentEmbedded.tsx +87 -0
  190. package/dist/components/core/solid-agent/SolidAgentHost.d.ts +8 -0
  191. package/dist/components/core/solid-agent/SolidAgentHost.d.ts.map +1 -0
  192. package/dist/components/core/solid-agent/SolidAgentHost.js +152 -0
  193. package/dist/components/core/solid-agent/SolidAgentHost.js.map +1 -0
  194. package/dist/components/core/solid-agent/SolidAgentHost.tsx +164 -0
  195. package/dist/components/core/solid-agent/SolidAgentMarkdown.d.ts +16 -0
  196. package/dist/components/core/solid-agent/SolidAgentMarkdown.d.ts.map +1 -0
  197. package/dist/components/core/solid-agent/SolidAgentMarkdown.js +161 -0
  198. package/dist/components/core/solid-agent/SolidAgentMarkdown.js.map +1 -0
  199. package/dist/components/core/solid-agent/SolidAgentMarkdown.tsx +133 -0
  200. package/dist/components/core/solid-agent/SolidAgentMount.d.ts +3 -0
  201. package/dist/components/core/solid-agent/SolidAgentMount.d.ts.map +1 -0
  202. package/dist/components/core/solid-agent/SolidAgentMount.js +62 -0
  203. package/dist/components/core/solid-agent/SolidAgentMount.js.map +1 -0
  204. package/dist/components/core/solid-agent/SolidAgentMount.tsx +31 -0
  205. package/dist/components/core/solid-agent/SolidXAIIcon.d.ts +5 -0
  206. package/dist/components/core/solid-agent/SolidXAIIcon.d.ts.map +1 -0
  207. package/dist/components/core/solid-agent/SolidXAIIcon.js +7 -0
  208. package/dist/components/core/solid-agent/SolidXAIIcon.js.map +1 -0
  209. package/dist/components/core/solid-agent/SolidXAIIcon.tsx +6 -0
  210. package/dist/components/core/solid-agent/agentAttachments.d.ts +20 -0
  211. package/dist/components/core/solid-agent/agentAttachments.d.ts.map +1 -0
  212. package/dist/components/core/solid-agent/agentAttachments.js +184 -0
  213. package/dist/components/core/solid-agent/agentAttachments.js.map +1 -0
  214. package/dist/components/core/solid-agent/agentAttachments.ts +119 -0
  215. package/dist/components/core/solid-agent/agentEvents.d.ts +34 -0
  216. package/dist/components/core/solid-agent/agentEvents.d.ts.map +1 -0
  217. package/dist/components/core/solid-agent/agentEvents.js +282 -0
  218. package/dist/components/core/solid-agent/agentEvents.js.map +1 -0
  219. package/dist/components/core/solid-agent/agentEvents.ts +292 -0
  220. package/dist/components/core/solid-agent/agentFormat.d.ts +18 -0
  221. package/dist/components/core/solid-agent/agentFormat.d.ts.map +1 -0
  222. package/dist/components/core/solid-agent/agentFormat.js +179 -0
  223. package/dist/components/core/solid-agent/agentFormat.js.map +1 -0
  224. package/dist/components/core/solid-agent/agentFormat.ts +160 -0
  225. package/dist/components/core/solid-agent/client/agentAttachmentMedia.d.ts +9 -0
  226. package/dist/components/core/solid-agent/client/agentAttachmentMedia.d.ts.map +1 -0
  227. package/dist/components/core/solid-agent/client/agentAttachmentMedia.js +129 -0
  228. package/dist/components/core/solid-agent/client/agentAttachmentMedia.js.map +1 -0
  229. package/dist/components/core/solid-agent/client/agentAttachmentMedia.ts +69 -0
  230. package/dist/components/core/solid-agent/client/agentAuth.d.ts +63 -0
  231. package/dist/components/core/solid-agent/client/agentAuth.d.ts.map +1 -0
  232. package/dist/components/core/solid-agent/client/agentAuth.js +307 -0
  233. package/dist/components/core/solid-agent/client/agentAuth.js.map +1 -0
  234. package/dist/components/core/solid-agent/client/agentAuth.ts +222 -0
  235. package/dist/components/core/solid-agent/client/agentRest.d.ts +30 -0
  236. package/dist/components/core/solid-agent/client/agentRest.d.ts.map +1 -0
  237. package/dist/components/core/solid-agent/client/agentRest.js +178 -0
  238. package/dist/components/core/solid-agent/client/agentRest.js.map +1 -0
  239. package/dist/components/core/solid-agent/client/agentRest.ts +100 -0
  240. package/dist/components/core/solid-agent/client/agentRuntime.d.ts +48 -0
  241. package/dist/components/core/solid-agent/client/agentRuntime.d.ts.map +1 -0
  242. package/dist/components/core/solid-agent/client/agentRuntime.js +406 -0
  243. package/dist/components/core/solid-agent/client/agentRuntime.js.map +1 -0
  244. package/dist/components/core/solid-agent/client/agentRuntime.ts +226 -0
  245. package/dist/components/core/solid-agent/client/agentSocket.d.ts +46 -0
  246. package/dist/components/core/solid-agent/client/agentSocket.d.ts.map +1 -0
  247. package/dist/components/core/solid-agent/client/agentSocket.js +535 -0
  248. package/dist/components/core/solid-agent/client/agentSocket.js.map +1 -0
  249. package/dist/components/core/solid-agent/client/agentSocket.ts +276 -0
  250. package/dist/components/core/solid-agent/client/agentUrls.d.ts +11 -0
  251. package/dist/components/core/solid-agent/client/agentUrls.d.ts.map +1 -0
  252. package/dist/components/core/solid-agent/client/agentUrls.js +18 -0
  253. package/dist/components/core/solid-agent/client/agentUrls.js.map +1 -0
  254. package/dist/components/core/solid-agent/client/agentUrls.ts +19 -0
  255. package/dist/components/core/solid-agent/composer/AgentComposer.d.ts +21 -0
  256. package/dist/components/core/solid-agent/composer/AgentComposer.d.ts.map +1 -0
  257. package/dist/components/core/solid-agent/composer/AgentComposer.js +219 -0
  258. package/dist/components/core/solid-agent/composer/AgentComposer.js.map +1 -0
  259. package/dist/components/core/solid-agent/composer/AgentComposer.tsx +241 -0
  260. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.d.ts +8 -0
  261. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.d.ts.map +1 -0
  262. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js +87 -0
  263. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js.map +1 -0
  264. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.tsx +58 -0
  265. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts +20 -0
  266. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts.map +1 -0
  267. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js +103 -0
  268. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js.map +1 -0
  269. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.ts +60 -0
  270. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts +11 -0
  271. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts.map +1 -0
  272. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js +21 -0
  273. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js.map +1 -0
  274. package/dist/components/core/solid-agent/embed/agentEmbedSamples.ts +266 -0
  275. package/dist/components/core/solid-agent/processes/agentHubProcessApi.d.ts +15 -0
  276. package/dist/components/core/solid-agent/processes/agentHubProcessApi.d.ts.map +1 -0
  277. package/dist/components/core/solid-agent/processes/agentHubProcessApi.js +122 -0
  278. package/dist/components/core/solid-agent/processes/agentHubProcessApi.js.map +1 -0
  279. package/dist/components/core/solid-agent/processes/agentHubProcessApi.ts +64 -0
  280. package/dist/components/core/solid-agent/sdk/solidAgent.d.ts +39 -0
  281. package/dist/components/core/solid-agent/sdk/solidAgent.d.ts.map +1 -0
  282. package/dist/components/core/solid-agent/sdk/solidAgent.js +44 -0
  283. package/dist/components/core/solid-agent/sdk/solidAgent.js.map +1 -0
  284. package/dist/components/core/solid-agent/sdk/solidAgent.ts +56 -0
  285. package/dist/components/core/solid-agent/thread/AgentThread.d.ts +17 -0
  286. package/dist/components/core/solid-agent/thread/AgentThread.d.ts.map +1 -0
  287. package/dist/components/core/solid-agent/thread/AgentThread.js +166 -0
  288. package/dist/components/core/solid-agent/thread/AgentThread.js.map +1 -0
  289. package/dist/components/core/solid-agent/thread/AgentThread.tsx +248 -0
  290. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.d.ts +36 -0
  291. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.d.ts.map +1 -0
  292. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.js +148 -0
  293. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.js.map +1 -0
  294. package/dist/components/core/solid-agent/thread/SolidAgentChatItem.tsx +116 -0
  295. package/dist/components/core/solid-agent/thread/inlineWidget.d.ts +8 -0
  296. package/dist/components/core/solid-agent/thread/inlineWidget.d.ts.map +1 -0
  297. package/dist/components/core/solid-agent/thread/inlineWidget.js +30 -0
  298. package/dist/components/core/solid-agent/thread/inlineWidget.js.map +1 -0
  299. package/dist/components/core/solid-agent/thread/inlineWidget.ts +27 -0
  300. package/dist/components/core/solid-agent/types.d.ts +155 -0
  301. package/dist/components/core/solid-agent/types.d.ts.map +1 -0
  302. package/dist/components/core/solid-agent/types.js +31 -0
  303. package/dist/components/core/solid-agent/types.js.map +1 -0
  304. package/dist/components/core/solid-agent/types.ts +148 -0
  305. package/dist/components/core/solid-agent/useAdminInputContext.d.ts +4 -0
  306. package/dist/components/core/solid-agent/useAdminInputContext.d.ts.map +1 -0
  307. package/dist/components/core/solid-agent/useAdminInputContext.js +49 -0
  308. package/dist/components/core/solid-agent/useAdminInputContext.js.map +1 -0
  309. package/dist/components/core/solid-agent/useAdminInputContext.ts +52 -0
  310. package/dist/components/core/solid-agent/useAgentAuth.d.ts +14 -0
  311. package/dist/components/core/solid-agent/useAgentAuth.d.ts.map +1 -0
  312. package/dist/components/core/solid-agent/useAgentAuth.js +88 -0
  313. package/dist/components/core/solid-agent/useAgentAuth.js.map +1 -0
  314. package/dist/components/core/solid-agent/useAgentAuth.ts +40 -0
  315. package/dist/components/core/solid-agent/useAgentAvailability.d.ts +19 -0
  316. package/dist/components/core/solid-agent/useAgentAvailability.d.ts.map +1 -0
  317. package/dist/components/core/solid-agent/useAgentAvailability.js +109 -0
  318. package/dist/components/core/solid-agent/useAgentAvailability.js.map +1 -0
  319. package/dist/components/core/solid-agent/useAgentAvailability.ts +80 -0
  320. package/dist/components/core/solid-agent/useAgentChat.d.ts +22 -0
  321. package/dist/components/core/solid-agent/useAgentChat.d.ts.map +1 -0
  322. package/dist/components/core/solid-agent/useAgentChat.js +45 -0
  323. package/dist/components/core/solid-agent/useAgentChat.js.map +1 -0
  324. package/dist/components/core/solid-agent/useAgentChat.ts +57 -0
  325. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.d.ts +7 -0
  326. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.d.ts.map +1 -0
  327. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.js +15 -0
  328. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.js.map +1 -0
  329. package/dist/components/core/solid-agent/widgets/DefaultAssistantMessageChatWidget.tsx +24 -0
  330. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.d.ts +7 -0
  331. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.d.ts.map +1 -0
  332. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.js +15 -0
  333. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.js.map +1 -0
  334. package/dist/components/core/solid-agent/widgets/DefaultErrorChatWidget.tsx +28 -0
  335. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.d.ts +4 -0
  336. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.d.ts.map +1 -0
  337. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.js +20 -0
  338. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.js.map +1 -0
  339. package/dist/components/core/solid-agent/widgets/DefaultNoticeChatWidget.tsx +8 -0
  340. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.d.ts +7 -0
  341. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.d.ts.map +1 -0
  342. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.js +11 -0
  343. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.js.map +1 -0
  344. package/dist/components/core/solid-agent/widgets/DefaultThinkingChatWidget.tsx +16 -0
  345. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.d.ts +7 -0
  346. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.d.ts.map +1 -0
  347. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.js +67 -0
  348. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.js.map +1 -0
  349. package/dist/components/core/solid-agent/widgets/DefaultToolCallChatWidget.tsx +135 -0
  350. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.d.ts +7 -0
  351. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.d.ts.map +1 -0
  352. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.js +24 -0
  353. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.js.map +1 -0
  354. package/dist/components/core/solid-agent/widgets/DefaultUnknownChatWidget.tsx +17 -0
  355. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.d.ts +8 -0
  356. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.d.ts.map +1 -0
  357. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js +30 -0
  358. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js.map +1 -0
  359. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx +77 -0
  360. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.d.ts +7 -0
  361. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.d.ts.map +1 -0
  362. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.js +40 -0
  363. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.js.map +1 -0
  364. package/dist/components/core/solid-agent/widgets/SolidChecklistChatWidget.tsx +57 -0
  365. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.d.ts +4 -0
  366. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.d.ts.map +1 -0
  367. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.js +13 -0
  368. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.js.map +1 -0
  369. package/dist/components/core/solid-agent/widgets/SolidCodeChatWidget.tsx +19 -0
  370. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.d.ts +7 -0
  371. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.d.ts.map +1 -0
  372. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.js +55 -0
  373. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.js.map +1 -0
  374. package/dist/components/core/solid-agent/widgets/SolidDiffListChatWidget.tsx +81 -0
  375. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.d.ts +4 -0
  376. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.d.ts.map +1 -0
  377. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.js +15 -0
  378. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.js.map +1 -0
  379. package/dist/components/core/solid-agent/widgets/SolidGalleryChatWidget.tsx +30 -0
  380. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.d.ts +4 -0
  381. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.d.ts.map +1 -0
  382. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.js +15 -0
  383. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.js.map +1 -0
  384. package/dist/components/core/solid-agent/widgets/SolidJsonChatWidget.tsx +21 -0
  385. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.d.ts +7 -0
  386. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.d.ts.map +1 -0
  387. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.js +21 -0
  388. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.js.map +1 -0
  389. package/dist/components/core/solid-agent/widgets/SolidLinkCardChatWidget.tsx +33 -0
  390. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.d.ts +4 -0
  391. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.d.ts.map +1 -0
  392. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.js +11 -0
  393. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.js.map +1 -0
  394. package/dist/components/core/solid-agent/widgets/SolidMarkdownChatWidget.tsx +9 -0
  395. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.d.ts +15 -0
  396. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.d.ts.map +1 -0
  397. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.js +26 -0
  398. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.js.map +1 -0
  399. package/dist/components/core/solid-agent/widgets/SolidProgressChatWidget.tsx +42 -0
  400. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.d.ts +7 -0
  401. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.d.ts.map +1 -0
  402. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.js +41 -0
  403. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.js.map +1 -0
  404. package/dist/components/core/solid-agent/widgets/SolidQuestionChatWidget.tsx +69 -0
  405. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.d.ts +7 -0
  406. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.d.ts.map +1 -0
  407. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.js +23 -0
  408. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.js.map +1 -0
  409. package/dist/components/core/solid-agent/widgets/SolidStatusChatWidget.tsx +40 -0
  410. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.d.ts +4 -0
  411. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.d.ts.map +1 -0
  412. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.js +32 -0
  413. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.js.map +1 -0
  414. package/dist/components/core/solid-agent/widgets/SolidTableChatWidget.tsx +55 -0
  415. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.d.ts +7 -0
  416. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.d.ts.map +1 -0
  417. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.js +17 -0
  418. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.js.map +1 -0
  419. package/dist/components/core/solid-agent/widgets/SolidToolActivityChatWidget.tsx +31 -0
  420. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.d.ts +12 -0
  421. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.d.ts.map +1 -0
  422. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.js +17 -0
  423. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.js.map +1 -0
  424. package/dist/components/core/solid-agent/widgets/chatWidgetUtils.ts +19 -0
  425. package/dist/components/core/solid-agent/widgets/solidChatWidgets.module.css +909 -0
  426. package/dist/components/core/solid-ai/SolidAiChat.js +1 -1
  427. package/dist/components/core/solid-ai/SolidAiChat.js.map +1 -1
  428. package/dist/components/core/solid-ai/SolidAiChat.tsx +2 -2
  429. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  430. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  431. package/dist/components/core/tree/SolidTreeView.tsx +3 -2
  432. package/dist/components/layout/AdminLayout.d.ts.map +1 -1
  433. package/dist/components/layout/AdminLayout.js +2 -1
  434. package/dist/components/layout/AdminLayout.js.map +1 -1
  435. package/dist/components/layout/AdminLayout.tsx +2 -0
  436. package/dist/components/layout/AdminTopHeader.d.ts.map +1 -1
  437. package/dist/components/layout/AdminTopHeader.js +7 -3
  438. package/dist/components/layout/AdminTopHeader.js.map +1 -1
  439. package/dist/components/layout/AdminTopHeader.tsx +8 -3
  440. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +1 -1
  441. package/dist/components/shad-cn-ui/SolidAutocomplete.js +2 -2
  442. package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +1 -1
  443. package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +19 -15
  444. package/dist/components/shad-cn-ui/SolidDialog.d.ts +2 -1
  445. package/dist/components/shad-cn-ui/SolidDialog.d.ts.map +1 -1
  446. package/dist/components/shad-cn-ui/SolidDialog.js +2 -2
  447. package/dist/components/shad-cn-ui/SolidDialog.js.map +1 -1
  448. package/dist/components/shad-cn-ui/SolidDialog.tsx +3 -0
  449. package/dist/components/shad-cn-ui/SolidIconPicker.d.ts +7 -0
  450. package/dist/components/shad-cn-ui/SolidIconPicker.d.ts.map +1 -0
  451. package/dist/components/shad-cn-ui/SolidIconPicker.js +43 -0
  452. package/dist/components/shad-cn-ui/SolidIconPicker.js.map +1 -0
  453. package/dist/components/shad-cn-ui/SolidIconPicker.tsx +73 -0
  454. package/dist/components/shad-cn-ui/index.d.ts +1 -0
  455. package/dist/components/shad-cn-ui/index.d.ts.map +1 -1
  456. package/dist/components/shad-cn-ui/index.js +1 -0
  457. package/dist/components/shad-cn-ui/index.js.map +1 -1
  458. package/dist/components/shad-cn-ui/index.ts +1 -0
  459. package/dist/constants/allowed-ai-models.d.ts +8 -0
  460. package/dist/constants/allowed-ai-models.d.ts.map +1 -0
  461. package/dist/constants/allowed-ai-models.js +33 -0
  462. package/dist/constants/allowed-ai-models.js.map +1 -0
  463. package/dist/constants/allowed-ai-models.ts +39 -0
  464. package/dist/constants/error-messages.d.ts +2 -0
  465. package/dist/constants/error-messages.d.ts.map +1 -1
  466. package/dist/constants/error-messages.js +3 -0
  467. package/dist/constants/error-messages.js.map +1 -1
  468. package/dist/constants/error-messages.ts +4 -0
  469. package/dist/helpers/hydrateRelationRules.d.ts.map +1 -1
  470. package/dist/helpers/hydrateRelationRules.js +3 -1
  471. package/dist/helpers/hydrateRelationRules.js.map +1 -1
  472. package/dist/helpers/hydrateRelationRules.ts +5 -1
  473. package/dist/helpers/registry.d.ts +4 -2
  474. package/dist/helpers/registry.d.ts.map +1 -1
  475. package/dist/helpers/registry.js +75 -12
  476. package/dist/helpers/registry.js.map +1 -1
  477. package/dist/helpers/registry.ts +73 -16
  478. package/dist/helpers/updatePasswordField.d.ts.map +1 -1
  479. package/dist/helpers/updatePasswordField.js +21 -15
  480. package/dist/helpers/updatePasswordField.js.map +1 -1
  481. package/dist/helpers/updatePasswordField.ts +6 -1
  482. package/dist/index.d.ts +21 -4
  483. package/dist/index.d.ts.map +1 -1
  484. package/dist/index.js +16 -3
  485. package/dist/index.js.map +1 -1
  486. package/dist/index.ts +38 -3
  487. package/dist/redux/api/fieldApi.js +1 -1
  488. package/dist/redux/api/fieldApi.js.map +1 -1
  489. package/dist/redux/api/fieldApi.ts +2 -2
  490. package/dist/redux/api/modelApi.d.ts +13 -13
  491. package/dist/redux/api/modelApi.d.ts.map +1 -1
  492. package/dist/redux/api/modelApi.js +15 -15
  493. package/dist/redux/api/modelApi.js.map +1 -1
  494. package/dist/redux/api/modelApi.ts +12 -15
  495. package/dist/redux/features/agentSlice.d.ts +34 -0
  496. package/dist/redux/features/agentSlice.d.ts.map +1 -0
  497. package/dist/redux/features/agentSlice.js +92 -0
  498. package/dist/redux/features/agentSlice.js.map +1 -0
  499. package/dist/redux/features/agentSlice.ts +119 -0
  500. package/dist/redux/store/defaultStoreConfig.d.ts +11 -10
  501. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  502. package/dist/redux/store/defaultStoreConfig.js +2 -0
  503. package/dist/redux/store/defaultStoreConfig.js.map +1 -1
  504. package/dist/redux/store/defaultStoreConfig.ts +2 -0
  505. package/dist/redux/store/solidEntityApiPool.d.ts.map +1 -1
  506. package/dist/redux/store/solidEntityApiPool.js +7 -0
  507. package/dist/redux/store/solidEntityApiPool.js.map +1 -1
  508. package/dist/redux/store/solidEntityApiPool.ts +6 -0
  509. package/dist/resources/globals.css +109 -1
  510. package/dist/resources/solid-custom.css +331 -12
  511. package/dist/resources/solid-tailwind-generated.css +1 -1
  512. package/dist/resources/themes/solid-light-modern/theme.css +2 -4
  513. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.css +47 -0
  514. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.d.ts +12 -0
  515. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.d.ts.map +1 -0
  516. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.js +80 -0
  517. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.js.map +1 -0
  518. package/dist/routes/pages/admin/core/AgentRegistryAuditPanel.tsx +123 -0
  519. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.css +110 -0
  520. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts +3 -0
  521. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts.map +1 -0
  522. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js +702 -0
  523. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js.map +1 -0
  524. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.tsx +630 -0
  525. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.css +303 -0
  526. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts +3 -0
  527. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts.map +1 -0
  528. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js +330 -0
  529. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js.map +1 -0
  530. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.tsx +460 -0
  531. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.css +125 -0
  532. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts +3 -0
  533. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts.map +1 -0
  534. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js +295 -0
  535. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js.map +1 -0
  536. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.tsx +275 -0
  537. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.css +41 -0
  538. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
  539. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +1 -1
  540. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
  541. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +3 -1
  542. package/dist/routes/pages/admin/core/WorkflowDefinitionEditorPage.js +11 -11
  543. package/dist/routes/pages/admin/core/WorkflowDefinitionEditorPage.js.map +1 -1
  544. package/dist/routes/pages/admin/core/WorkflowDefinitionEditorPage.tsx +15 -15
  545. package/dist/routes/pages/embed/AgentEmbedPage.d.ts +3 -0
  546. package/dist/routes/pages/embed/AgentEmbedPage.d.ts.map +1 -0
  547. package/dist/routes/pages/embed/AgentEmbedPage.js +170 -0
  548. package/dist/routes/pages/embed/AgentEmbedPage.js.map +1 -0
  549. package/dist/routes/pages/embed/AgentEmbedPage.module.css +195 -0
  550. package/dist/routes/pages/embed/AgentEmbedPage.tsx +169 -0
  551. package/dist/routes/solidRoutes.d.ts.map +1 -1
  552. package/dist/routes/solidRoutes.js +8 -0
  553. package/dist/routes/solidRoutes.js.map +1 -1
  554. package/dist/routes/solidRoutes.tsx +8 -0
  555. package/dist/types/dashboard.d.ts +4 -0
  556. package/dist/types/dashboard.d.ts.map +1 -1
  557. package/dist/types/dashboard.js.map +1 -1
  558. package/dist/types/dashboard.ts +5 -0
  559. package/dist/types/extension-registry.d.ts +4 -0
  560. package/dist/types/extension-registry.d.ts.map +1 -1
  561. package/dist/types/extension-registry.js +7 -0
  562. package/dist/types/extension-registry.js.map +1 -1
  563. package/dist/types/extension-registry.ts +7 -0
  564. package/dist/types/index.d.ts +4 -0
  565. package/dist/types/list-row-action.d.ts +20 -0
  566. package/dist/types/list-row-action.d.ts.map +1 -0
  567. package/dist/types/list-row-action.js +2 -0
  568. package/dist/types/list-row-action.js.map +1 -0
  569. package/dist/types/list-row-action.ts +21 -0
  570. package/dist/types/solid-core.d.ts +36 -0
  571. package/package.json +1 -1
@@ -980,7 +980,7 @@ export var SolidAiChat = function () {
980
980
  var canSend = isConnected && !!sessionId && !!input.trim() && !isProcessing;
981
981
  var inputPlaceholder = !isConnected ? "Connecting to server…" : !sessionId ? "Establishing session…" : isProcessing ? "SolidX AI is thinking…" : "Message SolidX AI…";
982
982
  // ── Render ────────────────────────────────────────────────────────────────
983
- return (_jsxs("div", { className: styles.Container, children: [_jsxs("header", { className: styles.Header, children: [_jsx("span", { className: "".concat(styles.StatusDot, " ").concat(isProcessing ? styles.StatusRunning : isConnected ? styles.StatusOnline : styles.StatusOffline) }), _jsxs("span", { className: styles.StatusLabel, children: [_jsx(SolidIcon, { name: isConnected ? "si-wifi" : "si-times-circle", style: { fontSize: "11px" }, "aria-hidden": true }), isConnected ? (isProcessing ? "Running…" : sessionId ? "Connected" : "Starting…") : "Offline"] }), _jsx("div", { className: styles.HeaderSpacer }), _jsxs("button", { className: styles.NewChatHeaderBtn, onClick: handleNewChat, title: "New conversation", children: [_jsx(SolidIcon, { name: "si-plus", style: { fontSize: "10px" }, "aria-hidden": true }), "New Chat"] }), _jsxs("div", { className: styles.SessionMenuAnchor, ref: sessionMenuRef, children: [_jsx("button", { className: styles.HamburgerBtn, onClick: handleToggleSessionMenu, title: "Session history", "aria-label": "Open session history", children: _jsx(SolidIcon, { name: "si-bars", style: { fontSize: "13px" }, "aria-hidden": true }) }), showSessionMenu && (_jsxs("div", { className: styles.SessionMenu, children: [_jsxs("button", { className: styles.SessionMenuNewChat, onClick: handleNewChat, children: [_jsx(SolidIcon, { name: "si-plus", style: { fontSize: "12px" }, "aria-hidden": true }), "New Chat"] }), _jsx("div", { className: styles.SessionMenuSectionLabel, children: "Recent Sessions" }), _jsx("div", { className: styles.SessionList, children: isLoadingSessions ? (_jsxs("div", { className: styles.SessionMenuLoading, children: [_jsx(SolidIcon, { name: "si-spinner", spin: true, style: { fontSize: "11px" }, "aria-hidden": true }), "Loading\u2026"] })) : sessions.length === 0 ? (_jsx("div", { className: styles.SessionMenuEmpty, children: "No past sessions found" })) : (sessions.map(function (s) { return (_jsxs("div", { className: "".concat(styles.SessionItem, " ").concat(s.session_id === activeHistoryId ? styles.SessionItemActive : ""), onClick: function () { return handleSelectSession(s.session_id); }, children: [_jsxs("div", { className: styles.SessionItemMain, children: [_jsx("span", { className: styles.SessionItemPreview, children: s.preview || "New conversation" }), _jsxs("span", { className: styles.SessionItemMeta, children: [formatSessionDate(s.created_at), s.total_steps > 0 && " \u00B7 ".concat(s.total_steps, " turn").concat(s.total_steps !== 1 ? "s" : "")] })] }), _jsx("button", { className: styles.SessionDeleteBtn, onClick: function (e) { return handleDeleteSession(e, s.session_id); }, disabled: isDeletingSessionId === s.session_id, title: "Delete conversation", children: _jsx(SolidIcon, { name: isDeletingSessionId === s.session_id ? "si-spinner" : "si-trash", spin: isDeletingSessionId === s.session_id, style: { fontSize: "11px" }, "aria-hidden": true }) })] }, s.session_id)); })) })] }))] })] }), !isConnected && (_jsxs("div", { className: styles.ReconnectBanner, children: [_jsx(SolidIcon, { name: "si-spinner", spin: true, style: { fontSize: "11px" }, "aria-hidden": true }), "Reconnecting\u2026"] })), _jsxs("div", { className: styles.MessageList, ref: scrollRef, children: [hasMoreHistory && (_jsx("div", { className: styles.LoadOlderWrap, children: _jsx("button", { className: styles.LoadOlderBtn, onClick: handleLoadOlder, disabled: isLoadingHistory, children: isLoadingHistory
983
+ return (_jsxs("div", { className: styles.Container, children: [_jsxs("header", { className: styles.Header, children: [_jsx("span", { className: "".concat(styles.StatusDot, " ").concat(isProcessing ? styles.StatusRunning : isConnected ? styles.StatusOnline : styles.StatusOffline) }), _jsxs("span", { className: styles.StatusLabel, children: [_jsx(SolidIcon, { name: isConnected ? "si-wifi" : "si-times-circle", style: { fontSize: "11px" }, "aria-hidden": true }), isConnected ? (isProcessing ? "Running…" : sessionId ? "Connected" : "Starting…") : "Offline"] }), _jsx("div", { className: styles.HeaderSpacer }), _jsxs("button", { className: styles.NewChatHeaderBtn, onClick: handleNewChat, title: "New conversation", children: [_jsx(SolidIcon, { name: "si-plus", style: { fontSize: "10px" }, "aria-hidden": true }), "New Chat"] }), _jsxs("div", { className: styles.SessionMenuAnchor, ref: sessionMenuRef, children: [_jsx("button", { className: styles.HamburgerBtn, onClick: handleToggleSessionMenu, title: "Session history", "aria-label": "Open session history", children: _jsx(SolidIcon, { name: "si-bars", style: { fontSize: "13px" }, "aria-hidden": true }) }), showSessionMenu && (_jsxs("div", { className: styles.SessionMenu, children: [_jsxs("button", { className: styles.SessionMenuNewChat, onClick: handleNewChat, children: [_jsx(SolidIcon, { name: "si-plus", style: { fontSize: "12px" }, "aria-hidden": true }), "New Chat"] }), _jsx("div", { className: styles.SessionMenuSectionLabel, children: "Recent Sessions" }), _jsx("div", { className: styles.SessionList, children: isLoadingSessions ? (_jsxs("div", { className: styles.SessionMenuLoading, children: [_jsx(SolidIcon, { name: "si-spinner", spin: true, style: { fontSize: "11px" }, "aria-hidden": true }), "Loading\u2026"] })) : sessions.length === 0 ? (_jsx("div", { className: styles.SessionMenuEmpty, children: "No past sessions found" })) : (sessions.map(function (s) { return (_jsxs("div", { className: "".concat(styles.SessionItem, " ").concat(s.session_id === activeHistoryId ? styles.SessionItemActive : ""), onClick: function () { return handleSelectSession(s.session_id); }, children: [_jsxs("div", { className: styles.SessionItemMain, children: [_jsx("span", { className: styles.SessionItemPreview, children: s.preview || "New conversation" }), _jsxs("span", { className: styles.SessionItemMeta, children: [formatSessionDate(s.created_at), s.totalSteps > 0 && " \u00B7 ".concat(s.totalSteps, " turn").concat(s.totalSteps !== 1 ? "s" : "")] })] }), _jsx("button", { className: styles.SessionDeleteBtn, onClick: function (e) { return handleDeleteSession(e, s.session_id); }, disabled: isDeletingSessionId === s.session_id, title: "Delete conversation", children: _jsx(SolidIcon, { name: isDeletingSessionId === s.session_id ? "si-spinner" : "si-trash", spin: isDeletingSessionId === s.session_id, style: { fontSize: "11px" }, "aria-hidden": true }) })] }, s.session_id)); })) })] }))] })] }), !isConnected && (_jsxs("div", { className: styles.ReconnectBanner, children: [_jsx(SolidIcon, { name: "si-spinner", spin: true, style: { fontSize: "11px" }, "aria-hidden": true }), "Reconnecting\u2026"] })), _jsxs("div", { className: styles.MessageList, ref: scrollRef, children: [hasMoreHistory && (_jsx("div", { className: styles.LoadOlderWrap, children: _jsx("button", { className: styles.LoadOlderBtn, onClick: handleLoadOlder, disabled: isLoadingHistory, children: isLoadingHistory
984
984
  ? (_jsxs(_Fragment, { children: [_jsx(SolidIcon, { name: "si-spinner", spin: true, style: { fontSize: "11px" }, "aria-hidden": true }), " ", "Loading\u2026"] }))
985
985
  : (_jsxs(_Fragment, { children: [_jsx(SolidIcon, { name: "si-history", style: { fontSize: "11px" }, "aria-hidden": true }), " ", "Load older messages"] })) }) })), isLoadingHistory && messages.length === 0 && (_jsxs("div", { className: styles.HistoryLoading, children: [_jsx(SolidIcon, { name: "si-spinner", spin: true, style: { fontSize: "16px" }, "aria-hidden": true }), _jsx("span", { children: "Loading conversation\u2026" })] })), messages.length === 0 && !isLoadingHistory && (_jsxs("div", { className: styles.EmptyState, children: [_jsx("div", { className: styles.EmptyIcon, children: _jsx(SolidIcon, { name: "si-comments", style: { fontSize: "28px" }, "aria-hidden": true }) }), _jsx("p", { className: styles.EmptyTitle, children: "How can I help you today?" }), _jsx("p", { className: styles.EmptySubtitle, children: "Ask me anything about your SolidX project." })] })), groupMessages(messages).map(function (group) {
986
986
  // ── User message ────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"SolidAiChat.js","sourceRoot":"","sources":["../../../../src/components/core/solid-ai/SolidAiChat.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { loadSession } from \"../../../adapters/auth/storage\";\nimport { SolidIcon, type SolidIconMeta, type SolidIconName } from \"../../shad-cn-ui\";\nimport styles from \"./SolidAiChat.module.css\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\ninterface ToolProgressStep {\n label: string;\n status: \"running\" | \"done\";\n durationMs?: number;\n}\n\ninterface Message {\n id: string;\n role: \"user\" | \"assistant\" | \"event\";\n content: string;\n timestamp: Date;\n // event messages only\n eventState?: \"active\" | \"done\";\n // tool call events only\n toolName?: string;\n toolDesc?: string;\n toolArgs?: Record<string, unknown>;\n toolProgress?: ToolProgressStep[];\n durationMs?: number;\n toolStatus?: \"success\" | \"warning\" | \"error\";\n toolOutput?: string;\n toolOutputRaw?: string;\n // step tracking for dividers\n step?: number;\n // error flag for styled error bubble\n isError?: boolean;\n}\n\ninterface SessionSummary {\n session_id: string;\n status: string;\n total_steps: number;\n created_at: string | null;\n preview: string;\n}\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nconst WS_URL = \"ws://localhost:8765/ws/agent\";\nconst API_BASE = \"http://localhost:8765\";\nconst RECONNECT_DELAY = 3000;\nconst PAGE_SIZE = 50;\n\n// ── Session persistence ───────────────────────────────────────────────────────\n// Module-level vars survive sidebar collapse; localStorage survives hard reload.\nconst LS_SESSION_ID = \"solidx.ai.session_id\";\nconst LS_HISTORY_ID = \"solidx.ai.history_session_id\";\n\nfunction readLS(key: string): string | null {\n try { return localStorage.getItem(key); } catch { return null; }\n}\nfunction writeLS(key: string, val: string | null) {\n try { val ? localStorage.setItem(key, val) : localStorage.removeItem(key); } catch { /* ignore */ }\n}\n\nlet _persistedSessionId: string | null = readLS(LS_SESSION_ID);\nlet _historySessionId: string | null = readLS(LS_HISTORY_ID);\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction formatSessionDate(iso: string | null): string {\n if (!iso) return \"Unknown date\";\n const d = new Date(iso);\n const diffDays = Math.floor((Date.now() - d.getTime()) / 86400000);\n if (diffDays === 0) return d.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" });\n if (diffDays === 1) return \"Yesterday\";\n if (diffDays < 7) return d.toLocaleDateString([], { weekday: \"short\" });\n return d.toLocaleDateString([], { month: \"short\", day: \"numeric\" });\n}\n\n// ── Sub-components ────────────────────────────────────────────────────────────\n\nfunction CopyButton({ text }: { text: string }) {\n const [copied, setCopied] = useState(false);\n const handleCopy = async (e: React.MouseEvent) => {\n e.stopPropagation();\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n return (\n <button className={styles.CopyBtn} onClick={handleCopy} title=\"Copy\" aria-label=\"Copy message\">\n <SolidIcon\n name={copied ? \"si-check\" : \"si-copy\"}\n style={{ fontSize: \"11px\" }}\n aria-hidden\n />\n </button>\n );\n}\n\nfunction CodeBlock({ children, className }: { children?: React.ReactNode; className?: string }) {\n const [copied, setCopied] = useState(false);\n const code = String(children ?? \"\").replace(/\\n$/, \"\");\n const lang = className?.replace(\"language-\", \"\") ?? \"\";\n const handleCopy = async () => {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n return (\n <div className={styles.CodeBlockWrapper}>\n <div className={styles.CodeBlockHeader}>\n <span className={styles.CodeLang}>{lang || \"code\"}</span>\n <button className={styles.CodeCopyBtn} onClick={handleCopy}>\n <SolidIcon\n name={copied ? \"si-check\" : \"si-copy\"}\n style={{ fontSize: \"11px\" }}\n aria-hidden\n />\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n <pre className={styles.CodePre}><code>{code}</code></pre>\n </div>\n );\n}\n\nconst markdownComponents = {\n code({ node, inline, className, children, ...props }: any) {\n // Detect by className — only named fenced blocks (```lang) become CodeBlock.\n // Inline backticks and unnamed fenced blocks render as inline code.\n const isBlock = /language-/.test(className || \"\");\n if (!isBlock) return <code className={styles.InlineCode} {...props}>{children}</code>;\n return <CodeBlock className={className}>{children}</CodeBlock>;\n },\n pre({ children }: any) { return <>{children}</>; },\n table({ children }: any) {\n return <div className={styles.MarkdownTableWrapper}><table>{children}</table></div>;\n },\n a({ href, children }: any) {\n return (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={styles.MarkdownLink}>\n {children}\n </a>\n );\n },\n};\n\n// ── Tool helpers ──────────────────────────────────────────────────────────────\n\nconst TOOL_CATEGORIES: Record<string, string[]> = {\n \"Read\": [\"solid_get_module_metadata\", \"solid_get_model_metadata\", \"solid_get_field_metadata\", \"solid_get_layout_context\", \"select_relevant_code_context\"],\n \"Create\": [\"solid_create_module\", \"solid_create_model_with_fields\", \"solid_add_fields_to_model\", \"solid_modify_fields_in_model\", \"solid_update_layout\", \"solid_patch_layout\", \"solid_add_or_update_menu\", \"edit_solid_code\"],\n \"Chat\": [\"solid_chat_with_ozzy\"],\n \"Shell\": [\"bash\"],\n};\n\nfunction getToolCategory(name: string): string {\n for (const [cat, tools] of Object.entries(TOOL_CATEGORIES)) {\n if (tools.includes(name)) return cat;\n }\n return \"Tool\";\n}\n\nfunction getToolIconName(name: string): SolidIconName {\n if (name === \"bash\") return \"si-terminal\";\n const cat = getToolCategory(name);\n if (cat === \"Read\") return \"si-search\";\n if (cat === \"Create\") return \"si-file-edit\";\n if (cat === \"Chat\") return \"si-comments\";\n return \"si-cog\";\n}\n\nfunction describeToolArgs(args: Record<string, unknown>): string {\n const priority = [\"cmd\", \"command\", \"query\", \"path\", \"file\", \"module_name\", \"model_name\", \"name\", \"id\", \"content\"];\n for (const key of priority) {\n if (args[key] != null) {\n const val = String(args[key]).trim().replace(/\\n/g, \" \");\n return val.length > 72 ? val.slice(0, 72) + \"…\" : val;\n }\n }\n const first = Object.values(args)[0];\n if (first != null) {\n const val = String(first).trim().replace(/\\n/g, \" \");\n return val.length > 72 ? val.slice(0, 72) + \"…\" : val;\n }\n return \"\";\n}\n\nfunction formatDuration(ms?: number): string {\n if (ms == null) return \"\";\n if (ms < 1000) return `${Math.round(ms)}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n}\n\n/**\n * Parses tool output to extract semantic status and clean display text.\n * Handles nested JSON structures like the Solid agent uses.\n */\nfunction parseToolResult(output: string): { status: Message[\"toolStatus\"]; text: string } {\n if (!output) return { status: \"success\", text: \"\" };\n try {\n const outer = JSON.parse(output);\n let status: Message[\"toolStatus\"] = \"success\";\n let text = \"\";\n\n // The Solid agent often wraps the real result in a 'data' string or object\n const innerData = outer.data;\n if (typeof innerData === \"string\") {\n try {\n const inner = JSON.parse(innerData);\n if (inner.generation_status === \"error\" || inner.status === \"error\") {\n status = \"warning\";\n text = inner.instructions || (inner.errors && inner.errors.join(\", \")) || innerData;\n } else {\n text = inner.message || inner.content || innerData;\n }\n } catch {\n text = innerData;\n }\n } else if (innerData && typeof innerData === \"object\") {\n if (innerData.generation_status === \"error\" || innerData.status === \"error\") {\n status = \"warning\";\n text = innerData.instructions || (innerData.errors && innerData.errors.join(\", \")) || JSON.stringify(innerData);\n } else {\n text = innerData.message || innerData.content || JSON.stringify(innerData);\n }\n } else {\n text = outer.content || outer.message || output;\n }\n\n // Check if the outer status is error\n if (outer.status === \"error\" || outer.errors?.length > 0) {\n status = \"error\";\n text = outer.message || (outer.errors && outer.errors.join(\", \")) || text;\n }\n\n return { status, text: text.length > 500 ? text.slice(0, 500) + \"…\" : text };\n } catch {\n return { status: \"success\", text: output.length > 120 ? output.slice(0, 120) + \"…\" : output };\n }\n}\n\n/**\n * Detects LLM metadata strings that should not be rendered as chat messages.\n * These include token counts, model info, finish_reason, and message-list summaries.\n */\nfunction isLlmMetadata(content: string): boolean {\n if (!content) return true;\n return /\\d+\\s*(input|output)\\s*tokens/i.test(content)\n || /finish_reason:/i.test(content)\n || /^\\d+\\s+messages\\s*\\(/i.test(content)\n || /\\|\\s*model:\\s*\\S+/i.test(content);\n}\n\n// ── Message grouping ──────────────────────────────────────────────────────────\n// Groups consecutive event + assistant messages into a single AI turn so we can\n// render the avatar once per turn rather than per message.\n\ntype MsgGroup =\n | { kind: \"user\"; msg: Message }\n | { kind: \"ai\"; msgs: Message[]; groupKey: string };\n\nfunction groupMessages(messages: Message[]): MsgGroup[] {\n const result: MsgGroup[] = [];\n let aiBuffer: Message[] = [];\n for (const msg of messages) {\n if (msg.role === \"user\") {\n if (aiBuffer.length > 0) {\n result.push({ kind: \"ai\", msgs: aiBuffer, groupKey: aiBuffer[0].id });\n aiBuffer = [];\n }\n result.push({ kind: \"user\", msg });\n } else {\n aiBuffer.push(msg);\n }\n }\n if (aiBuffer.length > 0) {\n result.push({ kind: \"ai\", msgs: aiBuffer, groupKey: aiBuffer[0].id });\n }\n return result;\n}\n\n/**\n * Maps the new backend \"event-based\" JSON history into a flattened Message list for UI.\n * Handles merging ToolResult into ToolCalling, and processing StepStarted etc.\n */\nfunction processHistoryEvents(backendMsgs: any[]): Message[] {\n const result: Message[] = [];\n // Tracks the \"active\" message so we can update its duration/progress inline.\n let currentEventIdx: number | null = null;\n\n for (const m of backendMsgs) {\n const type = m.event_type;\n const data = m.event_data || {};\n const id = `hist-${m.id}`;\n // The backend ISO timestamp or the current time as fallback.\n const ts = m.timestamp ? new Date(m.timestamp) : new Date();\n\n switch (type) {\n case \"UserMessage\":\n result.push({\n id,\n role: \"user\",\n content: m.content || data.content || \"\",\n timestamp: ts,\n });\n currentEventIdx = null;\n break;\n\n case \"AgentStarted\":\n case \"StepStarted\":\n // Create a \"Thinking…\" event row.\n currentEventIdx = result.length;\n result.push({\n id,\n role: \"event\",\n content: \"Thinking…\",\n timestamp: ts,\n eventState: \"done\",\n });\n break;\n\n case \"ToolCalling\": {\n const toolName = data.tool_name || m.tool_name || \"tool\";\n const toolArgs = data.arguments || {};\n currentEventIdx = result.length;\n result.push({\n id,\n role: \"event\",\n content: toolName,\n timestamp: ts,\n eventState: \"done\",\n toolName,\n toolDesc: describeToolArgs(toolArgs),\n toolArgs,\n });\n break;\n }\n\n case \"ToolProgress\": {\n if (currentEventIdx != null) {\n const label = data.label || \"\";\n const progressStatus = data.status || \"running\";\n const stepStatus: ToolProgressStep[\"status\"] =\n progressStatus === \"success\" || progressStatus === \"done\" ? \"done\" : \"running\";\n const durationMs: number | undefined = data.duration_ms;\n\n const prev = result[currentEventIdx];\n if (prev && prev.role === \"event\") {\n const existing = prev.toolProgress || [];\n const existingIdx = existing.findIndex((p) => p.label === label);\n if (existingIdx >= 0) {\n const updated = [...existing];\n updated[existingIdx] = {\n label,\n status: stepStatus,\n durationMs: durationMs ?? updated[existingIdx].durationMs,\n };\n prev.toolProgress = updated;\n } else {\n prev.toolProgress = [...existing, { label, status: stepStatus, durationMs }];\n }\n }\n }\n break;\n }\n\n case \"ToolResult\": {\n if (currentEventIdx != null) {\n const prev = result[currentEventIdx];\n if (prev && prev.role === \"event\") {\n prev.durationMs = data.duration_ms || m.duration_ms;\n const outputStr = data.output || m.content || \"\";\n if (outputStr) {\n const { status, text } = parseToolResult(outputStr);\n prev.toolStatus = status;\n prev.toolOutput = text;\n prev.toolOutputRaw = outputStr;\n }\n }\n }\n break;\n }\n\n case \"LlmComplete\": {\n const llmContent = m.content || data.content || \"\";\n if (!llmContent || isLlmMetadata(llmContent)) break;\n const prevAssistantLlm = [...result].reverse().find(r => r.role === \"assistant\");\n if (prevAssistantLlm?.content === llmContent) break;\n result.push({ id, role: \"assistant\", content: llmContent, timestamp: ts });\n currentEventIdx = null;\n break;\n }\n case \"TurnCompleteEvent\": {\n const tcContent = m.content || data.content || \"\";\n if (!tcContent) { currentEventIdx = null; break; }\n const prevAssistantTc = [...result].reverse().find(r => r.role === \"assistant\");\n if (prevAssistantTc?.content === tcContent) { currentEventIdx = null; break; }\n result.push({ id, role: \"assistant\", content: tcContent, timestamp: ts });\n currentEventIdx = null;\n break;\n }\n\n case \"StepComplete\":\n case \"AgentComplete\":\n currentEventIdx = null;\n break;\n\n case \"AgentError\":\n case \"error\":\n result.push({\n id,\n role: \"assistant\",\n content: `Error: ${data.error || m.content || \"Unknown error\"}`,\n timestamp: ts,\n });\n currentEventIdx = null;\n break;\n\n default:\n if (m.role === \"user\") {\n result.push({ id, role: \"user\", content: m.content || \"\", timestamp: ts });\n currentEventIdx = null;\n } else if (m.role === \"assistant\") {\n const fallbackContent = m.content || \"\";\n if (fallbackContent && !isLlmMetadata(fallbackContent)) {\n const prevAst = [...result].reverse().find(r => r.role === \"assistant\");\n if (prevAst?.content !== fallbackContent) {\n result.push({ id, role: \"assistant\", content: fallbackContent, timestamp: ts });\n }\n }\n currentEventIdx = null;\n }\n break;\n }\n }\n return result;\n}\n\n// ── Main component ────────────────────────────────────────────────────────────\n\nexport const SolidAiChat: React.FC = () => {\n const [messages, setMessages] = useState<Message[]>([]);\n const [input, setInput] = useState(\"\");\n const [isConnected, setIsConnected] = useState(false);\n const [sessionId, setSessionId] = useState<string | null>(null);\n const [isLoadingHistory, setIsLoadingHistory] = useState(false);\n const [hasMoreHistory, setHasMoreHistory] = useState(false);\n const [historyPage, setHistoryPage] = useState(1);\n\n const [showSessionMenu, setShowSessionMenu] = useState(false);\n const [sessions, setSessions] = useState<SessionSummary[]>([]);\n const [isLoadingSessions, setIsLoadingSessions] = useState(false);\n const [isProcessing, setIsProcessing] = useState(false);\n const [activeHistoryId, setActiveHistoryId] = useState<string | null>(null);\n const [isDeletingSessionId, setIsDeletingSessionId] = useState<string | null>(null);\n const [expandedToolIds, setExpandedToolIds] = useState<Set<string>>(new Set());\n\n const sessionMenuRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const wsRef = useRef<WebSocket | null>(null);\n const reconnectTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const hasStreamedRef = useRef(false);\n const intentionalCloseRef = useRef(false);\n const isPrependingRef = useRef(false);\n const prevScrollHeightRef = useRef(0);\n // Tracks the id of the current \"live\" event message so we can update it in-place.\n const liveEventIdRef = useRef<string | null>(null);\n const currentStepRef = useRef<number | null>(null);\n const activeSessionIdRef = useRef<string | null>(_persistedSessionId);\n\n // ── Close session menu on outside click ──────────────────────────────────\n useEffect(() => {\n if (!showSessionMenu) return;\n const handler = (e: MouseEvent) => {\n if (sessionMenuRef.current && !sessionMenuRef.current.contains(e.target as Node)) {\n setShowSessionMenu(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [showSessionMenu]);\n\n // ── Scroll management ─────────────────────────────────────────────────────\n const scrollToBottom = useCallback(() => {\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }, []);\n\n useEffect(() => {\n if (isPrependingRef.current && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight - prevScrollHeightRef.current;\n isPrependingRef.current = false;\n } else {\n scrollToBottom();\n }\n }, [messages, scrollToBottom]);\n\n // ── History fetch ─────────────────────────────────────────────────────────\n const fetchHistory = useCallback(async (sid: string, page: number, prepend: boolean) => {\n setIsLoadingHistory(true);\n try {\n const res = await fetch(`${API_BASE}/api/agent/sessions/${sid}/messages?page=${page}&page_size=${PAGE_SIZE}`);\n if (!res.ok) return;\n const data = await res.json();\n const fetched = processHistoryEvents(data.messages ?? []);\n if (prepend) {\n prevScrollHeightRef.current = scrollRef.current?.scrollHeight ?? 0;\n isPrependingRef.current = true;\n setMessages((prev) => [...fetched, ...prev]);\n } else {\n setMessages(fetched);\n }\n setHasMoreHistory(data.has_more ?? false);\n setHistoryPage(page);\n } catch {\n // silently skip\n } finally {\n setIsLoadingHistory(false);\n }\n }, []);\n\n // ── Sessions list fetch ───────────────────────────────────────────────────\n const fetchSessions = useCallback(async () => {\n setIsLoadingSessions(true);\n try {\n const userId = loadSession()?.user?.id ?? null;\n const url = userId\n ? `${API_BASE}/api/agent/sessions/history?user_id=${userId}`\n : `${API_BASE}/api/agent/sessions/history`;\n const res = await fetch(url);\n if (!res.ok) return;\n setSessions(await res.json());\n } catch {\n // silently ignore\n } finally {\n setIsLoadingSessions(false);\n }\n }, []);\n\n // ── WebSocket ─────────────────────────────────────────────────────────────\n const connectWebSocket = useCallback(() => {\n const state = wsRef.current?.readyState;\n if (state === WebSocket.OPEN || state === WebSocket.CONNECTING) return;\n intentionalCloseRef.current = false;\n\n const ws = new WebSocket(WS_URL);\n\n ws.onopen = () => {\n setIsConnected(true);\n if (reconnectTimerRef.current) clearTimeout(reconnectTimerRef.current);\n const userId = loadSession()?.user?.id ?? null;\n if (_persistedSessionId) {\n ws.send(JSON.stringify({ action: \"resume_session\", session_id: _persistedSessionId, user_id: userId }));\n } else {\n ws.send(JSON.stringify({ action: \"start_session\", user_id: userId }));\n }\n };\n\n ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n\n // Filtering: Only process messages for the active session.\n // data.session_id is the primary field; sometimes it's nested in data.data\n const msgSessionId = data.session_id || data.data?.session_id;\n\n // If we have an active session and the message is for a different one, ignore it.\n // Exception: session_started events are always allowed as they establish the new active ID.\n if (data.type !== \"session_started\" && msgSessionId && activeSessionIdRef.current && msgSessionId !== activeSessionIdRef.current) {\n return;\n }\n\n // Add a new persistent event row, auto-freezing any previous live one.\n // Pass extra fields (toolName, toolDesc, …) for tool card events.\n const addEvent = (content: string, extra?: Partial<Message>) => {\n const prevId = liveEventIdRef.current;\n const id = `evt-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n liveEventIdRef.current = id;\n setMessages((prev) => {\n const base = prevId\n ? prev.map((m) => m.id === prevId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n return [...base, { id, role: \"event\" as const, content, timestamp: new Date(), eventState: \"active\" as const, ...extra }];\n });\n };\n\n // Freeze the current live event as done.\n const freezeEvent = () => {\n const id = liveEventIdRef.current;\n if (!id) return;\n liveEventIdRef.current = null;\n setMessages((prev) => prev.map((m) => m.id === id ? { ...m, eventState: \"done\" as const } : m));\n };\n\n switch (data.type) {\n // ── Session lifecycle ──────────────────────────────────\n case \"session_started\": {\n const sid: string = data.session_id;\n // Prefer the backend's history_session_id if provided.\n // This fixes the \"ID chaining\" issue where resuming a restored session\n // would create a new ID. We want to stick to the \"original\" ID for history.\n const historySid: string = data.history_session_id || sid;\n\n _persistedSessionId = sid;\n _historySessionId = historySid;\n writeLS(LS_SESSION_ID, sid);\n writeLS(LS_HISTORY_ID, historySid);\n setSessionId(sid);\n activeSessionIdRef.current = sid;\n setActiveHistoryId(historySid);\n\n // Only fetch history if we don't have any messages yet (initial load or session switch)\n setMessages((prev) => {\n if (prev.length === 0) fetchHistory(historySid, 1, false);\n return prev;\n });\n break;\n }\n\n case \"session_ended\":\n setSessionId(null);\n break;\n\n // ── Agent lifecycle ────────────────────────────────────\n case \"AgentStarted\":\n setIsProcessing(true);\n currentStepRef.current = null;\n addEvent(\"Thinking…\");\n break;\n\n case \"StepStarted\": {\n const step: number = data.data?.step ?? 1;\n currentStepRef.current = step;\n // Only create a \"Thinking…\" row when there's no active live event\n // (e.g. step 2+ after tool results already froze the previous card).\n if (!liveEventIdRef.current) addEvent(\"Thinking…\", { step });\n break;\n }\n\n case \"StepComplete\":\n freezeEvent();\n break;\n\n case \"ToolResult\": {\n const durationMs: number | undefined = data.data?.duration_ms;\n const outputStr: string = data.data?.output || \"\";\n const id = liveEventIdRef.current;\n if (id) {\n setMessages((prev) => prev.map((m) => {\n if (m.id === id) {\n const update: Partial<Message> = { durationMs };\n if (outputStr) {\n const { status, text } = parseToolResult(outputStr);\n update.toolStatus = status;\n update.toolOutput = text;\n update.toolOutputRaw = outputStr;\n }\n return { ...m, ...update };\n }\n return m;\n }));\n }\n freezeEvent();\n break;\n }\n\n case \"AgentComplete\":\n freezeEvent();\n break;\n\n // ── LLM streaming ──────────────────────────────────────\n case \"LlmToken\": {\n const delta: string = data.data?.delta ?? \"\";\n if (!delta) break;\n hasStreamedRef.current = true;\n // Freeze the live event row on the first token, then stream.\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n let msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n const last = msgs[msgs.length - 1];\n if (last?.role === \"assistant\" && last.id.startsWith(\"stream-\")) {\n return [...msgs.slice(0, -1), { ...last, content: last.content + delta }];\n }\n return [...msgs, { id: `stream-${Date.now()}`, role: \"assistant\", content: delta, timestamp: new Date() }];\n });\n break;\n }\n\n // ── LLM complete (intermediate text before tool calls) ─\n case \"LlmComplete\": {\n const llmContent: string = data.data?.content ?? \"\";\n if (llmContent && !isLlmMetadata(llmContent)) {\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n let msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n const lastAssistant = [...msgs].reverse().find(m => m.role === \"assistant\");\n if (!lastAssistant || lastAssistant.content !== llmContent) {\n msgs = [...msgs, { id: `llm-${Date.now()}`, role: \"assistant\" as const, content: llmContent, timestamp: new Date() }];\n }\n return msgs;\n });\n }\n break;\n }\n\n // ── Tool activity ──────────────────────────────────────\n case \"ToolCalling\": {\n const toolName: string = data.data?.tool_name ?? \"tool\";\n const toolArgs: Record<string, unknown> = data.data?.arguments ?? {};\n addEvent(toolName, { toolName, toolDesc: describeToolArgs(toolArgs), toolArgs });\n break;\n }\n\n case \"ToolProgress\": {\n const label: string = data.data?.label ?? \"\";\n const progressStatus: string = data.data?.status ?? \"running\";\n const durationMs: number | undefined = data.data?.duration_ms;\n const stepStatus: ToolProgressStep[\"status\"] =\n progressStatus === \"success\" || progressStatus === \"done\" ? \"done\" : \"running\";\n const id = liveEventIdRef.current;\n if (!id) break;\n setMessages((prev) => prev.map((m) => {\n if (m.id !== id) return m;\n const existing = m.toolProgress ?? [];\n const idx = existing.findIndex((p) => p.label === label);\n if (idx >= 0) {\n const updated = [...existing];\n updated[idx] = { label, status: stepStatus, durationMs: durationMs ?? updated[idx].durationMs };\n return { ...m, toolProgress: updated };\n }\n return { ...m, toolProgress: [...existing, { label, status: stepStatus, durationMs }] };\n }));\n break;\n }\n\n // ── Turn complete ──────────────────────────────────────\n case \"TurnCompleteEvent\":\n case \"turn_complete\": {\n setIsProcessing(false);\n const content: string = data.data?.content ?? data.content ?? \"\";\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n let msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n if (content) {\n const lastAssistant = [...msgs].reverse().find(m => m.role === \"assistant\");\n const alreadyRendered = lastAssistant && lastAssistant.content === content;\n if (!hasStreamedRef.current && !alreadyRendered) {\n msgs = [...msgs, { id: `tc-${Date.now()}`, role: \"assistant\", content, timestamp: new Date() }];\n }\n }\n return msgs;\n });\n break;\n }\n\n // ── Errors ─────────────────────────────────────────────\n case \"AgentError\":\n case \"error\": {\n setIsProcessing(false);\n const errMsg: string = data.data?.error ?? \"Unknown error\";\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n const msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n return [...msgs, { id: `err-${Date.now()}`, role: \"assistant\" as const, content: errMsg, timestamp: new Date(), isError: true }];\n });\n break;\n }\n\n default:\n break;\n }\n } catch {\n // ignore JSON parse errors\n }\n };\n\n ws.onclose = () => {\n setIsConnected(false);\n setSessionId(null);\n setIsProcessing(false);\n liveEventIdRef.current = null;\n if (!intentionalCloseRef.current) {\n // Unexpected disconnect — banner is shown via !isConnected state; schedule reconnect.\n reconnectTimerRef.current = setTimeout(connectWebSocket, RECONNECT_DELAY);\n }\n };\n\n ws.onerror = () => {\n setIsConnected(false);\n };\n\n wsRef.current = ws;\n }, [fetchHistory]);\n\n useEffect(() => {\n connectWebSocket();\n return () => {\n reconnectTimerRef.current && clearTimeout(reconnectTimerRef.current);\n intentionalCloseRef.current = true;\n wsRef.current?.close();\n };\n }, [connectWebSocket]);\n\n // ── Send message ──────────────────────────────────────────────────────────\n const handleSend = useCallback(() => {\n const trimmed = input.trim();\n if (!trimmed || !isConnected || !sessionId || isProcessing) return;\n\n setIsProcessing(true);\n hasStreamedRef.current = false;\n currentStepRef.current = null;\n liveEventIdRef.current = null;\n setMessages((prev) => [...prev, { id: `u-${Date.now()}`, role: \"user\", content: trimmed, timestamp: new Date() }]);\n wsRef.current?.send(JSON.stringify({ action: \"message\", session_id: sessionId, content: trimmed }));\n setInput(\"\");\n if (textareaRef.current) {\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.focus();\n }\n }, [input, isConnected, sessionId, isProcessing]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) { e.preventDefault(); handleSend(); }\n };\n\n const autoResize = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInput(e.target.value);\n const el = e.target;\n el.style.height = \"auto\";\n el.style.height = `${Math.min(el.scrollHeight, 480)}px`;\n };\n\n // ── Session actions ───────────────────────────────────────────────────────\n const handleNewChat = useCallback(() => {\n _persistedSessionId = null;\n _historySessionId = null;\n writeLS(LS_SESSION_ID, null);\n writeLS(LS_HISTORY_ID, null);\n liveEventIdRef.current = null;\n activeSessionIdRef.current = \"__switching__\";\n setMessages([]);\n setIsProcessing(false);\n setExpandedToolIds(new Set());\n setSessionId(null);\n setActiveHistoryId(null);\n setHasMoreHistory(false);\n setHistoryPage(1);\n setShowSessionMenu(false);\n const userId = loadSession()?.user?.id ?? null;\n wsRef.current?.send(JSON.stringify({ action: \"start_session\", user_id: userId }));\n }, []);\n\n const handleSelectSession = useCallback((targetSessionId: string) => {\n if (targetSessionId === activeHistoryId) {\n setShowSessionMenu(false);\n return;\n }\n _persistedSessionId = targetSessionId;\n _historySessionId = targetSessionId;\n writeLS(LS_SESSION_ID, targetSessionId);\n writeLS(LS_HISTORY_ID, targetSessionId);\n liveEventIdRef.current = null;\n activeSessionIdRef.current = targetSessionId;\n setMessages([]);\n setSessionId(null);\n setActiveHistoryId(targetSessionId);\n setExpandedToolIds(new Set());\n setHasMoreHistory(false);\n setHistoryPage(1);\n setShowSessionMenu(false);\n const userId = loadSession()?.user?.id ?? null;\n wsRef.current?.send(JSON.stringify({ action: \"resume_session\", session_id: targetSessionId, user_id: userId }));\n }, [activeHistoryId]);\n\n const handleDeleteSession = useCallback(async (e: React.MouseEvent, targetId: string) => {\n e.stopPropagation();\n if (!window.confirm(\"Are you sure you want to delete this conversation?\")) return;\n\n setIsDeletingSessionId(targetId);\n try {\n const res = await fetch(`${API_BASE}/api/agent/sessions/${targetId}`, { method: \"DELETE\" });\n if (res.ok) {\n setSessions((prev) => prev.filter((s) => s.session_id !== targetId));\n if (targetId === activeHistoryId) {\n handleNewChat();\n }\n }\n } catch {\n // ignore\n } finally {\n setIsDeletingSessionId(null);\n }\n }, [activeHistoryId, handleNewChat]);\n\n const handleToggleSessionMenu = useCallback(() => {\n setShowSessionMenu((prev) => { if (!prev) fetchSessions(); return !prev; });\n }, [fetchSessions]);\n\n const handleLoadOlder = useCallback(() => {\n const sid = _historySessionId ?? sessionId;\n if (!sid || isLoadingHistory) return;\n fetchHistory(sid, historyPage + 1, true);\n }, [sessionId, isLoadingHistory, historyPage, fetchHistory]);\n\n // ── Derived ───────────────────────────────────────────────────────────────\n const canSend = isConnected && !!sessionId && !!input.trim() && !isProcessing;\n const inputPlaceholder = !isConnected ? \"Connecting to server…\" : !sessionId ? \"Establishing session…\" : isProcessing ? \"SolidX AI is thinking…\" : \"Message SolidX AI…\";\n\n // ── Render ────────────────────────────────────────────────────────────────\n return (\n <div className={styles.Container}>\n\n {/* ── Header ── */}\n <header className={styles.Header}>\n <span className={`${styles.StatusDot} ${isProcessing ? styles.StatusRunning : isConnected ? styles.StatusOnline : styles.StatusOffline}`} />\n <span className={styles.StatusLabel}>\n <SolidIcon\n name={isConnected ? \"si-wifi\" : \"si-times-circle\"}\n style={{ fontSize: \"11px\" }}\n aria-hidden\n />\n {isConnected ? (isProcessing ? \"Running…\" : sessionId ? \"Connected\" : \"Starting…\") : \"Offline\"}\n </span>\n\n <div className={styles.HeaderSpacer} />\n\n <button className={styles.NewChatHeaderBtn} onClick={handleNewChat} title=\"New conversation\">\n <SolidIcon name=\"si-plus\" style={{ fontSize: \"10px\" }} aria-hidden />\n New Chat\n </button>\n\n {/* Hamburger + sessions dropdown — rightmost */}\n <div className={styles.SessionMenuAnchor} ref={sessionMenuRef}>\n <button className={styles.HamburgerBtn} onClick={handleToggleSessionMenu} title=\"Session history\" aria-label=\"Open session history\">\n <SolidIcon name=\"si-bars\" style={{ fontSize: \"13px\" }} aria-hidden />\n </button>\n\n {showSessionMenu && (\n <div className={styles.SessionMenu}>\n <button className={styles.SessionMenuNewChat} onClick={handleNewChat}>\n <SolidIcon name=\"si-plus\" style={{ fontSize: \"12px\" }} aria-hidden />\n New Chat\n </button>\n <div className={styles.SessionMenuSectionLabel}>Recent Sessions</div>\n <div className={styles.SessionList}>\n {isLoadingSessions ? (\n <div className={styles.SessionMenuLoading}>\n <SolidIcon name=\"si-spinner\" spin style={{ fontSize: \"11px\" }} aria-hidden />\n Loading…\n </div>\n ) : sessions.length === 0 ? (\n <div className={styles.SessionMenuEmpty}>No past sessions found</div>\n ) : (\n sessions.map((s) => (\n <div\n key={s.session_id}\n className={`${styles.SessionItem} ${s.session_id === activeHistoryId ? styles.SessionItemActive : \"\"}`}\n onClick={() => handleSelectSession(s.session_id)}\n >\n <div className={styles.SessionItemMain}>\n <span className={styles.SessionItemPreview}>{s.preview || \"New conversation\"}</span>\n <span className={styles.SessionItemMeta}>\n {formatSessionDate(s.created_at)}\n {s.total_steps > 0 && ` · ${s.total_steps} turn${s.total_steps !== 1 ? \"s\" : \"\"}`}\n </span>\n </div>\n <button\n className={styles.SessionDeleteBtn}\n onClick={(e) => handleDeleteSession(e, s.session_id)}\n disabled={isDeletingSessionId === s.session_id}\n title=\"Delete conversation\"\n >\n <SolidIcon\n name={isDeletingSessionId === s.session_id ? \"si-spinner\" : \"si-trash\"}\n spin={isDeletingSessionId === s.session_id}\n style={{ fontSize: \"11px\" }}\n aria-hidden\n />\n </button>\n </div>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n </header>\n\n {/* ── Reconnecting banner ── */}\n {!isConnected && (\n <div className={styles.ReconnectBanner}>\n <SolidIcon name=\"si-spinner\" spin style={{ fontSize: \"11px\" }} aria-hidden />\n Reconnecting…\n </div>\n )}\n\n {/* ── Message list ── */}\n <div className={styles.MessageList} ref={scrollRef}>\n {hasMoreHistory && (\n <div className={styles.LoadOlderWrap}>\n <button className={styles.LoadOlderBtn} onClick={handleLoadOlder} disabled={isLoadingHistory}>\n {isLoadingHistory\n ? (\n <>\n <SolidIcon name=\"si-spinner\" spin style={{ fontSize: \"11px\" }} aria-hidden />\n {\" \"}Loading…\n </>\n )\n : (\n <>\n <SolidIcon name=\"si-history\" style={{ fontSize: \"11px\" }} aria-hidden />\n {\" \"}Load older messages\n </>\n )\n }\n </button>\n </div>\n )}\n\n {isLoadingHistory && messages.length === 0 && (\n <div className={styles.HistoryLoading}>\n <SolidIcon name=\"si-spinner\" spin style={{ fontSize: \"16px\" }} aria-hidden />\n <span>Loading conversation…</span>\n </div>\n )}\n\n {messages.length === 0 && !isLoadingHistory && (\n <div className={styles.EmptyState}>\n <div className={styles.EmptyIcon}>\n <SolidIcon name=\"si-comments\" style={{ fontSize: \"28px\" }} aria-hidden />\n </div>\n <p className={styles.EmptyTitle}>How can I help you today?</p>\n <p className={styles.EmptySubtitle}>Ask me anything about your SolidX project.</p>\n </div>\n )}\n\n {groupMessages(messages).map((group) => {\n // ── User message ────────────────────────────────────────\n if (group.kind === \"user\") {\n const msg = group.msg;\n return (\n <div key={msg.id} className={`${styles.Row} ${styles.RowUser}`}>\n {/* Avatar first in DOM → rightmost with row-reverse */}\n <div className={`${styles.Avatar} ${styles.AvatarUser}`}>\n <SolidIcon name=\"si-user\" style={{ fontSize: \"12px\" }} aria-hidden />\n </div>\n <div className={styles.BubbleGroup}>\n <div className={`${styles.Bubble} ${styles.BubbleUser}`}>\n <p className={styles.UserText}>{msg.content}</p>\n </div>\n <div className={`${styles.BubbleMeta} ${styles.BubbleMetaUser}`}>\n <span className={styles.Timestamp}>\n {msg.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}\n </span>\n <CopyButton text={msg.content} />\n </div>\n </div>\n </div>\n );\n }\n\n // ── AI turn: avatar once, events + response stacked ─────\n return (\n <div key={group.groupKey} className={styles.AiTurnGroup}>\n <div className={styles.Avatar}>\n <SolidIcon name=\"si-android\" style={{ fontSize: \"12px\" }} aria-hidden />\n </div>\n <div className={styles.AiTurnContent}>\n {group.msgs.flatMap((msg) => {\n const items: React.ReactNode[] = [];\n\n if (msg.role === \"event\") {\n const active = msg.eventState === \"active\";\n\n // ── Tool call card ──────────────────────────────\n if (msg.toolName) {\n const status = msg.toolStatus || (active ? \"running\" : \"success\");\n const cardClass = status === \"running\" ? styles.ToolCardRunning :\n status === \"warning\" ? styles.ToolCardWarning :\n status === \"error\" ? styles.ToolCardError :\n styles.ToolCardDone;\n\n const statusIcon: SolidIconMeta = status === \"running\"\n ? { name: \"si-spinner\", spin: true }\n : status === \"warning\"\n ? { name: \"si-exclamation-triangle\" }\n : status === \"error\"\n ? { name: \"si-times-circle\" }\n : { name: \"si-check-circle\" };\n\n const statusIconClass = status === \"warning\" ? styles.ToolCardStatusWarning :\n status === \"error\" ? styles.ToolCardStatusError :\n status === \"success\" ? styles.ToolCardStatusDone :\n styles.ToolCardStatusIcon;\n\n const hasExpandable = !!msg.toolOutput || !!msg.toolArgs;\n const isExpanded = expandedToolIds.has(msg.id);\n const toggleExpand = hasExpandable && status !== \"running\"\n ? () => setExpandedToolIds((prev) => {\n const next = new Set(prev);\n if (next.has(msg.id)) next.delete(msg.id); else next.add(msg.id);\n return next;\n })\n : undefined;\n\n items.push(\n <div key={msg.id} className={`${styles.ToolCard} ${cardClass}`}>\n <button\n className={styles.ToolCardHeaderBtn}\n onClick={toggleExpand}\n data-expandable={hasExpandable && status !== \"running\" ? \"true\" : undefined}\n >\n <SolidIcon\n name={statusIcon.name}\n spin={statusIcon.spin}\n className={statusIconClass}\n aria-hidden\n />\n <SolidIcon\n name={getToolIconName(msg.toolName ?? \"\")}\n className={styles.ToolCardToolIcon}\n aria-hidden\n />\n <span className={styles.ToolCardName}>{msg.toolName}</span>\n {msg.toolDesc && <span className={styles.ToolCardDesc} title={msg.toolDesc}>{msg.toolDesc}</span>}\n <span className={styles.ToolCardBadge}>{getToolCategory(msg.toolName)}</span>\n {msg.durationMs != null && (\n <span className={styles.ToolCardDuration}>{formatDuration(msg.durationMs)}</span>\n )}\n {hasExpandable && status !== \"running\" && (\n <SolidIcon\n name=\"si-chevron-right\"\n className={`${styles.ToolCardChevron} ${isExpanded ? styles.ToolCardChevronOpen : \"\"}`}\n aria-hidden\n />\n )}\n </button>\n {/* Progress substeps: always visible */}\n {msg.toolProgress && msg.toolProgress.length > 0 && (\n <div className={styles.ToolCardProgress}>\n {msg.toolProgress.map((p, i) => (\n <div key={i} className={`${styles.ToolProgressItem} ${p.status === \"running\" ? styles.ToolProgressRunning : styles.ToolProgressDone}`}>\n <SolidIcon\n name={p.status === \"running\" ? \"si-spinner\" : \"si-check-circle\"}\n spin={p.status === \"running\"}\n style={{ fontSize: \"10px\" }}\n aria-hidden\n />\n <span className={styles.ToolProgressLabel}>{p.label}</span>\n {p.durationMs != null && p.status === \"done\" && (\n <span className={styles.ToolProgressDuration}>{formatDuration(p.durationMs)}</span>\n )}\n </div>\n ))}\n </div>\n )}\n {isExpanded && (msg.toolArgs || msg.toolOutput) && (\n <div className={styles.ToolCardExpandable}>\n {msg.toolArgs && Object.keys(msg.toolArgs).length > 0 && (\n <div className={styles.ToolCardOutput}>\n <div className={styles.ToolOutputHeader}>\n <span>Arguments</span>\n </div>\n <pre className={styles.ToolOutputText}>\n {JSON.stringify(msg.toolArgs, null, 2)}\n </pre>\n </div>\n )}\n {msg.toolOutput && (\n <div className={styles.ToolCardOutput}>\n <div className={styles.ToolOutputHeader}>\n <span>Result</span>\n </div>\n <pre className={`${styles.ToolOutputText} ${status === \"warning\" ? styles.ToolOutputWarning : status === \"error\" ? styles.ToolOutputError : \"\"}`}>\n {msg.toolOutputRaw || msg.toolOutput}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n return items;\n }\n\n // ── Thinking bubble: only show while active ──────\n if (active) {\n items.push(\n <div key={msg.id} className={styles.ThinkingBubble}>\n <div className={styles.ThinkingDots}>\n <span className={styles.ThinkingDot} />\n <span className={styles.ThinkingDot} />\n <span className={styles.ThinkingDot} />\n </div>\n <span className={styles.ThinkingLabel}>Thinking…</span>\n </div>\n );\n }\n return items;\n }\n\n // ── Error bubble ────────────────────────────────────\n if (msg.isError) {\n items.push(\n <div key={msg.id} className={styles.ErrorBubble}>\n <div className={styles.ErrorIcon}>\n <SolidIcon name=\"si-exclamation-circle\" style={{ fontSize: \"13px\" }} aria-hidden />\n </div>\n <div className={styles.ErrorContent}>\n <p className={styles.ErrorTitle}>Error</p>\n <p className={styles.ErrorText}>{msg.content}</p>\n </div>\n </div>\n );\n return items;\n }\n\n // ── Assistant message ───────────────────────────────\n const isStreaming = msg.id.startsWith(\"stream-\") && isProcessing;\n items.push(\n <div key={msg.id} className={styles.BubbleGroup}>\n <div className={`${styles.Bubble} ${styles.BubbleAssistant}`}>\n <div className={styles.MarkdownRoot}>\n <ReactMarkdown remarkPlugins={[remarkGfm]} components={markdownComponents}>\n {msg.content}\n </ReactMarkdown>\n </div>\n {isStreaming && <span className={styles.StreamingCursor} />}\n </div>\n <div className={`${styles.BubbleMeta} ${styles.BubbleMetaAssistant}`}>\n <span className={styles.Timestamp}>\n {msg.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}\n </span>\n <CopyButton text={msg.content} />\n </div>\n </div>\n );\n return items;\n })}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* ── Input area ── */}\n <div className={styles.InputArea}>\n <div className={`${styles.InputBox} ${!isConnected || !sessionId ? styles.InputBoxDisabled : \"\"}`}>\n <textarea\n ref={textareaRef}\n className={styles.Textarea}\n placeholder={inputPlaceholder}\n value={input}\n onChange={autoResize}\n onKeyDown={handleKeyDown}\n disabled={!isConnected || !sessionId || isProcessing}\n rows={1}\n />\n <button\n className={`${styles.SendBtn} ${canSend ? styles.SendBtnActive : \"\"}`}\n disabled={!canSend}\n onClick={handleSend}\n aria-label=\"Send message\"\n >\n <SolidIcon name=\"si-send\" style={{ fontSize: \"12px\" }} aria-hidden />\n </button>\n </div>\n </div>\n\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"SolidAiChat.js","sourceRoot":"","sources":["../../../../src/components/core/solid-ai/SolidAiChat.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { loadSession } from \"../../../adapters/auth/storage\";\nimport { SolidIcon, type SolidIconMeta, type SolidIconName } from \"../../shad-cn-ui\";\nimport styles from \"./SolidAiChat.module.css\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\ninterface ToolProgressStep {\n label: string;\n status: \"running\" | \"done\";\n durationMs?: number;\n}\n\ninterface Message {\n id: string;\n role: \"user\" | \"assistant\" | \"event\";\n content: string;\n timestamp: Date;\n // event messages only\n eventState?: \"active\" | \"done\";\n // tool call events only\n toolName?: string;\n toolDesc?: string;\n toolArgs?: Record<string, unknown>;\n toolProgress?: ToolProgressStep[];\n durationMs?: number;\n toolStatus?: \"success\" | \"warning\" | \"error\";\n toolOutput?: string;\n toolOutputRaw?: string;\n // step tracking for dividers\n step?: number;\n // error flag for styled error bubble\n isError?: boolean;\n}\n\ninterface SessionSummary {\n session_id: string;\n status: string;\n totalSteps: number;\n created_at: string | null;\n preview: string;\n}\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nconst WS_URL = \"ws://localhost:8765/ws/agent\";\nconst API_BASE = \"http://localhost:8765\";\nconst RECONNECT_DELAY = 3000;\nconst PAGE_SIZE = 50;\n\n// ── Session persistence ───────────────────────────────────────────────────────\n// Module-level vars survive sidebar collapse; localStorage survives hard reload.\nconst LS_SESSION_ID = \"solidx.ai.session_id\";\nconst LS_HISTORY_ID = \"solidx.ai.history_session_id\";\n\nfunction readLS(key: string): string | null {\n try { return localStorage.getItem(key); } catch { return null; }\n}\nfunction writeLS(key: string, val: string | null) {\n try { val ? localStorage.setItem(key, val) : localStorage.removeItem(key); } catch { /* ignore */ }\n}\n\nlet _persistedSessionId: string | null = readLS(LS_SESSION_ID);\nlet _historySessionId: string | null = readLS(LS_HISTORY_ID);\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction formatSessionDate(iso: string | null): string {\n if (!iso) return \"Unknown date\";\n const d = new Date(iso);\n const diffDays = Math.floor((Date.now() - d.getTime()) / 86400000);\n if (diffDays === 0) return d.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" });\n if (diffDays === 1) return \"Yesterday\";\n if (diffDays < 7) return d.toLocaleDateString([], { weekday: \"short\" });\n return d.toLocaleDateString([], { month: \"short\", day: \"numeric\" });\n}\n\n// ── Sub-components ────────────────────────────────────────────────────────────\n\nfunction CopyButton({ text }: { text: string }) {\n const [copied, setCopied] = useState(false);\n const handleCopy = async (e: React.MouseEvent) => {\n e.stopPropagation();\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n return (\n <button className={styles.CopyBtn} onClick={handleCopy} title=\"Copy\" aria-label=\"Copy message\">\n <SolidIcon\n name={copied ? \"si-check\" : \"si-copy\"}\n style={{ fontSize: \"11px\" }}\n aria-hidden\n />\n </button>\n );\n}\n\nfunction CodeBlock({ children, className }: { children?: React.ReactNode; className?: string }) {\n const [copied, setCopied] = useState(false);\n const code = String(children ?? \"\").replace(/\\n$/, \"\");\n const lang = className?.replace(\"language-\", \"\") ?? \"\";\n const handleCopy = async () => {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n return (\n <div className={styles.CodeBlockWrapper}>\n <div className={styles.CodeBlockHeader}>\n <span className={styles.CodeLang}>{lang || \"code\"}</span>\n <button className={styles.CodeCopyBtn} onClick={handleCopy}>\n <SolidIcon\n name={copied ? \"si-check\" : \"si-copy\"}\n style={{ fontSize: \"11px\" }}\n aria-hidden\n />\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n <pre className={styles.CodePre}><code>{code}</code></pre>\n </div>\n );\n}\n\nconst markdownComponents = {\n code({ node, inline, className, children, ...props }: any) {\n // Detect by className — only named fenced blocks (```lang) become CodeBlock.\n // Inline backticks and unnamed fenced blocks render as inline code.\n const isBlock = /language-/.test(className || \"\");\n if (!isBlock) return <code className={styles.InlineCode} {...props}>{children}</code>;\n return <CodeBlock className={className}>{children}</CodeBlock>;\n },\n pre({ children }: any) { return <>{children}</>; },\n table({ children }: any) {\n return <div className={styles.MarkdownTableWrapper}><table>{children}</table></div>;\n },\n a({ href, children }: any) {\n return (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={styles.MarkdownLink}>\n {children}\n </a>\n );\n },\n};\n\n// ── Tool helpers ──────────────────────────────────────────────────────────────\n\nconst TOOL_CATEGORIES: Record<string, string[]> = {\n \"Read\": [\"solid_get_module_metadata\", \"solid_get_model_metadata\", \"solid_get_field_metadata\", \"solid_get_layout_context\", \"select_relevant_code_context\"],\n \"Create\": [\"solid_create_module\", \"solid_create_model_with_fields\", \"solid_add_fields_to_model\", \"solid_modify_fields_in_model\", \"solid_update_layout\", \"solid_patch_layout\", \"solid_add_or_update_menu\", \"edit_solid_code\"],\n \"Chat\": [\"solid_chat_with_ozzy\"],\n \"Shell\": [\"bash\"],\n};\n\nfunction getToolCategory(name: string): string {\n for (const [cat, tools] of Object.entries(TOOL_CATEGORIES)) {\n if (tools.includes(name)) return cat;\n }\n return \"Tool\";\n}\n\nfunction getToolIconName(name: string): SolidIconName {\n if (name === \"bash\") return \"si-terminal\";\n const cat = getToolCategory(name);\n if (cat === \"Read\") return \"si-search\";\n if (cat === \"Create\") return \"si-file-edit\";\n if (cat === \"Chat\") return \"si-comments\";\n return \"si-cog\";\n}\n\nfunction describeToolArgs(args: Record<string, unknown>): string {\n const priority = [\"cmd\", \"command\", \"query\", \"path\", \"file\", \"module_name\", \"model_name\", \"name\", \"id\", \"content\"];\n for (const key of priority) {\n if (args[key] != null) {\n const val = String(args[key]).trim().replace(/\\n/g, \" \");\n return val.length > 72 ? val.slice(0, 72) + \"…\" : val;\n }\n }\n const first = Object.values(args)[0];\n if (first != null) {\n const val = String(first).trim().replace(/\\n/g, \" \");\n return val.length > 72 ? val.slice(0, 72) + \"…\" : val;\n }\n return \"\";\n}\n\nfunction formatDuration(ms?: number): string {\n if (ms == null) return \"\";\n if (ms < 1000) return `${Math.round(ms)}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n}\n\n/**\n * Parses tool output to extract semantic status and clean display text.\n * Handles nested JSON structures like the Solid agent uses.\n */\nfunction parseToolResult(output: string): { status: Message[\"toolStatus\"]; text: string } {\n if (!output) return { status: \"success\", text: \"\" };\n try {\n const outer = JSON.parse(output);\n let status: Message[\"toolStatus\"] = \"success\";\n let text = \"\";\n\n // The Solid agent often wraps the real result in a 'data' string or object\n const innerData = outer.data;\n if (typeof innerData === \"string\") {\n try {\n const inner = JSON.parse(innerData);\n if (inner.generation_status === \"error\" || inner.status === \"error\") {\n status = \"warning\";\n text = inner.instructions || (inner.errors && inner.errors.join(\", \")) || innerData;\n } else {\n text = inner.message || inner.content || innerData;\n }\n } catch {\n text = innerData;\n }\n } else if (innerData && typeof innerData === \"object\") {\n if (innerData.generation_status === \"error\" || innerData.status === \"error\") {\n status = \"warning\";\n text = innerData.instructions || (innerData.errors && innerData.errors.join(\", \")) || JSON.stringify(innerData);\n } else {\n text = innerData.message || innerData.content || JSON.stringify(innerData);\n }\n } else {\n text = outer.content || outer.message || output;\n }\n\n // Check if the outer status is error\n if (outer.status === \"error\" || outer.errors?.length > 0) {\n status = \"error\";\n text = outer.message || (outer.errors && outer.errors.join(\", \")) || text;\n }\n\n return { status, text: text.length > 500 ? text.slice(0, 500) + \"…\" : text };\n } catch {\n return { status: \"success\", text: output.length > 120 ? output.slice(0, 120) + \"…\" : output };\n }\n}\n\n/**\n * Detects LLM metadata strings that should not be rendered as chat messages.\n * These include token counts, model info, finish_reason, and message-list summaries.\n */\nfunction isLlmMetadata(content: string): boolean {\n if (!content) return true;\n return /\\d+\\s*(input|output)\\s*tokens/i.test(content)\n || /finish_reason:/i.test(content)\n || /^\\d+\\s+messages\\s*\\(/i.test(content)\n || /\\|\\s*model:\\s*\\S+/i.test(content);\n}\n\n// ── Message grouping ──────────────────────────────────────────────────────────\n// Groups consecutive event + assistant messages into a single AI turn so we can\n// render the avatar once per turn rather than per message.\n\ntype MsgGroup =\n | { kind: \"user\"; msg: Message }\n | { kind: \"ai\"; msgs: Message[]; groupKey: string };\n\nfunction groupMessages(messages: Message[]): MsgGroup[] {\n const result: MsgGroup[] = [];\n let aiBuffer: Message[] = [];\n for (const msg of messages) {\n if (msg.role === \"user\") {\n if (aiBuffer.length > 0) {\n result.push({ kind: \"ai\", msgs: aiBuffer, groupKey: aiBuffer[0].id });\n aiBuffer = [];\n }\n result.push({ kind: \"user\", msg });\n } else {\n aiBuffer.push(msg);\n }\n }\n if (aiBuffer.length > 0) {\n result.push({ kind: \"ai\", msgs: aiBuffer, groupKey: aiBuffer[0].id });\n }\n return result;\n}\n\n/**\n * Maps the new backend \"event-based\" JSON history into a flattened Message list for UI.\n * Handles merging ToolResult into ToolCalling, and processing StepStarted etc.\n */\nfunction processHistoryEvents(backendMsgs: any[]): Message[] {\n const result: Message[] = [];\n // Tracks the \"active\" message so we can update its duration/progress inline.\n let currentEventIdx: number | null = null;\n\n for (const m of backendMsgs) {\n const type = m.event_type;\n const data = m.event_data || {};\n const id = `hist-${m.id}`;\n // The backend ISO timestamp or the current time as fallback.\n const ts = m.timestamp ? new Date(m.timestamp) : new Date();\n\n switch (type) {\n case \"UserMessage\":\n result.push({\n id,\n role: \"user\",\n content: m.content || data.content || \"\",\n timestamp: ts,\n });\n currentEventIdx = null;\n break;\n\n case \"AgentStarted\":\n case \"StepStarted\":\n // Create a \"Thinking…\" event row.\n currentEventIdx = result.length;\n result.push({\n id,\n role: \"event\",\n content: \"Thinking…\",\n timestamp: ts,\n eventState: \"done\",\n });\n break;\n\n case \"ToolCalling\": {\n const toolName = data.tool_name || m.tool_name || \"tool\";\n const toolArgs = data.arguments || {};\n currentEventIdx = result.length;\n result.push({\n id,\n role: \"event\",\n content: toolName,\n timestamp: ts,\n eventState: \"done\",\n toolName,\n toolDesc: describeToolArgs(toolArgs),\n toolArgs,\n });\n break;\n }\n\n case \"ToolProgress\": {\n if (currentEventIdx != null) {\n const label = data.label || \"\";\n const progressStatus = data.status || \"running\";\n const stepStatus: ToolProgressStep[\"status\"] =\n progressStatus === \"success\" || progressStatus === \"done\" ? \"done\" : \"running\";\n const durationMs: number | undefined = data.duration_ms;\n\n const prev = result[currentEventIdx];\n if (prev && prev.role === \"event\") {\n const existing = prev.toolProgress || [];\n const existingIdx = existing.findIndex((p) => p.label === label);\n if (existingIdx >= 0) {\n const updated = [...existing];\n updated[existingIdx] = {\n label,\n status: stepStatus,\n durationMs: durationMs ?? updated[existingIdx].durationMs,\n };\n prev.toolProgress = updated;\n } else {\n prev.toolProgress = [...existing, { label, status: stepStatus, durationMs }];\n }\n }\n }\n break;\n }\n\n case \"ToolResult\": {\n if (currentEventIdx != null) {\n const prev = result[currentEventIdx];\n if (prev && prev.role === \"event\") {\n prev.durationMs = data.duration_ms || m.duration_ms;\n const outputStr = data.output || m.content || \"\";\n if (outputStr) {\n const { status, text } = parseToolResult(outputStr);\n prev.toolStatus = status;\n prev.toolOutput = text;\n prev.toolOutputRaw = outputStr;\n }\n }\n }\n break;\n }\n\n case \"LlmComplete\": {\n const llmContent = m.content || data.content || \"\";\n if (!llmContent || isLlmMetadata(llmContent)) break;\n const prevAssistantLlm = [...result].reverse().find(r => r.role === \"assistant\");\n if (prevAssistantLlm?.content === llmContent) break;\n result.push({ id, role: \"assistant\", content: llmContent, timestamp: ts });\n currentEventIdx = null;\n break;\n }\n case \"TurnCompleteEvent\": {\n const tcContent = m.content || data.content || \"\";\n if (!tcContent) { currentEventIdx = null; break; }\n const prevAssistantTc = [...result].reverse().find(r => r.role === \"assistant\");\n if (prevAssistantTc?.content === tcContent) { currentEventIdx = null; break; }\n result.push({ id, role: \"assistant\", content: tcContent, timestamp: ts });\n currentEventIdx = null;\n break;\n }\n\n case \"StepComplete\":\n case \"AgentComplete\":\n currentEventIdx = null;\n break;\n\n case \"AgentError\":\n case \"error\":\n result.push({\n id,\n role: \"assistant\",\n content: `Error: ${data.error || m.content || \"Unknown error\"}`,\n timestamp: ts,\n });\n currentEventIdx = null;\n break;\n\n default:\n if (m.role === \"user\") {\n result.push({ id, role: \"user\", content: m.content || \"\", timestamp: ts });\n currentEventIdx = null;\n } else if (m.role === \"assistant\") {\n const fallbackContent = m.content || \"\";\n if (fallbackContent && !isLlmMetadata(fallbackContent)) {\n const prevAst = [...result].reverse().find(r => r.role === \"assistant\");\n if (prevAst?.content !== fallbackContent) {\n result.push({ id, role: \"assistant\", content: fallbackContent, timestamp: ts });\n }\n }\n currentEventIdx = null;\n }\n break;\n }\n }\n return result;\n}\n\n// ── Main component ────────────────────────────────────────────────────────────\n\nexport const SolidAiChat: React.FC = () => {\n const [messages, setMessages] = useState<Message[]>([]);\n const [input, setInput] = useState(\"\");\n const [isConnected, setIsConnected] = useState(false);\n const [sessionId, setSessionId] = useState<string | null>(null);\n const [isLoadingHistory, setIsLoadingHistory] = useState(false);\n const [hasMoreHistory, setHasMoreHistory] = useState(false);\n const [historyPage, setHistoryPage] = useState(1);\n\n const [showSessionMenu, setShowSessionMenu] = useState(false);\n const [sessions, setSessions] = useState<SessionSummary[]>([]);\n const [isLoadingSessions, setIsLoadingSessions] = useState(false);\n const [isProcessing, setIsProcessing] = useState(false);\n const [activeHistoryId, setActiveHistoryId] = useState<string | null>(null);\n const [isDeletingSessionId, setIsDeletingSessionId] = useState<string | null>(null);\n const [expandedToolIds, setExpandedToolIds] = useState<Set<string>>(new Set());\n\n const sessionMenuRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const wsRef = useRef<WebSocket | null>(null);\n const reconnectTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const hasStreamedRef = useRef(false);\n const intentionalCloseRef = useRef(false);\n const isPrependingRef = useRef(false);\n const prevScrollHeightRef = useRef(0);\n // Tracks the id of the current \"live\" event message so we can update it in-place.\n const liveEventIdRef = useRef<string | null>(null);\n const currentStepRef = useRef<number | null>(null);\n const activeSessionIdRef = useRef<string | null>(_persistedSessionId);\n\n // ── Close session menu on outside click ──────────────────────────────────\n useEffect(() => {\n if (!showSessionMenu) return;\n const handler = (e: MouseEvent) => {\n if (sessionMenuRef.current && !sessionMenuRef.current.contains(e.target as Node)) {\n setShowSessionMenu(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [showSessionMenu]);\n\n // ── Scroll management ─────────────────────────────────────────────────────\n const scrollToBottom = useCallback(() => {\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }, []);\n\n useEffect(() => {\n if (isPrependingRef.current && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight - prevScrollHeightRef.current;\n isPrependingRef.current = false;\n } else {\n scrollToBottom();\n }\n }, [messages, scrollToBottom]);\n\n // ── History fetch ─────────────────────────────────────────────────────────\n const fetchHistory = useCallback(async (sid: string, page: number, prepend: boolean) => {\n setIsLoadingHistory(true);\n try {\n const res = await fetch(`${API_BASE}/api/agent/sessions/${sid}/messages?page=${page}&page_size=${PAGE_SIZE}`);\n if (!res.ok) return;\n const data = await res.json();\n const fetched = processHistoryEvents(data.messages ?? []);\n if (prepend) {\n prevScrollHeightRef.current = scrollRef.current?.scrollHeight ?? 0;\n isPrependingRef.current = true;\n setMessages((prev) => [...fetched, ...prev]);\n } else {\n setMessages(fetched);\n }\n setHasMoreHistory(data.has_more ?? false);\n setHistoryPage(page);\n } catch {\n // silently skip\n } finally {\n setIsLoadingHistory(false);\n }\n }, []);\n\n // ── Sessions list fetch ───────────────────────────────────────────────────\n const fetchSessions = useCallback(async () => {\n setIsLoadingSessions(true);\n try {\n const userId = loadSession()?.user?.id ?? null;\n const url = userId\n ? `${API_BASE}/api/agent/sessions/history?user_id=${userId}`\n : `${API_BASE}/api/agent/sessions/history`;\n const res = await fetch(url);\n if (!res.ok) return;\n setSessions(await res.json());\n } catch {\n // silently ignore\n } finally {\n setIsLoadingSessions(false);\n }\n }, []);\n\n // ── WebSocket ─────────────────────────────────────────────────────────────\n const connectWebSocket = useCallback(() => {\n const state = wsRef.current?.readyState;\n if (state === WebSocket.OPEN || state === WebSocket.CONNECTING) return;\n intentionalCloseRef.current = false;\n\n const ws = new WebSocket(WS_URL);\n\n ws.onopen = () => {\n setIsConnected(true);\n if (reconnectTimerRef.current) clearTimeout(reconnectTimerRef.current);\n const userId = loadSession()?.user?.id ?? null;\n if (_persistedSessionId) {\n ws.send(JSON.stringify({ action: \"resume_session\", session_id: _persistedSessionId, user_id: userId }));\n } else {\n ws.send(JSON.stringify({ action: \"start_session\", user_id: userId }));\n }\n };\n\n ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n\n // Filtering: Only process messages for the active session.\n // data.session_id is the primary field; sometimes it's nested in data.data\n const msgSessionId = data.session_id || data.data?.session_id;\n\n // If we have an active session and the message is for a different one, ignore it.\n // Exception: session_started events are always allowed as they establish the new active ID.\n if (data.type !== \"session_started\" && msgSessionId && activeSessionIdRef.current && msgSessionId !== activeSessionIdRef.current) {\n return;\n }\n\n // Add a new persistent event row, auto-freezing any previous live one.\n // Pass extra fields (toolName, toolDesc, …) for tool card events.\n const addEvent = (content: string, extra?: Partial<Message>) => {\n const prevId = liveEventIdRef.current;\n const id = `evt-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n liveEventIdRef.current = id;\n setMessages((prev) => {\n const base = prevId\n ? prev.map((m) => m.id === prevId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n return [...base, { id, role: \"event\" as const, content, timestamp: new Date(), eventState: \"active\" as const, ...extra }];\n });\n };\n\n // Freeze the current live event as done.\n const freezeEvent = () => {\n const id = liveEventIdRef.current;\n if (!id) return;\n liveEventIdRef.current = null;\n setMessages((prev) => prev.map((m) => m.id === id ? { ...m, eventState: \"done\" as const } : m));\n };\n\n switch (data.type) {\n // ── Session lifecycle ──────────────────────────────────\n case \"session_started\": {\n const sid: string = data.session_id;\n // Prefer the backend's history_session_id if provided.\n // This fixes the \"ID chaining\" issue where resuming a restored session\n // would create a new ID. We want to stick to the \"original\" ID for history.\n const historySid: string = data.history_session_id || sid;\n\n _persistedSessionId = sid;\n _historySessionId = historySid;\n writeLS(LS_SESSION_ID, sid);\n writeLS(LS_HISTORY_ID, historySid);\n setSessionId(sid);\n activeSessionIdRef.current = sid;\n setActiveHistoryId(historySid);\n\n // Only fetch history if we don't have any messages yet (initial load or session switch)\n setMessages((prev) => {\n if (prev.length === 0) fetchHistory(historySid, 1, false);\n return prev;\n });\n break;\n }\n\n case \"session_ended\":\n setSessionId(null);\n break;\n\n // ── Agent lifecycle ────────────────────────────────────\n case \"AgentStarted\":\n setIsProcessing(true);\n currentStepRef.current = null;\n addEvent(\"Thinking…\");\n break;\n\n case \"StepStarted\": {\n const step: number = data.data?.step ?? 1;\n currentStepRef.current = step;\n // Only create a \"Thinking…\" row when there's no active live event\n // (e.g. step 2+ after tool results already froze the previous card).\n if (!liveEventIdRef.current) addEvent(\"Thinking…\", { step });\n break;\n }\n\n case \"StepComplete\":\n freezeEvent();\n break;\n\n case \"ToolResult\": {\n const durationMs: number | undefined = data.data?.duration_ms;\n const outputStr: string = data.data?.output || \"\";\n const id = liveEventIdRef.current;\n if (id) {\n setMessages((prev) => prev.map((m) => {\n if (m.id === id) {\n const update: Partial<Message> = { durationMs };\n if (outputStr) {\n const { status, text } = parseToolResult(outputStr);\n update.toolStatus = status;\n update.toolOutput = text;\n update.toolOutputRaw = outputStr;\n }\n return { ...m, ...update };\n }\n return m;\n }));\n }\n freezeEvent();\n break;\n }\n\n case \"AgentComplete\":\n freezeEvent();\n break;\n\n // ── LLM streaming ──────────────────────────────────────\n case \"LlmToken\": {\n const delta: string = data.data?.delta ?? \"\";\n if (!delta) break;\n hasStreamedRef.current = true;\n // Freeze the live event row on the first token, then stream.\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n let msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n const last = msgs[msgs.length - 1];\n if (last?.role === \"assistant\" && last.id.startsWith(\"stream-\")) {\n return [...msgs.slice(0, -1), { ...last, content: last.content + delta }];\n }\n return [...msgs, { id: `stream-${Date.now()}`, role: \"assistant\", content: delta, timestamp: new Date() }];\n });\n break;\n }\n\n // ── LLM complete (intermediate text before tool calls) ─\n case \"LlmComplete\": {\n const llmContent: string = data.data?.content ?? \"\";\n if (llmContent && !isLlmMetadata(llmContent)) {\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n let msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n const lastAssistant = [...msgs].reverse().find(m => m.role === \"assistant\");\n if (!lastAssistant || lastAssistant.content !== llmContent) {\n msgs = [...msgs, { id: `llm-${Date.now()}`, role: \"assistant\" as const, content: llmContent, timestamp: new Date() }];\n }\n return msgs;\n });\n }\n break;\n }\n\n // ── Tool activity ──────────────────────────────────────\n case \"ToolCalling\": {\n const toolName: string = data.data?.tool_name ?? \"tool\";\n const toolArgs: Record<string, unknown> = data.data?.arguments ?? {};\n addEvent(toolName, { toolName, toolDesc: describeToolArgs(toolArgs), toolArgs });\n break;\n }\n\n case \"ToolProgress\": {\n const label: string = data.data?.label ?? \"\";\n const progressStatus: string = data.data?.status ?? \"running\";\n const durationMs: number | undefined = data.data?.duration_ms;\n const stepStatus: ToolProgressStep[\"status\"] =\n progressStatus === \"success\" || progressStatus === \"done\" ? \"done\" : \"running\";\n const id = liveEventIdRef.current;\n if (!id) break;\n setMessages((prev) => prev.map((m) => {\n if (m.id !== id) return m;\n const existing = m.toolProgress ?? [];\n const idx = existing.findIndex((p) => p.label === label);\n if (idx >= 0) {\n const updated = [...existing];\n updated[idx] = { label, status: stepStatus, durationMs: durationMs ?? updated[idx].durationMs };\n return { ...m, toolProgress: updated };\n }\n return { ...m, toolProgress: [...existing, { label, status: stepStatus, durationMs }] };\n }));\n break;\n }\n\n // ── Turn complete ──────────────────────────────────────\n case \"TurnCompleteEvent\":\n case \"turn_complete\": {\n setIsProcessing(false);\n const content: string = data.data?.content ?? data.content ?? \"\";\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n let msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n if (content) {\n const lastAssistant = [...msgs].reverse().find(m => m.role === \"assistant\");\n const alreadyRendered = lastAssistant && lastAssistant.content === content;\n if (!hasStreamedRef.current && !alreadyRendered) {\n msgs = [...msgs, { id: `tc-${Date.now()}`, role: \"assistant\", content, timestamp: new Date() }];\n }\n }\n return msgs;\n });\n break;\n }\n\n // ── Errors ─────────────────────────────────────────────\n case \"AgentError\":\n case \"error\": {\n setIsProcessing(false);\n const errMsg: string = data.data?.error ?? \"Unknown error\";\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n const msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n return [...msgs, { id: `err-${Date.now()}`, role: \"assistant\" as const, content: errMsg, timestamp: new Date(), isError: true }];\n });\n break;\n }\n\n default:\n break;\n }\n } catch {\n // ignore JSON parse errors\n }\n };\n\n ws.onclose = () => {\n setIsConnected(false);\n setSessionId(null);\n setIsProcessing(false);\n liveEventIdRef.current = null;\n if (!intentionalCloseRef.current) {\n // Unexpected disconnect — banner is shown via !isConnected state; schedule reconnect.\n reconnectTimerRef.current = setTimeout(connectWebSocket, RECONNECT_DELAY);\n }\n };\n\n ws.onerror = () => {\n setIsConnected(false);\n };\n\n wsRef.current = ws;\n }, [fetchHistory]);\n\n useEffect(() => {\n connectWebSocket();\n return () => {\n reconnectTimerRef.current && clearTimeout(reconnectTimerRef.current);\n intentionalCloseRef.current = true;\n wsRef.current?.close();\n };\n }, [connectWebSocket]);\n\n // ── Send message ──────────────────────────────────────────────────────────\n const handleSend = useCallback(() => {\n const trimmed = input.trim();\n if (!trimmed || !isConnected || !sessionId || isProcessing) return;\n\n setIsProcessing(true);\n hasStreamedRef.current = false;\n currentStepRef.current = null;\n liveEventIdRef.current = null;\n setMessages((prev) => [...prev, { id: `u-${Date.now()}`, role: \"user\", content: trimmed, timestamp: new Date() }]);\n wsRef.current?.send(JSON.stringify({ action: \"message\", session_id: sessionId, content: trimmed }));\n setInput(\"\");\n if (textareaRef.current) {\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.focus();\n }\n }, [input, isConnected, sessionId, isProcessing]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) { e.preventDefault(); handleSend(); }\n };\n\n const autoResize = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInput(e.target.value);\n const el = e.target;\n el.style.height = \"auto\";\n el.style.height = `${Math.min(el.scrollHeight, 480)}px`;\n };\n\n // ── Session actions ───────────────────────────────────────────────────────\n const handleNewChat = useCallback(() => {\n _persistedSessionId = null;\n _historySessionId = null;\n writeLS(LS_SESSION_ID, null);\n writeLS(LS_HISTORY_ID, null);\n liveEventIdRef.current = null;\n activeSessionIdRef.current = \"__switching__\";\n setMessages([]);\n setIsProcessing(false);\n setExpandedToolIds(new Set());\n setSessionId(null);\n setActiveHistoryId(null);\n setHasMoreHistory(false);\n setHistoryPage(1);\n setShowSessionMenu(false);\n const userId = loadSession()?.user?.id ?? null;\n wsRef.current?.send(JSON.stringify({ action: \"start_session\", user_id: userId }));\n }, []);\n\n const handleSelectSession = useCallback((targetSessionId: string) => {\n if (targetSessionId === activeHistoryId) {\n setShowSessionMenu(false);\n return;\n }\n _persistedSessionId = targetSessionId;\n _historySessionId = targetSessionId;\n writeLS(LS_SESSION_ID, targetSessionId);\n writeLS(LS_HISTORY_ID, targetSessionId);\n liveEventIdRef.current = null;\n activeSessionIdRef.current = targetSessionId;\n setMessages([]);\n setSessionId(null);\n setActiveHistoryId(targetSessionId);\n setExpandedToolIds(new Set());\n setHasMoreHistory(false);\n setHistoryPage(1);\n setShowSessionMenu(false);\n const userId = loadSession()?.user?.id ?? null;\n wsRef.current?.send(JSON.stringify({ action: \"resume_session\", session_id: targetSessionId, user_id: userId }));\n }, [activeHistoryId]);\n\n const handleDeleteSession = useCallback(async (e: React.MouseEvent, targetId: string) => {\n e.stopPropagation();\n if (!window.confirm(\"Are you sure you want to delete this conversation?\")) return;\n\n setIsDeletingSessionId(targetId);\n try {\n const res = await fetch(`${API_BASE}/api/agent/sessions/${targetId}`, { method: \"DELETE\" });\n if (res.ok) {\n setSessions((prev) => prev.filter((s) => s.session_id !== targetId));\n if (targetId === activeHistoryId) {\n handleNewChat();\n }\n }\n } catch {\n // ignore\n } finally {\n setIsDeletingSessionId(null);\n }\n }, [activeHistoryId, handleNewChat]);\n\n const handleToggleSessionMenu = useCallback(() => {\n setShowSessionMenu((prev) => { if (!prev) fetchSessions(); return !prev; });\n }, [fetchSessions]);\n\n const handleLoadOlder = useCallback(() => {\n const sid = _historySessionId ?? sessionId;\n if (!sid || isLoadingHistory) return;\n fetchHistory(sid, historyPage + 1, true);\n }, [sessionId, isLoadingHistory, historyPage, fetchHistory]);\n\n // ── Derived ───────────────────────────────────────────────────────────────\n const canSend = isConnected && !!sessionId && !!input.trim() && !isProcessing;\n const inputPlaceholder = !isConnected ? \"Connecting to server…\" : !sessionId ? \"Establishing session…\" : isProcessing ? \"SolidX AI is thinking…\" : \"Message SolidX AI…\";\n\n // ── Render ────────────────────────────────────────────────────────────────\n return (\n <div className={styles.Container}>\n\n {/* ── Header ── */}\n <header className={styles.Header}>\n <span className={`${styles.StatusDot} ${isProcessing ? styles.StatusRunning : isConnected ? styles.StatusOnline : styles.StatusOffline}`} />\n <span className={styles.StatusLabel}>\n <SolidIcon\n name={isConnected ? \"si-wifi\" : \"si-times-circle\"}\n style={{ fontSize: \"11px\" }}\n aria-hidden\n />\n {isConnected ? (isProcessing ? \"Running…\" : sessionId ? \"Connected\" : \"Starting…\") : \"Offline\"}\n </span>\n\n <div className={styles.HeaderSpacer} />\n\n <button className={styles.NewChatHeaderBtn} onClick={handleNewChat} title=\"New conversation\">\n <SolidIcon name=\"si-plus\" style={{ fontSize: \"10px\" }} aria-hidden />\n New Chat\n </button>\n\n {/* Hamburger + sessions dropdown — rightmost */}\n <div className={styles.SessionMenuAnchor} ref={sessionMenuRef}>\n <button className={styles.HamburgerBtn} onClick={handleToggleSessionMenu} title=\"Session history\" aria-label=\"Open session history\">\n <SolidIcon name=\"si-bars\" style={{ fontSize: \"13px\" }} aria-hidden />\n </button>\n\n {showSessionMenu && (\n <div className={styles.SessionMenu}>\n <button className={styles.SessionMenuNewChat} onClick={handleNewChat}>\n <SolidIcon name=\"si-plus\" style={{ fontSize: \"12px\" }} aria-hidden />\n New Chat\n </button>\n <div className={styles.SessionMenuSectionLabel}>Recent Sessions</div>\n <div className={styles.SessionList}>\n {isLoadingSessions ? (\n <div className={styles.SessionMenuLoading}>\n <SolidIcon name=\"si-spinner\" spin style={{ fontSize: \"11px\" }} aria-hidden />\n Loading…\n </div>\n ) : sessions.length === 0 ? (\n <div className={styles.SessionMenuEmpty}>No past sessions found</div>\n ) : (\n sessions.map((s) => (\n <div\n key={s.session_id}\n className={`${styles.SessionItem} ${s.session_id === activeHistoryId ? styles.SessionItemActive : \"\"}`}\n onClick={() => handleSelectSession(s.session_id)}\n >\n <div className={styles.SessionItemMain}>\n <span className={styles.SessionItemPreview}>{s.preview || \"New conversation\"}</span>\n <span className={styles.SessionItemMeta}>\n {formatSessionDate(s.created_at)}\n {s.totalSteps > 0 && ` · ${s.totalSteps} turn${s.totalSteps !== 1 ? \"s\" : \"\"}`}\n </span>\n </div>\n <button\n className={styles.SessionDeleteBtn}\n onClick={(e) => handleDeleteSession(e, s.session_id)}\n disabled={isDeletingSessionId === s.session_id}\n title=\"Delete conversation\"\n >\n <SolidIcon\n name={isDeletingSessionId === s.session_id ? \"si-spinner\" : \"si-trash\"}\n spin={isDeletingSessionId === s.session_id}\n style={{ fontSize: \"11px\" }}\n aria-hidden\n />\n </button>\n </div>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n </header>\n\n {/* ── Reconnecting banner ── */}\n {!isConnected && (\n <div className={styles.ReconnectBanner}>\n <SolidIcon name=\"si-spinner\" spin style={{ fontSize: \"11px\" }} aria-hidden />\n Reconnecting…\n </div>\n )}\n\n {/* ── Message list ── */}\n <div className={styles.MessageList} ref={scrollRef}>\n {hasMoreHistory && (\n <div className={styles.LoadOlderWrap}>\n <button className={styles.LoadOlderBtn} onClick={handleLoadOlder} disabled={isLoadingHistory}>\n {isLoadingHistory\n ? (\n <>\n <SolidIcon name=\"si-spinner\" spin style={{ fontSize: \"11px\" }} aria-hidden />\n {\" \"}Loading…\n </>\n )\n : (\n <>\n <SolidIcon name=\"si-history\" style={{ fontSize: \"11px\" }} aria-hidden />\n {\" \"}Load older messages\n </>\n )\n }\n </button>\n </div>\n )}\n\n {isLoadingHistory && messages.length === 0 && (\n <div className={styles.HistoryLoading}>\n <SolidIcon name=\"si-spinner\" spin style={{ fontSize: \"16px\" }} aria-hidden />\n <span>Loading conversation…</span>\n </div>\n )}\n\n {messages.length === 0 && !isLoadingHistory && (\n <div className={styles.EmptyState}>\n <div className={styles.EmptyIcon}>\n <SolidIcon name=\"si-comments\" style={{ fontSize: \"28px\" }} aria-hidden />\n </div>\n <p className={styles.EmptyTitle}>How can I help you today?</p>\n <p className={styles.EmptySubtitle}>Ask me anything about your SolidX project.</p>\n </div>\n )}\n\n {groupMessages(messages).map((group) => {\n // ── User message ────────────────────────────────────────\n if (group.kind === \"user\") {\n const msg = group.msg;\n return (\n <div key={msg.id} className={`${styles.Row} ${styles.RowUser}`}>\n {/* Avatar first in DOM → rightmost with row-reverse */}\n <div className={`${styles.Avatar} ${styles.AvatarUser}`}>\n <SolidIcon name=\"si-user\" style={{ fontSize: \"12px\" }} aria-hidden />\n </div>\n <div className={styles.BubbleGroup}>\n <div className={`${styles.Bubble} ${styles.BubbleUser}`}>\n <p className={styles.UserText}>{msg.content}</p>\n </div>\n <div className={`${styles.BubbleMeta} ${styles.BubbleMetaUser}`}>\n <span className={styles.Timestamp}>\n {msg.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}\n </span>\n <CopyButton text={msg.content} />\n </div>\n </div>\n </div>\n );\n }\n\n // ── AI turn: avatar once, events + response stacked ─────\n return (\n <div key={group.groupKey} className={styles.AiTurnGroup}>\n <div className={styles.Avatar}>\n <SolidIcon name=\"si-android\" style={{ fontSize: \"12px\" }} aria-hidden />\n </div>\n <div className={styles.AiTurnContent}>\n {group.msgs.flatMap((msg) => {\n const items: React.ReactNode[] = [];\n\n if (msg.role === \"event\") {\n const active = msg.eventState === \"active\";\n\n // ── Tool call card ──────────────────────────────\n if (msg.toolName) {\n const status = msg.toolStatus || (active ? \"running\" : \"success\");\n const cardClass = status === \"running\" ? styles.ToolCardRunning :\n status === \"warning\" ? styles.ToolCardWarning :\n status === \"error\" ? styles.ToolCardError :\n styles.ToolCardDone;\n\n const statusIcon: SolidIconMeta = status === \"running\"\n ? { name: \"si-spinner\", spin: true }\n : status === \"warning\"\n ? { name: \"si-exclamation-triangle\" }\n : status === \"error\"\n ? { name: \"si-times-circle\" }\n : { name: \"si-check-circle\" };\n\n const statusIconClass = status === \"warning\" ? styles.ToolCardStatusWarning :\n status === \"error\" ? styles.ToolCardStatusError :\n status === \"success\" ? styles.ToolCardStatusDone :\n styles.ToolCardStatusIcon;\n\n const hasExpandable = !!msg.toolOutput || !!msg.toolArgs;\n const isExpanded = expandedToolIds.has(msg.id);\n const toggleExpand = hasExpandable && status !== \"running\"\n ? () => setExpandedToolIds((prev) => {\n const next = new Set(prev);\n if (next.has(msg.id)) next.delete(msg.id); else next.add(msg.id);\n return next;\n })\n : undefined;\n\n items.push(\n <div key={msg.id} className={`${styles.ToolCard} ${cardClass}`}>\n <button\n className={styles.ToolCardHeaderBtn}\n onClick={toggleExpand}\n data-expandable={hasExpandable && status !== \"running\" ? \"true\" : undefined}\n >\n <SolidIcon\n name={statusIcon.name}\n spin={statusIcon.spin}\n className={statusIconClass}\n aria-hidden\n />\n <SolidIcon\n name={getToolIconName(msg.toolName ?? \"\")}\n className={styles.ToolCardToolIcon}\n aria-hidden\n />\n <span className={styles.ToolCardName}>{msg.toolName}</span>\n {msg.toolDesc && <span className={styles.ToolCardDesc} title={msg.toolDesc}>{msg.toolDesc}</span>}\n <span className={styles.ToolCardBadge}>{getToolCategory(msg.toolName)}</span>\n {msg.durationMs != null && (\n <span className={styles.ToolCardDuration}>{formatDuration(msg.durationMs)}</span>\n )}\n {hasExpandable && status !== \"running\" && (\n <SolidIcon\n name=\"si-chevron-right\"\n className={`${styles.ToolCardChevron} ${isExpanded ? styles.ToolCardChevronOpen : \"\"}`}\n aria-hidden\n />\n )}\n </button>\n {/* Progress substeps: always visible */}\n {msg.toolProgress && msg.toolProgress.length > 0 && (\n <div className={styles.ToolCardProgress}>\n {msg.toolProgress.map((p, i) => (\n <div key={i} className={`${styles.ToolProgressItem} ${p.status === \"running\" ? styles.ToolProgressRunning : styles.ToolProgressDone}`}>\n <SolidIcon\n name={p.status === \"running\" ? \"si-spinner\" : \"si-check-circle\"}\n spin={p.status === \"running\"}\n style={{ fontSize: \"10px\" }}\n aria-hidden\n />\n <span className={styles.ToolProgressLabel}>{p.label}</span>\n {p.durationMs != null && p.status === \"done\" && (\n <span className={styles.ToolProgressDuration}>{formatDuration(p.durationMs)}</span>\n )}\n </div>\n ))}\n </div>\n )}\n {isExpanded && (msg.toolArgs || msg.toolOutput) && (\n <div className={styles.ToolCardExpandable}>\n {msg.toolArgs && Object.keys(msg.toolArgs).length > 0 && (\n <div className={styles.ToolCardOutput}>\n <div className={styles.ToolOutputHeader}>\n <span>Arguments</span>\n </div>\n <pre className={styles.ToolOutputText}>\n {JSON.stringify(msg.toolArgs, null, 2)}\n </pre>\n </div>\n )}\n {msg.toolOutput && (\n <div className={styles.ToolCardOutput}>\n <div className={styles.ToolOutputHeader}>\n <span>Result</span>\n </div>\n <pre className={`${styles.ToolOutputText} ${status === \"warning\" ? styles.ToolOutputWarning : status === \"error\" ? styles.ToolOutputError : \"\"}`}>\n {msg.toolOutputRaw || msg.toolOutput}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n return items;\n }\n\n // ── Thinking bubble: only show while active ──────\n if (active) {\n items.push(\n <div key={msg.id} className={styles.ThinkingBubble}>\n <div className={styles.ThinkingDots}>\n <span className={styles.ThinkingDot} />\n <span className={styles.ThinkingDot} />\n <span className={styles.ThinkingDot} />\n </div>\n <span className={styles.ThinkingLabel}>Thinking…</span>\n </div>\n );\n }\n return items;\n }\n\n // ── Error bubble ────────────────────────────────────\n if (msg.isError) {\n items.push(\n <div key={msg.id} className={styles.ErrorBubble}>\n <div className={styles.ErrorIcon}>\n <SolidIcon name=\"si-exclamation-circle\" style={{ fontSize: \"13px\" }} aria-hidden />\n </div>\n <div className={styles.ErrorContent}>\n <p className={styles.ErrorTitle}>Error</p>\n <p className={styles.ErrorText}>{msg.content}</p>\n </div>\n </div>\n );\n return items;\n }\n\n // ── Assistant message ───────────────────────────────\n const isStreaming = msg.id.startsWith(\"stream-\") && isProcessing;\n items.push(\n <div key={msg.id} className={styles.BubbleGroup}>\n <div className={`${styles.Bubble} ${styles.BubbleAssistant}`}>\n <div className={styles.MarkdownRoot}>\n <ReactMarkdown remarkPlugins={[remarkGfm]} components={markdownComponents}>\n {msg.content}\n </ReactMarkdown>\n </div>\n {isStreaming && <span className={styles.StreamingCursor} />}\n </div>\n <div className={`${styles.BubbleMeta} ${styles.BubbleMetaAssistant}`}>\n <span className={styles.Timestamp}>\n {msg.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}\n </span>\n <CopyButton text={msg.content} />\n </div>\n </div>\n );\n return items;\n })}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* ── Input area ── */}\n <div className={styles.InputArea}>\n <div className={`${styles.InputBox} ${!isConnected || !sessionId ? styles.InputBoxDisabled : \"\"}`}>\n <textarea\n ref={textareaRef}\n className={styles.Textarea}\n placeholder={inputPlaceholder}\n value={input}\n onChange={autoResize}\n onKeyDown={handleKeyDown}\n disabled={!isConnected || !sessionId || isProcessing}\n rows={1}\n />\n <button\n className={`${styles.SendBtn} ${canSend ? styles.SendBtnActive : \"\"}`}\n disabled={!canSend}\n onClick={handleSend}\n aria-label=\"Send message\"\n >\n <SolidIcon name=\"si-send\" style={{ fontSize: \"12px\" }} aria-hidden />\n </button>\n </div>\n </div>\n\n </div>\n );\n};\n"]}