langgraph-api 0.9.0.dev3__tar.gz → 0.9.0.dev5__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.9.0.dev3 → langgraph_api-0.9.0.dev5}/Makefile +18 -3
  2. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/PKG-INFO +1 -1
  3. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/continuous/uv.lock +3 -3
  4. langgraph_api-0.9.0.dev5/langgraph_api/__init__.py +1 -0
  5. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/config/schemas.py +26 -2
  6. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/ops/crons.py +5 -1
  7. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/ops/runs.py +4 -3
  8. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/webhook.py +25 -3
  9. langgraph_api-0.9.0.dev3/langgraph_api/__init__.py +0 -1
  10. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/.gitignore +0 -0
  11. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/LICENSE +0 -0
  12. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/README.md +0 -0
  13. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/.gitignore +0 -0
  14. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/Makefile +0 -0
  15. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/README.md +0 -0
  16. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/assistant.ts +0 -0
  17. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  18. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  19. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  20. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  21. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  22. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/log-failure.ts +0 -0
  23. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  24. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/stream_write.ts +0 -0
  25. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/thread.ts +0 -0
  26. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  27. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  28. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/types.ts +0 -0
  29. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/benchmark-runners/wait_write.ts +0 -0
  30. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/capacity_dd_report.py +0 -0
  31. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/capacity_k6.js +0 -0
  32. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/capacity_runner.mjs +0 -0
  33. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/capacity_slack_report.py +0 -0
  34. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/capacity_urls.mjs +0 -0
  35. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/clean-cli.js +0 -0
  36. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/clean.js +0 -0
  37. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/continuous/README.md +0 -0
  38. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/continuous/pyproject.toml +0 -0
  39. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/continuous/runner.py +0 -0
  40. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/graphs.js +0 -0
  41. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/mixed_workload_k6.js +0 -0
  42. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/mixed_workload_runner.mjs +0 -0
  43. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/package.json +0 -0
  44. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/ramp.js +0 -0
  45. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/reporting/dd_reporting.py +0 -0
  46. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/reporting/slack_slowest_runs.py +0 -0
  47. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/reporting/slack_summary.py +0 -0
  48. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/run_local.sh +0 -0
  49. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/staircase.py +0 -0
  50. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/staircase_step_k6.js +0 -0
  51. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/tsconfig.json +0 -0
  52. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/update-revision.js +0 -0
  53. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/benchmark/weather.js +0 -0
  54. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/constraints.txt +0 -0
  55. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/custom_store.sql +0 -0
  56. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/forbidden.txt +0 -0
  57. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/hatch_build.py +0 -0
  58. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/healthcheck.py +0 -0
  59. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  60. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/_checkpointer/__init__.py +0 -0
  61. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/_checkpointer/_adapter.py +0 -0
  62. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/_checkpointer/protocol.py +0 -0
  63. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/_factory_utils.py +0 -0
  64. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/__init__.py +0 -0
  65. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/a2a.py +0 -0
  66. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/assistants.py +0 -0
  67. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/event_streaming.py +0 -0
  68. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/mcp/__init__.py +0 -0
  69. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/mcp/_constants.py +0 -0
  70. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/mcp/_handlers.py +0 -0
  71. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/mcp/_models.py +0 -0
  72. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/mcp/_routes.py +0 -0
  73. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  74. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/meta.py +0 -0
  75. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/openapi.py +0 -0
  76. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/profile.py +0 -0
  77. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/runs.py +0 -0
  78. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/store.py +0 -0
  79. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/threads.py +0 -0
  80. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/api/ui.py +0 -0
  81. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/asgi_transport.py +0 -0
  82. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/asyncio.py +0 -0
  83. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/auth/__init__.py +0 -0
  84. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/auth/custom.py +0 -0
  85. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/auth/errors.py +0 -0
  86. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/auth/langsmith/__init__.py +0 -0
  87. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/auth/langsmith/backend.py +0 -0
  88. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/auth/langsmith/client.py +0 -0
  89. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/auth/middleware.py +0 -0
  90. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/auth/noop.py +0 -0
  91. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/auth/studio_user.py +0 -0
  92. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/cache.py +0 -0
  93. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/cli.py +0 -0
  94. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/command.py +0 -0
  95. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/config/__init__.py +0 -0
  96. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/config/_parse.py +0 -0
  97. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/cron_scheduler.py +0 -0
  98. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/encryption/__init__.py +0 -0
  99. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/encryption/aes_json.py +0 -0
  100. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/encryption/context.py +0 -0
  101. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/encryption/custom.py +0 -0
  102. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/encryption/middleware.py +0 -0
  103. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/encryption/shared.py +0 -0
  104. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/errors.py +0 -0
  105. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/event_streaming/__init__.py +0 -0
  106. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/event_streaming/capabilities.py +0 -0
  107. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/event_streaming/constants.py +0 -0
  108. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  109. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/event_streaming/namespace.py +0 -0
  110. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/event_streaming/service.py +0 -0
  111. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/event_streaming/session.py +0 -0
  112. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/event_streaming/state_normalizers.py +0 -0
  113. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/event_streaming/types.py +0 -0
  114. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/feature_flags.py +0 -0
  115. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/graph.py +0 -0
  116. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/__init__.py +0 -0
  117. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/client.py +0 -0
  118. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  119. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/ops/__init__.py +0 -0
  120. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/ops/assistants.py +0 -0
  121. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/ops/cache.py +0 -0
  122. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/ops/threads.py +0 -0
  123. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/server.py +0 -0
  124. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/servicers/__init__.py +0 -0
  125. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  126. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/grpc/servicers/encryption.py +0 -0
  127. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/http.py +0 -0
  128. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/http_metrics.py +0 -0
  129. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/http_metrics_utils.py +0 -0
  130. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/.gitignore +0 -0
  131. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/.prettierrc +0 -0
  132. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/__init__.py +0 -0
  133. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/base.py +0 -0
  134. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/build.mts +0 -0
  135. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/client.http.mts +0 -0
  136. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/client.mts +0 -0
  137. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/errors.py +0 -0
  138. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/global.d.ts +0 -0
  139. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/package.json +0 -0
  140. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/remote.py +0 -0
  141. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/schema.py +0 -0
  142. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/src/graph.mts +0 -0
  143. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/src/load.hooks.mjs +0 -0
  144. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/src/preload.mjs +0 -0
  145. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  146. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/src/utils/files.mts +0 -0
  147. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/src/utils/importMap.mts +0 -0
  148. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  149. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/src/utils/serde.mts +0 -0
  150. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/sse.py +0 -0
  151. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/traceblock.mts +0 -0
  152. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/tsconfig.json +0 -0
  153. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/ui.py +0 -0
  154. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/js/yarn.lock +0 -0
  155. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/lc_security/__init__.py +0 -0
  156. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/lc_security/exceptions.py +0 -0
  157. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/lc_security/policy.py +0 -0
  158. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/lc_security/transport.py +0 -0
  159. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/logging.py +0 -0
  160. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/metadata.py +0 -0
  161. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/metrics_datadog.py +0 -0
  162. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/middleware/__init__.py +0 -0
  163. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/middleware/ensure_store.py +0 -0
  164. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/middleware/http_logger.py +0 -0
  165. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/middleware/private_network.py +0 -0
  166. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/middleware/request_id.py +0 -0
  167. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/models/__init__.py +0 -0
  168. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/models/run.py +0 -0
  169. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/otel_context.py +0 -0
  170. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/patch.py +0 -0
  171. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/queue_entrypoint.py +0 -0
  172. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/release_tags.py +0 -0
  173. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/route.py +0 -0
  174. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/schema.py +0 -0
  175. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/self_hosted_logs.py +0 -0
  176. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/self_hosted_metrics.py +0 -0
  177. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/serde.py +0 -0
  178. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/server.py +0 -0
  179. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/sse.py +0 -0
  180. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/state.py +0 -0
  181. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/store.py +0 -0
  182. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/stream.py +0 -0
  183. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/stream_v2.py +0 -0
  184. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/timing/__init__.py +0 -0
  185. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/timing/profiler.py +0 -0
  186. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/timing/timer.py +0 -0
  187. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/traceblock.py +0 -0
  188. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/tunneling/cloudflare.py +0 -0
  189. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/__init__.py +0 -0
  190. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/cache.py +0 -0
  191. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/config.py +0 -0
  192. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/errors.py +0 -0
  193. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/extract.py +0 -0
  194. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/future.py +0 -0
  195. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/headers.py +0 -0
  196. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/network.py +0 -0
  197. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/retriable_client.py +0 -0
  198. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/stream_codec.py +0 -0
  199. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/utils/uuids.py +0 -0
  200. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/validation.py +0 -0
  201. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_api/worker.py +0 -0
  202. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/__init__.py +0 -0
  203. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/checkpointer.py +0 -0
  204. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/conversion/__init__.py +0 -0
  205. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/conversion/_compat.py +0 -0
  206. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  207. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/conversion/config.py +0 -0
  208. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/conversion/durability.py +0 -0
  209. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/conversion/struct.py +0 -0
  210. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/conversion/value.py +0 -0
  211. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/__init__.py +0 -0
  212. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  213. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  214. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  215. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  216. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  217. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  218. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  219. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  220. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  221. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  222. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  223. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  224. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  225. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  226. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  227. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  228. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  229. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  230. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  231. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  232. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  233. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  234. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  235. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  236. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  237. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  238. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  239. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  240. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  241. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  242. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  243. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  244. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  245. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  246. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  247. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  248. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  249. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  250. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  251. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  252. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  253. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  254. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  255. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  256. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  257. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  258. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  259. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  260. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  261. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  262. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  263. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  264. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  265. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  266. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  267. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  268. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_grpc_common/serde.py +0 -0
  269. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_license/__init__.py +0 -0
  270. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_license/validation.py +0 -0
  271. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/__init__.py +0 -0
  272. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/checkpoint.py +0 -0
  273. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/database.py +0 -0
  274. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/lifespan.py +0 -0
  275. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/metrics.py +0 -0
  276. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/ops.py +0 -0
  277. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/queue.py +0 -0
  278. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/retry.py +0 -0
  279. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/routes.py +0 -0
  280. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/langgraph_runtime/store.py +0 -0
  281. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/logging.json +0 -0
  282. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/openapi.json +0 -0
  283. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/pyproject.toml +0 -0
  284. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/scripts/build_wheel.py +0 -0
  285. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/scripts/create_license.py +0 -0
  286. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/scripts/run_a2a_tck.py +0 -0
  287. {langgraph_api-0.9.0.dev3 → langgraph_api-0.9.0.dev5}/uv.lock +0 -0
@@ -1,4 +1,4 @@
1
- .PHONY: build release lint format test test_watch start start-inmem start-inmem-license-oss start start-js-server build-go-server start-go-server stop-go-server check-version check-base-imports test-a2a-tck test-a2a-tck-mandatory start-test-a2a-tck start-test-a2a-tck-mandatory start-test-a2a-tck-watch test-mcp-conformance start-test-mcp-conformance list-mcp-scenarios
1
+ .PHONY: build release lint format test test_watch start start-inmem start-inmem-license-oss start start-js-server build-go-server start-go-server stop-go-server check-version check-base-imports test-a2a-tck test-a2a-tck-mandatory start-test-a2a-tck start-test-a2a-tck-mandatory start-test-a2a-tck-watch test-mcp-conformance start-test-mcp-conformance list-mcp-scenarios test-auth-read-only-assistant
2
2
 
3
3
  # Environment variables
4
4
  LANGSERVE_GRAPHS_ALL = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "custom_lifespan": "./tests/graphs/my_router.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_interrupt": "./tests/graphs/agent_interrupt.py:graph", "agent_parallel_interrupt": "./tests/graphs/agent_parallel_interrupt.py:graph", "message_type_test": "./tests/graphs/message_type_test.py:graph", "remote_subgraph_parent": "./tests/graphs/remote_subgraph_parent.py:graph", "simple_remote": "./tests/graphs/simple_remote.py:graph", "nested_subgraphs": "./tests/graphs/nested_subgraphs.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "max_concurrency_graph": "./tests/graphs/max_concurrency_graph.py:graph", "unserializable_subgraph": "./tests/graphs/unserializable_subgraph.py:graph", "agent_interrupt_text": "./tests/graphs/agent_interrupt_text.py:graph", "agent_echo_stream": "./tests/graphs/agent_echo_stream.py:graph", "agent_tool_stream": "./tests/graphs/agent_tool_stream.py:graph", "runtime_graph": "./tests/graphs/runtime_graph.py:graph", "tool_call_chunk_stream": "./tests/graphs/tool_call_chunk_stream.py:graph", "ui_tool_call_stream": "./tests/graphs/ui_tool_call_stream.py:graph", "agent_metrics_stream": "./tests/graphs/agent_metrics_stream.py:graph", "agent_multimodal_stream": "./tests/graphs/agent_multimodal_stream.py:graph", "agent_bedtime_story": "./tests/graphs/agent_bedtime_story.py:graph", "delta_channel": "./tests/graphs/delta_channel.py:graph", "delta_channel_freq": "./tests/graphs/delta_channel_freq.py:graph", "delta_channel_files": "./tests/graphs/delta_channel_files.py:graph", "delta_channel_files_freq": "./tests/graphs/delta_channel_files_freq.py:graph", "delta_channel_legacy": "./tests/graphs/delta_channel_migration.py:graph_legacy", "delta_channel_delta": "./tests/graphs/delta_channel_migration.py:graph_delta", "delta_channel_messages_freq": "./tests/graphs/delta_channel_messages.py:graph_freq", "delta_channel_messages": "./tests/graphs/delta_channel_messages.py:graph", "delta_channel_messages_legacy": "./tests/graphs/delta_channel_messages.py:graph_legacy", "delta_channel_messages_remove": "./tests/graphs/delta_channel_messages.py:graph_remove", "delta_channel_messages_update": "./tests/graphs/delta_channel_messages.py:graph_update", "delta_channel_messages_delta": "./tests/graphs/delta_channel_messages.py:graph_delta"}'
@@ -71,6 +71,19 @@ else
71
71
  HTTP_CONFIG := $(LANGGRAPH_HTTP)
72
72
  endif
73
73
 
74
+ # Dev/test default: opt in to loopback + http webhooks.
75
+ # ``test_custom_route`` etc use relative URLs to dispatch to my_router.py;
76
+ # ``test_join_*`` / ``test_webhook_payload_on_timeouts`` / ``test_cron_*``
77
+ # and the shutdown suite use ``http://localhost:{port}/webhook`` to a
78
+ # pytest httpserver fixture — all of these are blocked by the secure
79
+ # ``disable_loopback`` default (GHSA-q3v5-r5ch-p57j), and
80
+ # ``require_https`` defaults to true once any webhooks.url block is
81
+ # present, so explicitly disable it for the http httpserver fixture.
82
+ # Production deployers don't use these Makefiles. Override with
83
+ # ``LANGGRAPH_WEBHOOKS=...`` on the command line to exercise the secure
84
+ # default during local development.
85
+ LANGGRAPH_WEBHOOKS ?= {"url": {"disable_loopback": false, "require_https": false}}
86
+
74
87
  LANGGRAPH_STORE ?= ""
75
88
  ifeq ($(LANGGRAPH_STORE),custom)
76
89
  STORE_CONFIG := {"path": "./tests/graphs/custom_store.py:generate_store"}
@@ -93,10 +106,10 @@ REVISION ?= $(shell git rev-parse --short HEAD)
93
106
  LANGGRAPH_ENCRYPTION ?=
94
107
 
95
108
  test-license-oss:
96
- LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='$(HTTP_CONFIG)' LANGGRAPH_STORE='$(STORE_CONFIG)' LANGGRAPH_CHECKPOINTER='$(CHECKPOINTER_CONFIG)' LANGGRAPH_ENCRYPTION='$(LANGGRAPH_ENCRYPTION)' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run pytest -v $(XDIST_ARGS) $(TEST)
109
+ LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_WEBHOOKS='$(LANGGRAPH_WEBHOOKS)' LANGGRAPH_HTTP='$(HTTP_CONFIG)' LANGGRAPH_STORE='$(STORE_CONFIG)' LANGGRAPH_CHECKPOINTER='$(CHECKPOINTER_CONFIG)' LANGGRAPH_ENCRYPTION='$(LANGGRAPH_ENCRYPTION)' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run pytest -v $(XDIST_ARGS) $(TEST)
97
110
 
98
111
  test-watch-oss:
99
- LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='$(HTTP_CONFIG)' LANGGRAPH_ENCRYPTION='$(LANGGRAPH_ENCRYPTION)' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run --no-sync ptw . -- -x -vv --ff --capture=no $(TEST)
112
+ LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_WEBHOOKS='$(LANGGRAPH_WEBHOOKS)' LANGGRAPH_HTTP='$(HTTP_CONFIG)' LANGGRAPH_ENCRYPTION='$(LANGGRAPH_ENCRYPTION)' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run --no-sync ptw . -- -x -vv --ff --capture=no $(TEST)
100
113
 
101
114
  test: test-license-oss
102
115
  test-watch: test-watch-oss
@@ -159,6 +172,7 @@ LANGSMITH_TRACING ?= false
159
172
 
160
173
  start:
161
174
  LANGGRAPH_DISABLE_FILE_PERSISTENCE=$(LANGGRAPH_DISABLE_FILE_PERSISTENCE) \
175
+ LANGGRAPH_WEBHOOKS='$(LANGGRAPH_WEBHOOKS)' \
162
176
  LANGGRAPH_HTTP='$(HTTP_CONFIG)' \
163
177
  LANGGRAPH_RUNTIME_EDITION=inmem \
164
178
  LANGGRAPH_AES_KEY='$(LANGGRAPH_AES_KEY)' \
@@ -186,6 +200,7 @@ start:
186
200
  start-license-oss: start
187
201
 
188
202
  start-encrypt:
203
+ LANGGRAPH_WEBHOOKS='$(LANGGRAPH_WEBHOOKS)' \
189
204
  LANGGRAPH_HTTP='$(HTTP_CONFIG)' \
190
205
  LANGGRAPH_RUNTIME_EDITION=inmem \
191
206
  LANGGRAPH_AES_KEY='$(LANGGRAPH_AES_KEY)' \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.9.0.dev3
3
+ Version: 0.9.0.dev5
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
@@ -98,11 +98,11 @@ wheels = [
98
98
 
99
99
  [[package]]
100
100
  name = "idna"
101
- version = "3.11"
101
+ version = "3.15"
102
102
  source = { registry = "https://pypi.org/simple" }
103
- sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
103
+ sdist = { url = "https://files.pythonhosted.org/packages/82/77/7b3966d0b9d1d31a36ddf1746926a11dface89a83409bf1483f0237aa758/idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc", size = 199245, upload-time = "2026-05-12T22:45:57.011Z" }
104
104
  wheels = [
105
- { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
105
+ { url = "https://files.pythonhosted.org/packages/d2/23/408243171aa9aaba178d3e2559159c24c1171a641aa83b67bdd3394ead8e/idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8", size = 72340, upload-time = "2026-05-12T22:45:55.733Z" },
106
106
  ]
107
107
 
108
108
  [[package]]
@@ -0,0 +1 @@
1
+ __version__ = "0.9.0.dev5"
@@ -386,7 +386,26 @@ class WebhookUrlPolicy(TypedDict, total=False):
386
386
  max_url_length: int
387
387
  """Maximum permitted URL length in characters; longer inputs are rejected early."""
388
388
  disable_loopback: bool
389
- """Disallow relative URLs (internal loopback calls) and localhost hostnames when true."""
389
+ """Disallow loopback-flavored webhook targets when true. Defaults to true.
390
+
391
+ Covers all of:
392
+ - Relative URLs (e.g. ``/internal/hook``) that would dispatch via the
393
+ in-process ASGI loopback transport at ``root_path="/noauth"``. These
394
+ bypass authentication and were the auth-bypass primitive behind
395
+ GHSA-q3v5-r5ch-p57j.
396
+ - Absolute URLs whose hostname is ``localhost`` / ``localhost.localdomain``
397
+ / ``host.docker.internal``.
398
+ - Absolute URLs that DNS-resolve into the IPv4 loopback range
399
+ (``127.0.0.0/8``) or IPv6 loopback (``::1/128``) — including
400
+ DNS-rebinding-style attacks where an arbitrary hostname resolves to
401
+ a loopback IP.
402
+
403
+ Operators who intentionally route webhooks to in-process routes
404
+ (e.g. for local development with ``langgraph dev``, or single-host
405
+ docker-compose setups dispatching to ``host.docker.internal``) can
406
+ set this to ``false`` to restore the pre-GHSA behavior. Only do this
407
+ when you control all routes that loopback webhooks can reach.
408
+ """
390
409
  disable_private_ips: bool
391
410
  """Block RFC 1918 / CGN private IP ranges as webhook targets when true.
392
411
 
@@ -426,7 +445,12 @@ def _validate_url_policy(
426
445
  if "max_url_length" not in policy:
427
446
  policy["max_url_length"] = 2048
428
447
  if "disable_loopback" not in policy:
429
- policy["disable_loopback"] = False
448
+ # Secure default — covers GHSA-q3v5-r5ch-p57j (relative-URL ASGI
449
+ # loopback auth bypass) and the broader SSRF surface that the same
450
+ # flag governs via SSRFPolicy.block_localhost. Mirrored at the
451
+ # webhook.py read site so deployments without any webhooks block
452
+ # also get the safe default.
453
+ policy["disable_loopback"] = True
430
454
  if "disable_private_ips" not in policy:
431
455
  policy["disable_private_ips"] = False
432
456
  return policy
@@ -230,10 +230,14 @@ class Crons(Authenticated):
230
230
 
231
231
  assistant_filters: list[Any] = []
232
232
  if payload["assistant_id"] not in SYSTEM_ASSISTANT_IDS:
233
+ # Do not populate `metadata` on the AssistantsRead request value:
234
+ # client-supplied cron metadata must not influence the auth
235
+ # decision (defense vs. forged payloads), mirroring Runs.put.
236
+ # The handler is expected to return a filter that is matched
237
+ # against the persisted assistant metadata server-side.
233
238
  assistant_request_data = Auth.types.AssistantsRead(
234
239
  assistant_id=str(payload["assistant_id"])
235
240
  )
236
- assistant_request_data["metadata"] = metadata
237
241
  assistant_filters = await Assistants.handle_event(
238
242
  ctx, "read", assistant_request_data
239
243
  )
@@ -610,18 +610,19 @@ class Runs(Authenticated):
610
610
  create_run_value,
611
611
  )
612
612
  # Automatically enforce assistant ownership for non-system assistants
613
- # by calling the user's assistant search auth handler.
613
+ # by calling the user's assistant read auth handler.
614
614
  assistant_auth_filters: list[pb.AuthFilter] = []
615
615
  if str(assistant_id) not in SYSTEM_ASSISTANT_IDS:
616
616
  ctx_ = ctx or get_auth_ctx()
617
617
  if ctx_ is not None:
618
618
  auth_ctx = Auth.types.AuthContext(
619
619
  resource="assistants",
620
- action="search",
620
+ action="read",
621
621
  user=ctx_.user,
622
622
  permissions=ctx_.permissions,
623
623
  )
624
- raw = await auth_handle_event(auth_ctx, {"metadata": {}})
624
+ read_value = Auth.types.AssistantsRead(assistant_id=str(assistant_id))
625
+ raw = await auth_handle_event(auth_ctx, read_value)
625
626
  if raw:
626
627
  assistant_auth_filters = _filters_to_proto(raw)
627
628
 
@@ -79,7 +79,14 @@ def _get_webhook_config() -> _WebhookConfig:
79
79
  exact_allowed = frozenset(exact_hosts)
80
80
 
81
81
  disable_private_ips = bool(policy_cfg.get("disable_private_ips", False))
82
- disable_loopback = bool(policy_cfg.get("disable_loopback", False))
82
+ # Loopback webhooks are denied by default (covers relative URLs that
83
+ # would dispatch through the in-process ASGI client at root_path=/noauth,
84
+ # plus localhost / 127.x / ::1 / host.docker.internal absolute URLs,
85
+ # plus any hostname that DNS-resolves into the loopback range). This is
86
+ # the fix for GHSA-q3v5-r5ch-p57j: relative-URL webhooks were the auth
87
+ # bypass primitive, and the localhost/loopback IP variants are the
88
+ # broader SSRF surface that the same flag governs via SSRFPolicy.
89
+ disable_loopback = bool(policy_cfg.get("disable_loopback", True))
83
90
 
84
91
  return _WebhookConfig(
85
92
  allowed_domains=allowed_domains,
@@ -111,11 +118,26 @@ async def validate_webhook_url_or_raise(url: str) -> None:
111
118
  if len(url) > wh.max_url_length:
112
119
  raise HTTPException(status_code=422, detail="Webhook URL too long")
113
120
 
114
- # Relative loopback URL (internal route) — not subject to SSRF checks
121
+ # Relative loopback URL (internal route) — dispatched via an in-process
122
+ # ASGI client that mounts under root_path="/noauth", which the auth
123
+ # middleware treats as an auth-bypass marker. Denied by default so a
124
+ # user-supplied webhook URL cannot be turned into an unauthenticated
125
+ # call against the server's own routes (GHSA-q3v5-r5ch-p57j). Operators
126
+ # who intentionally route webhooks to in-process routes can opt back in
127
+ # by setting webhooks.url.disable_loopback to false.
115
128
  if url.startswith("/"):
116
129
  if wh.disable_loopback:
117
130
  raise HTTPException(
118
- status_code=422, detail="Loopback webhooks are disabled"
131
+ status_code=422,
132
+ detail=(
133
+ "Loopback webhooks (relative URLs and localhost) are "
134
+ "disabled by default. They bypass authentication via the "
135
+ "in-process ASGI transport and can be abused to invoke "
136
+ "internal routes as an unauthenticated caller. Set "
137
+ "webhooks.url.disable_loopback to false (in langgraph.json "
138
+ "or via LANGGRAPH_WEBHOOKS) to opt back in — only do so "
139
+ "when you control the mounted routes."
140
+ ),
119
141
  )
120
142
  return
121
143
 
@@ -1 +0,0 @@
1
- __version__ = "0.9.0.dev3"