import type { AcpVirtualWorkspaceView } from './virtual-catalog.js'; import type { AcpClientLike, AcpSessionState, JsonRecord, PendingApproval } from './virtual-contract.js'; import { AsyncValueQueue } from './virtual-contract.js'; /** Collaborates with one AcpVirtualHarness; never creates a second session or connection state. */ export interface AcpEventCarrierContext { readonly workspaceStreams: Set; readonly visibleWorkspaces: () => AcpVirtualWorkspaceView[]; readonly controlStreams: Set; readonly eventStreams: Map; readonly selectedWorkspaceId: string | undefined; readonly workspaceById: Map; readonly backendLabel: () => string; readonly pendingApprovals: Map; readonly client: AcpClientLike; readonly sessions: Map; readonly nextProjectionSeq: () => number; readonly archivedSessionIds: ReadonlySet; } export declare class AcpEventCarrier { private readonly context; constructor(context: AcpEventCarrierContext); workspaceFollow(signal: AbortSignal): Promise>; sessionControl(signal: AbortSignal): Promise>; /** * Background jobs belong to the Host Harness session, not to a backend-scoped * virtual Workspace. The native session header mounts a job roster stream as * soon as a Session opens, so answer it with an authoritative empty roster * instead of a terminal `method-not-found` failure that tears the page down. */ emptyJobStream(endpoint: 'job/list' | 'job/follow', signal: AbortSignal): AsyncIterable; remoteEvents(signal: AbortSignal): Promise>; emitRemoteEvent(event: string, args: unknown[]): void; emitApproval(input: { eventId: string; agentId: string; request: JsonRecord; }): void; answerRemoteEvent(args: JsonRecord, signal: AbortSignal): Promise; publishProjection(sessionId: string, key: string, value: unknown, seq?: number): void; } //# sourceMappingURL=virtual-event-carrier.d.ts.map