/**
 * Offline / pack-only deploy mode
 * -------------------------------
 *
 * Builds the project the same way a real deploy would, zips the staging
 * tree with the production deploy filter, then optionally writes the zip
 * to disk and/or PUTs it to a caller-provided URL (e.g. a presigned S3
 * URL). No cloud deployment is created, no encryption, no Agentuity API
 * calls, and no agentuity.json / login / DNS requirements.
 *
 *   agentuity deploy --pack-only --log-level=trace
 *   agentuity deploy --upload-url 'https://bucket.s3.../presigned'
 *   agentuity deploy --pack-only --upload-url '...' --pack-output ./out.zip
 */
import type { Logger } from '@agentuity/core';
import { type BuildReportCollector } from '../../../build-report.ts';
import type { DeployOptions, Project } from '../../../types.ts';
/** Stub project fields used when offline deploy has no explicit identity. */
export declare const OFFLINE_DEPLOY_PROJECT_ID = "offline";
export declare const OFFLINE_DEPLOY_ORG_ID = "offline";
export declare const OFFLINE_DEPLOY_REGION = "local";
export interface OfflineDeployIdentity {
    projectId: string;
    orgId: string;
    region: string;
}
/**
 * Resolve project/org/region for offline pack metadata.
 *
 * Precedence (first non-empty wins per field):
 * 1. Explicit CLI flags / params (`--project-id`, `--org-id`, `--region`)
 * 2. Soft-loaded / optional project object (if present)
 * 3. Offline stubs (`offline` / `local`)
 */
export declare function resolveOfflineDeployIdentity(params: {
    projectId?: string | null;
    orgId?: string | null;
    region?: string | null;
    project?: Pick<Project, 'projectId' | 'orgId' | 'region'> | null;
}): OfflineDeployIdentity;
export interface PackOnlyParams {
    /** Optional — offline mode does not require a registered project. */
    project?: Project | null;
    /**
     * Explicit identity overrides (CLI flags / env). Win over `project` and
     * the offline stubs when non-empty.
     */
    projectId?: string;
    orgId?: string;
    region?: string;
    projectDir: string;
    logger: Logger;
    collector: BuildReportCollector;
    deployOptions: DeployOptions;
    hasReportFile: boolean;
    packOutput?: string;
    /** When set, PUT the plain deployment zip to this URL after packaging. */
    uploadUrl?: string;
    json?: boolean;
}
export interface PackOnlyResult {
    success: true;
    projectId: string;
    /** No cloud deployment is created in pack-only / offline mode. */
    deploymentId?: undefined;
    /** Present when a local zip was retained (pack-only and/or --pack-output). */
    packPath?: string;
    fileCount: number;
    skippedCount: number;
    sizeBytes: number;
    stagingDir: string;
    /** True when monorepo staging applied `.agentuityignore` patterns. */
    usedIgnorePatterns: boolean;
    /** True when the zip was uploaded to `--upload-url`. */
    uploaded?: boolean;
    logs: string[];
}
/**
 * Resolve where the pack-only zip should land.
 * Default: `<projectDir>/agentuity-deploy.zip`.
 */
export declare function resolvePackOutputPath(projectDir: string, packOutput?: string): string;
/**
 * Resolve pack-only zip path, refusing to write inside the staging tree
 * (which would race the zip scan). Exported for unit tests.
 */
export declare function resolveSafePackOutput(stagingDir: string, requested: string, logger: Logger, json?: boolean): string;
/**
 * PUT a local zip to a presigned/one-time URL (plain zip, no encryption).
 * Exported for unit tests.
 */
export declare function uploadDeploymentZip(params: {
    zipPath: string;
    uploadUrl: string;
    logger: Pick<Logger, 'debug' | 'trace'>;
    signal?: AbortSignal;
}): Promise<void>;
/**
 * Build + package without Agentuity cloud. Optionally writes a local zip
 * and/or PUTs it to `--upload-url`. Flushes the build report collector
 * when `--report-file` is set (success or failure).
 */
export declare function runPackOnly(params: PackOnlyParams): Promise<PackOnlyResult>;
//# sourceMappingURL=pack.d.ts.map