langgraph-ui-components 0.0.25 → 0.0.28

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 (490) hide show
  1. package/README.md +515 -55
  2. package/dist/_virtual/index.cjs.js +1 -1
  3. package/dist/_virtual/index.cjs2.js +1 -1
  4. package/dist/_virtual/index.cjs3.js +1 -1
  5. package/dist/_virtual/index.es.js +5 -2
  6. package/dist/_virtual/index.es2.js +4 -2
  7. package/dist/_virtual/index.es2.js.map +1 -1
  8. package/dist/_virtual/index.es3.js +4 -4
  9. package/dist/assets/langgraph-ui-components.css +1 -1
  10. package/dist/components/ChatBody.cjs.js +2 -2
  11. package/dist/components/ChatBody.cjs.js.map +1 -1
  12. package/dist/components/ChatBody.d.ts.map +1 -1
  13. package/dist/components/ChatBody.es.js +208 -142
  14. package/dist/components/ChatBody.es.js.map +1 -1
  15. package/dist/components/TodoList.cjs.js +2 -0
  16. package/dist/components/TodoList.cjs.js.map +1 -0
  17. package/dist/components/TodoList.d.ts +5 -0
  18. package/dist/components/TodoList.d.ts.map +1 -0
  19. package/dist/components/TodoList.es.js +65 -0
  20. package/dist/components/TodoList.es.js.map +1 -0
  21. package/dist/components/messages/AgentMessage.cjs.js +3 -1
  22. package/dist/components/messages/AgentMessage.cjs.js.map +1 -1
  23. package/dist/components/messages/AgentMessage.d.ts +5 -1
  24. package/dist/components/messages/AgentMessage.d.ts.map +1 -1
  25. package/dist/components/messages/AgentMessage.es.js +200 -112
  26. package/dist/components/messages/AgentMessage.es.js.map +1 -1
  27. package/dist/components/messages/CustomComponentRender.cjs.js.map +1 -1
  28. package/dist/components/messages/CustomComponentRender.es.js.map +1 -1
  29. package/dist/components/ui/syntax-highlighter.cjs.js +1 -1
  30. package/dist/components/ui/syntax-highlighter.cjs.js.map +1 -1
  31. package/dist/components/ui/syntax-highlighter.es.js +1 -1
  32. package/dist/entries/components.cjs.js +1 -1
  33. package/dist/entries/components.d.ts.map +1 -1
  34. package/dist/entries/components.es.js +4 -5
  35. package/dist/entries/components.es.js.map +1 -1
  36. package/dist/entries/hooks.cjs.js +1 -1
  37. package/dist/entries/hooks.d.ts.map +1 -1
  38. package/dist/entries/hooks.es.js +5 -6
  39. package/dist/entries/hooks.es.js.map +1 -1
  40. package/dist/entries/providers.cjs.js +1 -1
  41. package/dist/entries/providers.d.ts +1 -1
  42. package/dist/entries/providers.d.ts.map +1 -1
  43. package/dist/entries/providers.es.js +18 -19
  44. package/dist/entries/providers.es.js.map +1 -1
  45. package/dist/index.cjs.js +1 -1
  46. package/dist/index.d.ts +2 -2
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.es.js +28 -29
  49. package/dist/index.es.js.map +1 -1
  50. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.cjs.js +1 -1
  51. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.es.js +1 -1
  52. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-languages/create-language-async-loader.cjs.js +1 -1
  53. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-languages/create-language-async-loader.cjs.js.map +1 -1
  54. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-languages/create-language-async-loader.es.js +1 -1
  55. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-syntax-highlighter.cjs.js +1 -1
  56. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-syntax-highlighter.cjs.js.map +1 -1
  57. package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/esm/async-syntax-highlighter.es.js +1 -1
  58. package/dist/pages/Chat/Chat.cjs.js +1 -1
  59. package/dist/pages/Chat/Chat.cjs.js.map +1 -1
  60. package/dist/pages/Chat/Chat.d.ts.map +1 -1
  61. package/dist/pages/Chat/Chat.es.js +41 -34
  62. package/dist/pages/Chat/Chat.es.js.map +1 -1
  63. package/dist/pages/Sidebar/sidebar.cjs.js +1 -1
  64. package/dist/pages/Sidebar/sidebar.cjs.js.map +1 -1
  65. package/dist/pages/Sidebar/sidebar.d.ts.map +1 -1
  66. package/dist/pages/Sidebar/sidebar.es.js +75 -70
  67. package/dist/pages/Sidebar/sidebar.es.js.map +1 -1
  68. package/dist/providers/ChatProvider.cjs.js +1 -1
  69. package/dist/providers/ChatProvider.cjs.js.map +1 -1
  70. package/dist/providers/ChatProvider.d.ts +17 -1
  71. package/dist/providers/ChatProvider.d.ts.map +1 -1
  72. package/dist/providers/ChatProvider.es.js +18 -17
  73. package/dist/providers/ChatProvider.es.js.map +1 -1
  74. package/dist/providers/ChatRuntime.es.js +4 -4
  75. package/dist/providers/CustomComponentProvider.cjs.js +1 -1
  76. package/dist/providers/CustomComponentProvider.cjs.js.map +1 -1
  77. package/dist/providers/CustomComponentProvider.d.ts +11 -0
  78. package/dist/providers/CustomComponentProvider.d.ts.map +1 -1
  79. package/dist/providers/CustomComponentProvider.es.js +51 -35
  80. package/dist/providers/CustomComponentProvider.es.js.map +1 -1
  81. package/dist/providers/Stream.cjs.js +1 -1
  82. package/dist/providers/Stream.cjs.js.map +1 -1
  83. package/dist/providers/Stream.d.ts +40 -8
  84. package/dist/providers/Stream.d.ts.map +1 -1
  85. package/dist/providers/Stream.es.js +151 -119
  86. package/dist/providers/Stream.es.js.map +1 -1
  87. package/dist/providers/Thread.cjs.js +1 -1
  88. package/dist/providers/Thread.cjs.js.map +1 -1
  89. package/dist/providers/Thread.d.ts +2 -1
  90. package/dist/providers/Thread.d.ts.map +1 -1
  91. package/dist/providers/Thread.es.js +19 -19
  92. package/dist/providers/Thread.es.js.map +1 -1
  93. package/dist/styles.css +1 -1
  94. package/package.json +17 -1
  95. package/src/App.tsx +4 -4
  96. package/src/components/ChatBody.tsx +229 -78
  97. package/src/components/TodoList.tsx +72 -0
  98. package/src/components/messages/AgentMessage.tsx +288 -82
  99. package/src/components/messages/CustomComponentRender.tsx +1 -1
  100. package/src/entries/components.ts +0 -2
  101. package/src/entries/hooks.ts +0 -2
  102. package/src/entries/providers.ts +1 -3
  103. package/src/index.css +2 -2
  104. package/src/index.ts +2 -4
  105. package/src/pages/Chat/Chat.tsx +13 -3
  106. package/src/pages/Sidebar/sidebar.tsx +12 -3
  107. package/src/providers/ChatProvider.tsx +18 -1
  108. package/src/providers/CustomComponentProvider.tsx +41 -0
  109. package/src/providers/Stream.tsx +88 -25
  110. package/src/providers/Thread.tsx +2 -2
  111. package/dist/_virtual/index.cjs10.js +0 -2
  112. package/dist/_virtual/index.cjs10.js.map +0 -1
  113. package/dist/_virtual/index.cjs11.js +0 -2
  114. package/dist/_virtual/index.cjs11.js.map +0 -1
  115. package/dist/_virtual/index.cjs12.js +0 -2
  116. package/dist/_virtual/index.cjs12.js.map +0 -1
  117. package/dist/_virtual/index.cjs4.js +0 -2
  118. package/dist/_virtual/index.cjs4.js.map +0 -1
  119. package/dist/_virtual/index.cjs5.js +0 -2
  120. package/dist/_virtual/index.cjs5.js.map +0 -1
  121. package/dist/_virtual/index.cjs6.js +0 -2
  122. package/dist/_virtual/index.cjs6.js.map +0 -1
  123. package/dist/_virtual/index.cjs7.js +0 -2
  124. package/dist/_virtual/index.cjs7.js.map +0 -1
  125. package/dist/_virtual/index.cjs8.js +0 -2
  126. package/dist/_virtual/index.cjs8.js.map +0 -1
  127. package/dist/_virtual/index.cjs9.js +0 -2
  128. package/dist/_virtual/index.cjs9.js.map +0 -1
  129. package/dist/_virtual/index.es10.js +0 -8
  130. package/dist/_virtual/index.es10.js.map +0 -1
  131. package/dist/_virtual/index.es11.js +0 -5
  132. package/dist/_virtual/index.es11.js.map +0 -1
  133. package/dist/_virtual/index.es12.js +0 -8
  134. package/dist/_virtual/index.es12.js.map +0 -1
  135. package/dist/_virtual/index.es4.js +0 -6
  136. package/dist/_virtual/index.es4.js.map +0 -1
  137. package/dist/_virtual/index.es5.js +0 -5
  138. package/dist/_virtual/index.es5.js.map +0 -1
  139. package/dist/_virtual/index.es6.js +0 -5
  140. package/dist/_virtual/index.es6.js.map +0 -1
  141. package/dist/_virtual/index.es7.js +0 -5
  142. package/dist/_virtual/index.es7.js.map +0 -1
  143. package/dist/_virtual/index.es8.js +0 -5
  144. package/dist/_virtual/index.es8.js.map +0 -1
  145. package/dist/_virtual/index.es9.js +0 -5
  146. package/dist/_virtual/index.es9.js.map +0 -1
  147. package/dist/_virtual/lower-bound.cjs.js +0 -2
  148. package/dist/_virtual/lower-bound.cjs.js.map +0 -1
  149. package/dist/_virtual/lower-bound.es.js +0 -5
  150. package/dist/_virtual/lower-bound.es.js.map +0 -1
  151. package/dist/_virtual/priority-queue.cjs.js +0 -2
  152. package/dist/_virtual/priority-queue.cjs.js.map +0 -1
  153. package/dist/_virtual/priority-queue.es.js +0 -5
  154. package/dist/_virtual/priority-queue.es.js.map +0 -1
  155. package/dist/_virtual/re.cjs.js +0 -2
  156. package/dist/_virtual/re.cjs.js.map +0 -1
  157. package/dist/_virtual/re.es.js +0 -5
  158. package/dist/_virtual/re.es.js.map +0 -1
  159. package/dist/components/ToolCallFunctions.cjs.js +0 -2
  160. package/dist/components/ToolCallFunctions.cjs.js.map +0 -1
  161. package/dist/components/ToolCallFunctions.es.js +0 -75
  162. package/dist/components/ToolCallFunctions.es.js.map +0 -1
  163. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.cjs.js +0 -2
  164. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.cjs.js.map +0 -1
  165. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.es.js +0 -12
  166. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/_virtual/_rolldown/runtime.es.js.map +0 -1
  167. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/errors/index.cjs.js +0 -2
  168. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/errors/index.cjs.js.map +0 -1
  169. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/errors/index.es.js +0 -66
  170. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/errors/index.es.js.map +0 -1
  171. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/anthropic.cjs.js +0 -2
  172. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/anthropic.cjs.js.map +0 -1
  173. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/anthropic.es.js +0 -283
  174. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/anthropic.es.js.map +0 -1
  175. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/bedrock_converse.cjs.js +0 -2
  176. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/bedrock_converse.cjs.js.map +0 -1
  177. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/bedrock_converse.es.js +0 -219
  178. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/bedrock_converse.es.js.map +0 -1
  179. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/data.cjs.js +0 -2
  180. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/data.cjs.js.map +0 -1
  181. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/data.es.js +0 -42
  182. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/data.es.js.map +0 -1
  183. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/deepseek.cjs.js +0 -2
  184. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/deepseek.cjs.js.map +0 -1
  185. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/deepseek.es.js +0 -31
  186. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/deepseek.es.js.map +0 -1
  187. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google.cjs.js +0 -2
  188. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google.cjs.js.map +0 -1
  189. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google.es.js +0 -77
  190. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google.es.js.map +0 -1
  191. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_genai.cjs.js +0 -2
  192. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_genai.cjs.js.map +0 -1
  193. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_genai.es.js +0 -78
  194. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_genai.es.js.map +0 -1
  195. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_vertexai.cjs.js +0 -2
  196. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_vertexai.cjs.js.map +0 -1
  197. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_vertexai.es.js +0 -75
  198. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/google_vertexai.es.js.map +0 -1
  199. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/groq.cjs.js +0 -2
  200. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/groq.cjs.js.map +0 -1
  201. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/groq.es.js +0 -51
  202. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/groq.es.js.map +0 -1
  203. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/index.cjs.js +0 -2
  204. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/index.cjs.js.map +0 -1
  205. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/index.es.js +0 -23
  206. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/index.es.js.map +0 -1
  207. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/ollama.cjs.js +0 -2
  208. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/ollama.cjs.js.map +0 -1
  209. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/ollama.es.js +0 -31
  210. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/ollama.es.js.map +0 -1
  211. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/openai.cjs.js +0 -2
  212. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/openai.cjs.js.map +0 -1
  213. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/openai.es.js +0 -241
  214. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/openai.es.js.map +0 -1
  215. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/utils.cjs.js +0 -2
  216. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/utils.cjs.js.map +0 -1
  217. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/utils.es.js +0 -37
  218. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/utils.es.js.map +0 -1
  219. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/xai.cjs.js +0 -2
  220. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/xai.cjs.js.map +0 -1
  221. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/xai.es.js +0 -42
  222. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/xai.es.js.map +0 -1
  223. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/content/data.cjs.js +0 -2
  224. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/content/data.cjs.js.map +0 -1
  225. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/content/data.es.js +0 -16
  226. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/content/data.es.js.map +0 -1
  227. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/tracers/console.cjs.js +0 -2
  228. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/tracers/console.cjs.js.map +0 -1
  229. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/tracers/console.es.js +0 -9
  230. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/tracers/console.es.js.map +0 -1
  231. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/index.cjs.js +0 -2
  232. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/index.cjs.js.map +0 -1
  233. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/index.es.js +0 -3
  234. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/index.es.js.map +0 -1
  235. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.cjs.js +0 -2
  236. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.cjs.js.map +0 -1
  237. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.es.js +0 -230
  238. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.es.js.map +0 -1
  239. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/helpers.cjs.js +0 -3
  240. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/helpers.cjs.js.map +0 -1
  241. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/helpers.es.js +0 -87
  242. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/fast-json-patch/src/helpers.es.js.map +0 -1
  243. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/json.cjs.js +0 -3
  244. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/json.cjs.js.map +0 -1
  245. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/json.es.js +0 -133
  246. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/json.es.js.map +0 -1
  247. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/namespace.cjs.js +0 -2
  248. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/namespace.cjs.js.map +0 -1
  249. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/namespace.es.js +0 -29
  250. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/namespace.es.js.map +0 -1
  251. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/sax-js/sax.cjs.js +0 -10
  252. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/sax-js/sax.cjs.js.map +0 -1
  253. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/sax-js/sax.es.js +0 -795
  254. package/dist/node_modules/.pnpm/@langchain_core@1.1.33_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/utils/sax-js/sax.es.js.map +0 -1
  255. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.cjs.js +0 -2
  256. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.cjs.js.map +0 -1
  257. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.es.js +0 -111
  258. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.es.js.map +0 -1
  259. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.cjs.js +0 -2
  260. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.cjs.js.map +0 -1
  261. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.es.js +0 -30
  262. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.es.js.map +0 -1
  263. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.cjs.js +0 -2
  264. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.cjs.js.map +0 -1
  265. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.es.js +0 -112
  266. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.es.js.map +0 -1
  267. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.cjs.js +0 -2
  268. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.cjs.js.map +0 -1
  269. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.es.js +0 -3
  270. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.es.js.map +0 -1
  271. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fast-safe-stringify/index.cjs.js +0 -2
  272. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fast-safe-stringify/index.cjs.js.map +0 -1
  273. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fast-safe-stringify/index.es.js +0 -6
  274. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fast-safe-stringify/index.es.js.map +0 -1
  275. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fs.browser.cjs.js +0 -2
  276. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fs.browser.cjs.js.map +0 -1
  277. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fs.browser.es.js +0 -14
  278. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/fs.browser.es.js.map +0 -1
  279. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.cjs.js +0 -2
  280. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.cjs.js.map +0 -1
  281. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.es.js +0 -3
  282. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.es.js.map +0 -1
  283. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompt_cache/index.cjs.js +0 -2
  284. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompt_cache/index.cjs.js.map +0 -1
  285. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompt_cache/index.es.js +0 -200
  286. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/prompt_cache/index.es.js.map +0 -1
  287. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/xxhash/xxhash.cjs.js +0 -2
  288. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/xxhash/xxhash.cjs.js.map +0 -1
  289. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/xxhash/xxhash.es.js +0 -22
  290. package/dist/node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/xxhash/xxhash.es.js.map +0 -1
  291. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.cjs.js +0 -2
  292. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.cjs.js.map +0 -1
  293. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.es.js +0 -18
  294. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.es.js.map +0 -1
  295. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.cjs.js +0 -2
  296. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.cjs.js.map +0 -1
  297. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.es.js +0 -198
  298. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.es.js.map +0 -1
  299. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.cjs.js +0 -2
  300. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.cjs.js.map +0 -1
  301. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.es.js +0 -20
  302. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.es.js.map +0 -1
  303. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.cjs.js +0 -2
  304. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.cjs.js.map +0 -1
  305. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.es.js +0 -41
  306. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.es.js.map +0 -1
  307. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.cjs.js +0 -2
  308. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.cjs.js.map +0 -1
  309. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.es.js +0 -45
  310. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.es.js.map +0 -1
  311. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.cjs.js +0 -2
  312. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.cjs.js.map +0 -1
  313. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.es.js +0 -57
  314. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.es.js.map +0 -1
  315. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.cjs.js +0 -2
  316. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.cjs.js.map +0 -1
  317. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.es.js +0 -149
  318. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.es.js.map +0 -1
  319. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.cjs.js +0 -2
  320. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.cjs.js.map +0 -1
  321. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.es.js +0 -170
  322. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.es.js.map +0 -1
  323. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.cjs.js +0 -2
  324. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.cjs.js.map +0 -1
  325. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.es.js +0 -15
  326. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.es.js.map +0 -1
  327. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.cjs.js +0 -2
  328. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.cjs.js.map +0 -1
  329. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.es.js +0 -40
  330. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.es.js.map +0 -1
  331. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.cjs.js +0 -2
  332. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.cjs.js.map +0 -1
  333. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.es.js +0 -34
  334. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.es.js.map +0 -1
  335. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.cjs.js +0 -2
  336. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.cjs.js.map +0 -1
  337. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.es.js +0 -15
  338. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.es.js.map +0 -1
  339. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.cjs.js +0 -2
  340. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.cjs.js.map +0 -1
  341. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.es.js +0 -12
  342. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.es.js.map +0 -1
  343. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.cjs.js +0 -2
  344. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.cjs.js.map +0 -1
  345. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.es.js +0 -12
  346. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.es.js.map +0 -1
  347. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.cjs.js +0 -2
  348. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.cjs.js.map +0 -1
  349. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.es.js +0 -25
  350. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.es.js.map +0 -1
  351. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.cjs.js +0 -2
  352. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.cjs.js.map +0 -1
  353. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.es.js +0 -12
  354. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.es.js.map +0 -1
  355. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.cjs.js +0 -2
  356. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.cjs.js.map +0 -1
  357. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.es.js +0 -12
  358. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.es.js.map +0 -1
  359. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.cjs.js +0 -2
  360. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.cjs.js.map +0 -1
  361. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.es.js +0 -12
  362. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.es.js.map +0 -1
  363. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.cjs.js +0 -2
  364. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.cjs.js.map +0 -1
  365. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.es.js +0 -22
  366. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.es.js.map +0 -1
  367. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.cjs.js +0 -2
  368. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.cjs.js.map +0 -1
  369. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.es.js +0 -12
  370. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.es.js.map +0 -1
  371. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.cjs.js +0 -2
  372. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.cjs.js.map +0 -1
  373. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.es.js +0 -12
  374. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.es.js.map +0 -1
  375. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.cjs.js +0 -2
  376. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.cjs.js.map +0 -1
  377. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.es.js +0 -12
  378. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.es.js.map +0 -1
  379. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.cjs.js +0 -2
  380. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.cjs.js.map +0 -1
  381. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.es.js +0 -12
  382. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.es.js.map +0 -1
  383. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.cjs.js +0 -2
  384. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.cjs.js.map +0 -1
  385. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.es.js +0 -12
  386. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.es.js.map +0 -1
  387. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.cjs.js +0 -2
  388. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.cjs.js.map +0 -1
  389. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.es.js +0 -22
  390. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.es.js.map +0 -1
  391. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.cjs.js +0 -2
  392. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.cjs.js.map +0 -1
  393. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.es.js +0 -12
  394. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.es.js.map +0 -1
  395. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.cjs.js +0 -2
  396. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.cjs.js.map +0 -1
  397. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.es.js +0 -15
  398. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.es.js.map +0 -1
  399. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.cjs.js +0 -2
  400. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.cjs.js.map +0 -1
  401. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.es.js +0 -12
  402. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.es.js.map +0 -1
  403. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.cjs.js +0 -2
  404. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.cjs.js.map +0 -1
  405. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.es.js +0 -12
  406. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.es.js.map +0 -1
  407. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.cjs.js +0 -2
  408. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.cjs.js.map +0 -1
  409. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.es.js +0 -19
  410. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.es.js.map +0 -1
  411. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.cjs.js +0 -2
  412. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.cjs.js.map +0 -1
  413. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.es.js +0 -12
  414. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.es.js.map +0 -1
  415. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.cjs.js +0 -2
  416. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.cjs.js.map +0 -1
  417. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.es.js +0 -15
  418. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.es.js.map +0 -1
  419. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.cjs.js +0 -2
  420. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.cjs.js.map +0 -1
  421. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.es.js +0 -98
  422. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.es.js.map +0 -1
  423. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.cjs.js +0 -2
  424. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.cjs.js.map +0 -1
  425. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.es.js +0 -29
  426. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.es.js.map +0 -1
  427. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.cjs.js +0 -2
  428. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.cjs.js.map +0 -1
  429. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.es.js +0 -9
  430. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.es.js.map +0 -1
  431. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.cjs.js +0 -2
  432. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.cjs.js.map +0 -1
  433. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.es.js +0 -19
  434. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.es.js.map +0 -1
  435. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.cjs.js +0 -2
  436. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.cjs.js.map +0 -1
  437. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.es.js +0 -33
  438. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.es.js.map +0 -1
  439. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.cjs.js +0 -2
  440. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.cjs.js.map +0 -1
  441. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.es.js +0 -11
  442. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.es.js.map +0 -1
  443. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.cjs.js +0 -2
  444. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.cjs.js.map +0 -1
  445. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.es.js +0 -33
  446. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.es.js.map +0 -1
  447. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.cjs.js +0 -2
  448. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.cjs.js.map +0 -1
  449. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.es.js +0 -12
  450. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.es.js.map +0 -1
  451. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.cjs.js +0 -2
  452. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.cjs.js.map +0 -1
  453. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.es.js +0 -12
  454. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.es.js.map +0 -1
  455. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.cjs.js +0 -2
  456. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.cjs.js.map +0 -1
  457. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.es.js +0 -12
  458. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.es.js.map +0 -1
  459. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.cjs.js +0 -2
  460. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.cjs.js.map +0 -1
  461. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.es.js +0 -23
  462. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.es.js.map +0 -1
  463. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.cjs.js +0 -2
  464. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.cjs.js.map +0 -1
  465. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.es.js +0 -23
  466. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.es.js.map +0 -1
  467. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.cjs.js +0 -2
  468. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.cjs.js.map +0 -1
  469. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.es.js +0 -43
  470. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.es.js.map +0 -1
  471. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.cjs.js +0 -2
  472. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.cjs.js.map +0 -1
  473. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.es.js +0 -45
  474. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.es.js.map +0 -1
  475. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.cjs.js +0 -2
  476. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.cjs.js.map +0 -1
  477. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.es.js +0 -25
  478. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.es.js.map +0 -1
  479. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.cjs.js +0 -2
  480. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.cjs.js.map +0 -1
  481. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.es.js +0 -95
  482. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.es.js.map +0 -1
  483. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.cjs.js +0 -2
  484. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.cjs.js.map +0 -1
  485. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.es.js +0 -12
  486. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.es.js.map +0 -1
  487. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.cjs.js +0 -2
  488. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.cjs.js.map +0 -1
  489. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.es.js +0 -18
  490. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.es.js.map +0 -1
@@ -1,12 +1,22 @@
1
1
  import { cn } from "@/utils/tailwindUtil";
2
+ import type { TodoItem } from "@/providers/Stream";
2
3
  import { getContentString } from "@/utils/utils";
3
4
  import type { Message } from "@langchain/langgraph-sdk";
4
- import { BotMessageSquare, ChevronRight, LoaderCircle, Sparkles } from "lucide-react";
5
+ import { BotMessageSquare, ChevronRight, LoaderCircle, Sparkles, Wrench } from "lucide-react";
5
6
  import React, { useEffect, useState } from "react";
7
+ import TodoList from "../TodoList";
6
8
  import { AgentMarkdown } from "../ui/AgentMarkdown";
7
9
  import { BranchSwitcher } from "./BranchSwitcher";
8
10
  import { MessageActions, type MessageFeedback } from "./MessageActions";
9
11
 
12
+ type ToolStatusEntry = {
13
+ id?: string;
14
+ name?: string;
15
+ label?: string;
16
+ event?: string;
17
+ visible?: boolean;
18
+ };
19
+
10
20
  function getReasoningFromKwargs(message: Message | undefined): string | null {
11
21
  if (!message) return null;
12
22
  const ak = (message as Record<string, unknown>).additional_kwargs as
@@ -22,12 +32,14 @@ function getReasoningFromKwargs(message: Message | undefined): string | null {
22
32
  return null;
23
33
  }
24
34
 
25
- function InlineThinking({
26
- text,
35
+ function AgentActivity({
36
+ reasoningText,
37
+ toolStatuses,
27
38
  isStreaming,
28
39
  fontSize,
29
40
  }: {
30
- text: string;
41
+ reasoningText?: string;
42
+ toolStatuses?: Array<{ key: string; label: string; isCompleted: boolean }>;
31
43
  isStreaming?: boolean;
32
44
  fontSize?: string;
33
45
  }) {
@@ -37,6 +49,11 @@ function InlineThinking({
37
49
  setExpanded(!!isStreaming);
38
50
  }, [isStreaming]);
39
51
 
52
+ const hasTools = toolStatuses && toolStatuses.length > 0;
53
+ const hasReasoning = !!reasoningText && reasoningText.length > 0;
54
+
55
+ if (!hasTools && !hasReasoning && !isStreaming) return null;
56
+
40
57
  return (
41
58
  <div className="my-1">
42
59
  <button
@@ -58,105 +75,284 @@ function InlineThinking({
58
75
  />
59
76
  </button>
60
77
  {expanded && (
61
- <div className="mt-1.5 border-l-2 border-white/10 pl-4 text-sm text-zinc-300">
62
- <AgentMarkdown fontSize={fontSize}>{text}</AgentMarkdown>
78
+ <div className="mt-1.5 border-l-2 border-white/10 pl-4 space-y-1">
79
+ {hasTools && toolStatuses!.map((ts) => (
80
+ <div key={ts.key} className="flex items-center gap-2 text-sm text-zinc-300 py-0.5">
81
+ {!ts.isCompleted && (
82
+ <LoaderCircle className="size-3.5 animate-spin text-zinc-400" />
83
+ )}
84
+ <Wrench className="size-3.5 text-zinc-500" />
85
+ <span>{ts.label}</span>
86
+ </div>
87
+ ))}
88
+ {hasReasoning && (
89
+ <div className="text-sm text-zinc-300">
90
+ <AgentMarkdown fontSize={fontSize}>{reasoningText!}</AgentMarkdown>
91
+ </div>
92
+ )}
63
93
  </div>
64
94
  )}
65
95
  </div>
66
96
  );
67
97
  }
68
98
 
99
+ function toToolStatusEntry(value: unknown): ToolStatusEntry | null {
100
+ if (!value || typeof value !== "object") return null;
101
+ const v = value as Record<string, unknown>;
102
+
103
+ const visible =
104
+ typeof v.visible === "boolean"
105
+ ? v.visible
106
+ : typeof v.show === "boolean"
107
+ ? v.show
108
+ : typeof v.display === "boolean"
109
+ ? v.display
110
+ : typeof v.hidden === "boolean"
111
+ ? !v.hidden
112
+ : true;
113
+
114
+ return {
115
+ id: typeof v.id === "string" ? v.id : undefined,
116
+ name: typeof v.name === "string" ? v.name : undefined,
117
+ label: typeof v.label === "string" ? v.label : undefined,
118
+ event: typeof v.event === "string" ? v.event : undefined,
119
+ visible,
120
+ };
121
+ }
122
+
123
+ function getToolStatusFromKwargs(message: Message | undefined): ToolStatusEntry[] {
124
+ if (!message) return [];
125
+ const ak = (message as Record<string, unknown>).additional_kwargs as
126
+ | Record<string, unknown>
127
+ | undefined;
128
+
129
+ if (!ak || !Array.isArray(ak.tool_status)) return [];
130
+
131
+ return (ak.tool_status as unknown[])
132
+ .map(toToolStatusEntry)
133
+ .filter((s): s is ToolStatusEntry => s !== null);
134
+ }
135
+
136
+ function hasToolStatusFieldInKwargs(message: Message | undefined): boolean {
137
+ if (!message) return false;
138
+ const ak = (message as Record<string, unknown>).additional_kwargs as
139
+ | Record<string, unknown>
140
+ | undefined;
141
+ if (!ak) return false;
142
+ return Object.prototype.hasOwnProperty.call(ak, "tool_status");
143
+ }
144
+
145
+ function normalizeSemanticKey(value: string | undefined): string {
146
+ if (!value) return "";
147
+ return value
148
+ .toLowerCase()
149
+ .replace(/\s+/g, " ")
150
+ .replace(/\s*event:\s*metadata\s*$/i, "")
151
+ .trim();
152
+ }
153
+
154
+ function shouldRenderToolStatus(status: ToolStatusEntry): boolean {
155
+ if (status.visible === false) return false;
156
+
157
+ const labelKey = normalizeSemanticKey(status.label);
158
+ if (labelKey.length === 0) return false;
159
+
160
+ // Filter transport/debug noise like "event: metadata".
161
+ if (status.event?.toLowerCase() === "metadata") return false;
162
+ if (/\bevent:\s*metadata\b/i.test(status.label ?? "")) return false;
163
+
164
+ return true;
165
+ }
166
+
167
+ function normalizeToolLabel(name: string, input: unknown): string {
168
+ if (!input) return name;
169
+ if (typeof input === "string") {
170
+ const trimmed = input.trim();
171
+ if (trimmed.length === 0) return name;
172
+ return `${name} ${trimmed.slice(0, 80)}${trimmed.length > 80 ? "..." : ""}`;
173
+ }
174
+ if (typeof input === "object") {
175
+ try {
176
+ const json = JSON.stringify(input);
177
+ return `${name} ${json.length > 80 ? `${json.slice(0, 80)}...` : json}`;
178
+ } catch {
179
+ return name;
180
+ }
181
+ }
182
+ return name;
183
+ }
184
+
69
185
  function renderContentInline(
70
- message: Message | undefined,
186
+ groupedMessages: Message[] | undefined,
187
+ showToolActivity: boolean,
71
188
  isActivelyStreaming?: boolean,
72
189
  fontSize?: string,
73
190
  ) {
74
- if (!message) return null;
75
- const content = message.content;
76
- const parts: React.ReactNode[] = [];
191
+ if (!groupedMessages || groupedMessages.length === 0) return null;
77
192
 
78
- const kwargsReasoning = getReasoningFromKwargs(message);
79
- if (kwargsReasoning) {
80
- const hasTextContent =
81
- typeof content === "string"
82
- ? content.length > 0
83
- : Array.isArray(content) &&
84
- (content as Record<string, unknown>[]).some(
85
- (block) =>
86
- block.type === "text" &&
87
- typeof block.text === "string" &&
88
- (block.text as string).length > 0,
89
- );
193
+ const timeline = groupedMessages;
194
+ const toolMessages = timeline.filter((m) => m.type === "tool");
195
+ const hasBackendToolStatus = timeline.some((m) => hasToolStatusFieldInKwargs(m));
90
196
 
91
- parts.push(
92
- <InlineThinking
93
- key="kwargs-reasoning"
94
- text={kwargsReasoning}
95
- isStreaming={isActivelyStreaming && !hasTextContent}
96
- fontSize={fontSize}
97
- />,
98
- );
99
- }
197
+ const completedToolIds = new Set(
198
+ toolMessages
199
+ .map((m) => (m as Record<string, unknown>).tool_call_id)
200
+ .filter((id): id is string => typeof id === "string" && id.length > 0),
201
+ );
202
+ const completedToolNames = new Set(
203
+ toolMessages
204
+ .map((m) => (m as Record<string, unknown>).name)
205
+ .filter((name): name is string => typeof name === "string" && name.length > 0),
206
+ );
207
+
208
+ // ── Collect activity (reasoning + tool statuses) and text content separately ──
209
+ const collectedToolStatuses: Array<{ key: string; label: string; isCompleted: boolean }> = [];
210
+ const reasoningTexts: string[] = [];
211
+ const textParts: React.ReactNode[] = [];
212
+ const renderedToolKeys = new Set<string>();
213
+ let textIdx = 0;
100
214
 
101
- if (typeof content === "string") {
102
- if (content.length > 0) {
103
- parts.push(
104
- <div key="text-content" className="py-1">
105
- <AgentMarkdown fontSize={fontSize}>{content}</AgentMarkdown>
106
- </div>,
107
- );
215
+ const collectToolStatusFromKwargs = (message: Message) => {
216
+ if (!showToolActivity) return;
217
+ for (const status of getToolStatusFromKwargs(message)) {
218
+ if (!shouldRenderToolStatus(status)) continue;
219
+ const semanticKey =
220
+ normalizeSemanticKey(status.label) || normalizeSemanticKey(status.name) || "tool";
221
+ if (renderedToolKeys.has(semanticKey)) continue;
222
+ renderedToolKeys.add(semanticKey);
223
+ const label = status.label ?? status.name ?? "Running tool";
224
+ const isCompleted =
225
+ (status.id ? completedToolIds.has(status.id) : false) ||
226
+ (status.name ? completedToolNames.has(status.name) : false) ||
227
+ !isActivelyStreaming;
228
+ collectedToolStatuses.push({ key: semanticKey, label, isCompleted });
108
229
  }
109
- return parts.length > 0 ? <>{parts}</> : null;
110
- }
230
+ };
111
231
 
112
- if (!Array.isArray(content)) return null;
232
+ for (const message of timeline) {
233
+ if (message.type !== "ai") continue;
113
234
 
114
- const blocks = content as Record<string, unknown>[];
115
- let textAccum = "";
116
- let idx = 0;
235
+ const content = message.content;
236
+ const kwargsReasoning = getReasoningFromKwargs(message);
117
237
 
118
- const flushText = () => {
119
- if (textAccum.length > 0) {
120
- parts.push(
121
- <div key={`text-${idx}`} className="py-1">
122
- <AgentMarkdown fontSize={fontSize}>{textAccum}</AgentMarkdown>
123
- </div>,
124
- );
125
- textAccum = "";
126
- idx++;
238
+ // Collect tool statuses from kwargs
239
+ collectToolStatusFromKwargs(message);
240
+
241
+ if (typeof content === "string") {
242
+ if (kwargsReasoning) {
243
+ // When reasoning_content exists in kwargs, the string content is the
244
+ // same thinking text (set by messages-tuple before wrapModelCall clears
245
+ // it). Capture it only as reasoning to avoid duplication.
246
+ reasoningTexts.push(kwargsReasoning);
247
+ } else if (content.length > 0) {
248
+ textParts.push(
249
+ <div key={`text-content-${message.id ?? textIdx}`} className="py-1">
250
+ <AgentMarkdown fontSize={fontSize}>{content}</AgentMarkdown>
251
+ </div>,
252
+ );
253
+ textIdx++;
254
+ }
255
+ continue;
127
256
  }
128
- };
129
257
 
130
- for (let i = 0; i < blocks.length; i++) {
131
- const block = blocks[i];
132
- if (block.type === "text" && typeof block.text === "string") {
133
- textAccum += block.text;
134
- } else if (
135
- (block.type === "reasoning" && typeof block.reasoning === "string") ||
136
- (block.type === "thinking" && typeof block.thinking === "string")
137
- ) {
258
+ if (!Array.isArray(content)) {
259
+ if (kwargsReasoning) reasoningTexts.push(kwargsReasoning);
260
+ continue;
261
+ }
262
+
263
+ const blocks = content as Record<string, unknown>[];
264
+ let textAccum = "";
265
+ let hasReasoningBlock = false;
266
+
267
+ const flushText = () => {
268
+ if (textAccum.length > 0) {
269
+ textParts.push(
270
+ <div key={`text-${message.id ?? textIdx}-${textIdx}`} className="py-1">
271
+ <AgentMarkdown fontSize={fontSize}>{textAccum}</AgentMarkdown>
272
+ </div>,
273
+ );
274
+ textAccum = "";
275
+ textIdx++;
276
+ }
277
+ };
278
+
279
+ for (let i = 0; i < blocks.length; i++) {
280
+ const block = blocks[i];
281
+ if (block.type === "text" && typeof block.text === "string") {
282
+ textAccum += block.text;
283
+ continue;
284
+ }
285
+
286
+ if (
287
+ (block.type === "reasoning" && typeof block.reasoning === "string") ||
288
+ (block.type === "thinking" && typeof block.thinking === "string")
289
+ ) {
290
+ flushText();
291
+ hasReasoningBlock = true;
292
+ const text = (block.reasoning ?? block.thinking) as string;
293
+ reasoningTexts.push(text);
294
+ continue;
295
+ }
296
+
297
+ if (showToolActivity && !hasBackendToolStatus && block.type === "tool_use") {
298
+ flushText();
299
+ const toolId = typeof block.id === "string" ? block.id : undefined;
300
+ const toolName = typeof block.name === "string" ? block.name : "tool";
301
+ const semanticKey = normalizeSemanticKey(toolName) || `tool-${i}`;
302
+ if (!renderedToolKeys.has(semanticKey)) {
303
+ renderedToolKeys.add(semanticKey);
304
+ const label = normalizeToolLabel(toolName, (block as Record<string, unknown>).input);
305
+ const isCompleted = toolId ? completedToolIds.has(toolId) : !isActivelyStreaming;
306
+ collectedToolStatuses.push({ key: semanticKey, label, isCompleted });
307
+ }
308
+ }
309
+ }
310
+
311
+ if (!hasReasoningBlock && kwargsReasoning) {
312
+ // Same as the string-content case: kwargs reasoning duplicates the
313
+ // text blocks, so discard accumulated text and capture as reasoning only.
314
+ textAccum = "";
315
+ reasoningTexts.push(kwargsReasoning);
316
+ } else {
138
317
  flushText();
139
- const text = (block.reasoning ?? block.thinking) as string;
140
- const hasTextAfter = blocks.slice(i + 1).some(
141
- (b) =>
142
- b.type === "text" &&
143
- typeof b.text === "string" &&
144
- (b.text as string).length > 0,
145
- );
146
- const isThisBlockStreaming = isActivelyStreaming && !hasTextAfter;
147
- parts.push(
148
- <InlineThinking
149
- key={`thinking-${idx}`}
150
- text={text}
151
- isStreaming={isThisBlockStreaming}
152
- fontSize={fontSize}
153
- />,
154
- );
155
- idx++;
156
318
  }
157
319
  }
158
320
 
159
- flushText();
321
+ // Fallback for legacy payloads without backend tool_status (only after streaming completes)
322
+ if (showToolActivity && !isActivelyStreaming && !hasBackendToolStatus && collectedToolStatuses.length === 0 && textParts.length === 0 && toolMessages.length > 0) {
323
+ for (const toolMessage of toolMessages) {
324
+ collectedToolStatuses.push({
325
+ key: `tool-msg-${toolMessage.id ?? textIdx}`,
326
+ label: "Tool call completed",
327
+ isCompleted: true,
328
+ });
329
+ textIdx++;
330
+ }
331
+ }
332
+
333
+ // ── Assemble output: AgentActivity block first, then text content ──
334
+ const parts: React.ReactNode[] = [];
335
+ const hasTextContent = textParts.length > 0;
336
+ const combinedReasoning = reasoningTexts.join("\n\n");
337
+ const hasActivity =
338
+ (showToolActivity && collectedToolStatuses.length > 0) ||
339
+ combinedReasoning.length > 0;
340
+ const activityIsStreaming = !!isActivelyStreaming && !hasTextContent;
341
+
342
+ if (hasActivity || activityIsStreaming) {
343
+ parts.push(
344
+ <AgentActivity
345
+ key="agent-activity"
346
+ reasoningText={combinedReasoning || undefined}
347
+ toolStatuses={showToolActivity ? collectedToolStatuses : undefined}
348
+ isStreaming={activityIsStreaming}
349
+ fontSize={fontSize}
350
+ />,
351
+ );
352
+ }
353
+
354
+ parts.push(...textParts);
355
+
160
356
  return parts.length > 0 ? <>{parts}</> : null;
161
357
  }
162
358
 
@@ -164,6 +360,8 @@ function AgentMessage({
164
360
  agentName,
165
361
  fontSize,
166
362
  message,
363
+ groupedMessages,
364
+ showToolActivity = true,
167
365
  isStreaming = false,
168
366
  onRegenerate,
169
367
  feedback,
@@ -171,10 +369,13 @@ function AgentMessage({
171
369
  branch,
172
370
  branchOptions,
173
371
  onBranchSelect,
372
+ todos,
174
373
  }: {
175
374
  agentName?: string;
176
375
  fontSize?: string;
177
376
  message: Message;
377
+ groupedMessages?: Message[];
378
+ showToolActivity?: boolean;
178
379
  isStreaming?: boolean;
179
380
  onRegenerate?: (parentCheckpoint: any | null | undefined, messageId: string, currentMessage: any) => void;
180
381
  feedback?: MessageFeedback;
@@ -182,9 +383,10 @@ function AgentMessage({
182
383
  branch?: string;
183
384
  branchOptions?: string[];
184
385
  onBranchSelect?: (branch: string) => void;
386
+ todos?: TodoItem[];
185
387
  }) {
186
388
  const content = getContentString(message?.content);
187
- const inlineContent = renderContentInline(message, isStreaming, fontSize);
389
+ const inlineContent = renderContentInline(groupedMessages ?? [message], showToolActivity, isStreaming, fontSize);
188
390
 
189
391
  return (
190
392
  <div className="agent-message flex flex-col gap-1 w-full group">
@@ -198,6 +400,7 @@ function AgentMessage({
198
400
  <span className="text-zinc-500 text-sm">{agentName || "Agent"}</span>
199
401
  </div>
200
402
  <div className="flex flex-1 flex-col gap-1 items-start min-w-0">
403
+ {todos && todos.length > 0 && <TodoList todos={todos} />}
201
404
  <div className="text-content text-foreground" style={fontSize ? { fontSize } : undefined}>
202
405
  {inlineContent ? (
203
406
  inlineContent
@@ -249,12 +452,15 @@ export default React.memo(AgentMessage, (prevProps, nextProps) => {
249
452
  // Otherwise, only re-render if the message ID, feedback, branch, or callbacks changed
250
453
  return (
251
454
  prevProps.message.id === nextProps.message.id &&
455
+ prevProps.groupedMessages?.length === nextProps.groupedMessages?.length &&
456
+ prevProps.showToolActivity === nextProps.showToolActivity &&
252
457
  prevProps.isStreaming === nextProps.isStreaming &&
253
458
  prevProps.feedback === nextProps.feedback &&
254
459
  prevProps.onRegenerate === nextProps.onRegenerate &&
255
460
  prevProps.onFeedback === nextProps.onFeedback &&
256
461
  prevProps.branch === nextProps.branch &&
257
462
  prevProps.branchOptions?.length === nextProps.branchOptions?.length &&
258
- prevProps.onBranchSelect === nextProps.onBranchSelect
463
+ prevProps.onBranchSelect === nextProps.onBranchSelect &&
464
+ prevProps.todos === nextProps.todos
259
465
  );
260
466
  });
@@ -40,7 +40,7 @@ function CustomComponentRender({
40
40
  return (
41
41
  <LoadExternalComponent
42
42
  key={(customComponent as any)._key || `${message.id}-${customComponent.id || index}`}
43
- stream={thread}
43
+ stream={thread as any}
44
44
  message={customComponent}
45
45
  components={components}
46
46
  meta={{ ...componentProps, ui: customComponent }}
@@ -1,5 +1,3 @@
1
- import "../index.css";
2
-
3
1
  // ─── Components ───────────────────────────────────────────────────────────────
4
2
  export { default as Sidebar } from "../pages/Sidebar/sidebar";
5
3
  export { Chat } from "../pages/Chat/Chat";
@@ -1,5 +1,3 @@
1
- import "../index.css";
2
-
3
1
  // ─── Hooks ────────────────────────────────────────────────────────────────────
4
2
  export { useTools } from "../hooks/useTools";
5
3
  export { default as useToolsDefault } from "../hooks/useTools";
@@ -1,5 +1,3 @@
1
- import "../index.css";
2
-
3
1
  // ─── Providers ────────────────────────────────────────────────────────────────
4
2
  export { ChatProvider } from "../providers/ChatProvider";
5
3
  export { ChatRuntimeProvider } from "../providers/ChatRuntime";
@@ -7,7 +5,7 @@ export { ThreadProvider } from "../providers/Thread";
7
5
  export { StreamProvider } from "../providers/Stream";
8
6
  export { FileProvider } from "../providers/FileProvider";
9
7
  export { CustomComponentProvider } from "../providers/CustomComponentProvider";
10
- export type { CustomComponentContextValue } from "../providers/CustomComponentProvider";
8
+ export type { CustomComponentContextValue, InterruptComponentProps } from "../providers/CustomComponentProvider";
11
9
 
12
10
  // ─── Provider hooks ───────────────────────────────────────────────────────────
13
11
  export { useThread } from "../providers/Thread";
package/src/index.css CHANGED
@@ -1,3 +1,3 @@
1
- @import "tailwindcss";
1
+ @import "tailwindcss/theme" layer(theme);
2
+ @import "tailwindcss/utilities" layer(utilities);
2
3
  @plugin "tailwindcss-animate";
3
- @tailwind utilities;
package/src/index.ts CHANGED
@@ -1,5 +1,3 @@
1
- import "./index.css";
2
-
3
1
  // ─── Components ──────────────────────────────────────────────────────────────
4
2
  export { default as Sidebar } from "./pages/Sidebar/sidebar";
5
3
  export { Chat } from "./pages/Chat/Chat";
@@ -11,7 +9,7 @@ export { ThreadProvider } from "./providers/Thread";
11
9
  export { StreamProvider } from "./providers/Stream";
12
10
  export { FileProvider } from "./providers/FileProvider";
13
11
  export { CustomComponentProvider } from "./providers/CustomComponentProvider";
14
- export type { CustomComponentContextValue } from "./providers/CustomComponentProvider";
12
+ export type { CustomComponentContextValue, InterruptComponentProps } from "./providers/CustomComponentProvider";
15
13
 
16
14
  // ─── Hooks ────────────────────────────────────────────────────────────────────
17
15
  export { useTools } from "./hooks/useTools";
@@ -30,7 +28,7 @@ export { useModels } from "./hooks/use-models";
30
28
  export type { ChatIdentity } from "./providers/ChatRuntime";
31
29
  export type { ChatRuntimeContextValue } from "./providers/ChatRuntime";
32
30
  export type { ThreadMode, ThreadConfiguration, ThreadContextType } from "./providers/Thread";
33
- export type { StateType } from "./providers/Stream";
31
+ export type { StateType, TodoItem } from "./providers/Stream";
34
32
  export type { SuggestionsOptions, SuggestionConfig } from "./providers/useChatSuggestions";
35
33
 
36
34
  // ─── Types: Component props ───────────────────────────────────────────────────
@@ -87,12 +87,22 @@ export function Chat(chatProps?: ChatUIProps) {
87
87
  content: contentBlocks,
88
88
  };
89
89
 
90
- // Use the unified submitMessage function
91
- await stream.submitMessage(newHumanMessage, { contextValues: contextValues });
92
-
93
90
  setIsFirstMessage(false);
91
+
92
+ // Clear input optimistically, but restore on failure so the user doesn't lose their draft.
93
+ const savedInput = input;
94
+ const savedFileInput = fileInput;
94
95
  setInput("");
95
96
  setFileInput([]);
97
+
98
+ try {
99
+ // Use the unified submitMessage function
100
+ await stream.submitMessage(newHumanMessage, { contextValues: contextValues });
101
+ } catch (err) {
102
+ setInput(savedInput);
103
+ setFileInput(savedFileInput);
104
+ throw err;
105
+ }
96
106
  };
97
107
 
98
108
  const defaultHandleFileSelect = async (
@@ -159,11 +159,20 @@ export default function Sidebar(props: ChatSidebarProps) {
159
159
  content: contentBlocks,
160
160
  };
161
161
 
162
- // Use the unified submitMessage function
163
- await stream.submitMessage(newHumanMessage, { contextValues: contextValues });
164
-
162
+ // Clear input optimistically, but restore on failure so the user doesn't lose their draft.
163
+ const savedInput = input;
164
+ const savedFileInput = fileInput;
165
165
  setInput("");
166
166
  setFileInput([]);
167
+
168
+ try {
169
+ // Use the unified submitMessage function
170
+ await stream.submitMessage(newHumanMessage, { contextValues: contextValues });
171
+ } catch (err) {
172
+ setInput(savedInput);
173
+ setFileInput(savedFileInput);
174
+ throw err;
175
+ }
167
176
  };
168
177
 
169
178
  const defaultHandleFileSelect = async (
@@ -26,6 +26,11 @@ interface ChatProviderProps {
26
26
  * Defaults to a plain `<div>Loading chat...</div>` if not provided.
27
27
  */
28
28
  suspenseFallback?: React.ReactNode;
29
+ /**
30
+ * Initial thread mode. Use `"multi"` to enable thread history and switching.
31
+ * Defaults to `"single"` (one conversation, no history panel).
32
+ */
33
+ initialMode?: "single" | "multi";
29
34
  }
30
35
 
31
36
  /**
@@ -35,10 +40,21 @@ interface ChatProviderProps {
35
40
  *
36
41
  * @example
37
42
  * ```tsx
43
+ * // Single-thread mode (default)
44
+ * <ChatProvider
45
+ * apiUrl="https://api.example.com"
46
+ * assistantId="my-assistant"
47
+ * identity={{ user_id: "user123", org_id: "org456" }}
48
+ * >
49
+ * <YourChatUI />
50
+ * </ChatProvider>
51
+ *
52
+ * // Multi-thread mode (enables thread history)
38
53
  * <ChatProvider
39
54
  * apiUrl="https://api.example.com"
40
55
  * assistantId="my-assistant"
41
56
  * identity={{ user_id: "user123", org_id: "org456" }}
57
+ * initialMode="multi"
42
58
  * >
43
59
  * <YourChatUI />
44
60
  * </ChatProvider>
@@ -51,6 +67,7 @@ export function ChatProvider({
51
67
  children,
52
68
  customComponents,
53
69
  suspenseFallback = <div>Loading chat...</div>,
70
+ initialMode = "single",
54
71
  }: ChatProviderProps) {
55
72
  return (
56
73
  <React.Suspense fallback={suspenseFallback}>
@@ -59,7 +76,7 @@ export function ChatProvider({
59
76
  assistantId={assistantId}
60
77
  identity={identity}
61
78
  >
62
- <ThreadProvider>
79
+ <ThreadProvider initialMode={initialMode}>
63
80
  <StreamProvider>
64
81
  <SuggestionProvider>
65
82
  <CustomComponentProvider initialComponents={customComponents}>