import { Context, type Effect } from "effect"; import type { VcsDriverCapabilities, VcsError, VcsInitInput, VcsListRemotesResult, VcsListWorkspaceFilesResult, VcsRepositoryIdentity, } from "@t3tools/contracts"; import * as VcsProcess from "./VcsProcess.ts"; export interface VcsDriverShape { readonly capabilities: VcsDriverCapabilities; readonly execute: ( input: Omit, ) => Effect.Effect; readonly detectRepository: (cwd: string) => Effect.Effect; readonly isInsideWorkTree: (cwd: string) => Effect.Effect; readonly listWorkspaceFiles: ( cwd: string, ) => Effect.Effect; readonly listRemotes: (cwd: string) => Effect.Effect; readonly filterIgnoredPaths: ( cwd: string, relativePaths: ReadonlyArray, ) => Effect.Effect, VcsError>; readonly initRepository: (input: VcsInitInput) => Effect.Effect; } export class VcsDriver extends Context.Service()("t3/vcs/VcsDriver") {}