/**
 * Create Feature From Remote Use Case
 *
 * Composite use case that chains ImportGitHubRepositoryUseCase with
 * CreateFeatureUseCase. Enables creating a feature on a remote GitHub
 * repo in a single command — clone (or fork), register, then create feature.
 *
 * Provides two execution modes:
 * - execute(): synchronous full flow for CLI
 * - createRecord() + initializeAndSpawn(): two-phase for Web UI (fast response + background work)
 */
import type { Feature } from '../../../../domain/generated/output.js';
import type { ApprovalGates, Attachment } from '../../../../domain/generated/output.js';
import type { CloneOptions, ForkOptions } from '../../../ports/output/services/github-repository-service.interface.js';
import { ImportGitHubRepositoryUseCase } from '../../repositories/import-github-repository.use-case.js';
import { CreateFeatureUseCase } from './create-feature.use-case.js';
import type { CreateFeatureResult, CreateRecordResult } from './types.js';
export interface CreateFeatureFromRemoteInput {
    /** GitHub URL or owner/repo shorthand */
    remoteUrl: string;
    /** Override clone destination directory */
    cloneDest?: string;
    /** Default base directory for clones (from settings) */
    defaultCloneDir?: string;
    /** Options for the clone subprocess */
    cloneOptions?: CloneOptions;
    /** Options for fork operations */
    forkOptions?: ForkOptions;
    userInput: string;
    approvalGates?: ApprovalGates;
    push?: boolean;
    openPr?: boolean;
    parentId?: string;
    name?: string;
    description?: string;
    fast?: boolean;
    pending?: boolean;
    agentType?: string;
    model?: string;
    attachments?: Attachment[];
    sessionId?: string;
    attachmentPaths?: string[];
}
export declare class CreateFeatureFromRemoteUseCase {
    private readonly importUseCase;
    private readonly createFeatureUseCase;
    constructor(importUseCase: ImportGitHubRepositoryUseCase, createFeatureUseCase: CreateFeatureUseCase);
    /**
     * Full synchronous execution: import repo then create feature.
     * Used by the CLI which shows a spinner and needs everything done before returning.
     */
    execute(input: CreateFeatureFromRemoteInput): Promise<CreateFeatureResult>;
    /**
     * Phase 1 (fast): import repo + create DB record. Returns immediately with real feature ID.
     * Used by the Web UI for optimistic display.
     */
    createRecord(input: CreateFeatureFromRemoteInput): Promise<CreateRecordResult>;
    /**
     * Phase 2 (background): metadata generation, worktree, spec, agent spawn.
     * Fire-and-forget from the Web UI.
     */
    initializeAndSpawn(feature: Feature, input: CreateFeatureFromRemoteInput, shouldSpawn: boolean): Promise<{
        warning?: string;
        updatedFeature: Feature;
    }>;
}
//# sourceMappingURL=create-feature-from-remote.use-case.d.ts.map