mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-12 07:01:09 -07:00
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import * as fs from 'node:fs';
|
|
import * as path from 'node:path';
|
|
import {
|
|
type MCPServerConfig,
|
|
type ExtensionInstallMetadata,
|
|
type ExtensionSetting,
|
|
type CustomTheme,
|
|
} from '@google/gemini-cli-core';
|
|
import {
|
|
EXTENSIONS_CONFIG_FILENAME,
|
|
INSTALL_METADATA_FILENAME,
|
|
} from '../config/extensions/variables.js';
|
|
|
|
export function createExtension({
|
|
extensionsDir = 'extensions-dir',
|
|
name = 'my-extension',
|
|
version = '1.0.0',
|
|
addContextFile = false,
|
|
contextFileName = undefined as string | undefined,
|
|
mcpServers = {} as Record<string, MCPServerConfig>,
|
|
installMetadata = undefined as ExtensionInstallMetadata | undefined,
|
|
settings = undefined as ExtensionSetting[] | undefined,
|
|
themes = undefined as CustomTheme[] | undefined,
|
|
} = {}): string {
|
|
const extDir = path.join(extensionsDir, name);
|
|
fs.mkdirSync(extDir, { recursive: true });
|
|
fs.writeFileSync(
|
|
path.join(extDir, EXTENSIONS_CONFIG_FILENAME),
|
|
JSON.stringify({
|
|
name,
|
|
version,
|
|
contextFileName,
|
|
mcpServers,
|
|
settings,
|
|
themes,
|
|
}),
|
|
);
|
|
|
|
if (addContextFile) {
|
|
fs.writeFileSync(path.join(extDir, 'GEMINI.md'), 'context');
|
|
}
|
|
|
|
if (contextFileName) {
|
|
fs.writeFileSync(path.join(extDir, contextFileName), 'context');
|
|
}
|
|
|
|
if (installMetadata) {
|
|
fs.writeFileSync(
|
|
path.join(extDir, INSTALL_METADATA_FILENAME),
|
|
JSON.stringify(installMetadata),
|
|
);
|
|
}
|
|
return extDir;
|
|
}
|