export type RepoProvider = "github" | "forgejo"; export interface GitRemote { name: string; fetchUrl: string | null; pushUrl: string | null; } export interface ResolvedRepositoryContext { repositoryPath: string; remoteName: string; remoteUrl: string; provider: RepoProvider; targetRef: string; } export type RepoContextResult = { kind: "resolved"; repository: ResolvedRepositoryContext; } | { kind: "missing-context"; reason: "not-a-git-repository" | "no-remotes"; repositoryPath?: string; } | { kind: "ambiguous"; reason: "multiple-remotes"; repositoryPath?: string; remotes: string[]; } | { kind: "unsupported"; reason: "unsupported-remote-format"; repositoryPath?: string; remoteName: string; remoteUrl: string; }; export interface ResolveRepoContextInput { repositoryPath?: string; remoteName?: string; } export interface RepoCommandRunner { run(cwd: string | undefined, args: string[]): Promise<{ stdout: string; stderr: string; }>; } export interface RepoContextService { resolveRepository(input?: ResolveRepoContextInput): Promise; } declare const createRepoContextService: (runner?: RepoCommandRunner) => RepoContextService; declare const listGitRemotes: (runner: RepoCommandRunner, repositoryPath: string) => Promise; declare const parseGitRemoteOutput: (stdout: string) => GitRemote[]; declare const selectGitRemote: (remotes: GitRemote[], requestedRemoteName?: string) => GitRemote | null; declare const normalizeGitRemoteUrl: (remoteUrl: string) => { provider: RepoProvider; targetRef: string; } | null; declare const createDefaultRepoCommandRunner: () => RepoCommandRunner; export { createDefaultRepoCommandRunner, createRepoContextService, listGitRemotes, normalizeGitRemoteUrl, parseGitRemoteOutput, selectGitRemote, };