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
@@ -1,231 +1,258 @@
1
- import { jsx as l, jsxs as T, Fragment as oe } from "react/jsx-runtime";
2
- import { parsePartialJson as re } from "../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";
3
- import "../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";
4
- import "../_virtual/index.es.js";
5
- import "../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";
6
- import "../node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/_uuid.es.js";
7
- import "../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";
8
- import "../node_modules/.pnpm/langsmith@0.5.10_openai@6.16.0_zod@4.3.5_/node_modules/langsmith/dist/utils/p-queue.es.js";
9
- import "../_virtual/index.es2.js";
10
- import "../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";
11
- import "../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";
12
- import "../_virtual/index.es3.js";
13
- import "../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";
14
- import "../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";
15
- import { useStreamContext as se } from "../providers/Stream.es.js";
16
- import { useCustomComponents as ie } from "../providers/CustomComponentProvider.es.js";
17
- import { logger as ae } from "../utils/logger.es.js";
18
- import { isAiWithToolCalls as A, isToolMessage as M } from "../utils/utils.es.js";
19
- import D, { useState as le, useMemo as _, useRef as N, useCallback as d, useEffect as b, useLayoutEffect as ce } from "react";
20
- import ue from "./messages/AgentMessage.es.js";
21
- import pe from "./messages/CustomComponentRender.es.js";
22
- import me from "./messages/HumanMessage.es.js";
23
- import Y from "./Thinking.es.js";
24
- function Be({ setIsFirstMessage: k, enableToolCallIndicator: w = !0, chatBodyProps: S }) {
25
- const r = se(), { interruptComponents: $ } = ie(), R = r.messages, a = r.isLoading, [j, G] = le({});
26
- ae.debug("ChatBody render - messages count:", R, "isLoading:", a);
27
- const i = _(() => R ?? [], [R]), f = N(null), L = N(0), y = N(!0), E = d((e, o) => {
28
- G((n) => ({
29
- ...n,
30
- [e]: o
1
+ import { jsx as d, jsxs as F, Fragment as de } from "react/jsx-runtime";
2
+ import { useStreamContext as pe } from "../providers/Stream.es.js";
3
+ import { useCustomComponents as fe } from "../providers/CustomComponentProvider.es.js";
4
+ import { logger as ge } from "../utils/logger.es.js";
5
+ import { isAiWithToolCalls as W, isToolMessage as k } from "../utils/utils.es.js";
6
+ import J, { useState as he, useMemo as x, useRef as A, useCallback as g, useEffect as T, useLayoutEffect as me } from "react";
7
+ import ye from "./messages/AgentMessage.es.js";
8
+ import ve from "./messages/CustomComponentRender.es.js";
9
+ import Me from "./messages/HumanMessage.es.js";
10
+ import Q from "./Thinking.es.js";
11
+ function je({ setIsFirstMessage: R, enableToolCallIndicator: _ = !0, chatBodyProps: j }) {
12
+ const a = pe(), { interruptComponents: X } = fe(), N = a.messages, u = a.isLoading, [B, Z] = he({});
13
+ ge.debug("ChatBody render - messages count:", N, "isLoading:", u);
14
+ const c = x(() => N ?? [], [N]), q = x(() => {
15
+ const e = /* @__PURE__ */ new Set(), n = a.values?.ui;
16
+ if (!Array.isArray(n)) return e;
17
+ for (const o of n) {
18
+ const r = o, i = r.metadata && typeof r.metadata == "object" ? r.metadata : void 0, h = [
19
+ typeof r.id == "string" ? r.id : void 0,
20
+ typeof i?.id == "string" ? i.id : void 0,
21
+ typeof i?.message_id == "string" ? i.message_id : void 0
22
+ ];
23
+ for (const p of h)
24
+ p && e.add(p);
25
+ }
26
+ return e;
27
+ }, [a.values?.ui]), y = A(null), K = A(0), C = A(!0), z = A(/* @__PURE__ */ new Map()), L = g((e) => Array.isArray(e) ? e.map((n, o) => {
28
+ if (!n || typeof n != "object") return null;
29
+ const r = n, i = r.status;
30
+ return typeof r.content != "string" || i !== "pending" && i !== "in_progress" && i !== "completed" ? null : {
31
+ id: r.id && typeof r.id == "string" ? r.id : `todo-${o}`,
32
+ content: r.content,
33
+ status: i,
34
+ updatedAt: r.updatedAt instanceof Date || typeof r.updatedAt == "string" || typeof r.updatedAt == "number" ? r.updatedAt : void 0,
35
+ run_id: typeof r.run_id == "string" ? r.run_id : void 0,
36
+ runId: typeof r.runId == "string" ? r.runId : void 0,
37
+ messageId: typeof r.messageId == "string" ? r.messageId : void 0,
38
+ checkpoint: typeof r.checkpoint == "string" ? r.checkpoint : void 0
39
+ };
40
+ }).filter((n) => n !== null) : [], []), O = g((e, n) => {
41
+ Z((o) => ({
42
+ ...o,
43
+ [e]: n
31
44
  }));
32
- }, []), F = d(async (e) => {
45
+ }, []), D = g(async (e) => {
33
46
  if (!e) {
34
47
  console.error("No parent checkpoint available for regeneration");
35
48
  return;
36
49
  }
37
- await r.submit(void 0, {
50
+ await a.submit(void 0, {
38
51
  checkpoint: e,
39
52
  streamMode: ["values"],
40
53
  streamSubgraphs: !0,
41
54
  streamResumable: !0
42
55
  });
43
- }, [r]), z = d((e) => {
44
- r.setBranch(e);
45
- }, [r]), C = d((e) => {
46
- r.submit(null, { command: { resume: e } });
47
- }, [r]), B = _(() => {
48
- const e = r.interrupt;
56
+ }, [a]), G = g((e) => {
57
+ a.setBranch(e);
58
+ }, [a]), b = g((e) => {
59
+ a.submit(null, {
60
+ command: { resume: e },
61
+ streamMode: ["values", "messages-tuple", "updates", "custom"],
62
+ streamSubgraphs: !0
63
+ });
64
+ }, [a]), $ = x(() => {
65
+ const e = a.interrupt;
49
66
  if (!e) return null;
50
- const n = e.value?.actionRequests ?? [];
67
+ const o = e.value?.actionRequests ?? [];
51
68
  return {
52
69
  approve: () => {
53
- C({
54
- decisions: n.map(() => ({ type: "approve" }))
70
+ b({
71
+ decisions: o.map(() => ({ type: "approve" }))
55
72
  });
56
73
  },
57
- reject: (s) => {
58
- C({
59
- decisions: n.map(() => ({
74
+ reject: (r) => {
75
+ b({
76
+ decisions: o.map(() => ({
60
77
  type: "reject",
61
- message: s || void 0
78
+ message: r || void 0
62
79
  }))
63
80
  });
64
81
  },
65
- edit: (s) => {
66
- const p = n[0];
67
- C({
82
+ edit: (r) => {
83
+ const i = o[0];
84
+ b({
68
85
  decisions: [
69
86
  {
70
87
  type: "edit",
71
88
  editedAction: {
72
- name: p?.name ?? "",
73
- args: { ...p?.args, ...s }
89
+ name: i?.name ?? "",
90
+ args: { ...i?.args, ...r }
74
91
  }
75
92
  }
76
93
  ]
77
94
  });
78
95
  }
79
96
  };
80
- }, [r.interrupt, C]), I = d((e) => Array.isArray(e) ? e.filter(
81
- (n) => typeof n == "object" && n !== null && n.type === "tool_use" && n.id
82
- ).map((n) => {
83
- let s = {};
84
- if (n?.input)
85
- if (typeof n.input == "string")
86
- try {
87
- s = re(n.input) ?? {};
88
- } catch {
89
- s = {};
90
- }
91
- else typeof n.input == "object" && (s = n.input);
92
- return {
93
- name: n.name ?? "",
94
- id: n.id ?? "",
95
- args: s,
96
- type: "tool_call"
97
- };
98
- }) : [], []), u = d(() => {
99
- if (f.current) {
100
- let e = f.current.parentElement;
97
+ }, [a.interrupt, b]), f = g(() => {
98
+ if (y.current) {
99
+ let e = y.current.parentElement;
101
100
  for (; e; ) {
102
- const o = window.getComputedStyle(e);
103
- if (o.overflowY === "auto" || o.overflowY === "scroll")
101
+ const n = window.getComputedStyle(e);
102
+ if (n.overflowY === "auto" || n.overflowY === "scroll")
104
103
  return e;
105
104
  e = e.parentElement;
106
105
  }
107
106
  }
108
107
  return null;
109
108
  }, []);
110
- b(() => {
111
- i.length > 0 && k && k(!1);
112
- }, [i.length, k]);
113
- const H = d((e, o, n) => {
114
- const s = a && o === n.length - 1 && e.type === "ai";
115
- if (!e.content.length && !A(e) && !s || e.additional_kwargs?.hidden)
109
+ T(() => {
110
+ c.length > 0 && R && R(!1);
111
+ }, [c.length, R]);
112
+ const U = g((e, n, o) => {
113
+ const r = u && n === o.length - 1 && e.type === "ai";
114
+ if (!e.content.length && !W(e) && !r || e.additional_kwargs?.hidden)
116
115
  return null;
117
- const p = e.id ?? `msg-${o}`;
116
+ const i = e.id ?? `msg-${n}`, h = (t) => typeof t.id == "string" && q.has(t.id);
118
117
  if (e.type === "human")
119
- return /* @__PURE__ */ l(me, { message: e, fontSize: S?.fontSize }, p);
120
- if (M(e))
118
+ return /* @__PURE__ */ d(Me, { message: e, fontSize: j?.fontSize }, i);
119
+ if (k(e))
121
120
  return null;
122
- if (e.type === "ai" && o > 0) {
123
- let t = o - 1;
124
- for (; t >= 0 && M(n[t]); )
121
+ if (e.type === "ai" && n > 0) {
122
+ let t = n - 1;
123
+ for (; t >= 0 && k(o[t]); )
125
124
  t--;
126
- if (t >= 0 && n[t].type === "ai")
125
+ if (t >= 0 && o[t].type === "ai" && !h(e))
127
126
  return null;
128
127
  }
129
- const m = [e];
130
- let h = o + 1;
131
- for (; h < n.length; ) {
132
- const t = n[h];
133
- if (M(t))
134
- m.push(t), h++;
135
- else if (t.type === "ai")
136
- m.push(t), h++;
137
- else
128
+ const p = [e];
129
+ let v = n + 1;
130
+ for (; v < o.length; ) {
131
+ const t = o[v];
132
+ if (k(t))
133
+ p.push(t), v++;
134
+ else if (t.type === "ai") {
135
+ if (h(t))
136
+ break;
137
+ p.push(t), v++;
138
+ } else
138
139
  break;
139
140
  }
140
- const c = m.filter((t) => t.type === "ai"), W = m.filter((t) => M(t)), x = c.some((t) => Array.isArray(t.content)), v = x ? c.flatMap((t) => Array.isArray(t.content) ? t.content : typeof t.content == "string" && t.content.length > 0 ? [{ type: "text", text: t.content }] : []) : c.map((t) => typeof t.content == "string" ? t.content : "").filter(Boolean).join(`
141
+ const l = p.filter((t) => t.type === "ai"), H = l.some((t) => Array.isArray(t.content)), m = /* @__PURE__ */ new Set(), S = H ? l.flatMap((t) => Array.isArray(t.content) ? t.content.filter((s) => {
142
+ if (s.type === "text" && typeof s.text == "string") {
143
+ if (m.has(s.text)) return !1;
144
+ m.add(s.text);
145
+ }
146
+ return !0;
147
+ }) : typeof t.content == "string" && t.content.length > 0 ? m.has(t.content) ? [] : (m.add(t.content), [{ type: "text", text: t.content }]) : []) : (() => {
148
+ const t = [];
149
+ for (const s of l) {
150
+ const M = typeof s.content == "string" ? s.content : "";
151
+ M && !m.has(M) && (m.add(M), t.push(M));
152
+ }
153
+ return t.join(`
141
154
 
142
- `), Q = x ? v.map((t) => t.type === "text" ? t.text : "").filter(Boolean).join(" ") : v, U = c.flatMap((t) => I(t.content) || []).filter((t) => t != null && t !== void 0), V = {
155
+ `);
156
+ })(), ee = H ? S.map((t) => t.type === "text" ? t.text : "").filter(Boolean).join(" ") : S, te = {
143
157
  ...e,
144
- content: v
145
- }, q = e ? r.getMessagesMetadata(e) : void 0, X = x ? v.some(
158
+ content: S
159
+ }, Y = e ? a.getMessagesMetadata(e) : void 0, ne = H ? S.some(
146
160
  (t) => t.type === "thinking" && t.thinking?.length > 0 || t.type === "reasoning" && t.reasoning?.length > 0
147
- ) : !1, Z = c.some((t) => {
148
- const g = t.additional_kwargs;
149
- return typeof g?.reasoning_content == "string" && g.reasoning_content.length > 0;
150
- }), P = c.some((t) => {
151
- const g = t.additional_kwargs;
152
- return Array.isArray(g?.tool_status) && g.tool_status.length > 0;
153
- }), ee = c.some((t) => A(t)) || U.length > 0 || W.length > 0 || P, K = !!Q || X || Z || w && ee, te = h >= n.length, O = a && te, ne = O && !K;
154
- return /* @__PURE__ */ T(D.Fragment, { children: [
155
- ne && /* @__PURE__ */ l(Y, {}),
156
- K && /* @__PURE__ */ l(
157
- ue,
161
+ ) : !1, re = l.some((t) => {
162
+ const s = t.additional_kwargs;
163
+ return typeof s?.reasoning_content == "string" && s.reasoning_content.length > 0;
164
+ }), oe = l.some((t) => {
165
+ const s = t.additional_kwargs;
166
+ return Array.isArray(s?.tool_status) && s.tool_status.length > 0;
167
+ }), se = p.some((t) => k(t)), ae = _ && (l.some((t) => W(t)) || oe || se), V = !!ee || ne || re || ae, ie = v >= o.length, w = u && ie, I = l.map((t) => t.id).filter((t) => typeof t == "string" && t.length > 0).join("|") || i, ce = (() => {
168
+ const t = z.current.get(I);
169
+ if (!w && t && t.length > 0)
170
+ return t;
171
+ if (w) {
172
+ const s = L(a.values?.todos);
173
+ if (s.length > 0)
174
+ return z.current.set(I, s), s;
175
+ }
176
+ for (let s = l.length - 1; s >= 0; s--) {
177
+ const le = a.getMessagesMetadata(l[s])?.firstSeenState?.values, E = L(le?.todos);
178
+ if (E.length > 0)
179
+ return (!t || t.length === 0) && z.current.set(I, E), t ?? E;
180
+ }
181
+ return t && t.length > 0 ? t : [];
182
+ })(), ue = w && !V;
183
+ return /* @__PURE__ */ F(J.Fragment, { children: [
184
+ ue && /* @__PURE__ */ d(Q, {}),
185
+ V && /* @__PURE__ */ d(
186
+ ye,
158
187
  {
159
- agentName: S?.agentName,
160
- fontSize: S?.fontSize,
161
- message: V,
162
- groupedMessages: m,
163
- showToolActivity: w,
164
- isStreaming: O,
165
- onRegenerate: F,
166
- feedback: e.id ? j[e.id] : void 0,
167
- onFeedback: E,
168
- branch: q?.branch,
169
- branchOptions: q?.branchOptions,
170
- onBranchSelect: z
188
+ agentName: j?.agentName,
189
+ fontSize: j?.fontSize,
190
+ message: te,
191
+ groupedMessages: p,
192
+ showToolActivity: _,
193
+ isStreaming: w,
194
+ onRegenerate: D,
195
+ feedback: e.id ? B[e.id] : void 0,
196
+ onFeedback: O,
197
+ branch: Y?.branch,
198
+ branchOptions: Y?.branchOptions,
199
+ onBranchSelect: G,
200
+ todos: ce
171
201
  }
172
202
  ),
173
- c.map((t) => /* @__PURE__ */ l(pe, { message: t, thread: r }, t.id))
174
- ] }, p);
175
- }, [a, r, w, F, j, E, z]), J = _(() => i.map((e, o) => {
176
- const n = H(e, o, i);
177
- return n && !n.key ? D.cloneElement(n, { key: e.id ?? `msg-${o}` }) : n;
178
- }), [i, H]);
179
- return b(() => {
180
- const e = u();
203
+ l.map((t) => /* @__PURE__ */ d(ve, { message: t, thread: a }, t.id))
204
+ ] }, i);
205
+ }, [u, a, L, _, D, B, O, G, q]), P = x(() => c.map((e, n) => {
206
+ const o = U(e, n, c);
207
+ return o && !o.key ? J.cloneElement(o, { key: e.id ?? `msg-${n}` }) : o;
208
+ }), [c, U]);
209
+ return T(() => {
210
+ const e = f();
181
211
  if (!e) return;
182
- const o = () => {
183
- const { scrollTop: n, scrollHeight: s, clientHeight: p } = e, m = s - n - p;
184
- y.current = m < 100;
212
+ const n = () => {
213
+ const { scrollTop: o, scrollHeight: r, clientHeight: i } = e, h = r - o - i;
214
+ C.current = h < 100;
185
215
  };
186
- return e.addEventListener("scroll", o), () => e.removeEventListener("scroll", o);
187
- }, [u]), b(() => {
188
- const e = u();
216
+ return e.addEventListener("scroll", n), () => e.removeEventListener("scroll", n);
217
+ }, [f]), T(() => {
218
+ const e = f();
189
219
  if (!e) return;
190
- const o = i.length;
191
- o > L.current && (e.scrollTop = e.scrollHeight, y.current = !0), L.current = o;
192
- }, [i, u]), b(() => {
193
- const e = u();
194
- if (!e || !a) return;
195
- const o = new MutationObserver(() => {
196
- y.current && e && (e.scrollTop = e.scrollHeight);
220
+ const n = c.length;
221
+ n > K.current && (e.scrollTop = e.scrollHeight, C.current = !0), K.current = n;
222
+ }, [c, f]), T(() => {
223
+ const e = f();
224
+ if (!e || !u) return;
225
+ const n = new MutationObserver(() => {
226
+ C.current && e && (e.scrollTop = e.scrollHeight);
197
227
  });
198
- return f.current && o.observe(f.current, {
228
+ return y.current && n.observe(y.current, {
199
229
  childList: !0,
200
230
  subtree: !0,
201
231
  characterData: !0
202
- }), () => o.disconnect();
203
- }, [a, u]), ce(() => {
204
- const e = u();
205
- a && y.current && e && (e.scrollTop = e.scrollHeight);
206
- }), /* @__PURE__ */ l(
232
+ }), () => n.disconnect();
233
+ }, [u, f]), me(() => {
234
+ const e = f();
235
+ u && C.current && e && (e.scrollTop = e.scrollHeight);
236
+ }), /* @__PURE__ */ d(
207
237
  "div",
208
238
  {
209
- ref: f,
239
+ ref: y,
210
240
  className: "flex flex-col gap-4 rounded-4xl p-2",
211
- children: i.length === 0 ? /* @__PURE__ */ l("div", { className: "flex items-center justify-center h-full text-zinc-500", children: a ? /* @__PURE__ */ T("div", { className: "flex items-center gap-2", children: [
212
- /* @__PURE__ */ l("div", { className: "animate-spin h-5 w-5 border-2 border-zinc-500 border-t-transparent rounded-full" }),
213
- /* @__PURE__ */ l("span", { children: "Loading conversation..." })
214
- ] }) : "Start a conversation..." }) : /* @__PURE__ */ T(oe, { children: [
215
- J,
216
- !a && r.interrupt && B && (() => {
217
- const e = r.interrupt.value, o = e?.actionRequests?.[0]?.name, n = o ? $[o] : void 0;
218
- return n ? /* @__PURE__ */ l(n, { interrupt: e, actions: B }) : null;
219
- })(),
220
- a && i.length > 0 && (() => {
221
- const e = i[i.length - 1];
222
- return e.type === "human" || e.type === "ai" && !e.content && A(e);
223
- })() && /* @__PURE__ */ l(Y, {})
241
+ children: c.length === 0 ? /* @__PURE__ */ d("div", { className: "flex items-center justify-center h-full text-zinc-500", children: u ? /* @__PURE__ */ F("div", { className: "flex items-center gap-2", children: [
242
+ /* @__PURE__ */ d("div", { className: "animate-spin h-5 w-5 border-2 border-zinc-500 border-t-transparent rounded-full" }),
243
+ /* @__PURE__ */ d("span", { children: "Loading conversation..." })
244
+ ] }) : "Start a conversation..." }) : /* @__PURE__ */ F(de, { children: [
245
+ P,
246
+ u && c.length > 0 && c[c.length - 1].type === "human" && /* @__PURE__ */ d(Q, {}),
247
+ !u && a.interrupt && $ && (() => {
248
+ const e = a.interrupt.value, n = e?.actionRequests?.[0]?.name, o = n ? X[n] : void 0;
249
+ return o ? /* @__PURE__ */ d(o, { interrupt: e, actions: $ }) : null;
250
+ })()
224
251
  ] })
225
252
  }
226
253
  );
227
254
  }
228
255
  export {
229
- Be as default
256
+ je as default
230
257
  };
231
258
  //# sourceMappingURL=ChatBody.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBody.es.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":";;;;;;;;;;;;;;;;;;;;;;;AAcA,SAAwBA,GAAS,EAAE,mBAAAC,GAAmB,yBAAAC,IAA0B,IAAM,eAAAC,KAA0J;AAC9O,QAAMC,IAASC,GAAA,GACT,EAAE,qBAAAC,EAAA,IAAwBC,GAAA,GAC1BC,IAAWJ,EAAO,UAClBK,IAAYL,EAAO,WAGnB,CAACM,GAAiBC,CAAkB,IAAIC,GAA0C,CAAA,CAAE;AAE1F,EAAAC,GAAO,MAAM,qCAAqCL,GAAU,cAAcC,CAAS;AAGnF,QAAMK,IAAeC,EAAQ,MAAMP,KAAY,CAAA,GAAI,CAACA,CAAQ,CAAC,GAEvDQ,IAAeC,EAA8B,IAAI,GACjDC,IAAsBD,EAAO,CAAC,GAC9BE,IAAsBF,EAAO,EAAI,GAGjCG,IAAiBC,EAAY,CAACC,GAAmBC,MAA8B;AACnF,IAAAZ,EAAmB,CAAAa,OAAS;AAAA,MAC1B,GAAGA;AAAA,MACH,CAACF,CAAS,GAAGC;AAAA,IAAA,EACb;AAAA,EACJ,GAAG,CAAA,CAAE,GAGCE,IAAmBJ,EAAY,OACnCK,MACG;AACH,QAAI,CAACA,GAAkB;AACrB,cAAQ,MAAM,iDAAiD;AAC/D;AAAA,IACF;AAEA,UAAMtB,EAAO,OAAO,QAAW;AAAA,MAC7B,YAAYsB;AAAA,MACZ,YAAY,CAAC,QAAQ;AAAA,MACrB,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,IAAA,CAClB;AAAA,EACH,GAAG,CAACtB,CAAM,CAAC,GAGLuB,IAAqBN,EAAY,CAACO,MAAmB;AACzD,IAAAxB,EAAO,UAAUwB,CAAM;AAAA,EACzB,GAAG,CAACxB,CAAM,CAAC,GAGLyB,IAAyBR,EAAY,CAACS,MAAkB;AAC5D,IAAA1B,EAAO,OAAO,MAAM,EAAE,SAAS,EAAE,QAAQ0B,EAAA,GAAY;AAAA,EACvD,GAAG,CAAC1B,CAAM,CAAC,GAGL2B,IAAmBhB,EAAQ,MAAM;AACrC,UAAMiB,IAAY5B,EAAO;AACzB,QAAI,CAAC4B,EAAW,QAAO;AAEvB,UAAMC,IADUD,EAAU,OACM,kBAAkB,CAAA;AAClD,WAAO;AAAA,MACL,SAAS,MAAM;AACb,QAAAH,EAAuB;AAAA,UACrB,WAAWI,EAAe,IAAI,OAAO,EAAE,MAAM,YAAqB;AAAA,QAAA,CACnE;AAAA,MACH;AAAA,MACA,QAAQ,CAACC,MAAoB;AAC3B,QAAAL,EAAuB;AAAA,UACrB,WAAWI,EAAe,IAAI,OAAO;AAAA,YACnC,MAAM;AAAA,YACN,SAASC,KAAU;AAAA,UAAA,EACnB;AAAA,QAAA,CACH;AAAA,MACH;AAAA,MACA,MAAM,CAACC,MAAwC;AAC7C,cAAMC,IAASH,EAAe,CAAC;AAC/B,QAAAJ,EAAuB;AAAA,UACrB,WAAW;AAAA,YACT;AAAA,cACE,MAAM;AAAA,cACN,cAAc;AAAA,gBACZ,MAAMO,GAAQ,QAAQ;AAAA,gBACtB,MAAM,EAAE,GAAGA,GAAQ,MAAM,GAAGD,EAAA;AAAA,cAAW;AAAA,YACzC;AAAA,UACF;AAAA,QACF,CACD;AAAA,MACH;AAAA,IAAA;AAAA,EAEJ,GAAG,CAAC/B,EAAO,WAAWyB,CAAsB,CAAC,GAEvCQ,IAA0BhB,EAAY,CAACiB,MACtC,MAAM,QAAQA,CAAO,IACDA,EAAQ;AAAA,IAC/B,CAACC,MAAM,OAAOA,KAAM,YAAYA,MAAM,QAASA,EAAU,SAAS,cAAeA,EAAU;AAAA,EAAA,EAGrE,IAAI,CAACC,MAAO;AAClC,QAAIC,IAA4B,CAAA;AAChC,QAAID,GAAI;AACN,UAAI,OAAOA,EAAG,SAAU;AACtB,YAAI;AACF,UAAAC,IAAOC,GAAiBF,EAAG,KAAK,KAAK,CAAA;AAAA,QACvC,QAAQ;AACN,UAAAC,IAAO,CAAA;AAAA,QACT;AAAA,UACF,CAAW,OAAOD,EAAG,SAAU,aAC7BC,IAAOD,EAAG;AAGd,WAAO;AAAA,MACL,MAAMA,EAAG,QAAQ;AAAA,MACjB,IAAIA,EAAG,MAAM;AAAA,MACb,MAAAC;AAAA,MACA,MAAM;AAAA,IAAA;AAAA,EAEV,CAAC,IAxBmC,CAAA,GAyBnC,CAAA,CAAE,GAGCE,IAAqBtB,EAAY,MAAM;AAC3C,QAAIL,EAAa,SAAS;AAExB,UAAI4B,IAAS5B,EAAa,QAAQ;AAClC,aAAO4B,KAAQ;AACb,cAAMC,IAAQ,OAAO,iBAAiBD,CAAM;AAC5C,YAAIC,EAAM,cAAc,UAAUA,EAAM,cAAc;AACpD,iBAAOD;AAET,QAAAA,IAASA,EAAO;AAAA,MAClB;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAA,CAAE;AAEL,EAAAE,EAAU,MAAM;AACd,IAAIhC,EAAa,SAAS,KAAKb,KAC7BA,EAAkB,EAAK;AAAA,EAE3B,GAAG,CAACa,EAAa,QAAQb,CAAiB,CAAC;AAG3C,QAAM8C,IAAgB1B,EAAY,CAAC2B,GAAyBC,GAAeC,MAAmC;AAC5G,UAAMC,IAA8B1C,KAAawC,MAAUC,EAAc,SAAS,KAAKF,EAAI,SAAS;AAGpG,QAFI,CAACA,EAAI,QAAQ,UAAU,CAACI,EAAkBJ,CAAG,KAAK,CAACG,KAEnDH,EAAI,mBAAmB;AACzB,aAAO;AAIT,UAAMK,IAASL,EAAI,MAAM,OAAOC,CAAK;AAErC,QAAID,EAAI,SAAS;AACf,+BAAQM,IAAA,EAA0B,SAASN,GAAK,UAAU7C,GAAe,YAA/CkD,CAAyD;AAIrF,QAAIE,EAAcP,CAAG;AACnB,aAAO;AAIT,QAAIA,EAAI,SAAS,QAAQC,IAAQ,GAAG;AAElC,UAAIO,IAAYP,IAAQ;AACxB,aAAOO,KAAa,KAAKD,EAAcL,EAAcM,CAAS,CAAC;AAC7D,QAAAA;AAGF,UAAIA,KAAa,KAAKN,EAAcM,CAAS,EAAE,SAAS;AAEtD,eAAO;AAAA,IAEX;AAEA,UAAMC,IAAqC,CAACT,CAAG;AAC/C,QAAIU,IAAYT,IAAQ;AAExB,WAAOS,IAAYR,EAAc,UAAQ;AACvC,YAAMS,IAAUT,EAAcQ,CAAS;AAEvC,UAAIH,EAAcI,CAAO;AACvB,QAAAF,EAAwB,KAAKE,CAAO,GACpCD;AAAA,eACSC,EAAQ,SAAS;AAC1B,QAAAF,EAAwB,KAAKE,CAAO,GACpCD;AAAA;AAGA;AAAA,IAEJ;AAEA,UAAME,IAAoBH,EAAwB,OAAO,CAACI,MAAMA,EAAE,SAAS,IAAI,GACzEC,IAAeL,EAAwB,OAAO,CAACI,MAAMN,EAAcM,CAAC,CAAC,GAGrEE,IAAkBH,EAAkB,KAAK,CAACC,MAAM,MAAM,QAAQA,EAAE,OAAO,CAAC,GACxEG,IAAoCD,IACtCH,EAAkB,QAAQ,CAACC,MACrB,MAAM,QAAQA,EAAE,OAAO,IAAUA,EAAE,UACnC,OAAOA,EAAE,WAAY,YAAYA,EAAE,QAAQ,SAAS,IAC/C,CAAC,EAAE,MAAM,QAAQ,MAAMA,EAAE,SAAS,IACpC,CAAA,CACR,IACDD,EACG,IAAI,CAACC,MAAO,OAAOA,EAAE,WAAY,WAAWA,EAAE,UAAU,EAAG,EAC3D,OAAO,OAAO,EACd,KAAK;AAAA;AAAA,CAAM,GAGZI,IAAkBF,IACnBC,EACE,IAAI,CAACzB,MAAYA,EAAE,SAAS,SAAUA,EAAE,OAAkB,EAAG,EAC7D,OAAO,OAAO,EACd,KAAK,GAAG,IACVyB,GAECE,IAAuBN,EAC1B,QAAQ,CAACC,MACMxB,EAAwBwB,EAAE,OAAO,KAC/B,CAAA,CACjB,EACA,OAAO,CAACrB,MAAqCA,KAAM,QAAQA,MAAO,MAAS,GAGxE2B,IAAkB;AAAA,MACtB,GAAGnB;AAAA,MACH,SAASgB;AAAA,IAAA,GAILI,IAAOpB,IAAM5C,EAAO,oBAAoB4C,CAAG,IAAI,QAG/CqB,IAAqBN,IACtBC,EAAwB;AAAA,MACvB,CAACM,MACEA,EAAE,SAAS,cAAeA,EAAE,UAAqB,SAAS,KAC1DA,EAAE,SAAS,eAAgBA,EAAE,WAAsB,SAAS;AAAA,IAAA,IAEjE,IACEC,IACJX,EAAkB,KAAK,CAACC,MAAM;AAC5B,YAAMW,IAAMX,EAA8B;AAC1C,aAAO,OAAOW,GAAI,qBAAsB,YAAaA,EAAG,kBAA6B,SAAS;AAAA,IAChG,CAAC,GACGC,IAAsBb,EAAkB,KAAK,CAACC,MAAM;AACxD,YAAMW,IAAMX,EAA8B;AAC1C,aAAO,MAAM,QAAQW,GAAI,WAAW,KAAMA,EAAG,YAA0B,SAAS;AAAA,IAClF,CAAC,GAEKE,KACJd,EAAkB,KAAK,CAACC,MAAMT,EAAkBS,CAAC,CAAC,KAClDK,EAAqB,SAAS,KAC9BJ,EAAa,SAAS,KACtBW,GAEIE,IACJ,CAAC,CAACV,KACFI,KACAE,KACCrE,KAA2BwE,IAExBE,KAAqBlB,KAAaR,EAAc,QAChD2B,IAAyBpE,KAAamE,IAGtCE,KAAwBD,KAA0B,CAACF;AAEzD,WACE,gBAAAI,EAACC,EAAM,UAAN,EAEE,UAAA;AAAA,MAAAF,wBACEG,GAAA,EAAS;AAAA,MAGXN,KACC,gBAAAO;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,WAAWhF,GAAe;AAAA,UAC1B,UAAUA,GAAe;AAAA,UAEzB,SAASgE;AAAA,UACT,iBAAiBV;AAAA,UACjB,kBAAkBvD;AAAA,UAClB,aAAa2E;AAAA,UACb,cAAcpD;AAAA,UACd,UAAUuB,EAAI,KAAKtC,EAAgBsC,EAAI,EAAE,IAAI;AAAA,UAC7C,YAAY5B;AAAA,UACZ,QAAQgD,GAAM;AAAA,UACd,eAAeA,GAAM;AAAA,UACrB,gBAAgBzC;AAAA,QAAA;AAAA,MAAA;AAAA,MAInBiC,EAAkB,IAAI,CAACC,MACtB,gBAAAqB,EAACE,IAAA,EAAiC,SAASvB,GAAG,QAAQzD,KAA1ByD,EAAE,EAAgC,CAC/D;AAAA,IAAA,EAAA,GA1BkBR,CA2BrB;AAAA,EAEJ,GAAG,CAAC5C,GAAWL,GAAQF,GAAyBuB,GAAkBf,GAAiBU,GAAgBO,CAAkB,CAAC,GAGhH0D,IAAmBtE,EAAQ,MACxBD,EAAa,IAAI,CAACkC,GAAKC,MAAU;AACtC,UAAMqC,IAAUvC,EAAcC,GAAKC,GAAOnC,CAAY;AAEtD,WAAIwE,KAAW,CAACA,EAAQ,MACfN,EAAM,aAAaM,GAAS,EAAE,KAAKtC,EAAI,MAAM,OAAOC,CAAK,GAAA,CAAI,IAE/DqC;AAAA,EACT,CAAC,GACA,CAACxE,GAAciC,CAAa,CAAC;AAGhC,SAAAD,EAAU,MAAM;AACd,UAAMyC,IAAkB5C,EAAA;AACxB,QAAI,CAAC4C,EAAiB;AAEtB,UAAMC,IAAe,MAAM;AACzB,YAAM,EAAE,WAAAC,GAAW,cAAAC,GAAc,cAAAC,EAAA,IAAiBJ,GAC5CK,IAAqBF,IAAeD,IAAYE;AAEtD,MAAAxE,EAAoB,UAAUyE,IAAqB;AAAA,IACrD;AAEA,WAAAL,EAAgB,iBAAiB,UAAUC,CAAY,GAChD,MAAMD,EAAgB,oBAAoB,UAAUC,CAAY;AAAA,EACzE,GAAG,CAAC7C,CAAkB,CAAC,GAGvBG,EAAU,MAAM;AACd,UAAMyC,IAAkB5C,EAAA;AACxB,QAAI,CAAC4C,EAAiB;AAEtB,UAAMM,IAAe/E,EAAa;AAGlC,IAFsB+E,IAAe3E,EAAoB,YAGvDqE,EAAgB,YAAYA,EAAgB,cAC5CpE,EAAoB,UAAU,KAGhCD,EAAoB,UAAU2E;AAAA,EAChC,GAAG,CAAC/E,GAAc6B,CAAkB,CAAC,GAGrCG,EAAU,MAAM;AACd,UAAMyC,IAAkB5C,EAAA;AACxB,QAAI,CAAC4C,KAAmB,CAAC9E,EAAW;AAEpC,UAAMqF,IAAW,IAAI,iBAAiB,MAAM;AAC1C,MAAI3E,EAAoB,WAAWoE,MACjCA,EAAgB,YAAYA,EAAgB;AAAA,IAEhD,CAAC;AAGD,WAAIvE,EAAa,WACf8E,EAAS,QAAQ9E,EAAa,SAAS;AAAA,MACrC,WAAW;AAAA,MACX,SAAS;AAAA,MACT,eAAe;AAAA,IAAA,CAChB,GAGI,MAAM8E,EAAS,WAAA;AAAA,EACxB,GAAG,CAACrF,GAAWkC,CAAkB,CAAC,GAGlCoD,GAAgB,MAAM;AACpB,UAAMR,IAAkB5C,EAAA;AACxB,IAAIlC,KAAaU,EAAoB,WAAWoE,MAC9CA,EAAgB,YAAYA,EAAgB;AAAA,EAEhD,CAAC,GAGC,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKlE;AAAA,MACL,WAAU;AAAA,MAET,UAAAF,EAAa,WAAW,IACvB,gBAAAoE,EAAC,OAAA,EAAI,WAAU,yDACZ,UAAAzE,IACC,gBAAAsE,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,QAAA,gBAAAG,EAAC,OAAA,EAAI,WAAU,kFAAA,CAAkF;AAAA,QACjG,gBAAAA,EAAC,UAAK,UAAA,0BAAA,CAAuB;AAAA,MAAA,EAAA,CAC/B,IAEA,0BAAA,CAEJ,IAEA,gBAAAH,EAAAiB,IAAA,EACG,UAAA;AAAA,QAAAX;AAAA,QAEA,CAAC5E,KAAaL,EAAO,aAAa2B,MAAqB,MAAM;AAC5D,gBAAMkE,IAAU7F,EAAO,UAAU,OAC3B8F,IAAWD,GAAS,iBAAiB,CAAC,GAAG,MACzCE,IAAqBD,IAAW5F,EAAoB4F,CAAQ,IAAI;AACtE,iBAAKC,IACE,gBAAAjB,EAACiB,GAAA,EAAmB,WAAWF,GAAS,SAASlE,GAAkB,IAD1C;AAAA,QAElC,GAAA;AAAA,QAECtB,KAAaK,EAAa,SAAS,MAAM,MAAM;AAC9C,gBAAMsF,IAAUtF,EAAaA,EAAa,SAAS,CAAC;AAEpD,iBAAOsF,EAAQ,SAAS,WACrBA,EAAQ,SAAS,QAAQ,CAACA,EAAQ,WAAWhD,EAAkBgD,CAAO;AAAA,QAC3E,GAAA,KACI,gBAAAlB,EAACD,GAAA,CAAA,CAAS;AAAA,MAAA,EAAA,CAEhB;AAAA,IAAA;AAAA,EAAA;AAKR;"}
1
+ {"version":3,"file":"ChatBody.es.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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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("react/jsx-runtime"),t=require("lucide-react"),o={completed:{icon:t.CheckCircle2,iconClass:"text-emerald-400",textClass:"text-zinc-400 line-through"},in_progress:{icon:t.Loader2,iconClass:"text-blue-400 animate-spin",textClass:"text-zinc-100"},pending:{icon:t.Circle,iconClass:"text-zinc-500",textClass:"text-zinc-400"}};function d({todos:n}){if(!n.length)return null;const c=n.filter(s=>s.status==="completed").length,l=n.find(s=>s.status==="in_progress"),r=Math.round(c/n.length*100);return e.jsxs("div",{className:"mb-3 w-full max-w-full rounded-2xl border border-zinc-700/60 bg-zinc-950/35 px-4 py-3.5 shadow-[0_10px_30px_rgba(0,0,0,0.25)] backdrop-blur-sm",children:[e.jsxs("div",{className:"mb-3 flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 text-zinc-200",children:[e.jsx(t.Sparkles,{className:"h-3.5 w-3.5 text-cyan-300/90"}),e.jsx("span",{className:"text-xs font-semibold uppercase tracking-[0.14em] text-zinc-300",children:"Agent Plan"})]}),e.jsx("p",{className:"mt-1 truncate text-xs text-zinc-400",children:l?`Now: ${l.content}`:"Wrapping up remaining steps"})]}),e.jsxs("div",{className:"rounded-lg border border-zinc-700/80 bg-zinc-900/70 px-2.5 py-1 text-[11px] font-medium text-zinc-300",children:[c,"/",n.length," done"]})]}),e.jsx("div",{className:"mb-3 h-1.5 overflow-hidden rounded-full bg-zinc-800/80",children:e.jsx("div",{className:"h-full rounded-full bg-linear-to-r from-cyan-400 to-emerald-400 transition-all duration-500",style:{width:`${r}%`}})}),e.jsx("ul",{className:"space-y-1.5",children:n.map(s=>{const i=o[s.status],a=i.icon;return e.jsxs("li",{className:"group flex items-center gap-2 rounded-lg border border-zinc-800/80 bg-zinc-900/45 px-2.5 py-2 transition-colors duration-200 hover:border-zinc-700/80",children:[e.jsx(a,{className:`h-3.5 w-3.5 flex-shrink-0 ${i.iconClass}`}),e.jsx("span",{className:`line-clamp-1 text-xs ${i.textClass}`,children:s.content})]},s.id)})})]})}module.exports=d;
2
+ //# sourceMappingURL=TodoList.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TodoList.cjs.js","sources":["../../src/components/TodoList.tsx"],"sourcesContent":["import type { TodoItem } from \"@/providers/Stream\";\nimport { CheckCircle2, Circle, Loader2, Sparkles } from \"lucide-react\";\n\nconst statusConfig = {\n completed: {\n icon: CheckCircle2,\n iconClass: \"text-emerald-400\",\n textClass: \"text-zinc-400 line-through\",\n },\n in_progress: {\n icon: Loader2,\n iconClass: \"text-blue-400 animate-spin\",\n textClass: \"text-zinc-100\",\n },\n pending: {\n icon: Circle,\n iconClass: \"text-zinc-500\",\n textClass: \"text-zinc-400\",\n },\n} as const;\n\nexport default function TodoList({ todos }: { todos: TodoItem[] }) {\n if (!todos.length) return null;\n\n const completed = todos.filter((t) => t.status === \"completed\").length;\n const inProgress = todos.find((t) => t.status === \"in_progress\");\n const percentage = Math.round((completed / todos.length) * 100);\n\n return (\n <div className=\"mb-3 w-full max-w-full rounded-2xl border border-zinc-700/60 bg-zinc-950/35 px-4 py-3.5 shadow-[0_10px_30px_rgba(0,0,0,0.25)] backdrop-blur-sm\">\n <div className=\"mb-3 flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2 text-zinc-200\">\n <Sparkles className=\"h-3.5 w-3.5 text-cyan-300/90\" />\n <span className=\"text-xs font-semibold uppercase tracking-[0.14em] text-zinc-300\">Agent Plan</span>\n </div>\n <p className=\"mt-1 truncate text-xs text-zinc-400\">\n {inProgress ? `Now: ${inProgress.content}` : \"Wrapping up remaining steps\"}\n </p>\n </div>\n <div className=\"rounded-lg border border-zinc-700/80 bg-zinc-900/70 px-2.5 py-1 text-[11px] font-medium text-zinc-300\">\n {completed}/{todos.length} done\n </div>\n </div>\n\n <div className=\"mb-3 h-1.5 overflow-hidden rounded-full bg-zinc-800/80\">\n <div\n className=\"h-full rounded-full bg-linear-to-r from-cyan-400 to-emerald-400 transition-all duration-500\"\n style={{ width: `${percentage}%` }}\n />\n </div>\n\n <ul className=\"space-y-1.5\">\n {todos.map((todo) => {\n const config = statusConfig[todo.status];\n const Icon = config.icon;\n return (\n <li\n key={todo.id}\n className=\"group flex items-center gap-2 rounded-lg border border-zinc-800/80 bg-zinc-900/45 px-2.5 py-2 transition-colors duration-200 hover:border-zinc-700/80\"\n >\n <Icon className={`h-3.5 w-3.5 flex-shrink-0 ${config.iconClass}`} />\n <span className={`line-clamp-1 text-xs ${config.textClass}`}>\n {todo.content}\n </span>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n"],"names":["statusConfig","CheckCircle2","Loader2","Circle","TodoList","todos","completed","t","inProgress","percentage","jsxs","jsx","Sparkles","todo","config","Icon"],"mappings":"4EAGMA,EAAe,CACnB,UAAW,CACT,KAAMC,EAAAA,aACN,UAAW,mBACX,UAAW,4BAAA,EAEb,YAAa,CACX,KAAMC,EAAAA,QACN,UAAW,6BACX,UAAW,eAAA,EAEb,QAAS,CACP,KAAMC,EAAAA,OACN,UAAW,gBACX,UAAW,eAAA,CAEf,EAEA,SAAwBC,EAAS,CAAE,MAAAC,GAAgC,CACjE,GAAI,CAACA,EAAM,OAAQ,OAAO,KAE1B,MAAMC,EAAYD,EAAM,OAAQE,GAAMA,EAAE,SAAW,WAAW,EAAE,OAC1DC,EAAaH,EAAM,KAAME,GAAMA,EAAE,SAAW,aAAa,EACzDE,EAAa,KAAK,MAAOH,EAAYD,EAAM,OAAU,GAAG,EAE9D,OACEK,EAAAA,KAAC,MAAA,CAAI,UAAU,iJACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,8CACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,UACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAC,EAAAA,IAACC,EAAAA,SAAA,CAAS,UAAU,8BAAA,CAA+B,EACnDD,EAAAA,IAAC,OAAA,CAAK,UAAU,kEAAkE,SAAA,YAAA,CAAU,CAAA,EAC9F,EACAA,EAAAA,IAAC,KAAE,UAAU,sCACV,WAAa,QAAQH,EAAW,OAAO,GAAK,6BAAA,CAC/C,CAAA,EACF,EACAE,EAAAA,KAAC,MAAA,CAAI,UAAU,wGACZ,SAAA,CAAAJ,EAAU,IAAED,EAAM,OAAO,OAAA,CAAA,CAC5B,CAAA,EACF,EAEAM,EAAAA,IAAC,MAAA,CAAI,UAAU,yDACb,SAAAA,EAAAA,IAAC,MAAA,CACC,UAAU,8FACV,MAAO,CAAE,MAAO,GAAGF,CAAU,GAAA,CAAI,CAAA,EAErC,QAEC,KAAA,CAAG,UAAU,cACX,SAAAJ,EAAM,IAAKQ,GAAS,CACnB,MAAMC,EAASd,EAAaa,EAAK,MAAM,EACjCE,EAAOD,EAAO,KACpB,OACEJ,EAAAA,KAAC,KAAA,CAEC,UAAU,wJAEV,SAAA,CAAAC,MAACI,EAAA,CAAK,UAAW,6BAA6BD,EAAO,SAAS,GAAI,EAClEH,EAAAA,IAAC,QAAK,UAAW,wBAAwBG,EAAO,SAAS,GACtD,WAAK,OAAA,CACR,CAAA,CAAA,EANKD,EAAK,EAAA,CAShB,CAAC,CAAA,CACH,CAAA,EACF,CAEJ"}
@@ -0,0 +1,5 @@
1
+ import { TodoItem } from '../providers/Stream';
2
+ export default function TodoList({ todos }: {
3
+ todos: TodoItem[];
4
+ }): import("react/jsx-runtime").JSX.Element | null;
5
+ //# sourceMappingURL=TodoList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TodoList.d.ts","sourceRoot":"","sources":["../../src/components/TodoList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAqBnD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,kDAkDhE"}