fix(agent_menus): 项目解析收敛到 get_session_project_id(含悬空引用防护)

不再手写 session→项目解析(与解析层语义漂移是「会话有项目、入口说没有」的根因之一)
This commit is contained in:
yumoqing 2026-08-27 17:44:38 +08:00
parent f5689defa8
commit b5c7dd3f44

View File

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