diff --git a/pipeline_service/project_capability.py b/pipeline_service/project_capability.py index dd2d2b3..6f3d9b0 100644 --- a/pipeline_service/project_capability.py +++ b/pipeline_service/project_capability.py @@ -85,29 +85,38 @@ async def _transition(project_id, from_state, to_state, action, return True, to_state -async def create_project(name, project_type="web_app", description="", - org_id="0", created_by="", who=None, agent_id=None): - """创建项目:新建记录,status=draft。返回 (ok, project_id_or_message)。""" +async def create_project(name, project_type="general", description="", + org_id="0", created_by="", who=None, agent_id=None, + pipeline_id="", default_model=""): + """创建项目:新建记录,status=draft。返回 (ok, project_id_or_message)。 + + pipeline_id 必须与建目录用的 space 一致(工作空间解析 space=pipeline_id, + 不一致会导致「上传落盘目录 ≠ agent 工作目录」错位)。缺省 'general' 表示 + 通用会话项目,不挂任何产线。 + """ if not name or not name.strip(): return False, "缺少项目名称" db, dbname = _get_db() async with db.sqlorContext(dbname) as sor: pid = getID() + space = pipeline_id or 'general' # 创建时定死项目目录并写库(统一机制:解析只读库不推导, # 保证上传落盘=agent工作目录=工作控件显示目录) from .workspace import alloc_project_dir ws_path, dname = await alloc_project_dir( - sor, org_id or '0', 'general', name.strip(), pid) + sor, org_id or '0', space, name.strip(), pid) await sor.C(TABLE, { 'id': pid, 'name': name.strip(), 'description': description or '', - 'project_type': project_type or 'web_app', + 'project_type': project_type or 'general', 'status': S_DRAFT, 'org_id': org_id or '0', 'created_by': created_by or '', 'workspace_dir': ws_path, 'directory_name': dname, + 'pipeline_id': space, + 'default_model': default_model or '', }) await record_audit(pid, TABLE, pid, 'create', to_state=S_DRAFT, who=_normalize_role(who),