From 16cb7449f989891cd6d036660a07bdb9a43eacf8 Mon Sep 17 00:00:00 2001 From: Nick Wade Date: Sun, 4 Jan 2026 21:00:32 -0600 Subject: [PATCH] fix: add support for ACP writeTextFile clientCapability --- packages/opencode/src/acp/agent.ts | 22 +++++++++++++++++++++- packages/opencode/src/acp/types.ts | 3 ++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/acp/agent.ts b/packages/opencode/src/acp/agent.ts index bab4d2b8216..14097efc97d 100644 --- a/packages/opencode/src/acp/agent.ts +++ b/packages/opencode/src/acp/agent.ts @@ -323,13 +323,33 @@ export namespace ACP { } finally { break } + + case "file.edited": + if (this.config.clientCapabilities?.fs?.writeTextFile) { + const filepath = event.properties.file + try { + const content = await Bun.file(filepath).text() + await this.connection.writeTextFile({ + sessionId, + path: filepath, + content, + }) + log.info("synced file edit to ACP client", { filepath, sessionId }) + } catch (err) { + log.error("failed to sync file edit to ACP client", { error: err, filepath, sessionId }) + } + } + break } } }) } async initialize(params: InitializeRequest): Promise { - log.info("initialize", { protocolVersion: params.protocolVersion }) + log.info("initialize", { protocolVersion: params.protocolVersion, clientCapabilities: params.clientCapabilities }) + + // Store client capabilities for use in session event handling + this.config.clientCapabilities = params.clientCapabilities const authMethod: AuthMethod = { description: "Run `opencode auth login` in the terminal", diff --git a/packages/opencode/src/acp/types.ts b/packages/opencode/src/acp/types.ts index 42b23091237..88b14734625 100644 --- a/packages/opencode/src/acp/types.ts +++ b/packages/opencode/src/acp/types.ts @@ -1,4 +1,4 @@ -import type { McpServer } from "@agentclientprotocol/sdk" +import type { ClientCapabilities, McpServer } from "@agentclientprotocol/sdk" import type { OpencodeClient } from "@opencode-ai/sdk/v2" export interface ACPSessionState { @@ -19,4 +19,5 @@ export interface ACPConfig { providerID: string modelID: string } + clientCapabilities?: ClientCapabilities }