import * as FileSystem from "effect/FileSystem";
import * as HttpClient from "effect/unstable/http/HttpClient";
import * as Path from "effect/Path";
import * as Effect from "effect/Effect";
import { type AppError } from "../app-error/index.js";
import { type TreeIntegrity } from "../extensions/index.js";
import type { SourceHostProvidersService } from "../source-resolution/index.js";
import type { SkillExtensionRef } from "./refs.js";
import type { WorkspaceLayout } from "../workspace/layout.js";
export type ProvideFs = (effect: Effect.Effect) => Effect.Effect>;
export type ProvideRegistryMaterialization = (effect: Effect.Effect) => Effect.Effect>;
/** Reuse inputs sourced from the caller's operation context and lockfile. */
export type CanonicalReuseContext = {
readonly force: boolean;
readonly lockedVersion: string | undefined;
readonly lockedTreeIntegrity: TreeIntegrity | undefined;
};
export interface MaterializedSkillCanonical {
readonly skillSrcPath: string;
readonly treeIntegrity?: TreeIntegrity;
}
export declare const materializeSkillCanonical: (args: {
readonly ref: SkillExtensionRef;
readonly sanitizedName: string;
readonly fs: FileSystem.FileSystem;
readonly pathService: Path.Path;
readonly baseDir: string;
readonly layout: WorkspaceLayout;
readonly sources: SourceHostProvidersService;
readonly provide: ProvideFs;
readonly provideRegistry: ProvideRegistryMaterialization;
readonly reuse?: CanonicalReuseContext;
}) => Effect.Effect;
export declare const ensureSkillAgentArtifact: (args: {
readonly canonicalSkillSrcPath: string;
readonly targetDir: string;
readonly sanitizedName: string;
readonly pathService: Path.Path;
readonly baseDir: string;
readonly provide: ProvideFs;
}) => Effect.Effect;
export declare const removeSkillAgentArtifact: (args: {
readonly fs: FileSystem.FileSystem;
readonly pathService: Path.Path;
readonly targetDir: string;
readonly sanitizedName: string;
}) => Effect.Effect;
//# sourceMappingURL=materialization.d.ts.map