fix(skills): load_skill走resolve_skill容错匹配+未命中提示裸名规范(根治'技能[产线]bid-workflow不存在')
This commit is contained in:
parent
65db2dddc3
commit
38d9897a78
@ -2108,19 +2108,22 @@ async def _load_skill_by_name(sor, project_id, role, org_id, name, file_path=Non
|
||||
loader = get_skill_loader(skills_dir)
|
||||
merged = loader.get_merged(pipeline_id=pid, role=role,
|
||||
project_id=project_id, org_id=org_id or '0')
|
||||
if name not in merged:
|
||||
from pipeline_core.skill_loader import resolve_skill, normalize_skill_name, format_skill_names
|
||||
skill = resolve_skill(merged, name)
|
||||
if skill is None:
|
||||
# 项目模块技能(机构工作空间 modules/*/skill + apps/*/skill)不在 skill_loader 静态树里,运行时补查。
|
||||
# 全文层对齐 skill_loader.to_prompt_block:剥离 frontmatter 只返回正文(body)。
|
||||
cleaned = normalize_skill_name(name)
|
||||
try:
|
||||
ws = await _get_space_dir(sor, project_id)
|
||||
for m in _collect_module_skills(ws):
|
||||
if m['name'] == name or m['repo'] == name:
|
||||
if m['name'] in (name, cleaned) or m['repo'] in (name, cleaned):
|
||||
return f"## [项目模块] {m['name']}\n{m['description']}\n\n{m['body']}"
|
||||
except Exception:
|
||||
pass
|
||||
names = ", ".join(sorted(merged.keys())) or "(无可用技能)"
|
||||
return f"FAIL: 技能 '{name}' 不存在。可用技能: {names}"
|
||||
skill = merged[name]
|
||||
names = format_skill_names(merged)
|
||||
return (f"FAIL: 技能 '{name}' 不存在。注意:name 只传技能裸名"
|
||||
f"(如 project-directory-spec),不要带 [产线] 前缀或描述文字。可用技能: {names}")
|
||||
if file_path:
|
||||
return skill.read_linked_file(file_path)
|
||||
body = skill.to_prompt_block()
|
||||
|
||||
@ -982,10 +982,13 @@ class AgentExecutor:
|
||||
project_id=self.project_id or "",
|
||||
org_id=self.org_id or "",
|
||||
user_id=self.user_id or "")
|
||||
if name not in merged:
|
||||
names = ", ".join(sorted(merged.keys())) or "(无可用技能)"
|
||||
return f"FAIL: 技能 '{name}' 不存在。可用技能: {names}"
|
||||
return merged[name].to_prompt_block()
|
||||
from pipeline_core.skill_loader import resolve_skill, format_skill_names
|
||||
skill = resolve_skill(merged, name)
|
||||
if skill is None:
|
||||
names = format_skill_names(merged)
|
||||
return (f"FAIL: 技能 '{name}' 不存在。注意:name 只传技能裸名"
|
||||
f"(如 bid-workflow),不要带 [产线] 前缀或描述文字。可用技能: {names}")
|
||||
return skill.to_prompt_block()
|
||||
|
||||
async def _t_list_packs(self, sor, p, pid):
|
||||
try:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user