summaryrefslogtreecommitdiff
path: root/packages/cli/src/zed-integration/fileSystemService.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/zed-integration/fileSystemService.ts')
-rw-r--r--packages/cli/src/zed-integration/fileSystemService.ts47
1 files changed, 47 insertions, 0 deletions
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<string> {
+ 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<void> {
+ if (!this.capabilities.writeTextFile) {
+ return this.fallback.writeTextFile(filePath, content);
+ }
+
+ await this.client.writeTextFile({
+ path: filePath,
+ content,
+ sessionId: this.sessionId,
+ });
+ }
+}