MCP Terminal Server

/** * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { ANALYTICS_OPT_OUT_CONFIG_TAG, ConfigEvent, getUserSettings, logger, record, setUserSettings, } from '@genkit-ai/tools-common/utils'; import * as clc from 'colorette'; import { Command } from 'commander'; const CONFIG_TAGS: Record< string, (value: string) => string | boolean | number > = { [ANALYTICS_OPT_OUT_CONFIG_TAG]: (value) => { let o: boolean | undefined; try { o = JSON.parse(value); } finally { if (typeof o !== 'boolean') throw new Error('Expected boolean'); return o; } }, }; export const config = new Command('config'); config .description('set development environment configuration') .command('get') .argument('<tag>', `The config tag to get. One of [${readableTagsHint()}]`) .action((tag) => { if (!CONFIG_TAGS[tag]) { logger.error( `Unknown config tag "${clc.bold(tag)}.\nValid options: ${readableTagsHint()}` ); return; } const userSettings = getUserSettings(); if (userSettings[tag] !== undefined) { logger.info(userSettings[tag]); } else { logger.info(clc.italic('(unset)')); } }); config .command('set') .argument('<tag>', `The config tag to get. One of [${readableTagsHint()}]`) .argument('<value>', 'The value to set tag to') .action(async (tag, value) => { if (!CONFIG_TAGS[tag]) { logger.error( `Unknown config tag "${clc.bold(tag)}.\nValid options: ${readableTagsHint()}` ); return; } let parsedValue: string | boolean | number; try { parsedValue = CONFIG_TAGS[tag](value); } catch (e: any) { logger.error(`Invalid type for "${clc.bold(tag)}.\n${e.message}`); return; } await record(new ConfigEvent(tag)); const userSettings = getUserSettings(); setUserSettings({ ...userSettings, [tag]: parsedValue, }); logger.info(`Set "${clc.bold(tag)}" to "${clc.bold(value)}".`); }); function readableTagsHint() { return Object.keys(CONFIG_TAGS).map(clc.bold).join(', '); }