langgraph-api 0.18.0.dev2__tar.gz → 0.18.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 (337) hide show
  1. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/Makefile +26 -20
  2. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/PKG-INFO +1 -1
  3. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/REPORTS.md +2 -2
  4. langgraph_api-0.18.0.dev3/langgraph_api/__init__.py +1 -0
  5. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/a2a.py +93 -10
  6. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/event_streaming.py +10 -2
  7. langgraph_api-0.18.0.dev3/langgraph_api/api/mcp/_calls.py +29 -0
  8. langgraph_api-0.18.0.dev3/langgraph_api/api/mcp/_constants.py +28 -0
  9. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/mcp/_handlers.py +146 -196
  10. langgraph_api-0.18.0.dev3/langgraph_api/api/mcp/_outcome.py +43 -0
  11. langgraph_api-0.18.0.dev3/langgraph_api/api/mcp/_protocol.py +224 -0
  12. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/config/__init__.py +37 -1
  13. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/cron_scheduler.py +2 -2
  14. langgraph_api-0.18.0.dev3/langgraph_api/drain.py +102 -0
  15. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/event_streaming/service.py +77 -26
  16. langgraph_api-0.18.0.dev3/langgraph_api/executor/__init__.py +9 -0
  17. langgraph_api-0.18.0.dev3/langgraph_api/executor/__main__.py +343 -0
  18. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/feature_flags.py +6 -0
  19. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/graph.py +12 -2
  20. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/ops/runs.py +41 -5
  21. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/metrics_otlp.py +8 -0
  22. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/models/run.py +4 -3
  23. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/queue_entrypoint.py +13 -1
  24. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/self_hosted_logs.py +3 -1
  25. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/self_hosted_metrics.py +1 -1
  26. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/stream.py +49 -3
  27. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/timing/__init__.py +16 -0
  28. langgraph_api-0.18.0.dev3/langgraph_api/timing/startup.py +184 -0
  29. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/timing/timer.py +16 -2
  30. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/headers.py +15 -3
  31. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/validation.py +6 -0
  32. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/worker.py +146 -13
  33. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/worker_runtime.py +124 -4
  34. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/__init__.py +4 -4
  35. langgraph_api-0.18.0.dev3/langgraph_grpc_common/proto/orchestrator_pb2.py +50 -0
  36. langgraph_api-0.18.0.dev2/langgraph_grpc_common/proto/runner_pb2.pyi → langgraph_api-0.18.0.dev3/langgraph_grpc_common/proto/orchestrator_pb2.pyi +4 -4
  37. langgraph_api-0.18.0.dev3/langgraph_grpc_common/proto/orchestrator_pb2_grpc.py +108 -0
  38. langgraph_api-0.18.0.dev3/langgraph_grpc_common/proto/orchestrator_pb2_grpc.pyi +82 -0
  39. langgraph_api-0.18.0.dev2/langgraph_api/__init__.py +0 -1
  40. langgraph_api-0.18.0.dev2/langgraph_api/api/mcp/_constants.py +0 -19
  41. langgraph_api-0.18.0.dev2/langgraph_api/runner/__init__.py +0 -10
  42. langgraph_api-0.18.0.dev2/langgraph_api/runner/__main__.py +0 -275
  43. langgraph_api-0.18.0.dev2/langgraph_grpc_common/proto/runner_pb2.py +0 -50
  44. langgraph_api-0.18.0.dev2/langgraph_grpc_common/proto/runner_pb2_grpc.py +0 -108
  45. langgraph_api-0.18.0.dev2/langgraph_grpc_common/proto/runner_pb2_grpc.pyi +0 -73
  46. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/.gitignore +0 -0
  47. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/LICENSE +0 -0
  48. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/README.md +0 -0
  49. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/.gitignore +0 -0
  50. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/Makefile +0 -0
  51. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/README.md +0 -0
  52. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/assistant.ts +0 -0
  53. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  54. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  55. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  56. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  57. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/classify-error.test.js +0 -0
  58. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/classify-error.ts +0 -0
  59. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/delta-turns-lib.test.js +0 -0
  60. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/delta-turns-lib.ts +0 -0
  61. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/delta_turns.ts +0 -0
  62. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  63. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/interrupt_resume.ts +0 -0
  64. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/log-failure.ts +0 -0
  65. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  66. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/store.ts +0 -0
  67. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/stream_write.ts +0 -0
  68. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/thread.ts +0 -0
  69. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  70. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  71. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/types.ts +0 -0
  72. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/benchmark-runners/wait_write.ts +0 -0
  73. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/capacity-ci.js +0 -0
  74. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/capacity-ci.test.js +0 -0
  75. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/clean-cli.js +0 -0
  76. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/clean.js +0 -0
  77. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/continuous/README.md +0 -0
  78. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/continuous/pyproject.toml +0 -0
  79. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/continuous/runner.py +0 -0
  80. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/continuous/uv.lock +0 -0
  81. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/daily-report.js +0 -0
  82. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/daily-report.test.js +0 -0
  83. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/delta-report.js +0 -0
  84. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/delta-report.test.js +0 -0
  85. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/graphs.js +0 -0
  86. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/history.js +0 -0
  87. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/history.test.js +0 -0
  88. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/host-v2.js +0 -0
  89. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/host-v2.test.js +0 -0
  90. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/multer.test.js +0 -0
  91. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/package.json +0 -0
  92. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/ramp.js +0 -0
  93. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/reporting/dd_reporting.py +0 -0
  94. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/runner-descriptions.js +0 -0
  95. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/server-metrics.js +0 -0
  96. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/server-metrics.test.js +0 -0
  97. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/slack.js +0 -0
  98. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/staircase.py +0 -0
  99. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/staircase_step_k6.js +0 -0
  100. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/tsconfig.json +0 -0
  101. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/update-revision.js +0 -0
  102. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/weather.js +0 -0
  103. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/benchmark/yarn.lock +0 -0
  104. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/constraints.txt +0 -0
  105. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/custom_store.sql +0 -0
  106. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/forbidden.txt +0 -0
  107. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/hatch_build.py +0 -0
  108. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/healthcheck.py +0 -0
  109. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  110. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/_checkpointer/__init__.py +0 -0
  111. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/_checkpointer/_adapter.py +0 -0
  112. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/_checkpointer/protocol.py +0 -0
  113. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/_factory_utils.py +0 -0
  114. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/__init__.py +0 -0
  115. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/a2ui.py +0 -0
  116. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/a2ui_schemas/README.md +0 -0
  117. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/a2ui_schemas/client_capabilities.json +0 -0
  118. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/a2ui_schemas/client_data_model.json +0 -0
  119. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/a2ui_schemas/client_to_server.json +0 -0
  120. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/a2ui_schemas/server_to_client.json +0 -0
  121. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/assistants.py +0 -0
  122. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/mcp/__init__.py +0 -0
  123. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/mcp/_models.py +0 -0
  124. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/mcp/_routes.py +0 -0
  125. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  126. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/meta.py +0 -0
  127. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/openapi.py +0 -0
  128. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/profile.py +0 -0
  129. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/runs.py +0 -0
  130. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/store.py +0 -0
  131. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/threads.py +0 -0
  132. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/api/ui.py +0 -0
  133. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/asgi_transport.py +0 -0
  134. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/asyncio.py +0 -0
  135. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/auth/__init__.py +0 -0
  136. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/auth/custom.py +0 -0
  137. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/auth/errors.py +0 -0
  138. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/auth/langsmith/__init__.py +0 -0
  139. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/auth/langsmith/backend.py +0 -0
  140. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/auth/langsmith/client.py +0 -0
  141. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/auth/middleware.py +0 -0
  142. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/auth/noop.py +0 -0
  143. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/auth/studio_user.py +0 -0
  144. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/beacon_data_plane_jwt_auth.py +0 -0
  145. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/cache.py +0 -0
  146. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/cli.py +0 -0
  147. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/command.py +0 -0
  148. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/config/_parse.py +0 -0
  149. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/config/schemas.py +0 -0
  150. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/encryption/__init__.py +0 -0
  151. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/encryption/aes_json.py +0 -0
  152. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/encryption/context.py +0 -0
  153. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/encryption/custom.py +0 -0
  154. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/encryption/middleware.py +0 -0
  155. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/encryption/shared.py +0 -0
  156. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/errors.py +0 -0
  157. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/event_streaming/__init__.py +0 -0
  158. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/event_streaming/capabilities.py +0 -0
  159. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/event_streaming/constants.py +0 -0
  160. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  161. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/event_streaming/namespace.py +0 -0
  162. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/event_streaming/session.py +0 -0
  163. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/event_streaming/state_normalizers.py +0 -0
  164. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/event_streaming/types.py +0 -0
  165. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/__init__.py +0 -0
  166. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/client.py +0 -0
  167. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  168. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/ops/__init__.py +0 -0
  169. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/ops/assistants.py +0 -0
  170. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/ops/cache.py +0 -0
  171. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/ops/crons.py +0 -0
  172. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/ops/threads.py +0 -0
  173. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/server.py +0 -0
  174. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/servicers/__init__.py +0 -0
  175. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  176. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/grpc/servicers/encryption.py +0 -0
  177. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/http.py +0 -0
  178. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/http_metrics.py +0 -0
  179. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/http_metrics_utils.py +0 -0
  180. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/.gitignore +0 -0
  181. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/.prettierrc +0 -0
  182. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/.yarnclean +0 -0
  183. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/__init__.py +0 -0
  184. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/base.py +0 -0
  185. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/build.mts +0 -0
  186. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/client.http.mts +0 -0
  187. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/client.mts +0 -0
  188. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/errors.py +0 -0
  189. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/global.d.ts +0 -0
  190. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/package.json +0 -0
  191. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/remote.py +0 -0
  192. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/schema.py +0 -0
  193. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/src/auth-mutations.mts +0 -0
  194. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/src/graph.mts +0 -0
  195. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/src/load.hooks.mjs +0 -0
  196. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/src/preload.mjs +0 -0
  197. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  198. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/src/utils/files.mts +0 -0
  199. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/src/utils/importMap.mts +0 -0
  200. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  201. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/src/utils/serde.mts +0 -0
  202. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/sse.py +0 -0
  203. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/traceblock.mts +0 -0
  204. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/tsconfig.json +0 -0
  205. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/ui.py +0 -0
  206. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/js/yarn.lock +0 -0
  207. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/lc_security/__init__.py +0 -0
  208. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/lc_security/exceptions.py +0 -0
  209. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/lc_security/policy.py +0 -0
  210. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/lc_security/transport.py +0 -0
  211. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/logging.py +0 -0
  212. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/metadata.py +0 -0
  213. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/metrics_collector.py +0 -0
  214. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/middleware/__init__.py +0 -0
  215. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/middleware/ensure_store.py +0 -0
  216. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/middleware/http_logger.py +0 -0
  217. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/middleware/private_network.py +0 -0
  218. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/middleware/request_id.py +0 -0
  219. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/models/__init__.py +0 -0
  220. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/otel_context.py +0 -0
  221. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/patch.py +0 -0
  222. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/release_tags.py +0 -0
  223. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/route.py +0 -0
  224. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/schema.py +0 -0
  225. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/serde.py +0 -0
  226. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/server.py +0 -0
  227. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/sse.py +0 -0
  228. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/state.py +0 -0
  229. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/store.py +0 -0
  230. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/stream_v2.py +0 -0
  231. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/timing/profiler.py +0 -0
  232. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/traceblock.py +0 -0
  233. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/tracing_session.py +0 -0
  234. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/tunneling/cloudflare.py +0 -0
  235. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/__init__.py +0 -0
  236. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/cache.py +0 -0
  237. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/config.py +0 -0
  238. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/errors.py +0 -0
  239. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/extract.py +0 -0
  240. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/future.py +0 -0
  241. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/network.py +0 -0
  242. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/retriable_client.py +0 -0
  243. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/stream_codec.py +0 -0
  244. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/utils/uuids.py +0 -0
  245. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_api/webhook.py +0 -0
  246. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/__init__.py +0 -0
  247. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/checkpointer.py +0 -0
  248. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/conversion/__init__.py +0 -0
  249. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/conversion/_compat.py +0 -0
  250. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  251. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/conversion/config.py +0 -0
  252. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/conversion/durability.py +0 -0
  253. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/conversion/store.py +0 -0
  254. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/conversion/struct.py +0 -0
  255. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/conversion/value.py +0 -0
  256. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  257. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  258. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  259. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  260. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  261. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  262. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  263. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  264. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  265. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  266. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  267. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  268. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  269. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  270. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  271. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  272. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  273. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  274. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  275. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  276. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  277. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  278. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  279. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  280. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  281. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  282. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  283. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  284. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  285. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  286. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  287. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  288. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  289. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  290. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  291. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  292. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  293. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  294. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  295. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  296. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  297. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  298. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  299. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  300. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  301. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  302. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  303. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  304. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  305. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  306. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  307. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  308. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  309. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  310. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  311. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  312. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/store_pb2.py +0 -0
  313. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/store_pb2.pyi +0 -0
  314. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/store_pb2_grpc.py +0 -0
  315. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/proto/store_pb2_grpc.pyi +0 -0
  316. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/serde.py +0 -0
  317. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_grpc_common/store.py +0 -0
  318. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_license/__init__.py +0 -0
  319. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_license/validation.py +0 -0
  320. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/__init__.py +0 -0
  321. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/checkpoint.py +0 -0
  322. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/database.py +0 -0
  323. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/encryption.py +0 -0
  324. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/lifespan.py +0 -0
  325. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/metrics.py +0 -0
  326. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/ops.py +0 -0
  327. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/queue.py +0 -0
  328. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/retry.py +0 -0
  329. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/routes.py +0 -0
  330. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/langgraph_runtime/store.py +0 -0
  331. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/logging.json +0 -0
  332. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/openapi.json +0 -0
  333. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/pyproject.toml +0 -0
  334. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/scripts/build_wheel.py +0 -0
  335. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/scripts/create_license.py +0 -0
  336. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/scripts/run_a2a_tck.py +0 -0
  337. {langgraph_api-0.18.0.dev2 → langgraph_api-0.18.0.dev3}/uv.lock +0 -0
@@ -67,6 +67,7 @@ START_TARGET ?= start-license-oss
67
67
  TEST_TARGET ?= test-license-oss
68
68
  SERVER_HEALTH_URL ?= http://127.0.0.1:9123/ok
69
69
  SERVER_START_TIMEOUT_SECS ?= 30
70
+ SERVER_STOP_TIMEOUT_SECS ?= 10
70
71
 
71
72
  ifeq ($(LANGGRAPH_HTTP),fastapi)
72
73
  HTTP_CONFIG := {"app": "./tests/graphs/my_router.py:app", "disable_mcp": false, "disable_a2a": false, "mount_prefix": "/my-cool/api"}
@@ -126,16 +127,25 @@ test-auth:
126
127
  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 pytest -v $(PYTEST_ROOT_ARGS) $(XDIST_ARGS) $(AUTH_TEST)
127
128
 
128
129
  test-with-server:
129
- @bash -euo pipefail -c '$(MAKE) $(START_TARGET) LANGGRAPH_HTTP='\''$(LANGGRAPH_HTTP)'\'' & \
130
- pid=$$!; \
130
+ @bash -euo pipefail -c 'set -m; \
131
+ $(MAKE) $(START_TARGET) LANGGRAPH_HTTP='\''$(LANGGRAPH_HTTP)'\'' & \
132
+ server_pgid=$$!; \
133
+ set +m; \
131
134
  cleanup() { \
132
- if [ -r /proc/$$pid/winpid ]; then \
133
- taskkill //F //T //PID "$$(cat /proc/$$pid/winpid)" >/dev/null 2>&1 || true; \
134
- else \
135
- kill $$pid >/dev/null 2>&1 || true; \
135
+ if [ -r /proc/$$server_pgid/winpid ]; then \
136
+ taskkill //F //T //PID "$$(cat /proc/$$server_pgid/winpid)" >/dev/null 2>&1 || true; \
137
+ return 0; \
136
138
  fi; \
139
+ kill -- -$$server_pgid 2>/dev/null || return 0; \
140
+ for i in $$(seq 1 $(SERVER_STOP_TIMEOUT_SECS)); do \
141
+ kill -0 -- -$$server_pgid 2>/dev/null || return 0; \
142
+ sleep 1; \
143
+ done; \
144
+ kill -KILL -- -$$server_pgid 2>/dev/null || true; \
137
145
  }; \
138
146
  trap cleanup EXIT; \
147
+ trap "exit 130" INT; \
148
+ trap "exit 143" TERM; \
139
149
  for i in $$(seq 1 $(SERVER_START_TIMEOUT_SECS)); do \
140
150
  if curl -sf "$(SERVER_HEALTH_URL)" >/dev/null; then \
141
151
  break; \
@@ -373,26 +383,22 @@ start-test-a2a-tck-watch:
373
383
  "$(MAKE) start" \
374
384
  "sleep $(TCK_STARTUP_DELAY) && npx nodemon --watch langgraph_api/api/a2a.py --ext py --exec '$(MAKE) test-a2a-tck-must'"
375
385
 
376
- # MCP Conformance Test targets
377
- # Uses the official MCP conformance test suite (https://github.com/modelcontextprotocol/conformance)
378
- # Requires a running server: make start (in another terminal)
379
-
386
+ MCP_CONFORMANCE := npx @modelcontextprotocol/conformance@0.2.0-alpha.12
380
387
  MCP_CONFORMANCE_URL ?= http://localhost:9123/mcp
381
- MCP_CONFORMANCE_SUITE ?= active
382
- MCP_CONFORMANCE_BASELINE ?= ../mcp-conformance-baseline.yml
383
- MCP_STARTUP_DELAY ?= 10
388
+ MCP_CONFORMANCE_REVISIONS := 2025-11-25 2026-07-28
384
389
 
385
390
  test-mcp-conformance:
386
- npx @modelcontextprotocol/conformance@0.1.13 server \
391
+ $(MAKE) -k $(addprefix test-mcp-conformance-,$(MCP_CONFORMANCE_REVISIONS))
392
+
393
+ test-mcp-conformance-%:
394
+ $(MCP_CONFORMANCE) server \
387
395
  --url $(MCP_CONFORMANCE_URL) \
388
- --suite $(MCP_CONFORMANCE_SUITE) \
389
- --expected-failures $(MCP_CONFORMANCE_BASELINE) \
396
+ --requirements $* \
397
+ --expected-failures ../mcp-conformance-baseline-$*.yml \
390
398
  --verbose
391
399
 
392
400
  start-test-mcp-conformance:
393
- npx concurrently -k -s first \
394
- "$(MAKE) start" \
395
- "sleep $(MCP_STARTUP_DELAY) && $(MAKE) test-mcp-conformance"
401
+ $(MAKE) test-with-server TEST_TARGET=test-mcp-conformance
396
402
 
397
403
  list-mcp-scenarios:
398
- npx @modelcontextprotocol/conformance list --server
404
+ $(MCP_CONFORMANCE) list --server
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.18.0.dev2
3
+ Version: 0.18.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
@@ -47,12 +47,12 @@ server version staging is on, which is the API version in the first line.
47
47
  |---|---|---|---|
48
48
  | `wait` | `wait_write` | start a run and wait for its result (`POST /runs/wait`): run execution and checkpointing | 1,000 |
49
49
  | `stream` | `stream_write` | start a run and read its event stream to the end (`POST /runs/stream`) | 1,000 |
50
- | `search` | `threads_search` | create two threads, set their metadata, then search for them by it: database and metadata search | 300 |
50
+ | `search` | `threads_search_metadata` | create two threads, set their metadata, then search for them by it: database and metadata search | 300 |
51
51
 
52
52
  Tables use the one-word row names so they fit a phone; the lines above the
53
53
  table use the runner names.
54
54
 
55
- `threads_search` does not delete the threads it creates; the deployment's
55
+ `threads_search_metadata` does not delete the threads it creates; the deployment's
56
56
  60-minute thread TTL removes them, so each night searches a table of about
57
57
  that run's threads, not a growing history.
58
58
 
@@ -0,0 +1 @@
1
+ __version__ = "0.18.0.dev3"
@@ -2090,6 +2090,19 @@ async def handle_message_send(
2090
2090
  "message": "Invalid params: 'configuration' must be an object",
2091
2091
  }
2092
2092
  }
2093
+ for field in ("returnImmediately", "blocking"):
2094
+ if configuration.get(field) is not None and not isinstance(
2095
+ configuration[field], bool
2096
+ ):
2097
+ return {
2098
+ "error": {
2099
+ "code": ERROR_CODE_INVALID_PARAMS,
2100
+ "message": f"Invalid params: '{field}' must be a boolean",
2101
+ }
2102
+ }
2103
+ return_immediately = configuration.get("returnImmediately")
2104
+ if return_immediately is None:
2105
+ return_immediately = configuration.get("blocking") is False
2093
2106
  history_length = configuration.get("historyLength")
2094
2107
  if history_error := _validate_history_length(history_length):
2095
2108
  return {
@@ -2308,6 +2321,36 @@ async def handle_message_send(
2308
2321
  context_id = str(run["thread_id"])
2309
2322
  if task_id is None:
2310
2323
  task_id = _make_task_id(context_id, str(run["run_id"]))
2324
+ if return_immediately:
2325
+ immediate_task: dict[str, Any] = {
2326
+ "kind": "task",
2327
+ "id": task_id,
2328
+ "contextId": context_id,
2329
+ "status": {
2330
+ "state": _task_state_for_run(run),
2331
+ "timestamp": _run_timestamp(run),
2332
+ },
2333
+ }
2334
+ if history_length is not None and history_length != 0:
2335
+ run_messages = await _load_run_messages(
2336
+ context_id, str(run["run_id"]), request.headers
2337
+ )
2338
+ if not run_messages.messages:
2339
+ run_messages = RunMessages(input_content.get("messages", []), 0)
2340
+ if task_start_id:
2341
+ task_ids_by_start_id.setdefault(task_start_id, task_id)
2342
+ immediate_task["history"] = _convert_messages_to_a2a_format(
2343
+ run_messages.stamped(task_id),
2344
+ task_id,
2345
+ context_id,
2346
+ history_length=history_length,
2347
+ history_scope=history_scope,
2348
+ a2ui=a2ui,
2349
+ task_ids_by_start_id=task_ids_by_start_id,
2350
+ )
2351
+ return {"result": {"task": immediate_task}}
2352
+
2353
+ if existing_task_id is None:
2311
2354
  try:
2312
2355
  runs = await _list_context_runs(
2313
2356
  client, context_id=context_id, headers=request.headers
@@ -2489,6 +2532,48 @@ async def handle_tasks_get(
2489
2532
  lg_status = run_info.get("status", "unknown")
2490
2533
  a2a_state = task.state
2491
2534
 
2535
+ if a2a_state in ("TASK_STATE_COMPLETED", "TASK_STATE_INPUT_REQUIRED"):
2536
+ states, before = await asyncio.gather(
2537
+ get_client().threads.get_history(
2538
+ context_id,
2539
+ limit=1,
2540
+ metadata={"run_id": str(run_info["run_id"])},
2541
+ headers=request.headers,
2542
+ ),
2543
+ _latest_messages(
2544
+ context_id,
2545
+ {"run_id": str(run_info["run_id"]), "source": "input"},
2546
+ request.headers,
2547
+ ),
2548
+ )
2549
+ result = dict(states[0]["values"]) if states else {}
2550
+ messages = result.get("messages", []) or []
2551
+ run_messages = (
2552
+ RunMessages.between(before, messages)
2553
+ if before is not None
2554
+ else RunMessages(messages, None)
2555
+ )
2556
+ if "messages" in result:
2557
+ result["messages"] = run_messages.stamped(task_id)
2558
+ if a2a_state == "TASK_STATE_INPUT_REQUIRED":
2559
+ result["__interrupt__"] = (
2560
+ states[0].get("interrupts", []) if states else []
2561
+ )
2562
+ response = await _create_task_response(
2563
+ task_id=task_id,
2564
+ context_id=context_id,
2565
+ result=result,
2566
+ assistant_id=assistant_id,
2567
+ a2ui=_a2ui_context_for_run(run_info),
2568
+ history_length=history_length,
2569
+ history_scope=history_scope,
2570
+ task_ids_by_start_id=task.task_ids_by_start_id,
2571
+ turn=run_messages.added,
2572
+ )
2573
+ task_response = response["result"]["task"]
2574
+ task_response["status"]["timestamp"] = task.status_timestamp
2575
+ return {"result": task_response}
2576
+
2492
2577
  thread_history = []
2493
2578
  if history_length != 0:
2494
2579
  try:
@@ -2532,16 +2617,7 @@ async def handle_tasks_get(
2532
2617
  if history_length != 0:
2533
2618
  task_response["history"] = thread_history
2534
2619
 
2535
- # Add result message if completed
2536
- if a2a_state == "TASK_STATE_COMPLETED":
2537
- task_response["status"]["message"] = {
2538
- "kind": "message",
2539
- "role": "ROLE_AGENT",
2540
- "parts": [{"kind": "text", "text": "Task completed successfully"}],
2541
- "messageId": str(uuid.uuid4()),
2542
- "taskId": task_id,
2543
- }
2544
- elif a2a_state == "TASK_STATE_FAILED":
2620
+ if a2a_state == "TASK_STATE_FAILED":
2545
2621
  task_response["status"]["message"] = {
2546
2622
  "kind": "message",
2547
2623
  "role": "ROLE_AGENT",
@@ -2554,6 +2630,13 @@ async def handle_tasks_get(
2554
2630
 
2555
2631
  return {"result": task_response}
2556
2632
 
2633
+ except InvalidAgentResponseError as e:
2634
+ return {
2635
+ "error": {
2636
+ "code": ERROR_CODE_INVALID_AGENT_RESPONSE,
2637
+ "message": str(e),
2638
+ }
2639
+ }
2557
2640
  except Exception as e:
2558
2641
  await logger.aexception(
2559
2642
  f"Error in tasks/get for task {params.get('id')}: {e!s}", exc_info=True
@@ -40,6 +40,8 @@ from langgraph_api.serde import json_dumpb
40
40
  from langgraph_api.sse import EventSourceResponse
41
41
 
42
42
  if TYPE_CHECKING:
43
+ from collections.abc import Mapping
44
+
43
45
  from starlette.requests import Request
44
46
  from starlette.websockets import WebSocket
45
47
 
@@ -91,7 +93,12 @@ def _json_response(content: Any, *, status_code: int = 200) -> Response:
91
93
  )
92
94
 
93
95
 
94
- def _make_manager(thread_id: str, send_event: Any = None) -> ThreadRunManager:
96
+ def _make_manager(
97
+ thread_id: str,
98
+ send_event: Any = None,
99
+ *,
100
+ headers: Mapping[str, str] | None = None,
101
+ ) -> ThreadRunManager:
95
102
  # Auth context is propagated via ``ApiRoute``'s ``with_user`` wrapper
96
103
  # — ops reads it off the context var, so we don't thread it through
97
104
  # the manager explicitly.
@@ -100,6 +107,7 @@ def _make_manager(thread_id: str, send_event: Any = None) -> ThreadRunManager:
100
107
  runs=Runs,
101
108
  threads=Threads,
102
109
  send_event=send_event,
110
+ headers=headers,
103
111
  )
104
112
 
105
113
 
@@ -353,7 +361,7 @@ async def _thread_command(request: Request) -> Response:
353
361
  status_code=400,
354
362
  )
355
363
 
356
- manager = _make_manager(thread_id)
364
+ manager = _make_manager(thread_id, headers=request.headers)
357
365
  try:
358
366
  resp = await manager.handle_command(payload)
359
367
  return _json_response(resp)
@@ -0,0 +1,29 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import TYPE_CHECKING, Any
5
+
6
+ from langgraph_api.api.mcp._protocol import ProtocolError
7
+
8
+ if TYPE_CHECKING:
9
+ from collections.abc import Mapping
10
+
11
+
12
+ @dataclass(frozen=True, slots=True)
13
+ class ToolCall:
14
+ name: str
15
+ arguments: dict[str, Any]
16
+ context: dict[str, Any] | None
17
+
18
+ @classmethod
19
+ def of(cls, params: Mapping[str, Any]) -> ToolCall:
20
+ name = params.get("name")
21
+ arguments = params.get("arguments", {})
22
+ context = params.get("context")
23
+ if not isinstance(name, str) or not name:
24
+ raise ProtocolError(f"Unknown tool: {name}")
25
+ if not isinstance(arguments, dict) or (
26
+ context is not None and not isinstance(context, dict)
27
+ ):
28
+ raise ProtocolError("arguments and context must be objects")
29
+ return cls(name, arguments, context)
@@ -0,0 +1,28 @@
1
+ MAX_ASSISTANTS = 1000
2
+ DEFAULT_PAGE_SIZE = 100
3
+ MAX_PAGE_OFFSET = 2**63 - 1
4
+ MAX_CURSOR_LENGTH = len(str(MAX_PAGE_OFFSET))
5
+
6
+ ERROR_CODE_INVALID_REQUEST = -32600
7
+ ERROR_CODE_INVALID_PARAMS = -32602
8
+ ERROR_CODE_METHOD_NOT_FOUND = -32601
9
+ ERROR_CODE_HEADER_MISMATCH = -32020
10
+ ERROR_CODE_UNSUPPORTED_VERSION = -32022
11
+
12
+ LEGACY_PROTOCOL_VERSIONS = frozenset(
13
+ (
14
+ "2024-11-05",
15
+ "2025-03-26",
16
+ "2025-06-18",
17
+ "2025-11-25",
18
+ )
19
+ )
20
+ LATEST_LEGACY_PROTOCOL_VERSION = "2025-11-25"
21
+ PROTOCOL_VERSION = "2026-07-28"
22
+ SUPPORTED_PROTOCOL_VERSIONS = LEGACY_PROTOCOL_VERSIONS | {PROTOCOL_VERSION}
23
+
24
+ PAUSED_TOOL_MESSAGE = (
25
+ "This tool paused to ask for human input, and this client can't answer it."
26
+ )
27
+ RUN_FAILED_MESSAGE = "The tool's run failed."
28
+ INVALID_CURSOR_MESSAGE = "Invalid cursor"