fix(project): create_project默认project_type去SDLC语义(web_app→general)+补pipeline_id/default_model参数——pipeline_id必须与alloc_project_dir的space一致,此前目录按general建而pipeline_id走DB默认sdlc_general,工作空间解析space=pipeline_id错位;注:本函数当前无调用方(实建项目走agent_loop_v2._t_create_project与bidding直插),此修复为防御性,生效路径是m0018迁移改DB列默认值

This commit is contained in:
ymq 2026-09-09 19:15:19 +08:00
parent 655d50bde8
commit ac82d2f32d

View File

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