langgraph-ui-components 0.0.27 → 0.0.29

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 (444) hide show
  1. package/README.md +103 -4
  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/components/ChatBody.cjs.js +2 -2
  10. package/dist/components/ChatBody.cjs.js.map +1 -1
  11. package/dist/components/ChatBody.d.ts.map +1 -1
  12. package/dist/components/ChatBody.es.js +191 -164
  13. package/dist/components/ChatBody.es.js.map +1 -1
  14. package/dist/components/TodoList.cjs.js +2 -0
  15. package/dist/components/TodoList.cjs.js.map +1 -0
  16. package/dist/components/TodoList.d.ts +5 -0
  17. package/dist/components/TodoList.d.ts.map +1 -0
  18. package/dist/components/TodoList.es.js +65 -0
  19. package/dist/components/TodoList.es.js.map +1 -0
  20. package/dist/components/messages/AgentMessage.cjs.js +2 -2
  21. package/dist/components/messages/AgentMessage.cjs.js.map +1 -1
  22. package/dist/components/messages/AgentMessage.d.ts +3 -1
  23. package/dist/components/messages/AgentMessage.d.ts.map +1 -1
  24. package/dist/components/messages/AgentMessage.es.js +107 -104
  25. package/dist/components/messages/AgentMessage.es.js.map +1 -1
  26. package/dist/components/messages/CustomComponentRender.cjs.js.map +1 -1
  27. package/dist/components/messages/CustomComponentRender.es.js.map +1 -1
  28. package/dist/components/ui/syntax-highlighter.cjs.js +1 -1
  29. package/dist/components/ui/syntax-highlighter.cjs.js.map +1 -1
  30. package/dist/components/ui/syntax-highlighter.es.js +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. package/dist/pages/Chat/Chat.cjs.js +1 -1
  42. package/dist/pages/Chat/Chat.cjs.js.map +1 -1
  43. package/dist/pages/Chat/Chat.d.ts.map +1 -1
  44. package/dist/pages/Chat/Chat.es.js +41 -34
  45. package/dist/pages/Chat/Chat.es.js.map +1 -1
  46. package/dist/pages/Sidebar/sidebar.cjs.js +1 -1
  47. package/dist/pages/Sidebar/sidebar.cjs.js.map +1 -1
  48. package/dist/pages/Sidebar/sidebar.d.ts.map +1 -1
  49. package/dist/pages/Sidebar/sidebar.es.js +75 -70
  50. package/dist/pages/Sidebar/sidebar.es.js.map +1 -1
  51. package/dist/providers/Stream.cjs.js +1 -1
  52. package/dist/providers/Stream.cjs.js.map +1 -1
  53. package/dist/providers/Stream.d.ts +40 -8
  54. package/dist/providers/Stream.d.ts.map +1 -1
  55. package/dist/providers/Stream.es.js +136 -123
  56. package/dist/providers/Stream.es.js.map +1 -1
  57. package/package.json +25 -1
  58. package/src/components/ChatBody.tsx +158 -67
  59. package/src/components/TodoList.tsx +72 -0
  60. package/src/components/messages/AgentMessage.tsx +7 -1
  61. package/src/components/messages/CustomComponentRender.tsx +1 -1
  62. package/src/index.ts +1 -1
  63. package/src/pages/Chat/Chat.tsx +13 -3
  64. package/src/pages/Sidebar/sidebar.tsx +12 -3
  65. package/src/providers/Stream.tsx +76 -32
  66. package/dist/_virtual/index.cjs10.js +0 -2
  67. package/dist/_virtual/index.cjs10.js.map +0 -1
  68. package/dist/_virtual/index.cjs11.js +0 -2
  69. package/dist/_virtual/index.cjs11.js.map +0 -1
  70. package/dist/_virtual/index.cjs12.js +0 -2
  71. package/dist/_virtual/index.cjs12.js.map +0 -1
  72. package/dist/_virtual/index.cjs4.js +0 -2
  73. package/dist/_virtual/index.cjs4.js.map +0 -1
  74. package/dist/_virtual/index.cjs5.js +0 -2
  75. package/dist/_virtual/index.cjs5.js.map +0 -1
  76. package/dist/_virtual/index.cjs6.js +0 -2
  77. package/dist/_virtual/index.cjs6.js.map +0 -1
  78. package/dist/_virtual/index.cjs7.js +0 -2
  79. package/dist/_virtual/index.cjs7.js.map +0 -1
  80. package/dist/_virtual/index.cjs8.js +0 -2
  81. package/dist/_virtual/index.cjs8.js.map +0 -1
  82. package/dist/_virtual/index.cjs9.js +0 -2
  83. package/dist/_virtual/index.cjs9.js.map +0 -1
  84. package/dist/_virtual/index.es10.js +0 -8
  85. package/dist/_virtual/index.es10.js.map +0 -1
  86. package/dist/_virtual/index.es11.js +0 -5
  87. package/dist/_virtual/index.es11.js.map +0 -1
  88. package/dist/_virtual/index.es12.js +0 -8
  89. package/dist/_virtual/index.es12.js.map +0 -1
  90. package/dist/_virtual/index.es4.js +0 -6
  91. package/dist/_virtual/index.es4.js.map +0 -1
  92. package/dist/_virtual/index.es5.js +0 -5
  93. package/dist/_virtual/index.es5.js.map +0 -1
  94. package/dist/_virtual/index.es6.js +0 -5
  95. package/dist/_virtual/index.es6.js.map +0 -1
  96. package/dist/_virtual/index.es7.js +0 -5
  97. package/dist/_virtual/index.es7.js.map +0 -1
  98. package/dist/_virtual/index.es8.js +0 -5
  99. package/dist/_virtual/index.es8.js.map +0 -1
  100. package/dist/_virtual/index.es9.js +0 -5
  101. package/dist/_virtual/index.es9.js.map +0 -1
  102. package/dist/_virtual/lower-bound.cjs.js +0 -2
  103. package/dist/_virtual/lower-bound.cjs.js.map +0 -1
  104. package/dist/_virtual/lower-bound.es.js +0 -5
  105. package/dist/_virtual/lower-bound.es.js.map +0 -1
  106. package/dist/_virtual/priority-queue.cjs.js +0 -2
  107. package/dist/_virtual/priority-queue.cjs.js.map +0 -1
  108. package/dist/_virtual/priority-queue.es.js +0 -5
  109. package/dist/_virtual/priority-queue.es.js.map +0 -1
  110. package/dist/_virtual/re.cjs.js +0 -2
  111. package/dist/_virtual/re.cjs.js.map +0 -1
  112. package/dist/_virtual/re.es.js +0 -5
  113. package/dist/_virtual/re.es.js.map +0 -1
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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
  119. 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
  120. 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
  121. 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
  122. 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
  123. 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
  124. 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
  125. 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
  126. 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
  127. 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
  128. 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
  129. 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
  130. 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
  131. 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
  132. 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
  133. 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
  134. 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
  135. 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
  136. 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
  137. 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
  138. 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
  139. 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
  140. 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
  141. 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
  142. 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
  143. 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
  144. 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
  145. 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
  146. 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
  147. 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
  148. 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
  149. 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
  150. 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
  151. 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
  152. 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
  153. 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
  154. 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
  155. 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
  156. 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
  157. 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
  158. 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
  159. 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
  160. 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
  161. 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
  162. 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
  163. 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
  164. 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
  165. 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
  166. 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
  167. 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
  168. 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
  169. 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
  170. 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
  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/xai.cjs.js.map +0 -1
  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/xai.es.js +0 -42
  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/xai.es.js.map +0 -1
  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/content/data.cjs.js +0 -2
  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/content/data.cjs.js.map +0 -1
  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/content/data.es.js +0 -16
  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/content/data.es.js.map +0 -1
  178. 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
  179. 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
  180. 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
  181. 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
  182. 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
  183. 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
  184. 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
  185. 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
  186. 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
  187. 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
  188. 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
  189. 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
  190. 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
  191. 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
  192. 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
  193. 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
  194. 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
  195. 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
  196. 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
  197. 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
  198. 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
  199. 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
  200. 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
  201. 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
  202. 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
  203. 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
  204. 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
  205. 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
  206. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.cjs.js +0 -2
  207. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.cjs.js.map +0 -1
  208. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.es.js +0 -111
  209. package/dist/node_modules/.pnpm/ansi-styles@5.2.0/node_modules/ansi-styles/index.es.js.map +0 -1
  210. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.cjs.js +0 -2
  211. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.cjs.js.map +0 -1
  212. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.es.js +0 -30
  213. package/dist/node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.es.js.map +0 -1
  214. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.cjs.js +0 -2
  215. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.cjs.js.map +0 -1
  216. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.es.js +0 -112
  217. package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.es.js.map +0 -1
  218. 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
  219. 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
  220. 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
  221. 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
  222. 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
  223. 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
  224. 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
  225. 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
  226. 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
  227. 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
  228. 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
  229. 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
  230. 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
  231. 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
  232. 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
  233. 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
  234. 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
  235. 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
  236. 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
  237. 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
  238. 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
  239. 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
  240. 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
  241. 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
  242. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.cjs.js +0 -2
  243. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.cjs.js.map +0 -1
  244. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.es.js +0 -18
  245. package/dist/node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.es.js.map +0 -1
  246. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.cjs.js +0 -2
  247. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.cjs.js.map +0 -1
  248. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.es.js +0 -198
  249. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.es.js.map +0 -1
  250. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.cjs.js +0 -2
  251. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.cjs.js.map +0 -1
  252. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.es.js +0 -20
  253. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.es.js.map +0 -1
  254. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.cjs.js +0 -2
  255. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.cjs.js.map +0 -1
  256. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.es.js +0 -41
  257. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.es.js.map +0 -1
  258. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.cjs.js +0 -2
  259. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.cjs.js.map +0 -1
  260. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.es.js +0 -45
  261. package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.es.js.map +0 -1
  262. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.cjs.js +0 -2
  263. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.cjs.js.map +0 -1
  264. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.es.js +0 -57
  265. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.es.js.map +0 -1
  266. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.cjs.js +0 -2
  267. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.cjs.js.map +0 -1
  268. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.es.js +0 -149
  269. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.es.js.map +0 -1
  270. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.cjs.js +0 -2
  271. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.cjs.js.map +0 -1
  272. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.es.js +0 -170
  273. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.es.js.map +0 -1
  274. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.cjs.js +0 -2
  275. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.cjs.js.map +0 -1
  276. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.es.js +0 -15
  277. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.es.js.map +0 -1
  278. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.cjs.js +0 -2
  279. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.cjs.js.map +0 -1
  280. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.es.js +0 -40
  281. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.es.js.map +0 -1
  282. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.cjs.js +0 -2
  283. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.cjs.js.map +0 -1
  284. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.es.js +0 -34
  285. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.es.js.map +0 -1
  286. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.cjs.js +0 -2
  287. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.cjs.js.map +0 -1
  288. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.es.js +0 -15
  289. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.es.js.map +0 -1
  290. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.cjs.js +0 -2
  291. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.cjs.js.map +0 -1
  292. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.es.js +0 -12
  293. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.es.js.map +0 -1
  294. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.cjs.js +0 -2
  295. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.cjs.js.map +0 -1
  296. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.es.js +0 -12
  297. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.es.js.map +0 -1
  298. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.cjs.js +0 -2
  299. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.cjs.js.map +0 -1
  300. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.es.js +0 -25
  301. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.es.js.map +0 -1
  302. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.cjs.js +0 -2
  303. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.cjs.js.map +0 -1
  304. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.es.js +0 -12
  305. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.es.js.map +0 -1
  306. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.cjs.js +0 -2
  307. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.cjs.js.map +0 -1
  308. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.es.js +0 -12
  309. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.es.js.map +0 -1
  310. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.cjs.js +0 -2
  311. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.cjs.js.map +0 -1
  312. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.es.js +0 -12
  313. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.es.js.map +0 -1
  314. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.cjs.js +0 -2
  315. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.cjs.js.map +0 -1
  316. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.es.js +0 -22
  317. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.es.js.map +0 -1
  318. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.cjs.js +0 -2
  319. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.cjs.js.map +0 -1
  320. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.es.js +0 -12
  321. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.es.js.map +0 -1
  322. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.cjs.js +0 -2
  323. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.cjs.js.map +0 -1
  324. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.es.js +0 -12
  325. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.es.js.map +0 -1
  326. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.cjs.js +0 -2
  327. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.cjs.js.map +0 -1
  328. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.es.js +0 -12
  329. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.es.js.map +0 -1
  330. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.cjs.js +0 -2
  331. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.cjs.js.map +0 -1
  332. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.es.js +0 -12
  333. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.es.js.map +0 -1
  334. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.cjs.js +0 -2
  335. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.cjs.js.map +0 -1
  336. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.es.js +0 -12
  337. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.es.js.map +0 -1
  338. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.cjs.js +0 -2
  339. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.cjs.js.map +0 -1
  340. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.es.js +0 -22
  341. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.es.js.map +0 -1
  342. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.cjs.js +0 -2
  343. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.cjs.js.map +0 -1
  344. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.es.js +0 -12
  345. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.es.js.map +0 -1
  346. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.cjs.js +0 -2
  347. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.cjs.js.map +0 -1
  348. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.es.js +0 -15
  349. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.es.js.map +0 -1
  350. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.cjs.js +0 -2
  351. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.cjs.js.map +0 -1
  352. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.es.js +0 -12
  353. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.es.js.map +0 -1
  354. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.cjs.js +0 -2
  355. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.cjs.js.map +0 -1
  356. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.es.js +0 -12
  357. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.es.js.map +0 -1
  358. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.cjs.js +0 -2
  359. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.cjs.js.map +0 -1
  360. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.es.js +0 -19
  361. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.es.js.map +0 -1
  362. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.cjs.js +0 -2
  363. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.cjs.js.map +0 -1
  364. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.es.js +0 -12
  365. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.es.js.map +0 -1
  366. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.cjs.js +0 -2
  367. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.cjs.js.map +0 -1
  368. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.es.js +0 -15
  369. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.es.js.map +0 -1
  370. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.cjs.js +0 -2
  371. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.cjs.js.map +0 -1
  372. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.es.js +0 -98
  373. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.es.js.map +0 -1
  374. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.cjs.js +0 -2
  375. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.cjs.js.map +0 -1
  376. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.es.js +0 -29
  377. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.es.js.map +0 -1
  378. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.cjs.js +0 -2
  379. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.cjs.js.map +0 -1
  380. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.es.js +0 -9
  381. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.es.js.map +0 -1
  382. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.cjs.js +0 -2
  383. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.cjs.js.map +0 -1
  384. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.es.js +0 -19
  385. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.es.js.map +0 -1
  386. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.cjs.js +0 -2
  387. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.cjs.js.map +0 -1
  388. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.es.js +0 -33
  389. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.es.js.map +0 -1
  390. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.cjs.js +0 -2
  391. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.cjs.js.map +0 -1
  392. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.es.js +0 -11
  393. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.es.js.map +0 -1
  394. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.cjs.js +0 -2
  395. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.cjs.js.map +0 -1
  396. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.es.js +0 -33
  397. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.es.js.map +0 -1
  398. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.cjs.js +0 -2
  399. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.cjs.js.map +0 -1
  400. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.es.js +0 -12
  401. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.es.js.map +0 -1
  402. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.cjs.js +0 -2
  403. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.cjs.js.map +0 -1
  404. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.es.js +0 -12
  405. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.es.js.map +0 -1
  406. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.cjs.js +0 -2
  407. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.cjs.js.map +0 -1
  408. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.es.js +0 -12
  409. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.es.js.map +0 -1
  410. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.cjs.js +0 -2
  411. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.cjs.js.map +0 -1
  412. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.es.js +0 -23
  413. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.es.js.map +0 -1
  414. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.cjs.js +0 -2
  415. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.cjs.js.map +0 -1
  416. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.es.js +0 -23
  417. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.es.js.map +0 -1
  418. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.cjs.js +0 -2
  419. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.cjs.js.map +0 -1
  420. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.es.js +0 -43
  421. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.es.js.map +0 -1
  422. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.cjs.js +0 -2
  423. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.cjs.js.map +0 -1
  424. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.es.js +0 -45
  425. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.es.js.map +0 -1
  426. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.cjs.js +0 -2
  427. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.cjs.js.map +0 -1
  428. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.es.js +0 -25
  429. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.es.js.map +0 -1
  430. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.cjs.js +0 -2
  431. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.cjs.js.map +0 -1
  432. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.es.js +0 -95
  433. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.es.js.map +0 -1
  434. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.cjs.js +0 -2
  435. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.cjs.js.map +0 -1
  436. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.es.js +0 -12
  437. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.es.js.map +0 -1
  438. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.cjs.js +0 -2
  439. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.cjs.js.map +0 -1
  440. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.es.js +0 -18
  441. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.es.js.map +0 -1
  442. package/src/App.css +0 -183
  443. package/src/App.tsx +0 -70
  444. package/src/main.tsx +0 -9
package/README.md CHANGED
@@ -13,6 +13,7 @@ A React component library for building AI chat interfaces with LangChain/LangGra
13
13
  - 📝 **TypeScript** - Full type definitions included
14
14
  - 🎨 **Tailwind CSS** - Pre-built styles, easy to customize
15
15
  - 🛑 **Human-in-the-Loop (HITL)** - Built-in interrupt handling for agent approval flows
16
+ - 📋 **Deep Agent Todos** - Built-in "Agent Plan" progress card that tracks multi-step agent tasks in real time
16
17
 
17
18
  ## Installation
18
19
 
@@ -686,6 +687,106 @@ function MyComponent() {
686
687
  }
687
688
  ```
688
689
 
690
+ ## Deep Agent Todos
691
+
692
+ When your agent works through a multi-step plan, it can expose a `todos` list in its LangGraph state. The library automatically picks this up and renders an **"Agent Plan"** card above the agent's response — showing a progress bar, the currently active step, and a status-icon list of all tasks.
693
+
694
+ ### What it looks like
695
+
696
+ ```
697
+ ┌─────────────────────────────────────────┐
698
+ │ ✦ Agent Plan 2 / 4 done │
699
+ │ Now: Analysing purchase history │
700
+ │ ████████░░░░░░░░░░░░ 50% │
701
+ │ │
702
+ │ ✓ Fetch customer profile │
703
+ │ ✓ Load order history │
704
+ │ ⟳ Analysing purchase history │
705
+ │ ○ Generate recommendations │
706
+ └─────────────────────────────────────────┘
707
+ ```
708
+
709
+ Status icons: `✓` completed · `⟳` in_progress (spinning) · `○` pending
710
+
711
+ ### Agent-side setup (Python)
712
+
713
+ Add a `todos` field to your LangGraph state and update it as your agent progresses through steps:
714
+
715
+ ```python
716
+ from typing import TypedDict, Literal
717
+ from langgraph.graph import StateGraph
718
+
719
+ class TodoItem(TypedDict):
720
+ id: str
721
+ content: str
722
+ status: Literal["pending", "in_progress", "completed"]
723
+
724
+ class AgentState(TypedDict):
725
+ messages: list
726
+ todos: list[TodoItem]
727
+
728
+ def plan_node(state: AgentState):
729
+ return {
730
+ "todos": [
731
+ {"id": "1", "content": "Fetch customer profile", "status": "pending"},
732
+ {"id": "2", "content": "Load order history", "status": "pending"},
733
+ {"id": "3", "content": "Analyse purchase history", "status": "pending"},
734
+ {"id": "4", "content": "Generate recommendations", "status": "pending"},
735
+ ]
736
+ }
737
+
738
+ def step_1(state: AgentState):
739
+ # Mark step 1 in_progress, then completed when done
740
+ return {
741
+ "todos": [
742
+ {"id": "1", "content": "Fetch customer profile", "status": "completed"},
743
+ {"id": "2", "content": "Load order history", "status": "in_progress"},
744
+ {"id": "3", "content": "Analyse purchase history", "status": "pending"},
745
+ {"id": "4", "content": "Generate recommendations", "status": "pending"},
746
+ ]
747
+ }
748
+
749
+ # ... continue updating todos in each node
750
+ ```
751
+
752
+ The UI reads `todos` directly from the LangGraph state values — no extra configuration needed on the frontend.
753
+
754
+ ### How the UI handles it
755
+
756
+ - **During streaming** — the `todos` list updates live as the agent emits new state values. The progress bar and "Now: …" subtitle reflect the current `in_progress` item.
757
+ - **After streaming** — the final todos are frozen against the message group, so the card persists correctly when scrolling back through history.
758
+ - **Subgraph support** — when `streamSubgraphs: true`, the library scans nested update events for non-empty `todos` arrays so subgraph nodes don't accidentally overwrite the parent's todo state.
759
+ - **Empty arrays** — if an event contains `todos: []` (common in subgraph value events that don't own the todos state), the previous todos are preserved rather than cleared.
760
+
761
+ ### `TodoItem` type
762
+
763
+ ```typescript
764
+ import type { TodoItem } from 'langgraph-ui-components';
765
+
766
+ type TodoItem = {
767
+ id: string;
768
+ content: string;
769
+ status: "pending" | "in_progress" | "completed";
770
+ updatedAt?: string | number | Date; // raw JSON value from stream, not normalized
771
+ run_id?: string;
772
+ runId?: string;
773
+ messageId?: string;
774
+ checkpoint?: string;
775
+ };
776
+ ```
777
+
778
+ ### Enabling tool call indicators alongside todos
779
+
780
+ `enableToolCallIndicator` must be `true` (the default) for the Agent Plan card to appear, since the card is part of the agent message rendering pipeline:
781
+
782
+ ```tsx
783
+ <Sidebar enableToolCallIndicator={true} />
784
+ // or
785
+ <Chat enableToolCallIndicator={true} />
786
+ ```
787
+
788
+ ---
789
+
689
790
  ## chatBodyProps
690
791
 
691
792
  The `chatBodyProps` prop on both `Chat` and `Sidebar` customizes how agent messages are displayed:
@@ -716,7 +817,8 @@ Full TypeScript definitions available for:
716
817
  - `ThreadMode` — `"single" | "multi"`
717
818
  - `ThreadConfiguration` — `Record<string, unknown>` passed to LangGraph config
718
819
  - `ThreadContextType` — `useThread()` return type
719
- - `StateType` — `{ messages, ui?, suggestions? }`
820
+ - `StateType` — `{ messages, ui?, suggestions?, todos? }`
821
+ - `TodoItem` — `{ id, content, status, updatedAt?, run_id?, runId?, messageId?, checkpoint? }`
720
822
  - `CustomComponentContextValue` — `useCustomComponents()` return type
721
823
  - `InterruptComponentProps` — props for HITL interrupt components
722
824
  - `CustomTool` — `{ label, icon, alt?, onClick }`
@@ -729,6 +831,3 @@ Full TypeScript definitions available for:
729
831
  - `headerProps` — `{ title?, logoUrl? }`
730
832
  - `textToSpeechVoice` — `{ apiUrl, apiKey, model }`
731
833
 
732
- ## Keywords
733
-
734
- `langgraph ui components` `react` `chat-ui` `ai-components` `chatbot` `sidebar` `streaming` `langchain` `assistant` `chatgpt-ui`
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("../node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.cjs.js");e.__require();
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../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");var e=r.__require();exports.prismExports=e;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("../node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.cjs.js");e.__require();
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e={};exports.__exports=e;
2
2
  //# sourceMappingURL=index.cjs2.js.map
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("./_commonjsHelpers.cjs.js"),r=require("../node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.cjs.js");var s=r.__require();const t=e.getDefaultExportFromCjs(s);module.exports=t;
1
+ "use strict";const e=require("./_commonjsHelpers.cjs.js"),r=require("../node_modules/.pnpm/@babel_runtime@7.28.6/node_modules/@babel/runtime/regenerator/index.cjs.js");var t=r.__require();const o=e.getDefaultExportFromCjs(t);module.exports=o;
2
2
  //# sourceMappingURL=index.cjs3.js.map
@@ -1,3 +1,6 @@
1
- import { __require as e } from "../node_modules/.pnpm/camelcase@6.3.0/node_modules/camelcase/index.es.js";
2
- e();
1
+ import { __require as r } from "../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";
2
+ var i = /* @__PURE__ */ r();
3
+ export {
4
+ i as p
5
+ };
3
6
  //# sourceMappingURL=index.es.js.map
@@ -1,3 +1,5 @@
1
- import { __require as r } from "../node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.es.js";
2
- r();
1
+ var r = {};
2
+ export {
3
+ r as __exports
4
+ };
3
5
  //# sourceMappingURL=index.es2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index.es2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,8 +1,8 @@
1
1
  import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.es.js";
2
- import { __require as t } from "../node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.es.js";
3
- var e = t();
4
- const i = /* @__PURE__ */ r(e);
2
+ import { __require as e } from "../node_modules/.pnpm/@babel_runtime@7.28.6/node_modules/@babel/runtime/regenerator/index.es.js";
3
+ var t = e();
4
+ const m = /* @__PURE__ */ r(t);
5
5
  export {
6
- i as default
6
+ m as default
7
7
  };
8
8
  //# sourceMappingURL=index.es3.js.map
@@ -1,4 +1,4 @@
1
- "use strict";const a=require("react/jsx-runtime"),V=require("../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");require("../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");require("../_virtual/index.cjs.js");require("../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");require("../node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.cjs.js");require("../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");require("../node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.cjs.js");require("../_virtual/index.cjs2.js");require("../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");require("../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");require("../_virtual/index.cjs3.js");require("../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");require("../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");const X=require("../providers/Stream.cjs.js"),Z=require("../providers/CustomComponentProvider.cjs.js"),ee=require("../utils/logger.cjs.js"),f=require("../utils/utils.cjs.js"),s=require("react"),te=require("./messages/AgentMessage.cjs.js"),ne=require("./messages/CustomComponentRender.cjs.js"),re=require("./messages/HumanMessage.cjs.js"),z=require("./Thinking.cjs.js");function se({setIsFirstMessage:M,enableToolCallIndicator:k=!0,chatBodyProps:q}){const o=X.useStreamContext(),{interruptComponents:B}=Z.useCustomComponents(),x=o.messages,c=o.isLoading,[w,H]=s.useState({});ee.logger.debug("ChatBody render - messages count:",x,"isLoading:",c);const l=s.useMemo(()=>x??[],[x]),m=s.useRef(null),S=s.useRef(0),C=s.useRef(!0),T=s.useCallback((e,r)=>{H(n=>({...n,[e]:r}))},[]),R=s.useCallback(async e=>{if(!e){console.error("No parent checkpoint available for regeneration");return}await o.submit(void 0,{checkpoint:e,streamMode:["values"],streamSubgraphs:!0,streamResumable:!0})},[o]),A=s.useCallback(e=>{o.setBranch(e)},[o]),b=s.useCallback(e=>{o.submit(null,{command:{resume:e}})},[o]),E=s.useMemo(()=>{const e=o.interrupt;if(!e)return null;const n=e.value?.actionRequests??[];return{approve:()=>{b({decisions:n.map(()=>({type:"approve"}))})},reject:i=>{b({decisions:n.map(()=>({type:"reject",message:i||void 0}))})},edit:i=>{const p=n[0];b({decisions:[{type:"edit",editedAction:{name:p?.name??"",args:{...p?.args,...i}}}]})}}},[o.interrupt,b]),K=s.useCallback(e=>Array.isArray(e)?e.filter(n=>typeof n=="object"&&n!==null&&n.type==="tool_use"&&n.id).map(n=>{let i={};if(n?.input)if(typeof n.input=="string")try{i=V.parsePartialJson(n.input)??{}}catch{i={}}else typeof n.input=="object"&&(i=n.input);return{name:n.name??"",id:n.id??"",args:i,type:"tool_call"}}):[],[]),g=s.useCallback(()=>{if(m.current){let e=m.current.parentElement;for(;e;){const r=window.getComputedStyle(e);if(r.overflowY==="auto"||r.overflowY==="scroll")return e;e=e.parentElement}}return null},[]);s.useEffect(()=>{l.length>0&&M&&M(!1)},[l.length,M]);const N=s.useCallback((e,r,n)=>{const i=c&&r===n.length-1&&e.type==="ai";if(!e.content.length&&!f.isAiWithToolCalls(e)&&!i||e.additional_kwargs?.hidden)return null;const p=e.id??`msg-${r}`;if(e.type==="human")return a.jsx(re,{message:e,fontSize:q?.fontSize},p);if(f.isToolMessage(e))return null;if(e.type==="ai"&&r>0){let t=r-1;for(;t>=0&&f.isToolMessage(n[t]);)t--;if(t>=0&&n[t].type==="ai")return null}const d=[e];let y=r+1;for(;y<n.length;){const t=n[y];if(f.isToolMessage(t))d.push(t),y++;else if(t.type==="ai")d.push(t),y++;else break}const u=d.filter(t=>t.type==="ai"),W=d.filter(t=>f.isToolMessage(t)),j=u.some(t=>Array.isArray(t.content)),v=j?u.flatMap(t=>Array.isArray(t.content)?t.content:typeof t.content=="string"&&t.content.length>0?[{type:"text",text:t.content}]:[]):u.map(t=>typeof t.content=="string"?t.content:"").filter(Boolean).join(`
1
+ "use strict";const u=require("react/jsx-runtime"),oe=require("../providers/Stream.cjs.js"),ae=require("../providers/CustomComponentProvider.cjs.js"),ie=require("../utils/logger.cjs.js"),y=require("../utils/utils.cjs.js"),o=require("react"),ce=require("./messages/AgentMessage.cjs.js"),ue=require("./messages/CustomComponentRender.cjs.js"),le=require("./messages/HumanMessage.cjs.js"),$=require("./Thinking.cjs.js");function de({setIsFirstMessage:j,enableToolCallIndicator:w=!0,chatBodyProps:A}){const i=oe.useStreamContext(),{interruptComponents:U}=ae.useCustomComponents(),T=i.messages,d=i.isLoading,[z,W]=o.useState({});ie.logger.debug("ChatBody render - messages count:",T,"isLoading:",d);const l=o.useMemo(()=>T??[],[T]),L=o.useMemo(()=>{const e=new Set,n=i.values?.ui;if(!Array.isArray(n))return e;for(const r of n){const s=r,c=s.metadata&&typeof s.metadata=="object"?s.metadata:void 0,h=[typeof s.id=="string"?s.id:void 0,typeof c?.id=="string"?c.id:void 0,typeof c?.message_id=="string"?c.message_id:void 0];for(const f of h)f&&e.add(f)}return e},[i.values?.ui]),v=o.useRef(null),H=o.useRef(0),b=o.useRef(!0),R=o.useRef(new Map),q=o.useCallback(e=>Array.isArray(e)?e.map((n,r)=>{if(!n||typeof n!="object")return null;const s=n,c=s.status;return typeof s.content!="string"||c!=="pending"&&c!=="in_progress"&&c!=="completed"?null:{id:s.id&&typeof s.id=="string"?s.id:`todo-${r}`,content:s.content,status:c,updatedAt:s.updatedAt instanceof Date||typeof s.updatedAt=="string"||typeof s.updatedAt=="number"?s.updatedAt:void 0,run_id:typeof s.run_id=="string"?s.run_id:void 0,runId:typeof s.runId=="string"?s.runId:void 0,messageId:typeof s.messageId=="string"?s.messageId:void 0,checkpoint:typeof s.checkpoint=="string"?s.checkpoint:void 0}}).filter(n=>n!==null):[],[]),I=o.useCallback((e,n)=>{W(r=>({...r,[e]:n}))},[]),F=o.useCallback(async e=>{if(!e){console.error("No parent checkpoint available for regeneration");return}await i.submit(void 0,{checkpoint:e,streamMode:["values"],streamSubgraphs:!0,streamResumable:!0})},[i]),B=o.useCallback(e=>{i.setBranch(e)},[i]),x=o.useCallback(e=>{i.submit(null,{command:{resume:e},streamMode:["values","messages-tuple","updates","custom"],streamSubgraphs:!0})},[i]),K=o.useMemo(()=>{const e=i.interrupt;if(!e)return null;const r=e.value?.actionRequests??[];return{approve:()=>{x({decisions:r.map(()=>({type:"approve"}))})},reject:s=>{x({decisions:r.map(()=>({type:"reject",message:s||void 0}))})},edit:s=>{const c=r[0];x({decisions:[{type:"edit",editedAction:{name:c?.name??"",args:{...c?.args,...s}}}]})}}},[i.interrupt,x]),p=o.useCallback(()=>{if(v.current){let e=v.current.parentElement;for(;e;){const n=window.getComputedStyle(e);if(n.overflowY==="auto"||n.overflowY==="scroll")return e;e=e.parentElement}}return null},[]);o.useEffect(()=>{l.length>0&&j&&j(!1)},[l.length,j]);const O=o.useCallback((e,n,r)=>{const s=d&&n===r.length-1&&e.type==="ai";if(!e.content.length&&!y.isAiWithToolCalls(e)&&!s||e.additional_kwargs?.hidden)return null;const c=e.id??`msg-${n}`,h=t=>typeof t.id=="string"&&L.has(t.id);if(e.type==="human")return u.jsx(le,{message:e,fontSize:A?.fontSize},c);if(y.isToolMessage(e))return null;if(e.type==="ai"&&n>0){let t=n-1;for(;t>=0&&y.isToolMessage(r[t]);)t--;if(t>=0&&r[t].type==="ai"&&!h(e))return null}const f=[e];let M=n+1;for(;M<r.length;){const t=r[M];if(y.isToolMessage(t))f.push(t),M++;else if(t.type==="ai"){if(h(t))break;f.push(t),M++}else break}const g=f.filter(t=>t.type==="ai"),_=g.some(t=>Array.isArray(t.content)),m=new Set,k=_?g.flatMap(t=>Array.isArray(t.content)?t.content.filter(a=>{if(a.type==="text"&&typeof a.text=="string"){if(m.has(a.text))return!1;m.add(a.text)}return!0}):typeof t.content=="string"&&t.content.length>0?m.has(t.content)?[]:(m.add(t.content),[{type:"text",text:t.content}]):[]):(()=>{const t=[];for(const a of g){const C=typeof a.content=="string"?a.content:"";C&&!m.has(C)&&(m.add(C),t.push(C))}return t.join(`
2
2
 
3
- `),D=j?v.map(t=>t.type==="text"?t.text:"").filter(Boolean).join(" "):v,Y=u.flatMap(t=>K(t.content)||[]).filter(t=>t!=null&&t!==void 0),$={...e,content:v},L=e?o.getMessagesMetadata(e):void 0,G=j?v.some(t=>t.type==="thinking"&&t.thinking?.length>0||t.type==="reasoning"&&t.reasoning?.length>0):!1,I=u.some(t=>{const h=t.additional_kwargs;return typeof h?.reasoning_content=="string"&&h.reasoning_content.length>0}),J=u.some(t=>{const h=t.additional_kwargs;return Array.isArray(h?.tool_status)&&h.tool_status.length>0}),P=u.some(t=>f.isAiWithToolCalls(t))||Y.length>0||W.length>0||J,_=!!D||G||I||k&&P,Q=y>=n.length,F=c&&Q,U=F&&!_;return a.jsxs(s.Fragment,{children:[U&&a.jsx(z,{}),_&&a.jsx(te,{agentName:q?.agentName,fontSize:q?.fontSize,message:$,groupedMessages:d,showToolActivity:k,isStreaming:F,onRegenerate:R,feedback:e.id?w[e.id]:void 0,onFeedback:T,branch:L?.branch,branchOptions:L?.branchOptions,onBranchSelect:A}),u.map(t=>a.jsx(ne,{message:t,thread:o},t.id))]},p)},[c,o,k,R,w,T,A]),O=s.useMemo(()=>l.map((e,r)=>{const n=N(e,r,l);return n&&!n.key?s.cloneElement(n,{key:e.id??`msg-${r}`}):n}),[l,N]);return s.useEffect(()=>{const e=g();if(!e)return;const r=()=>{const{scrollTop:n,scrollHeight:i,clientHeight:p}=e,d=i-n-p;C.current=d<100};return e.addEventListener("scroll",r),()=>e.removeEventListener("scroll",r)},[g]),s.useEffect(()=>{const e=g();if(!e)return;const r=l.length;r>S.current&&(e.scrollTop=e.scrollHeight,C.current=!0),S.current=r},[l,g]),s.useEffect(()=>{const e=g();if(!e||!c)return;const r=new MutationObserver(()=>{C.current&&e&&(e.scrollTop=e.scrollHeight)});return m.current&&r.observe(m.current,{childList:!0,subtree:!0,characterData:!0}),()=>r.disconnect()},[c,g]),s.useLayoutEffect(()=>{const e=g();c&&C.current&&e&&(e.scrollTop=e.scrollHeight)}),a.jsx("div",{ref:m,className:"flex flex-col gap-4 rounded-4xl p-2",children:l.length===0?a.jsx("div",{className:"flex items-center justify-center h-full text-zinc-500",children:c?a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("div",{className:"animate-spin h-5 w-5 border-2 border-zinc-500 border-t-transparent rounded-full"}),a.jsx("span",{children:"Loading conversation..."})]}):"Start a conversation..."}):a.jsxs(a.Fragment,{children:[O,!c&&o.interrupt&&E&&(()=>{const e=o.interrupt.value,r=e?.actionRequests?.[0]?.name,n=r?B[r]:void 0;return n?a.jsx(n,{interrupt:e,actions:E}):null})(),c&&l.length>0&&(()=>{const e=l[l.length-1];return e.type==="human"||e.type==="ai"&&!e.content&&f.isAiWithToolCalls(e)})()&&a.jsx(z,{})]})})}module.exports=se;
3
+ `)})(),V=_?k.map(t=>t.type==="text"?t.text:"").filter(Boolean).join(" "):k,J={...e,content:k},D=e?i.getMessagesMetadata(e):void 0,Q=_?k.some(t=>t.type==="thinking"&&t.thinking?.length>0||t.type==="reasoning"&&t.reasoning?.length>0):!1,X=g.some(t=>{const a=t.additional_kwargs;return typeof a?.reasoning_content=="string"&&a.reasoning_content.length>0}),Z=g.some(t=>{const a=t.additional_kwargs;return Array.isArray(a?.tool_status)&&a.tool_status.length>0}),P=f.some(t=>y.isToolMessage(t)),ee=w&&(g.some(t=>y.isAiWithToolCalls(t))||Z||P),G=!!V||Q||X||ee,te=M>=r.length,S=d&&te,E=g.map(t=>t.id).filter(t=>typeof t=="string"&&t.length>0).join("|")||c,ne=(()=>{const t=R.current.get(E);if(!S&&t&&t.length>0)return t;if(S){const a=q(i.values?.todos);if(a.length>0)return R.current.set(E,a),a}for(let a=g.length-1;a>=0;a--){const re=i.getMessagesMetadata(g[a])?.firstSeenState?.values,N=q(re?.todos);if(N.length>0)return(!t||t.length===0)&&R.current.set(E,N),t??N}return t&&t.length>0?t:[]})(),se=S&&!G;return u.jsxs(o.Fragment,{children:[se&&u.jsx($,{}),G&&u.jsx(ce,{agentName:A?.agentName,fontSize:A?.fontSize,message:J,groupedMessages:f,showToolActivity:w,isStreaming:S,onRegenerate:F,feedback:e.id?z[e.id]:void 0,onFeedback:I,branch:D?.branch,branchOptions:D?.branchOptions,onBranchSelect:B,todos:ne}),g.map(t=>u.jsx(ue,{message:t,thread:i},t.id))]},c)},[d,i,q,w,F,z,I,B,L]),Y=o.useMemo(()=>l.map((e,n)=>{const r=O(e,n,l);return r&&!r.key?o.cloneElement(r,{key:e.id??`msg-${n}`}):r}),[l,O]);return o.useEffect(()=>{const e=p();if(!e)return;const n=()=>{const{scrollTop:r,scrollHeight:s,clientHeight:c}=e,h=s-r-c;b.current=h<100};return e.addEventListener("scroll",n),()=>e.removeEventListener("scroll",n)},[p]),o.useEffect(()=>{const e=p();if(!e)return;const n=l.length;n>H.current&&(e.scrollTop=e.scrollHeight,b.current=!0),H.current=n},[l,p]),o.useEffect(()=>{const e=p();if(!e||!d)return;const n=new MutationObserver(()=>{b.current&&e&&(e.scrollTop=e.scrollHeight)});return v.current&&n.observe(v.current,{childList:!0,subtree:!0,characterData:!0}),()=>n.disconnect()},[d,p]),o.useLayoutEffect(()=>{const e=p();d&&b.current&&e&&(e.scrollTop=e.scrollHeight)}),u.jsx("div",{ref:v,className:"flex flex-col gap-4 rounded-4xl p-2",children:l.length===0?u.jsx("div",{className:"flex items-center justify-center h-full text-zinc-500",children:d?u.jsxs("div",{className:"flex items-center gap-2",children:[u.jsx("div",{className:"animate-spin h-5 w-5 border-2 border-zinc-500 border-t-transparent rounded-full"}),u.jsx("span",{children:"Loading conversation..."})]}):"Start a conversation..."}):u.jsxs(u.Fragment,{children:[Y,d&&l.length>0&&l[l.length-1].type==="human"&&u.jsx($,{}),!d&&i.interrupt&&K&&(()=>{const e=i.interrupt.value,n=e?.actionRequests?.[0]?.name,r=n?U[n]:void 0;return r?u.jsx(r,{interrupt:e,actions:K}):null})()]})})}module.exports=de;
4
4
  //# sourceMappingURL=ChatBody.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBody.cjs.js","sources":["../../src/components/ChatBody.tsx"],"sourcesContent":["import { parsePartialJson } from \"@langchain/core/output_parsers\";\nimport { useStreamContext } from \"@/providers/Stream\";\nimport { useCustomComponents } from \"@/providers/CustomComponentProvider\";\nimport type { chatBodyProps } from \"@/types/ChatProps\";\nimport { logger } from \"@/utils/logger\";\nimport { isAiWithToolCalls, isToolMessage } from \"@/utils/utils\";\nimport type { AIMessage, Message } from \"@langchain/langgraph-sdk\";\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport AgentMessage from \"./messages/AgentMessage\";\nimport CustomComponentRender from \"./messages/CustomComponentRender\";\nimport HumanMessage from \"./messages/HumanMessage\";\nimport type { MessageFeedback } from \"./messages/MessageActions\";\nimport Thinking from \"./Thinking\";\n\nexport default function ChatBody({ setIsFirstMessage, enableToolCallIndicator = true, chatBodyProps }: { setIsFirstMessage?: React.Dispatch<React.SetStateAction<boolean>>, enableToolCallIndicator?: boolean, chatBodyProps?: chatBodyProps }) {\n const stream = useStreamContext();\n const { interruptComponents } = useCustomComponents();\n const messages = stream.messages;\n const isLoading = stream.isLoading;\n\n // State to track message feedback (likes/dislikes)\n const [messageFeedback, setMessageFeedback] = useState<Record<string, MessageFeedback>>({});\n\n logger.debug(\"ChatBody render - messages count:\", messages, \"isLoading:\", isLoading);\n\n // Memoize messages with stable reference\n const memoMessages = useMemo(() => messages ?? [], [messages]);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const prevMessageCountRef = useRef(0);\n const shouldAutoScrollRef = useRef(true);\n\n // Handler for message feedback\n const handleFeedback = useCallback((messageId: string, feedback: MessageFeedback) => {\n setMessageFeedback(prev => ({\n ...prev,\n [messageId]: feedback,\n }));\n }, []);\n\n // Handler for message regeneration\n const handleRegenerate = useCallback(async (\n parentCheckpoint: any | null | undefined,\n ) => {\n if (!parentCheckpoint) {\n console.error(\"No parent checkpoint available for regeneration\");\n return;\n }\n\n await stream.submit(undefined, {\n checkpoint: parentCheckpoint,\n streamMode: [\"values\"],\n streamSubgraphs: true,\n streamResumable: true,\n });\n }, [stream]);\n\n // Handler for selecting a different branch\n const handleBranchSelect = useCallback((branch: string) => {\n stream.setBranch(branch);\n }, [stream]);\n\n // Handler for HITL interrupt responses\n const handleInterruptRespond = useCallback((response: any) => {\n stream.submit(null, { command: { resume: response } });\n }, [stream]);\n\n // Build interrupt actions for custom renderers\n const interruptActions = useMemo(() => {\n const interrupt = stream.interrupt;\n if (!interrupt) return null;\n const payload = interrupt.value as any;\n const actionRequests = payload?.actionRequests ?? [];\n return {\n approve: () => {\n handleInterruptRespond({\n decisions: actionRequests.map(() => ({ type: \"approve\" as const })),\n });\n },\n reject: (reason?: string) => {\n handleInterruptRespond({\n decisions: actionRequests.map(() => ({\n type: \"reject\" as const,\n message: reason || undefined,\n })),\n });\n },\n edit: (editedArgs: Record<string, unknown>) => {\n const action = actionRequests[0];\n handleInterruptRespond({\n decisions: [\n {\n type: \"edit\" as const,\n editedAction: {\n name: action?.name ?? \"\",\n args: { ...action?.args, ...editedArgs },\n },\n },\n ],\n });\n },\n };\n }, [stream.interrupt, handleInterruptRespond]);\n\n const getToolCallsFromContent = useCallback((content: Message[\"content\"]): AIMessage[\"tool_calls\"] => {\n if (!Array.isArray(content)) return [];\n const toolCallContents = content.filter(\n (c) => typeof c === \"object\" && c !== null && (c as any).type === \"tool_use\" && (c as any).id,\n ) as Array<Record<string, any>>;\n\n return toolCallContents.map((tc) => {\n let args: Record<string, any> = {};\n if (tc?.input) {\n if (typeof tc.input === \"string\") {\n try {\n args = parsePartialJson(tc.input) ?? {};\n } catch {\n args = {};\n }\n } else if (typeof tc.input === \"object\") {\n args = tc.input as Record<string, any>;\n }\n }\n return {\n name: tc.name ?? \"\",\n id: tc.id ?? \"\",\n args,\n type: \"tool_call\",\n };\n });\n }, []);\n\n // Get the parent scroll container\n const getScrollContainer = useCallback(() => {\n if (containerRef.current) {\n // Find the parent with overflow-y-auto class\n let parent = containerRef.current.parentElement;\n while (parent) {\n const style = window.getComputedStyle(parent);\n if (style.overflowY === 'auto' || style.overflowY === 'scroll') {\n return parent;\n }\n parent = parent.parentElement;\n }\n }\n return null;\n }, []);\n\n useEffect(() => {\n if (memoMessages.length > 0 && setIsFirstMessage) {\n setIsFirstMessage(false);\n }\n }, [memoMessages.length, setIsFirstMessage]);\n\n // Memoize message rendering logic to prevent unnecessary re-renders\n const renderMessage = useCallback((msg: typeof messages[0], index: number, messagesArray: typeof messages) => {\n const isCurrentlyStreamingMessage = isLoading && index === messagesArray.length - 1 && msg.type === \"ai\";\n if (!msg.content.length && !isAiWithToolCalls(msg) && !isCurrentlyStreamingMessage) return null;\n\n if (msg.additional_kwargs?.hidden) {\n return null;\n }\n\n // Use message id or fallback to index for key\n const msgKey = msg.id ?? `msg-${index}`;\n\n if (msg.type === \"human\") {\n return <HumanMessage key={msgKey} message={msg} fontSize={chatBodyProps?.fontSize} />;\n }\n\n // Skip standalone tool messages\n if (isToolMessage(msg)) {\n return null;\n }\n\n // Skip if this AI message was already combined with a previous one\n if (msg.type === \"ai\" && index > 0) {\n // Check if previous non-tool message is also an AI message\n let prevIndex = index - 1;\n while (prevIndex >= 0 && isToolMessage(messagesArray[prevIndex])) {\n prevIndex--;\n }\n\n if (prevIndex >= 0 && messagesArray[prevIndex].type === \"ai\") {\n // This is a consecutive AI message, skip it (it will be combined with the previous one)\n return null;\n }\n }\n\n const groupedTimelineMessages: Message[] = [msg];\n let nextIndex = index + 1;\n\n while (nextIndex < messagesArray.length) {\n const nextMsg = messagesArray[nextIndex];\n\n if (isToolMessage(nextMsg)) {\n groupedTimelineMessages.push(nextMsg);\n nextIndex++;\n } else if (nextMsg.type === \"ai\") {\n groupedTimelineMessages.push(nextMsg);\n nextIndex++;\n } else {\n // Stop at human messages or other types\n break;\n }\n }\n\n const groupedAiMessages = groupedTimelineMessages.filter((m) => m.type === \"ai\");\n const toolMessages = groupedTimelineMessages.filter((m) => isToolMessage(m));\n\n // Merge content from all AI messages, preserving r/reasoning blocks\n const hasArrayContent = groupedAiMessages.some((m) => Array.isArray(m.content));\n const mergedContent: Message[\"content\"] = hasArrayContent\n ? groupedAiMessages.flatMap((m) => {\n if (Array.isArray(m.content)) return m.content as any[];\n if (typeof m.content === \"string\" && m.content.length > 0)\n return [{ type: \"text\", text: m.content }];\n return [];\n })\n : groupedAiMessages\n .map((m) => (typeof m.content === \"string\" ? m.content : \"\"))\n .filter(Boolean)\n .join(\"\\n\\n\");\n\n // Extract plain-text portion for legacy checks (tool-call extraction, etc.)\n const combinedContent = hasArrayContent\n ? (mergedContent as any[])\n .map((c: any) => (c.type === \"text\" ? (c.text as string) : \"\"))\n .filter(Boolean)\n .join(\" \")\n : (mergedContent as string);\n\n const toolCallsFromContent = groupedAiMessages\n .flatMap((m) => {\n const calls = getToolCallsFromContent(m.content);\n return calls || [];\n })\n .filter((tc): tc is NonNullable<typeof tc> => tc != null && tc !== undefined);\n\n // Create a combined message object preserving full content (including thinking blocks)\n const combinedMessage = {\n ...msg,\n content: mergedContent,\n };\n\n // Get branch metadata from thread\n const meta = msg ? stream.getMessagesMetadata(msg) : undefined;\n\n // Determine if there is any displayable content (text OR thinking/reasoning blocks)\n const hasThinkingContent = hasArrayContent\n ? (mergedContent as any[]).some(\n (b: any) =>\n (b.type === \"thinking\" && (b.thinking as string)?.length > 0) ||\n (b.type === \"reasoning\" && (b.reasoning as string)?.length > 0),\n )\n : false;\n const hasKwargsReasoning =\n groupedAiMessages.some((m) => {\n const ak = (m as Record<string, unknown>).additional_kwargs as Record<string, unknown> | undefined;\n return typeof ak?.reasoning_content === \"string\" && (ak.reasoning_content as string).length > 0;\n });\n const hasKwargsToolStatus = groupedAiMessages.some((m) => {\n const ak = (m as Record<string, unknown>).additional_kwargs as Record<string, unknown> | undefined;\n return Array.isArray(ak?.tool_status) && (ak.tool_status as unknown[]).length > 0;\n });\n\n const hasToolCalls =\n groupedAiMessages.some((m) => isAiWithToolCalls(m)) ||\n toolCallsFromContent.length > 0 ||\n toolMessages.length > 0 ||\n hasKwargsToolStatus;\n\n const hasAnyDisplayableContent =\n !!combinedContent ||\n hasThinkingContent ||\n hasKwargsReasoning ||\n (enableToolCallIndicator && hasToolCalls);\n\n const isLastMessageGroup = nextIndex >= messagesArray.length;\n const isStreamingThisMessage = isLoading && isLastMessageGroup;\n\n // Show Thinking animation whenever streaming with no displayable content yet (plain chat or tool-call)\n const showThinkingIndicator = isStreamingThisMessage && !hasAnyDisplayableContent;\n\n return (\n <React.Fragment key={msgKey}>\n {/* 1. Thinking indicator - show when streaming with no content yet (no icon shown) */}\n {showThinkingIndicator && (\n <Thinking />\n )}\n {/* 2. Agent message — pass full mergedContent and grouped timeline for in-order rendering */}\n {hasAnyDisplayableContent && (\n <AgentMessage\n agentName={chatBodyProps?.agentName}\n fontSize={chatBodyProps?.fontSize}\n // agentAvatarUrl={chatBodyProps?.agentAvatarUrl}\n message={combinedMessage}\n groupedMessages={groupedTimelineMessages}\n showToolActivity={enableToolCallIndicator}\n isStreaming={isStreamingThisMessage}\n onRegenerate={handleRegenerate}\n feedback={msg.id ? messageFeedback[msg.id] : undefined}\n onFeedback={handleFeedback}\n branch={meta?.branch}\n branchOptions={meta?.branchOptions}\n onBranchSelect={handleBranchSelect}\n />\n )}\n {/* 3. Custom component (from all messages in the group) */}\n {groupedAiMessages.map((m) => (\n <CustomComponentRender key={m.id} message={m} thread={stream} />\n ))}\n </React.Fragment>\n );\n }, [isLoading, stream, enableToolCallIndicator, handleRegenerate, messageFeedback, handleFeedback, handleBranchSelect]);\n\n // Memoize the rendered messages array\n const renderedMessages = useMemo(() => {\n return memoMessages.map((msg, index) => {\n const element = renderMessage(msg, index, memoMessages);\n // Ensure every element has a key, using message id or fallback to index\n if (element && !element.key) {\n return React.cloneElement(element, { key: msg.id ?? `msg-${index}` });\n }\n return element;\n });\n }, [memoMessages, renderMessage]);\n\n // Track user scroll position to determine if we should auto-scroll\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) return;\n\n const handleScroll = () => {\n const { scrollTop, scrollHeight, clientHeight } = scrollContainer;\n const distanceFromBottom = scrollHeight - scrollTop - clientHeight;\n // Consider \"at bottom\" if within 100px\n shouldAutoScrollRef.current = distanceFromBottom < 100;\n };\n\n scrollContainer.addEventListener('scroll', handleScroll);\n return () => scrollContainer.removeEventListener('scroll', handleScroll);\n }, [getScrollContainer]);\n\n // Auto-scroll when new messages are added\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) return;\n\n const currentCount = memoMessages.length;\n const hasNewMessage = currentCount > prevMessageCountRef.current;\n\n if (hasNewMessage) {\n scrollContainer.scrollTop = scrollContainer.scrollHeight;\n shouldAutoScrollRef.current = true;\n }\n\n prevMessageCountRef.current = currentCount;\n }, [memoMessages, getScrollContainer]);\n\n // Use MutationObserver to detect DOM changes and auto-scroll during streaming\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer || !isLoading) return;\n\n const observer = new MutationObserver(() => {\n if (shouldAutoScrollRef.current && scrollContainer) {\n scrollContainer.scrollTop = scrollContainer.scrollHeight;\n }\n });\n\n // Observe the ChatBody container for changes\n if (containerRef.current) {\n observer.observe(containerRef.current, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n\n return () => observer.disconnect();\n }, [isLoading, getScrollContainer]);\n\n // Use useLayoutEffect to scroll after DOM updates\n useLayoutEffect(() => {\n const scrollContainer = getScrollContainer();\n if (isLoading && shouldAutoScrollRef.current && scrollContainer) {\n scrollContainer.scrollTop = scrollContainer.scrollHeight;\n }\n });\n\n return (\n <div\n ref={containerRef}\n className=\"flex flex-col gap-4 rounded-4xl p-2\"\n >\n {memoMessages.length === 0 ? (\n <div className=\"flex items-center justify-center h-full text-zinc-500\">\n {isLoading ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"animate-spin h-5 w-5 border-2 border-zinc-500 border-t-transparent rounded-full\" />\n <span>Loading conversation...</span>\n </div>\n ) : (\n \"Start a conversation...\"\n )}\n </div>\n ) : (\n <>\n {renderedMessages}\n {/* Show HITL interrupt card when agent is paused for approval */}\n {!isLoading && stream.interrupt && interruptActions && (() => {\n const payload = stream.interrupt.value as any;\n const toolName = payload?.actionRequests?.[0]?.name;\n const InterruptComponent = toolName ? interruptComponents[toolName] : undefined;\n if (!InterruptComponent) return null;\n return <InterruptComponent interrupt={payload} actions={interruptActions} />;\n })()}\n {/* Show thinking indicator when loading and no AI response has started yet */}\n {isLoading && memoMessages.length > 0 && (() => {\n const lastMsg = memoMessages[memoMessages.length - 1];\n // Show if last message is human or if last AI has no content (only tool calls)\n return lastMsg.type === \"human\" ||\n (lastMsg.type === \"ai\" && !lastMsg.content && isAiWithToolCalls(lastMsg));\n })() && (\n <Thinking />\n )}\n </>\n )}\n\n </div>\n );\n}\n"],"names":["ChatBody","setIsFirstMessage","enableToolCallIndicator","chatBodyProps","stream","useStreamContext","interruptComponents","useCustomComponents","messages","isLoading","messageFeedback","setMessageFeedback","useState","logger","memoMessages","useMemo","containerRef","useRef","prevMessageCountRef","shouldAutoScrollRef","handleFeedback","useCallback","messageId","feedback","prev","handleRegenerate","parentCheckpoint","handleBranchSelect","branch","handleInterruptRespond","response","interruptActions","interrupt","actionRequests","reason","editedArgs","action","getToolCallsFromContent","content","c","tc","args","parsePartialJson","getScrollContainer","parent","style","useEffect","renderMessage","msg","index","messagesArray","isCurrentlyStreamingMessage","isAiWithToolCalls","msgKey","HumanMessage","isToolMessage","prevIndex","groupedTimelineMessages","nextIndex","nextMsg","groupedAiMessages","m","toolMessages","hasArrayContent","mergedContent","combinedContent","toolCallsFromContent","combinedMessage","meta","hasThinkingContent","b","hasKwargsReasoning","ak","hasKwargsToolStatus","hasToolCalls","hasAnyDisplayableContent","isLastMessageGroup","isStreamingThisMessage","showThinkingIndicator","jsxs","React","Thinking","jsx","AgentMessage","CustomComponentRender","renderedMessages","element","scrollContainer","handleScroll","scrollTop","scrollHeight","clientHeight","distanceFromBottom","currentCount","observer","useLayoutEffect","Fragment","payload","toolName","InterruptComponent","lastMsg"],"mappings":"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"}
1
+ {"version":3,"file":"ChatBody.cjs.js","sources":["../../src/components/ChatBody.tsx"],"sourcesContent":["import { useStreamContext } from \"@/providers/Stream\";\nimport { useCustomComponents } from \"@/providers/CustomComponentProvider\";\nimport type { chatBodyProps } from \"@/types/ChatProps\";\nimport { logger } from \"@/utils/logger\";\nimport { isAiWithToolCalls, isToolMessage } from \"@/utils/utils\";\nimport type { Message } from \"@langchain/langgraph-sdk\";\nimport type { TodoItem } from \"@/providers/Stream\";\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport AgentMessage from \"./messages/AgentMessage\";\nimport CustomComponentRender from \"./messages/CustomComponentRender\";\nimport HumanMessage from \"./messages/HumanMessage\";\nimport type { MessageFeedback } from \"./messages/MessageActions\";\nimport Thinking from \"./Thinking\";\n\nexport default function ChatBody({ setIsFirstMessage, enableToolCallIndicator = true, chatBodyProps }: { setIsFirstMessage?: React.Dispatch<React.SetStateAction<boolean>>, enableToolCallIndicator?: boolean, chatBodyProps?: chatBodyProps }) {\n const stream = useStreamContext();\n const { interruptComponents } = useCustomComponents();\n const messages = stream.messages;\n const isLoading = stream.isLoading;\n\n // State to track message feedback (likes/dislikes)\n const [messageFeedback, setMessageFeedback] = useState<Record<string, MessageFeedback>>({});\n\n logger.debug(\"ChatBody render - messages count:\", messages, \"isLoading:\", isLoading);\n\n // Memoize messages with stable reference\n const memoMessages = useMemo(() => messages ?? [], [messages]);\n\n const uiMessageIds = useMemo(() => {\n const ids = new Set<string>();\n const uiMessages = stream.values?.ui;\n if (!Array.isArray(uiMessages)) return ids;\n\n for (const ui of uiMessages) {\n const uiObj = ui as unknown as Record<string, unknown>;\n const metadata =\n uiObj.metadata && typeof uiObj.metadata === \"object\"\n ? (uiObj.metadata as Record<string, unknown>)\n : undefined;\n\n const candidates = [\n typeof uiObj.id === \"string\" ? uiObj.id : undefined,\n typeof metadata?.id === \"string\" ? metadata.id : undefined,\n typeof metadata?.message_id === \"string\" ? metadata.message_id : undefined,\n ];\n\n for (const candidate of candidates) {\n if (candidate) ids.add(candidate);\n }\n }\n\n return ids;\n }, [stream.values?.ui]);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const prevMessageCountRef = useRef(0);\n const shouldAutoScrollRef = useRef(true);\n const frozenTodosByGroupRef = useRef<Map<string, TodoItem[]>>(new Map());\n\n const normalizeTodos = useCallback((todos: unknown): TodoItem[] => {\n if (!Array.isArray(todos)) return [];\n\n return todos\n .map((todo, index) => {\n if (!todo || typeof todo !== \"object\") return null;\n const t = todo as Record<string, unknown>;\n const status = t.status;\n if (\n typeof t.content !== \"string\" ||\n (status !== \"pending\" && status !== \"in_progress\" && status !== \"completed\")\n ) {\n return null;\n }\n\n return {\n id: t.id && typeof t.id === \"string\" ? t.id : `todo-${index}`,\n content: t.content,\n status,\n updatedAt: t.updatedAt instanceof Date || typeof t.updatedAt === \"string\" || typeof t.updatedAt === \"number\"\n ? (t.updatedAt as string | number | Date)\n : undefined,\n run_id: typeof t.run_id === \"string\" ? t.run_id : undefined,\n runId: typeof t.runId === \"string\" ? t.runId : undefined,\n messageId: typeof t.messageId === \"string\" ? t.messageId : undefined,\n checkpoint: typeof t.checkpoint === \"string\" ? t.checkpoint : undefined,\n } as TodoItem;\n })\n .filter((todo): todo is TodoItem => todo !== null);\n }, []);\n\n // Handler for message feedback\n const handleFeedback = useCallback((messageId: string, feedback: MessageFeedback) => {\n setMessageFeedback(prev => ({\n ...prev,\n [messageId]: feedback,\n }));\n }, []);\n\n // Handler for message regeneration\n const handleRegenerate = useCallback(async (\n parentCheckpoint: any | null | undefined,\n ) => {\n if (!parentCheckpoint) {\n console.error(\"No parent checkpoint available for regeneration\");\n return;\n }\n\n await stream.submit(undefined, {\n checkpoint: parentCheckpoint,\n streamMode: [\"values\"],\n streamSubgraphs: true,\n streamResumable: true,\n });\n }, [stream]);\n\n // Handler for selecting a different branch\n const handleBranchSelect = useCallback((branch: string) => {\n stream.setBranch(branch);\n }, [stream]);\n\n // Handler for HITL interrupt responses\n const handleInterruptRespond = useCallback((response: any) => {\n stream.submit(null, {\n command: { resume: response },\n streamMode: [\"values\", \"messages-tuple\", \"updates\", \"custom\"],\n streamSubgraphs: true,\n });\n }, [stream]);\n\n // Build interrupt actions for custom renderers\n const interruptActions = useMemo(() => {\n const interrupt = stream.interrupt;\n if (!interrupt) return null;\n const payload = interrupt.value as any;\n const actionRequests = payload?.actionRequests ?? [];\n return {\n approve: () => {\n handleInterruptRespond({\n decisions: actionRequests.map(() => ({ type: \"approve\" as const })),\n });\n },\n reject: (reason?: string) => {\n handleInterruptRespond({\n decisions: actionRequests.map(() => ({\n type: \"reject\" as const,\n message: reason || undefined,\n })),\n });\n },\n edit: (editedArgs: Record<string, unknown>) => {\n const action = actionRequests[0];\n handleInterruptRespond({\n decisions: [\n {\n type: \"edit\" as const,\n editedAction: {\n name: action?.name ?? \"\",\n args: { ...action?.args, ...editedArgs },\n },\n },\n ],\n });\n },\n };\n }, [stream.interrupt, handleInterruptRespond]);\n\n // Get the parent scroll container\n const getScrollContainer = useCallback(() => {\n if (containerRef.current) {\n // Find the parent with overflow-y-auto class\n let parent = containerRef.current.parentElement;\n while (parent) {\n const style = window.getComputedStyle(parent);\n if (style.overflowY === 'auto' || style.overflowY === 'scroll') {\n return parent;\n }\n parent = parent.parentElement;\n }\n }\n return null;\n }, []);\n\n useEffect(() => {\n if (memoMessages.length > 0 && setIsFirstMessage) {\n setIsFirstMessage(false);\n }\n }, [memoMessages.length, setIsFirstMessage]);\n\n // Memoize message rendering logic to prevent unnecessary re-renders\n const renderMessage = useCallback((msg: typeof messages[0], index: number, messagesArray: typeof messages) => {\n const isCurrentlyStreamingMessage = isLoading && index === messagesArray.length - 1 && msg.type === \"ai\";\n if (!msg.content.length && !isAiWithToolCalls(msg) && !isCurrentlyStreamingMessage) return null;\n\n if (msg.additional_kwargs?.hidden) {\n return null;\n }\n\n // Use message id or fallback to index for key\n const msgKey = msg.id ?? `msg-${index}`;\n const hasCustomComponentForMessage = (message: Message) =>\n typeof message.id === \"string\" && uiMessageIds.has(message.id);\n\n if (msg.type === \"human\") {\n return <HumanMessage key={msgKey} message={msg} fontSize={chatBodyProps?.fontSize} />;\n }\n\n // Skip standalone tool messages\n if (isToolMessage(msg)) {\n return null;\n }\n\n // Skip if this AI message was already combined with a previous one\n if (msg.type === \"ai\" && index > 0) {\n // Check if previous non-tool message is also an AI message\n let prevIndex = index - 1;\n while (prevIndex >= 0 && isToolMessage(messagesArray[prevIndex])) {\n prevIndex--;\n }\n\n if (prevIndex >= 0 && messagesArray[prevIndex].type === \"ai\") {\n // Only render separately if THIS message owns custom UI (needs its own group).\n // Otherwise it was already consumed by the previous group's forward scan.\n const currentHasCustomUi = hasCustomComponentForMessage(msg);\n if (!currentHasCustomUi) {\n return null;\n }\n }\n }\n\n const groupedTimelineMessages: Message[] = [msg];\n let nextIndex = index + 1;\n\n while (nextIndex < messagesArray.length) {\n const nextMsg = messagesArray[nextIndex];\n\n if (isToolMessage(nextMsg)) {\n groupedTimelineMessages.push(nextMsg);\n nextIndex++;\n } else if (nextMsg.type === \"ai\") {\n if (hasCustomComponentForMessage(nextMsg)) {\n // Sub-agent/custom UI messages should be rendered in their own section\n // to avoid parent-bubble flicker and reparenting during streaming.\n break;\n }\n groupedTimelineMessages.push(nextMsg);\n nextIndex++;\n } else {\n // Stop at human messages or other types\n break;\n }\n }\n\n const groupedAiMessages = groupedTimelineMessages.filter((m) => m.type === \"ai\");\n\n // Merge content from all AI messages, preserving reasoning blocks.\n // Deduplicate identical text content (subgraph messages can duplicate parent messages).\n const hasArrayContent = groupedAiMessages.some((m) => Array.isArray(m.content));\n const seenTexts = new Set<string>();\n const mergedContent: Message[\"content\"] = hasArrayContent\n ? groupedAiMessages.flatMap((m) => {\n if (Array.isArray(m.content)) {\n return (m.content as any[]).filter((block: any) => {\n if (block.type === \"text\" && typeof block.text === \"string\") {\n if (seenTexts.has(block.text)) return false;\n seenTexts.add(block.text);\n }\n return true;\n });\n }\n if (typeof m.content === \"string\" && m.content.length > 0) {\n if (seenTexts.has(m.content)) return [];\n seenTexts.add(m.content);\n return [{ type: \"text\", text: m.content }];\n }\n return [];\n })\n : (() => {\n const unique: string[] = [];\n for (const m of groupedAiMessages) {\n const text = typeof m.content === \"string\" ? m.content : \"\";\n if (text && !seenTexts.has(text)) {\n seenTexts.add(text);\n unique.push(text);\n }\n }\n return unique.join(\"\\n\\n\");\n })();\n\n // Extract plain-text portion for legacy checks\n const combinedContent = hasArrayContent\n ? (mergedContent as any[])\n .map((c: any) => (c.type === \"text\" ? (c.text as string) : \"\"))\n .filter(Boolean)\n .join(\" \")\n : (mergedContent as string);\n\n // Create a combined message object preserving full content (including thinking blocks)\n const combinedMessage = {\n ...msg,\n content: mergedContent,\n };\n\n // Get branch metadata from thread\n const meta = msg ? stream.getMessagesMetadata(msg) : undefined;\n\n // Determine if there is any displayable content (text OR thinking/reasoning blocks)\n const hasThinkingContent = hasArrayContent\n ? (mergedContent as any[]).some(\n (b: any) =>\n (b.type === \"thinking\" && (b.thinking as string)?.length > 0) ||\n (b.type === \"reasoning\" && (b.reasoning as string)?.length > 0),\n )\n : false;\n const hasKwargsReasoning =\n groupedAiMessages.some((m) => {\n const ak = (m as Record<string, unknown>).additional_kwargs as Record<string, unknown> | undefined;\n return typeof ak?.reasoning_content === \"string\" && (ak.reasoning_content as string).length > 0;\n });\n\n const hasKwargsToolStatus = groupedAiMessages.some((m) => {\n const ak = (m as Record<string, unknown>).additional_kwargs as Record<string, unknown> | undefined;\n return Array.isArray(ak?.tool_status) && (ak.tool_status as unknown[]).length > 0;\n });\n const hasToolMessages = groupedTimelineMessages.some((m) => isToolMessage(m));\n const hasToolCalls = enableToolCallIndicator && (\n groupedAiMessages.some((m) => isAiWithToolCalls(m)) ||\n hasKwargsToolStatus ||\n hasToolMessages\n );\n const hasAnyDisplayableContent =\n !!combinedContent ||\n hasThinkingContent ||\n hasKwargsReasoning ||\n hasToolCalls;\n\n const isLastMessageGroup = nextIndex >= messagesArray.length;\n const isStreamingThisMessage = isLoading && isLastMessageGroup;\n\n const groupKey = groupedAiMessages\n .map((m) => m.id)\n .filter((id): id is string => typeof id === \"string\" && id.length > 0)\n .join(\"|\") || msgKey;\n\n const todosForGroup = (() => {\n const frozen = frozenTodosByGroupRef.current.get(groupKey);\n if (!isStreamingThisMessage && frozen && frozen.length > 0) {\n return frozen;\n }\n\n if (isStreamingThisMessage) {\n const live = normalizeTodos(stream.values?.todos);\n if (live.length > 0) {\n frozenTodosByGroupRef.current.set(groupKey, live);\n return live;\n }\n }\n\n for (let i = groupedAiMessages.length - 1; i >= 0; i--) {\n const aiMeta = stream.getMessagesMetadata(groupedAiMessages[i]);\n const aiValues = aiMeta?.firstSeenState?.values as { todos?: unknown } | undefined;\n const snapshot = normalizeTodos(aiValues?.todos);\n if (snapshot.length > 0) {\n if (!frozen || frozen.length === 0) {\n frozenTodosByGroupRef.current.set(groupKey, snapshot);\n }\n return frozen ?? snapshot;\n }\n }\n\n if (frozen && frozen.length > 0) {\n return frozen;\n }\n\n return [];\n })();\n\n // Show Thinking animation whenever streaming with no displayable content yet (plain chat or tool-call)\n const showThinkingIndicator = isStreamingThisMessage && !hasAnyDisplayableContent;\n\n return (\n <React.Fragment key={msgKey}>\n {/* 1. Thinking indicator - show when streaming with no content yet (no icon shown) */}\n {showThinkingIndicator && (\n <Thinking />\n )}\n {/* 2. Agent message — pass full mergedContent and grouped timeline for in-order rendering */}\n {hasAnyDisplayableContent && (\n <AgentMessage\n agentName={chatBodyProps?.agentName}\n fontSize={chatBodyProps?.fontSize}\n message={combinedMessage}\n groupedMessages={groupedTimelineMessages}\n showToolActivity={enableToolCallIndicator}\n isStreaming={isStreamingThisMessage}\n onRegenerate={handleRegenerate}\n feedback={msg.id ? messageFeedback[msg.id] : undefined}\n onFeedback={handleFeedback}\n branch={meta?.branch}\n branchOptions={meta?.branchOptions}\n onBranchSelect={handleBranchSelect}\n todos={todosForGroup}\n />\n )}\n {/* 3. Custom component (from all messages in the group) */}\n {groupedAiMessages.map((m) => (\n <CustomComponentRender key={m.id} message={m} thread={stream} />\n ))}\n </React.Fragment>\n );\n }, [isLoading, stream, normalizeTodos, enableToolCallIndicator, handleRegenerate, messageFeedback, handleFeedback, handleBranchSelect, uiMessageIds]);\n\n // Memoize the rendered messages array\n const renderedMessages = useMemo(() => {\n return memoMessages.map((msg, index) => {\n const element = renderMessage(msg, index, memoMessages);\n // Ensure every element has a key, using message id or fallback to index\n if (element && !element.key) {\n return React.cloneElement(element, { key: msg.id ?? `msg-${index}` });\n }\n return element;\n });\n }, [memoMessages, renderMessage]);\n\n // Track user scroll position to determine if we should auto-scroll\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) return;\n\n const handleScroll = () => {\n const { scrollTop, scrollHeight, clientHeight } = scrollContainer;\n const distanceFromBottom = scrollHeight - scrollTop - clientHeight;\n // Consider \"at bottom\" if within 100px\n shouldAutoScrollRef.current = distanceFromBottom < 100;\n };\n\n scrollContainer.addEventListener('scroll', handleScroll);\n return () => scrollContainer.removeEventListener('scroll', handleScroll);\n }, [getScrollContainer]);\n\n // Auto-scroll when new messages are added\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) return;\n\n const currentCount = memoMessages.length;\n const hasNewMessage = currentCount > prevMessageCountRef.current;\n\n if (hasNewMessage) {\n scrollContainer.scrollTop = scrollContainer.scrollHeight;\n shouldAutoScrollRef.current = true;\n }\n\n prevMessageCountRef.current = currentCount;\n }, [memoMessages, getScrollContainer]);\n\n // Use MutationObserver to detect DOM changes and auto-scroll during streaming\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer || !isLoading) return;\n\n const observer = new MutationObserver(() => {\n if (shouldAutoScrollRef.current && scrollContainer) {\n scrollContainer.scrollTop = scrollContainer.scrollHeight;\n }\n });\n\n // Observe the ChatBody container for changes\n if (containerRef.current) {\n observer.observe(containerRef.current, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n\n return () => observer.disconnect();\n }, [isLoading, getScrollContainer]);\n\n // Use useLayoutEffect to scroll after DOM updates\n useLayoutEffect(() => {\n const scrollContainer = getScrollContainer();\n if (isLoading && shouldAutoScrollRef.current && scrollContainer) {\n scrollContainer.scrollTop = scrollContainer.scrollHeight;\n }\n });\n\n return (\n <div\n ref={containerRef}\n className=\"flex flex-col gap-4 rounded-4xl p-2\"\n >\n {memoMessages.length === 0 ? (\n <div className=\"flex items-center justify-center h-full text-zinc-500\">\n {isLoading ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"animate-spin h-5 w-5 border-2 border-zinc-500 border-t-transparent rounded-full\" />\n <span>Loading conversation...</span>\n </div>\n ) : (\n \"Start a conversation...\"\n )}\n </div>\n ) : (\n <>\n {renderedMessages}\n {/* Show HITL interrupt card when agent is paused for approval */}\n {/* Show thinking indicator when loading and last message is human (no AI response yet) */}\n {isLoading && memoMessages.length > 0 &&\n memoMessages[memoMessages.length - 1].type === \"human\" && (\n <Thinking />\n )}\n {!isLoading && stream.interrupt && interruptActions && (() => {\n const payload = stream.interrupt.value as any;\n const toolName = payload?.actionRequests?.[0]?.name;\n const InterruptComponent = toolName ? interruptComponents[toolName] : undefined;\n if (!InterruptComponent) return null;\n return <InterruptComponent interrupt={payload} actions={interruptActions} />;\n })()}\n </>\n )}\n\n </div>\n );\n}\n"],"names":["ChatBody","setIsFirstMessage","enableToolCallIndicator","chatBodyProps","stream","useStreamContext","interruptComponents","useCustomComponents","messages","isLoading","messageFeedback","setMessageFeedback","useState","logger","memoMessages","useMemo","uiMessageIds","ids","uiMessages","ui","uiObj","metadata","candidates","candidate","containerRef","useRef","prevMessageCountRef","shouldAutoScrollRef","frozenTodosByGroupRef","normalizeTodos","useCallback","todos","todo","index","t","status","handleFeedback","messageId","feedback","prev","handleRegenerate","parentCheckpoint","handleBranchSelect","branch","handleInterruptRespond","response","interruptActions","interrupt","actionRequests","reason","editedArgs","action","getScrollContainer","parent","style","useEffect","renderMessage","msg","messagesArray","isCurrentlyStreamingMessage","isAiWithToolCalls","msgKey","hasCustomComponentForMessage","message","HumanMessage","isToolMessage","prevIndex","groupedTimelineMessages","nextIndex","nextMsg","groupedAiMessages","m","hasArrayContent","seenTexts","mergedContent","block","unique","text","combinedContent","c","combinedMessage","meta","hasThinkingContent","b","hasKwargsReasoning","ak","hasKwargsToolStatus","hasToolMessages","hasToolCalls","hasAnyDisplayableContent","isLastMessageGroup","isStreamingThisMessage","groupKey","id","todosForGroup","frozen","live","i","aiValues","snapshot","showThinkingIndicator","jsxs","React","Thinking","jsx","AgentMessage","CustomComponentRender","renderedMessages","element","scrollContainer","handleScroll","scrollTop","scrollHeight","clientHeight","distanceFromBottom","currentCount","observer","useLayoutEffect","Fragment","payload","toolName","InterruptComponent"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBody.d.ts","sourceRoot":"","sources":["../../src/components/ChatBody.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD,OAAO,KAA6E,MAAM,OAAO,CAAC;AAOlG,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,iBAAiB,EAAE,uBAA8B,EAAE,aAAa,EAAE,EAAE;IAAE,iBAAiB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,2CAka7O"}
1
+ {"version":3,"file":"ChatBody.d.ts","sourceRoot":"","sources":["../../src/components/ChatBody.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,OAAO,KAA6E,MAAM,OAAO,CAAC;AAOlG,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,iBAAiB,EAAE,uBAA8B,EAAE,aAAa,EAAE,EAAE;IAAE,iBAAiB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CAAE,2CA6f7O"}