/**
 * Narrow `CanvasClient` interface + the HTTP implementation over the Canvas
 * CRUD REST API. The interface is the injectable transport seam for tests
 * (mirrors `DriveClient`); the HTTP client is thin because the API already
 * returns each document as clean markdown — no conversion step.
 */
/** A Canvas document as returned by `GET …/documents/{id}?format=markdown`. */
export interface CanvasDocument {
    _id: string;
    title?: string;
    /** Clean markdown (no block-identity comments — this adapter never writes back). */
    content: string;
    /** Opaque revision handle — the per-document invalidation/staleness key. */
    revision: string;
}
/** Reads Canvas documents; the transport seam unit tests fake. */
export interface CanvasClient {
    getDocument(documentId: string): Promise<CanvasDocument>;
}
/** A failed Canvas CRUD request, carrying the HTTP status for dispatch. */
export declare class CanvasRequestError extends Error {
    readonly status: number;
    constructor(message: string, status: number);
}
/**
 * HTTP `CanvasClient` over the Canvas CRUD REST API.
 *
 * `apiBase` is the CRUD path prefix (`…/vX/canvases/<resourceId>/assist`,
 * from `canvasApiBase`). Responses are shape-checked at this boundary so a
 * drifting API surfaces as a clear error here, not a crash downstream.
 */
export declare function createCanvasHttpClient(apiBase: string, token: string): CanvasClient;
