langgraph-api 0.9.0.dev2__tar.gz → 0.9.0.dev4__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.9.0.dev2 → langgraph_api-0.9.0.dev4}/Makefile +17 -2
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/PKG-INFO +1 -1
- langgraph_api-0.9.0.dev4/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/config/schemas.py +26 -2
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/service.py +32 -6
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/webhook.py +25 -3
- langgraph_api-0.9.0.dev2/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/.gitignore +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/LICENSE +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/README.md +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/.gitignore +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/Makefile +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/README.md +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/capacity_dd_report.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/capacity_k6.js +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/capacity_runner.mjs +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/capacity_slack_report.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/capacity_urls.mjs +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/clean.js +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/graphs.js +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/mixed_workload_k6.js +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/mixed_workload_runner.mjs +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/package.json +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/ramp.js +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/reporting/slack_slowest_runs.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/reporting/slack_summary.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/run_local.sh +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/staircase.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/weather.js +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/constraints.txt +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/custom_store.sql +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/forbidden.txt +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/hatch_build.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/healthcheck.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/event_streaming.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/mcp/_handlers.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/command.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/config/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/encryption/middleware.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/capabilities.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/constants.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/event_normalizers.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/namespace.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/session.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/state_normalizers.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/types.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/ops/threads.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/http.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/lc_security/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/lc_security/exceptions.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/lc_security/policy.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/lc_security/transport.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/metrics_datadog.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/release_tags.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/route.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/self_hosted_logs.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/server.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/state.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/store.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/stream_v2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/network.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/logging.json +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/openapi.json +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/pyproject.toml +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/scripts/create_license.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/scripts/run_a2a_tck.py +0 -0
- {langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/uv.lock +0 -0
|
@@ -71,6 +71,19 @@ else
|
|
|
71
71
|
HTTP_CONFIG := $(LANGGRAPH_HTTP)
|
|
72
72
|
endif
|
|
73
73
|
|
|
74
|
+
# Dev/test default: opt in to loopback + http webhooks.
|
|
75
|
+
# ``test_custom_route`` etc use relative URLs to dispatch to my_router.py;
|
|
76
|
+
# ``test_join_*`` / ``test_webhook_payload_on_timeouts`` / ``test_cron_*``
|
|
77
|
+
# and the shutdown suite use ``http://localhost:{port}/webhook`` to a
|
|
78
|
+
# pytest httpserver fixture — all of these are blocked by the secure
|
|
79
|
+
# ``disable_loopback`` default (GHSA-q3v5-r5ch-p57j), and
|
|
80
|
+
# ``require_https`` defaults to true once any webhooks.url block is
|
|
81
|
+
# present, so explicitly disable it for the http httpserver fixture.
|
|
82
|
+
# Production deployers don't use these Makefiles. Override with
|
|
83
|
+
# ``LANGGRAPH_WEBHOOKS=...`` on the command line to exercise the secure
|
|
84
|
+
# default during local development.
|
|
85
|
+
LANGGRAPH_WEBHOOKS ?= {"url": {"disable_loopback": false, "require_https": false}}
|
|
86
|
+
|
|
74
87
|
LANGGRAPH_STORE ?= ""
|
|
75
88
|
ifeq ($(LANGGRAPH_STORE),custom)
|
|
76
89
|
STORE_CONFIG := {"path": "./tests/graphs/custom_store.py:generate_store"}
|
|
@@ -93,10 +106,10 @@ REVISION ?= $(shell git rev-parse --short HEAD)
|
|
|
93
106
|
LANGGRAPH_ENCRYPTION ?=
|
|
94
107
|
|
|
95
108
|
test-license-oss:
|
|
96
|
-
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='$(HTTP_CONFIG)' LANGGRAPH_STORE='$(STORE_CONFIG)' LANGGRAPH_CHECKPOINTER='$(CHECKPOINTER_CONFIG)' LANGGRAPH_ENCRYPTION='$(LANGGRAPH_ENCRYPTION)' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run pytest -v $(XDIST_ARGS) $(TEST)
|
|
109
|
+
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_WEBHOOKS='$(LANGGRAPH_WEBHOOKS)' LANGGRAPH_HTTP='$(HTTP_CONFIG)' LANGGRAPH_STORE='$(STORE_CONFIG)' LANGGRAPH_CHECKPOINTER='$(CHECKPOINTER_CONFIG)' LANGGRAPH_ENCRYPTION='$(LANGGRAPH_ENCRYPTION)' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run pytest -v $(XDIST_ARGS) $(TEST)
|
|
97
110
|
|
|
98
111
|
test-watch-oss:
|
|
99
|
-
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='$(HTTP_CONFIG)' LANGGRAPH_ENCRYPTION='$(LANGGRAPH_ENCRYPTION)' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run --no-sync ptw . -- -x -vv --ff --capture=no $(TEST)
|
|
112
|
+
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_WEBHOOKS='$(LANGGRAPH_WEBHOOKS)' LANGGRAPH_HTTP='$(HTTP_CONFIG)' LANGGRAPH_ENCRYPTION='$(LANGGRAPH_ENCRYPTION)' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run --no-sync ptw . -- -x -vv --ff --capture=no $(TEST)
|
|
100
113
|
|
|
101
114
|
test: test-license-oss
|
|
102
115
|
test-watch: test-watch-oss
|
|
@@ -159,6 +172,7 @@ LANGSMITH_TRACING ?= false
|
|
|
159
172
|
|
|
160
173
|
start:
|
|
161
174
|
LANGGRAPH_DISABLE_FILE_PERSISTENCE=$(LANGGRAPH_DISABLE_FILE_PERSISTENCE) \
|
|
175
|
+
LANGGRAPH_WEBHOOKS='$(LANGGRAPH_WEBHOOKS)' \
|
|
162
176
|
LANGGRAPH_HTTP='$(HTTP_CONFIG)' \
|
|
163
177
|
LANGGRAPH_RUNTIME_EDITION=inmem \
|
|
164
178
|
LANGGRAPH_AES_KEY='$(LANGGRAPH_AES_KEY)' \
|
|
@@ -186,6 +200,7 @@ start:
|
|
|
186
200
|
start-license-oss: start
|
|
187
201
|
|
|
188
202
|
start-encrypt:
|
|
203
|
+
LANGGRAPH_WEBHOOKS='$(LANGGRAPH_WEBHOOKS)' \
|
|
189
204
|
LANGGRAPH_HTTP='$(HTTP_CONFIG)' \
|
|
190
205
|
LANGGRAPH_RUNTIME_EDITION=inmem \
|
|
191
206
|
LANGGRAPH_AES_KEY='$(LANGGRAPH_AES_KEY)' \
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.9.0.dev4"
|
|
@@ -386,7 +386,26 @@ 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
|
|
389
|
+
"""Disallow loopback-flavored webhook targets when true. Defaults to true.
|
|
390
|
+
|
|
391
|
+
Covers all of:
|
|
392
|
+
- Relative URLs (e.g. ``/internal/hook``) that would dispatch via the
|
|
393
|
+
in-process ASGI loopback transport at ``root_path="/noauth"``. These
|
|
394
|
+
bypass authentication and were the auth-bypass primitive behind
|
|
395
|
+
GHSA-q3v5-r5ch-p57j.
|
|
396
|
+
- Absolute URLs whose hostname is ``localhost`` / ``localhost.localdomain``
|
|
397
|
+
/ ``host.docker.internal``.
|
|
398
|
+
- Absolute URLs that DNS-resolve into the IPv4 loopback range
|
|
399
|
+
(``127.0.0.0/8``) or IPv6 loopback (``::1/128``) — including
|
|
400
|
+
DNS-rebinding-style attacks where an arbitrary hostname resolves to
|
|
401
|
+
a loopback IP.
|
|
402
|
+
|
|
403
|
+
Operators who intentionally route webhooks to in-process routes
|
|
404
|
+
(e.g. for local development with ``langgraph dev``, or single-host
|
|
405
|
+
docker-compose setups dispatching to ``host.docker.internal``) can
|
|
406
|
+
set this to ``false`` to restore the pre-GHSA behavior. Only do this
|
|
407
|
+
when you control all routes that loopback webhooks can reach.
|
|
408
|
+
"""
|
|
390
409
|
disable_private_ips: bool
|
|
391
410
|
"""Block RFC 1918 / CGN private IP ranges as webhook targets when true.
|
|
392
411
|
|
|
@@ -426,7 +445,12 @@ def _validate_url_policy(
|
|
|
426
445
|
if "max_url_length" not in policy:
|
|
427
446
|
policy["max_url_length"] = 2048
|
|
428
447
|
if "disable_loopback" not in policy:
|
|
429
|
-
|
|
448
|
+
# Secure default — covers GHSA-q3v5-r5ch-p57j (relative-URL ASGI
|
|
449
|
+
# loopback auth bypass) and the broader SSRF surface that the same
|
|
450
|
+
# flag governs via SSRFPolicy.block_localhost. Mirrored at the
|
|
451
|
+
# webhook.py read site so deployments without any webhooks block
|
|
452
|
+
# also get the safe default.
|
|
453
|
+
policy["disable_loopback"] = True
|
|
430
454
|
if "disable_private_ips" not in policy:
|
|
431
455
|
policy["disable_private_ips"] = False
|
|
432
456
|
return policy
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/service.py
RENAMED
|
@@ -749,14 +749,23 @@ class ThreadRunManager:
|
|
|
749
749
|
async def get_thread_state() -> dict[str, Any] | None:
|
|
750
750
|
from langgraph_runtime.database import connect # noqa: PLC0415
|
|
751
751
|
|
|
752
|
+
# ``supports_core_api=False`` so the postgres backend yields a
|
|
753
|
+
# real connection. ``State.get`` uses the local checkpointer
|
|
754
|
+
# and needs a usable ``conn`` — the default flag yields None.
|
|
752
755
|
try:
|
|
753
|
-
async with connect() as conn:
|
|
756
|
+
async with connect(supports_core_api=False) as conn:
|
|
754
757
|
return await self._threads.State.get(
|
|
755
758
|
conn,
|
|
756
759
|
{"configurable": {"thread_id": thread_id}},
|
|
757
760
|
subgraphs=True,
|
|
758
761
|
)
|
|
759
|
-
except Exception:
|
|
762
|
+
except Exception as exc:
|
|
763
|
+
logger.warning(
|
|
764
|
+
"terminal_thread_state_fetch_failed",
|
|
765
|
+
thread_id=thread_id,
|
|
766
|
+
error=str(exc),
|
|
767
|
+
error_type=type(exc).__name__,
|
|
768
|
+
)
|
|
760
769
|
return None
|
|
761
770
|
|
|
762
771
|
return get_thread_state
|
|
@@ -855,14 +864,25 @@ class ThreadRunManager:
|
|
|
855
864
|
"""
|
|
856
865
|
from langgraph_runtime.database import connect # noqa: PLC0415
|
|
857
866
|
|
|
867
|
+
# ``supports_core_api=False`` so the postgres backend yields a
|
|
868
|
+
# real connection. The default (``True``) yields ``None`` because
|
|
869
|
+
# data ops normally go through the gRPC server — but ``State.get``
|
|
870
|
+
# uses the local checkpointer and needs a usable ``conn``.
|
|
858
871
|
try:
|
|
859
|
-
async with connect() as conn:
|
|
872
|
+
async with connect(supports_core_api=False) as conn:
|
|
860
873
|
state = await self._threads.State.get(
|
|
861
874
|
conn,
|
|
862
875
|
{"configurable": {"thread_id": self._thread_id}},
|
|
863
876
|
subgraphs=True,
|
|
864
877
|
)
|
|
865
|
-
except Exception:
|
|
878
|
+
except Exception as exc:
|
|
879
|
+
logger.warning(
|
|
880
|
+
"interrupt_lookup_failed",
|
|
881
|
+
thread_id=self._thread_id,
|
|
882
|
+
interrupt_id=interrupt_id,
|
|
883
|
+
error=str(exc),
|
|
884
|
+
error_type=type(exc).__name__,
|
|
885
|
+
)
|
|
866
886
|
return None
|
|
867
887
|
|
|
868
888
|
tasks = (
|
|
@@ -903,7 +923,7 @@ class ThreadRunManager:
|
|
|
903
923
|
from langgraph_runtime.database import connect # noqa: PLC0415
|
|
904
924
|
|
|
905
925
|
try:
|
|
906
|
-
async with connect() as conn:
|
|
926
|
+
async with connect(supports_core_api=False) as conn:
|
|
907
927
|
state = await self._threads.State.get(
|
|
908
928
|
conn,
|
|
909
929
|
{"configurable": {"thread_id": self._thread_id}},
|
|
@@ -929,7 +949,13 @@ class ThreadRunManager:
|
|
|
929
949
|
if isinstance(interrupts, (list, tuple)) and len(interrupts) > 0:
|
|
930
950
|
return True
|
|
931
951
|
return False
|
|
932
|
-
except Exception:
|
|
952
|
+
except Exception as exc:
|
|
953
|
+
logger.warning(
|
|
954
|
+
"has_pending_interrupts_failed",
|
|
955
|
+
thread_id=self._thread_id,
|
|
956
|
+
error=str(exc),
|
|
957
|
+
error_type=type(exc).__name__,
|
|
958
|
+
)
|
|
933
959
|
return False
|
|
934
960
|
|
|
935
961
|
# ------------------------------------------------------------------
|
|
@@ -79,7 +79,14 @@ def _get_webhook_config() -> _WebhookConfig:
|
|
|
79
79
|
exact_allowed = frozenset(exact_hosts)
|
|
80
80
|
|
|
81
81
|
disable_private_ips = bool(policy_cfg.get("disable_private_ips", False))
|
|
82
|
-
|
|
82
|
+
# Loopback webhooks are denied by default (covers relative URLs that
|
|
83
|
+
# would dispatch through the in-process ASGI client at root_path=/noauth,
|
|
84
|
+
# plus localhost / 127.x / ::1 / host.docker.internal absolute URLs,
|
|
85
|
+
# plus any hostname that DNS-resolves into the loopback range). This is
|
|
86
|
+
# the fix for GHSA-q3v5-r5ch-p57j: relative-URL webhooks were the auth
|
|
87
|
+
# bypass primitive, and the localhost/loopback IP variants are the
|
|
88
|
+
# broader SSRF surface that the same flag governs via SSRFPolicy.
|
|
89
|
+
disable_loopback = bool(policy_cfg.get("disable_loopback", True))
|
|
83
90
|
|
|
84
91
|
return _WebhookConfig(
|
|
85
92
|
allowed_domains=allowed_domains,
|
|
@@ -111,11 +118,26 @@ async def validate_webhook_url_or_raise(url: str) -> None:
|
|
|
111
118
|
if len(url) > wh.max_url_length:
|
|
112
119
|
raise HTTPException(status_code=422, detail="Webhook URL too long")
|
|
113
120
|
|
|
114
|
-
# Relative loopback URL (internal route) —
|
|
121
|
+
# Relative loopback URL (internal route) — dispatched via an in-process
|
|
122
|
+
# ASGI client that mounts under root_path="/noauth", which the auth
|
|
123
|
+
# middleware treats as an auth-bypass marker. Denied by default so a
|
|
124
|
+
# user-supplied webhook URL cannot be turned into an unauthenticated
|
|
125
|
+
# call against the server's own routes (GHSA-q3v5-r5ch-p57j). Operators
|
|
126
|
+
# who intentionally route webhooks to in-process routes can opt back in
|
|
127
|
+
# by setting webhooks.url.disable_loopback to false.
|
|
115
128
|
if url.startswith("/"):
|
|
116
129
|
if wh.disable_loopback:
|
|
117
130
|
raise HTTPException(
|
|
118
|
-
status_code=422,
|
|
131
|
+
status_code=422,
|
|
132
|
+
detail=(
|
|
133
|
+
"Loopback webhooks (relative URLs and localhost) are "
|
|
134
|
+
"disabled by default. They bypass authentication via the "
|
|
135
|
+
"in-process ASGI transport and can be abused to invoke "
|
|
136
|
+
"internal routes as an unauthenticated caller. Set "
|
|
137
|
+
"webhooks.url.disable_loopback to false (in langgraph.json "
|
|
138
|
+
"or via LANGGRAPH_WEBHOOKS) to opt back in — only do so "
|
|
139
|
+
"when you control the mounted routes."
|
|
140
|
+
),
|
|
119
141
|
)
|
|
120
142
|
return
|
|
121
143
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.9.0.dev2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/assistant.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/benchmarks.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/log-failure.ts
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/meta_workload.ts
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/stream_write.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/benchmark-runners/wait_write.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/benchmark/reporting/slack_slowest_runs.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph-cloud-debugging-20260210132856.zip
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/_checkpointer/__init__.py
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/_checkpointer/_adapter.py
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/_checkpointer/protocol.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/langsmith/__init__.py
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/langsmith/backend.py
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/auth/langsmith/client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/encryption/middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/__init__.py
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/capabilities.py
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/namespace.py
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/session.py
RENAMED
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/event_streaming/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/generated/core_api_pb2.pyi
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/servicers/__init__.py
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/servicers/checkpointer.py
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/grpc/servicers/encryption.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/utils/importMap.mts
RENAMED
|
File without changes
|
{langgraph_api-0.9.0.dev2 → langgraph_api-0.9.0.dev4}/langgraph_api/js/src/utils/pythonSchemas.mts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|