From fcad148ff39ea5753b331c3c3ac0ffefe7aae526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9B=90=E7=B2=92=20Yanli?= Date: Fri, 19 Jun 2026 03:26:48 +0800 Subject: [PATCH] fix(agent-v2): break drive service import cycle --- api/services/agent_drive_service.py | 6 +++++- api/tests/unit_tests/services/test_agent_drive_service.py | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/api/services/agent_drive_service.py b/api/services/agent_drive_service.py index 261fabb7415..a709e6a0192 100644 --- a/api/services/agent_drive_service.py +++ b/api/services/agent_drive_service.py @@ -33,7 +33,6 @@ from sqlalchemy.exc import DataError, SQLAlchemyError from sqlalchemy.orm import Session from core.app.file_access.controller import DatabaseFileAccessController -from core.app.workflow.file_runtime import DifyWorkflowFileRuntime from core.db.session_factory import session_factory from extensions.ext_storage import storage from factories import file_factory @@ -570,6 +569,11 @@ class AgentDriveService: else: mapping = {"transfer_method": "local_file", "upload_file_id": file_id} controller = DatabaseFileAccessController() + # Keep workflow runtime wiring lazy: importing this service is part of + # Agent v2 node bootstrap, while ``core.app.workflow`` re-exports the + # node factory. A module-level import here would close that cycle. + from core.app.workflow.file_runtime import DifyWorkflowFileRuntime + runtime = DifyWorkflowFileRuntime(file_access_controller=controller) try: if file_kind == AgentDriveFileKind.UPLOAD_FILE: diff --git a/api/tests/unit_tests/services/test_agent_drive_service.py b/api/tests/unit_tests/services/test_agent_drive_service.py index 7e2b026f401..2e646b00848 100644 --- a/api/tests/unit_tests/services/test_agent_drive_service.py +++ b/api/tests/unit_tests/services/test_agent_drive_service.py @@ -479,7 +479,7 @@ def test_manifest_includes_internal_download_url(): with ( patch("services.agent_drive_service.file_factory.build_from_mapping", return_value=object()), - patch("services.agent_drive_service.DifyWorkflowFileRuntime") as runtime_cls, + patch("core.app.workflow.file_runtime.DifyWorkflowFileRuntime") as runtime_cls, ): runtime_cls.return_value.resolve_file_url.return_value = "http://internal/files/x?sign=1" items = AgentDriveService().manifest(tenant_id=TENANT, agent_id=AGENT, include_download_url=True) @@ -677,7 +677,7 @@ def test_upload_file_download_url_uses_attachment_filename(): upload_file_id = _seed_upload_file(name="report.pdf") _commit_upload("files/report.pdf", upload_file_id) - with patch("services.agent_drive_service.DifyWorkflowFileRuntime") as runtime_cls: + with patch("core.app.workflow.file_runtime.DifyWorkflowFileRuntime") as runtime_cls: runtime_cls.return_value.resolve_upload_file_url.return_value = "https://files.example/report.pdf" url = AgentDriveService().download_url(tenant_id=TENANT, agent_id=AGENT, key="files/report.pdf")