import type { DevToolsSys } from "../types";
import type { CLIArgs } from "./index";
import { type Credentials } from "./credentials";
import { type Checkpoint } from "./incremental-tsc";
import type { ApplyActionsResult, Attachment, CodebaseSearchResponse, ContentMessageItemToolResult, CustomInstruction, GenerateCompletionStep, GenerateUserMessage, ProjectFile, UserContext } from "$/ai-utils";
import prettier from "prettier";
interface Turn {
    completionId: string;
    nextUrl: string | undefined;
    originalFiles: {
        path: string;
        content: Uint8Array | null;
    }[];
    isUserMessage: boolean;
    toolResults: ContentMessageItemToolResult[];
    sentiment?: "positive" | "negative" | "undo";
    applyResults: ApplyActionsResult[];
    projectFiles: ProjectFile[];
    userInput: UserInput;
}
type State = "unknown" | "initial-with-url" | "initial-without-url" | "generating" | "success" | "abort" | "error";
export interface SessionContext {
    sessionId: string;
    turns: Turn[];
    selectedFilePaths: Map<string, number>;
    customInstructions: CustomInstruction[];
    userContext: UserContext;
    prettierConfig: prettier.Config | null;
    state: State;
}
export interface UserInput {
    userPrompt: string;
    attachments: Attachment[];
    sentiment: "positive" | "negative" | "undo";
    files: ProjectFile[];
    searchResponse: CodebaseSearchResponse | null;
    rerankFiles?: number;
    mostRelevantFile: string | null;
    role: "user" | "agent";
}
export declare class CodeGenSession {
    #private;
    constructor(sys: DevToolsSys, credentials: Credentials, args: CLIArgs, position: string, initialUrl?: string, mode?: "quality" | "quality-v3" | "fast");
    setDebug(debug: boolean): void;
    getAllFiles(): Promise<string[]>;
    isNextPage(): boolean;
    getSessionId(): Promise<string>;
    getSpaceId(): string | undefined;
    undoLastUserMessage(dryRun?: boolean): Promise<string[]>;
    getLastCompletionId(): string | undefined;
    getCurrentState(): State;
    getLastTurn(): Turn | undefined;
    getNextUrl(): string | undefined;
    getNextMessage(): Promise<GenerateUserMessage>;
    sendFeedback(sentiment: "positive" | "negative" | "undo", message?: string, lastCompletionId?: string | undefined): Promise<void>;
    hasUndoChanges(): Promise<boolean>;
    isBusy(): boolean;
    sendMessage(message: GenerateUserMessage): void;
    isEventLoopRunning(): boolean;
    getTurns(): void;
    getSessionContext(): Promise<SessionContext>;
    abort(): void;
    stopEventLoop(): void;
    startEventLoop(onStep: (step: GenerateCompletionStep) => void): Promise<void>;
    agentCompletion(userMessage: GenerateUserMessage, baselineCheckpoint: Checkpoint, signal: AbortSignal | undefined, onStep: (step: GenerateCompletionStep) => Promise<void> | void): Promise<Checkpoint>;
    getUserInput(userMessage: GenerateUserMessage, signal: AbortSignal | undefined): Promise<UserInput>;
}
export declare const createSessionContext: (sys: DevToolsSys) => Promise<SessionContext>;
export declare function transformStream(body: ReadableStream<Uint8Array> | null): AsyncGenerator<string, void, unknown>;
export declare function getUserContext(sys: DevToolsSys): Promise<UserContext>;
export declare function makeAsyncIterator<T>(): readonly [AsyncGenerator<T, void, void>, (event: T) => void, () => void];
export {};
