export namespace githubAdapter {
    export let id: string;
    export { toStateCategory };
    export { toNeutral };
    export { IN_PROGRESS_LABEL };
    export { BLOCKED_LABEL };
    /**
     * listCandidates — list a repo's issues by state/labels/since cursor.
     * Needs {owner, repo} via opts.ctx or env. `opts.query` is ignored (GitHub
     * issue search is a separate endpoint; the contract's listCandidates is the
     * repo-scoped poll).
     * @param {import('./types.js').ListCandidatesOptions & {ctx?: object}} [opts]
     * @returns {Promise<import('./types.js').NeutralTicket[]>}
     */
    export function listCandidates(opts?: import("./types.js").ListCandidatesOptions & {
        ctx?: object;
    }): Promise<import("./types.js").NeutralTicket[]>;
    /** getTicket — one issue by number (key may be `owner/repo#N` or just `N`). */
    export function getTicket(key: any, ctx?: {}): Promise<{
        id: string;
        key: string;
        title: any;
        body: any;
        state: any;
        stateCategory: "unknown" | "todo" | "in_progress" | "done" | "blocked";
        assignee: any;
        url: any;
        _raw: any;
    }>;
    /** getComments — chronological; we reverse to newest-first for contract parity. */
    export function getComments(key: any, ctx?: {}): Promise<any>;
    /** addComment — markdown body. */
    export function addComment(key: any, body: any, ctx?: {}): Promise<{
        ok: boolean;
        id: string;
    }>;
    /**
     * transition — map a neutral target NAME onto GitHub's open/close + labels
     * convention (see the file header). Returns ok:false for names GitHub can't
     * represent — that's a real seam, not a swallowed error.
     */
    export function transition(key: any, targetStateName: any, ctx?: {}): Promise<{
        ok: boolean;
        stateAfter: any;
        stateCategoryAfter: string;
        _raw: any;
        via?: undefined;
        error?: undefined;
    } | {
        ok: boolean;
        stateAfter: string;
        stateCategoryAfter: string;
        via: string;
        _raw: any;
        error?: undefined;
    } | {
        ok: boolean;
        error: string;
        stateAfter?: undefined;
        stateCategoryAfter?: undefined;
        _raw?: undefined;
        via?: undefined;
    }>;
    /**
     * linkPullRequest — post a comment with the PR link. GitHub's native issue↔PR
     * association is driven by closing keywords in the PR body, not an issue API
     * write, so a comment is the portable, always-works path.
     */
    export function linkPullRequest(key: any, prUrl: any, title: any, ctx?: {}): Promise<{
        ok: boolean;
        via: string;
    }>;
}
export default githubAdapter;
/**
 * Map a GitHub issue's open|closed state + its labels onto a neutral bucket.
 * @param {string} state           'open' | 'closed'
 * @param {string[]} [labels]      label names on the issue
 * @returns {'todo'|'in_progress'|'done'|'blocked'|'unknown'}
 */
declare function toStateCategory(state: string, labels?: string[]): "todo" | "in_progress" | "done" | "blocked" | "unknown";
/** Build a NeutralTicket from the github.js issue tool projection. */
declare function toNeutral(issue: any, ctx?: {}): {
    id: string;
    key: string;
    title: any;
    body: any;
    state: any;
    stateCategory: "unknown" | "todo" | "in_progress" | "done" | "blocked";
    assignee: any;
    url: any;
    _raw: any;
};
/** Conventional label names this adapter writes for the two open sub-states. */
declare const IN_PROGRESS_LABEL: "in progress";
declare const BLOCKED_LABEL: "blocked";
