/** * 安装源解析器 —— 把"各种源"物化成统一的本地形态,让 install / managed 主干**源无关**。 * 新增一种源 = 加一个分支,install.ts 不动。本模块不依赖 CLI(不打印、不 tCli):错误以 * `SourceResolveError(messageKey)` 抛出,由调用方(install)映射成本地化文案。 * * 当前支持:`file`(本地路径)、`git`(当前仓库的某个 ref)、远端 git(URL + ref,fetch 到临时 bare)。 * 三者沿同一 `ResolvedSource` 契约,install / managed 主干源无关。 */ export { SourceResolveError } from './skill-loader.js'; export type SourceKind = 'file' | 'git'; export interface ResolvedSource { sourceKind: SourceKind; /** 物化后的本地根:目录-skill 为目录、文件-skill 为 .md;喂 hashArtifactSource + 分发。 */ localRoot: string; /** skill 短名(分发落点 / 记录 name)。 */ name: string; isDirectorySkill: boolean; /** 记录身份:file=绝对路径;本地 git=`git::`;远端 git=`git+@:` * (均非临时物化路径;远端身份串仅作记录/相等比较,绝不回喂 parseGitInput 的 `:` 切分)。 */ locator: string; /** git 来源的 ref;远端为 fetch 后 pin 的实际 SHA。 */ ref?: string; /** 远端 git 的 URL(本地源 / 本地 git 无)。供受管记录结构化存、drift 重取,不挤进 locator 再 split。 */ url?: string; /** 释放临时资源(git 删临时目录 / 远端另删 bare);file 源为 noop。 */ cleanup: () => void; } export declare function resolveInstallSource(input: string): ResolvedSource; /** * 远端 git 源:`` + `` + repo 相对 ``(三者结构化传入,URL 不经任何字符串切分, * 避开 `parseGitInput` 的 `:` 与 `parseVariantCwd` 的 `@`)。fetch 到临时 bare → 复用既有 * classifyGitSkillRef / materializeGitSkillTree(repoRoot 换成 bare)。locator 落 `git+@:` * 仅作记录身份;url 另以结构化字段携带,供 drift 重取。失败 fail-closed 并清临时资源。 */ export declare function resolveRemoteGitSource(url: string, ref: string, spec: string): ResolvedSource;