Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-langgraph for
openSUSE:Factory checked in at 2026-07-29 19:00:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-langgraph (Old)
and /work/SRC/openSUSE:Factory/.python-langgraph.new.2004 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-langgraph"
Wed Jul 29 19:00:04 2026 rev:4 rq:1368301 version:1.2.10
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-langgraph/python-langgraph.changes
2026-07-10 17:45:09.001090285 +0200
+++
/work/SRC/openSUSE:Factory/.python-langgraph.new.2004/python-langgraph.changes
2026-07-29 19:01:30.170308485 +0200
@@ -1,0 +2,8 @@
+Wed Jul 29 06:32:58 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to version 1.2.10:
+ * Type the v3 stream_events return and add native projections
+ * Expose trace_policy on add_node, then drop tags from
+ TracePolicy and revert its deletion
+
+-------------------------------------------------------------------
Old:
----
langgraph-1.2.9.tar.gz
New:
----
langgraph-1.2.10.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-langgraph.spec ++++++
--- /var/tmp/diff_new_pack.1RjQpf/_old 2026-07-29 19:01:31.042338562 +0200
+++ /var/tmp/diff_new_pack.1RjQpf/_new 2026-07-29 19:01:31.046338699 +0200
@@ -17,7 +17,7 @@
Name: python-langgraph
-Version: 1.2.9
+Version: 1.2.10
Release: 0
Summary: Library for building stateful, multi-actor applications with
LLMs
License: MIT
++++++ langgraph-1.2.9.tar.gz -> langgraph-1.2.10.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph-1.2.9/PKG-INFO
new/langgraph-1.2.10/PKG-INFO
--- old/langgraph-1.2.9/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph-1.2.10/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: langgraph
-Version: 1.2.9
+Version: 1.2.10
Summary: Building stateful, multi-actor applications with LLMs
Project-URL: Homepage, https://docs.langchain.com/oss/python/langgraph/overview
Project-URL: Documentation, https://reference.langchain.com/python/langgraph/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph-1.2.9/langgraph/pregel/main.py
new/langgraph-1.2.10/langgraph/pregel/main.py
--- old/langgraph-1.2.9/langgraph/pregel/main.py 2020-02-02
01:00:00.000000000 +0100
+++ new/langgraph-1.2.10/langgraph/pregel/main.py 2020-02-02
01:00:00.000000000 +0100
@@ -3512,7 +3512,7 @@
control: RunControl | None = None,
transformers: Sequence[Callable[[tuple[str, ...]], Any]] | None = None,
**kwargs: Any,
- ) -> Any:
+ ) -> GraphRunStream:
"""Internal v3 sync streaming implementation. Public entry:
stream_events(version='v3').
Extra keyword arguments are forwarded to the underlying ``stream(...)``
@@ -3568,7 +3568,7 @@
control: RunControl | None = None,
transformers: Sequence[Callable[[tuple[str, ...]], Any]] | None = None,
**kwargs: Any,
- ) -> Any:
+ ) -> AsyncGraphRunStream:
"""Internal v3 async streaming implementation. Public entry:
astream_events(version='v3').
Extra keyword arguments are forwarded to the underlying
``astream(...)``
@@ -3633,7 +3633,7 @@
control: RunControl | None = None,
transformers: Sequence[Callable[[tuple[str, ...]], Any]] | None = None,
**kwargs: Any,
- ) -> Any: ...
+ ) -> GraphRunStream: ...
def stream_events(
self,
@@ -3738,7 +3738,7 @@
control: RunControl | None = None,
transformers: Sequence[Callable[[tuple[str, ...]], Any]] | None = None,
**kwargs: Any,
- ) -> Awaitable[Any]: ...
+ ) -> Awaitable[AsyncGraphRunStream]: ...
def astream_events(
self,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph-1.2.9/langgraph/stream/run_stream.py
new/langgraph-1.2.10/langgraph/stream/run_stream.py
--- old/langgraph-1.2.9/langgraph/stream/run_stream.py 2020-02-02
01:00:00.000000000 +0100
+++ new/langgraph-1.2.10/langgraph/stream/run_stream.py 2020-02-02
01:00:00.000000000 +0100
@@ -12,7 +12,13 @@
from langgraph.stream._types import ProtocolEvent
if TYPE_CHECKING:
- from langgraph.stream.transformers import SubgraphStatus
+ from langchain_core.language_models.chat_model_stream import (
+ AsyncChatModelStream,
+ ChatModelStream,
+ )
+
+ from langgraph.stream.stream_channel import StreamChannel
+ from langgraph.stream.transformers import LifecyclePayload, SubgraphStatus
def _drive_until_done(pump: Callable[[], bool]) -> None:
@@ -48,6 +54,16 @@
experimental and may change.
"""
+ # Native projections always registered by `stream_events(version="v3")`.
+ # Attached dynamically by the `setattr` loop in `__init__`; declared here
+ # so type checkers see them. Opt-in native projections (`updates`,
+ # `custom`, `checkpoints`, `debug`, `tasks`) are only present when their
+ # transformer is registered, so they are reached via `extensions[...]`.
+ values: StreamChannel[dict[str, Any]]
+ messages: StreamChannel[ChatModelStream]
+ lifecycle: StreamChannel[LifecyclePayload]
+ subgraphs: StreamChannel[SubgraphRunStream]
+
def __init__(
self,
graph_iter: Iterator[Any] | None,
@@ -329,6 +345,16 @@
experimental and may change.
"""
+ # Native projections always registered by `astream_events(version="v3")`.
+ # Attached dynamically by the `setattr` loop in `__init__`; declared here
+ # so type checkers see them. Opt-in native projections (`updates`,
+ # `custom`, `checkpoints`, `debug`, `tasks`) are only present when their
+ # transformer is registered, so they are reached via `extensions[...]`.
+ values: StreamChannel[dict[str, Any]]
+ messages: StreamChannel[AsyncChatModelStream]
+ lifecycle: StreamChannel[LifecyclePayload]
+ subgraphs: StreamChannel[AsyncSubgraphRunStream]
+
def __init__(
self,
graph_aiter: AsyncIterator[Any] | None,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph-1.2.9/pyproject.toml
new/langgraph-1.2.10/pyproject.toml
--- old/langgraph-1.2.9/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph-1.2.10/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -4,7 +4,7 @@
[project]
name = "langgraph"
-version = "1.2.9"
+version = "1.2.10"
description = "Building stateful, multi-actor applications with LLMs"
authors = []
requires-python = ">=3.10"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph-1.2.9/tests/test_stream_events_v3.py
new/langgraph-1.2.10/tests/test_stream_events_v3.py
--- old/langgraph-1.2.9/tests/test_stream_events_v3.py 2020-02-02
01:00:00.000000000 +0100
+++ new/langgraph-1.2.10/tests/test_stream_events_v3.py 2020-02-02
01:00:00.000000000 +0100
@@ -12,6 +12,10 @@
from typing import Annotated, Any, TypeVar
import pytest
+from langchain_core.language_models.chat_model_stream import (
+ AsyncChatModelStream,
+ ChatModelStream,
+)
from langchain_core.messages import AIMessage, BaseMessage
from langgraph.checkpoint.memory import InMemorySaver
from pydantic import BaseModel, ValidationError
@@ -24,6 +28,14 @@
from langgraph.graph import StateGraph
from langgraph.graph.message import MessagesState
from langgraph.runtime import RunControl
+from langgraph.stream import (
+ AsyncGraphRunStream,
+ AsyncSubgraphRunStream,
+ GraphRunStream,
+ LifecyclePayload,
+ StreamChannel,
+ SubgraphRunStream,
+)
from langgraph.types import (
CheckpointPayload,
CheckpointStreamPart,
@@ -1178,3 +1190,32 @@
assert_type(part, DebugStreamPart[_StateT])
assert_type(part["data"], DebugPayload[_StateT])
assert_type(part["ns"], tuple[str, ...])
+
+
+# --- v3 stream_events return / projection typing checks ---
+# These functions are never called at runtime; `ty` validates the
+# assert_type calls. They pin the public typing surface of
+# stream_events(version="v3") / astream_events(version="v3"): the handle
+# type and the always-registered native projections.
+
+
+def _check_stream_events_v3_typing() -> None:
+ """Compile-time checks for sync v3 typing — never called at runtime."""
+ graph = _make_simple_graph().compile()
+ run = graph.stream_events(_SIMPLE_INPUT, version="v3")
+ assert_type(run, GraphRunStream)
+ assert_type(run.values, StreamChannel[dict[str, Any]])
+ assert_type(run.messages, StreamChannel[ChatModelStream])
+ assert_type(run.lifecycle, StreamChannel[LifecyclePayload])
+ assert_type(run.subgraphs, StreamChannel[SubgraphRunStream])
+
+
+async def _check_astream_events_v3_typing() -> None:
+ """Compile-time checks for async v3 typing — never called at runtime."""
+ graph = _make_simple_graph().compile()
+ run = await graph.astream_events(_SIMPLE_INPUT, version="v3")
+ assert_type(run, AsyncGraphRunStream)
+ assert_type(run.values, StreamChannel[dict[str, Any]])
+ assert_type(run.messages, StreamChannel[AsyncChatModelStream])
+ assert_type(run.lifecycle, StreamChannel[LifecyclePayload])
+ assert_type(run.subgraphs, StreamChannel[AsyncSubgraphRunStream])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/langgraph-1.2.9/uv.lock new/langgraph-1.2.10/uv.lock
--- old/langgraph-1.2.9/uv.lock 2020-02-02 01:00:00.000000000 +0100
+++ new/langgraph-1.2.10/uv.lock 2020-02-02 01:00:00.000000000 +0100
@@ -1345,7 +1345,7 @@
[[package]]
name = "jupyterlab"
-version = "4.5.9"
+version = "4.5.10"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "async-lru" },
@@ -1362,10 +1362,11 @@
{ name = "tomli", marker = "python_full_version < '3.11'" },
{ name = "tornado" },
{ name = "traitlets" },
+ { name = "typing-extensions", marker = "python_full_version < '3.12'" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/e8/52/a8d4895bef501ffeb6af448e8bf7079541c7772978211963aa653518c2d9/jupyterlab-4.5.9.tar.gz",
hash =
"sha256:dd79a073fecae7a39066ea99e4627ed6c76269ac926e95a810e1e1df6358d865", size
= 23994445, upload-time = "2026-06-17T15:42:16.406Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/74/24/621aa20ec0d2fe72f52095bda0fc1be7738ac21aabe4129ff623140d5cdf/jupyterlab-4.5.10.tar.gz",
hash =
"sha256:77e8d80b78be59b2eaba2154562e21caa6e79c2f1281d6f486584f7144ee2f47", size
= 23998879, upload-time = "2026-07-21T12:43:27.324Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/c6/bb/2f9b425062416fba58f580c9b89c3b07277ccdf0a292501fedbca8ea00ea/jupyterlab-4.5.9-py3-none-any.whl",
hash =
"sha256:5ff0f908e8ac0afbed32b106fdef360f101c0a6654d1bf4a81e98a293ae1b336", size
= 12449803, upload-time = "2026-06-17T15:42:12.18Z" },
+ { url =
"https://files.pythonhosted.org/packages/9f/c9/940f95f17ee4e413ad252bf8d4f2ee9a341f18cfeda87775fef3d7847321/jupyterlab-4.5.10-py3-none-any.whl",
hash =
"sha256:5967ca61e692e67a2f30b5a2b901c941dc6ce56c0b0e357bc6d34fed5ec095f6", size
= 12452502, upload-time = "2026-07-21T12:43:23.542Z" },
]
[[package]]
@@ -1438,7 +1439,7 @@
[[package]]
name = "langgraph"
-version = "1.2.9"
+version = "1.2.10"
source = { editable = "." }
dependencies = [
{ name = "langchain-core" },
@@ -1782,7 +1783,7 @@
requires-dist = [
{ name = "click", specifier = ">=8.1.7" },
{ name = "httpx", specifier = ">=0.24.0" },
- { name = "langgraph-api", marker = "python_full_version >= '3.11' and
extra == 'inmem'", specifier = ">=0.5.35,<0.12.0" },
+ { name = "langgraph-api", marker = "python_full_version >= '3.11' and
extra == 'inmem'", specifier = ">=0.5.35,<1.0.0" },
{ name = "langgraph-runtime-inmem", marker = "python_full_version >=
'3.11' and extra == 'inmem'", specifier = ">=0.7" },
{ name = "langgraph-sdk", marker = "python_full_version >= '3.11'",
specifier = ">=0.1.0" },
{ name = "pathspec", specifier = ">=0.11.0" },
@@ -2067,14 +2068,14 @@
[[package]]
name = "mistune"
-version = "3.2.1"
+version = "3.3.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
-sdist = { url =
"https://files.pythonhosted.org/packages/ca/84/620cc3f7e3adf6f5067e10f4dbae71295d8f9e16d5d3f9ef97c40f2f592c/mistune-3.2.1.tar.gz",
hash =
"sha256:7c8e5501d38bac1582e067e46c8343f17d57ea1aaa735823f3aba1fd59c88a28", size
= 98003, upload-time = "2026-05-03T14:33:22.312Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/84/9c/1939635275ec7258e2b43b00dafabc36d89ad11aa7838d375dc1b0e561cb/mistune-3.3.0.tar.gz",
hash =
"sha256:3074ec4c61b384abe725128e4dcbb483f5a09cc4632012505cdee655d3a113b9", size
= 110936, upload-time = "2026-06-21T13:11:39.458Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl",
hash =
"sha256:78cdb0ba5e938053ccf63651b352508d2efa9411dc8810bfb05f2dc5140c0048", size
= 53749, upload-time = "2026-05-03T14:33:20.551Z" },
+ { url =
"https://files.pythonhosted.org/packages/b7/76/b90f9d48d43fbd80a79a20d3eab2e5109859c7a56dc663b23187385898f3/mistune-3.3.0-py3-none-any.whl",
hash =
"sha256:a758e578acda49d8195f9a860b132dae2cf7bf409381393b1c4e6e489a65397b", size
= 61250, upload-time = "2026-06-21T13:11:37.938Z" },
]
[[package]]
@@ -3383,11 +3384,11 @@
[[package]]
name = "setuptools"
-version = "80.9.0"
+version = "83.0.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz",
hash =
"sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size
= 1319958, upload-time = "2025-05-27T00:56:51.443Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/34/26/f5d29e25ffdb535afef2d35cdb55b325298f96debd670da4c325e08d70f4/setuptools-83.0.0.tar.gz",
hash =
"sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", size
= 1154254, upload-time = "2026-07-04T15:31:22.699Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl",
hash =
"sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size
= 1201486, upload-time = "2025-05-27T00:56:49.664Z" },
+ { url =
"https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl",
hash =
"sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3", size
= 1008090, upload-time = "2026-07-04T15:31:20.885Z" },
]
[[package]]
@@ -3401,11 +3402,11 @@
[[package]]
name = "soupsieve"
-version = "2.8.1"
+version = "2.8.4"
source = { registry = "https://pypi.org/simple" }
-sdist = { url =
"https://files.pythonhosted.org/packages/89/23/adf3796d740536d63a6fbda113d07e60c734b6ed5d3058d1e47fc0495e47/soupsieve-2.8.1.tar.gz",
hash =
"sha256:4cf733bc50fa805f5df4b8ef4740fc0e0fa6218cf3006269afd3f9d6d80fd350", size
= 117856, upload-time = "2025-12-18T13:50:34.655Z" }
+sdist = { url =
"https://files.pythonhosted.org/packages/47/2c/0a5f6f8ee0d5589e48c7640213ed5175d52cf540a06725b628cc1a45d6ce/soupsieve-2.8.4.tar.gz",
hash =
"sha256:e121fd02e975c695e4e9e8774a5ee35d74714b59307868dcc5319ad2d9e3328e", size
= 121110, upload-time = "2026-05-24T13:55:57.154Z" }
wheels = [
- { url =
"https://files.pythonhosted.org/packages/48/f3/b67d6ea49ca9154453b6d70b34ea22f3996b9fa55da105a79d8732227adc/soupsieve-2.8.1-py3-none-any.whl",
hash =
"sha256:a11fe2a6f3d76ab3cf2de04eb339c1be5b506a8a47f2ceb6d139803177f85434", size
= 36710, upload-time = "2025-12-18T13:50:33.267Z" },
+ { url =
"https://files.pythonhosted.org/packages/5e/f5/0c41cb68dcae6b7de4fac4188a3a9589e21fb31df21ea3a2e888db95e6c9/soupsieve-2.8.4-py3-none-any.whl",
hash =
"sha256:e7e6b0769c8f51ed59acab6e994b00621096cfb1c640a7509295987388fbaf65", size
= 37304, upload-time = "2026-05-24T13:55:55.406Z" },
]
[[package]]