From 602e10649b6ee4796e355a7da73641f13c5cb49f Mon Sep 17 00:00:00 2001 From: dadachann <185672915+dadachann@users.noreply.github.com> Date: Sun, 26 Jul 2026 14:25:49 +0800 Subject: [PATCH] fix(cloud): recover box runtime without unscoped skill reload --- src/langbot/pkg/box/service.py | 2 +- tests/unit_tests/box/test_box_service.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/langbot/pkg/box/service.py b/src/langbot/pkg/box/service.py index 6d803b4d5..f4224fb0c 100644 --- a/src/langbot/pkg/box/service.py +++ b/src/langbot/pkg/box/service.py @@ -227,7 +227,7 @@ class BoxService: self._connector_error = '' skill_mgr = getattr(self.ap, 'skill_mgr', None) reload_skills = getattr(skill_mgr, 'reload_skills', None) - if callable(reload_skills): + if callable(reload_skills) and not self._cloud_managed: await reload_skills() self.ap.logger.info('Box runtime reconnected, sandbox features restored.') return diff --git a/tests/unit_tests/box/test_box_service.py b/tests/unit_tests/box/test_box_service.py index e299e3aa9..5f31734ef 100644 --- a/tests/unit_tests/box/test_box_service.py +++ b/tests/unit_tests/box/test_box_service.py @@ -568,6 +568,28 @@ async def test_box_service_reconnect_restores_workspace_and_runs_cleanup( assert service.available is True +@pytest.mark.asyncio +async def test_cloud_box_service_reconnect_does_not_reload_unscoped_skills( + monkeypatch: pytest.MonkeyPatch, +): + app = make_app(Mock()) + app.skill_mgr = SimpleNamespace(reload_skills=AsyncMock()) + service = BoxService(app, client=Mock(spec=BoxRuntimeClient)) + service._cloud_managed = True + connector = Mock() + connector.reconnect = AsyncMock() + service._ensure_default_workspace = Mock() + service._verify_cloud_runtime = AsyncMock() + monkeypatch.setattr('langbot.pkg.box.service.asyncio.sleep', AsyncMock()) + + await service._reconnect_loop(connector) + + connector.reconnect.assert_awaited_once() + service._verify_cloud_runtime.assert_awaited_once() + app.skill_mgr.reload_skills.assert_not_awaited() + assert service.available is True + + @pytest.mark.asyncio async def test_box_runtime_reuses_request_session(): logger = Mock()