langgraph-api 0.15.0.dev2__tar.gz → 0.15.0.dev3__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 (306) hide show
  1. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/Makefile +19 -1
  2. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/PKG-INFO +2 -2
  3. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/constraints.txt +1 -1
  4. langgraph_api-0.15.0.dev3/langgraph_api/__init__.py +1 -0
  5. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/auth/custom.py +33 -6
  6. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/config/schemas.py +16 -0
  7. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/graph.py +2 -0
  8. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/client.mts +6 -1
  9. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/remote.py +60 -8
  10. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/models/run.py +2 -1
  11. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/stream.py +16 -4
  12. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/validation.py +1 -0
  13. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/pyproject.toml +1 -1
  14. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/uv.lock +4 -4
  15. langgraph_api-0.15.0.dev2/langgraph_api/__init__.py +0 -1
  16. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/.gitignore +0 -0
  17. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/LICENSE +0 -0
  18. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/README.md +0 -0
  19. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/.gitignore +0 -0
  20. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/Makefile +0 -0
  21. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/README.md +0 -0
  22. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/assistant.ts +0 -0
  23. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  24. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  25. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  26. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  27. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/classify-error.test.js +0 -0
  28. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/classify-error.ts +0 -0
  29. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/delta-turns-lib.test.js +0 -0
  30. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/delta-turns-lib.ts +0 -0
  31. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/delta_turns.ts +0 -0
  32. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  33. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/log-failure.ts +0 -0
  34. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  35. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/store.ts +0 -0
  36. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/stream_write.ts +0 -0
  37. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/thread.ts +0 -0
  38. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  39. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  40. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/types.ts +0 -0
  41. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/benchmark-runners/wait_write.ts +0 -0
  42. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/capacity-ci.js +0 -0
  43. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/capacity-ci.test.js +0 -0
  44. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/clean-cli.js +0 -0
  45. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/clean.js +0 -0
  46. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/continuous/README.md +0 -0
  47. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/continuous/pyproject.toml +0 -0
  48. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/continuous/runner.py +0 -0
  49. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/continuous/uv.lock +0 -0
  50. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/daily-report.js +0 -0
  51. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/daily-report.test.js +0 -0
  52. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/graphs.js +0 -0
  53. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/host-v2.js +0 -0
  54. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/host-v2.test.js +0 -0
  55. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/package.json +0 -0
  56. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/ramp.js +0 -0
  57. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/reporting/dd_reporting.py +0 -0
  58. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/staircase.py +0 -0
  59. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/staircase_step_k6.js +0 -0
  60. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/tsconfig.json +0 -0
  61. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/update-revision.js +0 -0
  62. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/weather.js +0 -0
  63. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/benchmark/yarn.lock +0 -0
  64. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/custom_store.sql +0 -0
  65. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/forbidden.txt +0 -0
  66. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/hatch_build.py +0 -0
  67. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/healthcheck.py +0 -0
  68. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  69. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/_checkpointer/__init__.py +0 -0
  70. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/_checkpointer/_adapter.py +0 -0
  71. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/_checkpointer/protocol.py +0 -0
  72. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/_factory_utils.py +0 -0
  73. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/__init__.py +0 -0
  74. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/a2a.py +0 -0
  75. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/a2ui.py +0 -0
  76. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/a2ui_schemas/README.md +0 -0
  77. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/a2ui_schemas/client_capabilities.json +0 -0
  78. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/a2ui_schemas/client_data_model.json +0 -0
  79. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/a2ui_schemas/client_to_server.json +0 -0
  80. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/a2ui_schemas/server_to_client.json +0 -0
  81. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/assistants.py +0 -0
  82. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/event_streaming.py +0 -0
  83. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/mcp/__init__.py +0 -0
  84. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/mcp/_constants.py +0 -0
  85. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/mcp/_handlers.py +0 -0
  86. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/mcp/_models.py +0 -0
  87. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/mcp/_routes.py +0 -0
  88. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  89. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/meta.py +0 -0
  90. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/openapi.py +0 -0
  91. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/profile.py +0 -0
  92. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/runs.py +0 -0
  93. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/store.py +0 -0
  94. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/threads.py +0 -0
  95. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/api/ui.py +0 -0
  96. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/asgi_transport.py +0 -0
  97. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/asyncio.py +0 -0
  98. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/auth/__init__.py +0 -0
  99. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/auth/errors.py +0 -0
  100. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/auth/langsmith/__init__.py +0 -0
  101. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/auth/langsmith/backend.py +0 -0
  102. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/auth/langsmith/client.py +0 -0
  103. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/auth/middleware.py +0 -0
  104. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/auth/noop.py +0 -0
  105. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/auth/studio_user.py +0 -0
  106. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/beacon_data_plane_jwt_auth.py +0 -0
  107. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/cache.py +0 -0
  108. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/cli.py +0 -0
  109. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/command.py +0 -0
  110. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/config/__init__.py +0 -0
  111. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/config/_parse.py +0 -0
  112. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/cron_scheduler.py +0 -0
  113. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/encryption/__init__.py +0 -0
  114. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/encryption/aes_json.py +0 -0
  115. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/encryption/context.py +0 -0
  116. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/encryption/custom.py +0 -0
  117. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/encryption/middleware.py +0 -0
  118. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/encryption/shared.py +0 -0
  119. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/errors.py +0 -0
  120. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/event_streaming/__init__.py +0 -0
  121. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/event_streaming/capabilities.py +0 -0
  122. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/event_streaming/constants.py +0 -0
  123. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  124. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/event_streaming/namespace.py +0 -0
  125. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/event_streaming/service.py +0 -0
  126. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/event_streaming/session.py +0 -0
  127. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/event_streaming/state_normalizers.py +0 -0
  128. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/event_streaming/types.py +0 -0
  129. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/feature_flags.py +0 -0
  130. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/__init__.py +0 -0
  131. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/client.py +0 -0
  132. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  133. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/ops/__init__.py +0 -0
  134. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/ops/assistants.py +0 -0
  135. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/ops/cache.py +0 -0
  136. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/ops/crons.py +0 -0
  137. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/ops/runs.py +0 -0
  138. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/ops/threads.py +0 -0
  139. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/server.py +0 -0
  140. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/servicers/__init__.py +0 -0
  141. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  142. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/grpc/servicers/encryption.py +0 -0
  143. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/http.py +0 -0
  144. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/http_metrics.py +0 -0
  145. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/http_metrics_utils.py +0 -0
  146. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/.gitignore +0 -0
  147. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/.prettierrc +0 -0
  148. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/.yarnclean +0 -0
  149. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/__init__.py +0 -0
  150. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/base.py +0 -0
  151. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/build.mts +0 -0
  152. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/client.http.mts +0 -0
  153. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/errors.py +0 -0
  154. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/global.d.ts +0 -0
  155. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/package.json +0 -0
  156. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/schema.py +0 -0
  157. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/src/graph.mts +0 -0
  158. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/src/load.hooks.mjs +0 -0
  159. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/src/preload.mjs +0 -0
  160. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  161. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/src/utils/files.mts +0 -0
  162. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/src/utils/importMap.mts +0 -0
  163. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  164. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/src/utils/serde.mts +0 -0
  165. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/sse.py +0 -0
  166. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/traceblock.mts +0 -0
  167. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/tsconfig.json +0 -0
  168. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/ui.py +0 -0
  169. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/js/yarn.lock +0 -0
  170. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/lc_security/__init__.py +0 -0
  171. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/lc_security/exceptions.py +0 -0
  172. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/lc_security/policy.py +0 -0
  173. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/lc_security/transport.py +0 -0
  174. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/logging.py +0 -0
  175. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/metadata.py +0 -0
  176. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/metrics_collector.py +0 -0
  177. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/metrics_otlp.py +0 -0
  178. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/middleware/__init__.py +0 -0
  179. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/middleware/ensure_store.py +0 -0
  180. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/middleware/http_logger.py +0 -0
  181. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/middleware/private_network.py +0 -0
  182. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/middleware/request_id.py +0 -0
  183. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/models/__init__.py +0 -0
  184. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/otel_context.py +0 -0
  185. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/patch.py +0 -0
  186. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/queue_entrypoint.py +0 -0
  187. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/release_tags.py +0 -0
  188. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/route.py +0 -0
  189. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/schema.py +0 -0
  190. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/self_hosted_logs.py +0 -0
  191. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/self_hosted_metrics.py +0 -0
  192. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/serde.py +0 -0
  193. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/server.py +0 -0
  194. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/sse.py +0 -0
  195. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/state.py +0 -0
  196. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/store.py +0 -0
  197. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/stream_v2.py +0 -0
  198. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/timing/__init__.py +0 -0
  199. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/timing/profiler.py +0 -0
  200. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/timing/timer.py +0 -0
  201. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/traceblock.py +0 -0
  202. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/tracing_session.py +0 -0
  203. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/tunneling/cloudflare.py +0 -0
  204. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/__init__.py +0 -0
  205. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/cache.py +0 -0
  206. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/config.py +0 -0
  207. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/errors.py +0 -0
  208. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/extract.py +0 -0
  209. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/future.py +0 -0
  210. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/headers.py +0 -0
  211. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/network.py +0 -0
  212. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/retriable_client.py +0 -0
  213. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/stream_codec.py +0 -0
  214. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/utils/uuids.py +0 -0
  215. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/webhook.py +0 -0
  216. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_api/worker.py +0 -0
  217. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/__init__.py +0 -0
  218. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/checkpointer.py +0 -0
  219. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/conversion/__init__.py +0 -0
  220. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/conversion/_compat.py +0 -0
  221. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  222. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/conversion/config.py +0 -0
  223. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/conversion/durability.py +0 -0
  224. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/conversion/store.py +0 -0
  225. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/conversion/struct.py +0 -0
  226. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/conversion/value.py +0 -0
  227. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/__init__.py +0 -0
  228. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  229. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  230. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  231. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  232. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  233. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  234. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  235. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  236. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  237. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  238. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  239. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  240. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  241. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  242. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  243. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  244. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  245. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  246. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  247. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  248. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  249. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  250. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  251. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  252. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  253. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  254. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  255. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  256. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  257. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  258. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  259. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  260. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  261. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  262. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  263. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  264. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  265. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  266. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  267. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  268. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  269. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  270. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  271. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  272. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  273. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  274. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  275. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  276. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  277. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  278. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  279. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  280. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  281. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  282. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  283. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  284. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/store_pb2.py +0 -0
  285. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/store_pb2.pyi +0 -0
  286. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/store_pb2_grpc.py +0 -0
  287. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/proto/store_pb2_grpc.pyi +0 -0
  288. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/serde.py +0 -0
  289. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_grpc_common/store.py +0 -0
  290. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_license/__init__.py +0 -0
  291. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_license/validation.py +0 -0
  292. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/__init__.py +0 -0
  293. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/checkpoint.py +0 -0
  294. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/database.py +0 -0
  295. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/lifespan.py +0 -0
  296. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/metrics.py +0 -0
  297. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/ops.py +0 -0
  298. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/queue.py +0 -0
  299. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/retry.py +0 -0
  300. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/routes.py +0 -0
  301. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/langgraph_runtime/store.py +0 -0
  302. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/logging.json +0 -0
  303. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/openapi.json +0 -0
  304. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/scripts/build_wheel.py +0 -0
  305. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/scripts/create_license.py +0 -0
  306. {langgraph_api-0.15.0.dev2 → langgraph_api-0.15.0.dev3}/scripts/run_a2a_tck.py +0 -0
@@ -48,6 +48,7 @@ BG_JOB_TIMEOUT_SECS ?= 86400
48
48
  BG_JOB_ISOLATED_LOOPS ?= false
49
49
  CRON_SCHEDULER_SLEEP_TIME ?= 0
50
50
  RELOAD_ARGS ?= --reload --reload-dir langgraph_api --reload-dir ../runtime_inmem
51
+ LANGGRAPH_AUTH_LANGSMITH ?= {"path": "tests/graphs/jwt_auth.py:auth", "allow_langsmith_api_keys": true}
51
52
 
52
53
  ifdef CI
53
54
  RELOAD_ARGS :=
@@ -166,6 +167,14 @@ test-auth-fastapi-jwt--after-custom-middleware--custom-route-auth:
166
167
  test-auth-watch:
167
168
  LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_auth.py:auth"}' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run ptw . -- -x -vv --ff --capture=no $(AUTH_TEST)
168
169
 
170
+ test-auth-langsmith-api-keys:
171
+ LANGGRAPH_RUNTIME_EDITION=inmem \
172
+ LANGGRAPH_AUTH='$(LANGGRAPH_AUTH_LANGSMITH)' \
173
+ REDIS_URI=_FAKE \
174
+ DATABASE_URI=:memory: \
175
+ MIGRATIONS_PATH=__inmem__ \
176
+ uv run pytest -v tests/integration_tests/test_langsmith_parallel_auth.py
177
+
169
178
  # dev commands
170
179
  LANGGRAPH_DISABLE_FILE_PERSISTENCE ?= true
171
180
  LANGSMITH_TRACING ?= false
@@ -223,6 +232,8 @@ start-encrypt:
223
232
  --no-access-log
224
233
 
225
234
 
235
+ LANGGRAPH_AUTH ?= {"path": "tests/graphs/jwt_auth.py:auth"}
236
+
226
237
  start-auth-jwt:
227
238
  LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='$(HTTP_CONFIG)' \
228
239
  LANGGRAPH_AES_KEY='$(LANGGRAPH_AES_KEY)' \
@@ -230,7 +241,7 @@ start-auth-jwt:
230
241
  LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_AUTH) \
231
242
  LANGGRAPH_STORE='$(STORE_CONFIG)' \
232
243
  LANGGRAPH_CHECKPOINTER='$(CHECKPOINTER_CONFIG)' \
233
- LANGGRAPH_AUTH='{"path": "tests/graphs/jwt_auth.py:auth"}' \
244
+ LANGGRAPH_AUTH='$(LANGGRAPH_AUTH)' \
234
245
  LANGSMITH_LANGGRAPH_API_VARIANT=test \
235
246
  REDIS_URI=fake \
236
247
  DATABASE_URI=:memory: \
@@ -258,6 +269,13 @@ start-auth-fastapi-jwt:
258
269
  $(RELOAD_ARGS) \
259
270
  --no-access-log
260
271
 
272
+ start-auth-langsmith-api-keys:
273
+ LANGGRAPH_AUTH_TYPE=langsmith \
274
+ LANGSMITH_AUTH_ENDPOINT=http://localhost:9124 \
275
+ LANGSMITH_TENANT_ID=8a1f2c4e-5b6d-4f70-9a3b-2c1d0e4f5a6b \
276
+ $(MAKE) start-auth-jwt \
277
+ LANGGRAPH_AUTH='$(LANGGRAPH_AUTH_LANGSMITH)'
278
+
261
279
  define RUN_FASTAPI_JWT_MW_ORDERING
262
280
  LANGGRAPH_RUNTIME_EDITION=inmem \
263
281
  LANGGRAPH_HTTP='{"app": "./tests/graphs/fastapi_jwt_middleware_ordering.py:app", "middleware_order": "$(1)", "enable_custom_route_auth": $(2)}' \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.15.0.dev2
3
+ Version: 0.15.0.dev3
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
@@ -28,7 +28,7 @@ Requires-Dist: orjson>=3.9.7
28
28
  Requires-Dist: prometheus-client>=0.0.1
29
29
  Requires-Dist: protobuf<7.0.0,>=6.32.1
30
30
  Requires-Dist: pyjwt>=2.13.0
31
- Requires-Dist: sse-starlette<3.4.0,>=2.1.3
31
+ Requires-Dist: sse-starlette<4.0.0,>=2.1.3
32
32
  Requires-Dist: starlette>=1.3.1
33
33
  Requires-Dist: structlog<26,>=24.1.0
34
34
  Requires-Dist: tenacity>=8.0.0
@@ -10,7 +10,7 @@ orjson>=3.9.7
10
10
  httpx>=0.25.0
11
11
  tenacity>=8.0.0
12
12
  uvicorn>=0.26.0
13
- sse-starlette>=2.1.3,<3.4.0
13
+ sse-starlette>=2.1.3,<4.0.0
14
14
  uvloop>=0.18.0
15
15
  httptools>=0.5.0
16
16
  jsonschema-rs>=0.20.0
@@ -0,0 +1 @@
1
+ __version__ = "0.15.0.dev3"
@@ -147,6 +147,7 @@ class CustomAuthBackend(AuthenticationBackend):
147
147
  Awaitable[tuple[list[str], Any]],
148
148
  ],
149
149
  disable_studio_auth: bool = False,
150
+ allow_langsmith_api_keys: bool | None = None,
150
151
  ):
151
152
  if not inspect.iscoroutinefunction(fn):
152
153
  self.fn = functools.partial(run_in_threadpool, fn)
@@ -157,6 +158,7 @@ class CustomAuthBackend(AuthenticationBackend):
157
158
  if fn
158
159
  else None
159
160
  )
161
+ self.allow_langsmith_api_keys = allow_langsmith_api_keys
160
162
  self.ls_auth = None
161
163
  if not disable_studio_auth:
162
164
  if LANGGRAPH_AUTH_TYPE == "langsmith":
@@ -172,6 +174,7 @@ class CustomAuthBackend(AuthenticationBackend):
172
174
  return (
173
175
  f"CustomAuthBackend(fn={self.fn}, "
174
176
  f"ls_auth={self.ls_auth}, "
177
+ f"allow_langsmith_api_keys={self.allow_langsmith_api_keys}, "
175
178
  f"param_names={self._param_names}"
176
179
  ")"
177
180
  )
@@ -179,11 +182,29 @@ class CustomAuthBackend(AuthenticationBackend):
179
182
  async def authenticate(
180
183
  self, conn: HTTPConnection
181
184
  ) -> tuple[AuthCredentials, BaseUser] | None:
182
- if self.ls_auth is not None and (
183
- (auth_scheme := conn.headers.get("x-auth-scheme"))
184
- and auth_scheme == "langsmith"
185
- ):
186
- return await self.ls_auth.authenticate(conn)
185
+ ls_auth = self.ls_auth
186
+ authorization = conn.headers.get("authorization")
187
+ use_langsmith = ls_auth is not None and (
188
+ # Studio auth uses the "langsmith" scheme.
189
+ conn.headers.get("x-auth-scheme") == "langsmith"
190
+ # LangSmith API keys travel on the Authorization header.
191
+ or (
192
+ bool(self.allow_langsmith_api_keys)
193
+ and (authorization is None or authorization.strip() == "")
194
+ )
195
+ )
196
+ if use_langsmith:
197
+ result = await ls_auth.authenticate(conn)
198
+ handler = "langsmith"
199
+ else:
200
+ result = await self._authenticate_custom(conn)
201
+ handler = "custom"
202
+ await logger.ainfo("Resolved authentication handler", auth_handler=handler)
203
+ return result
204
+
205
+ async def _authenticate_custom(
206
+ self, conn: HTTPConnection
207
+ ) -> tuple[AuthCredentials, BaseUser] | None:
187
208
  if self.fn is None:
188
209
  return None
189
210
  try:
@@ -227,11 +248,13 @@ def _get_custom_auth_middleware(
227
248
  config: str | dict,
228
249
  ) -> AuthenticationBackend:
229
250
  disable_studio_auth = False
251
+ allow_langsmith_api_keys: bool | None = None
230
252
  if isinstance(config, str):
231
253
  path: str | None = config
232
254
  else:
233
255
  path = config.get("path")
234
256
  disable_studio_auth = config.get("disable_studio_auth", disable_studio_auth)
257
+ allow_langsmith_api_keys = config.get("allow_langsmith_api_keys")
235
258
 
236
259
  auth_instance = _get_auth_instance(path)
237
260
  if auth_instance is None:
@@ -246,7 +269,10 @@ def _get_custom_auth_middleware(
246
269
  if auth_instance == "js":
247
270
  from langgraph_api.js.remote import CustomJsAuthBackend # noqa: PLC0415
248
271
 
249
- return CustomJsAuthBackend(disable_studio_auth=disable_studio_auth)
272
+ return CustomJsAuthBackend(
273
+ disable_studio_auth=disable_studio_auth,
274
+ allow_langsmith_api_keys=allow_langsmith_api_keys,
275
+ )
250
276
 
251
277
  if auth_instance._authenticate_handler is None:
252
278
  raise ValueError(
@@ -268,6 +294,7 @@ def _get_custom_auth_middleware(
268
294
  result = CustomAuthBackend(
269
295
  auth_instance._authenticate_handler,
270
296
  disable_studio_auth,
297
+ allow_langsmith_api_keys,
271
298
  )
272
299
  logger.info(f"Loaded custom auth middleware: {result!s}")
273
300
  return result
@@ -339,6 +339,22 @@ class AuthConfig(TypedDict, total=False):
339
339
  """Path to the authentication function in a Python file."""
340
340
  disable_studio_auth: bool
341
341
  """Whether to disable auth when connecting from the LangSmith Studio."""
342
+ allow_langsmith_api_keys: bool
343
+ """Run LangSmith API-key auth alongside custom auth.
344
+
345
+ Omitted or false (default): custom auth handles every request except
346
+ Studio (``x-auth-scheme: langsmith``).
347
+
348
+ True: requests with an ``Authorization`` header go to custom auth; all
349
+ others go to LangSmith (API keys use ``x-api-key``, not
350
+ ``Authorization``). No retry if the chosen handler fails.
351
+
352
+ LangSmith-authenticated users are ``StudioUser``. Custom ``@auth.on``
353
+ resource handlers still run.
354
+
355
+ Requires ``LANGGRAPH_AUTH_TYPE=langsmith`` and ``disable_studio_auth``
356
+ unset/false.
357
+ """
342
358
  openapi: SecurityConfig
343
359
  """The schema to use for updating the openapi spec.
344
360
 
@@ -645,6 +645,8 @@ async def collect_graphs_from_env(register: bool = False) -> None:
645
645
 
646
646
  for spec in js_specs:
647
647
  graph = RemotePregel(graph_id=spec.id)
648
+ if register and USE_RUNTIME_CONTEXT_API:
649
+ await graph.prefetch_context_jsonschema()
648
650
  if register:
649
651
  await register_graph(
650
652
  spec.id, graph, spec.config, description=spec.description
@@ -647,6 +647,7 @@ const StreamEventsPayload = z.object({
647
647
  .union([z.string(), z.array(z.string())])
648
648
  .optional(),
649
649
  config: RunnableConfigSchema.nullish(),
650
+ context: z.record(z.unknown()).nullish(),
650
651
  interrupt_before: z.union([z.array(z.string()), z.literal("*")]).nullish(),
651
652
  interrupt_after: z.union([z.array(z.string()), z.literal("*")]).nullish(),
652
653
  subgraphs: z.boolean().optional(),
@@ -683,7 +684,10 @@ async function* streamEventsRequest(
683
684
  rawPayload: z.infer<typeof StreamEventsPayload>,
684
685
  ) {
685
686
  const { graph_id: graphId, ...payload } = rawPayload;
686
- const config = getRunnableConfig(payload.config);
687
+ const config = {
688
+ ...getRunnableConfig(payload.config),
689
+ context: payload.context ?? undefined,
690
+ };
687
691
  const graph = await getGraph(graphId, config, payload.graph_name);
688
692
  const input = reviveCommand(payload.command) ?? payload.input;
689
693
  // TODO Check if it's a remote graph and don't set in that case
@@ -1223,6 +1227,7 @@ async function main() {
1223
1227
  .object({
1224
1228
  path: z.string().optional(),
1225
1229
  disable_studio_auth: z.boolean().optional(),
1230
+ allow_langsmith_api_keys: z.boolean().optional(),
1226
1231
  })
1227
1232
  .parse(JSON.parse(process.env.LANGGRAPH_AUTH ?? "{}"));
1228
1233
 
@@ -95,6 +95,9 @@ if (port := int(os.getenv("PORT", "8080"))) and port in (GRAPH_PORT, REMOTE_PORT
95
95
  f"PORT={port} is a reserved port for the JS worker. Please choose a different port."
96
96
  )
97
97
 
98
+ # Per-graph context schema, prefetched at startup so get_context_jsonschema stays sync.
99
+ _context_jsonschema_cache: dict[str, dict[str, Any] | None] = {}
100
+
98
101
  _client = httpx.AsyncClient(
99
102
  base_url=f"http://localhost:{GRAPH_PORT}",
100
103
  # Temporarily allow longer idle periods between sidecar response chunks.
@@ -291,7 +294,34 @@ class RemotePregel(BaseRemotePregel):
291
294
  yield event
292
295
 
293
296
  async def fetch_state_schema(self):
294
- return await _client_invoke("getSchema", {"graph_id": self.graph_id})
297
+ return await _client_invoke(
298
+ "getSchema",
299
+ {
300
+ "graph_id": self.graph_id,
301
+ "graph_config": self._inject_auth_to_config(self.config),
302
+ },
303
+ )
304
+
305
+ async def _refresh_context_jsonschema(self) -> None:
306
+ """Fetch and cache the context schema only when the request succeeds."""
307
+ try:
308
+ schema = await self.fetch_state_schema()
309
+ _context_jsonschema_cache[self.graph_id] = schema.get("config")
310
+ except Exception as e:
311
+ await logger.adebug(
312
+ f"Failed to fetch context schema for JS graph {self.graph_id}; "
313
+ f"its context will not be filtered this attempt: {e}",
314
+ exc_info=e,
315
+ )
316
+
317
+ async def prefetch_context_jsonschema(self) -> None:
318
+ await self._refresh_context_jsonschema()
319
+
320
+ async def aget_context_jsonschema(self) -> dict:
321
+ """Fetch the context schema under request authentication and cache it on success."""
322
+ if self.graph_id not in _context_jsonschema_cache:
323
+ await self._refresh_context_jsonschema()
324
+ return _context_jsonschema_cache.get(self.graph_id) or {}
295
325
 
296
326
  async def fetch_graph(
297
327
  self,
@@ -468,7 +498,7 @@ class RemotePregel(BaseRemotePregel):
468
498
  raise NotImplementedError()
469
499
 
470
500
  def get_context_jsonschema(self) -> dict:
471
- raise NotImplementedError()
501
+ return _context_jsonschema_cache.get(self.graph_id) or {}
472
502
 
473
503
  async def invoke(self, input: Any, config: RunnableConfig | None = None):
474
504
  raise NotImplementedError()
@@ -1077,9 +1107,14 @@ async def js_healthcheck():
1077
1107
  class CustomJsAuthBackend(AuthenticationBackend):
1078
1108
  ls_auth: AuthenticationBackend | None
1079
1109
 
1080
- def __init__(self, disable_studio_auth: bool = False):
1110
+ def __init__(
1111
+ self,
1112
+ disable_studio_auth: bool = False,
1113
+ allow_langsmith_api_keys: bool | None = None,
1114
+ ):
1081
1115
  from langgraph_api.utils.cache import LRUCache # noqa: PLC0415
1082
1116
 
1117
+ self.allow_langsmith_api_keys = allow_langsmith_api_keys
1083
1118
  self.ls_auth = None
1084
1119
  if not disable_studio_auth and LANGGRAPH_AUTH_TYPE == "langsmith":
1085
1120
  from langgraph_api.auth.langsmith.backend import ( # noqa: PLC0415
@@ -1106,12 +1141,29 @@ class CustomJsAuthBackend(AuthenticationBackend):
1106
1141
  async def authenticate(
1107
1142
  self, conn: HTTPConnection
1108
1143
  ) -> tuple[AuthCredentials, BaseUser] | None:
1109
- if self.ls_auth is not None and (
1110
- (auth_scheme := conn.headers.get("x-auth-scheme"))
1111
- and auth_scheme == "langsmith"
1112
- ):
1113
- return await self.ls_auth.authenticate(conn)
1144
+ ls_auth = self.ls_auth
1145
+ authorization = conn.headers.get("authorization")
1146
+ use_langsmith = ls_auth is not None and (
1147
+ # Studio auth uses the "langsmith" scheme.
1148
+ conn.headers.get("x-auth-scheme") == "langsmith"
1149
+ # LangSmith API keys travel on the Authorization header.
1150
+ or (
1151
+ bool(self.allow_langsmith_api_keys)
1152
+ and (authorization is None or authorization.strip() == "")
1153
+ )
1154
+ )
1155
+ if use_langsmith:
1156
+ result = await ls_auth.authenticate(conn)
1157
+ handler = "langsmith"
1158
+ else:
1159
+ result = await self._authenticate_js(conn)
1160
+ handler = "custom"
1161
+ await logger.ainfo("Resolved authentication handler", auth_handler=handler)
1162
+ return result
1114
1163
 
1164
+ async def _authenticate_js(
1165
+ self, conn: HTTPConnection
1166
+ ) -> tuple[AuthCredentials, BaseUser] | None:
1115
1167
  headers = dict(conn.headers)
1116
1168
  # need to remove content-length to prevent confusing the HTTP client
1117
1169
  headers.pop("content-length", None)
@@ -253,9 +253,10 @@ async def create_valid_run(
253
253
  ),
254
254
  )
255
255
 
256
- # Keep config and context in sync for user provided params
256
+ # Mark context-provided runs so stream.py can filter their mirrored configurable values safely.
257
257
  if context:
258
258
  configurable = context.copy()
259
+ configurable["__context_provided__"] = True
259
260
  config["configurable"] = configurable
260
261
  else:
261
262
  context = configurable.copy()
@@ -176,6 +176,8 @@ async def astream_state(
176
176
  context = kwargs.pop("context", None)
177
177
  config = cast("RunnableConfig", kwargs.pop("config"))
178
178
  configurable = config["configurable"]
179
+ # Remove the internal marker before the graph receives or persists the configuration.
180
+ context_provided_by_caller = configurable.pop("__context_provided__", False)
179
181
  stack = AsyncExitStack()
180
182
  graph = await stack.enter_async_context(
181
183
  get_graph(
@@ -191,11 +193,21 @@ async def astream_state(
191
193
  )
192
194
  )
193
195
 
194
- # Filter context parameters based on context schema if available
195
- if context and USE_RUNTIME_CONTEXT_API and not isinstance(graph, BaseRemotePregel):
196
+ # Filter context with the request's authentication context when the graph is remote.
197
+ if context and USE_RUNTIME_CONTEXT_API:
196
198
  try:
197
- context_schema = graph.get_context_jsonschema()
198
- context = await _filter_context_by_schema(context, context_schema)
199
+ context_schema = (
200
+ await graph.aget_context_jsonschema()
201
+ if isinstance(graph, BaseRemotePregel)
202
+ else graph.get_context_jsonschema()
203
+ )
204
+ filtered_context = await _filter_context_by_schema(context, context_schema)
205
+ # Remove dropped keys from the mirrored configurable only when the caller supplied context.
206
+ if context_provided_by_caller:
207
+ for dropped_key in context.keys() - filtered_context.keys():
208
+ if configurable.get(dropped_key) == context[dropped_key]:
209
+ configurable.pop(dropped_key, None)
210
+ context = filtered_context
199
211
  except Exception as e:
200
212
  await logger.adebug(
201
213
  f"Failed to get context schema for filtering: {e}", exc_info=e
@@ -30,6 +30,7 @@ RESERVED_CONFIGURABLE_KEYS = (
30
30
  "__otel_tracestate__",
31
31
  "__dd_trace_headers__",
32
32
  "__pregel_node_finished",
33
+ "__context_provided__",
33
34
  )
34
35
  RESERVED_METADATA_KEYS = (
35
36
  "thread_id",
@@ -15,7 +15,7 @@ license = { text = "Elastic-2.0" }
15
15
  requires-python = ">=3.11"
16
16
  readme = "README.md"
17
17
  dependencies = [
18
- "sse-starlette>=2.1.3,<3.4.0",
18
+ "sse-starlette>=2.1.3,<4.0.0",
19
19
  "starlette>=1.3.1",
20
20
  "watchfiles>=0.13",
21
21
  "uvloop>=0.18.0; platform_system != 'Windows'",
@@ -786,7 +786,7 @@ requires-dist = [
786
786
  { name = "prometheus-client", specifier = ">=0.0.1" },
787
787
  { name = "protobuf", specifier = ">=6.32.1,<7.0.0" },
788
788
  { name = "pyjwt", specifier = ">=2.13.0" },
789
- { name = "sse-starlette", specifier = ">=2.1.3,<3.4.0" },
789
+ { name = "sse-starlette", specifier = ">=2.1.3,<4.0.0" },
790
790
  { name = "starlette", specifier = ">=1.3.1" },
791
791
  { name = "structlog", specifier = ">=24.1.0,<26" },
792
792
  { name = "tenacity", specifier = ">=8.0.0" },
@@ -1783,15 +1783,15 @@ wheels = [
1783
1783
 
1784
1784
  [[package]]
1785
1785
  name = "sse-starlette"
1786
- version = "3.3.4"
1786
+ version = "3.4.8"
1787
1787
  source = { registry = "https://pypi.org/simple" }
1788
1788
  dependencies = [
1789
1789
  { name = "anyio" },
1790
1790
  { name = "starlette" },
1791
1791
  ]
1792
- sdist = { url = "https://files.pythonhosted.org/packages/26/8c/f9290339ef6d79badbc010f067cd769d6601ec11a57d78569c683fb4dd87/sse_starlette-3.3.4.tar.gz", hash = "sha256:aaf92fc067af8a5427192895ac028e947b484ac01edbc3caf00e7e7137c7bef1", size = 32427, upload-time = "2026-03-29T09:00:23.307Z" }
1792
+ sdist = { url = "https://files.pythonhosted.org/packages/f8/00/b42a44342a054d58cb1115d7c8aa9cb4290dd9442f9c1b91a4b8173dba22/sse_starlette-3.4.8.tar.gz", hash = "sha256:ed89ffbb75cbf78a5fe2f2109cd584792ee7f9dfac96f791db546df8f15f3f9c", size = 32548, upload-time = "2026-08-05T11:19:49.982Z" }
1793
1793
  wheels = [
1794
- { url = "https://files.pythonhosted.org/packages/f8/7f/3de5402f39890ac5660b86bcf5c03f9d855dad5c4ed764866d7b592b46fd/sse_starlette-3.3.4-py3-none-any.whl", hash = "sha256:84bb06e58939a8b38d8341f1bc9792f06c2b53f48c608dd207582b664fc8f3c1", size = 14330, upload-time = "2026-03-29T09:00:21.846Z" },
1794
+ { url = "https://files.pythonhosted.org/packages/dd/3a/764912c58293d95b6dcdf4cc255f9d10de310580ced547b082eb9d72018c/sse_starlette-3.4.8-py3-none-any.whl", hash = "sha256:6e82314c786709a3cd9520f2285cf9fff90e181e598e8a357b0cf80f66afba0d", size = 16516, upload-time = "2026-08-05T11:19:48.748Z" },
1795
1795
  ]
1796
1796
 
1797
1797
  [[package]]
@@ -1 +0,0 @@
1
- __version__ = "0.15.0.dev2"