import type { NodeKeyPair } from '@forgezero/runtime/identity'; import type { AgentOperationTelemetry } from './telemetry-runtime'; export type MigrationNetwork = 'private-lan' | 'cloudflare-warp'; export type MigrationEvidenceProfile = 'forgezero-platform' | 'tenant-managed'; export type MigrationAction = 'network-ready' | 'database-member-ready' | 'api-ready' | 'source-drained' | 'source-stopped'; export interface MigrationEvidence { targetAgentReady?: boolean; privateNetworkReady?: boolean; warpConnected?: boolean; databaseMemberHealthy?: boolean; apiHealthy?: boolean; sourceDrained?: boolean; sourceStopped?: boolean; } export interface RemoteMigrationClaim { migrationKey: string; action: MigrationAction; network: MigrationNetwork; evidenceProfile?: MigrationEvidenceProfile; claimToken: string; claimExpiresAtTs: number; attempt: number; /** Signed controller-selected private peers used only for reachability probes. */ peerPrivateAddresses: readonly string[]; } export interface MigrationPullOptions { apiUrl: string; nodeKey: string; keys: NodeKeyPair; run(claim: RemoteMigrationClaim): Promise; fetch?: (input: URL, init: RequestInit) => Promise; intervalMs?: number; requestTimeoutMs?: number; completionAttempts?: number; renewRetryMs?: number; sleep?: (ms: number) => Promise; now?: () => number; setTimer?: (callback: () => void, ms: number) => unknown; clearTimer?: (handle: unknown) => void; onEvent?: (event: string, detail?: unknown) => void; telemetry?: AgentOperationTelemetry; canClaim?: () => boolean; } export type MigrationPullResult = { status: 'idle'; } | { status: 'completed'; claim: RemoteMigrationClaim; evidence: MigrationEvidence; } | { status: 'failed'; claim: RemoteMigrationClaim; reason: string; }; /** Claim one lifecycle action, await it, and acknowledge only its fenced claim. */ export declare function pullMigrationOnce(options: MigrationPullOptions): Promise; export declare function startMigrationPull(options: MigrationPullOptions): { stop(): Promise; pause(): Promise; resume(): void; readonly active: boolean; };