langgraph-api 0.11.0.dev5__tar.gz → 0.11.0.dev6__tar.gz

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 (287) hide show
  1. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/PKG-INFO +1 -1
  2. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/continuous/pyproject.toml +3 -3
  3. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/continuous/uv.lock +12 -12
  4. langgraph_api-0.11.0.dev6/langgraph_api/__init__.py +1 -0
  5. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/event_streaming/session.py +43 -8
  6. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/ops/runs.py +2 -0
  7. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/client.mts +76 -4
  8. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/package.json +2 -2
  9. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/remote.py +30 -0
  10. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/yarn.lock +8 -32
  11. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/stream.py +53 -2
  12. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/stream_v2.py +61 -33
  13. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +2 -2
  14. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +8 -0
  15. langgraph_api-0.11.0.dev5/langgraph_api/__init__.py +0 -1
  16. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/.gitignore +0 -0
  17. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/LICENSE +0 -0
  18. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/Makefile +0 -0
  19. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/README.md +0 -0
  20. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/.gitignore +0 -0
  21. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/Makefile +0 -0
  22. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/README.md +0 -0
  23. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/assistant.ts +0 -0
  24. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  25. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  26. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  27. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  28. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  29. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/log-failure.ts +0 -0
  30. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  31. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/stream_write.ts +0 -0
  32. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/thread.ts +0 -0
  33. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  34. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  35. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/types.ts +0 -0
  36. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/benchmark-runners/wait_write.ts +0 -0
  37. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/capacity_dd_report.py +0 -0
  38. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/capacity_k6.js +0 -0
  39. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/capacity_runner.mjs +0 -0
  40. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/capacity_slack_report.py +0 -0
  41. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/capacity_urls.mjs +0 -0
  42. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/clean-cli.js +0 -0
  43. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/clean.js +0 -0
  44. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/continuous/README.md +0 -0
  45. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/continuous/runner.py +0 -0
  46. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/graphs.js +0 -0
  47. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/mixed_workload_k6.js +0 -0
  48. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/mixed_workload_runner.mjs +0 -0
  49. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/package.json +0 -0
  50. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/ramp.js +0 -0
  51. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/reporting/dd_reporting.py +0 -0
  52. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/reporting/slack_slowest_runs.py +0 -0
  53. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/reporting/slack_summary.py +0 -0
  54. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/run_local.sh +0 -0
  55. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/staircase.py +0 -0
  56. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/staircase_step_k6.js +0 -0
  57. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/tsconfig.json +0 -0
  58. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/update-revision.js +0 -0
  59. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/benchmark/weather.js +0 -0
  60. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/constraints.txt +0 -0
  61. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/custom_store.sql +0 -0
  62. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/forbidden.txt +0 -0
  63. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/hatch_build.py +0 -0
  64. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/healthcheck.py +0 -0
  65. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  66. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/_checkpointer/__init__.py +0 -0
  67. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/_checkpointer/_adapter.py +0 -0
  68. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/_checkpointer/protocol.py +0 -0
  69. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/_factory_utils.py +0 -0
  70. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/__init__.py +0 -0
  71. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/a2a.py +0 -0
  72. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/assistants.py +0 -0
  73. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/event_streaming.py +0 -0
  74. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/mcp/__init__.py +0 -0
  75. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/mcp/_constants.py +0 -0
  76. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/mcp/_handlers.py +0 -0
  77. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/mcp/_models.py +0 -0
  78. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/mcp/_routes.py +0 -0
  79. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  80. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/meta.py +0 -0
  81. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/openapi.py +0 -0
  82. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/profile.py +0 -0
  83. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/runs.py +0 -0
  84. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/store.py +0 -0
  85. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/threads.py +0 -0
  86. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/api/ui.py +0 -0
  87. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/asgi_transport.py +0 -0
  88. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/asyncio.py +0 -0
  89. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/auth/__init__.py +0 -0
  90. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/auth/custom.py +0 -0
  91. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/auth/errors.py +0 -0
  92. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/auth/langsmith/__init__.py +0 -0
  93. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/auth/langsmith/backend.py +0 -0
  94. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/auth/langsmith/client.py +0 -0
  95. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/auth/middleware.py +0 -0
  96. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/auth/noop.py +0 -0
  97. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/auth/studio_user.py +0 -0
  98. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/cache.py +0 -0
  99. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/cli.py +0 -0
  100. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/command.py +0 -0
  101. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/config/__init__.py +0 -0
  102. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/config/_parse.py +0 -0
  103. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/config/schemas.py +0 -0
  104. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/cron_scheduler.py +0 -0
  105. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/encryption/__init__.py +0 -0
  106. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/encryption/aes_json.py +0 -0
  107. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/encryption/context.py +0 -0
  108. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/encryption/custom.py +0 -0
  109. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/encryption/middleware.py +0 -0
  110. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/encryption/shared.py +0 -0
  111. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/errors.py +0 -0
  112. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/event_streaming/__init__.py +0 -0
  113. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/event_streaming/capabilities.py +0 -0
  114. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/event_streaming/constants.py +0 -0
  115. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  116. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/event_streaming/namespace.py +0 -0
  117. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/event_streaming/service.py +0 -0
  118. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/event_streaming/state_normalizers.py +0 -0
  119. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/event_streaming/types.py +0 -0
  120. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/feature_flags.py +0 -0
  121. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/graph.py +0 -0
  122. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/__init__.py +0 -0
  123. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/client.py +0 -0
  124. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  125. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/ops/__init__.py +0 -0
  126. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/ops/assistants.py +0 -0
  127. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/ops/cache.py +0 -0
  128. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/ops/crons.py +0 -0
  129. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/ops/threads.py +0 -0
  130. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/server.py +0 -0
  131. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/servicers/__init__.py +0 -0
  132. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  133. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/grpc/servicers/encryption.py +0 -0
  134. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/http.py +0 -0
  135. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/http_metrics.py +0 -0
  136. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/http_metrics_utils.py +0 -0
  137. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/.gitignore +0 -0
  138. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/.prettierrc +0 -0
  139. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/__init__.py +0 -0
  140. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/base.py +0 -0
  141. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/build.mts +0 -0
  142. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/client.http.mts +0 -0
  143. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/errors.py +0 -0
  144. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/global.d.ts +0 -0
  145. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/schema.py +0 -0
  146. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/src/graph.mts +0 -0
  147. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/src/load.hooks.mjs +0 -0
  148. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/src/preload.mjs +0 -0
  149. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  150. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/src/utils/files.mts +0 -0
  151. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/src/utils/importMap.mts +0 -0
  152. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  153. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/src/utils/serde.mts +0 -0
  154. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/sse.py +0 -0
  155. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/traceblock.mts +0 -0
  156. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/tsconfig.json +0 -0
  157. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/js/ui.py +0 -0
  158. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/lc_security/__init__.py +0 -0
  159. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/lc_security/exceptions.py +0 -0
  160. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/lc_security/policy.py +0 -0
  161. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/lc_security/transport.py +0 -0
  162. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/logging.py +0 -0
  163. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/metadata.py +0 -0
  164. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/metrics_otlp.py +0 -0
  165. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/middleware/__init__.py +0 -0
  166. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/middleware/ensure_store.py +0 -0
  167. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/middleware/http_logger.py +0 -0
  168. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/middleware/private_network.py +0 -0
  169. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/middleware/request_id.py +0 -0
  170. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/models/__init__.py +0 -0
  171. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/models/run.py +0 -0
  172. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/otel_context.py +0 -0
  173. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/patch.py +0 -0
  174. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/queue_entrypoint.py +0 -0
  175. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/release_tags.py +0 -0
  176. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/route.py +0 -0
  177. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/schema.py +0 -0
  178. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/self_hosted_logs.py +0 -0
  179. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/self_hosted_metrics.py +0 -0
  180. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/serde.py +0 -0
  181. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/server.py +0 -0
  182. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/sse.py +0 -0
  183. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/state.py +0 -0
  184. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/store.py +0 -0
  185. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/timing/__init__.py +0 -0
  186. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/timing/profiler.py +0 -0
  187. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/timing/timer.py +0 -0
  188. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/traceblock.py +0 -0
  189. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/tunneling/cloudflare.py +0 -0
  190. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/__init__.py +0 -0
  191. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/cache.py +0 -0
  192. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/config.py +0 -0
  193. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/errors.py +0 -0
  194. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/extract.py +0 -0
  195. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/future.py +0 -0
  196. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/headers.py +0 -0
  197. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/network.py +0 -0
  198. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/retriable_client.py +0 -0
  199. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/stream_codec.py +0 -0
  200. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/utils/uuids.py +0 -0
  201. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/validation.py +0 -0
  202. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/webhook.py +0 -0
  203. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_api/worker.py +0 -0
  204. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/__init__.py +0 -0
  205. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/checkpointer.py +0 -0
  206. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/conversion/__init__.py +0 -0
  207. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/conversion/_compat.py +0 -0
  208. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  209. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/conversion/config.py +0 -0
  210. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/conversion/durability.py +0 -0
  211. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/conversion/struct.py +0 -0
  212. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/conversion/value.py +0 -0
  213. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/__init__.py +0 -0
  214. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  215. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  216. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  217. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  218. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  219. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  220. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  221. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  222. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  223. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  224. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  225. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  226. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  227. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  228. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  229. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  230. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  231. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  232. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  233. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  234. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  235. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  236. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  237. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  238. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  239. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  240. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  241. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  242. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  243. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  244. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  245. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  246. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  247. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  248. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  249. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  250. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  251. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  252. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  253. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  254. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  255. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  256. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  257. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  258. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  259. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  260. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  261. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  262. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  263. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  264. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  265. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  266. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  267. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  268. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_grpc_common/serde.py +0 -0
  269. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_license/__init__.py +0 -0
  270. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_license/validation.py +0 -0
  271. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/__init__.py +0 -0
  272. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/checkpoint.py +0 -0
  273. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/database.py +0 -0
  274. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/lifespan.py +0 -0
  275. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/metrics.py +0 -0
  276. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/ops.py +0 -0
  277. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/queue.py +0 -0
  278. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/retry.py +0 -0
  279. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/routes.py +0 -0
  280. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/langgraph_runtime/store.py +0 -0
  281. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/logging.json +0 -0
  282. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/openapi.json +0 -0
  283. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/pyproject.toml +0 -0
  284. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/scripts/build_wheel.py +0 -0
  285. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/scripts/create_license.py +0 -0
  286. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/scripts/run_a2a_tck.py +0 -0
  287. {langgraph_api-0.11.0.dev5 → langgraph_api-0.11.0.dev6}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.11.0.dev5
3
+ Version: 0.11.0.dev6
4
4
  Author-email: Will Fu-Hinthorn <will@langchain.dev>, Josh Rogers <josh@langchain.dev>, Parker Rule <parker@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -4,10 +4,10 @@ version = "0.1.0"
4
4
  description = "Continuous stress test for Agent Server"
5
5
  requires-python = ">=3.13"
6
6
  dependencies = [
7
- "langgraph-sdk>=0.3.13",
8
- "click>=8.3.3",
7
+ "langgraph-sdk>=0.3.15",
8
+ "click>=8.4.1",
9
9
  "structlog>=24.1.0",
10
- "datadog-api-client>=2.0.0",
10
+ "datadog-api-client>=2.55.0",
11
11
  "python-dateutil>=2.8.0",
12
12
  "httpx>=0.27.0",
13
13
  ]
@@ -25,14 +25,14 @@ wheels = [
25
25
 
26
26
  [[package]]
27
27
  name = "click"
28
- version = "8.3.3"
28
+ version = "8.4.1"
29
29
  source = { registry = "https://pypi.org/simple" }
30
30
  dependencies = [
31
31
  { name = "colorama", marker = "sys_platform == 'win32'" },
32
32
  ]
33
- sdist = { url = "https://files.pythonhosted.org/packages/bb/63/f9e1ea081ce35720d8b92acde70daaedace594dc93b693c869e0d5910718/click-8.3.3.tar.gz", hash = "sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2", size = 328061, upload-time = "2026-04-22T15:11:27.506Z" }
33
+ sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" }
34
34
  wheels = [
35
- { url = "https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl", hash = "sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613", size = 110502, upload-time = "2026-04-22T15:11:25.044Z" },
35
+ { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" },
36
36
  ]
37
37
 
38
38
  [[package]]
@@ -46,7 +46,7 @@ wheels = [
46
46
 
47
47
  [[package]]
48
48
  name = "datadog-api-client"
49
- version = "2.53.0"
49
+ version = "2.55.0"
50
50
  source = { registry = "https://pypi.org/simple" }
51
51
  dependencies = [
52
52
  { name = "certifi" },
@@ -54,9 +54,9 @@ dependencies = [
54
54
  { name = "typing-extensions" },
55
55
  { name = "urllib3" },
56
56
  ]
57
- sdist = { url = "https://files.pythonhosted.org/packages/20/37/4f537b327906ff5fdf26531f2b3ec8994ffa41630d4bf1e130bb2cacb202/datadog_api_client-2.53.0.tar.gz", hash = "sha256:85e44f269d0a9757821a7af4ee35e324355a11ebe0efaabf6688efd9fa169d85", size = 4537088, upload-time = "2026-04-01T15:29:44.503Z" }
57
+ sdist = { url = "https://files.pythonhosted.org/packages/ee/8d/6f7ddd04cc701cc590eab111a45e54c92158eddbff943ad4a1dbb5925b21/datadog_api_client-2.55.0.tar.gz", hash = "sha256:c56767c867a15b928da08d5c6077a7ac466e029a10a5045e80d79d76e92afaa3", size = 4994403, upload-time = "2026-05-15T17:20:06.825Z" }
58
58
  wheels = [
59
- { url = "https://files.pythonhosted.org/packages/e9/a1/78ccb200fa3d037465cef14b0163005279757026429e76b5807e392dca1b/datadog_api_client-2.53.0-py3-none-any.whl", hash = "sha256:f965c10f846da03d3d1abe99f20331e42933c8736b7ee176f0a420ca019f1b17", size = 5925406, upload-time = "2026-04-01T15:29:41.128Z" },
59
+ { url = "https://files.pythonhosted.org/packages/c7/28/9af04e1cccb57bc9754a5d4cd2fc5a006183e95b234336e9115fe95e5f12/datadog_api_client-2.55.0-py3-none-any.whl", hash = "sha256:fef8dcadbdcd1f7fbe89d97825cfc06c9a1e3577b61f04834b8d250c881d59a7", size = 6644614, upload-time = "2026-05-15T17:20:03.927Z" },
60
60
  ]
61
61
 
62
62
  [[package]]
@@ -120,25 +120,25 @@ dependencies = [
120
120
 
121
121
  [package.metadata]
122
122
  requires-dist = [
123
- { name = "click", specifier = ">=8.3.3" },
124
- { name = "datadog-api-client", specifier = ">=2.0.0" },
123
+ { name = "click", specifier = ">=8.4.1" },
124
+ { name = "datadog-api-client", specifier = ">=2.55.0" },
125
125
  { name = "httpx", specifier = ">=0.27.0" },
126
- { name = "langgraph-sdk", specifier = ">=0.3.13" },
126
+ { name = "langgraph-sdk", specifier = ">=0.3.15" },
127
127
  { name = "python-dateutil", specifier = ">=2.8.0" },
128
128
  { name = "structlog", specifier = ">=24.1.0" },
129
129
  ]
130
130
 
131
131
  [[package]]
132
132
  name = "langgraph-sdk"
133
- version = "0.3.14"
133
+ version = "0.3.15"
134
134
  source = { registry = "https://pypi.org/simple" }
135
135
  dependencies = [
136
136
  { name = "httpx" },
137
137
  { name = "orjson" },
138
138
  ]
139
- sdist = { url = "https://files.pythonhosted.org/packages/02/f1/134046c20bc4a4a15d410d1d21c9e298a3e9923777b4cc867b8669bc636b/langgraph_sdk-0.3.14.tar.gz", hash = "sha256:acd1674c538e97f3cdaa610f6dd7e34bc9bad30167f0ccc482dcd563325e81f5", size = 198162, upload-time = "2026-05-05T18:40:03.524Z" }
139
+ sdist = { url = "https://files.pythonhosted.org/packages/66/af/cdd4d6f3c05b3c1112ed3f12ef830faf15951b21d22cbc622a4becbbe25c/langgraph_sdk-0.3.15.tar.gz", hash = "sha256:29e805003d2c6e296823dd71992610976fd0428cefaa8b3304fd91f2247037de", size = 201924, upload-time = "2026-05-22T16:54:27.678Z" }
140
140
  wheels = [
141
- { url = "https://files.pythonhosted.org/packages/34/96/1c9f9fbfe756ddd850a2585e7f1949d8ebb97fdaa7a5eff8f45ed1314670/langgraph_sdk-0.3.14-py3-none-any.whl", hash = "sha256:68935bf6f4924eda92617a9e5dfb4f4281197508c648cb9d62ff083907607f9d", size = 97028, upload-time = "2026-05-05T18:40:02.099Z" },
141
+ { url = "https://files.pythonhosted.org/packages/be/a5/0196d9c05749c25bc198e4909d68c998bc3120297e14944921baf2f4c384/langgraph_sdk-0.3.15-py3-none-any.whl", hash = "sha256:3838773acf7456d158165385d49f48f1e856f28b56ccd99ea139a8f27004815d", size = 98166, upload-time = "2026-05-22T16:54:26.013Z" },
142
142
  ]
143
143
 
144
144
  [[package]]
@@ -0,0 +1 @@
1
+ __version__ = "0.11.0.dev6"
@@ -698,25 +698,60 @@ class EventStreamingSession:
698
698
  if namespace:
699
699
  self._register_namespaces(namespace)
700
700
 
701
- # Values events may carry pending interrupts on
702
- # ``params.interrupts`` (upstream ValuesTransformer convention).
703
- # Path 1 reads them from the ``__interrupt__`` key on the
704
- # values payload; either way, surface them on the ``input``
705
- # channel BEFORE the values snapshot so both paths produce the
706
- # same ordering.
707
- if method == "values":
701
+ data = params.get("data")
702
+
703
+ # Surface pending interrupts on the ``input`` channel. This branch
704
+ # exists for the JS sidecar (hybrid Python API + JS graph) path:
705
+ # the sidecar's v3 stream emits already-normalized ProtocolEvents
706
+ # that reach this handler, and it carries tool-raised interrupts
707
+ # (headless tools, human-in-the-loop) inline on ``updates`` /
708
+ # ``values`` events rather than on a dedicated channel. Without
709
+ # converting them into an ``input`` event here, the SDK renders the
710
+ # interrupting tool call but never learns the interrupt id, so it
711
+ # can't execute or resume the run. The carrier shape varies, so we
712
+ # accept all of them:
713
+ # * ``params.interrupts`` — native ValuesTransformer convention.
714
+ # * an ``updates`` event with ``node == "__interrupt__"`` whose
715
+ # ``data.values`` is the interrupt array — the JS sidecar shape.
716
+ # * the ``__interrupt__`` key on a ``values`` snapshot payload.
717
+ # ``_emit_input_requested_events`` dedupes by interrupt id, so
718
+ # overlapping shapes for one interrupt collapse to a single event.
719
+ if method == "updates":
720
+ update_node = params.get("node")
721
+ if not isinstance(update_node, str) and _is_record(data):
722
+ candidate = data.get("node")
723
+ update_node = candidate if isinstance(candidate, str) else None
724
+ if update_node == "__interrupt__":
725
+ interrupt_array = data.get("values") if _is_record(data) else None
726
+ await self._emit_input_requested_events(
727
+ namespace, normalize_input_requested_data(interrupt_array)
728
+ )
729
+ # The ``__interrupt__`` update is purely the interrupt
730
+ # signal, not real state — it's consumed by the ``input``
731
+ # channel above and must not also be forwarded as a plain
732
+ # ``updates`` event.
733
+ return
734
+ elif method == "values":
735
+ # Always strip ``__interrupt__`` from the payload so it never
736
+ # leaks into the forwarded ``values`` event, regardless of
737
+ # which carrier the interrupt also rode in on. Surface
738
+ # interrupts from both carriers — ``_emit_input_requested_events``
739
+ # dedupes by interrupt id, so a single interrupt arriving on
740
+ # both collapses to one event.
741
+ input_requests, data = strip_interrupts_from_values(data)
708
742
  interrupts = params.get("interrupts")
709
743
  if isinstance(interrupts, (list, tuple)) and interrupts:
710
744
  await self._emit_input_requested_events(
711
745
  namespace, _coerce_interrupt_requests(interrupts)
712
746
  )
747
+ if input_requests:
748
+ await self._emit_input_requested_events(namespace, input_requests)
713
749
 
714
750
  # Delegate envelope construction to the shared primitive. This
715
751
  # is the unified wire-shaping step; any envelope change lives
716
752
  # in ``_create_event`` and both paths follow.
717
753
  raw_timestamp = params.get("timestamp")
718
754
  timestamp = raw_timestamp if isinstance(raw_timestamp, int) else None
719
- data = params.get("data")
720
755
 
721
756
  # Forward the producing graph node on the wire envelope to keep
722
757
  # Path 2 at parity with Path 1 (:meth:`_handle_source_event`).
@@ -130,6 +130,8 @@ STREAM_MODE_TO_PB = {
130
130
  "custom": enum_stream_mode.custom,
131
131
  "events": enum_stream_mode.events,
132
132
  "messages-tuple": enum_stream_mode.messages_tuple,
133
+ "tools": enum_stream_mode.tools,
134
+ "lifecycle": enum_stream_mode.lifecycle,
133
135
  }
134
136
 
135
137
  STREAM_MODE_FROM_PB = {
@@ -383,9 +383,29 @@ const handleStream = <T extends z.ZodType<any>>(
383
383
  };
384
384
  };
385
385
 
386
+ // Runtime-only callbacks must never cross the checkpoint boundary. The v3
387
+ // stream injects a ``StreamProtocolMessagesHandler`` into ``config.callbacks``;
388
+ // when that config is handed to the checkpointer it is sent to Python,
389
+ // echoed back on the returned tuple's ``config`` / ``parent_config``, and
390
+ // then fails ``load()`` because the handler serializes as a
391
+ // ``not_implemented`` object (breaking branch / regenerate). The checkpointer
392
+ // only needs ``configurable`` ids, so drop ``callbacks`` before sending.
393
+ function stripConfigCallbacks(
394
+ config: RunnableConfig | undefined,
395
+ ): RunnableConfig | undefined {
396
+ if (config == null || typeof config !== "object" || !("callbacks" in config))
397
+ return config;
398
+ const { callbacks: _callbacks, ...rest } = config as RunnableConfig & {
399
+ callbacks?: unknown;
400
+ };
401
+ return rest;
402
+ }
403
+
386
404
  class RemoteCheckpointer extends BaseCheckpointSaver<number | string> {
387
405
  async getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined> {
388
- const result = await sendRecv("checkpointer_get_tuple", { config });
406
+ const result = await sendRecv("checkpointer_get_tuple", {
407
+ config: stripConfigCallbacks(config),
408
+ });
389
409
 
390
410
  if (!result) return undefined;
391
411
  return {
@@ -405,7 +425,13 @@ class RemoteCheckpointer extends BaseCheckpointSaver<number | string> {
405
425
  filter?: Record<string, any>;
406
426
  },
407
427
  ): AsyncGenerator<CheckpointTuple> {
408
- const result = await sendRecv("checkpointer_list", { config, ...options });
428
+ const result = await sendRecv("checkpointer_list", {
429
+ config: stripConfigCallbacks(config),
430
+ ...options,
431
+ ...(options?.before
432
+ ? { before: stripConfigCallbacks(options.before) }
433
+ : {}),
434
+ });
409
435
 
410
436
  for (const item of result) {
411
437
  yield {
@@ -425,7 +451,7 @@ class RemoteCheckpointer extends BaseCheckpointSaver<number | string> {
425
451
  newVersions: ChannelVersions,
426
452
  ): Promise<RunnableConfig> {
427
453
  return await sendRecv<RunnableConfig>("checkpointer_put", {
428
- config,
454
+ config: stripConfigCallbacks(config),
429
455
  checkpoint,
430
456
  metadata,
431
457
  new_versions: newVersions,
@@ -437,7 +463,11 @@ class RemoteCheckpointer extends BaseCheckpointSaver<number | string> {
437
463
  writes: [string, unknown][],
438
464
  taskId: string,
439
465
  ): Promise<void> {
440
- await sendRecv("checkpointer_put_writes", { config, writes, taskId });
466
+ await sendRecv("checkpointer_put_writes", {
467
+ config: stripConfigCallbacks(config),
468
+ writes,
469
+ taskId,
470
+ });
441
471
  }
442
472
 
443
473
  getNextVersion(
@@ -617,6 +647,12 @@ const StreamEventsPayload = z.object({
617
647
  interrupt_before: z.union([z.array(z.string()), z.literal("*")]).nullish(),
618
648
  interrupt_after: z.union([z.array(z.string()), z.literal("*")]).nullish(),
619
649
  subgraphs: z.boolean().optional(),
650
+ // Selects the wire shape the worker expects back. ``"v3"`` is only sent
651
+ // by the Protocol v2 event-streaming endpoints and switches this handler
652
+ // onto LangGraphJS's native v3 stream (ProtocolEvents). Absent / ``"v2"``
653
+ // keeps the legacy ``on_chain_stream`` behavior used by the older
654
+ // streaming endpoints.
655
+ stream_protocol: z.enum(["v2", "v3"]).nullish(),
620
656
  });
621
657
 
622
658
  function reviveCommand(
@@ -713,6 +749,42 @@ async function* streamEventsRequest(
713
749
  ? [new LangChainTracer({ replicas })]
714
750
  : undefined;
715
751
 
752
+ // Protocol v2 event-streaming runs request ``stream_protocol: "v3"``.
753
+ // Drive the run through LangGraphJS's native v3 stream so its
754
+ // StreamMux / transformer pipeline emits protocol-aligned ProtocolEvents
755
+ // (messages content blocks, tools, custom:* channels, checkpoints)
756
+ // directly. The worker forwards these straight into
757
+ // ``EventStreamingSession`` — none of the legacy ``on_chain_stream``
758
+ // reconstruction below runs. The graph's own ``streamTransformers`` are
759
+ // merged in automatically by ``#streamEventsV3``, so custom channels work
760
+ // without any per-channel patching here. Legacy endpoints fall through to
761
+ // the unchanged ``version: "v2"`` path so their behavior is preserved.
762
+ if (payload.stream_protocol === "v3") {
763
+ // The v3 overload forces ``streamMode``/``subgraphs`` internally and
764
+ // returns an awaitable ``GraphRunStream`` of ProtocolEvents. Cast away
765
+ // the pinned ``CompiledGraph`` typing, which may predate the v3
766
+ // overload depending on the installed ``@langchain/langgraph``.
767
+ const protocolStream = await (
768
+ graph as unknown as {
769
+ streamEvents: (
770
+ input: unknown,
771
+ options: Record<string, unknown>,
772
+ ) => Promise<AsyncIterable<unknown>>;
773
+ }
774
+ ).streamEvents(input, {
775
+ ...config,
776
+ version: "v3",
777
+ interruptBefore,
778
+ interruptAfter,
779
+ ...(callbacks ? { callbacks } : {}),
780
+ });
781
+
782
+ for await (const event of protocolStream) {
783
+ yield event;
784
+ }
785
+ return;
786
+ }
787
+
716
788
  for await (const data of graph.streamEvents(input, {
717
789
  ...config,
718
790
  version: "v2",
@@ -9,7 +9,7 @@
9
9
  "dependencies": {
10
10
  "@hono/node-server": "^1.19.13",
11
11
  "@hono/zod-validator": "^0.7.6",
12
- "@langchain/core": "^1.1.38",
12
+ "@langchain/core": "^1.1.48",
13
13
  "@langchain/langgraph": "^1.2.6",
14
14
  "@langchain/langgraph-api": "^1.0.3",
15
15
  "@langchain/langgraph-checkpoint": "^1.0.0",
@@ -19,7 +19,7 @@
19
19
  "dedent": "^1.7.2",
20
20
  "esbuild": "^0.28.0",
21
21
  "exit-hook": "^5.1.0",
22
- "hono": "^4.12.18",
22
+ "hono": "^4.12.21",
23
23
  "p-queue": "^9.0.1",
24
24
  "p-retry": "^7.1.1",
25
25
  "tsx": "^4.21.0",
@@ -226,6 +226,36 @@ class RemotePregel(BaseRemotePregel):
226
226
  else:
227
227
  yield StandardStreamEvent(**event)
228
228
 
229
+ async def astream_protocol_events(
230
+ self,
231
+ input: Any,
232
+ config: RunnableConfig | None = None,
233
+ **kwargs: Any,
234
+ ) -> AsyncIterator[dict[str, Any]]:
235
+ """Stream native Protocol v2 (``ProtocolEvent``) frames from the sidecar.
236
+
237
+ Used only for Protocol v2 event-streaming runs. Requests
238
+ ``stream_protocol: "v3"`` so the sidecar drives the graph through
239
+ LangGraphJS's native v3 stream and forwards protocol-aligned events
240
+ (``{"type": "event", "method", "params"}``) instead of legacy
241
+ ``on_chain_stream`` chunks. The worker feeds these straight into
242
+ ``EventStreamingSession`` via ``normalize_protocol_event``, matching
243
+ the native-graph v3 path. Legacy runs keep using
244
+ :meth:`astream_events` (``version="v2"``).
245
+ """
246
+ data = {
247
+ "graph_id": self.graph_id,
248
+ "graph_config": self.config,
249
+ "graph_name": self.name,
250
+ "command" if isinstance(input, Command) else "input": input,
251
+ "config": config,
252
+ "stream_protocol": "v3",
253
+ **kwargs,
254
+ }
255
+
256
+ async for event in _client_stream("streamEvents", data):
257
+ yield event
258
+
229
259
  async def fetch_state_schema(self):
230
260
  return await _client_invoke("getSchema", {"graph_id": self.graph_id})
231
261
 
@@ -241,21 +241,17 @@
241
241
  "@jridgewell/resolve-uri" "^3.1.0"
242
242
  "@jridgewell/sourcemap-codec" "^1.4.14"
243
243
 
244
- "@langchain/core@^1.1.38":
245
- version "1.1.38"
246
- resolved "https://registry.npmjs.org/@langchain/core/-/core-1.1.38.tgz"
247
- integrity sha512-C340wH1YL10CiVOFlEpQMp0zQE85/eBLKX/gi1Lv7shAyUmR3CQ0t/mXlCd5RsZa6ntAN1kDJnp64ArWey9XAA==
244
+ "@langchain/core@^1.1.48":
245
+ version "1.1.48"
246
+ resolved "https://registry.yarnpkg.com/@langchain/core/-/core-1.1.48.tgz#dfe7f6a64b0e3e79e5357ed4b402c021ee315a7f"
247
+ integrity sha512-fQU6Guyb1pwc2fEplmA8FPbKfOMAofjnyJzExevro0FxEiuGHE18Ov/ZHmT9trWCDTZRI9eW1VIc6aChxV8pAQ==
248
248
  dependencies:
249
249
  "@cfworker/json-schema" "^4.0.2"
250
250
  "@standard-schema/spec" "^1.1.0"
251
- ansi-styles "^5.0.0"
252
- camelcase "6"
253
- decamelize "1.2.0"
254
251
  js-tiktoken "^1.0.12"
255
252
  langsmith ">=0.5.0 <1.0.0"
256
253
  mustache "^4.2.0"
257
254
  p-queue "^6.6.2"
258
- uuid "^11.1.0"
259
255
  zod "^3.25.76 || ^4"
260
256
 
261
257
  "@langchain/langgraph-api@^1.0.3":
@@ -833,11 +829,6 @@
833
829
  convert-source-map "^2.0.0"
834
830
  tinyrainbow "^3.1.0"
835
831
 
836
- ansi-styles@^5.0.0:
837
- version "5.2.0"
838
- resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz"
839
- integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
840
-
841
832
  assertion-error@^2.0.1:
842
833
  version "2.0.1"
843
834
  resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz"
@@ -887,11 +878,6 @@ bundle-name@^4.1.0:
887
878
  dependencies:
888
879
  run-applescript "^7.0.0"
889
880
 
890
- camelcase@6:
891
- version "6.3.0"
892
- resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz"
893
- integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
894
-
895
881
  caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001766:
896
882
  version "1.0.30001770"
897
883
  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz"
@@ -968,11 +954,6 @@ debug@^4.4.3:
968
954
  dependencies:
969
955
  ms "^2.1.3"
970
956
 
971
- decamelize@1.2.0:
972
- version "1.2.0"
973
- resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
974
- integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
975
-
976
957
  dedent@^1.5.3, dedent@^1.7.2:
977
958
  version "1.7.2"
978
959
  resolved "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz"
@@ -1152,10 +1133,10 @@ graceful-fs@^4.2.4:
1152
1133
  resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
1153
1134
  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
1154
1135
 
1155
- hono@^4.12.18, hono@^4.5.4:
1156
- version "4.12.18"
1157
- resolved "https://registry.yarnpkg.com/hono/-/hono-4.12.18.tgz#f6d301938868c3a8bdb639495f4e326a19181505"
1158
- integrity sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ==
1136
+ hono@^4.12.21, hono@^4.5.4:
1137
+ version "4.12.21"
1138
+ resolved "https://registry.yarnpkg.com/hono/-/hono-4.12.21.tgz#f11846462095d365b9a8b4859b37c02cb0981df3"
1139
+ integrity sha512-uV63apnb0kyPtAUwoWgaGh9HyIFcv8lgmzPZSiTBQAFOFGIzka5EZ1dZocmGnn0XdX0+XTqJ6Tqv7selMuGLRQ==
1159
1140
 
1160
1141
  icss-utils@^5.0.0, icss-utils@^5.1.0:
1161
1142
  version "5.1.0"
@@ -1776,11 +1757,6 @@ uuid@^10.0.0:
1776
1757
  resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz"
1777
1758
  integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==
1778
1759
 
1779
- uuid@^11.1.0:
1780
- version "11.1.0"
1781
- resolved "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz"
1782
- integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==
1783
-
1784
1760
  uuid@^13.0.0:
1785
1761
  version "13.0.0"
1786
1762
  resolved "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz"
@@ -53,7 +53,11 @@ from langgraph_api.metrics_otlp import (
53
53
  )
54
54
  from langgraph_api.schema import Run, StreamMode
55
55
  from langgraph_api.serde import json_dumpb
56
- from langgraph_api.stream_v2 import astream_state_v2, is_v2_messages_chunk
56
+ from langgraph_api.stream_v2 import (
57
+ astream_state_v2,
58
+ is_v2_messages_chunk,
59
+ normalize_protocol_event,
60
+ )
57
61
  from langgraph_api.utils.config import run_in_executor
58
62
 
59
63
  if TYPE_CHECKING:
@@ -200,6 +204,9 @@ async def astream_state(
200
204
  if cmd := kwargs.pop("command"):
201
205
  input = map_cmd(cmd)
202
206
  stream_mode: list[StreamMode] = kwargs.pop("stream_mode")
207
+ # Go maps unrecognized ``StreamMode`` enum values to ``unknown``; the
208
+ # round-trip converts those to ``None``.
209
+ stream_mode = [mode for mode in stream_mode if mode is not None]
203
210
  feedback_keys = kwargs.pop("feedback_keys", None)
204
211
  stream_modes_set: set[StreamMode] = set(stream_mode) - {"events"}
205
212
  # This code path runs for every run, legacy and v2. The per-run
@@ -254,7 +261,20 @@ async def astream_state(
254
261
  # set up state
255
262
  checkpoint: CheckpointPayload | None = None
256
263
  messages: dict[str, BaseMessageChunk] = {}
257
- use_astream_events = "events" in stream_mode or is_remote_pregel
264
+ # Protocol v2 runs against a remote (JS sidecar) graph drive the sidecar
265
+ # through LangGraphJS's native v3 stream (``stream_protocol: "v3"``) so
266
+ # protocol-aligned events (messages content blocks, tools, custom:*,
267
+ # checkpoints) arrive ready to forward — no legacy ``on_chain_stream``
268
+ # reconstruction. ``hasattr`` keeps any other ``BaseRemotePregel`` impl on
269
+ # the legacy path. Legacy stream endpoints keep ``version="v2"``.
270
+ use_remote_v3 = (
271
+ event_streaming_v2_run
272
+ and is_remote_pregel
273
+ and hasattr(graph, "astream_protocol_events")
274
+ )
275
+ use_astream_events = (
276
+ "events" in stream_mode or is_remote_pregel
277
+ ) and not use_remote_v3
258
278
  use_stream_events_v3 = (
259
279
  event_streaming_v2_run and not use_astream_events and not is_remote_pregel
260
280
  )
@@ -429,6 +449,37 @@ async def astream_state(
429
449
  on_task_result=on_task_result,
430
450
  ):
431
451
  yield ev
452
+ elif use_remote_v3:
453
+ # Remote (JS) graph under Protocol v2: consume native v3
454
+ # ProtocolEvents from the sidecar and forward them exactly like the
455
+ # native-graph v3 path (``astream_state_v2``) does, so the
456
+ # ``EventStreamingSession`` normalization is identical regardless of
457
+ # graph language.
458
+ if USE_RUNTIME_CONTEXT_API:
459
+ kwargs["context"] = context
460
+ async with (
461
+ stack,
462
+ aclosing(
463
+ graph.astream_protocol_events(
464
+ input,
465
+ config,
466
+ stream_mode=list(stream_modes_set),
467
+ **kwargs,
468
+ )
469
+ ) as stream,
470
+ ):
471
+ sentinel = object()
472
+ while True:
473
+ event = await wait_if_not_done(anext(stream, sentinel), done)
474
+ if event is sentinel:
475
+ break
476
+ normalized = normalize_protocol_event(
477
+ cast("dict", event),
478
+ on_checkpoint=on_checkpoint,
479
+ on_task_result=on_task_result,
480
+ )
481
+ if normalized is not None:
482
+ yield normalized
432
483
  else:
433
484
  output_keys = kwargs.pop("output_keys", graph.output_channels)
434
485
  if USE_RUNTIME_CONTEXT_API:
@@ -87,6 +87,59 @@ def coerce_stream_transformer_factory(
87
87
  )
88
88
 
89
89
 
90
+ def normalize_protocol_event(
91
+ event: Any,
92
+ *,
93
+ on_checkpoint: Callable[[CheckpointPayload | None], None],
94
+ on_task_result: Callable[[TaskResultPayload], None],
95
+ ) -> tuple[str, dict] | None:
96
+ """Convert one native v3 ``ProtocolEvent`` into a ``(name, event)`` pair.
97
+
98
+ Shared by the native-graph path (``astream_state_v2``) and the remote
99
+ (JS sidecar) path in :mod:`langgraph_api.stream`. Both receive the same
100
+ ``{"type": "event", "method", "params"}`` ProtocolEvent shape — for
101
+ native graphs from ``langgraph``'s v3 stream, for remote graphs from the
102
+ sidecar's ``streamEvents`` v3 mode — so the per-event handling lives in
103
+ one place.
104
+
105
+ Returns ``None`` when the event should be dropped (e.g. a legacy
106
+ ``messages`` shape that Protocol v2 does not reconstruct). Side effects:
107
+ feeds checkpoint / task_result frames into ``on_checkpoint`` /
108
+ ``on_task_result`` so retention + persistence hooks still fire under v2.
109
+ """
110
+ # Local import to avoid a circular ``stream <-> stream_v2`` cycle.
111
+ from langgraph_api.stream import _preprocess_debug_checkpoint # noqa: PLC0415
112
+
113
+ event = cast("dict", event)
114
+ method = event.get("method", "")
115
+ params = event.get("params") or {}
116
+ namespace = params.get("namespace") or []
117
+ if method == "debug":
118
+ chunk = params.get("data") or {}
119
+ if isinstance(chunk, dict):
120
+ if chunk.get("type") == "checkpoint":
121
+ checkpoint = _preprocess_debug_checkpoint(chunk.get("payload"))
122
+ chunk["payload"] = checkpoint
123
+ on_checkpoint(checkpoint)
124
+ elif chunk.get("type") == "task_result":
125
+ on_task_result(chunk.get("payload"))
126
+ # Protocol v2 only forwards native content-block-shaped messages;
127
+ # legacy whole-message/chunk tuples are for the old endpoints and are
128
+ # intentionally ignored here.
129
+ if method == "messages":
130
+ raw_data = params.get("data")
131
+ payload = normalize_v2_messages_data(raw_data)
132
+ if payload is None:
133
+ return None
134
+ if payload is not raw_data:
135
+ params = {**params, "data": payload}
136
+ event = {**event, "params": params}
137
+ # Carry the namespace in the stream event name so ``parse_event_name``
138
+ # in ``session.py`` can recover it, matching the raw ``astream`` path.
139
+ ns_suffix = f"|{'|'.join(namespace)}" if namespace else ""
140
+ return f"{method}{ns_suffix}", event
141
+
142
+
90
143
  def is_v2_messages_chunk(chunk: Any) -> bool:
91
144
  """Heuristically detect a ``StreamMessagesHandlerV2`` chunk.
92
145
 
@@ -131,10 +184,9 @@ async def astream_state_v2(
131
184
  StreamTransformer,
132
185
  )
133
186
 
134
- # Local imports to avoid a circular ``stream <-> stream_v2`` cycle and
187
+ # Local import to avoid a circular ``stream <-> stream_v2`` cycle and
135
188
  # keep this module's import graph small.
136
189
  from langgraph_api.graph import GRAPH_STREAM_TRANSFORMERS # noqa: PLC0415
137
- from langgraph_api.stream import _preprocess_debug_checkpoint # noqa: PLC0415
138
190
 
139
191
  user_transformers: list[Any] | None = None
140
192
  factory = GRAPH_STREAM_TRANSFORMERS.get(configurable.get("graph_id"))
@@ -191,34 +243,10 @@ async def astream_state_v2(
191
243
  event = await wait_if_not_done(anext(iterator, sentinel), done)
192
244
  if event is sentinel:
193
245
  break
194
- event = cast("dict", event)
195
- method = event.get("method", "")
196
- params = event.get("params") or {}
197
- namespace = params.get("namespace") or []
198
- # Feed checkpoint / task_result into the run state machine
199
- # so retention + persistence hooks still fire under v2.
200
- if method == "debug":
201
- chunk = params.get("data") or {}
202
- if isinstance(chunk, dict):
203
- if chunk.get("type") == "checkpoint":
204
- checkpoint = _preprocess_debug_checkpoint(chunk.get("payload"))
205
- chunk["payload"] = checkpoint
206
- on_checkpoint(checkpoint)
207
- elif chunk.get("type") == "task_result":
208
- on_task_result(chunk.get("payload"))
209
- # Protocol v2 only forwards native content-block-shaped
210
- # messages; legacy whole-message/chunk tuples are for the
211
- # old endpoints and are intentionally ignored here.
212
- if method == "messages":
213
- raw_data = params.get("data")
214
- payload = normalize_v2_messages_data(raw_data)
215
- if payload is None:
216
- continue
217
- if payload is not raw_data:
218
- params = {**params, "data": payload}
219
- event = {**event, "params": params}
220
- # Carry the namespace in the stream event name so
221
- # ``parse_event_name`` in ``session.py`` can recover it,
222
- # matching the raw ``astream`` path.
223
- ns_suffix = f"|{'|'.join(namespace)}" if namespace else ""
224
- yield f"{method}{ns_suffix}", event
246
+ normalized = normalize_protocol_event(
247
+ event,
248
+ on_checkpoint=on_checkpoint,
249
+ on_task_result=on_task_result,
250
+ )
251
+ if normalized is not None:
252
+ yield normalized