@langchain/react 0.0.1 → 0.1.2

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 (233) hide show
  1. package/README.md +60 -3
  2. package/dist/_virtual/_rolldown/runtime.cjs +7 -13
  3. package/dist/index.cjs +30 -31
  4. package/dist/index.d.cts +3 -3
  5. package/dist/index.d.cts.map +1 -1
  6. package/dist/index.d.ts +3 -3
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -2
  9. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/channels/base.d.cts +1 -1
  10. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/channels/base.d.cts.map +1 -1
  11. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/channels/base.d.ts +1 -1
  12. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/channels/base.d.ts.map +1 -1
  13. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228/node_modules/@langchain/langgraph/dist/constants.d.cts +42 -0
  14. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228/node_modules/@langchain/langgraph/dist/constants.d.cts.map +1 -0
  15. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228/node_modules/@langchain/langgraph/dist/constants.d.ts +42 -0
  16. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228/node_modules/@langchain/langgraph/dist/constants.d.ts.map +1 -0
  17. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/index.d.cts +0 -1
  18. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/index.d.ts +0 -1
  19. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.cts +3 -2
  20. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.cts.map +1 -0
  21. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.ts +3 -2
  22. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.ts.map +1 -0
  23. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/plugin.d.cts +2 -2
  24. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/plugin.d.cts.map +1 -1
  25. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/plugin.d.ts +2 -2
  26. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/plugin.d.ts.map +1 -1
  27. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/zod-registry.d.cts +4 -4
  28. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/zod-registry.d.cts.map +1 -1
  29. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/zod-registry.d.ts +4 -4
  30. package/dist/node_modules/.pnpm/{@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7 → @langchain_langgraph@1.2.1_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___z_dc6decfb18baf112a7d3c3203e2e3228}/node_modules/@langchain/langgraph/dist/graph/zod/zod-registry.d.ts.map +1 -1
  31. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/ReactAgent.d.cts +1 -0
  32. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/ReactAgent.d.ts +1 -0
  33. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/index.d.cts +1 -0
  34. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/index.d.ts +1 -0
  35. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/contextEditing.d.cts +1 -0
  36. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/contextEditing.d.ts +1 -0
  37. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/dynamicSystemPrompt.d.cts +1 -0
  38. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/dynamicSystemPrompt.d.ts +1 -0
  39. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/hitl.d.cts +1 -0
  40. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/hitl.d.ts +1 -0
  41. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/llmToolSelector.d.cts +1 -0
  42. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/llmToolSelector.d.ts +1 -0
  43. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/modelCallLimit.d.cts +1 -0
  44. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/modelCallLimit.d.ts +1 -0
  45. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/modelFallback.d.cts +1 -0
  46. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/modelFallback.d.ts +1 -0
  47. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/modelRetry.d.cts +1 -0
  48. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/modelRetry.d.ts +1 -0
  49. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/pii.d.cts +1 -0
  50. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/pii.d.ts +1 -0
  51. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/piiRedaction.d.cts +1 -0
  52. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/piiRedaction.d.ts +1 -0
  53. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/provider/anthropic/promptCaching.d.cts +1 -0
  54. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/provider/anthropic/promptCaching.d.ts +1 -0
  55. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/provider/openai/moderation.d.cts +1 -0
  56. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/provider/openai/moderation.d.ts +1 -0
  57. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/summarization.d.cts +1 -0
  58. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/summarization.d.ts +1 -0
  59. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/todoListMiddleware.d.cts +1 -0
  60. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/todoListMiddleware.d.ts +1 -0
  61. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/toolCallLimit.d.cts +1 -0
  62. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/toolCallLimit.d.ts +1 -0
  63. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/toolEmulator.d.cts +1 -0
  64. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/toolEmulator.d.ts +1 -0
  65. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/toolRetry.d.cts +1 -0
  66. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/toolRetry.d.ts +1 -0
  67. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/types.d.cts +2 -0
  68. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware/types.d.ts +2 -0
  69. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware.d.cts +1 -0
  70. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/agents/middleware.d.ts +1 -0
  71. package/dist/node_modules/.pnpm/{langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd → langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0}/node_modules/langchain/dist/agents/types.d.cts +0 -1
  72. package/dist/node_modules/.pnpm/{langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd → langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0}/node_modules/langchain/dist/agents/types.d.ts +0 -1
  73. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/index.d.cts +2 -0
  74. package/dist/node_modules/.pnpm/langchain@1.2.30_@langchain_core@1.1.31_openai@6.27.0_ws@8.19.0_zod@4.3.6___openai@6.27_afd3ba7574abac8ef5d4f1eb16ab2ab0/node_modules/langchain/dist/index.d.ts +2 -0
  75. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/ZodError.d.cts +1 -1
  76. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/ZodError.d.cts.map +1 -1
  77. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/ZodError.d.ts +1 -1
  78. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/ZodError.d.ts.map +1 -1
  79. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/errorUtil.d.cts +1 -1
  80. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/errorUtil.d.cts.map +1 -1
  81. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/errorUtil.d.ts +1 -1
  82. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/errorUtil.d.ts.map +1 -1
  83. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/parseUtil.d.cts +1 -1
  84. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/parseUtil.d.cts.map +1 -1
  85. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/parseUtil.d.ts +1 -1
  86. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/parseUtil.d.ts.map +1 -1
  87. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/typeAliases.d.cts +1 -1
  88. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/typeAliases.d.cts.map +1 -1
  89. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/typeAliases.d.ts +1 -1
  90. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/typeAliases.d.ts.map +1 -1
  91. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/util.d.cts +1 -1
  92. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/util.d.cts.map +1 -1
  93. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/util.d.ts +1 -1
  94. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/helpers/util.d.ts.map +1 -1
  95. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/standard-schema.d.cts +1 -1
  96. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/standard-schema.d.cts.map +1 -1
  97. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/standard-schema.d.ts +1 -1
  98. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/standard-schema.d.ts.map +1 -1
  99. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/types.d.cts +1 -1
  100. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/types.d.cts.map +1 -1
  101. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/types.d.ts +1 -1
  102. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v3/types.d.ts.map +1 -1
  103. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/checks.d.cts +1 -1
  104. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/checks.d.cts.map +1 -1
  105. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/checks.d.ts +1 -1
  106. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/checks.d.ts.map +1 -1
  107. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/core.d.cts +1 -1
  108. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/core.d.cts.map +1 -1
  109. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/core.d.ts +1 -1
  110. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/core.d.ts.map +1 -1
  111. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/errors.d.cts +1 -1
  112. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/errors.d.cts.map +1 -1
  113. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/errors.d.ts +1 -1
  114. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/errors.d.ts.map +1 -1
  115. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/json-schema.d.cts +1 -1
  116. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/json-schema.d.cts.map +1 -1
  117. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/json-schema.d.ts +1 -1
  118. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/json-schema.d.ts.map +1 -1
  119. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/registries.d.cts +1 -1
  120. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/registries.d.cts.map +1 -1
  121. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/registries.d.ts +1 -1
  122. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/registries.d.ts.map +1 -1
  123. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/schemas.d.cts +1 -1
  124. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/schemas.d.cts.map +1 -1
  125. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/schemas.d.ts +1 -1
  126. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/schemas.d.ts.map +1 -1
  127. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/standard-schema.d.cts +1 -1
  128. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/standard-schema.d.cts.map +1 -1
  129. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/standard-schema.d.ts +1 -1
  130. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/standard-schema.d.ts.map +1 -1
  131. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/to-json-schema.d.cts +1 -1
  132. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/to-json-schema.d.cts.map +1 -1
  133. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/to-json-schema.d.ts +1 -1
  134. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/to-json-schema.d.ts.map +1 -1
  135. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/util.d.cts +1 -1
  136. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/util.d.cts.map +1 -1
  137. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/util.d.ts +1 -1
  138. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/util.d.ts.map +1 -1
  139. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/versions.d.cts +1 -1
  140. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/versions.d.cts.map +1 -1
  141. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/versions.d.ts +1 -1
  142. package/dist/node_modules/.pnpm/{zod@4.3.5 → zod@4.3.6}/node_modules/zod/v4/core/versions.d.ts.map +1 -1
  143. package/dist/react-ui/client.cjs +4 -6
  144. package/dist/react-ui/client.cjs.map +1 -1
  145. package/dist/react-ui/client.d.cts +7 -3
  146. package/dist/react-ui/client.d.cts.map +1 -1
  147. package/dist/react-ui/client.d.ts +7 -3
  148. package/dist/react-ui/client.d.ts.map +1 -1
  149. package/dist/react-ui/client.js +1 -3
  150. package/dist/react-ui/client.js.map +1 -1
  151. package/dist/react-ui/index.cjs +4 -5
  152. package/dist/react-ui/index.cjs.map +1 -1
  153. package/dist/react-ui/index.js +1 -2
  154. package/dist/react-ui/index.js.map +1 -1
  155. package/dist/react-ui/server/index.cjs +4 -5
  156. package/dist/react-ui/server/index.js +1 -2
  157. package/dist/react-ui/server/server.cjs +2 -3
  158. package/dist/react-ui/server/server.cjs.map +1 -1
  159. package/dist/react-ui/server/server.js +1 -2
  160. package/dist/react-ui/server/server.js.map +1 -1
  161. package/dist/react-ui/types.cjs +1 -2
  162. package/dist/react-ui/types.cjs.map +1 -1
  163. package/dist/react-ui/types.js +1 -1
  164. package/dist/stream.cjs +4 -5
  165. package/dist/stream.cjs.map +1 -1
  166. package/dist/stream.custom.cjs +18 -6
  167. package/dist/stream.custom.cjs.map +1 -1
  168. package/dist/stream.custom.d.ts +0 -1
  169. package/dist/stream.custom.js +17 -5
  170. package/dist/stream.custom.js.map +1 -1
  171. package/dist/stream.d.cts +28 -5
  172. package/dist/stream.d.cts.map +1 -1
  173. package/dist/stream.d.ts +28 -5
  174. package/dist/stream.d.ts.map +1 -1
  175. package/dist/stream.js +1 -2
  176. package/dist/stream.js.map +1 -1
  177. package/dist/stream.lgp.cjs +44 -29
  178. package/dist/stream.lgp.cjs.map +1 -1
  179. package/dist/stream.lgp.js +43 -28
  180. package/dist/stream.lgp.js.map +1 -1
  181. package/dist/thread.cjs +2 -4
  182. package/dist/thread.cjs.map +1 -1
  183. package/dist/thread.js +1 -3
  184. package/dist/thread.js.map +1 -1
  185. package/dist/types.d.cts +3 -3
  186. package/dist/types.d.cts.map +1 -1
  187. package/dist/types.d.ts +3 -3
  188. package/dist/types.d.ts.map +1 -1
  189. package/package.json +27 -21
  190. package/dist/node_modules/.pnpm/@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.cts.map +0 -1
  191. package/dist/node_modules/.pnpm/@langchain_langgraph@1.1.5_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___z_0d5e45651b6fb9f696195862204d53c7/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.ts.map +0 -1
  192. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/ReactAgent.d.cts +0 -3
  193. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/ReactAgent.d.ts +0 -3
  194. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/index.d.cts +0 -4
  195. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/index.d.ts +0 -4
  196. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/contextEditing.d.cts +0 -3
  197. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/contextEditing.d.ts +0 -3
  198. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/dynamicSystemPrompt.d.cts +0 -1
  199. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/dynamicSystemPrompt.d.ts +0 -1
  200. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/hitl.d.cts +0 -1
  201. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/hitl.d.ts +0 -1
  202. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/llmToolSelector.d.cts +0 -1
  203. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/llmToolSelector.d.ts +0 -1
  204. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/modelCallLimit.d.cts +0 -1
  205. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/modelCallLimit.d.ts +0 -1
  206. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/modelFallback.d.cts +0 -1
  207. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/modelFallback.d.ts +0 -1
  208. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/modelRetry.d.cts +0 -1
  209. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/modelRetry.d.ts +0 -1
  210. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/pii.d.cts +0 -1
  211. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/pii.d.ts +0 -1
  212. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/piiRedaction.d.cts +0 -1
  213. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/piiRedaction.d.ts +0 -1
  214. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/provider/anthropic/promptCaching.d.cts +0 -1
  215. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/provider/anthropic/promptCaching.d.ts +0 -1
  216. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/provider/openai/moderation.d.cts +0 -1
  217. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/provider/openai/moderation.d.ts +0 -1
  218. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/summarization.d.cts +0 -2
  219. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/summarization.d.ts +0 -2
  220. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/todoListMiddleware.d.cts +0 -2
  221. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/todoListMiddleware.d.ts +0 -2
  222. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/toolCallLimit.d.cts +0 -1
  223. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/toolCallLimit.d.ts +0 -1
  224. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/toolEmulator.d.cts +0 -1
  225. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/toolEmulator.d.ts +0 -1
  226. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/toolRetry.d.cts +0 -1
  227. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/toolRetry.d.ts +0 -1
  228. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/types.d.cts +0 -3
  229. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware/types.d.ts +0 -3
  230. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware.d.cts +0 -2
  231. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/agents/middleware.d.ts +0 -2
  232. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/index.d.cts +0 -23
  233. package/dist/node_modules/.pnpm/langchain@1.2.27_@langchain_core@1.1.28_openai@6.16.0_ws@8.19.0_zod@4.3.5___openai@6.16_37b31122102851880bcc0afaeba68edd/node_modules/langchain/dist/index.d.ts +0 -23
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/react-ui/types.ts
3
2
  function isUIMessage(message) {
4
3
  if (typeof message !== "object" || message == null) return false;
@@ -30,9 +29,9 @@ function uiMessageReducer(state, update) {
30
29
  }
31
30
  return newState;
32
31
  }
33
-
34
32
  //#endregion
35
33
  exports.isRemoveUIMessage = isRemoveUIMessage;
36
34
  exports.isUIMessage = isUIMessage;
37
35
  exports.uiMessageReducer = uiMessageReducer;
36
+
38
37
  //# sourceMappingURL=types.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","names":[],"sources":["../../src/react-ui/types.ts"],"sourcesContent":["export interface UIMessage<\n TName extends string = string,\n TProps extends Record<string, unknown> = Record<string, unknown>,\n> {\n type: \"ui\";\n\n id: string;\n name: TName;\n props: TProps;\n metadata?: {\n merge?: boolean;\n run_id?: string;\n name?: string;\n tags?: string[];\n message_id?: string;\n [key: string]: unknown;\n };\n}\n\nexport interface RemoveUIMessage {\n type: \"remove-ui\";\n id: string;\n}\n\nexport function isUIMessage(message: unknown): message is UIMessage {\n if (typeof message !== \"object\" || message == null) return false;\n if (!(\"type\" in message)) return false;\n return message.type === \"ui\";\n}\n\nexport function isRemoveUIMessage(\n message: unknown,\n): message is RemoveUIMessage {\n if (typeof message !== \"object\" || message == null) return false;\n if (!(\"type\" in message)) return false;\n return message.type === \"remove-ui\";\n}\n\nexport function uiMessageReducer(\n state: UIMessage[],\n update: UIMessage | RemoveUIMessage | (UIMessage | RemoveUIMessage)[],\n) {\n const events = Array.isArray(update) ? update : [update];\n let newState = state.slice();\n\n for (const event of events) {\n if (event.type === \"remove-ui\") {\n newState = newState.filter((ui) => ui.id !== event.id);\n continue;\n }\n\n const index = state.findIndex((ui) => ui.id === event.id);\n if (index !== -1) {\n newState[index] =\n typeof event.metadata === \"object\" &&\n event.metadata != null &&\n event.metadata.merge\n ? { ...event, props: { ...state[index].props, ...event.props } }\n : event;\n } else {\n newState.push(event);\n }\n }\n\n return newState;\n}\n"],"mappings":";;AAwBA,SAAgB,YAAY,SAAwC;AAClE,KAAI,OAAO,YAAY,YAAY,WAAW,KAAM,QAAO;AAC3D,KAAI,EAAE,UAAU,SAAU,QAAO;AACjC,QAAO,QAAQ,SAAS;;AAG1B,SAAgB,kBACd,SAC4B;AAC5B,KAAI,OAAO,YAAY,YAAY,WAAW,KAAM,QAAO;AAC3D,KAAI,EAAE,UAAU,SAAU,QAAO;AACjC,QAAO,QAAQ,SAAS;;AAG1B,SAAgB,iBACd,OACA,QACA;CACA,MAAM,SAAS,MAAM,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO;CACxD,IAAI,WAAW,MAAM,OAAO;AAE5B,MAAK,MAAM,SAAS,QAAQ;AAC1B,MAAI,MAAM,SAAS,aAAa;AAC9B,cAAW,SAAS,QAAQ,OAAO,GAAG,OAAO,MAAM,GAAG;AACtD;;EAGF,MAAM,QAAQ,MAAM,WAAW,OAAO,GAAG,OAAO,MAAM,GAAG;AACzD,MAAI,UAAU,GACZ,UAAS,SACP,OAAO,MAAM,aAAa,YAC1B,MAAM,YAAY,QAClB,MAAM,SAAS,QACX;GAAE,GAAG;GAAO,OAAO;IAAE,GAAG,MAAM,OAAO;IAAO,GAAG,MAAM;IAAO;GAAE,GAC9D;MAEN,UAAS,KAAK,MAAM;;AAIxB,QAAO"}
1
+ {"version":3,"file":"types.cjs","names":[],"sources":["../../src/react-ui/types.ts"],"sourcesContent":["export interface UIMessage<\n TName extends string = string,\n TProps extends Record<string, unknown> = Record<string, unknown>,\n> {\n type: \"ui\";\n\n id: string;\n name: TName;\n props: TProps;\n metadata?: {\n merge?: boolean;\n run_id?: string;\n name?: string;\n tags?: string[];\n message_id?: string;\n [key: string]: unknown;\n };\n}\n\nexport interface RemoveUIMessage {\n type: \"remove-ui\";\n id: string;\n}\n\nexport function isUIMessage(message: unknown): message is UIMessage {\n if (typeof message !== \"object\" || message == null) return false;\n if (!(\"type\" in message)) return false;\n return message.type === \"ui\";\n}\n\nexport function isRemoveUIMessage(\n message: unknown,\n): message is RemoveUIMessage {\n if (typeof message !== \"object\" || message == null) return false;\n if (!(\"type\" in message)) return false;\n return message.type === \"remove-ui\";\n}\n\nexport function uiMessageReducer(\n state: UIMessage[],\n update: UIMessage | RemoveUIMessage | (UIMessage | RemoveUIMessage)[],\n) {\n const events = Array.isArray(update) ? update : [update];\n let newState = state.slice();\n\n for (const event of events) {\n if (event.type === \"remove-ui\") {\n newState = newState.filter((ui) => ui.id !== event.id);\n continue;\n }\n\n const index = state.findIndex((ui) => ui.id === event.id);\n if (index !== -1) {\n newState[index] =\n typeof event.metadata === \"object\" &&\n event.metadata != null &&\n event.metadata.merge\n ? { ...event, props: { ...state[index].props, ...event.props } }\n : event;\n } else {\n newState.push(event);\n }\n }\n\n return newState;\n}\n"],"mappings":";AAwBA,SAAgB,YAAY,SAAwC;AAClE,KAAI,OAAO,YAAY,YAAY,WAAW,KAAM,QAAO;AAC3D,KAAI,EAAE,UAAU,SAAU,QAAO;AACjC,QAAO,QAAQ,SAAS;;AAG1B,SAAgB,kBACd,SAC4B;AAC5B,KAAI,OAAO,YAAY,YAAY,WAAW,KAAM,QAAO;AAC3D,KAAI,EAAE,UAAU,SAAU,QAAO;AACjC,QAAO,QAAQ,SAAS;;AAG1B,SAAgB,iBACd,OACA,QACA;CACA,MAAM,SAAS,MAAM,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO;CACxD,IAAI,WAAW,MAAM,OAAO;AAE5B,MAAK,MAAM,SAAS,QAAQ;AAC1B,MAAI,MAAM,SAAS,aAAa;AAC9B,cAAW,SAAS,QAAQ,OAAO,GAAG,OAAO,MAAM,GAAG;AACtD;;EAGF,MAAM,QAAQ,MAAM,WAAW,OAAO,GAAG,OAAO,MAAM,GAAG;AACzD,MAAI,UAAU,GACZ,UAAS,SACP,OAAO,MAAM,aAAa,YAC1B,MAAM,YAAY,QAClB,MAAM,SAAS,QACX;GAAE,GAAG;GAAO,OAAO;IAAE,GAAG,MAAM,OAAO;IAAO,GAAG,MAAM;IAAO;GAAE,GAC9D;MAEN,UAAS,KAAK,MAAM;;AAIxB,QAAO"}
@@ -29,7 +29,7 @@ function uiMessageReducer(state, update) {
29
29
  }
30
30
  return newState;
31
31
  }
32
-
33
32
  //#endregion
34
33
  export { isRemoveUIMessage, isUIMessage, uiMessageReducer };
34
+
35
35
  //# sourceMappingURL=types.js.map
package/dist/stream.cjs CHANGED
@@ -1,8 +1,7 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
- const require_stream_lgp = require('./stream.lgp.cjs');
3
- const require_stream_custom = require('./stream.custom.cjs');
1
+ require("./_virtual/_rolldown/runtime.cjs");
2
+ const require_stream_lgp = require("./stream.lgp.cjs");
3
+ const require_stream_custom = require("./stream.custom.cjs");
4
4
  let react = require("react");
5
-
6
5
  //#region src/stream.tsx
7
6
  function isCustomOptions(options) {
8
7
  return "transport" in options;
@@ -12,7 +11,7 @@ function useStream(options) {
12
11
  if (isCustom) return require_stream_custom.useStreamCustom(options);
13
12
  return require_stream_lgp.useStreamLGP(options);
14
13
  }
15
-
16
14
  //#endregion
17
15
  exports.useStream = useStream;
16
+
18
17
  //# sourceMappingURL=stream.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.cjs","names":["useStreamCustom","useStreamLGP"],"sources":["../src/stream.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport type { BagTemplate, ToolCallWithResult } from \"@langchain/langgraph-sdk\";\nimport type {\n UseStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferBag,\n InferStateType,\n MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { useStreamLGP } from \"./stream.lgp.js\";\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport type { UseStreamCustomOptions } from \"./types.js\";\n\nfunction isCustomOptions<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | UseStreamOptions<StateType, Bag>\n | UseStreamCustomOptions<StateType, Bag>,\n): options is UseStreamCustomOptions<StateType, Bag> {\n return \"transport\" in options;\n}\n\ntype ClassToolCallWithResult<T> =\n T extends ToolCallWithResult<infer TC, unknown, unknown>\n ? ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\n/**\n * Maps a stream interface to use @langchain/core BaseMessage class instances\n * instead of plain Message objects for the `messages` property, and remaps\n * tool call types to use @langchain/core message classes.\n */\ntype WithClassMessages<T> = Omit<\n T,\n \"messages\" | \"getMessagesMetadata\" | \"toolCalls\" | \"getToolCalls\"\n> & {\n messages: BaseMessage[];\n getMessagesMetadata: (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined;\n} & (\"toolCalls\" extends keyof T\n ? {\n toolCalls: T extends { toolCalls: (infer TC)[] }\n ? ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"getToolCalls\" extends keyof T\n ? {\n getToolCalls: T extends {\n getToolCalls: (message: infer _M) => (infer TC)[];\n }\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown);\n\n/**\n * A React hook that provides seamless integration with LangGraph streaming capabilities.\n *\n * The `useStream` hook handles all the complexities of streaming, state management, and branching logic,\n * letting you focus on building great chat experiences. It provides automatic state management for\n * messages, interrupts, loading states, subagent streams, and errors.\n *\n * ## Usage with ReactAgent (recommended for createAgent users)\n *\n * When using `createAgent` from `@langchain/langgraph`, you can pass `typeof agent` as the\n * type parameter to automatically infer tool call types:\n *\n * @example\n * ```typescript\n * // In your agent file (e.g., agent.ts)\n * import { createAgent, tool } from \"langchain\";\n * import { z } from \"zod\";\n *\n * const getWeather = tool(\n * async ({ location }) => `Weather in ${location}`,\n * { name: \"get_weather\", schema: z.object({ location: z.string() }) }\n * );\n *\n * export const agent = createAgent({\n * model: \"openai:gpt-4o\",\n * tools: [getWeather],\n * });\n *\n * // In your React component\n * import { agent } from \"./agent\";\n *\n * function Chat() {\n * // Tool calls are automatically typed from the agent's tools!\n * const stream = useStream<typeof agent>({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.toolCalls[0].call.name is typed as \"get_weather\"\n * // stream.toolCalls[0].call.args is typed as { location: string }\n * }\n * ```\n *\n * ## Usage with StateGraph (for custom LangGraph applications)\n *\n * When building custom graphs with `StateGraph`, embed your tool call types directly\n * in your state's messages property using `Message<MyToolCalls>`:\n *\n * @example\n * ```typescript\n * import { Message } from \"@langchain/langgraph-sdk\";\n *\n * // Define your tool call types as a discriminated union\n * type MyToolCalls =\n * | { name: \"search\"; args: { query: string }; id?: string }\n * | { name: \"calculate\"; args: { expression: string }; id?: string };\n *\n * // Embed tool call types in your state's messages\n * interface MyGraphState {\n * messages: Message<MyToolCalls>[];\n * context?: string;\n * }\n *\n * function Chat() {\n * const stream = useStream<MyGraphState>({\n * assistantId: \"my-graph\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.values is typed as MyGraphState\n * // stream.toolCalls[0].call.name is typed as \"search\" | \"calculate\"\n * }\n * ```\n *\n * @example\n * ```typescript\n * // With additional type configuration (interrupts, configurable)\n * interface MyGraphState {\n * messages: Message<MyToolCalls>[];\n * }\n *\n * function Chat() {\n * const stream = useStream<MyGraphState, {\n * InterruptType: { question: string };\n * ConfigurableType: { userId: string };\n * }>({\n * assistantId: \"my-graph\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.interrupt is typed as { question: string } | undefined\n * }\n * ```\n *\n * ## Usage with Deep Agents (subagent streaming, experimental)\n *\n * For agents that spawn subagents (nested graphs), use `filterSubagentMessages`\n * to keep the main message stream clean while tracking subagent activity separately:\n *\n * @example\n * ```typescript\n * import { useStream, SubagentStream } from \"@langchain/langgraph-sdk/react\";\n * import type { agent } from \"./agent\";\n *\n * function DeepAgentChat() {\n * const stream = useStream<typeof agent>({\n * assistantId: \"deepagent\",\n * apiUrl: \"http://localhost:2024\",\n * // Filter subagent messages from main stream\n * filterSubagentMessages: true,\n * });\n *\n * const handleSubmit = (content: string) => {\n * stream.submit(\n * { messages: [{ content, type: \"human\" }] },\n * { streamSubgraphs: true } // Enable subgraph streaming\n * );\n * };\n *\n * // Access subagent streams via stream.subagents (Map<string, SubagentStream>)\n * const subagentList = [...stream.subagents.values()];\n *\n * return (\n * <div>\n * {stream.messages.map((msg) => <Message key={msg.id} message={msg} />)}\n *\n * {subagentList.map((subagent) => (\n * <SubagentCard\n * key={subagent.id}\n * status={subagent.status} // \"pending\" | \"running\" | \"complete\" | \"error\"\n * messages={subagent.messages}\n * toolCalls={subagent.toolCalls}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n *\n * @template T Either a ReactAgent type (with `~agentTypes`) or a state type (`Record<string, unknown>`)\n * @template Bag Type configuration bag containing:\n * - `ConfigurableType`: Type for the `config.configurable` property\n * - `InterruptType`: Type for interrupt values\n * - `CustomEventType`: Type for custom events\n * - `UpdateType`: Type for the submit function updates\n *\n * @see {@link https://docs.langchain.com/langgraph-platform/use-stream-react | LangGraph React Integration Guide}\n */\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n/**\n * A React hook that provides seamless integration with LangGraph streaming capabilities.\n *\n * The `useStream` hook handles all the complexities of streaming, state management, and branching logic,\n * letting you focus on building great chat experiences. It provides automatic state management for\n * messages, interrupts, loading states, and errors.\n *\n * @template T Either a ReactAgent type (with `~agentTypes`) or a state type (`Record<string, unknown>`)\n * @template Bag Type configuration bag containing:\n * - `ConfigurableType`: Type for the `config.configurable` property\n * - `InterruptType`: Type for interrupt values\n * - `CustomEventType`: Type for custom events\n * - `UpdateType`: Type for the submit function updates\n *\n * @see {@link https://docs.langchain.com/langgraph-platform/use-stream-react | LangGraph React Integration Guide}\n */\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useStream(options: any): any {\n // Store this in useState to make sure we're not changing the implementation in re-renders\n const [isCustom] = useState(isCustomOptions(options));\n\n if (isCustom) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStreamCustom(options);\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStreamLGP(options);\n}\n"],"mappings":";;;;;;AAmBA,SAAS,gBAIP,SAGmD;AACnD,QAAO,eAAe;;AA0NxB,SAAgB,UAAU,SAAmB;CAE3C,MAAM,CAAC,gCAAqB,gBAAgB,QAAQ,CAAC;AAErD,KAAI,SAEF,QAAOA,sCAAgB,QAAQ;AAIjC,QAAOC,gCAAa,QAAQ"}
1
+ {"version":3,"file":"stream.cjs","names":["useStreamCustom","useStreamLGP"],"sources":["../src/stream.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport type {\n BagTemplate,\n ToolCallWithResult,\n DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport type {\n UseStreamOptions,\n AcceptBaseMessages,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferBag,\n InferStateType,\n MessageMetadata,\n SubagentStreamInterface,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { useStreamLGP } from \"./stream.lgp.js\";\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport type { UseStreamCustomOptions } from \"./types.js\";\n\nfunction isCustomOptions<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | UseStreamOptions<StateType, Bag>\n | UseStreamCustomOptions<StateType, Bag>,\n): options is UseStreamCustomOptions<StateType, Bag> {\n return \"transport\" in options;\n}\n\ntype ClassToolCallWithResult<T> =\n T extends ToolCallWithResult<infer TC, unknown, unknown>\n ? ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\nexport type ClassSubagentStreamInterface<\n StateType = Record<string, unknown>,\n ToolCall = DefaultToolCall,\n SubagentName extends string = string,\n> = Omit<\n SubagentStreamInterface<StateType, ToolCall, SubagentName>,\n \"messages\"\n> & {\n messages: BaseMessage[];\n};\n\n/**\n * Maps a stream interface to use @langchain/core BaseMessage class instances\n * instead of plain Message objects for the `messages` property, and remaps\n * tool call types to use @langchain/core message classes.\n */\ntype WithClassMessages<T> = Omit<\n T,\n | \"messages\"\n | \"getMessagesMetadata\"\n | \"toolCalls\"\n | \"getToolCalls\"\n | \"submit\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n> & {\n messages: BaseMessage[];\n getMessagesMetadata: (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined;\n} & (\"submit\" extends keyof T\n ? {\n submit: T extends {\n submit: (values: infer V, options?: infer O) => infer Ret;\n }\n ? (\n values:\n | AcceptBaseMessages<Exclude<V, null | undefined>>\n | null\n | undefined,\n options?: O,\n ) => Ret\n : never;\n }\n : unknown) &\n (\"toolCalls\" extends keyof T\n ? {\n toolCalls: T extends { toolCalls: (infer TC)[] }\n ? ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"getToolCalls\" extends keyof T\n ? {\n getToolCalls: T extends {\n getToolCalls: (message: infer _M) => (infer TC)[];\n }\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"subagents\" extends keyof T\n ? {\n subagents: T extends {\n subagents: Map<\n string,\n SubagentStreamInterface<infer S, infer TC, infer N>\n >;\n }\n ? Map<string, ClassSubagentStreamInterface<S, TC, N>>\n : never;\n activeSubagents: T extends {\n activeSubagents: SubagentStreamInterface<\n infer S,\n infer TC,\n infer N\n >[];\n }\n ? ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagent: T extends {\n getSubagent: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;\n }\n ? (\n toolCallId: string,\n ) => ClassSubagentStreamInterface<S, TC, N> | undefined\n : never;\n getSubagentsByType: T extends {\n getSubagentsByType: (\n type: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagentsByMessage: T extends {\n getSubagentsByMessage: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n }\n : unknown);\n\n/**\n * A React hook that provides seamless integration with LangGraph streaming capabilities.\n *\n * The `useStream` hook handles all the complexities of streaming, state management, and branching logic,\n * letting you focus on building great chat experiences. It provides automatic state management for\n * messages, interrupts, loading states, subagent streams, and errors.\n *\n * ## Usage with ReactAgent (recommended for createAgent users)\n *\n * When using `createAgent` from `@langchain/langgraph`, you can pass `typeof agent` as the\n * type parameter to automatically infer tool call types:\n *\n * @example\n * ```typescript\n * // In your agent file (e.g., agent.ts)\n * import { createAgent, tool } from \"langchain\";\n * import { z } from \"zod\";\n *\n * const getWeather = tool(\n * async ({ location }) => `Weather in ${location}`,\n * { name: \"get_weather\", schema: z.object({ location: z.string() }) }\n * );\n *\n * export const agent = createAgent({\n * model: \"openai:gpt-4o\",\n * tools: [getWeather],\n * });\n *\n * // In your React component\n * import { agent } from \"./agent\";\n *\n * function Chat() {\n * // Tool calls are automatically typed from the agent's tools!\n * const stream = useStream<typeof agent>({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.toolCalls[0].call.name is typed as \"get_weather\"\n * // stream.toolCalls[0].call.args is typed as { location: string }\n * }\n * ```\n *\n * ## Usage with StateGraph (for custom LangGraph applications)\n *\n * When building custom graphs with `StateGraph`, embed your tool call types directly\n * in your state's messages property using `Message<MyToolCalls>`:\n *\n * @example\n * ```typescript\n * import { Message } from \"@langchain/langgraph-sdk\";\n *\n * // Define your tool call types as a discriminated union\n * type MyToolCalls =\n * | { name: \"search\"; args: { query: string }; id?: string }\n * | { name: \"calculate\"; args: { expression: string }; id?: string };\n *\n * // Embed tool call types in your state's messages\n * interface MyGraphState {\n * messages: Message<MyToolCalls>[];\n * context?: string;\n * }\n *\n * function Chat() {\n * const stream = useStream<MyGraphState>({\n * assistantId: \"my-graph\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.values is typed as MyGraphState\n * // stream.toolCalls[0].call.name is typed as \"search\" | \"calculate\"\n * }\n * ```\n *\n * @example\n * ```typescript\n * // With additional type configuration (interrupts, configurable)\n * interface MyGraphState {\n * messages: Message<MyToolCalls>[];\n * }\n *\n * function Chat() {\n * const stream = useStream<MyGraphState, {\n * InterruptType: { question: string };\n * ConfigurableType: { userId: string };\n * }>({\n * assistantId: \"my-graph\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.interrupt is typed as { question: string } | undefined\n * }\n * ```\n *\n * ## Usage with Deep Agents (subagent streaming, experimental)\n *\n * For agents that spawn subagents (nested graphs), use `filterSubagentMessages`\n * to keep the main message stream clean while tracking subagent activity separately:\n *\n * @example\n * ```typescript\n * import { useStream, SubagentStream } from \"@langchain/langgraph-sdk/react\";\n * import type { agent } from \"./agent\";\n *\n * function DeepAgentChat() {\n * const stream = useStream<typeof agent>({\n * assistantId: \"deepagent\",\n * apiUrl: \"http://localhost:2024\",\n * // Filter subagent messages from main stream\n * filterSubagentMessages: true,\n * });\n *\n * const handleSubmit = (content: string) => {\n * stream.submit(\n * { messages: [{ content, type: \"human\" }] },\n * { streamSubgraphs: true } // Enable subgraph streaming\n * );\n * };\n *\n * // Access subagent streams via stream.subagents (Map<string, SubagentStream>)\n * const subagentList = [...stream.subagents.values()];\n *\n * return (\n * <div>\n * {stream.messages.map((msg) => <Message key={msg.id} message={msg} />)}\n *\n * {subagentList.map((subagent) => (\n * <SubagentCard\n * key={subagent.id}\n * status={subagent.status} // \"pending\" | \"running\" | \"complete\" | \"error\"\n * messages={subagent.messages}\n * toolCalls={subagent.toolCalls}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n *\n * @template T Either a ReactAgent type (with `~agentTypes`) or a state type (`Record<string, unknown>`)\n * @template Bag Type configuration bag containing:\n * - `ConfigurableType`: Type for the `config.configurable` property\n * - `InterruptType`: Type for interrupt values\n * - `CustomEventType`: Type for custom events\n * - `UpdateType`: Type for the submit function updates\n *\n * @see {@link https://docs.langchain.com/langgraph-platform/use-stream-react | LangGraph React Integration Guide}\n */\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n/**\n * A React hook that provides seamless integration with LangGraph streaming capabilities.\n *\n * The `useStream` hook handles all the complexities of streaming, state management, and branching logic,\n * letting you focus on building great chat experiences. It provides automatic state management for\n * messages, interrupts, loading states, and errors.\n *\n * @template T Either a ReactAgent type (with `~agentTypes`) or a state type (`Record<string, unknown>`)\n * @template Bag Type configuration bag containing:\n * - `ConfigurableType`: Type for the `config.configurable` property\n * - `InterruptType`: Type for interrupt values\n * - `CustomEventType`: Type for custom events\n * - `UpdateType`: Type for the submit function updates\n *\n * @see {@link https://docs.langchain.com/langgraph-platform/use-stream-react | LangGraph React Integration Guide}\n */\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useStream(options: any): any {\n // Store this in useState to make sure we're not changing the implementation in re-renders\n const [isCustom] = useState(isCustomOptions(options));\n\n if (isCustom) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStreamCustom(options);\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStreamLGP(options);\n}\n"],"mappings":";;;;;AAyBA,SAAS,gBAIP,SAGmD;AACnD,QAAO,eAAe;;AAySxB,SAAgB,UAAU,SAAmB;CAE3C,MAAM,CAAC,aAAA,GAAA,MAAA,UAAqB,gBAAgB,QAAQ,CAAC;AAErD,KAAI,SAEF,QAAOA,sBAAAA,gBAAgB,QAAQ;AAIjC,QAAOC,mBAAAA,aAAa,QAAQ"}
@@ -1,11 +1,9 @@
1
1
  "use client";
2
-
3
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
4
- const require_thread = require('./thread.cjs');
2
+ require("./_virtual/_rolldown/runtime.cjs");
3
+ const require_thread = require("./thread.cjs");
5
4
  let react = require("react");
6
5
  let _langchain_langgraph_sdk_ui = require("@langchain/langgraph-sdk/ui");
7
6
  let _langchain_langgraph_sdk_utils = require("@langchain/langgraph-sdk/utils");
8
-
9
7
  //#region src/stream.custom.tsx
10
8
  function useStreamCustom(options) {
11
9
  const [messageManager] = (0, react.useState)(() => new _langchain_langgraph_sdk_ui.MessageTupleManager());
@@ -16,6 +14,7 @@ function useStreamCustom(options) {
16
14
  toMessage: options.toMessage ?? _langchain_langgraph_sdk_ui.toMessageClass
17
15
  }));
18
16
  (0, react.useSyncExternalStore)(stream.subscribe, stream.getSnapshot, stream.getSnapshot);
17
+ const [branch, _setBranch] = (0, react.useState)("");
19
18
  const [threadId, onThreadId] = require_thread.useControllableThreadId(options);
20
19
  const threadIdRef = (0, react.useRef)(threadId);
21
20
  (0, react.useEffect)(() => {
@@ -89,6 +88,7 @@ function useStreamCustom(options) {
89
88
  onSuccess: () => void 0,
90
89
  onError(error) {
91
90
  options.onError?.(error, void 0);
91
+ submitOptions?.onError?.(error, void 0);
92
92
  }
93
93
  });
94
94
  };
@@ -104,6 +104,18 @@ function useStreamCustom(options) {
104
104
  stop,
105
105
  submit,
106
106
  switchThread,
107
+ branch,
108
+ setBranch: _setBranch,
109
+ getMessagesMetadata(message, index) {
110
+ const streamMetadata = messageManager.get(message.id)?.metadata;
111
+ if (streamMetadata != null) return {
112
+ messageId: message.id ?? String(index),
113
+ firstSeenState: void 0,
114
+ branch: void 0,
115
+ branchOptions: void 0,
116
+ streamMetadata
117
+ };
118
+ },
107
119
  get interrupts() {
108
120
  if (stream.values != null && "__interrupt__" in stream.values && Array.isArray(stream.values.__interrupt__)) {
109
121
  const valueInterrupts = stream.values.__interrupt__;
@@ -117,7 +129,7 @@ function useStreamCustom(options) {
117
129
  },
118
130
  get messages() {
119
131
  if (!stream.values) return [];
120
- return getMessages(stream.values);
132
+ return (0, _langchain_langgraph_sdk_ui.ensureMessageInstances)(getMessages(stream.values));
121
133
  },
122
134
  get toolCalls() {
123
135
  if (!stream.values) return [];
@@ -156,7 +168,7 @@ function useStreamCustom(options) {
156
168
  }
157
169
  };
158
170
  }
159
-
160
171
  //#endregion
161
172
  exports.useStreamCustom = useStreamCustom;
173
+
162
174
  //# sourceMappingURL=stream.custom.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.custom.cjs","names":["MessageTupleManager","StreamManager","toMessageClass","useControllableThreadId"],"sources":["../src/stream.custom.tsx"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\n\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n FetchStreamTransport,\n toMessageClass,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetToolCallsType,\n type GetConfigurableType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\nimport { useControllableThreadId } from \"./thread.js\";\nimport type { UseStreamCustom } from \"./types.js\";\n\nexport { FetchStreamTransport };\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: AnyStreamCustomOptions<StateType, Bag>,\n): UseStreamCustom<StateType, Bag> {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n type ToolCallType = GetToolCallsType<StateType>;\n\n const [messageManager] = useState(() => new MessageTupleManager());\n const [stream] = useState(\n () =>\n new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: options.toMessage ?? toMessageClass,\n }),\n );\n\n useSyncExternalStore(\n stream.subscribe,\n stream.getSnapshot,\n stream.getSnapshot,\n );\n\n const [threadId, onThreadId] = useControllableThreadId(options);\n const threadIdRef = useRef<string | null>(threadId);\n\n // Cancel the stream if thread ID has changed\n useEffect(() => {\n if (threadIdRef.current !== threadId) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n }, [threadId, stream]);\n\n const switchThread = useCallback(\n (newThreadId: string | null) => {\n if (newThreadId !== threadIdRef.current) {\n threadIdRef.current = newThreadId;\n stream.clear();\n }\n },\n [stream],\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n // Reconstruct subagents from initialValues when:\n // 1. Subagent filtering is enabled\n // 2. Not currently streaming\n // 3. initialValues has messages\n // This ensures subagent visualization works with cached/persisted state\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n useEffect(() => {\n if (shouldReconstructSubagents) {\n // skipIfPopulated: true ensures we don't overwrite subagents from active streaming\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n // We intentionally only run this when shouldReconstructSubagents changes\n // to avoid unnecessary reconstructions during streaming\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldReconstructSubagents, historyMessages.length]);\n\n const stop = () => stream.stop(historyValues, { onStop: options.onStop });\n\n const submitDirect = async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) => {\n if (threadId !== threadIdRef.current) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n\n let usableThreadId = threadIdRef.current;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadIdRef.current = usableThreadId;\n onThreadId(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n },\n },\n );\n };\n\n const submit = async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) => {\n await submitDirect(values, submitOptions);\n };\n\n return {\n get values() {\n return stream.values ?? ({} as StateType);\n },\n\n error: stream.error,\n isLoading: stream.isLoading,\n\n stop,\n submit,\n switchThread,\n\n get interrupts(): Interrupt<InterruptType>[] {\n if (\n stream.values != null &&\n \"__interrupt__\" in stream.values &&\n Array.isArray(stream.values.__interrupt__)\n ) {\n const valueInterrupts = stream.values.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n },\n\n get interrupt(): Interrupt<InterruptType> | undefined {\n return extractInterrupts<InterruptType>(stream.values);\n },\n\n get messages(): BaseMessage[] {\n if (!stream.values) return [];\n return getMessages(stream.values) as unknown as BaseMessage[];\n },\n\n get toolCalls() {\n if (!stream.values) return [];\n const msgs = getMessages(stream.values);\n return getToolCallsWithResults<ToolCallType>(msgs);\n },\n\n getToolCalls(message) {\n if (!stream.values) return [];\n const msgs = getMessages(stream.values);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n\n queue: {\n get entries() {\n return [];\n },\n get size() {\n return 0;\n },\n async cancel() {\n return false;\n },\n async clear() {},\n },\n };\n}\n"],"mappings":";;;;;;;;;AAkCA,SAAgB,gBAId,SACiC;CAOjC,MAAM,CAAC,4CAAiC,IAAIA,iDAAqB,CAAC;CAClE,MAAM,CAAC,oCAEH,IAAIC,0CAA8B,gBAAgB;EAChD,UAAU,QAAQ,YAAY;EAC9B,mBAAmB,QAAQ;EAC3B,wBAAwB,QAAQ;EAChC,WAAW,QAAQ,aAAaC;EACjC,CAAC,CACL;AAED,iCACE,OAAO,WACP,OAAO,aACP,OAAO,YACR;CAED,MAAM,CAAC,UAAU,cAAcC,uCAAwB,QAAQ;CAC/D,MAAM,gCAAoC,SAAS;AAGnD,4BAAgB;AACd,MAAI,YAAY,YAAY,UAAU;AACpC,eAAY,UAAU;AACtB,UAAO,OAAO;;IAEf,CAAC,UAAU,OAAO,CAAC;CAEtB,MAAM,uCACH,gBAA+B;AAC9B,MAAI,gBAAgB,YAAY,SAAS;AACvC,eAAY,UAAU;AACtB,UAAO,OAAO;;IAGlB,CAAC,OAAO,CACT;CAED,MAAM,eAAe,UAAgC;EACnD,MAAM,cAAc,QAAQ,eAAe;AAC3C,SAAO,MAAM,QAAQ,MAAM,aAAa,GACnC,MAAM,eACP,EAAE;;CAGR,MAAM,eAAe,SAAoB,aAAmC;EAC1E,MAAM,cAAc,QAAQ,eAAe;AAC3C,SAAO;GAAE,GAAG;IAAU,cAAc;GAAU;;CAGhD,MAAM,gBAAgB,QAAQ,iBAAkB,EAAE;CAOlD,MAAM,kBAAkB,YAAY,cAAc;CAClD,MAAM,6BACJ,QAAQ,0BACR,CAAC,OAAO,aACR,gBAAgB,SAAS;AAE3B,4BAAgB;AACd,MAAI,2BAEF,QAAO,qBAAqB,iBAAiB,EAAE,iBAAiB,MAAM,CAAC;IAKxE,CAAC,4BAA4B,gBAAgB,OAAO,CAAC;CAExD,MAAM,aAAa,OAAO,KAAK,eAAe,EAAE,QAAQ,QAAQ,QAAQ,CAAC;CAEzE,MAAM,eAAe,OACnB,QACA,kBACG;AACH,MAAI,aAAa,YAAY,SAAS;AACpC,eAAY,UAAU;AACtB,UAAO,OAAO;;EAGhB,IAAI,iBAAiB,YAAY;AAEjC,SAAO,sBAAsB;AAC3B,OAAI,eAAe,oBAAoB,KACrC,QAAO;IACL,GAAG;IACH,GAAI,OAAO,cAAc,qBAAqB,aAC1C,cAAc,iBAAiB,cAAc,GAC7C,cAAc;IACnB;AAGH,UAAO,EAAE,GAAG,eAAe;IAC3B;AAEF,QAAM,OAAO,MACX,OAAO,WAAwB;AAC7B,OAAI,CAAC,gBAAgB;AACnB,qBAAiB,OAAO,YAAY;AACpC,gBAAY,UAAU;AACtB,eAAW,eAAe;;AAG5B,OAAI,CAAC,eACH,OAAM,IAAI,MAAM,oCAAoC;AAGtD,UAAO,QAAQ,UAAU,OAAO;IAC9B,OAAO;IACP,SAAS,eAAe;IACxB,SAAS,eAAe;IACxB;IACA,QAAQ;KACN,GAAG,eAAe;KAClB,cAAc;MACZ,WAAW;MACX,GAAG,eAAe,QAAQ;MAC3B;KACF;IACF,CAAC;KAIJ;GACE;GACA;GAEA,eAAe,EAAE;GACjB,WAAW;GAEX,iBAAiB;GACjB,QAAQ,OAAO;AACb,YAAQ,UAAU,OAAO,OAAU;;GAEtC,CACF;;CAGH,MAAM,SAAS,OACb,QACA,kBACG;AACH,QAAM,aAAa,QAAQ,cAAc;;AAG3C,QAAO;EACL,IAAI,SAAS;AACX,UAAO,OAAO,UAAW,EAAE;;EAG7B,OAAO,OAAO;EACd,WAAW,OAAO;EAElB;EACA;EACA;EAEA,IAAI,aAAyC;AAC3C,OACE,OAAO,UAAU,QACjB,mBAAmB,OAAO,UAC1B,MAAM,QAAQ,OAAO,OAAO,cAAc,EAC1C;IACA,MAAM,kBAAkB,OAAO,OAAO;AACtC,QAAI,gBAAgB,WAAW,EAAG,QAAO,CAAC,EAAE,MAAM,cAAc,CAAC;AACjE,WAAO;;AAGT,UAAO,EAAE;;EAGX,IAAI,YAAkD;AACpD,6DAAwC,OAAO,OAAO;;EAGxD,IAAI,WAA0B;AAC5B,OAAI,CAAC,OAAO,OAAQ,QAAO,EAAE;AAC7B,UAAO,YAAY,OAAO,OAAO;;EAGnC,IAAI,YAAY;AACd,OAAI,CAAC,OAAO,OAAQ,QAAO,EAAE;AAE7B,sEADa,YAAY,OAAO,OAAO,CACW;;EAGpD,aAAa,SAAS;AACpB,OAAI,CAAC,OAAO,OAAQ,QAAO,EAAE;AAG7B,sEAFa,YAAY,OAAO,OAAO,CACyB,CAC5C,QAAQ,OAAO,GAAG,UAAU,OAAO,QAAQ,GAAG;;EAGpE,IAAI,YAAY;AACd,UAAO,OAAO,cAAc;;EAG9B,IAAI,kBAAkB;AACpB,UAAO,OAAO,oBAAoB;;EAGpC,YAAY,YAAoB;AAC9B,UAAO,OAAO,YAAY,WAAW;;EAGvC,mBAAmB,MAAc;AAC/B,UAAO,OAAO,mBAAmB,KAAK;;EAGxC,sBAAsB,WAAmB;AACvC,UAAO,OAAO,sBAAsB,UAAU;;EAGhD,OAAO;GACL,IAAI,UAAU;AACZ,WAAO,EAAE;;GAEX,IAAI,OAAO;AACT,WAAO;;GAET,MAAM,SAAS;AACb,WAAO;;GAET,MAAM,QAAQ;GACf;EACF"}
1
+ {"version":3,"file":"stream.custom.cjs","names":["MessageTupleManager","StreamManager","toMessageClass","useControllableThreadId"],"sources":["../src/stream.custom.tsx"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\n\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n FetchStreamTransport,\n toMessageClass,\n ensureMessageInstances,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetToolCallsType,\n type GetConfigurableType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\nimport { useControllableThreadId } from \"./thread.js\";\nimport type { UseStreamCustom } from \"./types.js\";\n\nexport { FetchStreamTransport };\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: AnyStreamCustomOptions<StateType, Bag>,\n): UseStreamCustom<StateType, Bag> {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n type ToolCallType = GetToolCallsType<StateType>;\n\n const [messageManager] = useState(() => new MessageTupleManager());\n const [stream] = useState(\n () =>\n new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: options.toMessage ?? toMessageClass,\n }),\n );\n\n useSyncExternalStore(\n stream.subscribe,\n stream.getSnapshot,\n stream.getSnapshot,\n );\n\n const [branch, _setBranch] = useState(\"\");\n\n const [threadId, onThreadId] = useControllableThreadId(options);\n const threadIdRef = useRef<string | null>(threadId);\n\n // Cancel the stream if thread ID has changed\n useEffect(() => {\n if (threadIdRef.current !== threadId) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n }, [threadId, stream]);\n\n const switchThread = useCallback(\n (newThreadId: string | null) => {\n if (newThreadId !== threadIdRef.current) {\n threadIdRef.current = newThreadId;\n stream.clear();\n }\n },\n [stream],\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n // Reconstruct subagents from initialValues when:\n // 1. Subagent filtering is enabled\n // 2. Not currently streaming\n // 3. initialValues has messages\n // This ensures subagent visualization works with cached/persisted state\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n useEffect(() => {\n if (shouldReconstructSubagents) {\n // skipIfPopulated: true ensures we don't overwrite subagents from active streaming\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n // We intentionally only run this when shouldReconstructSubagents changes\n // to avoid unnecessary reconstructions during streaming\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldReconstructSubagents, historyMessages.length]);\n\n const stop = () => stream.stop(historyValues, { onStop: options.onStop });\n\n const submitDirect = async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) => {\n if (threadId !== threadIdRef.current) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n\n let usableThreadId = threadIdRef.current;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadIdRef.current = usableThreadId;\n onThreadId(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n },\n },\n );\n };\n\n const submit = async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) => {\n await submitDirect(values, submitOptions);\n };\n\n return {\n get values() {\n return stream.values ?? ({} as StateType);\n },\n\n error: stream.error,\n isLoading: stream.isLoading,\n\n stop,\n submit,\n switchThread,\n\n branch,\n setBranch: _setBranch,\n\n getMessagesMetadata(\n message: BaseMessage,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n if (streamMetadata != null) {\n return {\n messageId: message.id ?? String(index),\n firstSeenState: undefined,\n branch: undefined,\n branchOptions: undefined,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n return undefined;\n },\n\n get interrupts(): Interrupt<InterruptType>[] {\n if (\n stream.values != null &&\n \"__interrupt__\" in stream.values &&\n Array.isArray(stream.values.__interrupt__)\n ) {\n const valueInterrupts = stream.values.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n },\n\n get interrupt(): Interrupt<InterruptType> | undefined {\n return extractInterrupts<InterruptType>(stream.values);\n },\n\n get messages(): BaseMessage[] {\n if (!stream.values) return [];\n return ensureMessageInstances(\n getMessages(stream.values),\n ) as BaseMessage[];\n },\n\n get toolCalls() {\n if (!stream.values) return [];\n const msgs = getMessages(stream.values);\n return getToolCallsWithResults<ToolCallType>(msgs);\n },\n\n getToolCalls(message) {\n if (!stream.values) return [];\n const msgs = getMessages(stream.values);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n\n queue: {\n get entries() {\n return [];\n },\n get size() {\n return 0;\n },\n async cancel() {\n return false;\n },\n async clear() {},\n },\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import "./types.js";
2
1
  import { FetchStreamTransport } from "@langchain/langgraph-sdk/ui";
3
2
  import { BagTemplate } from "@langchain/langgraph-sdk";
4
3
  export { FetchStreamTransport };
@@ -1,10 +1,8 @@
1
1
  "use client";
2
-
3
2
  import { useControllableThreadId } from "./thread.js";
4
3
  import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from "react";
5
- import { FetchStreamTransport, MessageTupleManager, StreamManager, extractInterrupts, toMessageClass } from "@langchain/langgraph-sdk/ui";
4
+ import { FetchStreamTransport, MessageTupleManager, StreamManager, ensureMessageInstances, extractInterrupts, toMessageClass } from "@langchain/langgraph-sdk/ui";
6
5
  import { getToolCallsWithResults } from "@langchain/langgraph-sdk/utils";
7
-
8
6
  //#region src/stream.custom.tsx
9
7
  function useStreamCustom(options) {
10
8
  const [messageManager] = useState(() => new MessageTupleManager());
@@ -15,6 +13,7 @@ function useStreamCustom(options) {
15
13
  toMessage: options.toMessage ?? toMessageClass
16
14
  }));
17
15
  useSyncExternalStore(stream.subscribe, stream.getSnapshot, stream.getSnapshot);
16
+ const [branch, _setBranch] = useState("");
18
17
  const [threadId, onThreadId] = useControllableThreadId(options);
19
18
  const threadIdRef = useRef(threadId);
20
19
  useEffect(() => {
@@ -88,6 +87,7 @@ function useStreamCustom(options) {
88
87
  onSuccess: () => void 0,
89
88
  onError(error) {
90
89
  options.onError?.(error, void 0);
90
+ submitOptions?.onError?.(error, void 0);
91
91
  }
92
92
  });
93
93
  };
@@ -103,6 +103,18 @@ function useStreamCustom(options) {
103
103
  stop,
104
104
  submit,
105
105
  switchThread,
106
+ branch,
107
+ setBranch: _setBranch,
108
+ getMessagesMetadata(message, index) {
109
+ const streamMetadata = messageManager.get(message.id)?.metadata;
110
+ if (streamMetadata != null) return {
111
+ messageId: message.id ?? String(index),
112
+ firstSeenState: void 0,
113
+ branch: void 0,
114
+ branchOptions: void 0,
115
+ streamMetadata
116
+ };
117
+ },
106
118
  get interrupts() {
107
119
  if (stream.values != null && "__interrupt__" in stream.values && Array.isArray(stream.values.__interrupt__)) {
108
120
  const valueInterrupts = stream.values.__interrupt__;
@@ -116,7 +128,7 @@ function useStreamCustom(options) {
116
128
  },
117
129
  get messages() {
118
130
  if (!stream.values) return [];
119
- return getMessages(stream.values);
131
+ return ensureMessageInstances(getMessages(stream.values));
120
132
  },
121
133
  get toolCalls() {
122
134
  if (!stream.values) return [];
@@ -155,7 +167,7 @@ function useStreamCustom(options) {
155
167
  }
156
168
  };
157
169
  }
158
-
159
170
  //#endregion
160
171
  export { FetchStreamTransport, useStreamCustom };
172
+
161
173
  //# sourceMappingURL=stream.custom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.tsx"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\n\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n FetchStreamTransport,\n toMessageClass,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetToolCallsType,\n type GetConfigurableType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\nimport { useControllableThreadId } from \"./thread.js\";\nimport type { UseStreamCustom } from \"./types.js\";\n\nexport { FetchStreamTransport };\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: AnyStreamCustomOptions<StateType, Bag>,\n): UseStreamCustom<StateType, Bag> {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n type ToolCallType = GetToolCallsType<StateType>;\n\n const [messageManager] = useState(() => new MessageTupleManager());\n const [stream] = useState(\n () =>\n new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: options.toMessage ?? toMessageClass,\n }),\n );\n\n useSyncExternalStore(\n stream.subscribe,\n stream.getSnapshot,\n stream.getSnapshot,\n );\n\n const [threadId, onThreadId] = useControllableThreadId(options);\n const threadIdRef = useRef<string | null>(threadId);\n\n // Cancel the stream if thread ID has changed\n useEffect(() => {\n if (threadIdRef.current !== threadId) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n }, [threadId, stream]);\n\n const switchThread = useCallback(\n (newThreadId: string | null) => {\n if (newThreadId !== threadIdRef.current) {\n threadIdRef.current = newThreadId;\n stream.clear();\n }\n },\n [stream],\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n // Reconstruct subagents from initialValues when:\n // 1. Subagent filtering is enabled\n // 2. Not currently streaming\n // 3. initialValues has messages\n // This ensures subagent visualization works with cached/persisted state\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n useEffect(() => {\n if (shouldReconstructSubagents) {\n // skipIfPopulated: true ensures we don't overwrite subagents from active streaming\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n // We intentionally only run this when shouldReconstructSubagents changes\n // to avoid unnecessary reconstructions during streaming\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldReconstructSubagents, historyMessages.length]);\n\n const stop = () => stream.stop(historyValues, { onStop: options.onStop });\n\n const submitDirect = async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) => {\n if (threadId !== threadIdRef.current) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n\n let usableThreadId = threadIdRef.current;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadIdRef.current = usableThreadId;\n onThreadId(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n },\n },\n );\n };\n\n const submit = async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) => {\n await submitDirect(values, submitOptions);\n };\n\n return {\n get values() {\n return stream.values ?? ({} as StateType);\n },\n\n error: stream.error,\n isLoading: stream.isLoading,\n\n stop,\n submit,\n switchThread,\n\n get interrupts(): Interrupt<InterruptType>[] {\n if (\n stream.values != null &&\n \"__interrupt__\" in stream.values &&\n Array.isArray(stream.values.__interrupt__)\n ) {\n const valueInterrupts = stream.values.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n },\n\n get interrupt(): Interrupt<InterruptType> | undefined {\n return extractInterrupts<InterruptType>(stream.values);\n },\n\n get messages(): BaseMessage[] {\n if (!stream.values) return [];\n return getMessages(stream.values) as unknown as BaseMessage[];\n },\n\n get toolCalls() {\n if (!stream.values) return [];\n const msgs = getMessages(stream.values);\n return getToolCallsWithResults<ToolCallType>(msgs);\n },\n\n getToolCalls(message) {\n if (!stream.values) return [];\n const msgs = getMessages(stream.values);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n\n queue: {\n get entries() {\n return [];\n },\n get size() {\n return 0;\n },\n async cancel() {\n return false;\n },\n async clear() {},\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"stream.custom.js","names":[],"sources":["../src/stream.custom.tsx"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\n\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n StreamManager,\n MessageTupleManager,\n extractInterrupts,\n FetchStreamTransport,\n toMessageClass,\n ensureMessageInstances,\n type EventStreamEvent,\n type GetUpdateType,\n type GetCustomEventType,\n type GetInterruptType,\n type GetToolCallsType,\n type GetConfigurableType,\n type AnyStreamCustomOptions,\n type CustomSubmitOptions,\n type MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { getToolCallsWithResults } from \"@langchain/langgraph-sdk/utils\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { BagTemplate, Message, Interrupt } from \"@langchain/langgraph-sdk\";\nimport { useControllableThreadId } from \"./thread.js\";\nimport type { UseStreamCustom } from \"./types.js\";\n\nexport { FetchStreamTransport };\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: AnyStreamCustomOptions<StateType, Bag>,\n): UseStreamCustom<StateType, Bag> {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n type ToolCallType = GetToolCallsType<StateType>;\n\n const [messageManager] = useState(() => new MessageTupleManager());\n const [stream] = useState(\n () =>\n new StreamManager<StateType, Bag>(messageManager, {\n throttle: options.throttle ?? false,\n subagentToolNames: options.subagentToolNames,\n filterSubagentMessages: options.filterSubagentMessages,\n toMessage: options.toMessage ?? toMessageClass,\n }),\n );\n\n useSyncExternalStore(\n stream.subscribe,\n stream.getSnapshot,\n stream.getSnapshot,\n );\n\n const [branch, _setBranch] = useState(\"\");\n\n const [threadId, onThreadId] = useControllableThreadId(options);\n const threadIdRef = useRef<string | null>(threadId);\n\n // Cancel the stream if thread ID has changed\n useEffect(() => {\n if (threadIdRef.current !== threadId) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n }, [threadId, stream]);\n\n const switchThread = useCallback(\n (newThreadId: string | null) => {\n if (newThreadId !== threadIdRef.current) {\n threadIdRef.current = newThreadId;\n stream.clear();\n }\n },\n [stream],\n );\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey])\n ? (value[messagesKey] as Message[])\n : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n // Reconstruct subagents from initialValues when:\n // 1. Subagent filtering is enabled\n // 2. Not currently streaming\n // 3. initialValues has messages\n // This ensures subagent visualization works with cached/persisted state\n const historyMessages = getMessages(historyValues);\n const shouldReconstructSubagents =\n options.filterSubagentMessages &&\n !stream.isLoading &&\n historyMessages.length > 0;\n\n useEffect(() => {\n if (shouldReconstructSubagents) {\n // skipIfPopulated: true ensures we don't overwrite subagents from active streaming\n stream.reconstructSubagents(historyMessages, { skipIfPopulated: true });\n }\n // We intentionally only run this when shouldReconstructSubagents changes\n // to avoid unnecessary reconstructions during streaming\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldReconstructSubagents, historyMessages.length]);\n\n const stop = () => stream.stop(historyValues, { onStop: options.onStop });\n\n const submitDirect = async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) => {\n if (threadId !== threadIdRef.current) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n\n let usableThreadId = threadIdRef.current;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n usableThreadId = crypto.randomUUID();\n threadIdRef.current = usableThreadId;\n onThreadId(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, undefined);\n submitOptions?.onError?.(error, undefined);\n },\n },\n );\n };\n\n const submit = async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>,\n ) => {\n await submitDirect(values, submitOptions);\n };\n\n return {\n get values() {\n return stream.values ?? ({} as StateType);\n },\n\n error: stream.error,\n isLoading: stream.isLoading,\n\n stop,\n submit,\n switchThread,\n\n branch,\n setBranch: _setBranch,\n\n getMessagesMetadata(\n message: BaseMessage,\n index?: number,\n ): MessageMetadata<StateType> | undefined {\n const streamMetadata = messageManager.get(message.id)?.metadata;\n if (streamMetadata != null) {\n return {\n messageId: message.id ?? String(index),\n firstSeenState: undefined,\n branch: undefined,\n branchOptions: undefined,\n streamMetadata,\n } as MessageMetadata<StateType>;\n }\n return undefined;\n },\n\n get interrupts(): Interrupt<InterruptType>[] {\n if (\n stream.values != null &&\n \"__interrupt__\" in stream.values &&\n Array.isArray(stream.values.__interrupt__)\n ) {\n const valueInterrupts = stream.values.__interrupt__;\n if (valueInterrupts.length === 0) return [{ when: \"breakpoint\" }];\n return valueInterrupts;\n }\n\n return [];\n },\n\n get interrupt(): Interrupt<InterruptType> | undefined {\n return extractInterrupts<InterruptType>(stream.values);\n },\n\n get messages(): BaseMessage[] {\n if (!stream.values) return [];\n return ensureMessageInstances(\n getMessages(stream.values),\n ) as BaseMessage[];\n },\n\n get toolCalls() {\n if (!stream.values) return [];\n const msgs = getMessages(stream.values);\n return getToolCallsWithResults<ToolCallType>(msgs);\n },\n\n getToolCalls(message) {\n if (!stream.values) return [];\n const msgs = getMessages(stream.values);\n const allToolCalls = getToolCallsWithResults<ToolCallType>(msgs);\n return allToolCalls.filter((tc) => tc.aiMessage.id === message.id);\n },\n\n get subagents() {\n return stream.getSubagents();\n },\n\n get activeSubagents() {\n return stream.getActiveSubagents();\n },\n\n getSubagent(toolCallId: string) {\n return stream.getSubagent(toolCallId);\n },\n\n getSubagentsByType(type: string) {\n return stream.getSubagentsByType(type);\n },\n\n getSubagentsByMessage(messageId: string) {\n return stream.getSubagentsByMessage(messageId);\n },\n\n queue: {\n get entries() {\n return [];\n },\n get size() {\n return 0;\n },\n async cancel() {\n return false;\n },\n async clear() {},\n },\n };\n}\n"],"mappings":"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"}
package/dist/stream.d.cts CHANGED
@@ -1,19 +1,26 @@
1
1
  import { UseStreamCustomOptions } from "./types.cjs";
2
2
  import { AIMessage, BaseMessage, ToolMessage } from "@langchain/core/messages";
3
- import { BagTemplate, ToolCallWithResult } from "@langchain/langgraph-sdk";
4
- import { InferBag, InferStateType, MessageMetadata, ResolveStreamInterface, ResolveStreamOptions } from "@langchain/langgraph-sdk/ui";
3
+ import { BagTemplate, DefaultToolCall, ToolCallWithResult } from "@langchain/langgraph-sdk";
4
+ import { AcceptBaseMessages, InferBag, InferStateType, MessageMetadata, ResolveStreamInterface, ResolveStreamOptions, SubagentStreamInterface } from "@langchain/langgraph-sdk/ui";
5
5
 
6
6
  //#region src/stream.d.ts
7
7
  type ClassToolCallWithResult<T> = T extends ToolCallWithResult<infer TC, unknown, unknown> ? ToolCallWithResult<TC, ToolMessage, AIMessage> : T;
8
+ type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall, SubagentName extends string = string> = Omit<SubagentStreamInterface<StateType, ToolCall, SubagentName>, "messages"> & {
9
+ messages: BaseMessage[];
10
+ };
8
11
  /**
9
12
  * Maps a stream interface to use @langchain/core BaseMessage class instances
10
13
  * instead of plain Message objects for the `messages` property, and remaps
11
14
  * tool call types to use @langchain/core message classes.
12
15
  */
13
- type WithClassMessages<T> = Omit<T, "messages" | "getMessagesMetadata" | "toolCalls" | "getToolCalls"> & {
16
+ type WithClassMessages<T> = Omit<T, "messages" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
14
17
  messages: BaseMessage[];
15
18
  getMessagesMetadata: (message: BaseMessage, index?: number) => MessageMetadata<Record<string, unknown>> | undefined;
16
- } & ("toolCalls" extends keyof T ? {
19
+ } & ("submit" extends keyof T ? {
20
+ submit: T extends {
21
+ submit: (values: infer V, options?: infer O) => infer Ret;
22
+ } ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : never;
23
+ } : unknown) & ("toolCalls" extends keyof T ? {
17
24
  toolCalls: T extends {
18
25
  toolCalls: (infer TC)[];
19
26
  } ? ClassToolCallWithResult<TC>[] : never;
@@ -21,6 +28,22 @@ type WithClassMessages<T> = Omit<T, "messages" | "getMessagesMetadata" | "toolCa
21
28
  getToolCalls: T extends {
22
29
  getToolCalls: (message: infer _M) => (infer TC)[];
23
30
  } ? (message: AIMessage) => ClassToolCallWithResult<TC>[] : never;
31
+ } : unknown) & ("subagents" extends keyof T ? {
32
+ subagents: T extends {
33
+ subagents: Map<string, SubagentStreamInterface<infer S, infer TC, infer N>>;
34
+ } ? Map<string, ClassSubagentStreamInterface<S, TC, N>> : never;
35
+ activeSubagents: T extends {
36
+ activeSubagents: SubagentStreamInterface<infer S, infer TC, infer N>[];
37
+ } ? ClassSubagentStreamInterface<S, TC, N>[] : never;
38
+ getSubagent: T extends {
39
+ getSubagent: (id: string) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;
40
+ } ? (toolCallId: string) => ClassSubagentStreamInterface<S, TC, N> | undefined : never;
41
+ getSubagentsByType: T extends {
42
+ getSubagentsByType: (type: string) => SubagentStreamInterface<infer S, infer TC, infer N>[];
43
+ } ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[] : never;
44
+ getSubagentsByMessage: T extends {
45
+ getSubagentsByMessage: (id: string) => SubagentStreamInterface<infer S, infer TC, infer N>[];
46
+ } ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[] : never;
24
47
  } : unknown);
25
48
  /**
26
49
  * A React hook that provides seamless integration with LangGraph streaming capabilities.
@@ -189,5 +212,5 @@ declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate
189
212
  */
190
213
  declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;
191
214
  //#endregion
192
- export { useStream };
215
+ export { ClassSubagentStreamInterface, useStream };
193
216
  //# sourceMappingURL=stream.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.cts","names":[],"sources":["../src/stream.tsx"],"mappings":";;;;;;KA8BK,uBAAA,MACH,CAAA,SAAU,kBAAA,+BACN,kBAAA,CAAmB,EAAA,EAAI,WAAA,EAAiB,SAAA,IACxC,CAAA;;AAhBmD;;;;KAuBpD,iBAAA,MAAuB,IAAA,CAC1B,CAAA;EAGA,QAAA,EAAU,WAAA;EACV,mBAAA,GACE,OAAA,EAAS,WAAA,EACT,KAAA,cACG,eAAA,CAAgB,MAAA;AAAA,+BACQ,CAAA;EAEvB,SAAA,EAAW,CAAA;IAAY,SAAA;EAAA,IACnB,uBAAA,CAAwB,EAAA;AAAA,6CAIJ,CAAA;EAExB,YAAA,EAAc,CAAA;IACZ,YAAA,GAAe,OAAA;EAAA,KAEZ,OAAA,EAAS,SAAA,KAAkB,uBAAA,CAAwB,EAAA;AAAA;;;;;;;;AA5BzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqLP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAvBgB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,oBAAA,CAAqB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,sBAAA,CAAuB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;iBAkB3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAuB,cAAA,CAAe,CAAA,GAAI,QAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,sBAAA,CAAuB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA"}
1
+ {"version":3,"file":"stream.d.cts","names":[],"sources":["../src/stream.tsx"],"mappings":";;;;;;KAoCK,uBAAA,MACH,CAAA,SAAU,kBAAA,+BACN,kBAAA,CAAmB,EAAA,EAAI,WAAA,EAAiB,SAAA,IACxC,CAAA;AAAA,KAEM,4BAAA,aACE,MAAA,8BACD,eAAA,0CAET,IAAA,CACF,uBAAA,CAAwB,SAAA,EAAW,QAAA,EAAU,YAAA;EAG7C,QAAA,EAAU,WAAA;AAAA;;;;;;KAQP,iBAAA,MAAuB,IAAA,CAC1B,CAAA;EAYA,QAAA,EAAU,WAAA;EACV,mBAAA,GACE,OAAA,EAAS,WAAA,EACT,KAAA,cACG,eAAA,CAAgB,MAAA;AAAA,4BACK,CAAA;EAEpB,MAAA,EAAQ,CAAA;IACN,MAAA,GAAS,MAAA,WAAiB,OAAA;EAAA,KAGtB,MAAA,EACI,kBAAA,CAAmB,OAAA,CAAQ,CAAA,yCAG/B,OAAA,GAAU,CAAA,KACP,GAAA;AAAA,0CAIY,CAAA;EAErB,SAAA,EAAW,CAAA;IAAY,SAAA;EAAA,IACnB,uBAAA,CAAwB,EAAA;AAAA,6CAIJ,CAAA;EAExB,YAAA,EAAc,CAAA;IACZ,YAAA,GAAe,OAAA;EAAA,KAEZ,OAAA,EAAS,SAAA,KAAkB,uBAAA,CAAwB,EAAA;AAAA,0CAInC,CAAA;EAErB,SAAA,EAAW,CAAA;IACT,SAAA,EAAW,GAAA,SAET,uBAAA;EAAA,IAGA,GAAA,SAAY,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAEpD,eAAA,EAAiB,CAAA;IACf,eAAA,EAAiB,uBAAA;EAAA,IAMf,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAExC,WAAA,EAAa,CAAA;IACX,WAAA,GACE,EAAA,aACG,uBAAA;EAAA,KAGD,UAAA,aACG,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE7C,kBAAA,EAAoB,CAAA;IAClB,kBAAA,GACE,IAAA,aACG,uBAAA;EAAA,KAEF,IAAA,aAAiB,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE1D,qBAAA,EAAuB,CAAA;IACrB,qBAAA,GACE,EAAA,aACG,uBAAA;EAAA,KAEF,SAAA,aAAsB,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;AAAA;;;;;;;;;;;;AAhGrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyPc,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,oBAAA,CAAqB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,sBAAA,CAAuB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;iBAkB3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAuB,cAAA,CAAe,CAAA,GAAI,QAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,sBAAA,CAAuB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA"}
package/dist/stream.d.ts CHANGED
@@ -1,19 +1,26 @@
1
1
  import { UseStreamCustomOptions } from "./types.js";
2
- import { InferBag, InferStateType, MessageMetadata, ResolveStreamInterface, ResolveStreamOptions } from "@langchain/langgraph-sdk/ui";
2
+ import { AcceptBaseMessages, InferBag, InferStateType, MessageMetadata, ResolveStreamInterface, ResolveStreamOptions, SubagentStreamInterface } from "@langchain/langgraph-sdk/ui";
3
3
  import { AIMessage, BaseMessage, ToolMessage } from "@langchain/core/messages";
4
- import { BagTemplate, ToolCallWithResult } from "@langchain/langgraph-sdk";
4
+ import { BagTemplate, DefaultToolCall, ToolCallWithResult } from "@langchain/langgraph-sdk";
5
5
 
6
6
  //#region src/stream.d.ts
7
7
  type ClassToolCallWithResult<T> = T extends ToolCallWithResult<infer TC, unknown, unknown> ? ToolCallWithResult<TC, ToolMessage, AIMessage> : T;
8
+ type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall, SubagentName extends string = string> = Omit<SubagentStreamInterface<StateType, ToolCall, SubagentName>, "messages"> & {
9
+ messages: BaseMessage[];
10
+ };
8
11
  /**
9
12
  * Maps a stream interface to use @langchain/core BaseMessage class instances
10
13
  * instead of plain Message objects for the `messages` property, and remaps
11
14
  * tool call types to use @langchain/core message classes.
12
15
  */
13
- type WithClassMessages<T> = Omit<T, "messages" | "getMessagesMetadata" | "toolCalls" | "getToolCalls"> & {
16
+ type WithClassMessages<T> = Omit<T, "messages" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
14
17
  messages: BaseMessage[];
15
18
  getMessagesMetadata: (message: BaseMessage, index?: number) => MessageMetadata<Record<string, unknown>> | undefined;
16
- } & ("toolCalls" extends keyof T ? {
19
+ } & ("submit" extends keyof T ? {
20
+ submit: T extends {
21
+ submit: (values: infer V, options?: infer O) => infer Ret;
22
+ } ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : never;
23
+ } : unknown) & ("toolCalls" extends keyof T ? {
17
24
  toolCalls: T extends {
18
25
  toolCalls: (infer TC)[];
19
26
  } ? ClassToolCallWithResult<TC>[] : never;
@@ -21,6 +28,22 @@ type WithClassMessages<T> = Omit<T, "messages" | "getMessagesMetadata" | "toolCa
21
28
  getToolCalls: T extends {
22
29
  getToolCalls: (message: infer _M) => (infer TC)[];
23
30
  } ? (message: AIMessage) => ClassToolCallWithResult<TC>[] : never;
31
+ } : unknown) & ("subagents" extends keyof T ? {
32
+ subagents: T extends {
33
+ subagents: Map<string, SubagentStreamInterface<infer S, infer TC, infer N>>;
34
+ } ? Map<string, ClassSubagentStreamInterface<S, TC, N>> : never;
35
+ activeSubagents: T extends {
36
+ activeSubagents: SubagentStreamInterface<infer S, infer TC, infer N>[];
37
+ } ? ClassSubagentStreamInterface<S, TC, N>[] : never;
38
+ getSubagent: T extends {
39
+ getSubagent: (id: string) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;
40
+ } ? (toolCallId: string) => ClassSubagentStreamInterface<S, TC, N> | undefined : never;
41
+ getSubagentsByType: T extends {
42
+ getSubagentsByType: (type: string) => SubagentStreamInterface<infer S, infer TC, infer N>[];
43
+ } ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[] : never;
44
+ getSubagentsByMessage: T extends {
45
+ getSubagentsByMessage: (id: string) => SubagentStreamInterface<infer S, infer TC, infer N>[];
46
+ } ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[] : never;
24
47
  } : unknown);
25
48
  /**
26
49
  * A React hook that provides seamless integration with LangGraph streaming capabilities.
@@ -189,5 +212,5 @@ declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate
189
212
  */
190
213
  declare function useStream<T = Record<string, unknown>, Bag extends BagTemplate = BagTemplate>(options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;
191
214
  //#endregion
192
- export { useStream };
215
+ export { ClassSubagentStreamInterface, useStream };
193
216
  //# sourceMappingURL=stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","names":[],"sources":["../src/stream.tsx"],"mappings":";;;;;;KA8BK,uBAAA,MACH,CAAA,SAAU,kBAAA,+BACN,kBAAA,CAAmB,EAAA,EAAI,WAAA,EAAiB,SAAA,IACxC,CAAA;;AAhBmD;;;;KAuBpD,iBAAA,MAAuB,IAAA,CAC1B,CAAA;EAGA,QAAA,EAAU,WAAA;EACV,mBAAA,GACE,OAAA,EAAS,WAAA,EACT,KAAA,cACG,eAAA,CAAgB,MAAA;AAAA,+BACQ,CAAA;EAEvB,SAAA,EAAW,CAAA;IAAY,SAAA;EAAA,IACnB,uBAAA,CAAwB,EAAA;AAAA,6CAIJ,CAAA;EAExB,YAAA,EAAc,CAAA;IACZ,YAAA,GAAe,OAAA;EAAA,KAEZ,OAAA,EAAS,SAAA,KAAkB,uBAAA,CAAwB,EAAA;AAAA;;;;;;;;AA5BzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqLP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAvBgB,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,oBAAA,CAAqB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,sBAAA,CAAuB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;iBAkB3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAuB,cAAA,CAAe,CAAA,GAAI,QAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,sBAAA,CAAuB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA"}
1
+ {"version":3,"file":"stream.d.ts","names":[],"sources":["../src/stream.tsx"],"mappings":";;;;;;KAoCK,uBAAA,MACH,CAAA,SAAU,kBAAA,+BACN,kBAAA,CAAmB,EAAA,EAAI,WAAA,EAAiB,SAAA,IACxC,CAAA;AAAA,KAEM,4BAAA,aACE,MAAA,8BACD,eAAA,0CAET,IAAA,CACF,uBAAA,CAAwB,SAAA,EAAW,QAAA,EAAU,YAAA;EAG7C,QAAA,EAAU,WAAA;AAAA;;;;;;KAQP,iBAAA,MAAuB,IAAA,CAC1B,CAAA;EAYA,QAAA,EAAU,WAAA;EACV,mBAAA,GACE,OAAA,EAAS,WAAA,EACT,KAAA,cACG,eAAA,CAAgB,MAAA;AAAA,4BACK,CAAA;EAEpB,MAAA,EAAQ,CAAA;IACN,MAAA,GAAS,MAAA,WAAiB,OAAA;EAAA,KAGtB,MAAA,EACI,kBAAA,CAAmB,OAAA,CAAQ,CAAA,yCAG/B,OAAA,GAAU,CAAA,KACP,GAAA;AAAA,0CAIY,CAAA;EAErB,SAAA,EAAW,CAAA;IAAY,SAAA;EAAA,IACnB,uBAAA,CAAwB,EAAA;AAAA,6CAIJ,CAAA;EAExB,YAAA,EAAc,CAAA;IACZ,YAAA,GAAe,OAAA;EAAA,KAEZ,OAAA,EAAS,SAAA,KAAkB,uBAAA,CAAwB,EAAA;AAAA,0CAInC,CAAA;EAErB,SAAA,EAAW,CAAA;IACT,SAAA,EAAW,GAAA,SAET,uBAAA;EAAA,IAGA,GAAA,SAAY,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAEpD,eAAA,EAAiB,CAAA;IACf,eAAA,EAAiB,uBAAA;EAAA,IAMf,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAExC,WAAA,EAAa,CAAA;IACX,WAAA,GACE,EAAA,aACG,uBAAA;EAAA,KAGD,UAAA,aACG,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE7C,kBAAA,EAAoB,CAAA;IAClB,kBAAA,GACE,IAAA,aACG,uBAAA;EAAA,KAEF,IAAA,aAAiB,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;EAE1D,qBAAA,EAAuB,CAAA;IACrB,qBAAA,GACE,EAAA,aACG,uBAAA;EAAA,KAEF,SAAA,aAAsB,4BAAA,CAA6B,CAAA,EAAG,EAAA,EAAI,CAAA;AAAA;;;;;;;;;;;;AAhGrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyPc,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,oBAAA,CAAqB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA,KAC5C,iBAAA,CAAkB,sBAAA,CAAuB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA;;;;;;;;;;;;;;;;;iBAkB3C,SAAA,KACV,MAAA,+BACQ,WAAA,GAAc,WAAA,CAAA,CAE1B,OAAA,EAAS,sBAAA,CAAuB,cAAA,CAAe,CAAA,GAAI,QAAA,CAAS,CAAA,EAAG,GAAA,KAC9D,iBAAA,CAAkB,sBAAA,CAAuB,CAAA,EAAG,QAAA,CAAS,CAAA,EAAG,GAAA"}
package/dist/stream.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import { useStreamLGP } from "./stream.lgp.js";
2
2
  import { useStreamCustom } from "./stream.custom.js";
3
3
  import { useState } from "react";
4
-
5
4
  //#region src/stream.tsx
6
5
  function isCustomOptions(options) {
7
6
  return "transport" in options;
@@ -11,7 +10,7 @@ function useStream(options) {
11
10
  if (isCustom) return useStreamCustom(options);
12
11
  return useStreamLGP(options);
13
12
  }
14
-
15
13
  //#endregion
16
14
  export { useStream };
15
+
17
16
  //# sourceMappingURL=stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","names":[],"sources":["../src/stream.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport type { BagTemplate, ToolCallWithResult } from \"@langchain/langgraph-sdk\";\nimport type {\n UseStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferBag,\n InferStateType,\n MessageMetadata,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { useStreamLGP } from \"./stream.lgp.js\";\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport type { UseStreamCustomOptions } from \"./types.js\";\n\nfunction isCustomOptions<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | UseStreamOptions<StateType, Bag>\n | UseStreamCustomOptions<StateType, Bag>,\n): options is UseStreamCustomOptions<StateType, Bag> {\n return \"transport\" in options;\n}\n\ntype ClassToolCallWithResult<T> =\n T extends ToolCallWithResult<infer TC, unknown, unknown>\n ? ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\n/**\n * Maps a stream interface to use @langchain/core BaseMessage class instances\n * instead of plain Message objects for the `messages` property, and remaps\n * tool call types to use @langchain/core message classes.\n */\ntype WithClassMessages<T> = Omit<\n T,\n \"messages\" | \"getMessagesMetadata\" | \"toolCalls\" | \"getToolCalls\"\n> & {\n messages: BaseMessage[];\n getMessagesMetadata: (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined;\n} & (\"toolCalls\" extends keyof T\n ? {\n toolCalls: T extends { toolCalls: (infer TC)[] }\n ? ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"getToolCalls\" extends keyof T\n ? {\n getToolCalls: T extends {\n getToolCalls: (message: infer _M) => (infer TC)[];\n }\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown);\n\n/**\n * A React hook that provides seamless integration with LangGraph streaming capabilities.\n *\n * The `useStream` hook handles all the complexities of streaming, state management, and branching logic,\n * letting you focus on building great chat experiences. It provides automatic state management for\n * messages, interrupts, loading states, subagent streams, and errors.\n *\n * ## Usage with ReactAgent (recommended for createAgent users)\n *\n * When using `createAgent` from `@langchain/langgraph`, you can pass `typeof agent` as the\n * type parameter to automatically infer tool call types:\n *\n * @example\n * ```typescript\n * // In your agent file (e.g., agent.ts)\n * import { createAgent, tool } from \"langchain\";\n * import { z } from \"zod\";\n *\n * const getWeather = tool(\n * async ({ location }) => `Weather in ${location}`,\n * { name: \"get_weather\", schema: z.object({ location: z.string() }) }\n * );\n *\n * export const agent = createAgent({\n * model: \"openai:gpt-4o\",\n * tools: [getWeather],\n * });\n *\n * // In your React component\n * import { agent } from \"./agent\";\n *\n * function Chat() {\n * // Tool calls are automatically typed from the agent's tools!\n * const stream = useStream<typeof agent>({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.toolCalls[0].call.name is typed as \"get_weather\"\n * // stream.toolCalls[0].call.args is typed as { location: string }\n * }\n * ```\n *\n * ## Usage with StateGraph (for custom LangGraph applications)\n *\n * When building custom graphs with `StateGraph`, embed your tool call types directly\n * in your state's messages property using `Message<MyToolCalls>`:\n *\n * @example\n * ```typescript\n * import { Message } from \"@langchain/langgraph-sdk\";\n *\n * // Define your tool call types as a discriminated union\n * type MyToolCalls =\n * | { name: \"search\"; args: { query: string }; id?: string }\n * | { name: \"calculate\"; args: { expression: string }; id?: string };\n *\n * // Embed tool call types in your state's messages\n * interface MyGraphState {\n * messages: Message<MyToolCalls>[];\n * context?: string;\n * }\n *\n * function Chat() {\n * const stream = useStream<MyGraphState>({\n * assistantId: \"my-graph\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.values is typed as MyGraphState\n * // stream.toolCalls[0].call.name is typed as \"search\" | \"calculate\"\n * }\n * ```\n *\n * @example\n * ```typescript\n * // With additional type configuration (interrupts, configurable)\n * interface MyGraphState {\n * messages: Message<MyToolCalls>[];\n * }\n *\n * function Chat() {\n * const stream = useStream<MyGraphState, {\n * InterruptType: { question: string };\n * ConfigurableType: { userId: string };\n * }>({\n * assistantId: \"my-graph\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.interrupt is typed as { question: string } | undefined\n * }\n * ```\n *\n * ## Usage with Deep Agents (subagent streaming, experimental)\n *\n * For agents that spawn subagents (nested graphs), use `filterSubagentMessages`\n * to keep the main message stream clean while tracking subagent activity separately:\n *\n * @example\n * ```typescript\n * import { useStream, SubagentStream } from \"@langchain/langgraph-sdk/react\";\n * import type { agent } from \"./agent\";\n *\n * function DeepAgentChat() {\n * const stream = useStream<typeof agent>({\n * assistantId: \"deepagent\",\n * apiUrl: \"http://localhost:2024\",\n * // Filter subagent messages from main stream\n * filterSubagentMessages: true,\n * });\n *\n * const handleSubmit = (content: string) => {\n * stream.submit(\n * { messages: [{ content, type: \"human\" }] },\n * { streamSubgraphs: true } // Enable subgraph streaming\n * );\n * };\n *\n * // Access subagent streams via stream.subagents (Map<string, SubagentStream>)\n * const subagentList = [...stream.subagents.values()];\n *\n * return (\n * <div>\n * {stream.messages.map((msg) => <Message key={msg.id} message={msg} />)}\n *\n * {subagentList.map((subagent) => (\n * <SubagentCard\n * key={subagent.id}\n * status={subagent.status} // \"pending\" | \"running\" | \"complete\" | \"error\"\n * messages={subagent.messages}\n * toolCalls={subagent.toolCalls}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n *\n * @template T Either a ReactAgent type (with `~agentTypes`) or a state type (`Record<string, unknown>`)\n * @template Bag Type configuration bag containing:\n * - `ConfigurableType`: Type for the `config.configurable` property\n * - `InterruptType`: Type for interrupt values\n * - `CustomEventType`: Type for custom events\n * - `UpdateType`: Type for the submit function updates\n *\n * @see {@link https://docs.langchain.com/langgraph-platform/use-stream-react | LangGraph React Integration Guide}\n */\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n/**\n * A React hook that provides seamless integration with LangGraph streaming capabilities.\n *\n * The `useStream` hook handles all the complexities of streaming, state management, and branching logic,\n * letting you focus on building great chat experiences. It provides automatic state management for\n * messages, interrupts, loading states, and errors.\n *\n * @template T Either a ReactAgent type (with `~agentTypes`) or a state type (`Record<string, unknown>`)\n * @template Bag Type configuration bag containing:\n * - `ConfigurableType`: Type for the `config.configurable` property\n * - `InterruptType`: Type for interrupt values\n * - `CustomEventType`: Type for custom events\n * - `UpdateType`: Type for the submit function updates\n *\n * @see {@link https://docs.langchain.com/langgraph-platform/use-stream-react | LangGraph React Integration Guide}\n */\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useStream(options: any): any {\n // Store this in useState to make sure we're not changing the implementation in re-renders\n const [isCustom] = useState(isCustomOptions(options));\n\n if (isCustom) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStreamCustom(options);\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStreamLGP(options);\n}\n"],"mappings":";;;;;AAmBA,SAAS,gBAIP,SAGmD;AACnD,QAAO,eAAe;;AA0NxB,SAAgB,UAAU,SAAmB;CAE3C,MAAM,CAAC,YAAY,SAAS,gBAAgB,QAAQ,CAAC;AAErD,KAAI,SAEF,QAAO,gBAAgB,QAAQ;AAIjC,QAAO,aAAa,QAAQ"}
1
+ {"version":3,"file":"stream.js","names":[],"sources":["../src/stream.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type {\n BaseMessage,\n ToolMessage as CoreToolMessage,\n AIMessage as CoreAIMessage,\n} from \"@langchain/core/messages\";\nimport type {\n BagTemplate,\n ToolCallWithResult,\n DefaultToolCall,\n} from \"@langchain/langgraph-sdk\";\nimport type {\n UseStreamOptions,\n AcceptBaseMessages,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferBag,\n InferStateType,\n MessageMetadata,\n SubagentStreamInterface,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { useStreamLGP } from \"./stream.lgp.js\";\nimport { useStreamCustom } from \"./stream.custom.js\";\nimport type { UseStreamCustomOptions } from \"./types.js\";\n\nfunction isCustomOptions<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options:\n | UseStreamOptions<StateType, Bag>\n | UseStreamCustomOptions<StateType, Bag>,\n): options is UseStreamCustomOptions<StateType, Bag> {\n return \"transport\" in options;\n}\n\ntype ClassToolCallWithResult<T> =\n T extends ToolCallWithResult<infer TC, unknown, unknown>\n ? ToolCallWithResult<TC, CoreToolMessage, CoreAIMessage>\n : T;\n\nexport type ClassSubagentStreamInterface<\n StateType = Record<string, unknown>,\n ToolCall = DefaultToolCall,\n SubagentName extends string = string,\n> = Omit<\n SubagentStreamInterface<StateType, ToolCall, SubagentName>,\n \"messages\"\n> & {\n messages: BaseMessage[];\n};\n\n/**\n * Maps a stream interface to use @langchain/core BaseMessage class instances\n * instead of plain Message objects for the `messages` property, and remaps\n * tool call types to use @langchain/core message classes.\n */\ntype WithClassMessages<T> = Omit<\n T,\n | \"messages\"\n | \"getMessagesMetadata\"\n | \"toolCalls\"\n | \"getToolCalls\"\n | \"submit\"\n | \"subagents\"\n | \"activeSubagents\"\n | \"getSubagent\"\n | \"getSubagentsByType\"\n | \"getSubagentsByMessage\"\n> & {\n messages: BaseMessage[];\n getMessagesMetadata: (\n message: BaseMessage,\n index?: number,\n ) => MessageMetadata<Record<string, unknown>> | undefined;\n} & (\"submit\" extends keyof T\n ? {\n submit: T extends {\n submit: (values: infer V, options?: infer O) => infer Ret;\n }\n ? (\n values:\n | AcceptBaseMessages<Exclude<V, null | undefined>>\n | null\n | undefined,\n options?: O,\n ) => Ret\n : never;\n }\n : unknown) &\n (\"toolCalls\" extends keyof T\n ? {\n toolCalls: T extends { toolCalls: (infer TC)[] }\n ? ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"getToolCalls\" extends keyof T\n ? {\n getToolCalls: T extends {\n getToolCalls: (message: infer _M) => (infer TC)[];\n }\n ? (message: CoreAIMessage) => ClassToolCallWithResult<TC>[]\n : never;\n }\n : unknown) &\n (\"subagents\" extends keyof T\n ? {\n subagents: T extends {\n subagents: Map<\n string,\n SubagentStreamInterface<infer S, infer TC, infer N>\n >;\n }\n ? Map<string, ClassSubagentStreamInterface<S, TC, N>>\n : never;\n activeSubagents: T extends {\n activeSubagents: SubagentStreamInterface<\n infer S,\n infer TC,\n infer N\n >[];\n }\n ? ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagent: T extends {\n getSubagent: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N> | undefined;\n }\n ? (\n toolCallId: string,\n ) => ClassSubagentStreamInterface<S, TC, N> | undefined\n : never;\n getSubagentsByType: T extends {\n getSubagentsByType: (\n type: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (type: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n getSubagentsByMessage: T extends {\n getSubagentsByMessage: (\n id: string,\n ) => SubagentStreamInterface<infer S, infer TC, infer N>[];\n }\n ? (messageId: string) => ClassSubagentStreamInterface<S, TC, N>[]\n : never;\n }\n : unknown);\n\n/**\n * A React hook that provides seamless integration with LangGraph streaming capabilities.\n *\n * The `useStream` hook handles all the complexities of streaming, state management, and branching logic,\n * letting you focus on building great chat experiences. It provides automatic state management for\n * messages, interrupts, loading states, subagent streams, and errors.\n *\n * ## Usage with ReactAgent (recommended for createAgent users)\n *\n * When using `createAgent` from `@langchain/langgraph`, you can pass `typeof agent` as the\n * type parameter to automatically infer tool call types:\n *\n * @example\n * ```typescript\n * // In your agent file (e.g., agent.ts)\n * import { createAgent, tool } from \"langchain\";\n * import { z } from \"zod\";\n *\n * const getWeather = tool(\n * async ({ location }) => `Weather in ${location}`,\n * { name: \"get_weather\", schema: z.object({ location: z.string() }) }\n * );\n *\n * export const agent = createAgent({\n * model: \"openai:gpt-4o\",\n * tools: [getWeather],\n * });\n *\n * // In your React component\n * import { agent } from \"./agent\";\n *\n * function Chat() {\n * // Tool calls are automatically typed from the agent's tools!\n * const stream = useStream<typeof agent>({\n * assistantId: \"agent\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.toolCalls[0].call.name is typed as \"get_weather\"\n * // stream.toolCalls[0].call.args is typed as { location: string }\n * }\n * ```\n *\n * ## Usage with StateGraph (for custom LangGraph applications)\n *\n * When building custom graphs with `StateGraph`, embed your tool call types directly\n * in your state's messages property using `Message<MyToolCalls>`:\n *\n * @example\n * ```typescript\n * import { Message } from \"@langchain/langgraph-sdk\";\n *\n * // Define your tool call types as a discriminated union\n * type MyToolCalls =\n * | { name: \"search\"; args: { query: string }; id?: string }\n * | { name: \"calculate\"; args: { expression: string }; id?: string };\n *\n * // Embed tool call types in your state's messages\n * interface MyGraphState {\n * messages: Message<MyToolCalls>[];\n * context?: string;\n * }\n *\n * function Chat() {\n * const stream = useStream<MyGraphState>({\n * assistantId: \"my-graph\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.values is typed as MyGraphState\n * // stream.toolCalls[0].call.name is typed as \"search\" | \"calculate\"\n * }\n * ```\n *\n * @example\n * ```typescript\n * // With additional type configuration (interrupts, configurable)\n * interface MyGraphState {\n * messages: Message<MyToolCalls>[];\n * }\n *\n * function Chat() {\n * const stream = useStream<MyGraphState, {\n * InterruptType: { question: string };\n * ConfigurableType: { userId: string };\n * }>({\n * assistantId: \"my-graph\",\n * apiUrl: \"http://localhost:2024\",\n * });\n *\n * // stream.interrupt is typed as { question: string } | undefined\n * }\n * ```\n *\n * ## Usage with Deep Agents (subagent streaming, experimental)\n *\n * For agents that spawn subagents (nested graphs), use `filterSubagentMessages`\n * to keep the main message stream clean while tracking subagent activity separately:\n *\n * @example\n * ```typescript\n * import { useStream, SubagentStream } from \"@langchain/langgraph-sdk/react\";\n * import type { agent } from \"./agent\";\n *\n * function DeepAgentChat() {\n * const stream = useStream<typeof agent>({\n * assistantId: \"deepagent\",\n * apiUrl: \"http://localhost:2024\",\n * // Filter subagent messages from main stream\n * filterSubagentMessages: true,\n * });\n *\n * const handleSubmit = (content: string) => {\n * stream.submit(\n * { messages: [{ content, type: \"human\" }] },\n * { streamSubgraphs: true } // Enable subgraph streaming\n * );\n * };\n *\n * // Access subagent streams via stream.subagents (Map<string, SubagentStream>)\n * const subagentList = [...stream.subagents.values()];\n *\n * return (\n * <div>\n * {stream.messages.map((msg) => <Message key={msg.id} message={msg} />)}\n *\n * {subagentList.map((subagent) => (\n * <SubagentCard\n * key={subagent.id}\n * status={subagent.status} // \"pending\" | \"running\" | \"complete\" | \"error\"\n * messages={subagent.messages}\n * toolCalls={subagent.toolCalls}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n *\n * @template T Either a ReactAgent type (with `~agentTypes`) or a state type (`Record<string, unknown>`)\n * @template Bag Type configuration bag containing:\n * - `ConfigurableType`: Type for the `config.configurable` property\n * - `InterruptType`: Type for interrupt values\n * - `CustomEventType`: Type for custom events\n * - `UpdateType`: Type for the submit function updates\n *\n * @see {@link https://docs.langchain.com/langgraph-platform/use-stream-react | LangGraph React Integration Guide}\n */\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n/**\n * A React hook that provides seamless integration with LangGraph streaming capabilities.\n *\n * The `useStream` hook handles all the complexities of streaming, state management, and branching logic,\n * letting you focus on building great chat experiences. It provides automatic state management for\n * messages, interrupts, loading states, and errors.\n *\n * @template T Either a ReactAgent type (with `~agentTypes`) or a state type (`Record<string, unknown>`)\n * @template Bag Type configuration bag containing:\n * - `ConfigurableType`: Type for the `config.configurable` property\n * - `InterruptType`: Type for interrupt values\n * - `CustomEventType`: Type for custom events\n * - `UpdateType`: Type for the submit function updates\n *\n * @see {@link https://docs.langchain.com/langgraph-platform/use-stream-react | LangGraph React Integration Guide}\n */\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate,\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>,\n): WithClassMessages<ResolveStreamInterface<T, InferBag<T, Bag>>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useStream(options: any): any {\n // Store this in useState to make sure we're not changing the implementation in re-renders\n const [isCustom] = useState(isCustomOptions(options));\n\n if (isCustom) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStreamCustom(options);\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStreamLGP(options);\n}\n"],"mappings":";;;;AAyBA,SAAS,gBAIP,SAGmD;AACnD,QAAO,eAAe;;AAySxB,SAAgB,UAAU,SAAmB;CAE3C,MAAM,CAAC,YAAY,SAAS,gBAAgB,QAAQ,CAAC;AAErD,KAAI,SAEF,QAAO,gBAAgB,QAAQ;AAIjC,QAAO,aAAa,QAAQ"}