langgraph-api 0.12.0.dev5__tar.gz → 0.12.0.dev7__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 (288) hide show
  1. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/PKG-INFO +4 -4
  2. langgraph_api-0.12.0.dev7/langgraph_api/__init__.py +1 -0
  3. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/service.py +89 -113
  4. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/package.json +5 -5
  5. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/yarn.lock +173 -341
  6. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/pyproject.toml +3 -3
  7. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/uv.lock +60 -60
  8. langgraph_api-0.12.0.dev5/langgraph_api/__init__.py +0 -1
  9. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/.gitignore +0 -0
  10. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/LICENSE +0 -0
  11. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/Makefile +0 -0
  12. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/README.md +0 -0
  13. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/.gitignore +0 -0
  14. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/Makefile +0 -0
  15. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/README.md +0 -0
  16. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/assistant.ts +0 -0
  17. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  18. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  19. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  20. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  21. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  22. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/log-failure.ts +0 -0
  23. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  24. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/stream_write.ts +0 -0
  25. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/thread.ts +0 -0
  26. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  27. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  28. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/types.ts +0 -0
  29. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/wait_write.ts +0 -0
  30. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/capacity_dd_report.py +0 -0
  31. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/capacity_k6.js +0 -0
  32. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/capacity_runner.mjs +0 -0
  33. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/capacity_slack_report.py +0 -0
  34. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/capacity_urls.mjs +0 -0
  35. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/clean-cli.js +0 -0
  36. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/clean.js +0 -0
  37. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/continuous/README.md +0 -0
  38. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/continuous/pyproject.toml +0 -0
  39. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/continuous/runner.py +0 -0
  40. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/continuous/uv.lock +0 -0
  41. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/graphs.js +0 -0
  42. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/mixed_workload_k6.js +0 -0
  43. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/mixed_workload_runner.mjs +0 -0
  44. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/package.json +0 -0
  45. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/ramp.js +0 -0
  46. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/reporting/dd_reporting.py +0 -0
  47. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/reporting/slack_slowest_runs.py +0 -0
  48. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/reporting/slack_summary.py +0 -0
  49. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/run_local.sh +0 -0
  50. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/staircase.py +0 -0
  51. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/staircase_step_k6.js +0 -0
  52. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/tsconfig.json +0 -0
  53. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/update-revision.js +0 -0
  54. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/benchmark/weather.js +0 -0
  55. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/constraints.txt +0 -0
  56. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/custom_store.sql +0 -0
  57. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/forbidden.txt +0 -0
  58. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/hatch_build.py +0 -0
  59. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/healthcheck.py +0 -0
  60. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  61. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/_checkpointer/__init__.py +0 -0
  62. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/_checkpointer/_adapter.py +0 -0
  63. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/_checkpointer/protocol.py +0 -0
  64. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/_factory_utils.py +0 -0
  65. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/__init__.py +0 -0
  66. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/a2a.py +0 -0
  67. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/assistants.py +0 -0
  68. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/event_streaming.py +0 -0
  69. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/__init__.py +0 -0
  70. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_constants.py +0 -0
  71. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_handlers.py +0 -0
  72. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_models.py +0 -0
  73. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_routes.py +0 -0
  74. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  75. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/meta.py +0 -0
  76. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/openapi.py +0 -0
  77. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/profile.py +0 -0
  78. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/runs.py +0 -0
  79. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/store.py +0 -0
  80. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/threads.py +0 -0
  81. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/api/ui.py +0 -0
  82. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/asgi_transport.py +0 -0
  83. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/asyncio.py +0 -0
  84. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/__init__.py +0 -0
  85. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/custom.py +0 -0
  86. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/errors.py +0 -0
  87. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/langsmith/__init__.py +0 -0
  88. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/langsmith/backend.py +0 -0
  89. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/langsmith/client.py +0 -0
  90. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/middleware.py +0 -0
  91. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/noop.py +0 -0
  92. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/studio_user.py +0 -0
  93. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/cache.py +0 -0
  94. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/cli.py +0 -0
  95. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/command.py +0 -0
  96. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/config/__init__.py +0 -0
  97. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/config/_parse.py +0 -0
  98. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/config/schemas.py +0 -0
  99. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/cron_scheduler.py +0 -0
  100. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/__init__.py +0 -0
  101. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/aes_json.py +0 -0
  102. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/context.py +0 -0
  103. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/custom.py +0 -0
  104. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/middleware.py +0 -0
  105. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/shared.py +0 -0
  106. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/errors.py +0 -0
  107. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/__init__.py +0 -0
  108. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/capabilities.py +0 -0
  109. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/constants.py +0 -0
  110. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  111. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/namespace.py +0 -0
  112. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/session.py +0 -0
  113. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/state_normalizers.py +0 -0
  114. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/types.py +0 -0
  115. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/feature_flags.py +0 -0
  116. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/graph.py +0 -0
  117. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/__init__.py +0 -0
  118. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/client.py +0 -0
  119. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  120. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/__init__.py +0 -0
  121. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/assistants.py +0 -0
  122. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/cache.py +0 -0
  123. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/crons.py +0 -0
  124. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/runs.py +0 -0
  125. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/threads.py +0 -0
  126. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/server.py +0 -0
  127. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/servicers/__init__.py +0 -0
  128. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  129. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/servicers/encryption.py +0 -0
  130. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/http.py +0 -0
  131. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/http_metrics.py +0 -0
  132. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/http_metrics_utils.py +0 -0
  133. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/.gitignore +0 -0
  134. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/.prettierrc +0 -0
  135. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/__init__.py +0 -0
  136. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/base.py +0 -0
  137. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/build.mts +0 -0
  138. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/client.http.mts +0 -0
  139. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/client.mts +0 -0
  140. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/errors.py +0 -0
  141. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/global.d.ts +0 -0
  142. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/remote.py +0 -0
  143. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/schema.py +0 -0
  144. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/graph.mts +0 -0
  145. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/load.hooks.mjs +0 -0
  146. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/preload.mjs +0 -0
  147. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  148. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/files.mts +0 -0
  149. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/importMap.mts +0 -0
  150. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  151. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/serde.mts +0 -0
  152. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/sse.py +0 -0
  153. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/traceblock.mts +0 -0
  154. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/tsconfig.json +0 -0
  155. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/js/ui.py +0 -0
  156. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/lc_security/__init__.py +0 -0
  157. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/lc_security/exceptions.py +0 -0
  158. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/lc_security/policy.py +0 -0
  159. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/lc_security/transport.py +0 -0
  160. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/logging.py +0 -0
  161. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/metadata.py +0 -0
  162. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/metrics_collector.py +0 -0
  163. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/metrics_otlp.py +0 -0
  164. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/__init__.py +0 -0
  165. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/ensure_store.py +0 -0
  166. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/http_logger.py +0 -0
  167. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/private_network.py +0 -0
  168. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/request_id.py +0 -0
  169. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/models/__init__.py +0 -0
  170. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/models/run.py +0 -0
  171. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/otel_context.py +0 -0
  172. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/patch.py +0 -0
  173. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/queue_entrypoint.py +0 -0
  174. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/release_tags.py +0 -0
  175. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/route.py +0 -0
  176. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/schema.py +0 -0
  177. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/self_hosted_logs.py +0 -0
  178. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/self_hosted_metrics.py +0 -0
  179. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/serde.py +0 -0
  180. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/server.py +0 -0
  181. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/sse.py +0 -0
  182. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/state.py +0 -0
  183. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/store.py +0 -0
  184. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/stream.py +0 -0
  185. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/stream_v2.py +0 -0
  186. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/timing/__init__.py +0 -0
  187. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/timing/profiler.py +0 -0
  188. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/timing/timer.py +0 -0
  189. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/traceblock.py +0 -0
  190. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/tunneling/cloudflare.py +0 -0
  191. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/__init__.py +0 -0
  192. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/cache.py +0 -0
  193. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/config.py +0 -0
  194. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/errors.py +0 -0
  195. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/extract.py +0 -0
  196. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/future.py +0 -0
  197. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/headers.py +0 -0
  198. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/network.py +0 -0
  199. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/retriable_client.py +0 -0
  200. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/stream_codec.py +0 -0
  201. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/uuids.py +0 -0
  202. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/validation.py +0 -0
  203. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/webhook.py +0 -0
  204. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_api/worker.py +0 -0
  205. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/__init__.py +0 -0
  206. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/checkpointer.py +0 -0
  207. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/__init__.py +0 -0
  208. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/_compat.py +0 -0
  209. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  210. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/config.py +0 -0
  211. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/durability.py +0 -0
  212. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/struct.py +0 -0
  213. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/value.py +0 -0
  214. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/__init__.py +0 -0
  215. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  216. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  217. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  218. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  219. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  220. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  221. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  222. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  223. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  224. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  225. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  226. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  227. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  228. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  229. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  230. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  231. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  232. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  233. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  234. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  235. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  236. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  237. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  238. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  239. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  240. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  241. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  242. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  243. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  244. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  245. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  246. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  247. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  248. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  249. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  250. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  251. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  252. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  253. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  254. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  255. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  256. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  257. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  258. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  259. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  260. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  261. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  262. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  263. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  264. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  265. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  266. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  267. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  268. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  269. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  270. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  271. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/serde.py +0 -0
  272. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_license/__init__.py +0 -0
  273. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_license/validation.py +0 -0
  274. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/__init__.py +0 -0
  275. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/checkpoint.py +0 -0
  276. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/database.py +0 -0
  277. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/lifespan.py +0 -0
  278. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/metrics.py +0 -0
  279. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/ops.py +0 -0
  280. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/queue.py +0 -0
  281. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/retry.py +0 -0
  282. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/routes.py +0 -0
  283. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/langgraph_runtime/store.py +0 -0
  284. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/logging.json +0 -0
  285. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/openapi.json +0 -0
  286. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/scripts/build_wheel.py +0 -0
  287. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/scripts/create_license.py +0 -0
  288. {langgraph_api-0.12.0.dev5 → langgraph_api-0.12.0.dev7}/scripts/run_a2a_tck.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.12.0.dev5
3
+ Version: 0.12.0.dev7
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
@@ -14,7 +14,7 @@ Requires-Dist: httptools>=0.5.0; platform_system != 'Windows'
14
14
  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
- Requires-Dist: langchain-protocol<0.1,>=0.0.16
17
+ Requires-Dist: langchain-protocol<0.1,>=0.0.18
18
18
  Requires-Dist: langgraph-checkpoint<5,>=3.0.1
19
19
  Requires-Dist: langgraph-runtime-inmem<0.32.0.dev0,>=0.31.0.dev0
20
20
  Requires-Dist: langgraph-sdk>=0.3.5
@@ -27,9 +27,9 @@ Requires-Dist: opentelemetry-sdk>=0.0.1
27
27
  Requires-Dist: orjson>=3.9.7
28
28
  Requires-Dist: prometheus-client>=0.0.1
29
29
  Requires-Dist: protobuf<7.0.0,>=6.32.1
30
- Requires-Dist: pyjwt>=2.9.0
30
+ Requires-Dist: pyjwt>=2.13.0
31
31
  Requires-Dist: sse-starlette<3.4.0,>=2.1.3
32
- Requires-Dist: starlette>=1.0.1
32
+ Requires-Dist: starlette>=0.38.6
33
33
  Requires-Dist: structlog<26,>=24.1.0
34
34
  Requires-Dist: tenacity>=8.0.0
35
35
  Requires-Dist: truststore>=0.1
@@ -0,0 +1 @@
1
+ __version__ = "0.12.0.dev7"
@@ -619,17 +619,17 @@ class ThreadRunManager:
619
619
  "Interrupt namespace does not match the pending interrupt.",
620
620
  )
621
621
  continue
622
- # HTTP fallback: the bulk thread-state lookup only walks root
623
- # tasks and surfaces interrupts by id (not namespace), so it
624
- # cannot validate subgraph namespaces. Verify the interrupt
625
- # exists on persisted state and trust the client-claimed
626
- # namespace — the interrupt_id is a UUID, so the existence check
627
- # alone is sufficient. (Without this, every HTTP ``input.respond``
628
- # for a subgraph interrupt would 404.)
622
+ # HTTP fallback: the persisted lookup surfaces interrupts by id
623
+ # only, so trust the client-claimed namespace and validate by
624
+ # existence (the id is a namespace hash, so that's sufficient).
629
625
  if not thread_state_fetched:
630
- thread_state_ids = await self._collect_thread_state_interrupt_ids()
626
+ thread_state_ids = await self._collect_persisted_interrupt_ids()
631
627
  thread_state_fetched = True
632
- if thread_state_ids is None or interrupt_id not in thread_state_ids:
628
+ # Fail open when the lookup is unavailable (``None``): only reject
629
+ # when a definitive id set was read and lacks the target. The
630
+ # checkpointer resume below is authoritative, so a transient lookup
631
+ # failure must not masquerade as a missing interrupt.
632
+ if thread_state_ids is not None and interrupt_id not in thread_state_ids:
633
633
  return self._error(
634
634
  command.get("id"),
635
635
  "no_such_interrupt",
@@ -655,6 +655,13 @@ class ThreadRunManager:
655
655
  # map. ``_create_or_resume_run`` forwards it verbatim as
656
656
  # ``Command(resume=...)``, which resumes all targeted interrupts in
657
657
  # one run.
658
+ #
659
+ # ``update`` / ``goto`` are the optional state mutation and directed
660
+ # jump applied in the same superstep as the resume (HITL "push card
661
+ # into state + resume", or resume-and-redirect flows). They are folded
662
+ # into ``Command(resume, update, goto)`` by ``_create_or_resume_run``,
663
+ # so the resumed run produces a single checkpoint reflecting all of
664
+ # them. Run-level (not per-entry): one resumed run services the batch.
658
665
  resume_input = {interrupt_id: response for interrupt_id, _, response in entries}
659
666
  try:
660
667
  await self._create_or_resume_run(
@@ -662,6 +669,8 @@ class ThreadRunManager:
662
669
  {
663
670
  "assistant_id": assistant_id,
664
671
  "input": resume_input,
672
+ "update": params.get("update"),
673
+ "goto": params.get("goto"),
665
674
  "config": params.get("config"),
666
675
  "metadata": params.get("metadata"),
667
676
  },
@@ -751,7 +760,29 @@ class ThreadRunManager:
751
760
  run_payload: dict[str, Any] = {
752
761
  "assistant_id": assistant_id,
753
762
  "input": None if is_resume else params.get("input"),
754
- "command": {"resume": params["input"]} if is_resume else None,
763
+ # On resume, fold the optional state update / directed jump into the
764
+ # same ``Command`` as the resume value so the resumed run produces a
765
+ # single checkpoint (see ``langgraph_api.command.map_cmd``). Only
766
+ # set on the ``input.respond`` path — ``run.start`` params carry no
767
+ # ``update`` / ``goto``, so ``.get`` returns ``None`` and the keys
768
+ # are omitted.
769
+ "command": (
770
+ {
771
+ "resume": params["input"],
772
+ **(
773
+ {"update": params["update"]}
774
+ if params.get("update") is not None
775
+ else {}
776
+ ),
777
+ **(
778
+ {"goto": params["goto"]}
779
+ if params.get("goto") is not None
780
+ else {}
781
+ ),
782
+ }
783
+ if is_resume
784
+ else None
785
+ ),
755
786
  "config": run_config,
756
787
  "metadata": params.get("metadata"),
757
788
  "checkpoint_id": checkpoint_id,
@@ -832,15 +863,17 @@ class ThreadRunManager:
832
863
  session = EventStreamingSession(
833
864
  run_id=run_id,
834
865
  thread_id=thread_id,
835
- initial_run=run
836
- if _is_record(run)
837
- else {
838
- "run_id": run_id,
839
- "thread_id": thread_id,
840
- "assistant_id": getattr(run, "assistant_id", ""),
841
- "status": getattr(run, "status", "pending"),
842
- "kwargs": getattr(run, "kwargs", {}),
843
- },
866
+ initial_run=(
867
+ run
868
+ if _is_record(run)
869
+ else {
870
+ "run_id": run_id,
871
+ "thread_id": thread_id,
872
+ "assistant_id": getattr(run, "assistant_id", ""),
873
+ "status": getattr(run, "status", "pending"),
874
+ "kwargs": getattr(run, "kwargs", {}),
875
+ }
876
+ ),
844
877
  get_run=self._make_get_run(run_id, thread_id),
845
878
  get_thread_state=self._make_get_thread_state(thread_id),
846
879
  source=None,
@@ -1016,56 +1049,41 @@ class ThreadRunManager:
1016
1049
  async def _lookup_interrupt_in_thread_state(
1017
1050
  self, interrupt_id: str
1018
1051
  ) -> list[str] | None:
1019
- """Existence check for ``interrupt_id`` in persisted thread state.
1020
-
1021
- Used as a fallback for ``input.respond`` on stateless HTTP
1022
- transports: the observer session was just attached and hasn't
1023
- yet processed the source event that would register the
1024
- interrupt in ``session._pending_interrupts``. The thread state
1025
- gRPC call gives the persisted view, which is authoritative once
1026
- the run has finished emitting.
1027
-
1028
- Returns ``[]`` if the interrupt exists, or ``None`` if not.
1029
- Note: the return value is **not** the interrupt's actual
1030
- namespace — this fallback only walks root-level tasks (the
1031
- state shape doesn't reliably surface subgraph interrupts in
1032
- the ``tasks`` list), so subgraph interrupts come back as
1033
- ``[]`` even when their real namespace is e.g. ``["sub:1"]``.
1034
- Callers must not use the return value for namespace comparison;
1035
- treat ``[]`` as "interrupt found, namespace unknown" and trust
1036
- the client-claimed namespace.
1052
+ """Existence check for ``interrupt_id`` against persisted thread state.
1053
+
1054
+ Fallback for ``input.respond`` on stateless HTTP transports, where the
1055
+ fresh session hasn't observed ``input.requested`` yet. Backed by the
1056
+ durable thread-row map (see :meth:`_collect_persisted_interrupt_ids`).
1057
+
1058
+ Returns ``[]`` if the interrupt exists, else ``None``. The ``[]`` is a
1059
+ sentinel, not a namespace — the map carries no namespace, so callers
1060
+ must treat it as "found, namespace unknown" and trust the client claim.
1037
1061
  """
1038
- found = await self._collect_thread_state_interrupt_ids()
1062
+ found = await self._collect_persisted_interrupt_ids()
1039
1063
  if found is None:
1040
1064
  return None
1041
1065
  return [] if interrupt_id in found else None
1042
1066
 
1043
- async def _collect_thread_state_interrupt_ids(self) -> set[str] | None:
1044
- """Fetch persisted thread state once and collect all interrupt ids.
1067
+ async def _collect_persisted_interrupt_ids(self) -> set[str] | None:
1068
+ """Collect interrupt ids from the durable thread-row ``interrupts`` map.
1045
1069
 
1046
- Bulk counterpart to ``_lookup_interrupt_in_thread_state`` for the
1047
- ``input.respond`` batch path: a single ``State.get`` round-trip is
1048
- shared across every entry in the batch instead of one DB call per
1049
- interrupt. Returns the set of interrupt ids present on the thread's
1050
- root tasks, or ``None`` if the state fetch failed (callers treat a
1051
- ``None`` result as "lookup unavailable", not "no interrupts").
1070
+ ``Threads.set_status`` writes ``{task_id: [{id, value}, ...]}`` onto the
1071
+ thread row atomically with the status whenever a run pauses. Reading it
1072
+ is a plain row fetch (same ``connect()`` + ``Threads.get`` path as
1073
+ :meth:`_get_thread_assistant_id`) unlike ``Threads.State.get`` it does
1074
+ not rebuild the graph, so it can't spuriously raise and reject a
1075
+ legitimate resume, and it survives reconnects/redeploys.
1052
1076
 
1053
- Like the single lookup, this only walks root-level tasks subgraph
1054
- interrupts surface by id but not by namespace.
1077
+ Returns the set of interrupt ids (empty when none are pending), or
1078
+ ``None`` if the fetch failed callers treat ``None`` as "unavailable"
1079
+ and fall open rather than fabricating ``no_such_interrupt``.
1055
1080
  """
1056
1081
  from langgraph_runtime.database import connect # noqa: PLC0415
1057
1082
 
1058
- # ``supports_core_api=False`` so the postgres backend yields a
1059
- # real connection. The default (``True``) yields ``None`` because
1060
- # data ops normally go through the gRPC server — but ``State.get``
1061
- # uses the local checkpointer and needs a usable ``conn``.
1062
1083
  try:
1063
- async with connect(supports_core_api=False) as conn:
1064
- state = await self._threads.State.get(
1065
- conn,
1066
- {"configurable": {"thread_id": self._thread_id}},
1067
- subgraphs=True,
1068
- )
1084
+ async with connect() as conn:
1085
+ result = await self._threads.get(conn, self._thread_id)
1086
+ thread = await anext(result) if hasattr(result, "__anext__") else result
1069
1087
  except Exception as exc:
1070
1088
  logger.warning(
1071
1089
  "interrupt_lookup_failed",
@@ -1075,19 +1093,14 @@ class ThreadRunManager:
1075
1093
  )
1076
1094
  return None
1077
1095
 
1078
- tasks = (
1079
- state.get("tasks") if _is_record(state) else getattr(state, "tasks", None)
1080
- ) or ()
1096
+ interrupts_map = thread.get("interrupts") if _is_record(thread) else None
1097
+ if not _is_record(interrupts_map):
1098
+ return set()
1081
1099
  found: set[str] = set()
1082
- for task in tasks:
1083
- interrupts = (
1084
- task.get("interrupts")
1085
- if _is_record(task)
1086
- else getattr(task, "interrupts", None)
1087
- )
1088
- if not isinstance(interrupts, (list, tuple)):
1100
+ for entries in interrupts_map.values():
1101
+ if not isinstance(entries, (list, tuple)):
1089
1102
  continue
1090
- for entry in interrupts:
1103
+ for entry in entries:
1091
1104
  entry_id = (
1092
1105
  entry.get("id") if _is_record(entry) else getattr(entry, "id", None)
1093
1106
  )
@@ -1096,52 +1109,15 @@ class ThreadRunManager:
1096
1109
  return found
1097
1110
 
1098
1111
  async def _has_pending_interrupts(self) -> bool:
1099
- # Prefer the session's locally-tracked pending interrupts when
1100
- # one is bound: ``_emit_input_requested_events`` populates
1101
- # ``session._pending_interrupts`` the instant the interrupt
1102
- # surfaces via the event stream, so we don't have to round-trip
1103
- # to the Threads.State gRPC call (which can return stale data
1104
- # between the run completing and the state being persisted).
1112
+ # Prefer the session's in-memory pending interrupts (populated the
1113
+ # instant ``input.requested`` surfaces) to skip a DB round-trip;
1114
+ # otherwise consult the durable thread-row map. A lookup failure
1115
+ # (``None``) reads as "none pending" ``run.start`` then falls back to
1116
+ # the ``current_status == "interrupted"`` signal for resume-vs-start.
1105
1117
  if self._session is not None and self._session._pending_interrupts:
1106
1118
  return True
1107
-
1108
- from langgraph_runtime.database import connect # noqa: PLC0415
1109
-
1110
- try:
1111
- async with connect(supports_core_api=False) as conn:
1112
- state = await self._threads.State.get(
1113
- conn,
1114
- {"configurable": {"thread_id": self._thread_id}},
1115
- subgraphs=True,
1116
- )
1117
- # ``Threads.State.get`` returns ``langgraph.types.StateSnapshot``
1118
- # — a NamedTuple whose ``tasks`` is a tuple of ``PregelTask``s,
1119
- # each with an ``interrupts`` tuple. Treat both dicts (from
1120
- # JSON serialization) and NamedTuples uniformly so this works
1121
- # whether the caller went through REST → dict or gRPC →
1122
- # StateSnapshot.
1123
- tasks = (
1124
- state.get("tasks")
1125
- if _is_record(state)
1126
- else getattr(state, "tasks", None)
1127
- ) or ()
1128
- for t in tasks:
1129
- interrupts = (
1130
- t.get("interrupts")
1131
- if _is_record(t)
1132
- else getattr(t, "interrupts", None)
1133
- )
1134
- if isinstance(interrupts, (list, tuple)) and len(interrupts) > 0:
1135
- return True
1136
- return False
1137
- except Exception as exc:
1138
- logger.warning(
1139
- "has_pending_interrupts_failed",
1140
- thread_id=self._thread_id,
1141
- error=str(exc),
1142
- error_type=type(exc).__name__,
1143
- )
1144
- return False
1119
+ found = await self._collect_persisted_interrupt_ids()
1120
+ return bool(found)
1145
1121
 
1146
1122
  # ------------------------------------------------------------------
1147
1123
  # Command forwarding
@@ -17,21 +17,21 @@
17
17
  "@types/json-schema": "^7.0.15",
18
18
  "@typescript/vfs": "^1.6.4",
19
19
  "dedent": "^1.7.2",
20
- "esbuild": "^0.28.0",
20
+ "esbuild": "^0.28.1",
21
21
  "exit-hook": "^5.1.0",
22
- "hono": "^4.12.21",
22
+ "hono": "^4.12.25",
23
23
  "p-queue": "^9.0.1",
24
24
  "p-retry": "^7.1.1",
25
25
  "tsx": "^4.21.0",
26
26
  "typescript": "^5.9.3",
27
- "undici": "^7.24.7",
27
+ "undici": "^7.28.0",
28
28
  "uuid": "^14.0.0",
29
- "vite": "^7.3.2",
29
+ "vite": "^7.3.5",
30
30
  "winston": "^3.19.0",
31
31
  "zod": "^4.3.6"
32
32
  },
33
33
  "resolutions": {
34
- "esbuild": "^0.28.0",
34
+ "esbuild": "^0.28.1",
35
35
  "langsmith": ">=0.4.6",
36
36
  "vite": "^6.4.2"
37
37
  },