import { EventEmitter } from 'node:events'; import type { SubagentHandle, SubagentResult } from './subagent.js'; import type { TraceSink } from './trace/index.js'; import type { BackgroundJob, BackgroundJobProvenance } from './background-registry.types.js'; export { BackgroundJobCapError } from './background-registry.cap.js'; export { MAX_TRANSCRIPT_TAIL_BYTES } from './background-registry.transcript.js'; export type { BackgroundJob, BackgroundJobProvenance, BackgroundJobStatus } from './background-registry.types.js'; export interface BackgroundRegistryOptions { traceWriter?: TraceSink | undefined; maxConcurrentJobs?: number; } export interface RegisterArgs { handle: SubagentHandle; prompt: string; model: string; provenance?: BackgroundJobProvenance; parentSessionId?: string | undefined; onCleanup?: () => Promise; onSettled?: () => void; } export interface BackgroundRegistryEvents { started: [job: BackgroundJob]; settled: [job: BackgroundJob]; joined: [job: BackgroundJob]; } export declare class BackgroundAgentRegistry extends EventEmitter { private readonly jobs; private counter; private traceWriter; private readonly maxConcurrentJobs; constructor(options?: BackgroundRegistryOptions); setTraceWriter(writer: TraceSink | undefined): void; register(args: RegisterArgs): BackgroundJob; adoptRunning(args: RegisterArgs & { runPromise: Promise; }): BackgroundJob; private createJobEntry; get(jobId: string): BackgroundJob | undefined; list(): readonly BackgroundJob[]; join(jobId: string): Promise; markDelivered(jobId: string): void; cancelJob(jobId: string): Promise; cancelModelJob(jobId: string, reason: string): Promise; cancelAll(): Promise; appendTranscript(jobId: string, chunk: string): void; getTranscript(jobId: string): string | undefined; getHandle(jobId: string): SubagentHandle | undefined; getTouchedFiles(jobId: string): readonly string[] | undefined; private nextJobId; private markTerminal; private statusFromResult; private snapshot; }