fix(skill_pack): ensure_org_skills 同步 pipelines/(产线common+角色skills) 到机构工作目录

此前 ensure_org_skills 只复制 global+packs,产线技能(pipelines/{pid}/common/
与 pipelines/{pid}/roles/{role}/)未同步到机构运行时目录,导致角色 agent 加载不到
角色技能。新增 _sync_tree 递归增量同步 + PIPELINES_DIR 常量。
This commit is contained in:
yumoqing 2026-08-20 12:00:09 +08:00
parent 0579609d19
commit 6826d49f01

View File

@ -32,6 +32,29 @@ def get_skills_base():
SKILLS_BASE = get_skills_base()
PACKS_DIR = os.path.join(SKILLS_BASE, "packs")
ALL_DIR = os.path.join(SKILLS_BASE, "global") # 公共技能 = 全局模板(源头)
PIPELINES_DIR = os.path.join(SKILLS_BASE, "pipelines") # 产线技能common/roles源头在 build.sh 6b 复制
def _sync_tree(src_dir, dst_dir):
"""递归增量同步目录树src 里 dst 缺失的文件/子目录复制过去(不覆盖已存在的)。
用于产线技能 pipelines/结构是 pipelines/{pid}/common/{skill}
pipelines/{pid}/roles/{role}/{skill} global/packs 深一层
"""
if not os.path.isdir(src_dir):
return
os.makedirs(dst_dir, exist_ok=True)
for name in os.listdir(src_dir):
src = os.path.join(src_dir, name)
dst = os.path.join(dst_dir, name)
if os.path.isdir(src):
if not os.path.exists(dst):
shutil.copytree(src, dst)
else:
_sync_tree(src, dst)
else:
if not os.path.exists(dst):
shutil.copy2(src, dst)
def get_org_skills_dir(workspace_base, org_id):
@ -81,6 +104,13 @@ def ensure_org_skills(workspace_base, org_id):
shutil.copytree(src, dst)
else:
shutil.copy2(src, dst)
# 产线技能pipelines/common + roles首次全量复制之后递归增量同步
org_pipelines = os.path.join(org_skills, "pipelines")
if not os.path.isdir(org_pipelines):
if os.path.isdir(PIPELINES_DIR):
shutil.copytree(PIPELINES_DIR, org_pipelines)
else:
_sync_tree(PIPELINES_DIR, org_pipelines)
return org_skills