Genkit MCP

Official
Apache 2.0
127
1,175
/** * 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 { findServersDir, logger, waitUntilUnresponsive, } from '@genkit-ai/tools-common/utils'; import axios from 'axios'; import * as clc from 'colorette'; import { Command } from 'commander'; import fs from 'fs/promises'; import path from 'path'; import { DevToolsInfo, isValidDevToolsInfo } from './ui-start'; /** Command to stop the Genkit Developer UI. */ export const uiStop = new Command('ui:stop') .description('stops any running Genkit Developer UI in this directory') .action(async () => { const serversDir = await findServersDir(); const toolsJsonPath = path.join(serversDir, 'tools.json'); try { const toolsJsonContent = await fs.readFile(toolsJsonPath, 'utf-8'); const serverInfo = JSON.parse(toolsJsonContent) as DevToolsInfo; if (isValidDevToolsInfo(serverInfo)) { // Check if server is healthy. If it's not, metadata file is stale. try { await axios.get(`${serverInfo.url}/api/__health`); } catch { await fs.unlink(toolsJsonPath); logger.info('Genkit Developer UI is not running in this directory.'); return; } // Kill the server and wait until it no longer responds as healthy then clean up metadata file. try { logger.info('Stopping...'); await axios.post(`${serverInfo.url}/api/__quitquitquit`); if (await waitUntilUnresponsive(serverInfo.url)) { await fs.unlink(toolsJsonPath); logger.info(clc.green('\n Genkit Developer UI is stopped.')); logger.info(' To start the UI, run `genkit ui:start`.\n'); } else { logger.info('Failed to stop running UI before timing out.'); } } catch { logger.info('Failed to stop Genkit Developer UI.'); } } else { logger.debug('tools.json is malformed.'); await fs.unlink(toolsJsonPath); logger.info('Genkit Developer UI is not running in this directory.'); } } catch { logger.info('Genkit Developer UI is not running in this directory.'); } });