import type { CheckResult, ProductClientConfig, TestResult } from './types';
export declare class ProductClient {
    private baseUrl;
    private routes;
    private cookies;
    private timeoutMs;
    constructor(config: ProductClientConfig);
    private route;
    /**
     * Single HTTP boundary for every JSON request. Aborts after `timeoutMs`,
     * checks `res.ok` BEFORE parsing, and throws `${method} ${path} failed:
     * HTTP ${status} — ${body}` on a non-ok response so a 4xx/5xx error body
     * can never be parsed as a success shape. Callers inspect the resolved
     * value only after a successful return.
     */
    private request;
    /**
     * Read a required collection field. A missing/non-array field is a contract
     * violation (wrong route, drift, partial body) — surface it loud instead of
     * masking it as a healthy empty set. A genuinely empty `[]` passes through.
     */
    private requireArray;
    signup(name: string, email: string, password: string): Promise<{
        userId: string;
    }>;
    login(email: string, password: string): Promise<void>;
    createWorkspace(name: string, type?: string): Promise<string>;
    createThread(workspaceId: string): Promise<string>;
    chat(workspaceId: string, threadId: string, content: string, _opts?: {
        blockPatterns?: RegExp[];
    }): Promise<{
        text: string;
        blocks: {
            type: string;
            title: string;
        }[];
    }>;
    getTasks(workspaceId: string): Promise<{
        id: string;
        title: string;
        status: string;
        priority: string;
    }[]>;
    getEvents(workspaceId: string): Promise<{
        id: string;
        title: string;
        type: string;
    }[]>;
    getApprovals(workspaceId: string): Promise<{
        id: string;
        title: string;
        status: string;
        type: string;
    }[]>;
    getVaultTree(workspaceId: string): Promise<string[]>;
    approveAction(workspaceId: string, id: string): Promise<void>;
    rejectAction(workspaceId: string, id: string, reason: string): Promise<void>;
    getGenerations(workspaceId: string): Promise<{
        id: string;
        type: string;
        prompt: string;
    }[]>;
    /** Generic GET for custom routes */
    get(path: string): Promise<Record<string, unknown>>;
    /** Generic POST for custom routes */
    post(path: string, body: Record<string, unknown>): Promise<Record<string, unknown>>;
    /** Generic PATCH for custom routes */
    patch(path: string, body: Record<string, unknown>): Promise<Record<string, unknown>>;
}
/**
 * Run a full e2e workflow test against a live product.
 *
 * The `workflow` callback receives a ProductClient and returns CheckResults.
 * This is the generic harness — each agent defines its own workflow steps.
 */
export declare function runE2EWorkflow(client: ProductClient, name: string, workflow: (client: ProductClient) => Promise<CheckResult[]>): Promise<TestResult>;
//# sourceMappingURL=client.d.ts.map