@obov/mext 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-cli.d.ts +2 -1
- package/dist/build-cli.js +24 -14
- package/dist/build-cli.js.map +1 -1
- package/dist/build.d.ts +23 -3
- package/dist/build.js +58 -5
- package/dist/build.js.map +1 -1
- package/dist/cli/build.js +5 -0
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/dev-server.js +2 -1
- package/dist/cli/dev-server.js.map +1 -1
- package/dist/cli/dev.js +2 -1
- package/dist/cli/dev.js.map +1 -1
- package/dist/cli/output.d.ts +45 -1
- package/dist/cli/output.js +60 -3
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/run.d.ts +26 -0
- package/dist/cli/run.js +41 -20
- package/dist/cli/run.js.map +1 -1
- package/dist/client/main.d.ts +8 -2
- package/dist/client/main.js +4 -3
- package/dist/client/main.js.map +1 -1
- package/dist/client/runner.d.ts +3 -0
- package/dist/client/runner.js +13 -12
- package/dist/client/runner.js.map +1 -1
- package/dist/config.d.ts +67 -2
- package/dist/config.js +89 -4
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +19 -1
- package/dist/errors.js +47 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/instrumentation.d.ts +2 -2
- package/dist/instrumentation.js +5 -5
- package/dist/instrumentation.js.map +1 -1
- package/dist/local-bin.d.ts +20 -0
- package/dist/local-bin.js +102 -0
- package/dist/local-bin.js.map +1 -0
- package/dist/mcp/dispatch.d.ts +1 -1
- package/dist/mcp/dispatch.js +3 -3
- package/dist/mcp/dispatch.js.map +1 -1
- package/dist/mcp/http.d.ts +4 -0
- package/dist/mcp/http.js +2 -0
- package/dist/mcp/http.js.map +1 -1
- package/dist/mcp/install.d.ts +2 -2
- package/dist/mcp/install.js +18 -0
- package/dist/mcp/install.js.map +1 -1
- package/dist/mcp/server.d.ts +5 -0
- package/dist/mcp/server.js +7 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/stdio.d.ts +18 -0
- package/dist/mcp/stdio.js +155 -12
- package/dist/mcp/stdio.js.map +1 -1
- package/dist/start.d.ts +2 -1
- package/dist/start.js +13 -1
- package/dist/start.js.map +1 -1
- package/package.json +1 -1
package/dist/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync } from \"node:fs\"\nimport { resolve, sep } from \"node:path\"\nimport { fileURLToPath, pathToFileURL } from \"node:url\"\nimport { COMMAND, isCommand, type Command } from \"./command.ts\"\nimport { resolveLocalPrincipal, type MextConfig } from \"./config.ts\"\nimport { loadInstrumentation, type Instrumentation } from \"./instrumentation.ts\"\nimport { MANIFEST_SCHEMA_VERSION, type BuildManifest, type BuildManifestCommand } from \"./manifest.ts\"\nimport { DEFAULT_HOST, DEFAULT_PORT } from \"./mcp/constants.ts\"\nimport { createMcpFetchHandler, startMcpHttpServer, type McpFetchHandler, type McpHttpOptions } from \"./mcp/http.ts\"\nimport { redirectStdout, serveMcpStdio } from \"./mcp/stdio.ts\"\nimport { createLazyRegistry, type Registry } from \"./registry.ts\"\nimport { mextVersion } from \"./version.ts\"\n\n/**\n * @obov/mext/start: .mext/ (mext build 산출) 실행 런타임. 소스 스캔 · TypeScript 없음.\n * 생성 파일 계약 (mext build 가 쓰는 server.js · handler.js, 바꾸면 기존 빌드가 깨진다):\n * server.js process.exitCode = await startFromBuild(new URL(\".\", import.meta.url), { argv: process.argv.slice(2), env: process.env })\n * handler.js export default createFetchHandler(new URL(\".\", import.meta.url))\n *\n * 로드 순서 = manifest.json (검증) → instrumentation.js (register) → config.js → manifest 기반 lazy Registry.\n * 명령어 모듈은 그 명령어를 실행할 때 import (help · tools/list · UNKNOWN_COMMAND · 권한 거부는 import 없음)\n */\n\nexport interface StartOptions {\n /** server.js · mext start 뒤 인자. --stdio · --port <n> · --host <h> */\n argv?: readonly string[]\n /** PORT · HOST. 기본 process.env */\n env?: Record<string, string | undefined>\n /** abort = 종료. 기본 SIGINT · SIGTERM */\n signal?: AbortSignal\n /** 기본 process.stderr */\n stderr?: { write(chunk: string): unknown }\n}\n\nexport interface FetchHandler {\n /** 거부하지 않는다. 초기화 실패 · 내부 오류 = 500 JSON-RPC 오류 */\n fetch(request: Request): Promise<Response>\n}\n\n/** .mext/ 로드 결과 */\nexport interface LoadedBuild {\n manifest: BuildManifest\n config: MextConfig\n registry: Registry\n instrumentation: Instrumentation\n}\n\nexport interface LoadBuildOptions {\n /** 명령어 모듈 import (테스트 계측). 기본 = 동적 import */\n importModule?: (href: string) => Promise<unknown>\n}\n\nconst USAGE = \"Usage: mext start [--stdio] [--port <n>] [--host <h>] (node .mext/server.js, PORT · HOST environment variables)\"\n\n/** .mext/ 실행 (mext start · node .mext/server.js). 반환 = exit code */\nexport async function startFromBuild(dir: string | URL, options: StartOptions = {}): Promise<number> {\n const stderr = options.stderr ?? process.stderr\n const env = options.env ?? process.env\n const args = parseStartArgs(options.argv ?? [])\n if (typeof args === \"string\") {\n stderr.write(`error: ${args}\\n${USAGE}\\n`)\n return 2\n }\n // stdio: 사용자 코드 import 전부터 그 외 stdout 쓰기를 stderr 로 (mext dev --stdio 와 같음)\n const redirect = args.stdio ? redirectStdout() : undefined\n const { signal, dispose } = options.signal ? { signal: options.signal, dispose: () => {} } : processSignal()\n try {\n const build = await loadBuild(dir)\n const onerror = (error: Error): void => void stderr.write(`mcp: ${error.message}\\n`)\n if (args.stdio) {\n const server = serveMcpStdio({\n registry: build.registry,\n instrumentation: build.instrumentation,\n manifestHash: build.manifest.manifestHash,\n principal: await resolveLocalPrincipal(build.config),\n ...(build.config.app ? { app: build.config.app } : {}),\n ...(build.config.tools ? { tools: build.config.tools } : {}),\n stdout: redirect!.wire,\n onerror,\n })\n const onAbort = (): void => void server.close()\n if (signal.aborted) onAbort()\n signal.addEventListener(\"abort\", onAbort, { once: true })\n await server.closed\n return 0\n }\n const port = args.port ?? envPort(env.PORT) ?? build.config.server?.port ?? DEFAULT_PORT\n const host = args.host ?? (env.HOST === undefined || env.HOST === \"\" ? undefined : env.HOST) ?? build.config.server?.host ?? DEFAULT_HOST\n const http = httpOptions(build, onerror)\n const server = await startMcpHttpServer({ ...http, server: { ...http.server, host, port } })\n stderr.write(`MCP server (Streamable HTTP) listening on ${server.url} (buildId ${build.manifest.buildId})\\n`)\n await new Promise<void>((done) => {\n if (signal.aborted) return done()\n signal.addEventListener(\"abort\", () => done(), { once: true })\n })\n await server.close()\n return 0\n } catch (error) {\n // 시작 실패 = stdout 원복 (stdio 서버를 띄우기 전)\n redirect?.restore()\n stderr.write(`error: ${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n } finally {\n dispose()\n }\n}\n\n/**\n * handler.js 의 Web fetch handler ({ fetch(request) → Response }). 동기 반환.\n * D7: 초기화 (manifest 검증 · instrumentation register · config · Registry) = 첫 요청에서 1회 (memoized promise).\n * 초기화 실패 = 그 요청 500 + JSON-RPC 오류 (data.loadError), 다음 요청에서 재시도.\n * MCP 처리 (Origin · auth · 헤더 검증 · SSE progress · MRTR) = node 서버와 같은 createMcpFetchHandler\n */\nexport function createFetchHandler(dir: string | URL, options: LoadBuildOptions = {}): FetchHandler {\n const base = dirUrl(dir)\n const onerror = (error: Error): void => console.error(`mcp: ${error.message}`)\n let pending: Promise<McpFetchHandler> | undefined\n const init = (): Promise<McpFetchHandler> =>\n (pending ??= loadBuild(base, options)\n .then((build) => createMcpFetchHandler(httpOptions(build, onerror)))\n .catch((error: unknown) => {\n pending = undefined\n throw error\n }))\n return {\n async fetch(request) {\n let handler: McpFetchHandler\n try {\n handler = await init()\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n onerror(error instanceof Error ? error : new Error(message))\n const body = { jsonrpc: \"2.0\", id: null, error: { code: -32_603, message: \"Server failed to start\", data: { loadError: message } } }\n return new Response(JSON.stringify(body), { status: 500, headers: { \"Content-Type\": \"application/json\" } })\n }\n return handler.fetch(request)\n },\n }\n}\n\n/** .mext/manifest.json 읽기 + 검증 (없음 · schemaVersion · mextVersion 불일치 = 오류) */\nexport function readBuildManifest(dir: string | URL): BuildManifest {\n const base = dirUrl(dir)\n let text: string\n try {\n text = readFileSync(new URL(\"manifest.json\", base), \"utf8\")\n } catch {\n throw new Error(`no build found in ${fileURLToPath(base)} (manifest.json missing). Run \"mext build\" first`)\n }\n const manifest = JSON.parse(text) as BuildManifest\n if (manifest.schemaVersion !== MANIFEST_SCHEMA_VERSION) {\n throw new Error(\n `${fileURLToPath(base)} was built with manifest schemaVersion ${String(manifest.schemaVersion)} (expected ${MANIFEST_SCHEMA_VERSION}). Run \"mext build\" again`,\n )\n }\n if (manifest.mextVersion !== mextVersion()) {\n throw new Error(\n `${fileURLToPath(base)} was built with @obov/mext ${manifest.mextVersion}, but ${mextVersion()} is installed. Run \"mext build\" again`,\n )\n }\n return manifest\n}\n\n/** manifest 검증 → instrumentation.js (register, 사용자 코드보다 먼저) → config.js → lazy Registry */\nexport async function loadBuild(dir: string | URL, options: LoadBuildOptions = {}): Promise<LoadedBuild> {\n const base = dirUrl(dir)\n const manifest = readBuildManifest(base)\n const instrumentation = await loadInstrumentation(\n manifest.instrumentation === undefined ? undefined : new URL(manifest.instrumentation, base),\n )\n const config =\n manifest.config === undefined\n ? {}\n : ((await import(new URL(manifest.config, base).href)) as { default: MextConfig }).default\n const registry = registryFromManifest(manifest, base, options)\n return { manifest, config, registry, instrumentation }\n}\n\n/** manifest → lazy Registry. 명령어 모듈 (manifest.commands[].module) 은 load() 에서 import */\nexport function registryFromManifest(manifest: BuildManifest, dir: string | URL, options: LoadBuildOptions = {}): Registry {\n const base = dirUrl(dir)\n const importModule = options.importModule ?? ((href: string) => import(href))\n return createLazyRegistry({\n commands: manifest.commands.map((c) => ({\n id: c.id,\n command: metadataCommand(c),\n aliases: c.aliases,\n ...(c.file !== undefined ? { file: c.file } : {}),\n inputSchema: c.inputSchema,\n ...(c.outputSchema !== undefined ? { outputSchema: c.outputSchema } : {}),\n async load() {\n const href = new URL(c.module, base).href\n const mod = (await importModule(href)) as { default?: unknown } | undefined\n if (!isCommand(mod?.default)) throw new Error(`${c.module}: default export is not a defineCommand result (command ${c.id})`)\n return mod.default\n },\n })),\n namespaces: [\n ...(manifest.description !== undefined ? [{ id: \"\", description: manifest.description }] : []),\n ...manifest.namespaces,\n ],\n })\n}\n\n/**\n * manifest 메타데이터만 있는 Command (RegisteredCommand.command). input · execute 는 모듈 로드 전이라 접근 = 오류\n * (invoke 는 loadCommand 결과를 쓴다)\n */\nfunction metadataCommand(c: BuildManifestCommand): Command {\n const parent = c.id.includes(\".\") ? c.id.slice(0, c.id.lastIndexOf(\".\") + 1) : \"\"\n const notLoaded = (): never => {\n throw new Error(`${c.id}: command module is not loaded (use loadCommand)`)\n }\n return Object.freeze({\n [COMMAND]: true as const,\n description: c.description,\n get input(): never {\n return notLoaded()\n },\n output: undefined,\n readOnly: c.readOnly,\n destructive: c.destructive,\n requiresConfirmation: c.requiresConfirmation,\n scopes: Object.freeze([...c.scopes]),\n examples: Object.freeze([...c.examples]) as Command[\"examples\"],\n positional: Object.freeze([...c.positional]),\n aliases: Object.freeze(c.aliases.map((a) => (a.startsWith(parent) ? a.slice(parent.length) : a))),\n execute: notLoaded,\n })\n}\n\nfunction httpOptions(build: LoadedBuild, onerror: (error: Error) => void): McpHttpOptions {\n const { config } = build\n return {\n registry: build.registry,\n instrumentation: build.instrumentation,\n manifestHash: build.manifest.manifestHash,\n ...(config.app ? { app: config.app } : {}),\n ...(config.auth ? { auth: config.auth } : {}),\n ...(config.tools ? { tools: config.tools } : {}),\n ...(config.oauth ? { oauth: config.oauth } : {}),\n server: config.server?.allowedOrigins ? { allowedOrigins: config.server.allowedOrigins } : {},\n onerror,\n }\n}\n\ninterface StartArgs {\n stdio: boolean\n port?: number\n host?: string\n}\n\n/** 반환 문자열 = 사용법 오류 */\nexport function parseStartArgs(argv: readonly string[]): StartArgs | string {\n const args: StartArgs = { stdio: false }\n for (let i = 0; i < argv.length; i++) {\n const tok = argv[i]!\n if (tok === \"--stdio\") {\n args.stdio = true\n continue\n }\n if (!tok.startsWith(\"--\")) return `unexpected argument \"${tok}\"`\n const eq = tok.indexOf(\"=\")\n const name = eq < 0 ? tok.slice(2) : tok.slice(2, eq)\n if (name !== \"port\" && name !== \"host\") return `unknown flag --${name}`\n const value = eq < 0 ? argv[++i] : tok.slice(eq + 1)\n if (value === undefined || value === \"\") return `--${name} requires a value`\n if (name === \"port\") {\n const port = Number(value)\n if (!isPort(port)) return \"--port must be an integer between 0 and 65535\"\n args.port = port\n } else args.host = value\n }\n if (args.stdio && (args.port !== undefined || args.host !== undefined)) return \"--port and --host do not apply to --stdio\"\n return args\n}\n\nfunction envPort(value: string | undefined): number | undefined {\n if (value === undefined || value === \"\") return undefined\n const port = Number(value)\n if (!isPort(port)) throw new Error(`PORT must be an integer between 0 and 65535 (got \"${value}\")`)\n return port\n}\n\nfunction isPort(n: number): boolean {\n return Number.isInteger(n) && n >= 0 && n <= 65_535\n}\n\nfunction dirUrl(dir: string | URL): URL {\n if (typeof dir !== \"string\") return dir.href.endsWith(\"/\") ? dir : new URL(`${dir.href}/`)\n const abs = resolve(dir)\n return pathToFileURL(abs.endsWith(sep) ? abs : `${abs}${sep}`)\n}\n\nfunction processSignal(): { signal: AbortSignal; dispose(): void } {\n const controller = new AbortController()\n const abort = (): void => controller.abort()\n process.once(\"SIGINT\", abort)\n process.once(\"SIGTERM\", abort)\n return {\n signal: controller.signal,\n dispose() {\n process.off(\"SIGINT\", abort)\n process.off(\"SIGTERM\", abort)\n },\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync } from \"node:fs\"\nimport { resolve, sep } from \"node:path\"\nimport { fileURLToPath, pathToFileURL } from \"node:url\"\nimport { COMMAND, isCommand, type Command } from \"./command.ts\"\nimport { mcpDeclarations, mcpStdioDeclarations, resolveLocalPrincipal, type MextConfig } from \"./config.ts\"\nimport { loadInstrumentation, type Instrumentation } from \"./instrumentation.ts\"\nimport { MANIFEST_SCHEMA_VERSION, type BuildManifest, type BuildManifestCommand } from \"./manifest.ts\"\nimport { DEFAULT_HOST, DEFAULT_PORT } from \"./mcp/constants.ts\"\nimport { createMcpFetchHandler, startMcpHttpServer, type McpFetchHandler, type McpHttpOptions } from \"./mcp/http.ts\"\nimport { redirectStdout, serveMcpStdio } from \"./mcp/stdio.ts\"\nimport { createLazyRegistry, type Registry } from \"./registry.ts\"\nimport { mextVersion } from \"./version.ts\"\n\n/**\n * @obov/mext/start: .mext/ (mext build 산출) 실행 런타임. 소스 스캔 · TypeScript 없음.\n * 생성 파일 계약 (mext build 가 쓰는 server.js · handler.js, 바꾸면 기존 빌드가 깨진다):\n * server.js process.exitCode = await startFromBuild(new URL(\".\", import.meta.url), { argv: process.argv.slice(2), env: process.env })\n * handler.js export default createFetchHandler(new URL(\".\", import.meta.url))\n *\n * 로드 순서 = manifest.json (검증) → instrumentation.js (register) → config.js → manifest 기반 lazy Registry.\n * 명령어 모듈은 그 명령어를 실행할 때 import (help · tools/list · UNKNOWN_COMMAND · 권한 거부는 import 없음)\n */\n\nexport { mainLocalBin, runLocalBin } from \"./local-bin.ts\"\nexport type { LocalBinOptions } from \"./local-bin.ts\"\n\nexport interface StartOptions {\n /** server.js · mext start 뒤 인자. --stdio · --port <n> · --host <h> */\n argv?: readonly string[]\n /** PORT · HOST. 기본 process.env */\n env?: Record<string, string | undefined>\n /** abort = 종료. 기본 SIGINT · SIGTERM */\n signal?: AbortSignal\n /** 기본 process.stderr */\n stderr?: { write(chunk: string): unknown }\n}\n\nexport interface FetchHandler {\n /** 거부하지 않는다. 초기화 실패 · 내부 오류 = 500 JSON-RPC 오류 */\n fetch(request: Request): Promise<Response>\n}\n\n/** .mext/ 로드 결과 */\nexport interface LoadedBuild {\n manifest: BuildManifest\n config: MextConfig\n registry: Registry\n instrumentation: Instrumentation\n}\n\nexport interface LoadBuildOptions {\n /** 명령어 모듈 import (테스트 계측). 기본 = 동적 import */\n importModule?: (href: string) => Promise<unknown>\n}\n\nconst USAGE = \"Usage: mext start [--stdio] [--port <n>] [--host <h>] (node .mext/server.js, PORT · HOST environment variables)\"\n\n/** .mext/ 실행 (mext start · node .mext/server.js). 반환 = exit code */\nexport async function startFromBuild(dir: string | URL, options: StartOptions = {}): Promise<number> {\n const stderr = options.stderr ?? process.stderr\n const env = options.env ?? process.env\n const args = parseStartArgs(options.argv ?? [])\n if (typeof args === \"string\") {\n stderr.write(`error: ${args}\\n${USAGE}\\n`)\n return 2\n }\n // stdio: 사용자 코드 import 전부터 그 외 stdout 쓰기를 stderr 로 (mext dev --stdio 와 같음)\n const redirect = args.stdio ? redirectStdout() : undefined\n const { signal, dispose } = options.signal ? { signal: options.signal, dispose: () => {} } : processSignal()\n try {\n const build = await loadBuild(dir)\n const onerror = (error: Error): void => void stderr.write(`mcp: ${error.message}\\n`)\n if (args.stdio) {\n const server = serveMcpStdio({\n registry: build.registry,\n instrumentation: build.instrumentation,\n manifestHash: build.manifest.manifestHash,\n principal: await resolveLocalPrincipal(build.config),\n ...(build.config.app ? { app: build.config.app } : {}),\n ...(build.config.tools ? { tools: build.config.tools } : {}),\n ...mcpStdioDeclarations(build.config),\n stdout: redirect!.wire,\n onerror,\n })\n const onAbort = (): void => void server.close()\n if (signal.aborted) onAbort()\n signal.addEventListener(\"abort\", onAbort, { once: true })\n await server.closed\n return 0\n }\n const port = args.port ?? envPort(env.PORT) ?? build.config.server?.port ?? DEFAULT_PORT\n const host = args.host ?? (env.HOST === undefined || env.HOST === \"\" ? undefined : env.HOST) ?? build.config.server?.host ?? DEFAULT_HOST\n const http = httpOptions(build, onerror)\n const server = await startMcpHttpServer({ ...http, server: { ...http.server, host, port } })\n stderr.write(`MCP server (Streamable HTTP) listening on ${server.url} (buildId ${build.manifest.buildId})\\n`)\n await new Promise<void>((done) => {\n if (signal.aborted) return done()\n signal.addEventListener(\"abort\", () => done(), { once: true })\n })\n await server.close()\n return 0\n } catch (error) {\n // 시작 실패 = stdout 원복 (stdio 서버를 띄우기 전)\n redirect?.restore()\n stderr.write(`error: ${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n } finally {\n dispose()\n }\n}\n\n/**\n * handler.js 의 Web fetch handler ({ fetch(request) → Response }). 동기 반환.\n * D7: 초기화 (manifest 검증 · instrumentation register · config · Registry) = 첫 요청에서 1회 (memoized promise).\n * 초기화 실패 = 그 요청 500 + JSON-RPC 오류 (data.loadError), 다음 요청에서 재시도.\n * MCP 처리 (Origin · auth · 헤더 검증 · SSE progress · MRTR) = node 서버와 같은 createMcpFetchHandler\n */\nexport function createFetchHandler(dir: string | URL, options: LoadBuildOptions = {}): FetchHandler {\n const base = dirUrl(dir)\n const onerror = (error: Error): void => console.error(`mcp: ${error.message}`)\n let pending: Promise<McpFetchHandler> | undefined\n const init = (): Promise<McpFetchHandler> =>\n (pending ??= loadBuild(base, options)\n .then((build) => createMcpFetchHandler(httpOptions(build, onerror)))\n .catch((error: unknown) => {\n pending = undefined\n throw error\n }))\n return {\n async fetch(request) {\n let handler: McpFetchHandler\n try {\n handler = await init()\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n onerror(error instanceof Error ? error : new Error(message))\n const body = { jsonrpc: \"2.0\", id: null, error: { code: -32_603, message: \"Server failed to start\", data: { loadError: message } } }\n return new Response(JSON.stringify(body), { status: 500, headers: { \"Content-Type\": \"application/json\" } })\n }\n return handler.fetch(request)\n },\n }\n}\n\n/** .mext/manifest.json 읽기 + 검증 (없음 · schemaVersion · mextVersion 불일치 = 오류) */\nexport function readBuildManifest(dir: string | URL): BuildManifest {\n const base = dirUrl(dir)\n let text: string\n try {\n text = readFileSync(new URL(\"manifest.json\", base), \"utf8\")\n } catch {\n throw new Error(`no build found in ${fileURLToPath(base)} (manifest.json missing). Run \"mext build\" first`)\n }\n const manifest = JSON.parse(text) as BuildManifest\n if (manifest.schemaVersion !== MANIFEST_SCHEMA_VERSION) {\n throw new Error(\n `${fileURLToPath(base)} was built with manifest schemaVersion ${String(manifest.schemaVersion)} (expected ${MANIFEST_SCHEMA_VERSION}). Run \"mext build\" again`,\n )\n }\n if (manifest.mextVersion !== mextVersion()) {\n throw new Error(\n `${fileURLToPath(base)} was built with @obov/mext ${manifest.mextVersion}, but ${mextVersion()} is installed. Run \"mext build\" again`,\n )\n }\n return manifest\n}\n\n/** manifest 검증 → instrumentation.js (register, 사용자 코드보다 먼저) → config.js → lazy Registry */\nexport async function loadBuild(dir: string | URL, options: LoadBuildOptions = {}): Promise<LoadedBuild> {\n const base = dirUrl(dir)\n const manifest = readBuildManifest(base)\n const instrumentation = await loadInstrumentation(\n manifest.instrumentation === undefined ? undefined : new URL(manifest.instrumentation, base),\n )\n const config =\n manifest.config === undefined\n ? {}\n : ((await import(new URL(manifest.config, base).href)) as { default: MextConfig }).default\n const registry = registryFromManifest(manifest, base, options)\n return { manifest, config, registry, instrumentation }\n}\n\n/** manifest → lazy Registry. 명령어 모듈 (manifest.commands[].module) 은 load() 에서 import */\nexport function registryFromManifest(manifest: BuildManifest, dir: string | URL, options: LoadBuildOptions = {}): Registry {\n const base = dirUrl(dir)\n const importModule = options.importModule ?? ((href: string) => import(href))\n return createLazyRegistry({\n commands: manifest.commands.map((c) => ({\n id: c.id,\n command: metadataCommand(c),\n aliases: c.aliases,\n ...(c.file !== undefined ? { file: c.file } : {}),\n inputSchema: c.inputSchema,\n ...(c.outputSchema !== undefined ? { outputSchema: c.outputSchema } : {}),\n async load() {\n const href = new URL(c.module, base).href\n const mod = (await importModule(href)) as { default?: unknown } | undefined\n if (!isCommand(mod?.default)) throw new Error(`${c.module}: default export is not a defineCommand result (command ${c.id})`)\n return mod.default\n },\n })),\n namespaces: [\n ...(manifest.description !== undefined ? [{ id: \"\", description: manifest.description }] : []),\n ...manifest.namespaces,\n ],\n })\n}\n\n/**\n * manifest 메타데이터만 있는 Command (RegisteredCommand.command). input · execute 는 모듈 로드 전이라 접근 = 오류\n * (invoke 는 loadCommand 결과를 쓴다)\n */\nfunction metadataCommand(c: BuildManifestCommand): Command {\n const parent = c.id.includes(\".\") ? c.id.slice(0, c.id.lastIndexOf(\".\") + 1) : \"\"\n const notLoaded = (): never => {\n throw new Error(`${c.id}: command module is not loaded (use loadCommand)`)\n }\n return Object.freeze({\n [COMMAND]: true as const,\n description: c.description,\n get input(): never {\n return notLoaded()\n },\n output: undefined,\n readOnly: c.readOnly,\n destructive: c.destructive,\n requiresConfirmation: c.requiresConfirmation,\n scopes: Object.freeze([...c.scopes]),\n examples: Object.freeze([...c.examples]) as Command[\"examples\"],\n positional: Object.freeze([...c.positional]),\n aliases: Object.freeze(c.aliases.map((a) => (a.startsWith(parent) ? a.slice(parent.length) : a))),\n execute: notLoaded,\n })\n}\n\nfunction httpOptions(build: LoadedBuild, onerror: (error: Error) => void): McpHttpOptions {\n const { config } = build\n return {\n registry: build.registry,\n instrumentation: build.instrumentation,\n manifestHash: build.manifest.manifestHash,\n ...(config.app ? { app: config.app } : {}),\n ...(config.auth ? { auth: config.auth } : {}),\n ...(config.tools ? { tools: config.tools } : {}),\n ...(config.oauth ? { oauth: config.oauth } : {}),\n ...mcpDeclarations(config),\n server: config.server?.allowedOrigins ? { allowedOrigins: config.server.allowedOrigins } : {},\n onerror,\n }\n}\n\ninterface StartArgs {\n stdio: boolean\n port?: number\n host?: string\n}\n\n/** 반환 문자열 = 사용법 오류 */\nexport function parseStartArgs(argv: readonly string[]): StartArgs | string {\n const args: StartArgs = { stdio: false }\n for (let i = 0; i < argv.length; i++) {\n const tok = argv[i]!\n if (tok === \"--stdio\") {\n args.stdio = true\n continue\n }\n if (!tok.startsWith(\"--\")) return `unexpected argument \"${tok}\"`\n const eq = tok.indexOf(\"=\")\n const name = eq < 0 ? tok.slice(2) : tok.slice(2, eq)\n if (name !== \"port\" && name !== \"host\") return `unknown flag --${name}`\n const value = eq < 0 ? argv[++i] : tok.slice(eq + 1)\n if (value === undefined || value === \"\") return `--${name} requires a value`\n if (name === \"port\") {\n const port = Number(value)\n if (!isPort(port)) return \"--port must be an integer between 0 and 65535\"\n args.port = port\n } else args.host = value\n }\n if (args.stdio && (args.port !== undefined || args.host !== undefined)) return \"--port and --host do not apply to --stdio\"\n return args\n}\n\nfunction envPort(value: string | undefined): number | undefined {\n if (value === undefined || value === \"\") return undefined\n const port = Number(value)\n if (!isPort(port)) throw new Error(`PORT must be an integer between 0 and 65535 (got \"${value}\")`)\n return port\n}\n\nfunction isPort(n: number): boolean {\n return Number.isInteger(n) && n >= 0 && n <= 65_535\n}\n\nfunction dirUrl(dir: string | URL): URL {\n if (typeof dir !== \"string\") return dir.href.endsWith(\"/\") ? dir : new URL(`${dir.href}/`)\n const abs = resolve(dir)\n return pathToFileURL(abs.endsWith(sep) ? abs : `${abs}${sep}`)\n}\n\nfunction processSignal(): { signal: AbortSignal; dispose(): void } {\n const controller = new AbortController()\n const abort = (): void => controller.abort()\n process.once(\"SIGINT\", abort)\n process.once(\"SIGTERM\", abort)\n return {\n signal: controller.signal,\n dispose() {\n process.off(\"SIGINT\", abort)\n process.off(\"SIGTERM\", abort)\n },\n }\n}\n"]}
|