From ac82d2f32d6485817f8cde0bf579529bb093d8a8 Mon Sep 17 00:00:00 2001 From: ymq Date: Wed, 9 Sep 2026 19:15:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(project):=20create=5Fproject=E9=BB=98?= =?UTF-8?q?=E8=AE=A4project=5Ftype=E5=8E=BBSDLC=E8=AF=AD=E4=B9=89(web=5Fap?= =?UTF-8?q?p=E2=86=92general)+=E8=A1=A5pipeline=5Fid/default=5Fmodel?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E2=80=94=E2=80=94pipeline=5Fid=E5=BF=85?= =?UTF-8?q?=E9=A1=BB=E4=B8=8Ealloc=5Fproject=5Fdir=E7=9A=84space=E4=B8=80?= =?UTF-8?q?=E8=87=B4,=E6=AD=A4=E5=89=8D=E7=9B=AE=E5=BD=95=E6=8C=89general?= =?UTF-8?q?=E5=BB=BA=E8=80=8Cpipeline=5Fid=E8=B5=B0DB=E9=BB=98=E8=AE=A4sdl?= =?UTF-8?q?c=5Fgeneral,=E5=B7=A5=E4=BD=9C=E7=A9=BA=E9=97=B4=E8=A7=A3?= =?UTF-8?q?=E6=9E=90space=3Dpipeline=5Fid=E9=94=99=E4=BD=8D;=E6=B3=A8:?= =?UTF-8?q?=E6=9C=AC=E5=87=BD=E6=95=B0=E5=BD=93=E5=89=8D=E6=97=A0=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E6=96=B9(=E5=AE=9E=E5=BB=BA=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E8=B5=B0agent=5Floop=5Fv2.=5Ft=5Fcreate=5Fproject=E4=B8=8Ebidd?= =?UTF-8?q?ing=E7=9B=B4=E6=8F=92),=E6=AD=A4=E4=BF=AE=E5=A4=8D=E4=B8=BA?= =?UTF-8?q?=E9=98=B2=E5=BE=A1=E6=80=A7,=E7=94=9F=E6=95=88=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E6=98=AFm0018=E8=BF=81=E7=A7=BB=E6=94=B9DB=E5=88=97?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pipeline_service/project_capability.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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),