@obov/mext 0.0.0-stage → 0.1.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.
Files changed (155) hide show
  1. package/dist/build-cli.d.ts +39 -0
  2. package/dist/build-cli.js +160 -0
  3. package/dist/build-cli.js.map +1 -0
  4. package/dist/build.d.ts +65 -0
  5. package/dist/build.js +252 -0
  6. package/dist/build.js.map +1 -0
  7. package/dist/cli/args.d.ts +107 -0
  8. package/dist/cli/args.js +621 -0
  9. package/dist/cli/args.js.map +1 -0
  10. package/dist/cli/bin.d.ts +2 -0
  11. package/dist/cli/bin.js +13 -0
  12. package/dist/cli/bin.js.map +1 -0
  13. package/dist/cli/build.d.ts +11 -0
  14. package/dist/cli/build.js +87 -0
  15. package/dist/cli/build.js.map +1 -0
  16. package/dist/cli/dev-lock.d.ts +23 -0
  17. package/dist/cli/dev-lock.js +68 -0
  18. package/dist/cli/dev-lock.js.map +1 -0
  19. package/dist/cli/dev-server.d.ts +20 -0
  20. package/dist/cli/dev-server.js +74 -0
  21. package/dist/cli/dev-server.js.map +1 -0
  22. package/dist/cli/dev.d.ts +21 -0
  23. package/dist/cli/dev.js +564 -0
  24. package/dist/cli/dev.js.map +1 -0
  25. package/dist/cli/help.d.ts +31 -0
  26. package/dist/cli/help.js +238 -0
  27. package/dist/cli/help.js.map +1 -0
  28. package/dist/cli/io.d.ts +26 -0
  29. package/dist/cli/io.js +74 -0
  30. package/dist/cli/io.js.map +1 -0
  31. package/dist/cli/login.d.ts +32 -0
  32. package/dist/cli/login.js +284 -0
  33. package/dist/cli/login.js.map +1 -0
  34. package/dist/cli/logout.d.ts +9 -0
  35. package/dist/cli/logout.js +105 -0
  36. package/dist/cli/logout.js.map +1 -0
  37. package/dist/cli/main.d.ts +19 -0
  38. package/dist/cli/main.js +77 -0
  39. package/dist/cli/main.js.map +1 -0
  40. package/dist/cli/mcp.d.ts +16 -0
  41. package/dist/cli/mcp.js +92 -0
  42. package/dist/cli/mcp.js.map +1 -0
  43. package/dist/cli/output.d.ts +34 -0
  44. package/dist/cli/output.js +172 -0
  45. package/dist/cli/output.js.map +1 -0
  46. package/dist/cli/remote.d.ts +17 -0
  47. package/dist/cli/remote.js +35 -0
  48. package/dist/cli/remote.js.map +1 -0
  49. package/dist/cli/run.d.ts +14 -0
  50. package/dist/cli/run.js +218 -0
  51. package/dist/cli/run.js.map +1 -0
  52. package/dist/cli/start.d.ts +8 -0
  53. package/dist/cli/start.js +37 -0
  54. package/dist/cli/start.js.map +1 -0
  55. package/dist/client/cache.d.ts +104 -0
  56. package/dist/client/cache.js +208 -0
  57. package/dist/client/cache.js.map +1 -0
  58. package/dist/client/main.d.ts +25 -0
  59. package/dist/client/main.js +100 -0
  60. package/dist/client/main.js.map +1 -0
  61. package/dist/client/manifest.d.ts +19 -0
  62. package/dist/client/manifest.js +68 -0
  63. package/dist/client/manifest.js.map +1 -0
  64. package/dist/client/runner.d.ts +49 -0
  65. package/dist/client/runner.js +562 -0
  66. package/dist/client/runner.js.map +1 -0
  67. package/dist/command.d.ts +75 -0
  68. package/dist/command.js +44 -0
  69. package/dist/command.js.map +1 -0
  70. package/dist/config.d.ts +53 -0
  71. package/dist/config.js +122 -0
  72. package/dist/config.js.map +1 -0
  73. package/dist/errors.d.ts +74 -0
  74. package/dist/errors.js +38 -0
  75. package/dist/errors.js.map +1 -0
  76. package/dist/ids.d.ts +6 -0
  77. package/dist/ids.js +12 -0
  78. package/dist/ids.js.map +1 -0
  79. package/dist/index.d.ts +45 -0
  80. package/dist/index.js +27 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/instrumentation.d.ts +97 -0
  83. package/dist/instrumentation.js +165 -0
  84. package/dist/instrumentation.js.map +1 -0
  85. package/dist/invoke.d.ts +64 -0
  86. package/dist/invoke.js +152 -0
  87. package/dist/invoke.js.map +1 -0
  88. package/dist/lookup.d.ts +9 -0
  89. package/dist/lookup.js +27 -0
  90. package/dist/lookup.js.map +1 -0
  91. package/dist/manifest.d.ts +68 -0
  92. package/dist/manifest.js +77 -0
  93. package/dist/manifest.js.map +1 -0
  94. package/dist/mcp/constants.d.ts +9 -0
  95. package/dist/mcp/constants.js +10 -0
  96. package/dist/mcp/constants.js.map +1 -0
  97. package/dist/mcp/dispatch.d.ts +66 -0
  98. package/dist/mcp/dispatch.js +249 -0
  99. package/dist/mcp/dispatch.js.map +1 -0
  100. package/dist/mcp/help.d.ts +57 -0
  101. package/dist/mcp/help.js +136 -0
  102. package/dist/mcp/help.js.map +1 -0
  103. package/dist/mcp/http.d.ts +92 -0
  104. package/dist/mcp/http.js +366 -0
  105. package/dist/mcp/http.js.map +1 -0
  106. package/dist/mcp/index.d.ts +15 -0
  107. package/dist/mcp/index.js +9 -0
  108. package/dist/mcp/index.js.map +1 -0
  109. package/dist/mcp/install.d.ts +17 -0
  110. package/dist/mcp/install.js +36 -0
  111. package/dist/mcp/install.js.map +1 -0
  112. package/dist/mcp/mrtr.d.ts +82 -0
  113. package/dist/mcp/mrtr.js +130 -0
  114. package/dist/mcp/mrtr.js.map +1 -0
  115. package/dist/mcp/server.d.ts +58 -0
  116. package/dist/mcp/server.js +204 -0
  117. package/dist/mcp/server.js.map +1 -0
  118. package/dist/mcp/stdio.d.ts +57 -0
  119. package/dist/mcp/stdio.js +79 -0
  120. package/dist/mcp/stdio.js.map +1 -0
  121. package/dist/principal.d.ts +16 -0
  122. package/dist/principal.js +24 -0
  123. package/dist/principal.js.map +1 -0
  124. package/dist/registry.d.ts +90 -0
  125. package/dist/registry.js +169 -0
  126. package/dist/registry.js.map +1 -0
  127. package/dist/remote/browser.d.ts +15 -0
  128. package/dist/remote/browser.js +47 -0
  129. package/dist/remote/browser.js.map +1 -0
  130. package/dist/remote/client.d.ts +113 -0
  131. package/dist/remote/client.js +312 -0
  132. package/dist/remote/client.js.map +1 -0
  133. package/dist/remote/credentials.d.ts +48 -0
  134. package/dist/remote/credentials.js +196 -0
  135. package/dist/remote/credentials.js.map +1 -0
  136. package/dist/remote/index.d.ts +8 -0
  137. package/dist/remote/index.js +5 -0
  138. package/dist/remote/index.js.map +1 -0
  139. package/dist/remote/oauth.d.ts +186 -0
  140. package/dist/remote/oauth.js +507 -0
  141. package/dist/remote/oauth.js.map +1 -0
  142. package/dist/scan.d.ts +34 -0
  143. package/dist/scan.js +155 -0
  144. package/dist/scan.js.map +1 -0
  145. package/dist/start.d.ts +63 -0
  146. package/dist/start.js +267 -0
  147. package/dist/start.js.map +1 -0
  148. package/dist/suggest.d.ts +7 -0
  149. package/dist/suggest.js +45 -0
  150. package/dist/suggest.js.map +1 -0
  151. package/dist/version.d.ts +4 -0
  152. package/dist/version.js +13 -0
  153. package/dist/version.js.map +1 -0
  154. package/package.json +49 -4
  155. package/README.md +0 -3
@@ -0,0 +1,68 @@
1
+ import { parentNamespace } from "../ids.js";
2
+ import { unknownCommand } from "../lookup.js";
3
+ /** 빌드 manifest → 내장 manifest (mext build 가 호출) */
4
+ export function clientManifest(manifest) {
5
+ const out = {
6
+ namespaces: manifest.namespaces.map((n) => ({ ...n })),
7
+ commands: manifest.commands.map((c) => {
8
+ const { file: _file, module: _module, ...rest } = c;
9
+ return rest;
10
+ }),
11
+ };
12
+ if (manifest.description !== undefined)
13
+ out.description = manifest.description;
14
+ return out;
15
+ }
16
+ /** 내장 manifest 의 help (target "" = 루트 · 네임스페이스 · 명령어 ID · 별칭). 없는 target = UNKNOWN_COMMAND */
17
+ export function manifestHelp(manifest, target) {
18
+ const id = target.trim();
19
+ const namespaces = new Map(manifest.namespaces.map((n) => [n.id, n]));
20
+ const children = (ns) => ({
21
+ namespaces: manifest.namespaces.filter((n) => parentNamespace(n.id) === ns).map(namespaceSummary),
22
+ commands: manifest.commands.filter((c) => parentNamespace(c.id) === ns).map(commandSummary),
23
+ });
24
+ // 키 순서 = 서버 help (--help --json 출력이 같은 텍스트)
25
+ if (id === "") {
26
+ const out = { kind: "root", ...children("") };
27
+ if (manifest.description !== undefined)
28
+ out.description = manifest.description;
29
+ return out;
30
+ }
31
+ const ns = namespaces.get(id);
32
+ if (ns) {
33
+ const out = { kind: "namespace", id, ...children(id) };
34
+ if (ns.description !== undefined)
35
+ out.description = ns.description;
36
+ const self = manifest.commands.find((c) => c.id === id);
37
+ if (self)
38
+ out.command = commandHelp(self);
39
+ return out;
40
+ }
41
+ const command = manifest.commands.find((c) => c.id === id) ?? manifest.commands.find((c) => c.aliases.includes(id));
42
+ if (command)
43
+ return commandHelp(command);
44
+ throw unknownCommand(id, manifest.commands.flatMap((c) => [[c.id, c.id], ...c.aliases.map((a) => [a, c.id])]), (n) => namespaces.has(n));
45
+ }
46
+ function namespaceSummary(ns) {
47
+ const first = ns.description?.split("\n").find((l) => l.trim() !== "");
48
+ return first === undefined ? { id: ns.id } : { id: ns.id, description: first.replace(/^#+\s*/, "").trim() };
49
+ }
50
+ function commandSummary(c) {
51
+ return {
52
+ id: c.id,
53
+ description: c.description,
54
+ readOnly: c.readOnly,
55
+ destructive: c.destructive,
56
+ requiresConfirmation: c.requiresConfirmation,
57
+ };
58
+ }
59
+ /** mcp/help.ts commandHelp 와 같은 errors 규칙 */
60
+ function commandHelp(c) {
61
+ const errors = ["INVALID_ARGUMENT"];
62
+ if (!c.readOnly || c.scopes.length > 0)
63
+ errors.push("UNAUTHENTICATED", "PERMISSION_DENIED");
64
+ if (c.requiresConfirmation)
65
+ errors.push("INPUT_UNAVAILABLE", "INPUT_DECLINED");
66
+ return { kind: "command", ...c, errors };
67
+ }
68
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/client/manifest.ts"],"names":[],"mappings":"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","sourcesContent":["import { parentNamespace } from \"../ids.ts\"\nimport { unknownCommand } from \"../lookup.ts\"\nimport type { Manifest, ManifestCommand, ManifestNamespace } from \"../manifest.ts\"\nimport type { CommandHelp, Help, HelpCommandSummary, HelpNamespaceSummary, NamespaceHelp, RootHelp } from \"../mcp/help.ts\"\n\n/**\n * 고객 CLI 번들 형태의 내장 manifest = 빌드 manifest 에서 서버 전용 항목 (file · module · 빌드 경로) 을 뺀 것.\n * help 결과는 서버 help (mcp/help.ts help()) 와 같은 모양 (split 노출의 tool 필드 제외)\n */\n\nexport type ClientManifestCommand = Omit<ManifestCommand, \"file\">\n\nexport interface ClientManifest {\n /** commands/_index.md */\n description?: string\n /** 루트 제외, ID 순 */\n namespaces: ManifestNamespace[]\n /** ID 순 */\n commands: ClientManifestCommand[]\n}\n\n/** 빌드 manifest → 내장 manifest (mext build 가 호출) */\nexport function clientManifest(manifest: Pick<Manifest, \"description\" | \"namespaces\" | \"commands\">): ClientManifest {\n const out: ClientManifest = {\n namespaces: manifest.namespaces.map((n) => ({ ...n })),\n commands: manifest.commands.map((c) => {\n const { file: _file, module: _module, ...rest } = c as ManifestCommand & { module?: string }\n return rest\n }),\n }\n if (manifest.description !== undefined) out.description = manifest.description\n return out\n}\n\n/** 내장 manifest 의 help (target \"\" = 루트 · 네임스페이스 · 명령어 ID · 별칭). 없는 target = UNKNOWN_COMMAND */\nexport function manifestHelp(manifest: ClientManifest, target: string): Help {\n const id = target.trim()\n const namespaces = new Map(manifest.namespaces.map((n) => [n.id, n]))\n const children = (ns: string) => ({\n namespaces: manifest.namespaces.filter((n) => parentNamespace(n.id) === ns).map(namespaceSummary),\n commands: manifest.commands.filter((c) => parentNamespace(c.id) === ns).map(commandSummary),\n })\n // 키 순서 = 서버 help (--help --json 출력이 같은 텍스트)\n if (id === \"\") {\n const out: RootHelp = { kind: \"root\", ...children(\"\") }\n if (manifest.description !== undefined) out.description = manifest.description\n return out\n }\n const ns = namespaces.get(id)\n if (ns) {\n const out: NamespaceHelp = { kind: \"namespace\", id, ...children(id) }\n if (ns.description !== undefined) out.description = ns.description\n const self = manifest.commands.find((c) => c.id === id)\n if (self) out.command = commandHelp(self)\n return out\n }\n const command = manifest.commands.find((c) => c.id === id) ?? manifest.commands.find((c) => c.aliases.includes(id))\n if (command) return commandHelp(command)\n throw unknownCommand(\n id,\n manifest.commands.flatMap((c): [string, string][] => [[c.id, c.id], ...c.aliases.map((a): [string, string] => [a, c.id])]),\n (n) => namespaces.has(n),\n )\n}\n\nfunction namespaceSummary(ns: ManifestNamespace): HelpNamespaceSummary {\n const first = ns.description?.split(\"\\n\").find((l) => l.trim() !== \"\")\n return first === undefined ? { id: ns.id } : { id: ns.id, description: first.replace(/^#+\\s*/, \"\").trim() }\n}\n\nfunction commandSummary(c: ClientManifestCommand): HelpCommandSummary {\n return {\n id: c.id,\n description: c.description,\n readOnly: c.readOnly,\n destructive: c.destructive,\n requiresConfirmation: c.requiresConfirmation,\n }\n}\n\n/** mcp/help.ts commandHelp 와 같은 errors 규칙 */\nfunction commandHelp(c: ClientManifestCommand): CommandHelp {\n const errors = [\"INVALID_ARGUMENT\"]\n if (!c.readOnly || c.scopes.length > 0) errors.push(\"UNAUTHENTICATED\", \"PERMISSION_DENIED\")\n if (c.requiresConfirmation) errors.push(\"INPUT_UNAVAILABLE\", \"INPUT_DECLINED\")\n return { kind: \"command\", ...c, errors }\n}\n"]}
@@ -0,0 +1,49 @@
1
+ import type { CommandHelp, Help } from "../mcp/help.ts";
2
+ import type { RegisteredCommand } from "../registry.ts";
3
+ import { type CliIo } from "../cli/io.ts";
4
+ import { type ClientManifest } from "./manifest.ts";
5
+ /**
6
+ * 원격 실행 공용 runner: mext run --url (bin = mext) 과 고객 CLI (bin = cli.bin) 가 같은 코드 경로.
7
+ * 서버 MCP 엔드포인트의 dispatcher 도구 (execute · split 의 query · mutate) 호출. 권한 검사는 서버만.
8
+ * 경로 해석 · help · 플래그 파싱 = HelpSource (캐시 · 내장 manifest · 서버 help, client/cache.ts) 의 입력 스키마 (JSON Schema).
9
+ * 로컬 파싱 실패 (UNKNOWN_COMMAND · INVALID_ARGUMENT) = 서버 help 로 1회 재시도. tools/call 결과의 manifestHash 로 drift 감지.
10
+ * 토큰 = <BIN>_TOKEN, 없으면 저장된 토큰 (<bin> login). 출력 · exit code 는 로컬 모드와 같다.
11
+ *
12
+ * 이 모듈 (와 import 대상) 은 고객 CLI 번들에 들어간다: Zod · MCP 서버 SDK · 핸들러 · 스캔 · 빌드 코드 import 금지.
13
+ */
14
+ export interface RemoteRunOptions {
15
+ /** 실행 파일 이름. 토큰 환경변수 (<BIN>_TOKEN) · 자격 증명 위치 (credentialStore bin) · clientInfo.name */
16
+ bin: string;
17
+ /** MCP 엔드포인트 */
18
+ url: string;
19
+ /** help · 오류 안내의 명령 접두. "mext run --url <url>" · "myapp" */
20
+ prog: string;
21
+ /** login 안내 명령. "mext login --url <url>" · "myapp login" */
22
+ login: string;
23
+ /** clientInfo.version */
24
+ version: string;
25
+ /**
26
+ * 번들 형태: 내장 manifest 로 help · 경로 해석 · 플래그 파싱 (help 에 네트워크 없음, 명령어 실행만 tools/list · tools/call).
27
+ * 없음 = 범용 형태: 서버 help 조회
28
+ */
29
+ manifest?: ClientManifest;
30
+ /** 내장 manifest 의 manifestHash (빌드 시). manifest 와 같이 지정 */
31
+ manifestHash?: string;
32
+ /** 사람용 루트 help 뒤에 붙일 텍스트 (고객 CLI 의 login · logout · mcp install 목록) */
33
+ rootHelpFooter?: string;
34
+ }
35
+ /** help 출처. 서버 (tools/list → dispatcher help 호출) · 내장 manifest · 스키마 캐시 (client/cache.ts Schema) */
36
+ export interface HelpSource {
37
+ /** 대상 ("" = 루트) → help. 없는 대상 = MextError UNKNOWN_COMMAND */
38
+ help(target: string): Promise<Help>;
39
+ }
40
+ export declare function runRemote(options: RemoteRunOptions, argv: readonly string[], io: CliIo): Promise<number>;
41
+ /** 번들 형태: 내장 manifest (네트워크 없음) */
42
+ export declare function manifestHelpSource(manifest: ClientManifest): HelpSource;
43
+ /** 원격 명령어 help → RegisteredCommand (CLI 필드 = inputSchema 분석) */
44
+ export declare function entryFromHelp(help: CommandHelp): RegisteredCommand;
45
+ /** 서버 핸들러 예외 등 mext 구조화 오류 외의 도구 오류. --json = 서버 오류 본문 그대로, exit 1 */
46
+ export declare class RemoteExecutionError extends Error {
47
+ readonly body: Record<string, unknown>;
48
+ constructor(body: Record<string, unknown>);
49
+ }