feat: 技能 publish 落点按 org_id 分流——组织自有规范落 org scope

机构技能层架构配套:技能提议 publish 时按提案 org_id 决定落点——
org_id='0'(ocai/平台)写 global(所有组织缺省共享);org_id≠'0' 写
skills/orgs/{org_id}/(组织自有开发规范,经 get_merged 的 org 缺省继承
+ 组织覆盖机制,该组织项目角色可见且覆盖 ocai 同名)。
This commit is contained in:
yumoqing 2026-08-23 21:43:04 +08:00
parent 48a26e5375
commit 023b2c6145

View File

@ -91,9 +91,17 @@ async with DBPools().sqlorContext(dbname) as sor:
return json.dumps({"success": False, "error": "提议缺少 name 或 content"},
ensure_ascii=False)
# 写 SKILL.md 到全局模板 skills/global/{name}/(单一技能树,所有机构共享读,无需同步副本)
# 写 SKILL.md 到技能树。落点按提案 org_id 分流(机构技能层架构):
# - org_id='0'ocai 组织/平台缺省)→ skills/global/{name}/(平台通用规范,所有组织缺省共享)
# - org_id≠'0'(其他组织)→ skills/orgs/{org_id}/{name}/(组织自有开发规范,
# 经 get_merged 的 org 缺省继承 + 组织覆盖机制,该组织项目角色可见且覆盖 ocai 同名)
from pipeline_core.skill_pack import get_skills_base
skill_dir = os.path.join(get_skills_base(), "global", name)
proposal_org = (getattr(r, 'org_id', '') or '').strip() or '0'
base = get_skills_base()
if proposal_org and proposal_org != '0':
skill_dir = os.path.join(base, "orgs", proposal_org, name)
else:
skill_dir = os.path.join(base, "global", name)
os.makedirs(skill_dir, exist_ok=True)
with open(os.path.join(skill_dir, "SKILL.md"), "w", encoding="utf-8") as f:
f.write(content)