mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-11 22:51:00 -07:00
50 lines
1.3 KiB
TypeScript
50 lines
1.3 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 {
|
||
|
|
EXTENSIONS_CONFIG_FILENAME,
|
||
|
|
INSTALL_METADATA_FILENAME,
|
||
|
|
} from '../config/extension.js';
|
||
|
|
import {
|
||
|
|
type MCPServerConfig,
|
||
|
|
type ExtensionInstallMetadata,
|
||
|
|
} from '@google/gemini-cli-core';
|
||
|
|
|
||
|
|
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,
|
||
|
|
} = {}): 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 }),
|
||
|
|
);
|
||
|
|
|
||
|
|
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;
|
||
|
|
}
|