import { z } from "zod";
import { type Json } from "./protocol.js";
export declare const inboxTargetSchema: z.ZodUnion<readonly [z.ZodObject<{
    server: z.ZodString;
    workspace: z.ZodString;
    tab: z.ZodString;
    pane: z.ZodString;
    source: z.ZodEnum<{
        claude: "claude";
        codex: "codex";
        copilot: "copilot";
        opencode: "opencode";
        phren: "phren";
    }>;
    session: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
}, z.core.$strip>, z.ZodObject<{
    server: z.ZodString;
    workspace: z.ZodString;
    tab: z.ZodString;
    pane: z.ZodString;
    source: z.ZodEnum<{
        claude: "claude";
        codex: "codex";
        copilot: "copilot";
        opencode: "opencode";
        phren: "phren";
    }>;
    starting: z.ZodLiteral<true>;
    startingToken: z.ZodString;
}, z.core.$strip>]>;
declare const itemSchema: z.ZodObject<{
    id: z.ZodString;
    kind: z.ZodEnum<{
        blocked: "blocked";
        manual: "manual";
        "needs-you": "needs-you";
    }>;
    title: z.ZodString;
    createdAt: z.ZodString;
    updatedAt: z.ZodString;
    state: z.ZodEnum<{
        open: "open";
        resolved: "resolved";
    }>;
    resolvedAt: z.ZodOptional<z.ZodString>;
    resolution: z.ZodOptional<z.ZodString>;
    project: z.ZodOptional<z.ZodString>;
    computer: z.ZodOptional<z.ZodString>;
    target: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
        server: z.ZodString;
        workspace: z.ZodString;
        tab: z.ZodString;
        pane: z.ZodString;
        source: z.ZodEnum<{
            claude: "claude";
            codex: "codex";
            copilot: "copilot";
            opencode: "opencode";
            phren: "phren";
        }>;
        session: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
    }, z.core.$strip>, z.ZodObject<{
        server: z.ZodString;
        workspace: z.ZodString;
        tab: z.ZodString;
        pane: z.ZodString;
        source: z.ZodEnum<{
            claude: "claude";
            codex: "codex";
            copilot: "copilot";
            opencode: "opencode";
            phren: "phren";
        }>;
        starting: z.ZodLiteral<true>;
        startingToken: z.ZodString;
    }, z.core.$strip>]>>;
    dispatch: z.ZodOptional<z.ZodString>;
    actionId: z.ZodOptional<z.ZodString>;
    source: z.ZodOptional<z.ZodString>;
    live: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strict>;
export type InboxItem = z.infer<typeof itemSchema>;
export declare const ownerInboxSchema: z.ZodObject<{
    action: z.ZodDefault<z.ZodEnum<{
        add: "add";
        list: "list";
        resolve: "resolve";
    }>>;
    title: z.ZodOptional<z.ZodString>;
    project: z.ZodOptional<z.ZodString>;
    id: z.ZodOptional<z.ZodString>;
    resolution: z.ZodOptional<z.ZodString>;
    includeResolved: z.ZodOptional<z.ZodBoolean>;
    computer: z.ZodOptional<z.ZodString>;
}, z.core.$strict>;
export interface InboxSource {
    source: string;
    kind: "needs-you" | "blocked";
    title: string;
    project?: string;
    computer?: string;
    target?: z.infer<typeof inboxTargetSchema>;
    dispatch?: string;
    actionId?: string;
}
/** Hook-owned inbox. Return reads do not resolve owner work. Live sources
 * disappearing are retained as no-longer-live until explicitly resolved. */
export declare class OwnerInbox {
    private readonly sources;
    private readonly file;
    private pending;
    constructor(sources?: () => Promise<InboxSource[]>, file?: string);
    private read;
    run(input: unknown): Promise<Json>;
    tick(): Promise<void>;
}
export {};
