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]

Reply via email to