langgraph-api 0.7.103__tar.gz → 0.8.1__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 (298) hide show
  1. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/PKG-INFO +2 -2
  2. langgraph_api-0.8.1/langgraph_api/__init__.py +1 -0
  3. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/runs.py +5 -5
  4. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/threads.py +2 -2
  5. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/config/__init__.py +15 -1
  6. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/config/schemas.py +9 -1
  7. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/threads.py +44 -4
  8. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/http.py +31 -0
  9. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/package.json +1 -1
  10. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/yarn.lock +7 -7
  11. langgraph_api-0.8.1/langgraph_api/lc_security/__init__.py +29 -0
  12. langgraph_api-0.8.1/langgraph_api/lc_security/exceptions.py +9 -0
  13. langgraph_api-0.8.1/langgraph_api/lc_security/policy.py +349 -0
  14. langgraph_api-0.8.1/langgraph_api/lc_security/transport.py +201 -0
  15. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/webhook.py +101 -62
  16. langgraph_api-0.8.1/langgraph_grpc_common/proto/core_api_pb2.py +272 -0
  17. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/core_api_pb2.pyi +16 -2
  18. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/pyproject.toml +1 -1
  19. langgraph_api-0.7.103/langgraph_api/__init__.py +0 -1
  20. langgraph_api-0.7.103/langgraph_grpc_common/proto/core_api_pb2.py +0 -272
  21. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/.gitignore +0 -0
  22. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/LICENSE +0 -0
  23. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/Makefile +0 -0
  24. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/README.md +0 -0
  25. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/.gitignore +0 -0
  26. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/Makefile +0 -0
  27. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/README.md +0 -0
  28. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/assistant.ts +0 -0
  29. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  30. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  31. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  32. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  33. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  34. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/log-failure.ts +0 -0
  35. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  36. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/stream_write.ts +0 -0
  37. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/thread.ts +0 -0
  38. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  39. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  40. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/types.ts +0 -0
  41. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/wait_write.ts +0 -0
  42. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_dd_report.py +0 -0
  43. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_k6.js +0 -0
  44. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_runner.mjs +0 -0
  45. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_slack_report.py +0 -0
  46. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_urls.mjs +0 -0
  47. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/clean-cli.js +0 -0
  48. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/clean.js +0 -0
  49. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/continuous/README.md +0 -0
  50. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/continuous/pyproject.toml +0 -0
  51. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/continuous/runner.py +0 -0
  52. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/continuous/uv.lock +0 -0
  53. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/graphs.js +0 -0
  54. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/mixed_workload_k6.js +0 -0
  55. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/mixed_workload_runner.mjs +0 -0
  56. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/package.json +0 -0
  57. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/ramp.js +0 -0
  58. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/reporting/dd_reporting.py +0 -0
  59. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/reporting/slack_slowest_runs.py +0 -0
  60. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/reporting/slack_summary.py +0 -0
  61. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/run_local.sh +0 -0
  62. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/staircase.py +0 -0
  63. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/staircase_step_k6.js +0 -0
  64. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/tsconfig.json +0 -0
  65. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/update-revision.js +0 -0
  66. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/weather.js +0 -0
  67. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/constraints.txt +0 -0
  68. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/custom_store.sql +0 -0
  69. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/forbidden.txt +0 -0
  70. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/hatch_build.py +0 -0
  71. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/healthcheck.py +0 -0
  72. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  73. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/_checkpointer/__init__.py +0 -0
  74. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/_checkpointer/_adapter.py +0 -0
  75. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/_checkpointer/protocol.py +0 -0
  76. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/_factory_utils.py +0 -0
  77. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/__init__.py +0 -0
  78. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/a2a.py +0 -0
  79. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/assistants.py +0 -0
  80. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/__init__.py +0 -0
  81. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_constants.py +0 -0
  82. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_handlers.py +0 -0
  83. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_models.py +0 -0
  84. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_routes.py +0 -0
  85. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  86. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/meta.py +0 -0
  87. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/openapi.py +0 -0
  88. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/profile.py +0 -0
  89. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/store.py +0 -0
  90. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/ui.py +0 -0
  91. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/asgi_transport.py +0 -0
  92. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/asyncio.py +0 -0
  93. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/__init__.py +0 -0
  94. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/custom.py +0 -0
  95. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/errors.py +0 -0
  96. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/langsmith/__init__.py +0 -0
  97. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/langsmith/backend.py +0 -0
  98. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/langsmith/client.py +0 -0
  99. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/middleware.py +0 -0
  100. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/noop.py +0 -0
  101. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/studio_user.py +0 -0
  102. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/cache.py +0 -0
  103. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/cli.py +0 -0
  104. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/command.py +0 -0
  105. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/config/_parse.py +0 -0
  106. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/cron_scheduler.py +0 -0
  107. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/__init__.py +0 -0
  108. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/aes_json.py +0 -0
  109. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/context.py +0 -0
  110. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/custom.py +0 -0
  111. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/middleware.py +0 -0
  112. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/shared.py +0 -0
  113. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/errors.py +0 -0
  114. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/executor_entrypoint.py +0 -0
  115. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/feature_flags.py +0 -0
  116. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/graph.py +0 -0
  117. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/__init__.py +0 -0
  118. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/client.py +0 -0
  119. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  120. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/__init__.py +0 -0
  121. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/assistants.py +0 -0
  122. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/cache.py +0 -0
  123. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/crons.py +0 -0
  124. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/runs.py +0 -0
  125. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/server.py +0 -0
  126. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/servicers/__init__.py +0 -0
  127. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  128. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/servicers/encryption.py +0 -0
  129. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/http_metrics.py +0 -0
  130. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/http_metrics_utils.py +0 -0
  131. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/.gitignore +0 -0
  132. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/.prettierrc +0 -0
  133. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/__init__.py +0 -0
  134. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/base.py +0 -0
  135. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/build.mts +0 -0
  136. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/client.http.mts +0 -0
  137. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/client.mts +0 -0
  138. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/errors.py +0 -0
  139. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/global.d.ts +0 -0
  140. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/remote.py +0 -0
  141. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/schema.py +0 -0
  142. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/graph.mts +0 -0
  143. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/load.hooks.mjs +0 -0
  144. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/preload.mjs +0 -0
  145. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/utils/files.mts +0 -0
  146. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/utils/importMap.mts +0 -0
  147. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  148. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/utils/serde.mts +0 -0
  149. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/sse.py +0 -0
  150. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/traceblock.mts +0 -0
  151. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/tsconfig.json +0 -0
  152. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/ui.py +0 -0
  153. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/logging.py +0 -0
  154. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/metadata.py +0 -0
  155. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/metrics_datadog.py +0 -0
  156. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/__init__.py +0 -0
  157. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/ensure_store.py +0 -0
  158. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/http_logger.py +0 -0
  159. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/private_network.py +0 -0
  160. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/request_id.py +0 -0
  161. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/models/__init__.py +0 -0
  162. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/models/run.py +0 -0
  163. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/otel_context.py +0 -0
  164. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/patch.py +0 -0
  165. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/queue_entrypoint.py +0 -0
  166. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/route.py +0 -0
  167. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/schema.py +0 -0
  168. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/self_hosted_logs.py +0 -0
  169. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/self_hosted_metrics.py +0 -0
  170. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/serde.py +0 -0
  171. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/server.py +0 -0
  172. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/sse.py +0 -0
  173. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/state.py +0 -0
  174. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/store.py +0 -0
  175. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/stream.py +0 -0
  176. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/timing/__init__.py +0 -0
  177. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/timing/profiler.py +0 -0
  178. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/timing/timer.py +0 -0
  179. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/traceblock.py +0 -0
  180. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/tunneling/cloudflare.py +0 -0
  181. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/__init__.py +0 -0
  182. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/cache.py +0 -0
  183. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/config.py +0 -0
  184. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/errors.py +0 -0
  185. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/extract.py +0 -0
  186. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/future.py +0 -0
  187. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/headers.py +0 -0
  188. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/network.py +0 -0
  189. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/retriable_client.py +0 -0
  190. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/stream_codec.py +0 -0
  191. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/uuids.py +0 -0
  192. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/validation.py +0 -0
  193. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/worker.py +0 -0
  194. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/__init__.py +0 -0
  195. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/checkpointer.py +0 -0
  196. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/__init__.py +0 -0
  197. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/_compat.py +0 -0
  198. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/channel.py +0 -0
  199. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  200. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/config.py +0 -0
  201. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/durability.py +0 -0
  202. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/exception.py +0 -0
  203. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/graph.py +0 -0
  204. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/interrupt.py +0 -0
  205. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/messages.py +0 -0
  206. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/orchestrator_response.py +0 -0
  207. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/runopts.py +0 -0
  208. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/stream_mode.py +0 -0
  209. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/struct.py +0 -0
  210. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/task.py +0 -0
  211. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/value.py +0 -0
  212. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/__init__.py +0 -0
  213. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  214. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  215. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  216. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  217. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  218. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  219. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  220. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  221. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  222. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  223. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_api_pb2.py +0 -0
  224. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_api_pb2.pyi +0 -0
  225. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_api_pb2_grpc.py +0 -0
  226. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_api_pb2_grpc.pyi +0 -0
  227. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  228. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  229. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  230. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  231. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  232. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  233. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  234. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  235. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  236. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  237. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  238. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  239. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  240. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  241. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  242. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  243. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  244. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  245. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  246. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  247. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  248. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  249. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  250. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  251. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  252. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  253. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  254. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  255. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.py +0 -0
  256. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.pyi +0 -0
  257. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.py +0 -0
  258. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.pyi +0 -0
  259. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  260. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  261. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  262. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  263. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  264. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  265. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  266. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  267. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  268. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  269. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  270. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  271. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  272. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  273. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  274. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  275. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/executor_api_pb2.py +0 -0
  276. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/executor_api_pb2.pyi +0 -0
  277. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/executor_api_pb2_grpc.py +0 -0
  278. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/executor_api_pb2_grpc.pyi +0 -0
  279. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/sanitize.py +0 -0
  280. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/serde.py +0 -0
  281. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_license/__init__.py +0 -0
  282. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_license/validation.py +0 -0
  283. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/__init__.py +0 -0
  284. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/checkpoint.py +0 -0
  285. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/database.py +0 -0
  286. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/lifespan.py +0 -0
  287. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/metrics.py +0 -0
  288. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/ops.py +0 -0
  289. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/queue.py +0 -0
  290. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/retry.py +0 -0
  291. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/routes.py +0 -0
  292. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/store.py +0 -0
  293. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/logging.json +0 -0
  294. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/openapi.json +0 -0
  295. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/scripts/build_wheel.py +0 -0
  296. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/scripts/create_license.py +0 -0
  297. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/scripts/run_a2a_tck.py +0 -0
  298. {langgraph_api-0.7.103 → langgraph_api-0.8.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.7.103
3
+ Version: 0.8.1
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
@@ -15,7 +15,7 @@ Requires-Dist: httpx>=0.25.0
15
15
  Requires-Dist: jsonschema-rs<0.45,>=0.20.0
16
16
  Requires-Dist: langchain-core>=0.3.64
17
17
  Requires-Dist: langgraph-checkpoint<5,>=3.0.1
18
- Requires-Dist: langgraph-runtime-inmem<0.28.0,>=0.27.0
18
+ Requires-Dist: langgraph-runtime-inmem<0.29.0,>=0.28.0
19
19
  Requires-Dist: langgraph-sdk>=0.3.5
20
20
  Requires-Dist: langgraph<2,>=0.4.10
21
21
  Requires-Dist: langsmith[otel]>=0.6.3
@@ -0,0 +1 @@
1
+ __version__ = "0.8.1"
@@ -1,7 +1,7 @@
1
1
  import asyncio
2
2
  from collections.abc import AsyncIterator, Awaitable, Callable
3
3
  from typing import Any, Literal, cast
4
- from uuid import UUID, uuid4
4
+ from uuid import UUID
5
5
 
6
6
  import orjson
7
7
  import structlog
@@ -374,7 +374,7 @@ async def stream_run_stateless(
374
374
  payload["if_not_exists"] = "create"
375
375
  on_disconnect = payload.get("on_disconnect", "continue")
376
376
  run_id = uuid7()
377
- thread_id = uuid4()
377
+ thread_id = uuid7()
378
378
 
379
379
  sub = await Runs.Stream.subscribe(run_id, thread_id)
380
380
  try:
@@ -468,7 +468,7 @@ async def wait_run_stateless(request: ApiRequest):
468
468
  payload["if_not_exists"] = "create"
469
469
  on_disconnect = payload.get("on_disconnect", "continue")
470
470
  run_id = uuid7()
471
- thread_id = uuid4()
471
+ thread_id = uuid7()
472
472
 
473
473
  sub = await Runs.Stream.subscribe(run_id, thread_id)
474
474
  try:
@@ -533,7 +533,7 @@ async def list_runs(
533
533
 
534
534
  async with connect() as conn:
535
535
  thread, runs = await asyncio.gather(
536
- Threads.get(conn, thread_id),
536
+ Threads.get(conn, thread_id, read_mask_paths=[]),
537
537
  Runs.search(
538
538
  conn,
539
539
  thread_id,
@@ -562,7 +562,7 @@ async def get_run(request: ApiRequest):
562
562
 
563
563
  async with connect() as conn:
564
564
  thread, run = await asyncio.gather(
565
- Threads.get(conn, thread_id),
565
+ Threads.get(conn, thread_id, read_mask_paths=[]),
566
566
  Runs.get(
567
567
  conn,
568
568
  run_id,
@@ -1,5 +1,4 @@
1
1
  from typing import get_args
2
- from uuid import uuid4
3
2
 
4
3
  from starlette.exceptions import HTTPException
5
4
  from starlette.responses import Response
@@ -26,6 +25,7 @@ from langgraph_api.state import state_snapshot_to_thread_state
26
25
  from langgraph_api.utils import (
27
26
  fetchone,
28
27
  get_pagination_headers,
28
+ uuid7,
29
29
  validate_select_columns,
30
30
  validate_stream_id,
31
31
  validate_uuid,
@@ -69,7 +69,7 @@ async def create_thread(
69
69
  ["metadata"],
70
70
  )
71
71
 
72
- thread_id = thread_id or str(uuid4())
72
+ thread_id = thread_id or str(uuid7())
73
73
  supersteps = payload.get("supersteps")
74
74
 
75
75
  if IS_POSTGRES_OR_GRPC_BACKEND and not supersteps:
@@ -45,6 +45,17 @@ DATABASE_URI = env("DATABASE_URI", cast=str, default=getenv("POSTGRES_URI", unde
45
45
  # Not in public docs: infrastructure, set by platform
46
46
  MIGRATIONS_PATH = env("MIGRATIONS_PATH", cast=str, default="/storage/migrations")
47
47
  POSTGRES_POOL_MAX_SIZE = env("LANGGRAPH_POSTGRES_POOL_MAX_SIZE", cast=int, default=150)
48
+
49
+ # Checkpoint ingestion batch controls
50
+ # Go defaults (core/config/config.go): CHECKPOINT_MAX_BATCH_SIZE=1000, CHECKPOINT_BATCH_DELAY=0.005 (5ms)
51
+ # CHECKPOINT_BATCH_DELAY uses float seconds to match Go's time.Duration env parsing convention.
52
+ # storage_postgres/Makefile sets these to the Go defaults for CI/local dev.
53
+ # TODO(braa): flip these to match Go defaults once validated in production (LSD-1404)
54
+ CHECKPOINT_MAX_BATCH_SIZE: int | None = env(
55
+ "CHECKPOINT_MAX_BATCH_SIZE", cast=int, default=None
56
+ )
57
+ CHECKPOINT_BATCH_DELAY: float = env("CHECKPOINT_BATCH_DELAY", cast=float, default=0.0)
58
+
48
59
  RESUMABLE_STREAM_TTL_SECONDS = env(
49
60
  "RESUMABLE_STREAM_TTL_SECONDS",
50
61
  cast=int,
@@ -351,7 +362,8 @@ FF_CRONS_ENABLED = env("FF_CRONS_ENABLED", cast=bool, default=True)
351
362
  FF_LOG_DROPPED_EVENTS = env("FF_LOG_DROPPED_EVENTS", cast=bool, default=False)
352
363
  FF_LOG_QUERY_AND_PARAMS = env("FF_LOG_QUERY_AND_PARAMS", cast=bool, default=False)
353
364
  # Not in public docs: internal feature flag
354
- FF_USE_REDIS_QUEUE = env("FF_USE_REDIS_QUEUE", cast=bool, default=False)
365
+ FF_USE_REDIS_QUEUE = env("FF_USE_REDIS_QUEUE", cast=bool, default=True)
366
+
355
367
 
356
368
  # Internal flag intended for testing only
357
369
  CRON_SCHEDULER_SLEEP_TIME = env("CRON_SCHEDULER_SLEEP_TIME", cast=int, default=5)
@@ -578,6 +590,8 @@ __all__ = [
578
590
  "BG_JOB_SHUTDOWN_GRACE_PERIOD_SECS",
579
591
  "BG_JOB_TIMEOUT_SECS",
580
592
  "CHECKPOINTER_CONFIG",
593
+ "CHECKPOINT_BATCH_DELAY",
594
+ "CHECKPOINT_MAX_BATCH_SIZE",
581
595
  "CORS_ALLOW_ORIGINS",
582
596
  "CORS_CONFIG",
583
597
  "CRON_SCHEDULER_SLEEP_TIME",
@@ -386,7 +386,13 @@ class WebhookUrlPolicy(TypedDict, total=False):
386
386
  max_url_length: int
387
387
  """Maximum permitted URL length in characters; longer inputs are rejected early."""
388
388
  disable_loopback: bool
389
- """Disallow relative URLs (internal loopback calls) when true."""
389
+ """Disallow relative URLs (internal loopback calls) and localhost hostnames when true."""
390
+ disable_private_ips: bool
391
+ """Block RFC 1918 / CGN private IP ranges as webhook targets when true.
392
+
393
+ Defaults to false (private IPs allowed). Set to true to block private
394
+ IP ranges for stricter SSRF protection.
395
+ """
390
396
 
391
397
 
392
398
  # Matches things like "${{ env.LG_WEBHOOK_FOO_BAR }}"
@@ -421,6 +427,8 @@ def _validate_url_policy(
421
427
  policy["max_url_length"] = 2048
422
428
  if "disable_loopback" not in policy:
423
429
  policy["disable_loopback"] = False
430
+ if "disable_private_ips" not in policy:
431
+ policy["disable_private_ips"] = False
424
432
  return policy
425
433
 
426
434
 
@@ -64,6 +64,12 @@ if TYPE_CHECKING:
64
64
  logger = structlog.stdlib.get_logger(__name__)
65
65
 
66
66
 
67
+ # Read-mask preset for Threads.get callers that need metadata/config but not
68
+ # the large "values" column. Used by state get/update/bulk/history which
69
+ # only need graph_id (from metadata) and the thread config.
70
+ THREAD_METADATA_READ_MASK_PATHS: list[str] = ["metadata", "config"]
71
+
72
+
67
73
  THREAD_STATUS_TO_PB = {
68
74
  "idle": enum_thread_status.idle,
69
75
  "busy": enum_thread_status.busy,
@@ -471,6 +477,7 @@ class Threads(Authenticated):
471
477
  ctx: Auth.types.BaseAuthContext | None = None,
472
478
  filters: Auth.types.FilterType | list[pb.AuthFilter] | None = None,
473
479
  include_ttl: bool = False,
480
+ read_mask_paths: list[str] | None = None,
474
481
  ) -> AsyncIterator[Thread]:
475
482
  """Get a thread by ID.
476
483
 
@@ -482,6 +489,11 @@ class Threads(Authenticated):
482
489
  Accepts either raw dict filters (FilterType) or pre-processed
483
490
  proto filters (list[pb.AuthFilter]).
484
491
  include_ttl: When True, include TTL information in the response.
492
+ read_mask_paths: Optional list of field names to fetch from the DB.
493
+ None (default) fetches all columns. When set, only those columns
494
+ (plus always-included identity/status columns) are queried.
495
+ Use ["metadata", "config"] to skip the large "values" column, or
496
+ [] for an auth/existence check that discards the thread body.
485
497
  """
486
498
  auth_filters = await Threads.handle_event(
487
499
  ctx, "read", {"thread_id": str(thread_id)}
@@ -496,10 +508,16 @@ class Threads(Authenticated):
496
508
  # Raw dict format, convert to proto
497
509
  auth_filters = (auth_filters or []) + _filters_to_proto(filters)
498
510
 
511
+ read_mask = (
512
+ field_mask_pb2.FieldMask(paths=read_mask_paths)
513
+ if read_mask_paths is not None
514
+ else None
515
+ )
499
516
  request = pb.GetThreadRequest(
500
517
  thread_id=pb.UUID(value=_normalize_uuid(thread_id)),
501
518
  filters=auth_filters,
502
519
  include_ttl=include_ttl if include_ttl else None,
520
+ read_mask=read_mask,
503
521
  )
504
522
  client = await get_shared_client()
505
523
  response = await client.threads.Get(request)
@@ -974,7 +992,12 @@ class Threads(Authenticated):
974
992
 
975
993
  async with conn.pipeline():
976
994
  thread, checkpoint_iter, graph_id = await asyncio.gather(
977
- Threads.get(conn, thread_id, ctx=ctx),
995
+ Threads.get(
996
+ conn,
997
+ thread_id,
998
+ ctx=ctx,
999
+ read_mask_paths=THREAD_METADATA_READ_MASK_PATHS,
1000
+ ),
978
1001
  checkpointer.aget_iter(config),
979
1002
  Threads.get_graph_id(thread_id),
980
1003
  )
@@ -1037,7 +1060,13 @@ class Threads(Authenticated):
1037
1060
 
1038
1061
  async with conn.pipeline():
1039
1062
  thread, checkpoint_iter, graph_id, run_count = await asyncio.gather(
1040
- Threads.get(conn, thread_id, ctx=ctx, filters=filters),
1063
+ Threads.get(
1064
+ conn,
1065
+ thread_id,
1066
+ ctx=ctx,
1067
+ filters=filters,
1068
+ read_mask_paths=THREAD_METADATA_READ_MASK_PATHS,
1069
+ ),
1041
1070
  checkpointer.aget_iter(config),
1042
1071
  Threads.get_graph_id(thread_id),
1043
1072
  Runs.count(thread_id=thread_id, statuses=["pending", "running"]),
@@ -1130,7 +1159,13 @@ class Threads(Authenticated):
1130
1159
 
1131
1160
  async with conn.pipeline():
1132
1161
  thread, graph_id = await asyncio.gather(
1133
- Threads.get(conn, thread_id, ctx=ctx, filters=filters),
1162
+ Threads.get(
1163
+ conn,
1164
+ thread_id,
1165
+ ctx=ctx,
1166
+ filters=filters,
1167
+ read_mask_paths=THREAD_METADATA_READ_MASK_PATHS,
1168
+ ),
1134
1169
  Threads.get_graph_id(config["configurable"]["thread_id"]),
1135
1170
  )
1136
1171
  thread = await fetchone(thread)
@@ -1218,7 +1253,12 @@ class Threads(Authenticated):
1218
1253
  """Get the history of a thread."""
1219
1254
  async with conn.pipeline():
1220
1255
  thread, graph_id = await asyncio.gather(
1221
- Threads.get(conn, config["configurable"]["thread_id"], ctx=ctx),
1256
+ Threads.get(
1257
+ conn,
1258
+ config["configurable"]["thread_id"],
1259
+ ctx=ctx,
1260
+ read_mask_paths=THREAD_METADATA_READ_MASK_PATHS,
1261
+ ),
1222
1262
  Threads.get_graph_id(config["configurable"]["thread_id"]),
1223
1263
  )
1224
1264
  thread = await fetchone(thread)
@@ -123,6 +123,37 @@ def get_loopback_client() -> JsonHttpClient:
123
123
  return _loopback_client
124
124
 
125
125
 
126
+ _webhook_http_client: JsonHttpClient | None = None
127
+
128
+
129
+ async def ensure_webhook_http_client() -> JsonHttpClient:
130
+ """Return (or create) an SSRF-safe HTTP client for webhook dispatch."""
131
+ global _webhook_http_client
132
+ if _webhook_http_client is not None:
133
+ return _webhook_http_client
134
+
135
+ from langgraph_api.lc_security import ssrf_safe_async_client # noqa: PLC0415
136
+ from langgraph_api.webhook import _get_webhook_config # noqa: PLC0415
137
+
138
+ inner = ssrf_safe_async_client(
139
+ policy=_get_webhook_config().base_ssrf_policy,
140
+ retries=2,
141
+ limits=httpx.Limits(max_keepalive_connections=10, keepalive_expiry=60.0),
142
+ follow_redirects=True,
143
+ max_redirects=5,
144
+ )
145
+ _webhook_http_client = JsonHttpClient(client=inner)
146
+ return _webhook_http_client
147
+
148
+
149
+ async def stop_webhook_http_client() -> None:
150
+ global _webhook_http_client
151
+ if _webhook_http_client is None:
152
+ return
153
+ await _webhook_http_client.client.aclose()
154
+ _webhook_http_client = None
155
+
156
+
126
157
  def is_retriable_error(exception: BaseException) -> bool:
127
158
  # httpx error hierarchy: https://www.python-httpx.org/exceptions/
128
159
  # Retry all timeout related errors
@@ -19,7 +19,7 @@
19
19
  "dedent": "^1.7.2",
20
20
  "esbuild": "^0.27.4",
21
21
  "exit-hook": "^5.1.0",
22
- "hono": "^4.12.12",
22
+ "hono": "^4.12.14",
23
23
  "p-queue": "^9.0.1",
24
24
  "p-retry": "^7.1.1",
25
25
  "tsx": "^4.21.0",
@@ -1316,10 +1316,10 @@ graceful-fs@^4.2.4:
1316
1316
  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
1317
1317
  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
1318
1318
 
1319
- hono@^4.12.12, hono@^4.5.4:
1320
- version "4.12.12"
1321
- resolved "https://registry.yarnpkg.com/hono/-/hono-4.12.12.tgz#1f14b0ffb47c386ff50d457d66e706d9c9a7f09c"
1322
- integrity sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q==
1319
+ hono@^4.12.14, hono@^4.5.4:
1320
+ version "4.12.14"
1321
+ resolved "https://registry.yarnpkg.com/hono/-/hono-4.12.14.tgz#4777c9512b7c84138e4f09e61e3d2fa305eb1414"
1322
+ integrity sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w==
1323
1323
 
1324
1324
  icss-utils@^5.0.0, icss-utils@^5.1.0:
1325
1325
  version "5.1.0"
@@ -1393,9 +1393,9 @@ kuler@^2.0.0:
1393
1393
  integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
1394
1394
 
1395
1395
  "langsmith@>=0.3.33 <1.0.0", langsmith@>=0.4.6, "langsmith@>=0.5.0 <1.0.0":
1396
- version "0.5.18"
1397
- resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.5.18.tgz#c691ad23614f0b46eaf07d982e0ac988e1f43880"
1398
- integrity sha512-3zuZUWffTHQ+73EAwnodADtf534VNEZUpXr9jC12qyG8/IQuJET7PRsCpTb9wX2lmBspakwLUpqpj3tNm/0bVA==
1396
+ version "0.5.20"
1397
+ resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.5.20.tgz#4021847d2ccd5a86c5eb96060f9bb5f19f80eca5"
1398
+ integrity sha512-ULhLM8RswvQDXufLtNtvclHrWCBx8Cb5UPI6lAZC+8Dq59iHsVPz/3Ac9khWNm1VIvChRsuykixD/WrmzuuA3Q==
1399
1399
  dependencies:
1400
1400
  p-queue "6.6.2"
1401
1401
  uuid "10.0.0"
@@ -0,0 +1,29 @@
1
+ """lc_security — SSRF protection and security utilities.
2
+
3
+ Vendored from langchainplus/lc_security. When lc-security is published
4
+ to PyPI, delete this package and add the pip dependency instead.
5
+ """
6
+
7
+ from langgraph_api.lc_security.exceptions import SSRFBlockedError
8
+ from langgraph_api.lc_security.policy import (
9
+ SSRFPolicy,
10
+ validate_hostname,
11
+ validate_resolved_ip,
12
+ validate_url,
13
+ validate_url_sync,
14
+ )
15
+ from langgraph_api.lc_security.transport import (
16
+ SSRFSafeTransport,
17
+ ssrf_safe_async_client,
18
+ )
19
+
20
+ __all__ = [
21
+ "SSRFBlockedError",
22
+ "SSRFPolicy",
23
+ "SSRFSafeTransport",
24
+ "ssrf_safe_async_client",
25
+ "validate_hostname",
26
+ "validate_resolved_ip",
27
+ "validate_url",
28
+ "validate_url_sync",
29
+ ]
@@ -0,0 +1,9 @@
1
+ """SSRF protection exceptions."""
2
+
3
+
4
+ class SSRFBlockedError(Exception):
5
+ """Raised when a request is blocked by SSRF protection policy."""
6
+
7
+ def __init__(self, reason: str) -> None:
8
+ self.reason = reason
9
+ super().__init__(f"SSRF blocked: {reason}")