Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-langgraph-sdk for
openSUSE:Factory checked in at 2026-10-26 10:03:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-langgraph-sdk (Old)
and /work/SRC/openSUSE:Factory/.python-langgraph-sdk.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-langgraph-sdk"
Mon Oct 26 10:03:09 2026 rev:9 rq:1392569 version:0.4.9
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-langgraph-sdk/python-langgraph-sdk.changes
2026-10-17 21:27:03.053006716 +0200
+++
/work/SRC/openSUSE:Factory/.python-langgraph-sdk.new.2252680/python-langgraph-sdk.changes
2026-10-26 10:04:34.384214609 +0100
@@ -1,0 +2,10 @@
+Sun Oct 25 06:00:00 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.4.9:
+ * Add Priority for thread priority settings
+ * Drop precautionary third-party upper bounds
+ * boo#1284153 CVE-2026-104873 is not affected by this
+ package: fixed upstream in 0.4.4 and shipped here
+ since the 0.4.4 update
+
+-------------------------------------------------------------------
Old:
----
langgraph_sdk-0.4.8.tar.gz
New:
----
langgraph_sdk-0.4.9.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-langgraph-sdk.spec ++++++
--- /var/tmp/diff_new_pack.LAZRy9/_old 2026-10-26 10:04:35.023241397 +0100
+++ /var/tmp/diff_new_pack.LAZRy9/_new 2026-10-26 10:04:35.024241439 +0100
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-langgraph-sdk
-Version: 0.4.8
+Version: 0.4.9
Release: 0
Summary: SDK for interacting with the LangGraph API
License: MIT
++++++ langgraph_sdk-0.4.8.tar.gz -> langgraph_sdk-0.4.9.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph_sdk-0.4.8/CHANGELOG.md
new/langgraph_sdk-0.4.9/CHANGELOG.md
--- old/langgraph_sdk-0.4.8/CHANGELOG.md 2020-02-02 01:00:00.000000000
+0100
+++ new/langgraph_sdk-0.4.9/CHANGELOG.md 2020-02-02 01:00:00.000000000
+0100
@@ -34,6 +34,14 @@
- **`thread.output`** — awaitable that resolves to the terminal thread state
`values` dict after the run lifecycle completes.
+- **`Priority` (beta)** — register an async function with `@priority.assign`
+ and name the object in the `priority` section of `langgraph.json`. The
+ server calls the function with a `PriorityContext` at the first run on a
+ thread with no settings and stores the `PrioritySettings` it returns
+ (`priority`, `fairness_group`, `fairness_weight`) on the thread. Requires
+ `langgraph-api` 0.18.0 or later and a `langgraph-cli` that supports the
+ section; older versions of either ignore it.
+
### Changed
- `client.threads.stream()` now accepts `transport="sse"` (default) or
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph_sdk-0.4.8/PKG-INFO
new/langgraph_sdk-0.4.9/PKG-INFO
--- old/langgraph_sdk-0.4.8/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph_sdk-0.4.9/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.5
Name: langgraph-sdk
-Version: 0.4.8
+Version: 0.4.9
Summary: SDK for interacting with LangGraph API
Project-URL: Source,
https://github.com/langchain-ai/langgraph/tree/main/libs/sdk-py
Project-URL: Twitter, https://x.com/langchain_oss
@@ -13,7 +13,7 @@
Requires-Dist: langchain-core<2,>=1.4.0
Requires-Dist: langchain-protocol>=0.0.15
Requires-Dist: orjson>=3.11.5
-Requires-Dist: websockets<17,>=14
+Requires-Dist: websockets>=14
Description-Content-Type: text/markdown
# LangGraph Python SDK
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph_sdk-0.4.8/langgraph_sdk/__init__.py
new/langgraph_sdk-0.4.9/langgraph_sdk/__init__.py
--- old/langgraph_sdk-0.4.8/langgraph_sdk/__init__.py 2020-02-02
01:00:00.000000000 +0100
+++ new/langgraph_sdk-0.4.9/langgraph_sdk/__init__.py 2020-02-02
01:00:00.000000000 +0100
@@ -2,14 +2,19 @@
from langgraph_sdk.client import get_client, get_sync_client
from langgraph_sdk.encryption import Encryption
from langgraph_sdk.encryption.types import DecryptResult, EncryptionContext
+from langgraph_sdk.priority import Priority
+from langgraph_sdk.priority.types import PriorityContext, PrioritySettings
-__version__ = "0.4.8"
+__version__ = "0.4.9"
__all__ = [
"Auth",
"DecryptResult",
"Encryption",
"EncryptionContext",
+ "Priority",
+ "PriorityContext",
+ "PrioritySettings",
"get_client",
"get_sync_client",
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langgraph_sdk-0.4.8/langgraph_sdk/priority/__init__.py
new/langgraph_sdk-0.4.9/langgraph_sdk/priority/__init__.py
--- old/langgraph_sdk-0.4.8/langgraph_sdk/priority/__init__.py 1970-01-01
01:00:00.000000000 +0100
+++ new/langgraph_sdk-0.4.9/langgraph_sdk/priority/__init__.py 2020-02-02
01:00:00.000000000 +0100
@@ -0,0 +1,155 @@
+"""Custom run priority for LangGraph.
+
+.. warning::
+ This API is in beta and may change in future versions.
+
+This module lets developers decide the priority settings of each thread with
+an async function that the server calls at the first run on a thread with no
+settings. The function is registered on an object that `langgraph.json` names,
+and runs server-side.
+"""
+
+from __future__ import annotations
+
+import functools
+import inspect
+import typing
+import warnings
+from collections.abc import Awaitable, Callable
+
+from langgraph_sdk.encryption import DuplicateHandlerError,
LangGraphBetaWarning
+from langgraph_sdk.priority import types
+
+_AssignHandler = Callable[
+ [types.PriorityContext], Awaitable[types.PrioritySettings | None]
+]
+_AssignHandlerT = typing.TypeVar("_AssignHandlerT", bound=_AssignHandler)
+
+
[email protected]_cache(maxsize=1)
+def _warn_priority_beta() -> None:
+ warnings.warn(
+ "The Priority API is in beta and may change in future versions.",
+ LangGraphBetaWarning,
+ stacklevel=4,
+ )
+
+
+def _validate_handler(fn: typing.Callable) -> None:
+ """Validate that the assign handler is async and takes one parameter.
+
+ Raises:
+ TypeError: If the handler is not an async function or has wrong
parameter count
+ """
+ if not inspect.iscoroutinefunction(fn):
+ raise TypeError(
+ f"Priority assign handler must be an async function, got
{type(fn)}"
+ )
+
+ sig = inspect.signature(fn)
+ params = [
+ p
+ for p in sig.parameters.values()
+ if p.kind in (p.POSITIONAL_ONLY, p.POSITIONAL_OR_KEYWORD)
+ ]
+ if len(params) != 1:
+ raise TypeError(
+ "Priority assign handler must accept exactly 1 parameter (ctx), "
+ f"got {len(params)}"
+ )
+
+
+class Priority:
+ """Decide the priority settings of your LangGraph application's threads.
+
+ .. warning::
+ This API is in beta and may change in future versions.
+
+ To use, create a separate Python file and add the path to the file to your
+ LangGraph API configuration file (`langgraph.json`). Within that file,
create
+ an instance of the Priority class and register an assign function with
+ `@priority.assign`.
+
+ Example `langgraph.json` file:
+
+ ```json
+ {
+ "dependencies": ["."],
+ "graphs": {
+ "agent": "./my_agent/agent.py:graph"
+ },
+ "env": ".env",
+ "priority": {
+ "path": "./priority.py:priority"
+ }
+ }
+ ```
+
+ The server calls the assign function at the first run on a thread with no
+ settings, which can come long after the thread was created, and stores the
+ settings it returns on the thread. Later runs on the thread use the stored
+ settings. The function can be called more than once for one thread, for
+ example after it raises, and only one result is stored, so keep it free of
+ side effects.
+
+ ???+ example "Basic Usage"
+
+ ```python
+ from langgraph_sdk import Priority, PriorityContext, PrioritySettings
+
+ priority = Priority()
+
+ @priority.assign
+ async def assign(ctx: PriorityContext) -> PrioritySettings | None:
+ return {
+ "priority": 3 if "premium" in ctx.permissions else 0,
+ # Stored unencrypted, so an opaque ID rather than personal
data.
+ "fairness_group": ctx.user["org_id"],
+ }
+ ```
+ """
+
+ __slots__ = ("_assign_handler",)
+
+ types = types
+ """Reference to priority type definitions.
+
+ Provides access to the type definitions used by the priority system:
+ PriorityContext and PrioritySettings.
+ """
+
+ def __init__(self) -> None:
+ """Initialize the Priority instance."""
+ _warn_priority_beta()
+ self._assign_handler: _AssignHandler | None = None
+
+ def assign(self, fn: _AssignHandlerT) -> _AssignHandlerT:
+ """Register the function that assigns a thread's priority settings.
+
+ The function receives a `PriorityContext` and returns
`PrioritySettings`,
+ or `None` for the defaults.
+
+ Example:
+ ```python
+ @priority.assign
+ async def assign(ctx: PriorityContext) -> PrioritySettings | None:
+ if ctx.cron_id is not None:
+ return {"priority": -2}
+ return None
+ ```
+
+ Args:
+ fn: The assign handler function
+
+ Returns:
+ The registered handler function
+
+ Raises:
+ DuplicateHandlerError: If an assign handler is already registered
+ TypeError: If the handler has an invalid signature
+ """
+ if self._assign_handler is not None:
+ raise DuplicateHandlerError("Priority assign handler already
registered")
+ _validate_handler(fn)
+ self._assign_handler = fn
+ return fn
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph_sdk-0.4.8/langgraph_sdk/priority/types.py
new/langgraph_sdk-0.4.9/langgraph_sdk/priority/types.py
--- old/langgraph_sdk-0.4.8/langgraph_sdk/priority/types.py 1970-01-01
01:00:00.000000000 +0100
+++ new/langgraph_sdk-0.4.9/langgraph_sdk/priority/types.py 2020-02-02
01:00:00.000000000 +0100
@@ -0,0 +1,67 @@
+"""Priority types for LangGraph.
+
+This module defines the context the server passes to the function registered
+with `@priority.assign`, and the settings that function returns.
+"""
+
+from __future__ import annotations
+
+import typing
+from collections.abc import Sequence
+from dataclasses import dataclass
+
+from langgraph_sdk.auth.types import BaseUser
+
+
+@dataclass(frozen=True, slots=True)
+class PriorityContext:
+ """Context passed to the `@priority.assign` function at the first run on a
thread with no settings."""
+
+ user: BaseUser
+ """The user from the deployment's auth, custom auth or LangSmith auth.
Without auth, `user.identity` is empty."""
+
+ permissions: Sequence[str]
+ """The user's permissions from the same auth. Without auth, it's empty."""
+
+ thread_id: str | None
+ """The thread's ID, or `None` when the run creates its thread without
being given an ID."""
+
+ thread_metadata: dict[str, typing.Any]
+ """The thread's metadata."""
+
+ assistant_id: str
+ """The ID of the assistant the run uses."""
+
+ graph_id: str
+ """The ID of the graph the assistant runs."""
+
+ assistant_metadata: dict[str, typing.Any]
+ """The assistant's metadata."""
+
+ run_metadata: dict[str, typing.Any]
+ """The run's metadata."""
+
+ cron_id: str | None
+ """The ID of the cron that started the run, or `None` when no cron started
it."""
+
+
+class PrioritySettings(typing.TypedDict, total=False):
+ """Priority settings returned by the `@priority.assign` function.
+
+ Every key is optional: a missing key or a key set to `None` takes its
+ default, and returning `None` instead of a dict gives every key its
default.
+ A value outside its range, or an empty `fairness_group`, is an error.
+ """
+
+ priority: int | None
+ """An integer from -5 to 5, where 5 runs first and -5 runs last. Defaults
to 0."""
+
+ fairness_group: str | None
+ """The thread's fairness group, a non-empty string. Defaults to
`"default"`.
+
+ The server stores it unencrypted, even when the deployment uses custom
+ encryption, so use an opaque ID rather than personal data.
+ """
+
+ fairness_weight: int | None
+ """The weight of the thread's fairness group, an integer from 1 to 100.
Defaults to 1."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph_sdk-0.4.8/pyproject.toml
new/langgraph_sdk-0.4.9/pyproject.toml
--- old/langgraph_sdk-0.4.8/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
+++ new/langgraph_sdk-0.4.9/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
@@ -16,7 +16,7 @@
"orjson>=3.11.5",
"langchain-protocol>=0.0.15",
"langchain-core>=1.4.0,<2",
- "websockets>=14,<17",
+ "websockets>=14",
]
[tool.hatch.version]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/langgraph_sdk-0.4.8/tests/streaming/test_lifecycle_namespace.py
new/langgraph_sdk-0.4.9/tests/streaming/test_lifecycle_namespace.py
--- old/langgraph_sdk-0.4.8/tests/streaming/test_lifecycle_namespace.py
1970-01-01 01:00:00.000000000 +0100
+++ new/langgraph_sdk-0.4.9/tests/streaming/test_lifecycle_namespace.py
2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1,67 @@
+"""Child lifecycle completion must not finish the parent thread's output."""
+
+from __future__ import annotations
+
+import asyncio
+from typing import cast
+
+import httpx
+import pytest
+from langchain_protocol import Event
+
+from langgraph_sdk._async.http import HttpClient
+from langgraph_sdk._async.threads import ThreadsClient
+from langgraph_sdk._sync.http import SyncHttpClient
+from langgraph_sdk._sync.stream import _BlockingResult
+from langgraph_sdk._sync.threads import SyncThreadsClient
+from streaming._events import input_requested_event, lifecycle_event
+
+
[email protected]("phase", ["completed", "failed"])
+async def test_async_child_terminal_does_not_finish_root(phase):
+ async with httpx.AsyncClient(base_url="http://test") as raw:
+ thread = ThreadsClient(HttpClient(raw)).stream(
+ thread_id="t-1", assistant_id="agent"
+ )
+ thread._run_done = asyncio.get_running_loop().create_future()
+ await thread._apply_lifecycle_event(
+ cast(Event, input_requested_event(namespace=["sub:1"]))
+ )
+ await thread._apply_lifecycle_event(
+ cast(Event, lifecycle_event(namespace=["sub:1"], event=phase))
+ )
+ assert not thread._run_done.done()
+ assert thread.interrupted
+ assert thread.interrupts[0]["namespace"] == ["sub:1"]
+
+ await thread._apply_lifecycle_event(
+ cast(Event, lifecycle_event(event="completed"))
+ )
+ assert thread._run_done.done()
+ assert (await thread._run_done).error is None
+ assert not thread.interrupted
+ assert thread.interrupts == []
+
+
[email protected]("phase", ["completed", "failed"])
+def test_sync_child_terminal_does_not_finish_root(phase):
+ with httpx.Client(base_url="http://test") as raw:
+ thread = SyncThreadsClient(SyncHttpClient(raw)).stream(
+ thread_id="t-1", assistant_id="agent"
+ )
+ thread._run_done = _BlockingResult()
+ thread._apply_lifecycle_event(
+ cast(Event, input_requested_event(namespace=["sub:1"]))
+ )
+ thread._apply_lifecycle_event(
+ cast(Event, lifecycle_event(namespace=["sub:1"], event=phase))
+ )
+ assert not thread._run_done.done()
+ assert thread.interrupted
+ assert thread.interrupts[0]["namespace"] == ["sub:1"]
+
+ thread._apply_lifecycle_event(cast(Event,
lifecycle_event(event="completed")))
+ assert thread._run_done.done()
+ assert thread._run_done.result().error is None
+ assert not thread.interrupted
+ assert thread.interrupts == []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph_sdk-0.4.8/tests/test_priority.py
new/langgraph_sdk-0.4.9/tests/test_priority.py
--- old/langgraph_sdk-0.4.8/tests/test_priority.py 1970-01-01
01:00:00.000000000 +0100
+++ new/langgraph_sdk-0.4.9/tests/test_priority.py 2020-02-02
01:00:00.000000000 +0100
@@ -0,0 +1,128 @@
+import dataclasses
+
+import pytest
+
+import langgraph_sdk
+from langgraph_sdk import Priority, PriorityContext, PrioritySettings
+from langgraph_sdk.encryption import DuplicateHandlerError,
LangGraphBetaWarning
+from langgraph_sdk.priority import _warn_priority_beta
+
+
+class _User:
+ is_authenticated = True
+ display_name = "user-1"
+ identity = "user-1"
+ permissions: tuple[str, ...] = ()
+
+ def __getitem__(self, key):
+ return getattr(self, key)
+
+ def __contains__(self, key):
+ return hasattr(self, key)
+
+ def __iter__(self):
+ return iter(("identity", "display_name", "is_authenticated",
"permissions"))
+
+
+def _context(thread_id: str | None) -> PriorityContext:
+ return PriorityContext(
+ user=_User(),
+ permissions=[],
+ thread_id=thread_id,
+ thread_metadata={},
+ assistant_id="assistant-1",
+ graph_id="agent",
+ assistant_metadata={"tier": "gold"},
+ run_metadata={},
+ cron_id=None,
+ )
+
+
+async def _no_params() -> PrioritySettings | None:
+ return None
+
+
+async def _two_params(_ctx: PriorityContext, _extra: object) ->
PrioritySettings | None:
+ return None
+
+
+def test_priority_and_its_types_are_exported():
+ assert {"Priority", "PriorityContext", "PrioritySettings"} <= set(
+ langgraph_sdk.__all__
+ )
+ assert Priority.types.PriorityContext is PriorityContext
+ assert Priority.types.PrioritySettings is PrioritySettings
+
+
+def test_construction_warns_that_priority_is_beta():
+ # The warning fires once per process, so an earlier test may have used it
up.
+ _warn_priority_beta.cache_clear()
+ with pytest.warns(LangGraphBetaWarning, match="Priority API is in beta"):
+ Priority()
+
+
+def test_assign_registers_and_returns_the_function():
+ priority = Priority()
+
+ async def assign(_ctx: PriorityContext) -> PrioritySettings | None:
+ return {"priority": 3, "fairness_group": "org-42"}
+
+ assert priority.assign(assign) is assign
+ assert priority._assign_handler is assign
+
+
+def test_assign_rejects_a_sync_function():
+ priority = Priority()
+
+ def assign(_ctx: PriorityContext) -> PrioritySettings | None:
+ return None
+
+ with pytest.raises(TypeError, match="must be an async function"):
+ priority.assign(assign) # ty: ignore[invalid-argument-type]
+ assert priority._assign_handler is None
+
+
[email protected]("fn", [_no_params, _two_params])
+def test_assign_rejects_the_wrong_number_of_parameters(fn):
+ priority = Priority()
+
+ with pytest.raises(TypeError, match="must accept exactly 1 parameter"):
+ priority.assign(fn)
+ assert priority._assign_handler is None
+
+
+def test_assign_rejects_a_second_function():
+ priority = Priority()
+
+ @priority.assign
+ async def first(_ctx: PriorityContext) -> PrioritySettings | None:
+ return None
+
+ with pytest.raises(DuplicateHandlerError):
+
+ @priority.assign
+ async def second(_ctx: PriorityContext) -> PrioritySettings | None:
+ return None
+
+ assert priority._assign_handler is first
+
+
+def test_context_accepts_no_thread_id():
+ # `make lint` type-checks this call too, so `thread_id` must accept None
there.
+ assert _context(thread_id=None).thread_id is None
+
+
+def test_context_is_frozen():
+ ctx = _context(thread_id="thread-1")
+
+ with pytest.raises(dataclasses.FrozenInstanceError):
+ ctx.thread_id = "thread-2" # ty: ignore[invalid-assignment]
+
+
+def test_every_settings_key_is_optional():
+ assert PrioritySettings.__optional_keys__ == {
+ "priority",
+ "fairness_group",
+ "fairness_weight",
+ }
+ assert PrioritySettings.__required_keys__ == frozenset()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph_sdk-0.4.8/uv.lock
new/langgraph_sdk-0.4.9/uv.lock
--- old/langgraph_sdk-0.4.8/uv.lock 2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph_sdk-0.4.9/uv.lock 2020-02-02 01:00:00.000000000 +0100
@@ -40,11 +40,11 @@
[[package]]
name = "certifi"
-version = "2026.2.25"
+version = "2026.10.19"
source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz",
hash =
"sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size
= 155029, upload-time = "2026-02-25T02:54:17.342Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/a6/bd/1436c50cc46699de0230fbaacc1d1de7bfec413176099949e9d5112e88f2/certifi-2026.10.19.tar.gz",
hash =
"sha256:035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae", size
= 137598, upload-time = "2026-10-20T02:24:16.604Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl",
hash =
"sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size
= 153684, upload-time = "2026-02-25T02:54:15.766Z" },
+ { url =
"https://files.pythonhosted.org/packages/c4/51/29046e48f693c54e5b7412216d447a1d8362c9653148d98c02cdf65fa733/certifi-2026.10.19-py3-none-any.whl",
hash =
"sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b", size
= 136464, upload-time = "2026-10-20T02:24:15.072Z" },
]
[[package]]
@@ -454,7 +454,7 @@
{ name = "langgraph-checkpoint", editable = "../checkpoint" },
{ name = "langgraph-checkpoint-postgres", editable =
"../checkpoint-postgres" },
{ name = "langgraph-checkpoint-sqlite", editable = "../checkpoint-sqlite"
},
- { name = "psycopg-binary" },
+ { name = "psycopg", extras = ["binary"] },
{ name = "pytest" },
{ name = "pytest-asyncio" },
{ name = "pytest-mock" },
@@ -474,7 +474,7 @@
{ name = "langgraph-checkpoint", editable = "../checkpoint" },
{ name = "langgraph-checkpoint-postgres", editable =
"../checkpoint-postgres" },
{ name = "langgraph-checkpoint-sqlite", editable = "../checkpoint-sqlite"
},
- { name = "psycopg-binary" },
+ { name = "psycopg", extras = ["binary"] },
{ name = "pytest" },
{ name = "pytest-asyncio" },
{ name = "pytest-mock" },
@@ -525,7 +525,7 @@
{ name = "langchain-core", specifier = ">=1.4.0,<2" },
{ name = "langchain-protocol", specifier = ">=0.0.15" },
{ name = "orjson", specifier = ">=3.11.5" },
- { name = "websockets", specifier = ">=14,<17" },
+ { name = "websockets", specifier = ">=14" },
]
[package.metadata.requires-dev]