export declare const COMPLETION_DURABILITY_VERSION: 1; export declare const COMPLETION_DURABILITY_REGISTRY_KEY: unique symbol; export type CompletionMode = "single" | "parallel" | "chain" | "graph"; export type CompletionKind = "single" | "graph" | "additional" | "failure"; export type CompletionOutcome = "completed" | "failed" | "terminated"; export type CompletionReplyTarget = "main" | "caller"; export interface CompletionTarget { workspaceId: string; sessionId: string; correlationId?: string; } export interface CompletionResource { correlationId: string; publicationId: string; uri: `agent://${string}`; originCwd: string; name?: string; agent?: string; summary: string; outcome: CompletionOutcome; } export interface CompletionDispatchSeed { dispatchId: string; deliveryGroupId: string; reservationId: string; mode: CompletionMode; target: CompletionTarget; replyTarget: CompletionReplyTarget; originCwd: string; expectedTasks: readonly string[]; createdAt: number; } export interface CompletionDispatchHandle { dispatchId: string; reservationId: string; deliveryGroupId: string; } export interface CompletionNotificationRequirement { dispatchId: string; reservationId: string; kind: CompletionKind; requiredAt: number; } export interface CompletionPublicationInput { dispatchId: string; reservationId: string; resource: CompletionResource; stagedAt: number; } export interface CompletionPublicationCommit { dispatchId: string; reservationId: string; publicationId: string; committedAt: number; } export interface CompletionFinalizeInput { dispatchId: string; reservationId: string; kind: CompletionKind; outcome: CompletionOutcome; summary: string; resources: readonly CompletionResource[]; finalizedAt: number; } export interface CompletionIntent { version: typeof COMPLETION_DURABILITY_VERSION; deliveryId: string; dispatchId: string; reservationId: string; mode: CompletionMode; kind: CompletionKind; target: CompletionTarget; replyTarget: CompletionReplyTarget; outcome: CompletionOutcome; summary: string; resources: readonly CompletionResource[]; createdAt: number; finalizedAt: number; contentRevision: string; } export declare function computeCompletionDeliveryId(intent: Pick): string; export declare function computeCompletionIntentRevision(intent: Omit): string; export interface CompletionAppliedReceipt { deliveryId: string; dispatchId: string; target: CompletionTarget; contentRevision: string; appliedAt: number; } export interface CompletionAbandonInput { dispatchId: string; reservationId: string; reason: string; abandonedAt: number; } export interface CompletionDurabilityProvider { beginDispatch(seed: CompletionDispatchSeed): Promise; requireNotification(input: CompletionNotificationRequirement): Promise; stagePublication(input: CompletionPublicationInput): Promise; commitPublication(input: CompletionPublicationCommit): Promise; finalizeDelivery(input: CompletionFinalizeInput): Promise; listRecoverable(target: CompletionTarget): Promise; acknowledgeApplied(receipt: CompletionAppliedReceipt): Promise; abandonDispatch(input: CompletionAbandonInput): Promise; prune(now: number): Promise; } export interface CompletionDurabilityRegistrySnapshot { generation: number; provider?: CompletionDurabilityProvider; } export type CompletionDurabilityRegistryListener = (snapshot: CompletionDurabilityRegistrySnapshot) => void; export interface CompletionDurabilityRegistry { current(): CompletionDurabilityProvider | undefined; snapshot(): CompletionDurabilityRegistrySnapshot; /** Provider generation pinned when the dispatch crossed beginDispatch. */ providerForDispatch(dispatchId: string): CompletionDurabilityProvider | undefined; /** Pin a dispatch to one provider until its delivery is settled or abandoned. */ pinDispatch(dispatchId: string, provider: CompletionDurabilityProvider): () => void; /** Resolve after every dispatch owned by this provider has released its pin. */ waitForProviderIdle?(provider: CompletionDurabilityProvider): Promise; register(provider: CompletionDurabilityProvider): () => void; subscribe(listener: CompletionDurabilityRegistryListener): () => void; } export { CompletionDurabilityRegistryImpl, getCompletionDurabilityRegistry, } from "../../completion-outbox/registry.ts";