@obov/mext 0.6.0 → 0.7.1

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.
Files changed (75) hide show
  1. package/dist/build.js +16 -2
  2. package/dist/build.js.map +1 -1
  3. package/dist/cli/args.js +1 -2
  4. package/dist/cli/args.js.map +1 -1
  5. package/dist/cli/build.js +22 -2
  6. package/dist/cli/build.js.map +1 -1
  7. package/dist/cli/dev-server.js +3 -2
  8. package/dist/cli/dev-server.js.map +1 -1
  9. package/dist/cli/dev.d.ts +6 -0
  10. package/dist/cli/dev.js +4 -4
  11. package/dist/cli/dev.js.map +1 -1
  12. package/dist/cli/main.js +2 -0
  13. package/dist/cli/main.js.map +1 -1
  14. package/dist/cli/media.d.ts +19 -0
  15. package/dist/cli/media.js +77 -0
  16. package/dist/cli/media.js.map +1 -0
  17. package/dist/cli/run.js +5 -0
  18. package/dist/cli/run.js.map +1 -1
  19. package/dist/cli/serve.d.ts +10 -0
  20. package/dist/cli/serve.js +114 -0
  21. package/dist/cli/serve.js.map +1 -0
  22. package/dist/client/index.d.ts +2 -1
  23. package/dist/client/index.js.map +1 -1
  24. package/dist/client/runner.js +3 -0
  25. package/dist/client/runner.js.map +1 -1
  26. package/dist/client/typed.d.ts +3 -1
  27. package/dist/client/typed.js +39 -3
  28. package/dist/client/typed.js.map +1 -1
  29. package/dist/client/types.d.ts +31 -2
  30. package/dist/client/types.js.map +1 -1
  31. package/dist/config.d.ts +17 -0
  32. package/dist/config.js +36 -1
  33. package/dist/config.js.map +1 -1
  34. package/dist/content.d.ts +65 -0
  35. package/dist/content.js +99 -0
  36. package/dist/content.js.map +1 -0
  37. package/dist/index.d.ts +3 -1
  38. package/dist/index.js +1 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/invoke.d.ts +4 -0
  41. package/dist/invoke.js +12 -5
  42. package/dist/invoke.js.map +1 -1
  43. package/dist/manifest.d.ts +6 -1
  44. package/dist/manifest.js.map +1 -1
  45. package/dist/mcp/constants.d.ts +2 -0
  46. package/dist/mcp/constants.js +2 -0
  47. package/dist/mcp/constants.js.map +1 -1
  48. package/dist/mcp/dispatch.d.ts +9 -3
  49. package/dist/mcp/dispatch.js +10 -4
  50. package/dist/mcp/dispatch.js.map +1 -1
  51. package/dist/mcp/host.d.ts +14 -0
  52. package/dist/mcp/host.js +48 -0
  53. package/dist/mcp/host.js.map +1 -0
  54. package/dist/mcp/http.d.ts +22 -5
  55. package/dist/mcp/http.js +125 -18
  56. package/dist/mcp/http.js.map +1 -1
  57. package/dist/mcp/index.d.ts +1 -0
  58. package/dist/mcp/index.js +1 -0
  59. package/dist/mcp/index.js.map +1 -1
  60. package/dist/mcp/tasks.js +1 -1
  61. package/dist/mcp/tasks.js.map +1 -1
  62. package/dist/remote/client.d.ts +24 -1
  63. package/dist/remote/client.js +177 -53
  64. package/dist/remote/client.js.map +1 -1
  65. package/dist/remote/index.d.ts +1 -1
  66. package/dist/remote/index.js.map +1 -1
  67. package/dist/route.d.ts +40 -2
  68. package/dist/route.js +128 -8
  69. package/dist/route.js.map +1 -1
  70. package/dist/start.js +3 -2
  71. package/dist/start.js.map +1 -1
  72. package/dist/version-constant.d.ts +1 -1
  73. package/dist/version-constant.js +1 -1
  74. package/dist/version-constant.js.map +1 -1
  75. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/client/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { COMMAND, type Command } from \"../command.ts\"\nimport { inputDeclined, MextError, type MextErrorCode, type MextErrorDetails } from \"../errors.ts\"\nimport { isSegment } from \"../ids.ts\"\nimport type { CommandHelp, Help } from \"../mcp/help.ts\"\nimport type { NamespaceInfo, RegisteredCommand, Registry } from \"../registry.ts\"\nimport {\n createRemoteClient,\n isRecord,\n RemoteInputRequiredError,\n RemoteRpcError,\n RemoteTransportError,\n RemoteUnauthorizedError,\n type CallToolOptions,\n type CallToolResult,\n type InputRequired,\n type InputResponses,\n type RemoteClient,\n type RemoteTool,\n} from \"../remote/client.ts\"\nimport { credentialStore, envPrefix, type CredentialStore, type StoredCredentials } from \"../remote/credentials.ts\"\nimport { isExpired, OAuthFlowError, refreshCredentials } from \"../remote/oauth.ts\"\nimport { cliSpecFromJsonSchema, coerceValue, defineCliSpec, parseArgs } from \"../cli/args.ts\"\nimport { cliPath, renderHelp } from \"../cli/help.ts\"\nimport { askUrl } from \"../cli/ask-url.ts\"\nimport { createLineReader, readAll, type CliIo, type LineReader } from \"../cli/io.ts\"\nimport {\n CliInterrupted,\n emitError,\n EXIT,\n errorJson,\n exitCodeOf,\n formatError,\n formatJson,\n formatProgress,\n formatResult,\n type CliErrorFormatter,\n} from \"../cli/output.ts\"\nimport { APPROVAL_META_KEY, MANIFEST_HASH_META_KEY, TOOLS_META_KEY } from \"../mcp/constants.ts\"\nimport { VERSION } from \"../version.ts\"\nimport { openSchema, schemaCacheDir, schemaCacheFile, type FetchedHelp, type Schema, type ToolListing } from \"./cache.ts\"\nimport { manifestFromTools, manifestHelp, type ClientManifest } from \"./manifest.ts\"\nimport { awaitTask, formatTaskStatus, isTaskResult, RemoteTaskError } from \"./task.ts\"\n\n/**\n * 원격 실행 공용 runner: mext run --url (bin = mext) 과 고객 CLI (bin = cli.bin) 가 같은 코드 경로.\n * 서버 MCP 엔드포인트의 dispatcher 도구 (execute · split 의 query · mutate) 또는 명령어별 도구 (command 노출, §12.2) 호출.\n * 노출 방식 = 번들 형태의 내장 manifest tools, 범용 = server/discover _meta[\"dev.mext/tools\"]. 권한 검사는 서버만.\n * 경로 해석 · help · 플래그 파싱 = HelpSource (캐시 · 내장 manifest · 서버 help, client/cache.ts) 의 입력 스키마 (JSON Schema).\n * 로컬 파싱 실패 (UNKNOWN_COMMAND · INVALID_ARGUMENT) = 서버 help 로 1회 재시도. tools/call 결과의 manifestHash 로 drift 감지.\n * 토큰 = <BIN>_TOKEN, 없으면 저장된 토큰 (<bin> login). 출력 · exit code 는 로컬 모드와 같다.\n * tasks 확장 선언 (§12.6): task 응답 = 종료까지 폴링 (client/task.ts), 결과 처리는 동기와 같다.\n *\n * 이 모듈 (와 import 대상) 은 고객 CLI 번들에 들어간다: Zod · MCP 서버 SDK · 핸들러 · 스캔 · 빌드 코드 import 금지.\n */\n\nexport interface RemoteRunOptions {\n /** 실행 파일 이름. 토큰 환경변수 (<BIN>_TOKEN) · 자격 증명 위치 (credentialStore bin) · clientInfo.name */\n bin: string\n /** MCP 엔드포인트 */\n url: string\n /** help · 오류 안내의 명령 접두. \"mext run --url <url>\" · \"myapp\" */\n prog: string\n /** login 안내 명령. \"mext login --url <url>\" · \"myapp login\" */\n login: string\n /** clientInfo.version */\n version: string\n /**\n * 번들 형태: 내장 manifest 로 help · 경로 해석 · 플래그 파싱 (help 에 네트워크 없음, 명령어 실행만 tools/list · tools/call).\n * 없음 = 범용 형태: 서버 help 조회\n */\n manifest?: ClientManifest\n /** 내장 manifest 의 manifestHash (빌드 시). manifest 와 같이 지정 */\n manifestHash?: string\n /** 사람용 루트 help 뒤에 붙일 텍스트 (고객 CLI 의 login · logout · mcp install 목록) */\n rootHelpFooter?: string\n /** 오류 출력 · exit code 커스텀 (cli.errors). 없음 = mext 기본 */\n formatError?: CliErrorFormatter\n}\n\n/** help 출처. 서버 (tools/list → dispatcher help 호출) · 내장 manifest · 스키마 캐시 (client/cache.ts Schema) */\nexport interface HelpSource {\n /** 대상 (\"\" = 루트) → help. 없는 대상 = MextError UNKNOWN_COMMAND */\n help(target: string): Promise<Help>\n}\n\nexport async function runRemote(options: RemoteRunOptions, argv: readonly string[], io: CliIo): Promise<number> {\n const { url, prog } = options\n const tokenEnv = `${envPrefix(options.bin)}_TOKEN`\n const ctx: ReportContext = {\n login: options.login,\n tokenEnv,\n auth: undefined,\n footer: options.rootHelpFooter,\n formatter: options.formatError,\n }\n const lead = { json: false, yes: false, help: false }\n let i = 0\n for (; i < argv.length; i++) {\n const tok = argv[i]!\n if (!tok.startsWith(\"-\") || tok === \"-\") break\n if (tok === \"--json\") lead.json = true\n else if (tok === \"--yes\") lead.yes = true\n else if (tok === \"--help\" || tok === \"-h\") lead.help = true\n else return report(usageError(`unknown flag ${tok} before the command`), io, prog, argv.includes(\"--json\"), ctx)\n }\n const rest = argv.slice(i)\n const beforeDashDash = rest.indexOf(\"--\") < 0 ? rest : rest.slice(0, rest.indexOf(\"--\"))\n const json = lead.json || beforeDashDash.includes(\"--json\")\n\n const controller = new AbortController()\n const onAbort = (): void => controller.abort(io.signal?.reason)\n if (io.signal?.aborted) onAbort()\n io.signal?.addEventListener(\"abort\", onAbort, { once: true })\n const lines = createLineReader(io)\n let session: Session | undefined\n let schema: Schema | undefined\n try {\n if (!/^https?:\\/\\//i.test(url)) throw usageError(`--url must be an http(s) URL (got \"${url}\")`)\n session = openSession(options, tokenEnv, io, controller.signal)\n const s = session\n schema = await openRunSchema(options, s, ctx, io)\n const source: HelpSource = schema\n const wantsHelp = lead.help || beforeDashDash.includes(\"--help\") || beforeDashDash.includes(\"-h\")\n let stdin: Promise<string> | undefined\n const readStdin = (): Promise<string> => (stdin ??= readAll(io.stdin))\n\n // 경로 해석 · 플래그 파싱 (로컬). 실패하면 서버 help 로 1회 재시도\n const plan = async (): Promise<Plan> => {\n // <prog> help [target...]\n if (rest[0] === \"help\") {\n const tokens = rest.slice(1).filter((t) => !t.startsWith(\"-\"))\n const resolved = await resolveRemotePath(source, tokens)\n if (resolved.consumed < tokens.length) throw await unknownAt(source, resolved, tokens.slice(resolved.consumed))\n return { kind: \"help\", help: resolved.help }\n }\n const resolved = await resolveRemotePath(source, rest)\n const { help, consumed } = resolved\n const command = help.kind === \"command\" ? help : help.kind === \"namespace\" ? help.command : undefined\n const next = rest[consumed]\n const acceptsPositional = command !== undefined && command.positional.length > 0\n if (help.kind !== \"command\" && next !== undefined && !next.startsWith(\"-\") && !acceptsPositional) {\n throw await unknownAt(source, resolved, rest.slice(consumed))\n }\n if (wantsHelp) return { kind: \"help\", help }\n if (!command) return { kind: \"namespace\", help }\n const entry = entryFromHelp(command)\n const parsed = await parseArgs(entry, rest.slice(consumed), { readStdin })\n return { kind: \"run\", command, entry, input: parsed.input, yes: parsed.yes }\n }\n let planned: Plan\n try {\n planned = await plan()\n } catch (error) {\n if (!isLocalParseFailure(error) || !schema.refetch()) throw error\n try {\n planned = await plan()\n } catch (retryError) {\n // 재조회 실패 (오프라인 등) = 원래 로컬 오류\n if (retryError instanceof RemoteTransportError || retryError instanceof RemoteRpcError) throw error\n throw retryError\n }\n }\n\n if (planned.kind === \"help\") return printHelp(planned.help, io, prog, json, ctx)\n if (planned.kind === \"namespace\") {\n const { help } = planned\n const id = help.kind === \"namespace\" ? help.id : \"\"\n const error = new MextError(\n \"UNKNOWN_COMMAND\",\n id === \"\" ? \"No command given.\" : `\"${cliPath(id)}\" is a namespace. Specify a command.`,\n { command: id, suggested: [], usage: id === \"\" ? \"help\" : `help ${id}` },\n )\n if (json) return report(error, io, prog, true, ctx)\n const text = `${formatError(error, prog)}\\n${helpText(help, prog, ctx)}`\n return emitError(io, { body: errorBody(error), text, exitCode: EXIT.usage, json: false }, ctx.formatter)\n }\n\n const { command, entry } = planned\n const yes = lead.yes || planned.yes\n // command 노출 (§12.2) = 도구 이름 = 정식 ID, 인자 = input. 그 외 = dispatcher { command, args }\n const exposed = (await exposureOf(options, schema)) === \"command\"\n const tool = exposed ? { name: entry.id, inputSchema: command.inputSchema } : commandTool(dispatcherOf(url, await schema.tools()), command)\n const input = planned.input as Record<string, unknown>\n const args = exposed ? input : { command: entry.id, args: input }\n const onInputRequired = inputHandler(io, lines, yes, json, entry.id, controller.signal)\n // 승인 (§4 승인 원격 CLI): --yes = 확인 표시 (client 방식 표면) + confirm 입력 요청 승인 (ask 방식, inputHandler)\n const callOnce = (confirmed: boolean): Promise<CallToolResult> =>\n s.call((o) =>\n s.client.callTool(tool, args, {\n ...o,\n ...(confirmed ? { meta: { [APPROVAL_META_KEY]: { confirmed: true } } } : {}),\n progressToken: \"mext-cli\",\n onNotification: (method, params) => {\n if (method !== \"notifications/progress\" || typeof params.progress !== \"number\") return\n const update: { progress: number; total?: number; message?: string } = { progress: params.progress }\n if (typeof params.total === \"number\") update.total = params.total\n if (typeof params.message === \"string\") update.message = params.message\n io.stderr.write(formatProgress(update))\n },\n onInputRequired,\n }),\n )\n let result = await callOnce(yes)\n // 확인 표시 없이 client 방식 표면에 닿음 = TTY 면 로컬 ask 와 같은 프롬프트 → 승인 = 확인 표시를 실어 1회 다시 호출\n if (!yes && io.isTTY && approvalReason(result) === \"unconfirmed\") {\n const answer = await lines.question(`${confirmationPrompt(command, input)} [y/N] `, controller.signal)\n if (controller.signal.aborted) throw new CliInterrupted()\n if (!/^y(es)?$/i.test((answer ?? \"\").trim())) throw inputDeclined(entry.id, \"confirm\")\n result = await callOnce(true)\n }\n // tasks 확장 (§12.6): 종료까지 폴링 → completed result = 동기 결과와 같은 경로 (출력 · exit code)\n if (isTaskResult(result)) {\n result = await awaitTask(result, {\n client: s.client,\n call: (fn) => s.call(fn),\n signal: controller.signal,\n onInputRequired,\n onStatus: (message) => io.stderr.write(formatTaskStatus(message)),\n })\n }\n // drift: 이번 결과는 그대로, 다르면 캐시 stale (다음 실행에서 서버 help)\n schema.observe(metaHash(result))\n if (result.isError === true) throw toolError(result, ctx)\n const value = result.structuredContent === undefined ? textValue(result) : result.structuredContent\n io.stdout.write(json ? formatJson(value) : formatResult(value))\n return EXIT.ok\n } catch (error) {\n if (session) ctx.auth = session.auth\n if (controller.signal.aborted) return report(new CliInterrupted(), io, prog, json, ctx)\n return report(error, io, prog, json, ctx)\n } finally {\n io.signal?.removeEventListener(\"abort\", onAbort)\n lines.close()\n await schema?.save()\n }\n}\n\n/** 로컬 경로 해석 · 플래그 파싱 결과 */\ntype Plan =\n | { kind: \"help\"; help: Help }\n | { kind: \"namespace\"; help: Help }\n | { kind: \"run\"; command: CommandHelp; entry: RegisteredCommand; input: unknown; yes: boolean }\n\n/** 서버 도구 노출 방식: 번들 형태 = 내장 manifest tools, 범용 = server/discover _meta[\"dev.mext/tools\"] (스키마 캐시) */\nasync function exposureOf(options: RemoteRunOptions, schema: Schema): Promise<string | undefined> {\n return options.manifest ? options.manifest.tools : schema.exposure()\n}\n\n/** isError 결과가 APPROVAL_REQUIRED 면 그 reason (§4 승인) */\nfunction approvalReason(result: CallToolResult): string | undefined {\n if (result.isError !== true) return undefined\n const sc = result.structuredContent\n const body = isRecord(sc) && isRecord(sc.error) ? sc.error : undefined\n return body?.code === \"APPROVAL_REQUIRED\" && typeof body.reason === \"string\" ? body.reason : undefined\n}\n\n/** 승인 프롬프트 문구. 로컬 ask (invoke.ts confirmationMessage) 와 같은 형식, 입력 = CLI 가 보낸 값 (invoke.ts 는 Zod 를 import 해 번들에 넣지 않는다) */\nfunction confirmationPrompt(command: CommandHelp, input: Record<string, unknown>): string {\n return `Run ${command.id} with ${JSON.stringify(input)}?${command.destructive ? \" This command is destructive.\" : \"\"}`\n}\n\n/** 서버 help 재조회 대상 로컬 오류 */\nfunction isLocalParseFailure(error: unknown): boolean {\n return error instanceof MextError && (error.code === \"UNKNOWN_COMMAND\" || error.code === \"INVALID_ARGUMENT\")\n}\n\n/** 결과 _meta[\"dev.mext/manifestHash\"] */\nfunction metaHash(result: CallToolResult): string | undefined {\n const meta = result._meta\n const value = isRecord(meta) ? meta[MANIFEST_HASH_META_KEY] : undefined\n return typeof value === \"string\" ? value : undefined\n}\n\n/** 이번 실행의 스키마 상태: 캐시 파일 (<BIN>_CACHE_DIR · XDG · HOME) · 내장 manifest · 서버 help */\nfunction openRunSchema(options: RemoteRunOptions, s: Session, ctx: ReportContext, io: CliIo): Promise<Schema> {\n const dir = schemaCacheDir(options.bin, io.env)\n return openSchema({\n file: dir === undefined ? undefined : schemaCacheFile(dir, options.url),\n url: options.url,\n client: { bin: options.bin, version: options.version, mext: VERSION },\n ...(options.manifest && options.manifestHash !== undefined\n ? { embedded: { manifest: options.manifest, hash: options.manifestHash } }\n : {}),\n fetchHelp: serverHelpFetcher(s, ctx, options.manifest?.tools),\n fetchTools: async () => {\n // 범용 형태 = 노출 방식을 server/discover 로 (번들 = 내장 manifest, 조회 안 함).\n // 순차: 401 → refresh 1회 규칙 (Session.call) 을 동시 요청이 나눠 쓰지 않게\n const r = await s.call((o) => s.client.listToolsResult(o))\n const exposure = options.manifest ? undefined : await discoverExposure(s)\n if ((options.manifest?.tools ?? exposure) !== \"command\") dispatcherOf(s.url, r.tools)\n return {\n tools: r.tools,\n ...(r.ttlMs !== undefined ? { ttlMs: r.ttlMs } : {}),\n ...(exposure !== undefined ? { exposure } : {}),\n }\n },\n warn: (message) => io.stderr.write(message),\n })\n}\n\n/* 세션: 클라이언트 · 토큰 · dispatcher 도구 */\n\n/** 토큰 출처. undefined = 아직 요청 전 (저장분 미조회) */\ntype AuthSource = \"env\" | \"stored\" | \"none\" | undefined\n\ninterface Tools {\n /** tools/list 결과 */\n list: RemoteTool[]\n /** help 호출 도구 (execute 또는 split 의 query) */\n helpTool: RemoteTool\n}\n\ninterface Session {\n url: string\n client: RemoteClient\n /** 요청한 토큰 출처 (첫 요청 때 결정) */\n readonly auth: AuthSource\n /** 401 이면 refresh_token 으로 1회 갱신 후 재시도 */\n call<T>(fn: (options: { signal: AbortSignal }) => Promise<T>): Promise<T>\n}\n\n/** 네트워크 · 키체인 접근은 첫 요청까지 미룬다 (번들 형태의 help 는 둘 다 없음) */\nfunction openSession(options: RemoteRunOptions, tokenEnv: string, io: CliIo, signal: AbortSignal): Session {\n const { url } = options\n const envToken = io.env[tokenEnv] !== undefined && io.env[tokenEnv] !== \"\" ? io.env[tokenEnv] : undefined\n const store: CredentialStore | undefined =\n envToken === undefined ? credentialStore({ env: io.env, bin: options.bin }) : undefined\n let stored: StoredCredentials | undefined\n let auth: AuthSource = envToken !== undefined ? \"env\" : undefined\n let refreshed = false\n const refresh = async (): Promise<boolean> => {\n if (!store || !stored?.refresh_token || refreshed) return false\n refreshed = true\n try {\n stored = await refreshCredentials(stored)\n await store.set(url, stored).catch(() => {})\n return true\n } catch {\n return false\n }\n }\n let loading: Promise<void> | undefined\n const load = (): Promise<void> =>\n (loading ??= (async () => {\n if (!store) return\n stored = await store.get(url).catch(() => undefined)\n if (stored && isExpired(stored)) await refresh()\n auth = stored ? \"stored\" : \"none\"\n })())\n const client = createRemoteClient({\n url,\n clientInfo: { name: options.bin, version: options.version },\n token: async () => {\n await load()\n return envToken ?? stored?.access_token\n },\n })\n const call = async <T>(fn: (o: { signal: AbortSignal }) => Promise<T>): Promise<T> => {\n try {\n return await fn({ signal })\n } catch (error) {\n if (error instanceof RemoteUnauthorizedError && (await refresh())) return fn({ signal })\n throw error\n }\n }\n return {\n url,\n client,\n get auth() {\n return auth\n },\n call,\n }\n}\n\n/** tools/list 결과 → dispatcher 도구 (execute 또는 query · mutate). 없으면 RemoteTransportError */\nfunction dispatcherOf(url: string, list: RemoteTool[]): Tools {\n const execute = list.find((t) => t.name === \"execute\")\n const query = list.find((t) => t.name === \"query\")\n const helpTool = execute ?? query\n if (!helpTool || (!execute && !list.some((t) => t.name === \"mutate\"))) {\n throw new RemoteTransportError(`${url} does not expose mext dispatcher tools (execute, or query and mutate).`)\n }\n return { list, helpTool }\n}\n\n/** 명령어를 호출할 도구: help 의 tool (split) → execute → readOnly 면 query, 아니면 mutate */\nfunction commandTool(tools: Tools, command: CommandHelp): RemoteTool {\n const byName = (name: string | undefined) => (name === undefined ? undefined : tools.list.find((t) => t.name === name))\n return byName(command.tool) ?? byName(\"execute\") ?? byName(command.readOnly ? \"query\" : \"mutate\") ?? tools.helpTool\n}\n\n/** server/discover _meta[\"dev.mext/tools\"]. 없음 · JSON-RPC 오류 (discover 없는 서버 등) = undefined (dispatcher) */\nasync function discoverExposure(s: Session): Promise<string | undefined> {\n try {\n const result = await s.call((o) => s.client.request(\"server/discover\", {}, o))\n const value = isRecord(result._meta) ? result._meta[TOOLS_META_KEY] : undefined\n return typeof value === \"string\" ? value : undefined\n } catch (error) {\n if (error instanceof RemoteRpcError) return undefined\n throw error\n }\n}\n\n/**\n * 서버 help. dispatcher = help 호출 (tools/call), command 노출 = tools/list 로 만든 manifest 의 help (help 도구 없음).\n * UNKNOWN_COMMAND = 캐시할 결과, 그 외 오류 = throw\n */\nfunction serverHelpFetcher(\n s: Session,\n ctx: ReportContext,\n embeddedExposure: string | undefined,\n): (target: string, listing: () => Promise<ToolListing>) => Promise<FetchedHelp> {\n return async (target, listing) => {\n const { tools, exposure } = await listing()\n if ((embeddedExposure ?? exposure) === \"command\") {\n try {\n return { value: { help: manifestHelp(manifestFromTools(tools), target) }, hash: undefined }\n } catch (error) {\n if (error instanceof MextError && error.code === \"UNKNOWN_COMMAND\") return { value: { error: error.toJSON() }, hash: undefined }\n throw error\n }\n }\n const { helpTool } = dispatcherOf(s.url, tools)\n const args = target === \"\" ? { command: \"help\" } : { command: \"help\", args: { target } }\n const result = await s.call((o) => s.client.callTool(helpTool, args, o))\n const hash = metaHash(result)\n if (result.isError === true) {\n const error = toolError(result, ctx)\n if (error instanceof MextError && error.code === \"UNKNOWN_COMMAND\") return { value: { error: error.toJSON() }, hash }\n throw error\n }\n const value = result.structuredContent\n if (!isRecord(value) || (value.kind !== \"root\" && value.kind !== \"namespace\" && value.kind !== \"command\")) {\n throw new RemoteTransportError(`${s.url} returned an unexpected help result.`)\n }\n return { value: { help: value as unknown as Help }, hash }\n }\n}\n\n/** 번들 형태: 내장 manifest (네트워크 없음) */\nexport function manifestHelpSource(manifest: ClientManifest): HelpSource {\n return { help: async (target) => manifestHelp(manifest, target) }\n}\n\n/* 경로 해석: 앞쪽 세그먼트 토큰의 가장 긴 접두 (로컬 resolvePath 와 같은 결과) */\n\ninterface ResolvedPath {\n help: Help\n consumed: number\n /** 가장 긴 후보의 UNKNOWN_COMMAND (있으면) */\n unknown: MextError | undefined\n}\n\nasync function resolveRemotePath(source: HelpSource, tokens: readonly string[]): Promise<ResolvedPath> {\n const segs: string[] = []\n for (const t of tokens) {\n if (!isSegment(t)) break\n segs.push(t)\n }\n let unknown: MextError | undefined\n for (let k = segs.length; k >= 0; k--) {\n try {\n return { help: await source.help(segs.slice(0, k).join(\".\")), consumed: k, unknown }\n } catch (error) {\n if (k > 0 && error instanceof MextError && error.code === \"UNKNOWN_COMMAND\") {\n unknown ??= error\n continue\n }\n throw error\n }\n }\n throw new Error(\"unreachable\")\n}\n\n/** 해석되지 않은 경로 → UNKNOWN_COMMAND (suggested · usage) */\nasync function unknownAt(source: HelpSource, resolved: ResolvedPath, tail: readonly string[]): Promise<MextError> {\n if (resolved.unknown) return resolved.unknown\n const id = resolved.help.kind === \"root\" ? \"\" : resolved.help.id\n const first = tail.find((t) => !t.startsWith(\"-\"))\n const candidate = [id, first ?? \"\"].filter((x) => x !== \"\").join(\".\")\n try {\n await source.help(candidate)\n } catch (error) {\n if (error instanceof MextError) return error\n throw error\n }\n return new MextError(\"UNKNOWN_COMMAND\", `Unknown command \"${candidate}\".`, { command: candidate, suggested: [], usage: \"help\" })\n}\n\n/* help → 로컬 렌더러용 Registry (같은 help 텍스트) */\n\n/** 원격 명령어의 input 자리. CLI 필드는 defineCliSpec (JSON Schema 분석) 이 정하므로 Zod 스키마가 필요 없다 */\nconst REMOTE_INPUT = { _zod: { def: { shape: {} } } } as unknown as Command[\"input\"]\n\nfunction commandOf(meta: {\n description: string\n readOnly: boolean\n destructive: boolean\n requiresConfirmation: boolean\n scopes?: readonly string[]\n examples?: readonly unknown[]\n positional?: readonly string[]\n needsApproval?: unknown\n}): Command {\n return {\n [COMMAND]: true,\n description: meta.description,\n input: REMOTE_INPUT,\n output: undefined,\n readOnly: meta.readOnly,\n destructive: meta.destructive,\n requiresConfirmation: meta.requiresConfirmation,\n scopes: [...(meta.scopes ?? [])],\n examples: [...(meta.examples ?? [])] as Command[\"examples\"],\n positional: [...(meta.positional ?? [])],\n aliases: [],\n // 조건부 승인 (help 의 needsApproval: \"conditional\") = help 렌더러용 자리 표시 (호출하지 않는다)\n ...(meta.needsApproval === \"conditional\" ? { needsApproval: remoteOnly } : {}),\n execute() {\n throw new Error(\"remote command\")\n },\n }\n}\n\nfunction remoteOnly(): never {\n throw new Error(\"remote command\")\n}\n\n/** 원격 명령어 help → RegisteredCommand (CLI 필드 = inputSchema 분석) */\nexport function entryFromHelp(help: CommandHelp): RegisteredCommand {\n const entry: RegisteredCommand = {\n id: help.id,\n command: commandOf(help),\n aliases: [...help.aliases],\n file: undefined,\n inputSchema: help.inputSchema,\n outputSchema: help.outputSchema,\n }\n defineCliSpec(entry, cliSpecFromJsonSchema(help.inputSchema, help.positional))\n return entry\n}\n\nfunction registryFromHelp(help: Help): Registry {\n const commands = new Map<string, RegisteredCommand>()\n const aliases = new Map<string, string>()\n const namespaces = new Map<string, NamespaceInfo>()\n if (help.kind === \"command\") {\n const entry = entryFromHelp(help)\n commands.set(entry.id, entry)\n for (const a of entry.aliases) aliases.set(a, entry.id)\n namespaces.set(\"\", { id: \"\", description: undefined, commands: [], namespaces: [] })\n return { commands, aliases, namespaces }\n }\n const id = help.kind === \"root\" ? \"\" : help.id\n namespaces.set(id, {\n id,\n description: help.description,\n commands: help.commands.map((c) => c.id),\n namespaces: help.namespaces.map((n) => n.id),\n })\n for (const n of help.namespaces) namespaces.set(n.id, { id: n.id, description: n.description, commands: [], namespaces: [] })\n for (const c of help.commands) {\n commands.set(c.id, {\n id: c.id,\n command: commandOf(c),\n aliases: [],\n file: undefined,\n inputSchema: {},\n outputSchema: undefined,\n })\n }\n if (help.kind === \"namespace\" && help.command) commands.set(help.command.id, entryFromHelp(help.command))\n return { commands, aliases, namespaces }\n}\n\n/** 사람용 help 텍스트. 루트면 footer (고객 CLI 내장 명령) 를 붙인다 */\nfunction helpText(help: Help, prog: string, ctx: ReportContext): string {\n const target = help.kind === \"root\" ? \"\" : help.id\n const text = renderHelp(registryFromHelp(help), target, { prog })\n return help.kind === \"root\" && ctx.footer ? `${text}\\n${ctx.footer}` : text\n}\n\n/** --help --json = help 결과 그대로 (서버 help 의 structuredContent · 내장 manifest help) */\nfunction printHelp(help: Help, io: CliIo, prog: string, json: boolean, ctx: ReportContext): number {\n io.stdout.write(json ? formatJson(help) : helpText(help, prog, ctx))\n return EXIT.ok\n}\n\n/* 결과 · 오류 */\n\nconst MEXT_CODES: readonly MextErrorCode[] = [\n \"UNKNOWN_COMMAND\",\n \"INVALID_ARGUMENT\",\n \"UNAUTHENTICATED\",\n \"PERMISSION_DENIED\",\n \"INPUT_UNAVAILABLE\",\n \"APPROVAL_REQUIRED\",\n]\n\n/** 서버 핸들러 예외 등 mext 구조화 오류 외의 도구 오류. --json = 서버 오류 본문 그대로, exit 1 */\nexport class RemoteExecutionError extends Error {\n readonly body: Record<string, unknown>\n constructor(body: Record<string, unknown>) {\n super(typeof body.message === \"string\" ? body.message : \"Remote command failed.\")\n this.name = \"RemoteExecutionError\"\n this.body = body\n }\n}\n\ninterface ReportContext {\n /** login 안내 명령 */\n login: string\n /** <BIN>_TOKEN */\n tokenEnv: string\n auth: AuthSource\n /** 루트 help footer */\n footer?: string | undefined\n formatter?: CliErrorFormatter | undefined\n}\n\n/** isError 결과 → MextError (code 가 mext 구조화 오류면) 또는 RemoteExecutionError */\nfunction toolError(result: CallToolResult, ctx: ReportContext): Error {\n const sc = result.structuredContent\n const body = isRecord(sc) && isRecord(sc.error) ? sc.error : undefined\n if (!body) return new RemoteExecutionError({ code: \"EXECUTION_FAILED\", message: textValue(result) ?? \"Remote command failed.\" })\n const { code, message, ...details } = body\n if (typeof code === \"string\" && (MEXT_CODES as readonly string[]).includes(code)) {\n const text = typeof message === \"string\" ? message : code\n if (code === \"UNAUTHENTICATED\") {\n return new MextError(\"UNAUTHENTICATED\", text, { ...(details as MextErrorDetails[\"UNAUTHENTICATED\"]), login: ctx.login })\n }\n return new MextError(code as MextErrorCode, text, details as never)\n }\n return new RemoteExecutionError(body)\n}\n\nfunction textValue(result: CallToolResult): string | undefined {\n const texts = (result.content ?? []).flatMap((c) =>\n isRecord(c) && c.type === \"text\" && typeof c.text === \"string\" ? [c.text] : [],\n )\n return texts.length > 0 ? texts.join(\"\\n\") : undefined\n}\n\n/** 401 → UNAUTHENTICATED (login 안내 포함) */\nfunction unauthenticatedFrom(error: RemoteUnauthorizedError, ctx: ReportContext): MextError {\n const data = isRecord(error.data) ? error.data : {}\n const reason =\n data.reason === \"invalid_token\" || data.reason === \"missing_token\"\n ? data.reason\n : error.challenge.error === \"invalid_token\"\n ? \"invalid_token\"\n : \"missing_token\"\n let message = typeof data.message === \"string\" ? data.message : error.message\n if (ctx.auth === \"env\") message += ` ${ctx.tokenEnv} was rejected.`\n return new MextError(\"UNAUTHENTICATED\", message, { reason, login: ctx.login })\n}\n\nfunction report(error: unknown, io: CliIo, prog: string, json: boolean, ctx: ReportContext): number {\n let e = error\n if (e instanceof RemoteUnauthorizedError) e = unauthenticatedFrom(e, ctx)\n let text = formatError(e, prog)\n if (e instanceof MextError && e.code === \"PERMISSION_DENIED\" && ctx.auth === \"none\") {\n const reason = (e.details as MextErrorDetails[\"PERMISSION_DENIED\"]).reason\n if (reason === \"anonymous\") text += `Run \"${ctx.login}\" to log in.\\n`\n }\n // 확인 표시 없이 거부 (TTY 없음): 로컬 ask 의 안내와 같은 문구\n if (e instanceof MextError && e.code === \"APPROVAL_REQUIRED\" && (e.details as MextErrorDetails[\"APPROVAL_REQUIRED\"]).reason === \"unconfirmed\") {\n text += \"Pass --yes to approve.\\n\"\n }\n return emitError(io, { body: errorBody(e), text, exitCode: exitCodeOf(e), json }, ctx.formatter)\n}\n\nfunction errorBody(error: unknown): Record<string, unknown> {\n if (error instanceof RemoteExecutionError) return error.body\n if (\n error instanceof RemoteTransportError ||\n error instanceof RemoteRpcError ||\n error instanceof RemoteInputRequiredError ||\n error instanceof RemoteTaskError ||\n error instanceof OAuthFlowError\n ) {\n const body: Record<string, unknown> = { code: \"REMOTE_ERROR\", message: error.message }\n if (error instanceof RemoteRpcError) body.rpc = { code: error.code, status: error.status, data: error.data }\n if (error instanceof RemoteTaskError) {\n body.task = { taskId: error.taskId, status: error.status, ...(error.error ? { error: error.error } : {}) }\n }\n return body\n }\n return errorJson(error)\n}\n\nfunction usageError(message: string): MextError<\"INVALID_ARGUMENT\"> {\n return new MextError(\"INVALID_ARGUMENT\", message, {\n command: \"\",\n missing_fields: [],\n issues: [{ path: \"\", code: \"unknown_flag\", message }],\n expected_schema: {},\n examples: [],\n })\n}\n\n/* MRTR: InputRequiredResult → 프롬프트 → inputResponses */\n\n/**\n * elicitation/create 처리 (clientCapabilities = elicitation.form · url).\n * mode url = 로컬 ctx.ask url 과 같음 (askUrl: --yes 미적용, TTY 없음 · --json = INPUT_UNAVAILABLE). accept · decline.\n * requestedSchema 가 boolean 속성 하나 = 확인: --yes → 승인, TTY → [y/N], 그 외 INPUT_UNAVAILABLE.\n * 그 외 form = TTY 에서 필드별 입력 (스키마 모양으로 변환), TTY 없음 = INPUT_UNAVAILABLE.\n * 응답 = { action: \"accept\", content }. 이번 라운드 요청에 대한 응답만 보낸다\n */\nfunction inputHandler(\n io: CliIo,\n lines: LineReader,\n yes: boolean,\n json: boolean,\n command: string,\n signal: AbortSignal,\n): NonNullable<CallToolOptions[\"onInputRequired\"]> {\n const unavailable = (message: string, hint: string) =>\n new MextError(\"INPUT_UNAVAILABLE\", `${command} asked \"${message}\", but stdin is not a terminal.${hint}`, { command })\n const ask = async (prompt: string): Promise<string> => {\n const answer = await lines.question(prompt, signal)\n if (signal.aborted) throw new CliInterrupted()\n return answer ?? \"\"\n }\n return async (required: InputRequired): Promise<InputResponses> => {\n const out: InputResponses = {}\n for (const [key, request] of Object.entries(required.inputRequests ?? {})) {\n const params = isRecord(request.params) ? request.params : {}\n const message = typeof params.message === \"string\" ? params.message : \"Input required\"\n if (request.method !== \"elicitation/create\") {\n throw new RemoteTransportError(`${command}: unsupported input request ${request.method}.`)\n }\n if (params.mode === \"url\") {\n if (typeof params.url !== \"string\" || !/^https?:\\/\\//i.test(params.url)) {\n throw new RemoteTransportError(`${command}: url input request without an http(s) url.`)\n }\n const accepted = await askUrl(io, lines, { command, message, url: params.url }, { json, signal })\n out[key] = { action: accepted ? \"accept\" : \"decline\" }\n continue\n }\n const schema = isRecord(params.requestedSchema) ? params.requestedSchema : { type: \"object\", properties: {} }\n const confirmKey = confirmField(schema)\n if (confirmKey !== undefined) {\n if (yes) {\n out[key] = { action: \"accept\", content: { [confirmKey]: true } }\n continue\n }\n if (!io.isTTY) throw unavailable(message, \" Pass --yes to approve.\")\n const answer = await ask(`${message} [y/N] `)\n out[key] = { action: \"accept\", content: { [confirmKey]: /^y(es)?$/i.test(answer.trim()) } }\n continue\n }\n if (!io.isTTY) throw unavailable(message, \" Run it in an interactive terminal.\")\n io.stderr.write(`${message}\\n`)\n const spec = cliSpecFromJsonSchema(schema)\n const content: Record<string, unknown> = {}\n for (const f of spec.fields) {\n const answer = await ask(` ${f.key}${f.required ? \"\" : \" (optional)\"}: `)\n if (answer === \"\") continue\n if (f.kind.type === \"array\") {\n const kind = f.kind\n content[f.key] = answer.split(\",\").map((s) => {\n const r = coerceValue(kind, s.trim())\n return r.ok ? r.value : s\n })\n continue\n }\n const r = coerceValue(f.kind, answer)\n content[f.key] = r.ok ? r.value : answer\n }\n out[key] = { action: \"accept\", content }\n }\n return out\n }\n}\n\n/** requestedSchema 의 속성이 boolean 하나면 그 키 (확인 요청) */\nfunction confirmField(schema: Record<string, unknown>): string | undefined {\n const props = schema.properties\n if (!isRecord(props)) return undefined\n const keys = Object.keys(props)\n if (keys.length !== 1) return undefined\n const p = props[keys[0]!]\n return isRecord(p) && p.type === \"boolean\" ? keys[0] : undefined\n}\n"]}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/client/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { COMMAND, type Command } from \"../command.ts\"\nimport { inputDeclined, MextError, type MextErrorCode, type MextErrorDetails } from \"../errors.ts\"\nimport { isSegment } from \"../ids.ts\"\nimport type { CommandHelp, Help } from \"../mcp/help.ts\"\nimport type { NamespaceInfo, RegisteredCommand, Registry } from \"../registry.ts\"\nimport {\n createRemoteClient,\n isRecord,\n RemoteInputRequiredError,\n RemoteRpcError,\n RemoteTransportError,\n RemoteUnauthorizedError,\n type CallToolOptions,\n type CallToolResult,\n type InputRequired,\n type InputResponses,\n type RemoteClient,\n type RemoteTool,\n} from \"../remote/client.ts\"\nimport { credentialStore, envPrefix, type CredentialStore, type StoredCredentials } from \"../remote/credentials.ts\"\nimport { isExpired, OAuthFlowError, refreshCredentials } from \"../remote/oauth.ts\"\nimport { cliSpecFromJsonSchema, coerceValue, defineCliSpec, parseArgs } from \"../cli/args.ts\"\nimport { cliPath, renderHelp } from \"../cli/help.ts\"\nimport { askUrl } from \"../cli/ask-url.ts\"\nimport { saveContent } from \"../cli/media.ts\"\nimport { createLineReader, readAll, type CliIo, type LineReader } from \"../cli/io.ts\"\nimport {\n CliInterrupted,\n emitError,\n EXIT,\n errorJson,\n exitCodeOf,\n formatError,\n formatJson,\n formatProgress,\n formatResult,\n type CliErrorFormatter,\n} from \"../cli/output.ts\"\nimport { APPROVAL_META_KEY, MANIFEST_HASH_META_KEY, TOOLS_META_KEY } from \"../mcp/constants.ts\"\nimport { VERSION } from \"../version.ts\"\nimport { openSchema, schemaCacheDir, schemaCacheFile, type FetchedHelp, type Schema, type ToolListing } from \"./cache.ts\"\nimport { manifestFromTools, manifestHelp, type ClientManifest } from \"./manifest.ts\"\nimport { awaitTask, formatTaskStatus, isTaskResult, RemoteTaskError } from \"./task.ts\"\n\n/**\n * 원격 실행 공용 runner: mext run --url (bin = mext) 과 고객 CLI (bin = cli.bin) 가 같은 코드 경로.\n * 서버 MCP 엔드포인트의 dispatcher 도구 (execute · split 의 query · mutate) 또는 명령어별 도구 (command 노출, §12.2) 호출.\n * 노출 방식 = 번들 형태의 내장 manifest tools, 범용 = server/discover _meta[\"dev.mext/tools\"]. 권한 검사는 서버만.\n * 경로 해석 · help · 플래그 파싱 = HelpSource (캐시 · 내장 manifest · 서버 help, client/cache.ts) 의 입력 스키마 (JSON Schema).\n * 로컬 파싱 실패 (UNKNOWN_COMMAND · INVALID_ARGUMENT) = 서버 help 로 1회 재시도. tools/call 결과의 manifestHash 로 drift 감지.\n * 토큰 = <BIN>_TOKEN, 없으면 저장된 토큰 (<bin> login). 출력 · exit code 는 로컬 모드와 같다.\n * tasks 확장 선언 (§12.6): task 응답 = 종료까지 폴링 (client/task.ts), 결과 처리는 동기와 같다.\n *\n * 이 모듈 (와 import 대상) 은 고객 CLI 번들에 들어간다: Zod · MCP 서버 SDK · 핸들러 · 스캔 · 빌드 코드 import 금지.\n */\n\nexport interface RemoteRunOptions {\n /** 실행 파일 이름. 토큰 환경변수 (<BIN>_TOKEN) · 자격 증명 위치 (credentialStore bin) · clientInfo.name */\n bin: string\n /** MCP 엔드포인트 */\n url: string\n /** help · 오류 안내의 명령 접두. \"mext run --url <url>\" · \"myapp\" */\n prog: string\n /** login 안내 명령. \"mext login --url <url>\" · \"myapp login\" */\n login: string\n /** clientInfo.version */\n version: string\n /**\n * 번들 형태: 내장 manifest 로 help · 경로 해석 · 플래그 파싱 (help 에 네트워크 없음, 명령어 실행만 tools/list · tools/call).\n * 없음 = 범용 형태: 서버 help 조회\n */\n manifest?: ClientManifest\n /** 내장 manifest 의 manifestHash (빌드 시). manifest 와 같이 지정 */\n manifestHash?: string\n /** 사람용 루트 help 뒤에 붙일 텍스트 (고객 CLI 의 login · logout · mcp install 목록) */\n rootHelpFooter?: string\n /** 오류 출력 · exit code 커스텀 (cli.errors). 없음 = mext 기본 */\n formatError?: CliErrorFormatter\n}\n\n/** help 출처. 서버 (tools/list → dispatcher help 호출) · 내장 manifest · 스키마 캐시 (client/cache.ts Schema) */\nexport interface HelpSource {\n /** 대상 (\"\" = 루트) → help. 없는 대상 = MextError UNKNOWN_COMMAND */\n help(target: string): Promise<Help>\n}\n\nexport async function runRemote(options: RemoteRunOptions, argv: readonly string[], io: CliIo): Promise<number> {\n const { url, prog } = options\n const tokenEnv = `${envPrefix(options.bin)}_TOKEN`\n const ctx: ReportContext = {\n login: options.login,\n tokenEnv,\n auth: undefined,\n footer: options.rootHelpFooter,\n formatter: options.formatError,\n }\n const lead = { json: false, yes: false, help: false }\n let i = 0\n for (; i < argv.length; i++) {\n const tok = argv[i]!\n if (!tok.startsWith(\"-\") || tok === \"-\") break\n if (tok === \"--json\") lead.json = true\n else if (tok === \"--yes\") lead.yes = true\n else if (tok === \"--help\" || tok === \"-h\") lead.help = true\n else return report(usageError(`unknown flag ${tok} before the command`), io, prog, argv.includes(\"--json\"), ctx)\n }\n const rest = argv.slice(i)\n const beforeDashDash = rest.indexOf(\"--\") < 0 ? rest : rest.slice(0, rest.indexOf(\"--\"))\n const json = lead.json || beforeDashDash.includes(\"--json\")\n\n const controller = new AbortController()\n const onAbort = (): void => controller.abort(io.signal?.reason)\n if (io.signal?.aborted) onAbort()\n io.signal?.addEventListener(\"abort\", onAbort, { once: true })\n const lines = createLineReader(io)\n let session: Session | undefined\n let schema: Schema | undefined\n try {\n if (!/^https?:\\/\\//i.test(url)) throw usageError(`--url must be an http(s) URL (got \"${url}\")`)\n session = openSession(options, tokenEnv, io, controller.signal)\n const s = session\n schema = await openRunSchema(options, s, ctx, io)\n const source: HelpSource = schema\n const wantsHelp = lead.help || beforeDashDash.includes(\"--help\") || beforeDashDash.includes(\"-h\")\n let stdin: Promise<string> | undefined\n const readStdin = (): Promise<string> => (stdin ??= readAll(io.stdin))\n\n // 경로 해석 · 플래그 파싱 (로컬). 실패하면 서버 help 로 1회 재시도\n const plan = async (): Promise<Plan> => {\n // <prog> help [target...]\n if (rest[0] === \"help\") {\n const tokens = rest.slice(1).filter((t) => !t.startsWith(\"-\"))\n const resolved = await resolveRemotePath(source, tokens)\n if (resolved.consumed < tokens.length) throw await unknownAt(source, resolved, tokens.slice(resolved.consumed))\n return { kind: \"help\", help: resolved.help }\n }\n const resolved = await resolveRemotePath(source, rest)\n const { help, consumed } = resolved\n const command = help.kind === \"command\" ? help : help.kind === \"namespace\" ? help.command : undefined\n const next = rest[consumed]\n const acceptsPositional = command !== undefined && command.positional.length > 0\n if (help.kind !== \"command\" && next !== undefined && !next.startsWith(\"-\") && !acceptsPositional) {\n throw await unknownAt(source, resolved, rest.slice(consumed))\n }\n if (wantsHelp) return { kind: \"help\", help }\n if (!command) return { kind: \"namespace\", help }\n const entry = entryFromHelp(command)\n const parsed = await parseArgs(entry, rest.slice(consumed), { readStdin })\n return { kind: \"run\", command, entry, input: parsed.input, yes: parsed.yes }\n }\n let planned: Plan\n try {\n planned = await plan()\n } catch (error) {\n if (!isLocalParseFailure(error) || !schema.refetch()) throw error\n try {\n planned = await plan()\n } catch (retryError) {\n // 재조회 실패 (오프라인 등) = 원래 로컬 오류\n if (retryError instanceof RemoteTransportError || retryError instanceof RemoteRpcError) throw error\n throw retryError\n }\n }\n\n if (planned.kind === \"help\") return printHelp(planned.help, io, prog, json, ctx)\n if (planned.kind === \"namespace\") {\n const { help } = planned\n const id = help.kind === \"namespace\" ? help.id : \"\"\n const error = new MextError(\n \"UNKNOWN_COMMAND\",\n id === \"\" ? \"No command given.\" : `\"${cliPath(id)}\" is a namespace. Specify a command.`,\n { command: id, suggested: [], usage: id === \"\" ? \"help\" : `help ${id}` },\n )\n if (json) return report(error, io, prog, true, ctx)\n const text = `${formatError(error, prog)}\\n${helpText(help, prog, ctx)}`\n return emitError(io, { body: errorBody(error), text, exitCode: EXIT.usage, json: false }, ctx.formatter)\n }\n\n const { command, entry } = planned\n const yes = lead.yes || planned.yes\n // command 노출 (§12.2) = 도구 이름 = 정식 ID, 인자 = input. 그 외 = dispatcher { command, args }\n const exposed = (await exposureOf(options, schema)) === \"command\"\n const tool = exposed ? { name: entry.id, inputSchema: command.inputSchema } : commandTool(dispatcherOf(url, await schema.tools()), command)\n const input = planned.input as Record<string, unknown>\n const args = exposed ? input : { command: entry.id, args: input }\n const onInputRequired = inputHandler(io, lines, yes, json, entry.id, controller.signal)\n // 승인 (§4 승인 원격 CLI): --yes = 확인 표시 (client 방식 표면) + confirm 입력 요청 승인 (ask 방식, inputHandler)\n const callOnce = (confirmed: boolean): Promise<CallToolResult> =>\n s.call((o) =>\n s.client.callTool(tool, args, {\n ...o,\n ...(confirmed ? { meta: { [APPROVAL_META_KEY]: { confirmed: true } } } : {}),\n progressToken: \"mext-cli\",\n onNotification: (method, params) => {\n if (method !== \"notifications/progress\" || typeof params.progress !== \"number\") return\n const update: { progress: number; total?: number; message?: string } = { progress: params.progress }\n if (typeof params.total === \"number\") update.total = params.total\n if (typeof params.message === \"string\") update.message = params.message\n io.stderr.write(formatProgress(update))\n },\n onInputRequired,\n }),\n )\n let result = await callOnce(yes)\n // 확인 표시 없이 client 방식 표면에 닿음 = TTY 면 로컬 ask 와 같은 프롬프트 → 승인 = 확인 표시를 실어 1회 다시 호출\n if (!yes && io.isTTY && approvalReason(result) === \"unconfirmed\") {\n const answer = await lines.question(`${confirmationPrompt(command, input)} [y/N] `, controller.signal)\n if (controller.signal.aborted) throw new CliInterrupted()\n if (!/^y(es)?$/i.test((answer ?? \"\").trim())) throw inputDeclined(entry.id, \"confirm\")\n result = await callOnce(true)\n }\n // tasks 확장 (§12.6): 종료까지 폴링 → completed result = 동기 결과와 같은 경로 (출력 · exit code)\n if (isTaskResult(result)) {\n result = await awaitTask(result, {\n client: s.client,\n call: (fn) => s.call(fn),\n signal: controller.signal,\n onInputRequired,\n onStatus: (message) => io.stderr.write(formatTaskStatus(message)),\n })\n }\n // drift: 이번 결과는 그대로, 다르면 캐시 stale (다음 실행에서 서버 help)\n schema.observe(metaHash(result))\n if (result.isError === true) throw toolError(result, ctx)\n const value = result.structuredContent === undefined ? textValue(result) : result.structuredContent\n io.stdout.write(json ? formatJson(value) : formatResult(value))\n // 결과 콘텐츠 (spec §4): image · audio · resource_link 블록 = 로컬 실행과 같은 저장 · stderr 줄\n saveContent(result.content ?? [], { command: entry.id, bin: options.bin, env: io.env, cwd: io.cwd, stderr: io.stderr })\n return EXIT.ok\n } catch (error) {\n if (session) ctx.auth = session.auth\n if (controller.signal.aborted) return report(new CliInterrupted(), io, prog, json, ctx)\n return report(error, io, prog, json, ctx)\n } finally {\n io.signal?.removeEventListener(\"abort\", onAbort)\n lines.close()\n await schema?.save()\n }\n}\n\n/** 로컬 경로 해석 · 플래그 파싱 결과 */\ntype Plan =\n | { kind: \"help\"; help: Help }\n | { kind: \"namespace\"; help: Help }\n | { kind: \"run\"; command: CommandHelp; entry: RegisteredCommand; input: unknown; yes: boolean }\n\n/** 서버 도구 노출 방식: 번들 형태 = 내장 manifest tools, 범용 = server/discover _meta[\"dev.mext/tools\"] (스키마 캐시) */\nasync function exposureOf(options: RemoteRunOptions, schema: Schema): Promise<string | undefined> {\n return options.manifest ? options.manifest.tools : schema.exposure()\n}\n\n/** isError 결과가 APPROVAL_REQUIRED 면 그 reason (§4 승인) */\nfunction approvalReason(result: CallToolResult): string | undefined {\n if (result.isError !== true) return undefined\n const sc = result.structuredContent\n const body = isRecord(sc) && isRecord(sc.error) ? sc.error : undefined\n return body?.code === \"APPROVAL_REQUIRED\" && typeof body.reason === \"string\" ? body.reason : undefined\n}\n\n/** 승인 프롬프트 문구. 로컬 ask (invoke.ts confirmationMessage) 와 같은 형식, 입력 = CLI 가 보낸 값 (invoke.ts 는 Zod 를 import 해 번들에 넣지 않는다) */\nfunction confirmationPrompt(command: CommandHelp, input: Record<string, unknown>): string {\n return `Run ${command.id} with ${JSON.stringify(input)}?${command.destructive ? \" This command is destructive.\" : \"\"}`\n}\n\n/** 서버 help 재조회 대상 로컬 오류 */\nfunction isLocalParseFailure(error: unknown): boolean {\n return error instanceof MextError && (error.code === \"UNKNOWN_COMMAND\" || error.code === \"INVALID_ARGUMENT\")\n}\n\n/** 결과 _meta[\"dev.mext/manifestHash\"] */\nfunction metaHash(result: CallToolResult): string | undefined {\n const meta = result._meta\n const value = isRecord(meta) ? meta[MANIFEST_HASH_META_KEY] : undefined\n return typeof value === \"string\" ? value : undefined\n}\n\n/** 이번 실행의 스키마 상태: 캐시 파일 (<BIN>_CACHE_DIR · XDG · HOME) · 내장 manifest · 서버 help */\nfunction openRunSchema(options: RemoteRunOptions, s: Session, ctx: ReportContext, io: CliIo): Promise<Schema> {\n const dir = schemaCacheDir(options.bin, io.env)\n return openSchema({\n file: dir === undefined ? undefined : schemaCacheFile(dir, options.url),\n url: options.url,\n client: { bin: options.bin, version: options.version, mext: VERSION },\n ...(options.manifest && options.manifestHash !== undefined\n ? { embedded: { manifest: options.manifest, hash: options.manifestHash } }\n : {}),\n fetchHelp: serverHelpFetcher(s, ctx, options.manifest?.tools),\n fetchTools: async () => {\n // 범용 형태 = 노출 방식을 server/discover 로 (번들 = 내장 manifest, 조회 안 함).\n // 순차: 401 → refresh 1회 규칙 (Session.call) 을 동시 요청이 나눠 쓰지 않게\n const r = await s.call((o) => s.client.listToolsResult(o))\n const exposure = options.manifest ? undefined : await discoverExposure(s)\n if ((options.manifest?.tools ?? exposure) !== \"command\") dispatcherOf(s.url, r.tools)\n return {\n tools: r.tools,\n ...(r.ttlMs !== undefined ? { ttlMs: r.ttlMs } : {}),\n ...(exposure !== undefined ? { exposure } : {}),\n }\n },\n warn: (message) => io.stderr.write(message),\n })\n}\n\n/* 세션: 클라이언트 · 토큰 · dispatcher 도구 */\n\n/** 토큰 출처. undefined = 아직 요청 전 (저장분 미조회) */\ntype AuthSource = \"env\" | \"stored\" | \"none\" | undefined\n\ninterface Tools {\n /** tools/list 결과 */\n list: RemoteTool[]\n /** help 호출 도구 (execute 또는 split 의 query) */\n helpTool: RemoteTool\n}\n\ninterface Session {\n url: string\n client: RemoteClient\n /** 요청한 토큰 출처 (첫 요청 때 결정) */\n readonly auth: AuthSource\n /** 401 이면 refresh_token 으로 1회 갱신 후 재시도 */\n call<T>(fn: (options: { signal: AbortSignal }) => Promise<T>): Promise<T>\n}\n\n/** 네트워크 · 키체인 접근은 첫 요청까지 미룬다 (번들 형태의 help 는 둘 다 없음) */\nfunction openSession(options: RemoteRunOptions, tokenEnv: string, io: CliIo, signal: AbortSignal): Session {\n const { url } = options\n const envToken = io.env[tokenEnv] !== undefined && io.env[tokenEnv] !== \"\" ? io.env[tokenEnv] : undefined\n const store: CredentialStore | undefined =\n envToken === undefined ? credentialStore({ env: io.env, bin: options.bin }) : undefined\n let stored: StoredCredentials | undefined\n let auth: AuthSource = envToken !== undefined ? \"env\" : undefined\n let refreshed = false\n const refresh = async (): Promise<boolean> => {\n if (!store || !stored?.refresh_token || refreshed) return false\n refreshed = true\n try {\n stored = await refreshCredentials(stored)\n await store.set(url, stored).catch(() => {})\n return true\n } catch {\n return false\n }\n }\n let loading: Promise<void> | undefined\n const load = (): Promise<void> =>\n (loading ??= (async () => {\n if (!store) return\n stored = await store.get(url).catch(() => undefined)\n if (stored && isExpired(stored)) await refresh()\n auth = stored ? \"stored\" : \"none\"\n })())\n const client = createRemoteClient({\n url,\n clientInfo: { name: options.bin, version: options.version },\n token: async () => {\n await load()\n return envToken ?? stored?.access_token\n },\n })\n const call = async <T>(fn: (o: { signal: AbortSignal }) => Promise<T>): Promise<T> => {\n try {\n return await fn({ signal })\n } catch (error) {\n if (error instanceof RemoteUnauthorizedError && (await refresh())) return fn({ signal })\n throw error\n }\n }\n return {\n url,\n client,\n get auth() {\n return auth\n },\n call,\n }\n}\n\n/** tools/list 결과 → dispatcher 도구 (execute 또는 query · mutate). 없으면 RemoteTransportError */\nfunction dispatcherOf(url: string, list: RemoteTool[]): Tools {\n const execute = list.find((t) => t.name === \"execute\")\n const query = list.find((t) => t.name === \"query\")\n const helpTool = execute ?? query\n if (!helpTool || (!execute && !list.some((t) => t.name === \"mutate\"))) {\n throw new RemoteTransportError(`${url} does not expose mext dispatcher tools (execute, or query and mutate).`)\n }\n return { list, helpTool }\n}\n\n/** 명령어를 호출할 도구: help 의 tool (split) → execute → readOnly 면 query, 아니면 mutate */\nfunction commandTool(tools: Tools, command: CommandHelp): RemoteTool {\n const byName = (name: string | undefined) => (name === undefined ? undefined : tools.list.find((t) => t.name === name))\n return byName(command.tool) ?? byName(\"execute\") ?? byName(command.readOnly ? \"query\" : \"mutate\") ?? tools.helpTool\n}\n\n/** server/discover _meta[\"dev.mext/tools\"]. 없음 · JSON-RPC 오류 (discover 없는 서버 등) = undefined (dispatcher) */\nasync function discoverExposure(s: Session): Promise<string | undefined> {\n try {\n const result = await s.call((o) => s.client.request(\"server/discover\", {}, o))\n const value = isRecord(result._meta) ? result._meta[TOOLS_META_KEY] : undefined\n return typeof value === \"string\" ? value : undefined\n } catch (error) {\n if (error instanceof RemoteRpcError) return undefined\n throw error\n }\n}\n\n/**\n * 서버 help. dispatcher = help 호출 (tools/call), command 노출 = tools/list 로 만든 manifest 의 help (help 도구 없음).\n * UNKNOWN_COMMAND = 캐시할 결과, 그 외 오류 = throw\n */\nfunction serverHelpFetcher(\n s: Session,\n ctx: ReportContext,\n embeddedExposure: string | undefined,\n): (target: string, listing: () => Promise<ToolListing>) => Promise<FetchedHelp> {\n return async (target, listing) => {\n const { tools, exposure } = await listing()\n if ((embeddedExposure ?? exposure) === \"command\") {\n try {\n return { value: { help: manifestHelp(manifestFromTools(tools), target) }, hash: undefined }\n } catch (error) {\n if (error instanceof MextError && error.code === \"UNKNOWN_COMMAND\") return { value: { error: error.toJSON() }, hash: undefined }\n throw error\n }\n }\n const { helpTool } = dispatcherOf(s.url, tools)\n const args = target === \"\" ? { command: \"help\" } : { command: \"help\", args: { target } }\n const result = await s.call((o) => s.client.callTool(helpTool, args, o))\n const hash = metaHash(result)\n if (result.isError === true) {\n const error = toolError(result, ctx)\n if (error instanceof MextError && error.code === \"UNKNOWN_COMMAND\") return { value: { error: error.toJSON() }, hash }\n throw error\n }\n const value = result.structuredContent\n if (!isRecord(value) || (value.kind !== \"root\" && value.kind !== \"namespace\" && value.kind !== \"command\")) {\n throw new RemoteTransportError(`${s.url} returned an unexpected help result.`)\n }\n return { value: { help: value as unknown as Help }, hash }\n }\n}\n\n/** 번들 형태: 내장 manifest (네트워크 없음) */\nexport function manifestHelpSource(manifest: ClientManifest): HelpSource {\n return { help: async (target) => manifestHelp(manifest, target) }\n}\n\n/* 경로 해석: 앞쪽 세그먼트 토큰의 가장 긴 접두 (로컬 resolvePath 와 같은 결과) */\n\ninterface ResolvedPath {\n help: Help\n consumed: number\n /** 가장 긴 후보의 UNKNOWN_COMMAND (있으면) */\n unknown: MextError | undefined\n}\n\nasync function resolveRemotePath(source: HelpSource, tokens: readonly string[]): Promise<ResolvedPath> {\n const segs: string[] = []\n for (const t of tokens) {\n if (!isSegment(t)) break\n segs.push(t)\n }\n let unknown: MextError | undefined\n for (let k = segs.length; k >= 0; k--) {\n try {\n return { help: await source.help(segs.slice(0, k).join(\".\")), consumed: k, unknown }\n } catch (error) {\n if (k > 0 && error instanceof MextError && error.code === \"UNKNOWN_COMMAND\") {\n unknown ??= error\n continue\n }\n throw error\n }\n }\n throw new Error(\"unreachable\")\n}\n\n/** 해석되지 않은 경로 → UNKNOWN_COMMAND (suggested · usage) */\nasync function unknownAt(source: HelpSource, resolved: ResolvedPath, tail: readonly string[]): Promise<MextError> {\n if (resolved.unknown) return resolved.unknown\n const id = resolved.help.kind === \"root\" ? \"\" : resolved.help.id\n const first = tail.find((t) => !t.startsWith(\"-\"))\n const candidate = [id, first ?? \"\"].filter((x) => x !== \"\").join(\".\")\n try {\n await source.help(candidate)\n } catch (error) {\n if (error instanceof MextError) return error\n throw error\n }\n return new MextError(\"UNKNOWN_COMMAND\", `Unknown command \"${candidate}\".`, { command: candidate, suggested: [], usage: \"help\" })\n}\n\n/* help → 로컬 렌더러용 Registry (같은 help 텍스트) */\n\n/** 원격 명령어의 input 자리. CLI 필드는 defineCliSpec (JSON Schema 분석) 이 정하므로 Zod 스키마가 필요 없다 */\nconst REMOTE_INPUT = { _zod: { def: { shape: {} } } } as unknown as Command[\"input\"]\n\nfunction commandOf(meta: {\n description: string\n readOnly: boolean\n destructive: boolean\n requiresConfirmation: boolean\n scopes?: readonly string[]\n examples?: readonly unknown[]\n positional?: readonly string[]\n needsApproval?: unknown\n}): Command {\n return {\n [COMMAND]: true,\n description: meta.description,\n input: REMOTE_INPUT,\n output: undefined,\n readOnly: meta.readOnly,\n destructive: meta.destructive,\n requiresConfirmation: meta.requiresConfirmation,\n scopes: [...(meta.scopes ?? [])],\n examples: [...(meta.examples ?? [])] as Command[\"examples\"],\n positional: [...(meta.positional ?? [])],\n aliases: [],\n // 조건부 승인 (help 의 needsApproval: \"conditional\") = help 렌더러용 자리 표시 (호출하지 않는다)\n ...(meta.needsApproval === \"conditional\" ? { needsApproval: remoteOnly } : {}),\n execute() {\n throw new Error(\"remote command\")\n },\n }\n}\n\nfunction remoteOnly(): never {\n throw new Error(\"remote command\")\n}\n\n/** 원격 명령어 help → RegisteredCommand (CLI 필드 = inputSchema 분석) */\nexport function entryFromHelp(help: CommandHelp): RegisteredCommand {\n const entry: RegisteredCommand = {\n id: help.id,\n command: commandOf(help),\n aliases: [...help.aliases],\n file: undefined,\n inputSchema: help.inputSchema,\n outputSchema: help.outputSchema,\n }\n defineCliSpec(entry, cliSpecFromJsonSchema(help.inputSchema, help.positional))\n return entry\n}\n\nfunction registryFromHelp(help: Help): Registry {\n const commands = new Map<string, RegisteredCommand>()\n const aliases = new Map<string, string>()\n const namespaces = new Map<string, NamespaceInfo>()\n if (help.kind === \"command\") {\n const entry = entryFromHelp(help)\n commands.set(entry.id, entry)\n for (const a of entry.aliases) aliases.set(a, entry.id)\n namespaces.set(\"\", { id: \"\", description: undefined, commands: [], namespaces: [] })\n return { commands, aliases, namespaces }\n }\n const id = help.kind === \"root\" ? \"\" : help.id\n namespaces.set(id, {\n id,\n description: help.description,\n commands: help.commands.map((c) => c.id),\n namespaces: help.namespaces.map((n) => n.id),\n })\n for (const n of help.namespaces) namespaces.set(n.id, { id: n.id, description: n.description, commands: [], namespaces: [] })\n for (const c of help.commands) {\n commands.set(c.id, {\n id: c.id,\n command: commandOf(c),\n aliases: [],\n file: undefined,\n inputSchema: {},\n outputSchema: undefined,\n })\n }\n if (help.kind === \"namespace\" && help.command) commands.set(help.command.id, entryFromHelp(help.command))\n return { commands, aliases, namespaces }\n}\n\n/** 사람용 help 텍스트. 루트면 footer (고객 CLI 내장 명령) 를 붙인다 */\nfunction helpText(help: Help, prog: string, ctx: ReportContext): string {\n const target = help.kind === \"root\" ? \"\" : help.id\n const text = renderHelp(registryFromHelp(help), target, { prog })\n return help.kind === \"root\" && ctx.footer ? `${text}\\n${ctx.footer}` : text\n}\n\n/** --help --json = help 결과 그대로 (서버 help 의 structuredContent · 내장 manifest help) */\nfunction printHelp(help: Help, io: CliIo, prog: string, json: boolean, ctx: ReportContext): number {\n io.stdout.write(json ? formatJson(help) : helpText(help, prog, ctx))\n return EXIT.ok\n}\n\n/* 결과 · 오류 */\n\nconst MEXT_CODES: readonly MextErrorCode[] = [\n \"UNKNOWN_COMMAND\",\n \"INVALID_ARGUMENT\",\n \"UNAUTHENTICATED\",\n \"PERMISSION_DENIED\",\n \"INPUT_UNAVAILABLE\",\n \"APPROVAL_REQUIRED\",\n]\n\n/** 서버 핸들러 예외 등 mext 구조화 오류 외의 도구 오류. --json = 서버 오류 본문 그대로, exit 1 */\nexport class RemoteExecutionError extends Error {\n readonly body: Record<string, unknown>\n constructor(body: Record<string, unknown>) {\n super(typeof body.message === \"string\" ? body.message : \"Remote command failed.\")\n this.name = \"RemoteExecutionError\"\n this.body = body\n }\n}\n\ninterface ReportContext {\n /** login 안내 명령 */\n login: string\n /** <BIN>_TOKEN */\n tokenEnv: string\n auth: AuthSource\n /** 루트 help footer */\n footer?: string | undefined\n formatter?: CliErrorFormatter | undefined\n}\n\n/** isError 결과 → MextError (code 가 mext 구조화 오류면) 또는 RemoteExecutionError */\nfunction toolError(result: CallToolResult, ctx: ReportContext): Error {\n const sc = result.structuredContent\n const body = isRecord(sc) && isRecord(sc.error) ? sc.error : undefined\n if (!body) return new RemoteExecutionError({ code: \"EXECUTION_FAILED\", message: textValue(result) ?? \"Remote command failed.\" })\n const { code, message, ...details } = body\n if (typeof code === \"string\" && (MEXT_CODES as readonly string[]).includes(code)) {\n const text = typeof message === \"string\" ? message : code\n if (code === \"UNAUTHENTICATED\") {\n return new MextError(\"UNAUTHENTICATED\", text, { ...(details as MextErrorDetails[\"UNAUTHENTICATED\"]), login: ctx.login })\n }\n return new MextError(code as MextErrorCode, text, details as never)\n }\n return new RemoteExecutionError(body)\n}\n\nfunction textValue(result: CallToolResult): string | undefined {\n const texts = (result.content ?? []).flatMap((c) =>\n isRecord(c) && c.type === \"text\" && typeof c.text === \"string\" ? [c.text] : [],\n )\n return texts.length > 0 ? texts.join(\"\\n\") : undefined\n}\n\n/** 401 → UNAUTHENTICATED (login 안내 포함) */\nfunction unauthenticatedFrom(error: RemoteUnauthorizedError, ctx: ReportContext): MextError {\n const data = isRecord(error.data) ? error.data : {}\n const reason =\n data.reason === \"invalid_token\" || data.reason === \"missing_token\"\n ? data.reason\n : error.challenge.error === \"invalid_token\"\n ? \"invalid_token\"\n : \"missing_token\"\n let message = typeof data.message === \"string\" ? data.message : error.message\n if (ctx.auth === \"env\") message += ` ${ctx.tokenEnv} was rejected.`\n return new MextError(\"UNAUTHENTICATED\", message, { reason, login: ctx.login })\n}\n\nfunction report(error: unknown, io: CliIo, prog: string, json: boolean, ctx: ReportContext): number {\n let e = error\n if (e instanceof RemoteUnauthorizedError) e = unauthenticatedFrom(e, ctx)\n let text = formatError(e, prog)\n if (e instanceof MextError && e.code === \"PERMISSION_DENIED\" && ctx.auth === \"none\") {\n const reason = (e.details as MextErrorDetails[\"PERMISSION_DENIED\"]).reason\n if (reason === \"anonymous\") text += `Run \"${ctx.login}\" to log in.\\n`\n }\n // 확인 표시 없이 거부 (TTY 없음): 로컬 ask 의 안내와 같은 문구\n if (e instanceof MextError && e.code === \"APPROVAL_REQUIRED\" && (e.details as MextErrorDetails[\"APPROVAL_REQUIRED\"]).reason === \"unconfirmed\") {\n text += \"Pass --yes to approve.\\n\"\n }\n return emitError(io, { body: errorBody(e), text, exitCode: exitCodeOf(e), json }, ctx.formatter)\n}\n\nfunction errorBody(error: unknown): Record<string, unknown> {\n if (error instanceof RemoteExecutionError) return error.body\n if (\n error instanceof RemoteTransportError ||\n error instanceof RemoteRpcError ||\n error instanceof RemoteInputRequiredError ||\n error instanceof RemoteTaskError ||\n error instanceof OAuthFlowError\n ) {\n const body: Record<string, unknown> = { code: \"REMOTE_ERROR\", message: error.message }\n if (error instanceof RemoteRpcError) body.rpc = { code: error.code, status: error.status, data: error.data }\n if (error instanceof RemoteTaskError) {\n body.task = { taskId: error.taskId, status: error.status, ...(error.error ? { error: error.error } : {}) }\n }\n return body\n }\n return errorJson(error)\n}\n\nfunction usageError(message: string): MextError<\"INVALID_ARGUMENT\"> {\n return new MextError(\"INVALID_ARGUMENT\", message, {\n command: \"\",\n missing_fields: [],\n issues: [{ path: \"\", code: \"unknown_flag\", message }],\n expected_schema: {},\n examples: [],\n })\n}\n\n/* MRTR: InputRequiredResult → 프롬프트 → inputResponses */\n\n/**\n * elicitation/create 처리 (clientCapabilities = elicitation.form · url).\n * mode url = 로컬 ctx.ask url 과 같음 (askUrl: --yes 미적용, TTY 없음 · --json = INPUT_UNAVAILABLE). accept · decline.\n * requestedSchema 가 boolean 속성 하나 = 확인: --yes → 승인, TTY → [y/N], 그 외 INPUT_UNAVAILABLE.\n * 그 외 form = TTY 에서 필드별 입력 (스키마 모양으로 변환), TTY 없음 = INPUT_UNAVAILABLE.\n * 응답 = { action: \"accept\", content }. 이번 라운드 요청에 대한 응답만 보낸다\n */\nfunction inputHandler(\n io: CliIo,\n lines: LineReader,\n yes: boolean,\n json: boolean,\n command: string,\n signal: AbortSignal,\n): NonNullable<CallToolOptions[\"onInputRequired\"]> {\n const unavailable = (message: string, hint: string) =>\n new MextError(\"INPUT_UNAVAILABLE\", `${command} asked \"${message}\", but stdin is not a terminal.${hint}`, { command })\n const ask = async (prompt: string): Promise<string> => {\n const answer = await lines.question(prompt, signal)\n if (signal.aborted) throw new CliInterrupted()\n return answer ?? \"\"\n }\n return async (required: InputRequired): Promise<InputResponses> => {\n const out: InputResponses = {}\n for (const [key, request] of Object.entries(required.inputRequests ?? {})) {\n const params = isRecord(request.params) ? request.params : {}\n const message = typeof params.message === \"string\" ? params.message : \"Input required\"\n if (request.method !== \"elicitation/create\") {\n throw new RemoteTransportError(`${command}: unsupported input request ${request.method}.`)\n }\n if (params.mode === \"url\") {\n if (typeof params.url !== \"string\" || !/^https?:\\/\\//i.test(params.url)) {\n throw new RemoteTransportError(`${command}: url input request without an http(s) url.`)\n }\n const accepted = await askUrl(io, lines, { command, message, url: params.url }, { json, signal })\n out[key] = { action: accepted ? \"accept\" : \"decline\" }\n continue\n }\n const schema = isRecord(params.requestedSchema) ? params.requestedSchema : { type: \"object\", properties: {} }\n const confirmKey = confirmField(schema)\n if (confirmKey !== undefined) {\n if (yes) {\n out[key] = { action: \"accept\", content: { [confirmKey]: true } }\n continue\n }\n if (!io.isTTY) throw unavailable(message, \" Pass --yes to approve.\")\n const answer = await ask(`${message} [y/N] `)\n out[key] = { action: \"accept\", content: { [confirmKey]: /^y(es)?$/i.test(answer.trim()) } }\n continue\n }\n if (!io.isTTY) throw unavailable(message, \" Run it in an interactive terminal.\")\n io.stderr.write(`${message}\\n`)\n const spec = cliSpecFromJsonSchema(schema)\n const content: Record<string, unknown> = {}\n for (const f of spec.fields) {\n const answer = await ask(` ${f.key}${f.required ? \"\" : \" (optional)\"}: `)\n if (answer === \"\") continue\n if (f.kind.type === \"array\") {\n const kind = f.kind\n content[f.key] = answer.split(\",\").map((s) => {\n const r = coerceValue(kind, s.trim())\n return r.ok ? r.value : s\n })\n continue\n }\n const r = coerceValue(f.kind, answer)\n content[f.key] = r.ok ? r.value : answer\n }\n out[key] = { action: \"accept\", content }\n }\n return out\n }\n}\n\n/** requestedSchema 의 속성이 boolean 하나면 그 키 (확인 요청) */\nfunction confirmField(schema: Record<string, unknown>): string | undefined {\n const props = schema.properties\n if (!isRecord(props)) return undefined\n const keys = Object.keys(props)\n if (keys.length !== 1) return undefined\n const p = props[keys[0]!]\n return isRecord(p) && p.type === \"boolean\" ? keys[0] : undefined\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { APPROVAL_META_KEY } from "../mcp/constants.ts";
2
2
  import type { Help } from "../mcp/help.ts";
3
- import type { AnyCommands, CallArgs, ClientOptions, CommandInfo, CommandList, CommandMap, RequestOptions, SafeResult, ServerInfo, TaskHandle } from "./types.ts";
3
+ import type { AnyCommands, CallArgs, ClientOptions, CommandInfo, CommandList, CommandMap, RequestOptions, SafeResult, ServerInfo, SubscribeOptions, Subscription, TaskHandle } from "./types.ts";
4
4
  /**
5
5
  * 타입 client (specs/client.md). 고객 CLI (client/runner.ts) 와 같은 원격 호출 코드 위의 얇은 계층:
6
6
  * 전송 · MRTR 재시도 = remote/client.ts, task 폴링 = client/task.ts, command 노출의 목록 = client/manifest.ts.
@@ -48,6 +48,8 @@ export interface MextClient<C extends CommandMap<C> = AnyCommands> {
48
48
  server(options?: RequestOptions): Promise<ServerInfo>;
49
49
  /** 이미 만든 task 의 조회 · 대기 · 취소 */
50
50
  task(taskId: string): TaskHandle;
51
+ /** 자원 갱신 알림 구독 (subscriptions/listen). 서버 ack 후 resolve. ack 전 실패 = CallError (취소 = signal.reason) */
52
+ subscribe(uris: readonly string[], options?: SubscribeOptions): Promise<Subscription>;
51
53
  /** 목록 · 스키마 · 노출 방식 캐시 비움 */
52
54
  refresh(): void;
53
55
  }
@@ -188,10 +188,14 @@ export function createClient(options) {
188
188
  const info = await describe(id, o);
189
189
  return { tool: dispatcherTool(info.tool ?? (info.readOnly ? "query" : "mutate")), args: { command: id, args: input } };
190
190
  };
191
- const finish = (result, command) => {
191
+ const finish = (result, command, o = {}) => {
192
192
  observe(metaHash(result));
193
193
  if (result.isError === true)
194
194
  throw toolError(result, command);
195
+ // 결과 콘텐츠 (mext.md §4): 값 text 외 블록 (image · audio · resource_link) = onContent
196
+ const blocks = (result.content ?? []).filter((c) => isRecord(c) && c.type !== "text");
197
+ if (blocks.length > 0)
198
+ o.onContent?.(blocks);
195
199
  return result.structuredContent === undefined ? (textValue(result) ?? null) : result.structuredContent;
196
200
  };
197
201
  /** task 폴링 (client/task.ts awaitTask). tasks/get 을 감싸 상태 변화마다 onTask */
@@ -256,7 +260,7 @@ export function createClient(options) {
256
260
  }
257
261
  if (isTaskResult(result))
258
262
  result = await waitTask(result, id, o);
259
- return finish(result, id);
263
+ return finish(result, id, o);
260
264
  }
261
265
  catch (error) {
262
266
  throw normalize(error, id, o.signal);
@@ -285,7 +289,7 @@ export function createClient(options) {
285
289
  async wait(o = {}) {
286
290
  try {
287
291
  const view = await remote.getTask(taskId, sig(o));
288
- return finish(await waitTask({ ...view, taskId }, "", o), "");
292
+ return finish(await waitTask({ ...view, taskId }, "", o), "", o);
289
293
  }
290
294
  catch (error) {
291
295
  throw normalize(error, "", o.signal);
@@ -300,6 +304,34 @@ export function createClient(options) {
300
304
  }
301
305
  },
302
306
  });
307
+ /** subscriptions/listen (specs/client.md §2.4). 알림 중 notifications/resources/updated 만 onUpdate */
308
+ const subscribe = async (uris, o) => {
309
+ let open = true;
310
+ const onUpdate = o.onUpdate;
311
+ const stream = await guarded("", o, () => remote.listen({ resourceSubscriptions: [...uris] }, {
312
+ ...sig(o),
313
+ onNotification: (method, params) => {
314
+ if (open && method === "notifications/resources/updated" && typeof params.uri === "string")
315
+ onUpdate?.({ uri: params.uri });
316
+ },
317
+ }));
318
+ const acked = stream.acknowledged.resourceSubscriptions;
319
+ const closed = stream.done.then((end) => {
320
+ open = false;
321
+ if (end.reason !== "error")
322
+ return end;
323
+ const error = normalize(end.error, "", undefined);
324
+ return { reason: "error", error: error instanceof CallError ? error : new CallError({ code: "REMOTE_ERROR", message: errorText(error) }, "", { cause: error }) };
325
+ });
326
+ return {
327
+ resources: Array.isArray(acked) ? acked.filter((u) => typeof u === "string") : [],
328
+ closed,
329
+ close: () => {
330
+ open = false;
331
+ stream.close();
332
+ },
333
+ };
334
+ };
303
335
  const guarded = async (command, o, fn) => {
304
336
  try {
305
337
  return await fn();
@@ -327,6 +359,7 @@ export function createClient(options) {
327
359
  help: (t = "", o = {}) => guarded(t, o, () => help(t.trim(), o)),
328
360
  server: (o = {}) => guarded("", o, () => serverInfo(o)),
329
361
  task: taskHandle,
362
+ subscribe: (uris, o = {}) => subscribe(uris, o),
330
363
  refresh,
331
364
  };
332
365
  }
@@ -430,6 +463,9 @@ function normalize(error, command, signal) {
430
463
  return new CallError({ code: "REMOTE_ERROR", message: error.message }, command, { cause: error });
431
464
  return error;
432
465
  }
466
+ function errorText(error) {
467
+ return error instanceof Error ? error.message : String(error);
468
+ }
433
469
  function textValue(result) {
434
470
  const texts = (result.content ?? []).flatMap((c) => (isRecord(c) && c.type === "text" && typeof c.text === "string" ? [c.text] : []));
435
471
  return texts.length > 0 ? texts.join("\n") : undefined;