From 151a9ca20310ca83b414e9f4cc90f0797fc12714 Mon Sep 17 00:00:00 2001 From: alvaro Date: Mon, 9 Jun 2025 11:05:28 +0200 Subject: [PATCH] Manage lazy loading of configurations with try-catch --- package.json | 2 +- src/server.ts | 15 ++++++++++----- src/utils.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 43ff09e..0e62759 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "dev": "node --loader ts-node/esm src/index.ts", "build": "tsc && node -e \"require('fs').chmodSync('dist/index.js', '755')\"", "type-check": "tsc --noEmit", - "inspector": "npx @modelcontextprotocol/inspector dist/index.js" + "inspector": "npx @modelcontextprotocol/inspector node --env-file=.env dist/index.js" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.12.1", diff --git a/src/server.ts b/src/server.ts index 95bb82a..04371b8 100644 --- a/src/server.ts +++ b/src/server.ts @@ -12,7 +12,6 @@ import { YepCodeEnv, Log, YepCodeApi, - YepCodeApiManager, YepCodeRun, Execution, YepCodeApiConfig, @@ -30,7 +29,13 @@ import { GetExecutionSchema, } from "./types.js"; import { z } from "zod"; -import { getVersion, isEmpty } from "./utils.js"; +import { + getVersion, + isEmpty, + YepCodeApiFactory, + YepCodeEnvFactory, + YepCodeRunFactory, +} from "./utils.js"; import Logger from "./logger.js"; const RUN_PROCESS_TOOL_NAME_PREFIX = "run_ycp_"; @@ -77,9 +82,9 @@ class YepCodeMcpServer extends Server { this.setupErrorHandling(); try { - this.yepCodeRun = new YepCodeRun(config); - this.yepCodeEnv = new YepCodeEnv(config); - this.yepCodeApi = YepCodeApiManager.getInstance(config); + this.yepCodeRun = YepCodeRunFactory.create(config); + this.yepCodeEnv = YepCodeEnvFactory.create(config); + this.yepCodeApi = YepCodeApiFactory.create(config); this.logger = new Logger(this.yepCodeApi.getTeamId(), { logsToStderr, }); diff --git a/src/utils.ts b/src/utils.ts index cb311e0..64df996 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,6 +1,46 @@ import { fileURLToPath } from "url"; import { join, dirname } from "path"; import { readFileSync } from "fs"; +import { YepCodeApi, YepCodeEnv, YepCodeRun } from "@yepcode/run"; +import { YepCodeApiConfig } from "@yepcode/run"; + +export const YepCodeEnvFactory = { + create: (config: YepCodeApiConfig) => { + try { + return new YepCodeEnv(config); + } catch (error) { + return { + getEnvVars: async () => [], + } as unknown as YepCodeEnv; + } + }, +}; + +export const YepCodeRunFactory = { + create: (config: YepCodeApiConfig) => { + try { + return new YepCodeRun(config); + } catch (error) { + return {} as YepCodeRun; + } + }, +}; + +export const YepCodeApiFactory = { + create: (config: YepCodeApiConfig) => { + try { + return new YepCodeApi(config); + } catch (error) { + return { + getTeamId: async () => "not-set", + getProcesses: async () => ({ + data: [], + hasNextPage: false, + }), + } as unknown as YepCodeApi; + } + }, +}; export const isEmpty = (value: unknown): boolean => { return (

AltStyle によって変換されたページ (->オリジナル) /