From 651e632b6d1313a2cd4d3567dd63c257c284ee3f Mon Sep 17 00:00:00 2001 From: teknium1 <127238744+teknium1@users.noreply.github.com> Date: Thu, 9 Jul 2026 18:50:48 -0700 Subject: [PATCH] fix(feishu): ship Channel signaling SDK support --- pyproject.toml | 2 +- scripts/release.py | 2 +- tests/gateway/test_feishu.py | 10 ++++++++++ tools/lazy_deps.py | 2 +- uv.lock | 6 +++--- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0253b6f1ba3..851473b13b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -249,7 +249,7 @@ termux-all = [ "hermes-agent[web]", ] dingtalk = ["dingtalk-stream==0.24.3", "alibabacloud-dingtalk==2.2.42", "qrcode==7.4.2"] -feishu = ["lark-oapi==1.5.3", "qrcode==7.4.2"] +feishu = ["lark-oapi==1.6.8", "qrcode==7.4.2"] google = [ # Required by the google-workspace skill (Gmail, Calendar, Drive, Contacts, # Sheets, Docs). Declared here so packagers (Nix, Homebrew) ship them with diff --git a/scripts/release.py b/scripts/release.py index 2fbf7e136dc..0e64556640b 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -48,7 +48,7 @@ AUTHOR_MAP = { "humphreysun98@gmail.com": "HumphreySun98", # PR #61142 salvage (web: null web/backend config value guards) "sonxi@nous.local": "17324393074", # PR #53196 salvage (tools_config: known_plugin_toolsets null guard; commit under unlinked local identity) "lemonwan@users.noreply.github.com": "lemonwan", # PR #59430 sibling salvage (adapter reconnect contract guard) - "luxuguangno1@163.com": "luxuguang-leo", # PR #52966 salvage (QQBot reconnect contract) + "luxuguangno1@163.com": "luxuguang-leo", # PR #52966 + #52908 salvage (QQBot reconnect + Feishu Channel signaling) "grace@weeb.onl": "evelynburger", # PR #57544 salvage (gateway: webhook payload filters + route scripts; commit under unlinked identity) "contato@siteup.com.br": "SiteupAgencia", # PR #57435 salvage (tui_gateway: back off notification poller when session is busy; #55578) "164521089+rainbowgits@users.noreply.github.com": "rainbowgore", # PR #59405 salvage (mcp: bound stdio initialize handshake to stop subprocess/FD leak; #59349) diff --git a/tests/gateway/test_feishu.py b/tests/gateway/test_feishu.py index d5d6739773f..0d63659bc13 100644 --- a/tests/gateway/test_feishu.py +++ b/tests/gateway/test_feishu.py @@ -173,6 +173,16 @@ class TestFeishuMessageNormalization(unittest.TestCase): class TestFeishuAdapterMessaging(unittest.TestCase): + @unittest.skipUnless(_HAS_LARK_OAPI, "lark-oapi not installed") + def test_websocket_sdk_accepts_channel_ua_tag(self): + """The shipped SDK must support the Channel signaling argument.""" + import inspect + + from lark_oapi.ws import Client as FeishuWSClient + + signature = inspect.signature(FeishuWSClient) + self.assertIn("extra_ua_tags", signature.parameters) + @patch.dict(os.environ, { "FEISHU_APP_ID": "cli_app", "FEISHU_APP_SECRET": "secret_app", diff --git a/tools/lazy_deps.py b/tools/lazy_deps.py index 94cd069b8d3..d35feb861cf 100644 --- a/tools/lazy_deps.py +++ b/tools/lazy_deps.py @@ -188,7 +188,7 @@ LAZY_DEPS: dict[str, tuple[str, ...]] = { "qrcode==7.4.2", ), "platform.feishu": ( - "lark-oapi==1.5.3", + "lark-oapi==1.6.8", "qrcode==7.4.2", ), # WeCom callback-mode adapter — parses untrusted XML POST bodies. Pulls diff --git a/uv.lock b/uv.lock index f70435a9506..21bd0827c77 100644 --- a/uv.lock +++ b/uv.lock @@ -1794,7 +1794,7 @@ requires-dist = [ { name = "honcho-ai", marker = "extra == 'honcho'", specifier = "==2.0.1" }, { name = "httpx", extras = ["socks"], specifier = "==0.28.1" }, { name = "jinja2", specifier = "==3.1.6" }, - { name = "lark-oapi", marker = "extra == 'feishu'", specifier = "==1.5.3" }, + { name = "lark-oapi", marker = "extra == 'feishu'", specifier = "==1.6.8" }, { name = "markdown", specifier = "==3.10.2" }, { name = "mautrix", extras = ["encryption"], marker = "extra == 'matrix'", specifier = "==0.21.0" }, { name = "mcp", marker = "extra == 'computer-use'", specifier = "==1.26.0" }, @@ -2184,7 +2184,7 @@ wheels = [ [[package]] name = "lark-oapi" -version = "1.5.3" +version = "1.6.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "httpx" }, @@ -2194,7 +2194,7 @@ dependencies = [ { name = "websockets" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/ff/2ece5d735ebfa2af600a53176f2636ae47af2bf934e08effab64f0d1e047/lark_oapi-1.5.3-py3-none-any.whl", hash = "sha256:fda6b32bb38d21b6bdaae94979c600b94c7c521e985adade63a54e4b3e20cc36", size = 6993016, upload-time = "2026-01-27T08:21:49.307Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ad/1ab04db5d549ad1a7a2cd33682b1c38dee1d65019cb24fd7a23270e6337d/lark_oapi-1.6.8-py3-none-any.whl", hash = "sha256:9b443a5d47a7d204dd42dc40896c8b75087cc35788e45c48c140806d7df7e5e8", size = 7798300, upload-time = "2026-06-02T07:40:05.492Z" }, ] [[package]]