import type { CloneResult, CloneSkillsRepoOptions } from "./fetcher.js"; import type { ResolvedSkillSource } from "./manifest.js"; import type { LoggerLike } from "./types.js"; /** * Group resolved skill sources by `(repo, branch, commit)` and clone each group * exactly once, running `perGroup` against the checkout. A clone failure for one * group calls `onCloneError` and continues to the next group — so an earlier * group's already-completed work is never lost. The clone is always cleaned up. * * Shared by `bootstrap` and `coordinator.cloneAndInstallMany` so the grouping + * per-group clone resilience lives in one place (previously duplicated, which * meant the same resilience fix had to be applied twice). * * @param cloneRepo Injected clone fn (real `cloneSkillsRepo`, or a test dep). * @param perGroup Runs once per group with the clone dir + that group's sources; * the caller handles per-skill install + its own per-skill error policy. * @param onCloneError Called when a group's clone throws; the group is skipped. */ export declare function withClonedGroups(sources: readonly ResolvedSkillSource[], cloneRepo: (opts: CloneSkillsRepoOptions) => Promise, logger: LoggerLike, perGroup: (cloneDir: string, groupSources: ResolvedSkillSource[]) => Promise, onCloneError: (groupSources: ResolvedSkillSource[], err: unknown) => void): Promise; //# sourceMappingURL=clone-groups.d.ts.map