diff --git a/wwwroot/api/skill_proposals.dspy b/wwwroot/api/skill_proposals.dspy index 4c65849..c2f2e34 100644 --- a/wwwroot/api/skill_proposals.dspy +++ b/wwwroot/api/skill_proposals.dspy @@ -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)