From b5c7dd3f445b4abd8d13d6544555c4da0a6e161d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 27 Aug 2026 17:44:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(agent=5Fmenus):=20=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E6=94=B6=E6=95=9B=E5=88=B0=20get=5Fsession?= =?UTF-8?q?=5Fproject=5Fid=EF=BC=88=E5=90=AB=E6=82=AC=E7=A9=BA=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E9=98=B2=E6=8A=A4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 不再手写 session→项目解析(与解析层语义漂移是「会话有项目、入口说没有」的根因之一) --- wwwroot/api/agent_menus.dspy | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/wwwroot/api/agent_menus.dspy b/wwwroot/api/agent_menus.dspy index 4c1cceb..aadfe31 100644 --- a/wwwroot/api/agent_menus.dspy +++ b/wwwroot/api/agent_menus.dspy @@ -14,26 +14,15 @@ session_id = (params_kw or {}).get('session_id', '') or '' default_pipeline_id = (params_kw or {}).get('pipeline_id', '') or '' # 1. 解析当前产线:当前会话项目 → sd_projects.pipeline_id +# 统一走 get_session_project_id(含悬空引用防护:指向已删除项目的记录自愈清理并回退全局)。 +# 禁止在此重复实现 session→项目解析——多份实现语义漂移正是「会话有项目、入口说没有」的根因。 pipeline_id = '' pid = '' try: + from pipeline_service.workspace import get_session_project_id dbname = get_module_dbname('pipeline_core') async with DBPools().sqlorContext(dbname) as sor: - # 按会话解析项目:session 表优先,回退全局(多 tab 各自项目,互不覆盖) - if session_id: - try: - _srecs = await sor.sqlExe( - "SELECT current_project_id FROM pipeline_session_settings " - "WHERE user_id=${u}$ AND session_id=${s}$", - {"u": uid, "s": session_id}) - pid = getattr(_srecs[0], 'current_project_id', '') if _srecs else '' - except Exception: - pid = '' - if not pid: - recs = await sor.sqlExe( - "SELECT current_project_id FROM pipeline_agent_settings WHERE user_id=${u}$", - {"u": uid}) - pid = getattr(recs[0], 'current_project_id', '') if recs else '' + pid = await get_session_project_id(sor, uid, session_id) or '' if pid: precs = await sor.sqlExe( "SELECT pipeline_id FROM sd_projects WHERE id=${p}$", {"p": pid})