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})