import type { Client, CreateTerminalRequest, CreateTerminalResponse, KillTerminalCommandRequest, KillTerminalResponse, ReadTextFileRequest, ReadTextFileResponse, ReleaseTerminalRequest, ReleaseTerminalResponse, RequestPermissionRequest, RequestPermissionResponse, SessionNotification, TerminalOutputRequest, TerminalOutputResponse, WaitForTerminalExitRequest, WaitForTerminalExitResponse, WriteTextFileRequest, WriteTextFileResponse, } from "@zed-industries/agent-client-protocol" import { Log } from "../util/log" export class ACPClient implements Client { private log = Log.create({ service: "acp-client" }) async requestPermission(params: RequestPermissionRequest): Promise { this.log.debug("requestPermission", params) const firstOption = params.options[0] if (!firstOption) { return { outcome: { outcome: "cancelled" } } } return { outcome: { outcome: "selected", optionId: firstOption.optionId, }, } } async sessionUpdate(params: SessionNotification): Promise { this.log.debug("sessionUpdate", { sessionId: params.sessionId }) } async writeTextFile(params: WriteTextFileRequest): Promise { this.log.debug("writeTextFile", { path: params.path }) await Bun.write(params.path, params.content) return { _meta: {} } } async readTextFile(params: ReadTextFileRequest): Promise { this.log.debug("readTextFile", { path: params.path }) const file = Bun.file(params.path) const exists = await file.exists() if (!exists) { throw new Error(`File not found: ${params.path}`) } const content = await file.text() return { content, _meta: {} } } async createTerminal(params: CreateTerminalRequest): Promise { this.log.debug("createTerminal", params) throw new Error("Terminal support not yet implemented") } async terminalOutput(params: TerminalOutputRequest): Promise { this.log.debug("terminalOutput", params) throw new Error("Terminal support not yet implemented") } async releaseTerminal(params: ReleaseTerminalRequest): Promise { this.log.debug("releaseTerminal", params) throw new Error("Terminal support not yet implemented") } async waitForTerminalExit(params: WaitForTerminalExitRequest): Promise { this.log.debug("waitForTerminalExit", params) throw new Error("Terminal support not yet implemented") } async killTerminal(params: KillTerminalCommandRequest): Promise { this.log.debug("killTerminal", params) throw new Error("Terminal support not yet implemented") } }