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.
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/PKG-INFO +2 -2
- langgraph_api-0.8.1/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/runs.py +5 -5
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/threads.py +2 -2
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/config/__init__.py +15 -1
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/config/schemas.py +9 -1
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/threads.py +44 -4
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/http.py +31 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/package.json +1 -1
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/yarn.lock +7 -7
- langgraph_api-0.8.1/langgraph_api/lc_security/__init__.py +29 -0
- langgraph_api-0.8.1/langgraph_api/lc_security/exceptions.py +9 -0
- langgraph_api-0.8.1/langgraph_api/lc_security/policy.py +349 -0
- langgraph_api-0.8.1/langgraph_api/lc_security/transport.py +201 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/webhook.py +101 -62
- langgraph_api-0.8.1/langgraph_grpc_common/proto/core_api_pb2.py +272 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/core_api_pb2.pyi +16 -2
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/pyproject.toml +1 -1
- langgraph_api-0.7.103/langgraph_api/__init__.py +0 -1
- langgraph_api-0.7.103/langgraph_grpc_common/proto/core_api_pb2.py +0 -272
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/.gitignore +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/LICENSE +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/Makefile +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/README.md +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/.gitignore +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/Makefile +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/README.md +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_dd_report.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_k6.js +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_runner.mjs +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_slack_report.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/capacity_urls.mjs +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/clean.js +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/graphs.js +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/mixed_workload_k6.js +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/mixed_workload_runner.mjs +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/package.json +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/ramp.js +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/reporting/slack_slowest_runs.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/reporting/slack_summary.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/run_local.sh +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/staircase.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/benchmark/weather.js +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/constraints.txt +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/custom_store.sql +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/forbidden.txt +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/hatch_build.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/healthcheck.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_handlers.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/command.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/middleware.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/executor_entrypoint.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/metrics_datadog.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/route.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/self_hosted_logs.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/server.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/state.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/store.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/network.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/channel.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/exception.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/graph.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/interrupt.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/messages.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/orchestrator_response.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/runopts.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/stream_mode.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/task.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_api_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_api_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_api_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/executor_api_pb2.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/executor_api_pb2.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/executor_api_pb2_grpc.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/proto/executor_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/sanitize.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/logging.json +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/openapi.json +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/scripts/create_license.py +0 -0
- {langgraph_api-0.7.103 → langgraph_api-0.8.1}/scripts/run_a2a_tck.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
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 =
|
|
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 =
|
|
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(
|
|
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=
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
@@ -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.
|
|
1320
|
-
version "4.12.
|
|
1321
|
-
resolved "https://registry.yarnpkg.com/hono/-/hono-4.12.
|
|
1322
|
-
integrity sha512-
|
|
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.
|
|
1397
|
-
resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.5.
|
|
1398
|
-
integrity sha512-
|
|
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
|
+
]
|