export interface CommandResult { code: number; stdout: string; stderr: string; } export type CommandRunner = (file: string, args: readonly string[], cwd?: string) => Promise; export declare const runCommand: CommandRunner; export type GithubFailure = { status: 'authentication-required' | 'denied' | 'not-found-or-inaccessible' | 'offline' | 'unavailable'; reason: string; }; export interface RepositoryAccess { status: 'available'; repository: string; private: boolean; permissions: { pull: boolean; push: boolean; admin: boolean; }; isTemplate: boolean; } export declare function githubFailure(result: CommandResult): GithubFailure; export declare function repositoryName(value: string): string; export declare class GithubClient { readonly runner: CommandRunner; constructor(runner?: CommandRunner); access(repository: string): Promise; list(): Promise<{ status: 'available'; repositories: string[]; } | GithubFailure>; create(name: string): Promise<{ status: 'created'; repository: string; } | { status: 'template-not-enabled'; reason: string; } | GithubFailure>; }