import { type IssueEnvelope, type NormalizedIssueEnvelope } from './types.js';
export interface AsanaAdapterConfig {
    accessToken?: string;
    projectGid?: string;
    workspaceGid?: string;
}
/**
 * Normalize a raw Asana task into a canonical IssueEnvelope.
 */
export declare function normalizeAsanaTask(rawTask: unknown): IssueEnvelope;
/**
 * Normalize a raw Asana task into a PMO-ready NormalizedIssueEnvelope.
 */
export declare function normalizeAsanaTaskToEnvelope(rawTask: unknown): NormalizedIssueEnvelope;
/**
 * Build a PMO ticket description from a NormalizedIssueEnvelope.
 */
export declare function buildAsanaTicketDescription(envelope: NormalizedIssueEnvelope): string;
/**
 * Build ticket metadata from a NormalizedIssueEnvelope for traceability.
 */
export declare function buildAsanaMetadata(envelope: NormalizedIssueEnvelope): Record<string, string>;
/**
 * Build a spawn context message from a NormalizedIssueEnvelope.
 */
export declare function buildAsanaSpawnContextMessage(envelope: NormalizedIssueEnvelope, additionalMessage?: string): string;
/**
 * Build a CLI command string for selecting a specific Asana task.
 */
export declare function buildAsanaTaskChoiceCommand(taskGid: string, projectId?: string): string;
/**
 * Fetch a single Asana task by GID and normalize it.
 */
export declare function getAsanaTaskByGid(configInput: AsanaAdapterConfig, taskGid: string, options?: {
    fetchImpl?: typeof fetch;
}): Promise<NormalizedIssueEnvelope | null>;
/**
 * Fetch and normalize Asana tasks from a project into NormalizedIssueEnvelopes.
 */
export declare function listAsanaTasks(configInput: AsanaAdapterConfig, options?: {
    limit?: number;
    fetchImpl?: typeof fetch;
}): Promise<NormalizedIssueEnvelope[]>;
/**
 * Import an Asana task into PMO as a linked ticket.
 */
export declare function importAsanaTaskToPmo(storage: {
    listTickets(projectId: string): Promise<Array<{
        id: string;
        metadata?: Record<string, string>;
    }>>;
    createTicket(projectId: string, input: {
        title: string;
        description: string;
        priority?: string;
        category?: string;
        labels: string[];
        metadata: Record<string, string>;
    }): Promise<{
        id: string;
    }>;
    updateTicket(ticketId: string, input: {
        title: string;
        description: string;
        priority?: string;
        category?: string;
        labels: string[];
        metadata: Record<string, string>;
    }): Promise<{
        id: string;
    }>;
}, projectId: string, envelope: NormalizedIssueEnvelope): Promise<{
    ticketId: string;
    created: boolean;
}>;
