diff --git a/pipeline_service/agent_loop_v2.py b/pipeline_service/agent_loop_v2.py index df8373e..7b7154b 100644 --- a/pipeline_service/agent_loop_v2.py +++ b/pipeline_service/agent_loop_v2.py @@ -651,17 +651,33 @@ class AgentExecutor: return f"未找到项目: {name}" async def _t_create_project(self, sor, p, pid): + import os from appPublic.uniqueID import getID + from .workspace import WORKSPACE_BASE name = p.get("name", "").strip() desc = p.get("description", "") if not name: return "需要项目名称" + # 查当前用户 org_id(工作空间按 org 隔离) + org_id = "0" + if self.user_id: + _u = await sor.sqlExe( + "SELECT orgid FROM users WHERE id=${u}$ LIMIT 1", {"u": self.user_id}) + if _u: + org_id = getattr(_u[0], "orgid", "0") or "0" + + # 项目专属工作空间目录(与 workspace.py get_workspace_path 回退逻辑一致) + # 不设置 workspace_dir 会导致 _resolve_workspace 回退到 ~/pipeline_ws/default, + # 所有项目共用同一目录,设计文档/代码互相覆盖。 + workspace_dir = os.path.join(WORKSPACE_BASE, str(org_id), name) + os.makedirs(workspace_dir, exist_ok=True) + pid_val = getID() await sor.C("sd_projects", { "id": pid_val, "name": name, "description": desc, - "status": "active", + "status": "active", "org_id": org_id, "workspace_dir": workspace_dir, }) await sor.C("sd_iterations", { "id": getID(), "project_id": pid_val,