From f19562a360e4c281462482d48d9da74728746969 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 16 Aug 2026 19:03:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ensure=5Forg=5Fskills=E6=94=B9=E5=A2=9E?= =?UTF-8?q?=E9=87=8F=E5=90=8C=E6=AD=A5(=E5=85=A8=E5=B1=80=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E6=96=B0=E5=A2=9E=E6=8A=80=E8=83=BD=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=88=B0=E5=B7=B2=E6=9C=89=E6=9C=BA=E6=9E=84,=E4=B8=8D?= =?UTF-8?q?=E5=8F=AA=E9=A6=96=E6=AC=A1=E5=A4=8D=E5=88=B6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pipeline_core/skill_pack.py | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/pipeline_core/skill_pack.py b/pipeline_core/skill_pack.py index e1245fb..c878379 100644 --- a/pipeline_core/skill_pack.py +++ b/pipeline_core/skill_pack.py @@ -45,21 +45,42 @@ def get_org_skills_dir(workspace_base, org_id): def ensure_org_skills(workspace_base, org_id): - """确保机构工作目录的 skills/ 已初始化(首次从全局模板复制公共技能 + 技能集清单)。 + """确保机构工作目录的 skills/ 已初始化(从全局模板复制公共技能 + 技能集清单)。 多租户隔离:运行时技能必须落在机构工作目录,不能读全局应用目录的 skills/。 + 增量同步:全局模板新增的技能/清单,会同步到机构目录(已有机构也能拿到新技能)。 返回机构技能根目录。 """ org_skills = get_org_skills_dir(workspace_base, org_id) os.makedirs(org_skills, exist_ok=True) - # 复制公共技能(global) - if not os.path.isdir(os.path.join(org_skills, "global")): + # 公共技能(global):首次全量复制,之后增量同步(全局模板新增的技能复制过来) + org_global = os.path.join(org_skills, "global") + if not os.path.isdir(org_global): if os.path.isdir(ALL_DIR): - shutil.copytree(ALL_DIR, os.path.join(org_skills, "global")) - # 复制技能集清单(packs) - if not os.path.isdir(os.path.join(org_skills, "packs")): + shutil.copytree(ALL_DIR, org_global) + elif os.path.isdir(ALL_DIR): + for name in os.listdir(ALL_DIR): + src = os.path.join(ALL_DIR, name) + dst = os.path.join(org_global, name) + if not os.path.exists(dst): + if os.path.isdir(src): + shutil.copytree(src, dst) + else: + shutil.copy2(src, dst) + # 技能集清单(packs):首次全量复制,之后增量同步 + org_packs = os.path.join(org_skills, "packs") + if not os.path.isdir(org_packs): if os.path.isdir(PACKS_DIR): - shutil.copytree(PACKS_DIR, os.path.join(org_skills, "packs")) + shutil.copytree(PACKS_DIR, org_packs) + elif os.path.isdir(PACKS_DIR): + for name in os.listdir(PACKS_DIR): + src = os.path.join(PACKS_DIR, name) + dst = os.path.join(org_packs, name) + if not os.path.exists(dst): + if os.path.isdir(src): + shutil.copytree(src, dst) + else: + shutil.copy2(src, dst) return org_skills