import * as stream from "node:stream"; import { AgentSideConnection, ndJsonStream, type Stream } from "@agentclientprotocol/sdk"; import type { AgentSession } from "../../session/agent-session"; import { AcpAgent } from "./acp-agent"; export type AcpSessionFactory = (cwd: string) => Promise; export function createAcpConnection( transport: Stream, createSession: AcpSessionFactory, initialSession?: AgentSession, ): AgentSideConnection { return new AgentSideConnection(conn => new AcpAgent(conn, createSession, initialSession), transport); } export async function runAcpMode(createSession: AcpSessionFactory, initialSession?: AgentSession): Promise { const input = stream.Writable.toWeb(process.stdout); const output = stream.Readable.toWeb(process.stdin); const transport = ndJsonStream(input, output); const connection = createAcpConnection(transport, createSession, initialSession); await connection.closed; process.exit(0); }