From fb3ceb0da4e2cd636013c2c36a9c0016c01aa47f Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Mon, 18 Aug 2025 16:29:45 -0600 Subject: Read and write files through Zed (#6169) Co-authored-by: Agus Zubiaga --- .../cli/src/zed-integration/fileSystemService.ts | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 packages/cli/src/zed-integration/fileSystemService.ts (limited to 'packages/cli/src/zed-integration/fileSystemService.ts') diff --git a/packages/cli/src/zed-integration/fileSystemService.ts b/packages/cli/src/zed-integration/fileSystemService.ts new file mode 100644 index 00000000..deb9857f --- /dev/null +++ b/packages/cli/src/zed-integration/fileSystemService.ts @@ -0,0 +1,47 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { FileSystemService } from '@google/gemini-cli-core'; +import * as acp from './acp.js'; + +/** + * ACP client-based implementation of FileSystemService + */ +export class AcpFileSystemService implements FileSystemService { + constructor( + private readonly client: acp.Client, + private readonly sessionId: string, + private readonly capabilities: acp.FileSystemCapability, + private readonly fallback: FileSystemService, + ) {} + + async readTextFile(filePath: string): Promise { + if (!this.capabilities.readTextFile) { + return this.fallback.readTextFile(filePath); + } + + const response = await this.client.readTextFile({ + path: filePath, + sessionId: this.sessionId, + line: null, + limit: null, + }); + + return response.content; + } + + async writeTextFile(filePath: string, content: string): Promise { + if (!this.capabilities.writeTextFile) { + return this.fallback.writeTextFile(filePath, content); + } + + await this.client.writeTextFile({ + path: filePath, + content, + sessionId: this.sessionId, + }); + } +} -- cgit v1.2.3