From 1eafd7b1c399021404a59fed9c2f46168e8e55a7 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 2 Sep 2026 11:56:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=A0=87=E4=B9=A6=E5=90=88=E6=88=90?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E4=B8=8D=E5=9B=9E=E9=80=80/tmp=E2=80=94?= =?UTF-8?q?=E2=80=94=E8=BE=93=E5=87=BA=E6=96=87=E4=BB=B6=E5=BF=85=E9=A1=BB?= =?UTF-8?q?=E8=90=BD=E9=A1=B9=E7=9B=AE=E7=A9=BA=E9=97=B4,=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E7=9B=AE=E5=BD=95=E8=A7=A3=E6=9E=90=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E4=B8=AD=E6=AD=A2=E5=90=88=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pipeline_bidding/bid_compose_capability.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pipeline_bidding/bid_compose_capability.py b/pipeline_bidding/bid_compose_capability.py index 34b6e2a..b6ab3d6 100644 --- a/pipeline_bidding/bid_compose_capability.py +++ b/pipeline_bidding/bid_compose_capability.py @@ -23,18 +23,16 @@ async def _workspace_dir(sor, project_id): 不走 get_workspace_dir(那个依赖会话当前项目),角色 agent 场景下按项目自身字段解析。 旧实现自行拼 {base}/{org}/{pipeline_id}/{项目名}(旧平铺口径)导致与项目目录错位, 2026-09-01 收敛到引擎统一函数根治。 + + 铁律(输出文件必须在项目空间内):解析失败绝不回退 /tmp—— + 标书是交付件,写到项目外就违反"输出文件必须在项目空间内"。宁可合成失败。 """ - try: - from pipeline_service.workspace import get_project_dir_by_id - pdir, _ = await get_project_dir_by_id(sor, project_id) - if pdir: - os.makedirs(pdir, exist_ok=True) - return pdir - except Exception as e: - logger.warning("workspace resolve failed: %s", str(e)[:120]) - d = os.path.join("/tmp", "pipeline_bidding", project_id) - os.makedirs(d, exist_ok=True) - return d + from pipeline_service.workspace import get_project_dir_by_id + pdir, _ = await get_project_dir_by_id(sor, project_id) + if pdir: + os.makedirs(pdir, exist_ok=True) + return pdir + return '' def _write_docx(path, title, subtitle, chapters): @@ -130,6 +128,8 @@ async def compose_bid(project_id, doc_name="", who=None, agent_id=None, task_id= ver = to_int(getattr(vrec[0], "v", 0) if vrec else 0) + 1 ws = await _workspace_dir(sor, project_id) + if not ws: + return False, "无法解析项目工作目录(输出文件必须落项目空间内,已中止合成)" title = doc_name or ("%s 投标文件" % (tender.get("title") or proj.get("name") or "项目")) subtitle = "投标人:(本单位)  招标编号:%s" % (tender.get("tender_no") or "-")