mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-14 08:01:02 -07:00
121 lines
3.1 KiB
TypeScript
121 lines
3.1 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import * as path from 'node:path';
|
|
import * as os from 'node:os';
|
|
import * as crypto from 'node:crypto';
|
|
import * as fs from 'node:fs';
|
|
|
|
export const GEMINI_DIR = '.gemini';
|
|
export const GOOGLE_ACCOUNTS_FILENAME = 'google_accounts.json';
|
|
export const OAUTH_FILE = 'oauth_creds.json';
|
|
const TMP_DIR_NAME = 'tmp';
|
|
const BIN_DIR_NAME = 'bin';
|
|
|
|
export class Storage {
|
|
private readonly targetDir: string;
|
|
|
|
constructor(targetDir: string) {
|
|
this.targetDir = targetDir;
|
|
}
|
|
|
|
static getGlobalGeminiDir(): string {
|
|
const homeDir = os.homedir();
|
|
if (!homeDir) {
|
|
return path.join(os.tmpdir(), '.gemini');
|
|
}
|
|
return path.join(homeDir, GEMINI_DIR);
|
|
}
|
|
|
|
static getMcpOAuthTokensPath(): string {
|
|
return path.join(Storage.getGlobalGeminiDir(), 'mcp-oauth-tokens.json');
|
|
}
|
|
|
|
static getGlobalSettingsPath(): string {
|
|
return path.join(Storage.getGlobalGeminiDir(), 'settings.json');
|
|
}
|
|
|
|
static getInstallationIdPath(): string {
|
|
return path.join(Storage.getGlobalGeminiDir(), 'installation_id');
|
|
}
|
|
|
|
static getGoogleAccountsPath(): string {
|
|
return path.join(Storage.getGlobalGeminiDir(), GOOGLE_ACCOUNTS_FILENAME);
|
|
}
|
|
|
|
static getUserCommandsDir(): string {
|
|
return path.join(Storage.getGlobalGeminiDir(), 'commands');
|
|
}
|
|
|
|
static getGlobalMemoryFilePath(): string {
|
|
return path.join(Storage.getGlobalGeminiDir(), 'memory.md');
|
|
}
|
|
|
|
static getGlobalTempDir(): string {
|
|
return path.join(Storage.getGlobalGeminiDir(), TMP_DIR_NAME);
|
|
}
|
|
|
|
static getGlobalBinDir(): string {
|
|
return path.join(Storage.getGlobalTempDir(), BIN_DIR_NAME);
|
|
}
|
|
|
|
getGeminiDir(): string {
|
|
return path.join(this.targetDir, GEMINI_DIR);
|
|
}
|
|
|
|
getProjectTempDir(): string {
|
|
const hash = this.getFilePathHash(this.getProjectRoot());
|
|
const tempDir = Storage.getGlobalTempDir();
|
|
return path.join(tempDir, hash);
|
|
}
|
|
|
|
ensureProjectTempDirExists(): void {
|
|
fs.mkdirSync(this.getProjectTempDir(), { recursive: true });
|
|
}
|
|
|
|
static getOAuthCredsPath(): string {
|
|
return path.join(Storage.getGlobalGeminiDir(), OAUTH_FILE);
|
|
}
|
|
|
|
getProjectRoot(): string {
|
|
return this.targetDir;
|
|
}
|
|
|
|
private getFilePathHash(filePath: string): string {
|
|
return crypto.createHash('sha256').update(filePath).digest('hex');
|
|
}
|
|
|
|
getHistoryDir(): string {
|
|
const hash = this.getFilePathHash(this.getProjectRoot());
|
|
const historyDir = path.join(Storage.getGlobalGeminiDir(), 'history');
|
|
return path.join(historyDir, hash);
|
|
}
|
|
|
|
getWorkspaceSettingsPath(): string {
|
|
return path.join(this.getGeminiDir(), 'settings.json');
|
|
}
|
|
|
|
getProjectCommandsDir(): string {
|
|
return path.join(this.getGeminiDir(), 'commands');
|
|
}
|
|
|
|
getProjectTempCheckpointsDir(): string {
|
|
return path.join(this.getProjectTempDir(), 'checkpoints');
|
|
}
|
|
|
|
getExtensionsDir(): string {
|
|
return path.join(this.getGeminiDir(), 'extensions');
|
|
}
|
|
|
|
getExtensionsConfigPath(): string {
|
|
return path.join(this.getExtensionsDir(), 'gemini-extension.json');
|
|
}
|
|
|
|
getHistoryFilePath(): string {
|
|
return path.join(this.getProjectTempDir(), 'shell_history');
|
|
}
|
|
}
|