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:
parent
655d50bde8
commit
ac82d2f32d
@ -85,29 +85,38 @@ async def _transition(project_id, from_state, to_state, action,
|
|||||||
return True, to_state
|
return True, to_state
|
||||||
|
|
||||||
|
|
||||||
async def create_project(name, project_type="web_app", description="",
|
async def create_project(name, project_type="general", description="",
|
||||||
org_id="0", created_by="", who=None, agent_id=None):
|
org_id="0", created_by="", who=None, agent_id=None,
|
||||||
"""创建项目:新建记录,status=draft。返回 (ok, project_id_or_message)。"""
|
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():
|
if not name or not name.strip():
|
||||||
return False, "缺少项目名称"
|
return False, "缺少项目名称"
|
||||||
db, dbname = _get_db()
|
db, dbname = _get_db()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
pid = getID()
|
pid = getID()
|
||||||
|
space = pipeline_id or 'general'
|
||||||
# 创建时定死项目目录并写库(统一机制:解析只读库不推导,
|
# 创建时定死项目目录并写库(统一机制:解析只读库不推导,
|
||||||
# 保证上传落盘=agent工作目录=工作控件显示目录)
|
# 保证上传落盘=agent工作目录=工作控件显示目录)
|
||||||
from .workspace import alloc_project_dir
|
from .workspace import alloc_project_dir
|
||||||
ws_path, dname = await 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, {
|
await sor.C(TABLE, {
|
||||||
'id': pid,
|
'id': pid,
|
||||||
'name': name.strip(),
|
'name': name.strip(),
|
||||||
'description': description or '',
|
'description': description or '',
|
||||||
'project_type': project_type or 'web_app',
|
'project_type': project_type or 'general',
|
||||||
'status': S_DRAFT,
|
'status': S_DRAFT,
|
||||||
'org_id': org_id or '0',
|
'org_id': org_id or '0',
|
||||||
'created_by': created_by or '',
|
'created_by': created_by or '',
|
||||||
'workspace_dir': ws_path,
|
'workspace_dir': ws_path,
|
||||||
'directory_name': dname,
|
'directory_name': dname,
|
||||||
|
'pipeline_id': space,
|
||||||
|
'default_model': default_model or '',
|
||||||
})
|
})
|
||||||
await record_audit(pid, TABLE, pid, 'create',
|
await record_audit(pid, TABLE, pid, 'create',
|
||||||
to_state=S_DRAFT, who=_normalize_role(who),
|
to_state=S_DRAFT, who=_normalize_role(who),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user