import type { Transport } from '../core/transport.js'; import type { StdoutMessage } from '../types/control.js'; import type { DaemonWireSessionMessage } from './protocol.js'; import type { DaemonConnection } from './daemon-connection.js'; import type { DiagnosticsSink } from '../core/sdk-diagnostics.js'; export type DaemonSessionTransportOptions = { workerArgs: string[]; cwd?: string; configDir?: string; cleanup?: () => void; /** * 由 DaemonConnection.createSessionTransport 注入,调用方不需要传。 * 会话级记录一律带 sessionId——daemon 是多会话共用一条连接,不带归属的日志无法用。 */ diagnostics?: DiagnosticsSink; }; export declare class DaemonSessionTransport implements Transport { private readonly connection; private readonly options; private readonly messages; private readonly pendingMessages; private initializePromise; private sessionId; private flushingPendingMessages; private inputEnded; private resultReceived; private commandLifecycleSupported; private readonly pendingCommandUuids; private closed; private cleaned; private releasePromise; private closePromise; constructor(connection: DaemonConnection, options: DaemonSessionTransportOptions); initialize(): Promise; write(data: string): void; readMessages(): AsyncGenerator; endInput(): void; close(): Promise; isReady(): boolean; acceptOutput(message: DaemonWireSessionMessage): void; fail(error: unknown): void; private open; private failAndRelease; /** 会话级记录一律带 sessionId;daemon 多会话共用一条连接,不带归属无法排查。 */ private record; private startRelease; private releaseSessionOnce; private releaseSession; private trackOutboundCommand; private observeCapabilities; private updateCommandLifecycleCapability; private observeCommandLifecycle; private maybeCloseAfterResult; private performClose; /** 幂等地置 closed 并跑一次 cleanup;performClose 的成功与失败两条出口共用。 */ private markClosed; private cleanup; }