/** * Skill 文件加载器(无状态、纯函数) * * 负责把磁盘上单个 skill 目录解析成内存对象;不持有任何缓存或监听器。 * 缓存与热载由 registry.ts 负责。 * * Skill 目录结构: * data/skills// * SKILL.md (必需,YAML frontmatter + Markdown 正文) * scripts/ (可选,附属脚本) * assets/ (可选,附属资源) * * SKILL.md frontmatter 字段: * name string 必需,必须与目录名一致(防止重命名后引用失效) * description string 必需,slash 命令补全/列表用文案 * version string 可选 * allowed-tools string[] 可选,注入时传给模型作为工具白名单 * enabled boolean 可选,缺省 true;false 时不参与 slash 注入 */ import type { ResourceScope } from '../types.js'; /** 解析后的 skill frontmatter(已校验必需字段)。 */ export interface SkillFrontmatter { name: string; description: string; version?: string; /** YAML 中可能写作 allowed-tools 或 allowedTools,统一在解析时归一化。 */ allowedTools?: string[]; enabled: boolean; /** 其它未识别字段原样保留,便于将来扩展。 */ extra: Record; } /** 一个 skill 的完整内存表示。 */ export interface ParsedSkill { /** 资源名(= 目录名 = frontmatter.name)。 */ name: string; /** 项目级 / 用户级。 */ scope: ResourceScope; /** skill 目录绝对路径。 */ dir: string; /** SKILL.md 绝对路径。 */ filePath: string; /** SKILL.md 原始内容(含 frontmatter,便于编辑器回填)。 */ raw: string; /** 解析后的 frontmatter。 */ frontmatter: SkillFrontmatter; /** Markdown 正文(去掉 frontmatter 后)。 */ body: string; /** 同目录下的脚本相对路径列表(相对 dir)。 */ scripts: string[]; /** 同目录下的附件相对路径列表(相对 dir)。 */ assets: string[]; /** 文件 mtime(毫秒),用于热载去抖与状态展示。 */ mtimeMs: number; } /** 加载失败时的错误对象。 */ export interface SkillLoadError { name: string; scope: ResourceScope; dir: string; message: string; } /** parseSkillDir 的返回类型:成功或失败。 */ export type SkillLoadResult = { ok: true; skill: ParsedSkill; } | { ok: false; error: SkillLoadError; }; /** * 解析单个 skill 目录。 * 失败返回 ok:false 而非抛错——批量扫描时上层需要继续处理其它 skill。 */ export declare function parseSkillDir(dir: string, scope: ResourceScope, expectedName?: string): SkillLoadResult; /** * 扫描指定 scope 下的所有 skill 目录。 * 返回成功项与错误项的并集,由 registry 决定如何呈现给用户。 */ export declare function scanSkillsInScope(rootDir: string, scope: ResourceScope): { skills: ParsedSkill[]; errors: SkillLoadError[]; }; /** * 序列化 SkillFrontmatter 回写到 SKILL.md。 * 保留 body 不变;frontmatter 字段以稳定顺序输出,便于 diff。 */ export declare function serializeSkillMarkdown(frontmatter: SkillFrontmatter, body: string): string; //# sourceMappingURL=loader.d.ts.map