fix: YAML frontmatter 解析 + call_capability iPet 兼容桥接
- SKILL.md 解析器支持跳过 YAML frontmatter (---...---)
修复导入的 Claude Code / Agent Skills 的元数据头导致
description 混入元数据的问题
- call_capability 桥接工具:兼容 iPet 遗留的
{name, prompt} 调用格式
按 name 查找 SkillRegistry,委托执行
- 清理 parser 中未使用的 in_desc 变量
This commit is contained in:
+11
-6
@@ -38,11 +38,20 @@ pub fn parse_skill(skill_dir: &Path) -> Result<Skill, String> {
|
||||
let mut params_fence = 0;
|
||||
let mut execute_fence = 0;
|
||||
let mut desc_lines: Vec<&str> = Vec::new();
|
||||
let mut in_desc = false;
|
||||
let mut frontmatter_fences = 0;
|
||||
|
||||
for (i, line) in lines.iter().enumerate() {
|
||||
for (_i, line) in lines.iter().enumerate() {
|
||||
let trimmed = line.trim();
|
||||
|
||||
// 跳过 YAML frontmatter (---...---)
|
||||
if trimmed == "---" && frontmatter_fences < 2 {
|
||||
frontmatter_fences += 1;
|
||||
continue;
|
||||
}
|
||||
if frontmatter_fences == 1 {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 标题行 → 技能名
|
||||
if trimmed.starts_with("# ") && !trimmed.starts_with("## ") && name.is_empty() {
|
||||
name = trimmed.trim_start_matches("# ").trim().to_string();
|
||||
@@ -54,24 +63,20 @@ pub fn parse_skill(skill_dir: &Path) -> Result<Skill, String> {
|
||||
let section = trimmed.trim_start_matches("## ").trim().to_lowercase();
|
||||
match section.as_str() {
|
||||
"risk level" | "risk_level" | "risk" => {
|
||||
in_desc = false;
|
||||
in_params = false;
|
||||
in_execute = false;
|
||||
}
|
||||
"parameters" | "param" => {
|
||||
in_desc = false;
|
||||
in_params = true;
|
||||
in_execute = false;
|
||||
}
|
||||
"execute" | "execution" | "command" | "run" => {
|
||||
in_desc = false;
|
||||
in_params = false;
|
||||
in_execute = true;
|
||||
params_fence = 0;
|
||||
execute_fence = 0;
|
||||
}
|
||||
_ => {
|
||||
in_desc = false;
|
||||
in_params = false;
|
||||
in_execute = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user