@obov/mext 0.5.0 โ†’ 0.6.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 (157) hide show
  1. package/dist/approval.d.ts +33 -0
  2. package/dist/approval.js +36 -0
  3. package/dist/approval.js.map +1 -0
  4. package/dist/audit.d.ts +123 -0
  5. package/dist/audit.js +221 -0
  6. package/dist/audit.js.map +1 -0
  7. package/dist/build-cli.d.ts +1 -0
  8. package/dist/build-cli.js.map +1 -1
  9. package/dist/build.d.ts +2 -0
  10. package/dist/build.js +30 -3
  11. package/dist/build.js.map +1 -1
  12. package/dist/caller.d.ts +53 -0
  13. package/dist/caller.js +51 -0
  14. package/dist/caller.js.map +1 -0
  15. package/dist/cli/build.js +4 -2
  16. package/dist/cli/build.js.map +1 -1
  17. package/dist/cli/dev-audit.d.ts +25 -0
  18. package/dist/cli/dev-audit.js +84 -0
  19. package/dist/cli/dev-audit.js.map +1 -0
  20. package/dist/cli/dev-lock.d.ts +3 -1
  21. package/dist/cli/dev-lock.js +12 -5
  22. package/dist/cli/dev-lock.js.map +1 -1
  23. package/dist/cli/dev-server.d.ts +9 -0
  24. package/dist/cli/dev-server.js +24 -1
  25. package/dist/cli/dev-server.js.map +1 -1
  26. package/dist/cli/dev-tap.d.ts +20 -0
  27. package/dist/cli/dev-tap.js +70 -0
  28. package/dist/cli/dev-tap.js.map +1 -0
  29. package/dist/cli/dev.js +16 -4
  30. package/dist/cli/dev.js.map +1 -1
  31. package/dist/cli/help.js +2 -0
  32. package/dist/cli/help.js.map +1 -1
  33. package/dist/cli/inspect.d.ts +7 -0
  34. package/dist/cli/inspect.js +699 -0
  35. package/dist/cli/inspect.js.map +1 -0
  36. package/dist/cli/main.js +8 -0
  37. package/dist/cli/main.js.map +1 -1
  38. package/dist/cli/output.d.ts +1 -1
  39. package/dist/cli/output.js +3 -2
  40. package/dist/cli/output.js.map +1 -1
  41. package/dist/cli/run.js +28 -4
  42. package/dist/cli/run.js.map +1 -1
  43. package/dist/cli/types.d.ts +9 -0
  44. package/dist/cli/types.js +77 -0
  45. package/dist/cli/types.js.map +1 -0
  46. package/dist/client/index.d.ts +10 -0
  47. package/dist/client/index.js +7 -0
  48. package/dist/client/index.js.map +1 -0
  49. package/dist/client/manifest.js +6 -2
  50. package/dist/client/manifest.js.map +1 -1
  51. package/dist/client/runner.js +37 -3
  52. package/dist/client/runner.js.map +1 -1
  53. package/dist/client/typed.d.ts +54 -0
  54. package/dist/client/typed.js +490 -0
  55. package/dist/client/typed.js.map +1 -0
  56. package/dist/client/types.d.ts +196 -0
  57. package/dist/client/types.js +2 -0
  58. package/dist/client/types.js.map +1 -0
  59. package/dist/command.d.ts +61 -5
  60. package/dist/command.js +42 -1
  61. package/dist/command.js.map +1 -1
  62. package/dist/config.d.ts +42 -10
  63. package/dist/config.js +32 -7
  64. package/dist/config.js.map +1 -1
  65. package/dist/errors.d.ts +21 -3
  66. package/dist/errors.js +13 -0
  67. package/dist/errors.js.map +1 -1
  68. package/dist/expose.d.ts +9 -0
  69. package/dist/expose.js +52 -0
  70. package/dist/expose.js.map +1 -0
  71. package/dist/index.d.ts +15 -6
  72. package/dist/index.js +7 -2
  73. package/dist/index.js.map +1 -1
  74. package/dist/inspect/agent.d.ts +104 -0
  75. package/dist/inspect/agent.js +125 -0
  76. package/dist/inspect/agent.js.map +1 -0
  77. package/dist/inspect/audit.d.ts +46 -0
  78. package/dist/inspect/audit.js +133 -0
  79. package/dist/inspect/audit.js.map +1 -0
  80. package/dist/inspect/compare.d.ts +12 -0
  81. package/dist/inspect/compare.js +31 -0
  82. package/dist/inspect/compare.js.map +1 -0
  83. package/dist/inspect/index.d.ts +17 -0
  84. package/dist/inspect/index.js +12 -0
  85. package/dist/inspect/index.js.map +1 -0
  86. package/dist/inspect/inspector.d.ts +168 -0
  87. package/dist/inspect/inspector.js +392 -0
  88. package/dist/inspect/inspector.js.map +1 -0
  89. package/dist/inspect/profiles.d.ts +95 -0
  90. package/dist/inspect/profiles.js +235 -0
  91. package/dist/inspect/profiles.js.map +1 -0
  92. package/dist/inspect/scenario.d.ts +126 -0
  93. package/dist/inspect/scenario.js +555 -0
  94. package/dist/inspect/scenario.js.map +1 -0
  95. package/dist/inspect/ui-server.d.ts +31 -0
  96. package/dist/inspect/ui-server.js +378 -0
  97. package/dist/inspect/ui-server.js.map +1 -0
  98. package/dist/inspect/ui.html +917 -0
  99. package/dist/instrumentation.d.ts +13 -2
  100. package/dist/instrumentation.js +11 -1
  101. package/dist/instrumentation.js.map +1 -1
  102. package/dist/invoke.d.ts +32 -5
  103. package/dist/invoke.js +150 -16
  104. package/dist/invoke.js.map +1 -1
  105. package/dist/manifest.d.ts +13 -2
  106. package/dist/manifest.js +5 -1
  107. package/dist/manifest.js.map +1 -1
  108. package/dist/mcp/constants.d.ts +5 -0
  109. package/dist/mcp/constants.js +5 -0
  110. package/dist/mcp/constants.js.map +1 -1
  111. package/dist/mcp/dispatch.d.ts +1 -1
  112. package/dist/mcp/dispatch.js +14 -3
  113. package/dist/mcp/dispatch.js.map +1 -1
  114. package/dist/mcp/help.d.ts +2 -0
  115. package/dist/mcp/help.js +6 -1
  116. package/dist/mcp/help.js.map +1 -1
  117. package/dist/mcp/http.d.ts +16 -2
  118. package/dist/mcp/http.js +76 -7
  119. package/dist/mcp/http.js.map +1 -1
  120. package/dist/mcp/index.d.ts +1 -1
  121. package/dist/mcp/index.js +1 -1
  122. package/dist/mcp/index.js.map +1 -1
  123. package/dist/mcp/server.d.ts +12 -1
  124. package/dist/mcp/server.js +63 -17
  125. package/dist/mcp/server.js.map +1 -1
  126. package/dist/mcp/stdio.d.ts +4 -0
  127. package/dist/mcp/stdio.js +3 -0
  128. package/dist/mcp/stdio.js.map +1 -1
  129. package/dist/mcp/tasks.d.ts +3 -1
  130. package/dist/mcp/tasks.js +6 -3
  131. package/dist/mcp/tasks.js.map +1 -1
  132. package/dist/principal.d.ts +22 -0
  133. package/dist/principal.js +29 -0
  134. package/dist/principal.js.map +1 -1
  135. package/dist/registry.d.ts +5 -0
  136. package/dist/registry.js +21 -0
  137. package/dist/registry.js.map +1 -1
  138. package/dist/remote/client.d.ts +2 -0
  139. package/dist/remote/client.js +3 -2
  140. package/dist/remote/client.js.map +1 -1
  141. package/dist/remote/oauth.d.ts +1 -1
  142. package/dist/remote/oauth.js +1 -1
  143. package/dist/remote/oauth.js.map +1 -1
  144. package/dist/start.js +6 -2
  145. package/dist/start.js.map +1 -1
  146. package/dist/suggest.js +1 -1
  147. package/dist/suggest.js.map +1 -1
  148. package/dist/typegen.d.ts +27 -0
  149. package/dist/typegen.js +62 -0
  150. package/dist/typegen.js.map +1 -0
  151. package/dist/version-constant.d.ts +5 -0
  152. package/dist/version-constant.js +6 -0
  153. package/dist/version-constant.js.map +1 -0
  154. package/dist/version.d.ts +1 -2
  155. package/dist/version.js +1 -2
  156. package/dist/version.js.map +1 -1
  157. package/package.json +12 -2
package/dist/config.js CHANGED
@@ -6,14 +6,16 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
6
6
  }
7
7
  return path;
8
8
  };
9
+ import { approvalConfigProblem } from "./approval.js";
9
10
  import { existsSync } from "node:fs";
10
11
  import { join, resolve } from "node:path";
11
12
  import { pathToFileURL } from "node:url";
13
+ import { auditConfigProblem } from "./audit.js";
12
14
  import { isSegment } from "./ids.js";
13
- import { localPrincipal } from "./principal.js";
15
+ import { assertCallerFields, callerFieldsProblem, localPrincipal } from "./principal.js";
14
16
  import { stateProblem } from "./state.js";
15
17
  export const CONFIG_FILE = "mext.config.ts";
16
- const CONFIG_KEYS = ["commandsDir", "app", "auth", "tools", "server", "oauth", "localPrincipal", "cli", "mcp", "secret", "state", "resourcesDir", "routesDir", "promptsDir"];
18
+ const CONFIG_KEYS = ["commandsDir", "app", "auth", "tools", "server", "oauth", "localPrincipal", "cli", "mcp", "secret", "state", "resourcesDir", "routesDir", "promptsDir", "audit", "approval", "types"];
17
19
  /** secret ์ตœ์†Œ ๊ธธ์ด (๋ฐ”์ดํŠธ, HMAC-SHA256 ํ‚ค) */
18
20
  export const SECRET_MIN_BYTES = 32;
19
21
  /** secret ํ™˜๊ฒฝ๋ณ€์ˆ˜ */
@@ -52,12 +54,19 @@ export function resolvePromptsDir(cwd, config) {
52
54
  export function resolveRoutesDir(cwd, config) {
53
55
  return resolve(cwd, config.routesDir ?? "routes");
54
56
  }
55
- /** ๋กœ์ปฌ ์‹คํ–‰ ์ฃผ์ฒด: config.localPrincipal (๊ฐ’ ยท ํ•จ์ˆ˜) ๋˜๋Š” localPrincipal() */
56
- export async function resolveLocalPrincipal(config) {
57
+ /**
58
+ * ๋กœ์ปฌ ์‹คํ–‰ ์ฃผ์ฒด: config.localPrincipal (๊ฐ’ ยท ํ•จ์ˆ˜) ๋˜๋Š” localPrincipal().
59
+ * surface = ์–ด๋Œ‘ํ„ฐ ๊ธฐ๋ณธ ํ‘œ๋ฉด (ํ•จ์ˆ˜ ์ธ์ž). ํ•จ์ˆ˜ ๊ฒฐ๊ณผ์˜ actor ยท surface ํ˜•์‹ ์˜ค๋ฅ˜ = TypeError
60
+ */
61
+ export async function resolveLocalPrincipal(config, surface = "cli") {
57
62
  const p = config.localPrincipal;
58
63
  if (p === undefined)
59
64
  return localPrincipal();
60
- return typeof p === "function" ? await p() : p;
65
+ if (typeof p !== "function")
66
+ return p;
67
+ const principal = await p({ surface });
68
+ assertCallerFields(principal, "localPrincipal");
69
+ return principal;
61
70
  }
62
71
  /**
63
72
  * ์„œ๋ฒ„ ๋น„๋ฐ€: config.secret > MEXT_SECRET > undefined (ํ”„๋กœ์„ธ์Šค๋ณ„ ์ž„์˜ ํ‚ค).
@@ -73,7 +82,7 @@ export function resolveSecret(config, env = process.env) {
73
82
  throw new TypeError(`${SECRET_ENV} must be at least ${SECRET_MIN_BYTES} bytes`);
74
83
  return value;
75
84
  }
76
- /** ์„œ๋ฒ„ ์„ ์–ธ (๋ชจ๋“  transport): config.mcp ์˜ name ยท instructions ยท capabilities + secret (requestStateKey) + state. onConnect ๋Š” stdio ๋งŒ ๋”ฐ๋กœ */
85
+ /** ์„œ๋ฒ„ ์„ ์–ธ (๋ชจ๋“  transport): config.mcp ์˜ name ยท instructions ยท capabilities + secret (requestStateKey) + state + audit. onConnect ๋Š” stdio ๋งŒ ๋”ฐ๋กœ */
77
86
  export function mcpDeclarations(config, env = process.env) {
78
87
  const mcp = config.mcp;
79
88
  const secret = resolveSecret(config, env);
@@ -83,6 +92,8 @@ export function mcpDeclarations(config, env = process.env) {
83
92
  ...(mcp?.capabilities !== undefined ? { capabilities: mcp.capabilities } : {}),
84
93
  ...(secret !== undefined ? { requestStateKey: secret } : {}),
85
94
  ...(config.state !== undefined ? { state: config.state } : {}),
95
+ ...(config.audit !== undefined ? { audit: config.audit } : {}),
96
+ ...(config.approval !== undefined ? { approval: config.approval } : {}),
86
97
  };
87
98
  }
88
99
  /** stdio ์˜ต์…˜ = ์„ ์–ธ + onConnect */
@@ -132,6 +143,9 @@ function validateConfig(value) {
132
143
  fail("routesDir must be a string");
133
144
  if (c.promptsDir !== undefined && typeof c.promptsDir !== "string")
134
145
  fail("promptsDir must be a string");
146
+ if (c.types !== undefined && typeof c.types !== "boolean" && (typeof c.types !== "string" || !c.types.endsWith(".ts"))) {
147
+ fail('types must be true or a .ts file path (e.g. "./mext.gen.ts")');
148
+ }
135
149
  if (c.app !== undefined && typeof c.app !== "function")
136
150
  fail("app must be a function");
137
151
  if (c.auth !== undefined && typeof c.auth !== "function")
@@ -159,6 +173,16 @@ function validateConfig(value) {
159
173
  if (problem !== undefined)
160
174
  fail(problem);
161
175
  }
176
+ if (c.audit !== undefined) {
177
+ const problem = auditConfigProblem(c.audit);
178
+ if (problem !== undefined)
179
+ fail(problem);
180
+ }
181
+ if (c.approval !== undefined) {
182
+ const problem = approvalConfigProblem(c.approval);
183
+ if (problem !== undefined)
184
+ fail(problem);
185
+ }
162
186
  if (c.cli !== undefined)
163
187
  validateCli(c.cli, fail);
164
188
  if (c.mcp !== undefined)
@@ -251,6 +275,7 @@ function isPrincipal(value) {
251
275
  p !== null &&
252
276
  typeof p.id === "string" &&
253
277
  (p.kind === "local" || p.kind === "token" || p.kind === "anonymous") &&
254
- Array.isArray(p.scopes));
278
+ Array.isArray(p.scopes) &&
279
+ callerFieldsProblem(p) === undefined);
255
280
  }
256
281
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\"\nimport { join, resolve } from \"node:path\"\nimport { pathToFileURL } from \"node:url\"\nimport type { CliErrorFormatter } from \"./cli/output.ts\"\nimport type { MextApp } from \"./command.ts\"\nimport { isSegment } from \"./ids.ts\"\nimport type { OAuthResourceOptions } from \"./mcp/http.ts\"\nimport { localPrincipal, type Principal } from \"./principal.ts\"\nimport { stateProblem, type MextState } from \"./state.ts\"\n\n/** mext.config.ts ์˜ default export */\nexport interface MextConfig {\n /** ๋ช…๋ น์–ด ํด๋”. ์„ค์ • ํŒŒ์ผ ์œ„์น˜ (cwd) ๊ธฐ์ค€. ๊ธฐ๋ณธ \"commands\" */\n commandsDir?: string\n /** MCP ์ž์› ํด๋” (ยง12.3). ์„ค์ • ํŒŒ์ผ ์œ„์น˜ (cwd) ๊ธฐ์ค€. ๊ธฐ๋ณธ \"resources\". ํด๋” ์—†์Œ = ์ž์› ์—†์Œ */\n resourcesDir?: string\n /** MCP ํ”„๋กฌํ”„ํŠธ ํด๋” (ยง12.3). ์„ค์ • ํŒŒ์ผ ์œ„์น˜ (cwd) ๊ธฐ์ค€. ๊ธฐ๋ณธ \"prompts\". ํด๋” ์—†์Œ = ํ”„๋กฌํ”„ํŠธ ์—†์Œ */\n promptsDir?: string\n /** ctx.app ํŒฉํ† ๋ฆฌ. ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค๋‹น 1ํšŒ */\n app?: () => MextApp | Promise<MextApp>\n /** HTTP ์ „์šฉ. ์š”์ฒญ๋งˆ๋‹ค Authorization ํ—ค๋”๋กœ ์ฃผ์ฒด ์ƒ์„ฑ. ์ž˜๋ชป๋œ ํ† ํฐ = unauthenticated() throw */\n auth?: (req: { authorization: string | undefined }) => Principal | Promise<Principal>\n /** MCP ๋…ธ์ถœ ๋ฐฉ์‹. ๊ธฐ๋ณธ \"execute\". command = ๋ช…๋ น์–ด๋ณ„ ๋„๊ตฌ (ยง12.2) */\n tools?: \"execute\" | \"split\" | \"command\"\n server?: { host?: string; port?: number; allowedOrigins?: string[] }\n /** HTTP ์ „์šฉ. OAuth ๋ณดํ˜ธ ์ž์› ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ (์ธ๊ฐ€ ์„œ๋ฒ„ ์œ„์น˜). mext login ยท MCP ํด๋ผ์ด์–ธํŠธ์˜ discovery */\n oauth?: OAuthResourceOptions\n /** ๋กœ์ปฌ ์‹คํ–‰ (mext run ยท stdio) ์ฃผ์ฒด. ๊ธฐ๋ณธ localPrincipal() */\n localPrincipal?: Principal | (() => Principal | Promise<Principal>)\n /** ๊ณ ๊ฐ CLI (mext build โ†’ .mext/cli/). ์—†์œผ๋ฉด ๊ณ ๊ฐ CLI ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค */\n cli?: CliConfig\n /** MCP ์„œ๋ฒ„ ์„ ์–ธ (serverInfo.name ยท instructions ยท capabilities) ยท stdio ์„œ๋ฒ„ ๋ฐœ์‹  ์•Œ๋ฆผ (ยง6) */\n mcp?: McpConfig\n /**\n * ์„œ๋ฒ„ ๋น„๋ฐ€ (32๋ฐ”์ดํŠธ ์ด์ƒ). MRTR requestState ์„œ๋ช… ํ‚ค (ยง12.1). ๋ฏธ์ง€์ • = MEXT_SECRET ํ™˜๊ฒฝ๋ณ€์ˆ˜, ๋‘˜ ๋‹ค ์—†์œผ๋ฉด ํ”„๋กœ์„ธ์Šค๋ณ„ ์ž„์˜ ํ‚ค.\n * ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ยท ์žฌ์‹œ์ž‘์„ ๋„˜๋Š” ctx.ask ์žฌ์‹œ๋„์— ํ•„์š”\n */\n secret?: string\n /**\n * ๋„์ž… ํ”„๋กœ์ ํŠธ๊ฐ€ ์ฃผ์ž…ํ•˜๋Š” ์ €์žฅ์†Œ ยท ๋ฉ”์‹œ์ง€ ๋ฒ„์Šค (ยง12.1). ์—†์œผ๋ฉด stateless.\n * ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค = memoryState(), ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค = ๋„์ž… ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ตฌํ˜„ํ•œ { store, bus }\n */\n state?: MextState\n /** HTTP ๊ฒฝ๋กœ ํด๋” (ยง12.4). ์„ค์ • ํŒŒ์ผ ์œ„์น˜ (cwd) ๊ธฐ์ค€. ๊ธฐ๋ณธ \"routes\". ํด๋” ์—†์Œ = route ์—†์Œ */\n routesDir?: string\n}\n\n/** mext.config.ts ์˜ mcp (ยง6 ์„œ๋ฒ„ ์„ ์–ธ ยท ์„œ๋ฒ„ ๋ฐœ์‹  ์•Œ๋ฆผ) */\nexport interface McpConfig {\n /** serverInfo.name. ๊ธฐ๋ณธ \"mext\" */\n name?: string\n /** initialize ยท server/discover ๊ฒฐ๊ณผ instructions */\n instructions?: string\n /** ์„œ๋ฒ„ capabilities ์— ๋ณ‘ํ•ฉ. experimental ๋งŒ (์˜ˆ: { experimental: { \"claude/channel\": {} } }) */\n capabilities?: McpCapabilities\n /**\n * stdio ์ „์šฉ. ์—ฐ๊ฒฐ ํ•˜๋‚˜์— 1ํšŒ (2025 = notifications/initialized ํ›„, 2026-07-28 = ์—ฐ๊ฒฐ ์งํ›„).\n * ๋ฐ˜ํ™˜ ํ•จ์ˆ˜ = ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์‹œ cleanup. HTTP ๋Š” stateless ๋ผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค\n */\n onConnect?: McpConnectHandler\n /**\n * stdio ํ”„๋กœํ† ์ฝœ. auto = 2026-07-28 ยท 2025 ๋ชจ๋‘, legacy = 2025 ๋งŒ (server/discover ๊ฑฐ๋ถ€).\n * Claude Code channel ์€ 2025 ์—ฐ๊ฒฐ์—์„œ๋งŒ ์•Œ๋ฆผ์„ ์ „๋‹ฌ. ๊ธฐ๋ณธ = experimental[\"claude/channel\"] ์„ ์–ธ ์‹œ legacy, ๊ทธ ์™ธ auto\n */\n stdioEra?: \"auto\" | \"legacy\"\n}\n\nexport interface McpCapabilities {\n experimental?: Record<string, object>\n}\n\n/** stdio ์—ฐ๊ฒฐ. notify = ์š”์ฒญ๊ณผ ๋ฌด๊ด€ํ•œ ์„œ๋ฒ„ ๋ฐœ์‹  ์•Œ๋ฆผ */\nexport interface McpConnection {\n /** ํ˜‘์ƒ๋œ ํ”„๋กœํ† ์ฝœ era */\n readonly era: \"legacy\" | \"modern\"\n /** ์—ฐ๊ฒฐ ์ข…๋ฃŒ ํ›„ ํ˜ธ์ถœ = reject */\n notify(method: string, params?: Record<string, unknown>): Promise<void>\n /**\n * ํด๋ผ์ด์–ธํŠธ ๋ฐœ์‹  ์•Œ๋ฆผ ์ˆ˜์‹  (์˜ˆ: notifications/claude/channel/permission_request).\n * SDK ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ์‚ฌ์–‘ ์•Œ๋ฆผ (initialized ยท cancelled ๋“ฑ) ์€ ๋Œ€์ƒ ์•„๋‹˜. ๊ฐ™์€ method ์žฌ๋“ฑ๋ก = ๊ต์ฒด. ๋ฐ˜ํ™˜ = ํ•ด์ œ\n */\n onNotification(method: string, handler: (params: Record<string, unknown>) => void | Promise<void>): () => void\n}\n\nexport type McpConnectHandler = (\n conn: McpConnection,\n) => void | (() => void | Promise<void>) | Promise<void | (() => void | Promise<void>)>\n\n/** mext.config.ts ์˜ cli (ยง5 ๊ณ ๊ฐ CLI ์„ค์ •) */\nexport interface CliConfig {\n /** ์‹คํ–‰ ํŒŒ์ผ ์ด๋ฆ„ (kebab-case). ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ ‘๋‘ (MYAPP_TOKEN ยท MYAPP_URL) ยท ์„ค์ • ํด๋” (~/.config/<bin>) */\n bin: string\n /** ์„œ๋ฒ„ MCP ์—”๋“œํฌ์ธํŠธ (http(s)). ์‹คํ–‰ ์‹œ <BIN>_URL ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๊ฐ’. local ์ด๋ฉด ์—†์Œ */\n url?: string\n /** npm ํŒจํ‚ค์ง€ ์ด๋ฆ„. ๊ธฐ๋ณธ = bin */\n packageName?: string\n /** ๊ณ ๊ฐ CLI ๋ฒ„์ „ (--version ยท clientInfo). ๊ธฐ๋ณธ = ๋„์ž… ํ”„๋กœ์ ํŠธ package.json version */\n version?: string\n /** true = ๋ฒˆ๋“ค ํ˜•ํƒœ (๋‚ด์žฅ manifest, ๊ธฐ๋ณธ), false = ๋ฒ”์šฉ ํ˜•ํƒœ (help ยท ์Šคํ‚ค๋งˆ๋ฅผ ์„œ๋ฒ„์—์„œ ์กฐํšŒ) */\n manifest?: boolean\n /**\n * ์˜ค๋ฅ˜ ์ถœ๋ ฅ ยท exit code ์ปค์Šคํ…€ ๋ชจ๋“ˆ (๋„์ž… ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๊ธฐ์ค€ ๊ฒฝ๋กœ). default export = CliErrorFormatter.\n * ๊ณ ๊ฐ CLI bin.js ์— ๋ฒˆ๋“ค, mext run (๋กœ์ปฌ) ์ด import. @obov/mext ๋Š” ํƒ€์ž…๋งŒ import (๊ฐ’ import = ๋ฒˆ๋“ค ํฌํ•จ)\n */\n errors?: string\n /**\n * true = ๋กœ์ปฌ bin (ยง5). mext build โ†’ .mext/bin.js (ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉ์ž PC ์—์„œ ์‹คํ–‰, .mext/cli/ ์—†์Œ).\n * ๋„์ž… ํ”„๋กœ์ ํŠธ package.json bin { \"<bin>\": \".mext/bin.js\" }. url ยท packageName ยท manifest ์™€ ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์—†์Œ\n */\n local?: boolean\n}\n\nexport const CONFIG_FILE = \"mext.config.ts\"\n\nconst CONFIG_KEYS: readonly string[] = [\"commandsDir\", \"app\", \"auth\", \"tools\", \"server\", \"oauth\", \"localPrincipal\", \"cli\", \"mcp\", \"secret\", \"state\", \"resourcesDir\", \"routesDir\", \"promptsDir\"]\n\n/** secret ์ตœ์†Œ ๊ธธ์ด (๋ฐ”์ดํŠธ, HMAC-SHA256 ํ‚ค) */\nexport const SECRET_MIN_BYTES = 32\n/** secret ํ™˜๊ฒฝ๋ณ€์ˆ˜ */\nexport const SECRET_ENV = \"MEXT_SECRET\"\nconst MCP_KEYS: readonly string[] = [\"name\", \"instructions\", \"capabilities\", \"onConnect\", \"stdioEra\"]\nconst CLI_KEYS: readonly string[] = [\"bin\", \"url\", \"packageName\", \"version\", \"manifest\", \"errors\", \"local\"]\n/** ๊ณ ๊ฐ CLI ์˜ ๋‚ด์žฅ ๋ช…๋ น (๋ฃจํŠธ ์„ธ๊ทธ๋จผํŠธ๋กœ ์“ธ ์ˆ˜ ์—†์Œ) */\nexport const CLI_BUILTIN_COMMANDS: readonly string[] = [\"help\", \"login\", \"logout\", \"mcp\"]\n/** ๋กœ์ปฌ bin (cli.local) ์˜ ๋‚ด์žฅ ๋ช…๋ น */\nexport const LOCAL_BIN_BUILTIN_COMMANDS: readonly string[] = [\"help\", \"mcp\"]\n\n/** ํƒ€์ž… ๋„์šฐ๋ฏธ. ๊ฐ’์€ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ */\nexport function defineConfig(config: MextConfig): MextConfig {\n return config\n}\n\n/** cwd ์˜ mext.config.ts ๋ฅผ import. ์—†์œผ๋ฉด {}. ํ˜•์‹์ด ํ‹€๋ฆฌ๋ฉด TypeError (๋ชจ๋ฅด๋Š” ํ‚ค ํฌํ•จ) */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<MextConfig> {\n const file = join(resolve(cwd), CONFIG_FILE)\n if (!existsSync(file)) return {}\n const mod = (await import(pathToFileURL(file).href)) as { default?: unknown }\n return validateConfig(mod.default)\n}\n\n/** commands/ ์ ˆ๋Œ€ ๊ฒฝ๋กœ */\nexport function resolveCommandsDir(cwd: string, config: MextConfig): string {\n return resolve(cwd, config.commandsDir ?? \"commands\")\n}\n\n/** resources/ ์ ˆ๋Œ€ ๊ฒฝ๋กœ */\nexport function resolveResourcesDir(cwd: string, config: MextConfig): string {\n return resolve(cwd, config.resourcesDir ?? \"resources\")\n}\n\n/** prompts/ ์ ˆ๋Œ€ ๊ฒฝ๋กœ */\nexport function resolvePromptsDir(cwd: string, config: MextConfig): string {\n return resolve(cwd, config.promptsDir ?? \"prompts\")\n}\n\n/** routes/ ์ ˆ๋Œ€ ๊ฒฝ๋กœ */\nexport function resolveRoutesDir(cwd: string, config: MextConfig): string {\n return resolve(cwd, config.routesDir ?? \"routes\")\n}\n\n/** ๋กœ์ปฌ ์‹คํ–‰ ์ฃผ์ฒด: config.localPrincipal (๊ฐ’ ยท ํ•จ์ˆ˜) ๋˜๋Š” localPrincipal() */\nexport async function resolveLocalPrincipal(config: MextConfig): Promise<Principal> {\n const p = config.localPrincipal\n if (p === undefined) return localPrincipal()\n return typeof p === \"function\" ? await p() : p\n}\n\n/**\n * ์„œ๋ฒ„ ๋น„๋ฐ€: config.secret > MEXT_SECRET > undefined (ํ”„๋กœ์„ธ์Šค๋ณ„ ์ž„์˜ ํ‚ค).\n * ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์ด ์งง์œผ๋ฉด TypeError (config.secret ์€ ์„ค์ • ๋กœ๋“œ ์‹œ ๊ฒ€์‚ฌ)\n */\nexport function resolveSecret(config: MextConfig, env: Record<string, string | undefined> = process.env): string | undefined {\n if (config.secret !== undefined) return config.secret\n const value = env[SECRET_ENV]\n if (value === undefined || value === \"\") return undefined\n if (Buffer.byteLength(value) < SECRET_MIN_BYTES) throw new TypeError(`${SECRET_ENV} must be at least ${SECRET_MIN_BYTES} bytes`)\n return value\n}\n\n/** ์„œ๋ฒ„ ์„ ์–ธ (๋ชจ๋“  transport): config.mcp ์˜ name ยท instructions ยท capabilities + secret (requestStateKey) + state. onConnect ๋Š” stdio ๋งŒ ๋”ฐ๋กœ */\nexport function mcpDeclarations(\n config: MextConfig,\n env: Record<string, string | undefined> = process.env,\n): { name?: string; instructions?: string; capabilities?: McpCapabilities; requestStateKey?: string; state?: MextState } {\n const mcp = config.mcp\n const secret = resolveSecret(config, env)\n return {\n ...(mcp?.name !== undefined ? { name: mcp.name } : {}),\n ...(mcp?.instructions !== undefined ? { instructions: mcp.instructions } : {}),\n ...(mcp?.capabilities !== undefined ? { capabilities: mcp.capabilities } : {}),\n ...(secret !== undefined ? { requestStateKey: secret } : {}),\n ...(config.state !== undefined ? { state: config.state } : {}),\n }\n}\n\n/** stdio ์˜ต์…˜ = ์„ ์–ธ + onConnect */\nexport function mcpStdioDeclarations(\n config: MextConfig,\n env: Record<string, string | undefined> = process.env,\n): ReturnType<typeof mcpDeclarations> & { onConnect?: McpConnectHandler; era?: \"auto\" | \"legacy\" } {\n return {\n ...mcpDeclarations(config, env),\n ...(config.mcp?.onConnect ? { onConnect: config.mcp.onConnect } : {}),\n ...(config.mcp?.stdioEra ? { era: config.mcp.stdioEra } : {}),\n }\n}\n\n/** cli.errors ์ ˆ๋Œ€ ๊ฒฝ๋กœ (์—†์œผ๋ฉด undefined) */\nexport function resolveCliErrorsPath(cwd: string, config: MextConfig): string | undefined {\n return config.cli?.errors === undefined ? undefined : resolve(cwd, config.cli.errors)\n}\n\n/** cli.errors ๋ชจ๋“ˆ์˜ default export (ํ•จ์ˆ˜). ํŒŒ์ผ ์—†์Œ ยท default ๊ฐ€ ํ•จ์ˆ˜ ์•„๋‹˜ = TypeError */\nexport async function loadCliErrorFormatter(cwd: string, config: MextConfig): Promise<CliErrorFormatter | undefined> {\n const file = resolveCliErrorsPath(cwd, config)\n if (file === undefined) return undefined\n if (!existsSync(file)) throw new TypeError(`${CONFIG_FILE}: cli.errors file not found: ${config.cli!.errors}`)\n const mod = (await import(pathToFileURL(file).href)) as { default?: unknown }\n if (typeof mod.default !== \"function\") throw new TypeError(`${config.cli!.errors}: default export must be a function (CliErrorFormatter)`)\n return mod.default as CliErrorFormatter\n}\n\n/** ctx.app: config.app() ๋˜๋Š” {} */\nexport async function createApp(config: MextConfig): Promise<MextApp> {\n return config.app ? await config.app() : ({} as MextApp)\n}\n\nfunction validateConfig(value: unknown): MextConfig {\n const fail = (message: string): never => {\n throw new TypeError(`${CONFIG_FILE}: ${message}`)\n }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return fail(\"default export must be an object (export default defineConfig({ ... }))\")\n }\n const c = value as Record<string, unknown>\n const unknown = Object.keys(c).filter((k) => !CONFIG_KEYS.includes(k))\n if (unknown.length > 0) fail(`unknown key${unknown.length === 1 ? \"\" : \"s\"}: ${unknown.join(\", \")}`)\n if (c.commandsDir !== undefined && typeof c.commandsDir !== \"string\") fail(\"commandsDir must be a string\")\n if (c.resourcesDir !== undefined && typeof c.resourcesDir !== \"string\") fail(\"resourcesDir must be a string\")\n if (c.routesDir !== undefined && typeof c.routesDir !== \"string\") fail(\"routesDir must be a string\")\n if (c.promptsDir !== undefined && typeof c.promptsDir !== \"string\") fail(\"promptsDir must be a string\")\n if (c.app !== undefined && typeof c.app !== \"function\") fail(\"app must be a function\")\n if (c.auth !== undefined && typeof c.auth !== \"function\") fail(\"auth must be a function\")\n if (c.tools !== undefined && c.tools !== \"execute\" && c.tools !== \"split\" && c.tools !== \"command\") {\n fail('tools must be \"execute\", \"split\" or \"command\"')\n }\n if (c.server !== undefined && (typeof c.server !== \"object\" || c.server === null)) fail(\"server must be an object\")\n if (c.oauth !== undefined) {\n const o = c.oauth as { authorizationServers?: unknown } | null\n if (typeof o !== \"object\" || o === null || !Array.isArray(o.authorizationServers) || o.authorizationServers.length === 0) {\n fail(\"oauth.authorizationServers must be a non-empty array of URLs\")\n }\n }\n const lp = c.localPrincipal\n if (lp !== undefined && typeof lp !== \"function\" && !isPrincipal(lp)) {\n fail(\"localPrincipal must be a Principal ({ id, kind, scopes }) or a function\")\n }\n if (c.secret !== undefined && (typeof c.secret !== \"string\" || Buffer.byteLength(c.secret) < SECRET_MIN_BYTES)) {\n fail(`secret must be a string of at least ${SECRET_MIN_BYTES} bytes`)\n }\n if (c.state !== undefined) {\n const problem = stateProblem(c.state)\n if (problem !== undefined) fail(problem)\n }\n if (c.cli !== undefined) validateCli(c.cli, fail)\n if (c.mcp !== undefined) validateMcp(c.mcp, fail)\n return c as MextConfig\n}\n\nfunction validateMcp(value: unknown, fail: (message: string) => never): void {\n if (!isPlainObject(value)) fail(\"mcp must be an object\")\n const mcp = value as Record<string, unknown>\n const unknown = Object.keys(mcp).filter((k) => !MCP_KEYS.includes(k))\n if (unknown.length > 0) fail(`unknown mcp key${unknown.length === 1 ? \"\" : \"s\"}: ${unknown.join(\", \")}`)\n if (mcp.name !== undefined && (typeof mcp.name !== \"string\" || mcp.name.trim() === \"\")) fail(\"mcp.name must be a non-empty string\")\n if (mcp.instructions !== undefined && typeof mcp.instructions !== \"string\") fail(\"mcp.instructions must be a string\")\n if (mcp.onConnect !== undefined && typeof mcp.onConnect !== \"function\") fail(\"mcp.onConnect must be a function\")\n if (mcp.stdioEra !== undefined && mcp.stdioEra !== \"auto\" && mcp.stdioEra !== \"legacy\") fail('mcp.stdioEra must be \"auto\" or \"legacy\"')\n if (mcp.capabilities !== undefined) {\n if (!isPlainObject(mcp.capabilities)) fail(\"mcp.capabilities must be an object ({ experimental })\")\n const caps = mcp.capabilities as Record<string, unknown>\n const other = Object.keys(caps).filter((k) => k !== \"experimental\")\n if (other.length > 0) fail(`mcp.capabilities supports only experimental (got ${other.join(\", \")})`)\n const exp = caps.experimental\n if (exp !== undefined) {\n if (!isPlainObject(exp)) fail(\"mcp.capabilities.experimental must be an object\")\n for (const [key, v] of Object.entries(exp as Record<string, unknown>)) {\n if (!isPlainObject(v)) fail(`mcp.capabilities.experimental[\"${key}\"] must be an object`)\n }\n }\n }\n}\n\nfunction isPlainObject(value: unknown): boolean {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction validateCli(value: unknown, fail: (message: string) => never): void {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) fail(\"cli must be an object ({ bin, url })\")\n const cli = value as Record<string, unknown>\n const unknown = Object.keys(cli).filter((k) => !CLI_KEYS.includes(k))\n if (unknown.length > 0) fail(`unknown cli key${unknown.length === 1 ? \"\" : \"s\"}: ${unknown.join(\", \")}`)\n if (typeof cli.bin !== \"string\" || !isSegment(cli.bin)) fail('cli.bin must be a kebab-case name (e.g. \"myapp\")')\n if (cli.local !== undefined && typeof cli.local !== \"boolean\") fail(\"cli.local must be a boolean\")\n if (cli.local === true) {\n const remoteOnly = [\"url\", \"packageName\", \"manifest\"].filter((k) => cli[k] !== undefined)\n if (remoteOnly.length > 0) fail(`cli.local cannot be combined with ${remoteOnly.map((k) => `cli.${k}`).join(\", \")} (local bin runs handlers, no server)`)\n } else if (typeof cli.url !== \"string\" || !isHttpUrl(cli.url)) {\n fail(\"cli.url must be an http(s) URL of the MCP endpoint (or set cli.local: true for a local bin)\")\n }\n if (cli.packageName !== undefined && (typeof cli.packageName !== \"string\" || !NPM_NAME.test(cli.packageName))) {\n fail('cli.packageName must be an npm package name (e.g. \"@example/myapp-cli\")')\n }\n if (cli.version !== undefined && (typeof cli.version !== \"string\" || cli.version.trim() === \"\")) {\n fail(\"cli.version must be a non-empty string\")\n }\n if (cli.manifest !== undefined && typeof cli.manifest !== \"boolean\") fail(\"cli.manifest must be a boolean\")\n if (cli.errors !== undefined && (typeof cli.errors !== \"string\" || cli.errors.trim() === \"\")) {\n fail('cli.errors must be a module path (e.g. \"./cli-errors.ts\")')\n }\n}\n\n/** npm ํŒจํ‚ค์ง€ ์ด๋ฆ„ (์†Œ๋ฌธ์ž ยท scope ์„ ํƒ) */\nconst NPM_NAME = /^(?:@[a-z0-9][a-z0-9._~-]*\\/)?[a-z0-9][a-z0-9._~-]*$/\n\nfunction isHttpUrl(value: string): boolean {\n if (!/^https?:\\/\\//i.test(value)) return false\n try {\n new URL(value)\n return true\n } catch {\n return false\n }\n}\n\nfunction isPrincipal(value: unknown): value is Principal {\n const p = value as Partial<Principal> | null\n return (\n typeof p === \"object\" &&\n p !== null &&\n typeof p.id === \"string\" &&\n (p.kind === \"local\" || p.kind === \"token\" || p.kind === \"anonymous\") &&\n Array.isArray(p.scopes)\n )\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { approvalConfigProblem, type ApprovalConfig } from \"./approval.ts\"\nimport { existsSync } from \"node:fs\"\nimport { join, resolve } from \"node:path\"\nimport { pathToFileURL } from \"node:url\"\nimport { auditConfigProblem, type AuditConfig } from \"./audit.ts\"\nimport type { CliErrorFormatter } from \"./cli/output.ts\"\nimport type { MextApp } from \"./command.ts\"\nimport { isSegment } from \"./ids.ts\"\nimport type { McpAuthRequest, OAuthResourceOptions } from \"./mcp/http.ts\"\nimport { assertCallerFields, callerFieldsProblem, localPrincipal, type Principal } from \"./principal.ts\"\nimport { stateProblem, type MextState } from \"./state.ts\"\n\n/** mext.config.ts ์˜ default export */\nexport interface MextConfig {\n /** ๋ช…๋ น์–ด ํด๋”. ์„ค์ • ํŒŒ์ผ ์œ„์น˜ (cwd) ๊ธฐ์ค€. ๊ธฐ๋ณธ \"commands\" */\n commandsDir?: string\n /** MCP ์ž์› ํด๋” (ยง12.3). ์„ค์ • ํŒŒ์ผ ์œ„์น˜ (cwd) ๊ธฐ์ค€. ๊ธฐ๋ณธ \"resources\". ํด๋” ์—†์Œ = ์ž์› ์—†์Œ */\n resourcesDir?: string\n /** MCP ํ”„๋กฌํ”„ํŠธ ํด๋” (ยง12.3). ์„ค์ • ํŒŒ์ผ ์œ„์น˜ (cwd) ๊ธฐ์ค€. ๊ธฐ๋ณธ \"prompts\". ํด๋” ์—†์Œ = ํ”„๋กฌํ”„ํŠธ ์—†์Œ */\n promptsDir?: string\n /**\n * ๋ช…๋ น์–ด ํƒ€์ž… ์ƒ์„ฑ ํŒŒ์ผ (specs/client.md ยง4). true = ./mext.gen.ts, ๋ฌธ์ž์—ด = ๊ทธ ๊ฒฝ๋กœ (ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๊ธฐ์ค€).\n * ์žˆ์œผ๋ฉด mext dev ยท mext build ๊ฐ€ ์ƒ์„ฑํ•œ๋‹ค. ์—†์Œ ยท false = ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค (mext types ๋Š” ์„ค์ • ์—†์ด๋„ ๋™์ž‘)\n */\n types?: boolean | string\n /** ctx.app ํŒฉํ† ๋ฆฌ. ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค๋‹น 1ํšŒ */\n app?: () => MextApp | Promise<MextApp>\n /**\n * HTTP ์ „์šฉ. ์š”์ฒญ๋งˆ๋‹ค ์ฃผ์ฒด ์ƒ์„ฑ. ์ž˜๋ชป๋œ ํ† ํฐ = unauthenticated() throw.\n * req = { authorization, headers, surface, client } (McpAuthRequest). client ๋Š” ์ž๊ฐ€ ์‹ ๊ณ  ๊ฐ’ (ํŒ์ • ๊ทผ๊ฑฐ ์•„๋‹˜).\n * ๋ฐ˜ํ™˜ Principal ์˜ actor ยท surface ๊ฐ€ ctx.caller ์˜ ํ–‰์œ„์ž ยท ๋…ผ๋ฆฌ ํ‘œ๋ฉด์„ ์ •ํ•œ๋‹ค (spec ยง4)\n */\n auth?: (req: McpAuthRequest) => Principal | Promise<Principal>\n /** MCP ๋…ธ์ถœ ๋ฐฉ์‹. ๊ธฐ๋ณธ \"execute\". command = ๋ช…๋ น์–ด๋ณ„ ๋„๊ตฌ (ยง12.2) */\n tools?: \"execute\" | \"split\" | \"command\"\n server?: { host?: string; port?: number; allowedOrigins?: string[] }\n /** HTTP ์ „์šฉ. OAuth ๋ณดํ˜ธ ์ž์› ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ (์ธ๊ฐ€ ์„œ๋ฒ„ ์œ„์น˜). mext login ยท MCP ํด๋ผ์ด์–ธํŠธ์˜ discovery */\n oauth?: OAuthResourceOptions\n /**\n * ๋กœ์ปฌ ์‹คํ–‰ (mext run ยท ๋กœ์ปฌ bin ยท stdio) ์ฃผ์ฒด. ๊ธฐ๋ณธ localPrincipal().\n * ํ•จ์ˆ˜ ์ธ์ž surface = ์–ด๋Œ‘ํ„ฐ ๊ธฐ๋ณธ ํ‘œ๋ฉด (mext run ยท ๋กœ์ปฌ bin = \"cli\", stdio = \"stdio\"): ํ‘œ๋ฉด๋ณ„๋กœ actor ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค\n */\n localPrincipal?: Principal | ((req: LocalPrincipalRequest) => Principal | Promise<Principal>)\n /** ๊ณ ๊ฐ CLI (mext build โ†’ .mext/cli/). ์—†์œผ๋ฉด ๊ณ ๊ฐ CLI ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค */\n cli?: CliConfig\n /** MCP ์„œ๋ฒ„ ์„ ์–ธ (serverInfo.name ยท instructions ยท capabilities) ยท stdio ์„œ๋ฒ„ ๋ฐœ์‹  ์•Œ๋ฆผ (ยง6) */\n mcp?: McpConfig\n /**\n * ์„œ๋ฒ„ ๋น„๋ฐ€ (32๋ฐ”์ดํŠธ ์ด์ƒ). MRTR requestState ์„œ๋ช… ํ‚ค (ยง12.1). ๋ฏธ์ง€์ • = MEXT_SECRET ํ™˜๊ฒฝ๋ณ€์ˆ˜, ๋‘˜ ๋‹ค ์—†์œผ๋ฉด ํ”„๋กœ์„ธ์Šค๋ณ„ ์ž„์˜ ํ‚ค.\n * ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ยท ์žฌ์‹œ์ž‘์„ ๋„˜๋Š” ctx.ask ์žฌ์‹œ๋„์— ํ•„์š”\n */\n secret?: string\n /**\n * ๋„์ž… ํ”„๋กœ์ ํŠธ๊ฐ€ ์ฃผ์ž…ํ•˜๋Š” ์ €์žฅ์†Œ ยท ๋ฉ”์‹œ์ง€ ๋ฒ„์Šค (ยง12.1). ์—†์œผ๋ฉด stateless.\n * ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค = memoryState(), ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค = ๋„์ž… ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ตฌํ˜„ํ•œ { store, bus }\n */\n state?: MextState\n /** HTTP ๊ฒฝ๋กœ ํด๋” (ยง12.4). ์„ค์ • ํŒŒ์ผ ์œ„์น˜ (cwd) ๊ธฐ์ค€. ๊ธฐ๋ณธ \"routes\". ํด๋” ์—†์Œ = route ์—†์Œ */\n routesDir?: string\n /**\n * ๊ฐ์‚ฌ (ยง11.1). sink = ๋ณ€๊ฒฝ ๋ช…๋ น์–ด ํ˜ธ์ถœ 1๊ฑด๋งˆ๋‹ค AuditEvent 1๊ฑด (๋ชจ๋“  ์–ด๋Œ‘ํ„ฐ). ์—†์œผ๋ฉด ๊ฐ์‚ฌ ์—†์Œ.\n * mext ๋Š” ์ €์žฅ์†Œ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค: ์ €์žฅ ยท ์กฐํšŒ๋Š” sink ๊ฐ€ ํ•œ๋‹ค\n */\n audit?: AuditConfig\n /**\n * ์Šน์ธ์˜ ํ‘œ๋ฉด๋ณ„ ํ™•์ธ ๋ฐฉ์‹ (ยง4 ์Šน์ธ). ์—†์œผ๋ฉด ๋ชจ๋“  ํ‘œ๋ฉด ask (ctx.ask ํ™•์ธ = requiresConfirmation ์˜ ๊ธฐ์กด ๋™์ž‘).\n * surfaces: { web: \"client\" } = web ํ‘œ๋ฉด์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ™•์ธ๋ฐ›๊ณ  ์š”์ฒญ์— ํ™•์ธ ํ‘œ์‹œ๋ฅผ ์‹ฃ๋Š”๋‹ค\n */\n approval?: ApprovalConfig\n}\n\n/** localPrincipal ํ•จ์ˆ˜์˜ ์ธ์ž */\nexport interface LocalPrincipalRequest {\n /** ์–ด๋Œ‘ํ„ฐ ๊ธฐ๋ณธ ํ‘œ๋ฉด. mext run ยท ๋กœ์ปฌ bin = \"cli\", stdio (mext dev --stdio ยท mext start --stdio ยท <bin> mcp serve) = \"stdio\" */\n surface: \"cli\" | \"stdio\"\n}\n\n/** mext.config.ts ์˜ mcp (ยง6 ์„œ๋ฒ„ ์„ ์–ธ ยท ์„œ๋ฒ„ ๋ฐœ์‹  ์•Œ๋ฆผ) */\nexport interface McpConfig {\n /** serverInfo.name. ๊ธฐ๋ณธ \"mext\" */\n name?: string\n /** initialize ยท server/discover ๊ฒฐ๊ณผ instructions */\n instructions?: string\n /** ์„œ๋ฒ„ capabilities ์— ๋ณ‘ํ•ฉ. experimental ๋งŒ (์˜ˆ: { experimental: { \"claude/channel\": {} } }) */\n capabilities?: McpCapabilities\n /**\n * stdio ์ „์šฉ. ์—ฐ๊ฒฐ ํ•˜๋‚˜์— 1ํšŒ (2025 = notifications/initialized ํ›„, 2026-07-28 = ์—ฐ๊ฒฐ ์งํ›„).\n * ๋ฐ˜ํ™˜ ํ•จ์ˆ˜ = ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์‹œ cleanup. HTTP ๋Š” stateless ๋ผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค\n */\n onConnect?: McpConnectHandler\n /**\n * stdio ํ”„๋กœํ† ์ฝœ. auto = 2026-07-28 ยท 2025 ๋ชจ๋‘, legacy = 2025 ๋งŒ (server/discover ๊ฑฐ๋ถ€).\n * Claude Code channel ์€ 2025 ์—ฐ๊ฒฐ์—์„œ๋งŒ ์•Œ๋ฆผ์„ ์ „๋‹ฌ. ๊ธฐ๋ณธ = experimental[\"claude/channel\"] ์„ ์–ธ ์‹œ legacy, ๊ทธ ์™ธ auto\n */\n stdioEra?: \"auto\" | \"legacy\"\n}\n\nexport interface McpCapabilities {\n experimental?: Record<string, object>\n}\n\n/** stdio ์—ฐ๊ฒฐ. notify = ์š”์ฒญ๊ณผ ๋ฌด๊ด€ํ•œ ์„œ๋ฒ„ ๋ฐœ์‹  ์•Œ๋ฆผ */\nexport interface McpConnection {\n /** ํ˜‘์ƒ๋œ ํ”„๋กœํ† ์ฝœ era */\n readonly era: \"legacy\" | \"modern\"\n /** ์—ฐ๊ฒฐ ์ข…๋ฃŒ ํ›„ ํ˜ธ์ถœ = reject */\n notify(method: string, params?: Record<string, unknown>): Promise<void>\n /**\n * ํด๋ผ์ด์–ธํŠธ ๋ฐœ์‹  ์•Œ๋ฆผ ์ˆ˜์‹  (์˜ˆ: notifications/claude/channel/permission_request).\n * SDK ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ์‚ฌ์–‘ ์•Œ๋ฆผ (initialized ยท cancelled ๋“ฑ) ์€ ๋Œ€์ƒ ์•„๋‹˜. ๊ฐ™์€ method ์žฌ๋“ฑ๋ก = ๊ต์ฒด. ๋ฐ˜ํ™˜ = ํ•ด์ œ\n */\n onNotification(method: string, handler: (params: Record<string, unknown>) => void | Promise<void>): () => void\n}\n\nexport type McpConnectHandler = (\n conn: McpConnection,\n) => void | (() => void | Promise<void>) | Promise<void | (() => void | Promise<void>)>\n\n/** mext.config.ts ์˜ cli (ยง5 ๊ณ ๊ฐ CLI ์„ค์ •) */\nexport interface CliConfig {\n /** ์‹คํ–‰ ํŒŒ์ผ ์ด๋ฆ„ (kebab-case). ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ ‘๋‘ (MYAPP_TOKEN ยท MYAPP_URL) ยท ์„ค์ • ํด๋” (~/.config/<bin>) */\n bin: string\n /** ์„œ๋ฒ„ MCP ์—”๋“œํฌ์ธํŠธ (http(s)). ์‹คํ–‰ ์‹œ <BIN>_URL ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ๊ฐ’. local ์ด๋ฉด ์—†์Œ */\n url?: string\n /** npm ํŒจํ‚ค์ง€ ์ด๋ฆ„. ๊ธฐ๋ณธ = bin */\n packageName?: string\n /** ๊ณ ๊ฐ CLI ๋ฒ„์ „ (--version ยท clientInfo). ๊ธฐ๋ณธ = ๋„์ž… ํ”„๋กœ์ ํŠธ package.json version */\n version?: string\n /** true = ๋ฒˆ๋“ค ํ˜•ํƒœ (๋‚ด์žฅ manifest, ๊ธฐ๋ณธ), false = ๋ฒ”์šฉ ํ˜•ํƒœ (help ยท ์Šคํ‚ค๋งˆ๋ฅผ ์„œ๋ฒ„์—์„œ ์กฐํšŒ) */\n manifest?: boolean\n /**\n * ์˜ค๋ฅ˜ ์ถœ๋ ฅ ยท exit code ์ปค์Šคํ…€ ๋ชจ๋“ˆ (๋„์ž… ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๊ธฐ์ค€ ๊ฒฝ๋กœ). default export = CliErrorFormatter.\n * ๊ณ ๊ฐ CLI bin.js ์— ๋ฒˆ๋“ค, mext run (๋กœ์ปฌ) ์ด import. @obov/mext ๋Š” ํƒ€์ž…๋งŒ import (๊ฐ’ import = ๋ฒˆ๋“ค ํฌํ•จ)\n */\n errors?: string\n /**\n * true = ๋กœ์ปฌ bin (ยง5). mext build โ†’ .mext/bin.js (ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉ์ž PC ์—์„œ ์‹คํ–‰, .mext/cli/ ์—†์Œ).\n * ๋„์ž… ํ”„๋กœ์ ํŠธ package.json bin { \"<bin>\": \".mext/bin.js\" }. url ยท packageName ยท manifest ์™€ ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์—†์Œ\n */\n local?: boolean\n}\n\nexport const CONFIG_FILE = \"mext.config.ts\"\n\nconst CONFIG_KEYS: readonly string[] = [\"commandsDir\", \"app\", \"auth\", \"tools\", \"server\", \"oauth\", \"localPrincipal\", \"cli\", \"mcp\", \"secret\", \"state\", \"resourcesDir\", \"routesDir\", \"promptsDir\", \"audit\", \"approval\", \"types\"]\n\n/** secret ์ตœ์†Œ ๊ธธ์ด (๋ฐ”์ดํŠธ, HMAC-SHA256 ํ‚ค) */\nexport const SECRET_MIN_BYTES = 32\n/** secret ํ™˜๊ฒฝ๋ณ€์ˆ˜ */\nexport const SECRET_ENV = \"MEXT_SECRET\"\nconst MCP_KEYS: readonly string[] = [\"name\", \"instructions\", \"capabilities\", \"onConnect\", \"stdioEra\"]\nconst CLI_KEYS: readonly string[] = [\"bin\", \"url\", \"packageName\", \"version\", \"manifest\", \"errors\", \"local\"]\n/** ๊ณ ๊ฐ CLI ์˜ ๋‚ด์žฅ ๋ช…๋ น (๋ฃจํŠธ ์„ธ๊ทธ๋จผํŠธ๋กœ ์“ธ ์ˆ˜ ์—†์Œ) */\nexport const CLI_BUILTIN_COMMANDS: readonly string[] = [\"help\", \"login\", \"logout\", \"mcp\"]\n/** ๋กœ์ปฌ bin (cli.local) ์˜ ๋‚ด์žฅ ๋ช…๋ น */\nexport const LOCAL_BIN_BUILTIN_COMMANDS: readonly string[] = [\"help\", \"mcp\"]\n\n/** ํƒ€์ž… ๋„์šฐ๋ฏธ. ๊ฐ’์€ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ */\nexport function defineConfig(config: MextConfig): MextConfig {\n return config\n}\n\n/** cwd ์˜ mext.config.ts ๋ฅผ import. ์—†์œผ๋ฉด {}. ํ˜•์‹์ด ํ‹€๋ฆฌ๋ฉด TypeError (๋ชจ๋ฅด๋Š” ํ‚ค ํฌํ•จ) */\nexport async function loadConfig(cwd: string = process.cwd()): Promise<MextConfig> {\n const file = join(resolve(cwd), CONFIG_FILE)\n if (!existsSync(file)) return {}\n const mod = (await import(pathToFileURL(file).href)) as { default?: unknown }\n return validateConfig(mod.default)\n}\n\n/** commands/ ์ ˆ๋Œ€ ๊ฒฝ๋กœ */\nexport function resolveCommandsDir(cwd: string, config: MextConfig): string {\n return resolve(cwd, config.commandsDir ?? \"commands\")\n}\n\n/** resources/ ์ ˆ๋Œ€ ๊ฒฝ๋กœ */\nexport function resolveResourcesDir(cwd: string, config: MextConfig): string {\n return resolve(cwd, config.resourcesDir ?? \"resources\")\n}\n\n/** prompts/ ์ ˆ๋Œ€ ๊ฒฝ๋กœ */\nexport function resolvePromptsDir(cwd: string, config: MextConfig): string {\n return resolve(cwd, config.promptsDir ?? \"prompts\")\n}\n\n/** routes/ ์ ˆ๋Œ€ ๊ฒฝ๋กœ */\nexport function resolveRoutesDir(cwd: string, config: MextConfig): string {\n return resolve(cwd, config.routesDir ?? \"routes\")\n}\n\n/**\n * ๋กœ์ปฌ ์‹คํ–‰ ์ฃผ์ฒด: config.localPrincipal (๊ฐ’ ยท ํ•จ์ˆ˜) ๋˜๋Š” localPrincipal().\n * surface = ์–ด๋Œ‘ํ„ฐ ๊ธฐ๋ณธ ํ‘œ๋ฉด (ํ•จ์ˆ˜ ์ธ์ž). ํ•จ์ˆ˜ ๊ฒฐ๊ณผ์˜ actor ยท surface ํ˜•์‹ ์˜ค๋ฅ˜ = TypeError\n */\nexport async function resolveLocalPrincipal(config: MextConfig, surface: LocalPrincipalRequest[\"surface\"] = \"cli\"): Promise<Principal> {\n const p = config.localPrincipal\n if (p === undefined) return localPrincipal()\n if (typeof p !== \"function\") return p\n const principal = await p({ surface })\n assertCallerFields(principal, \"localPrincipal\")\n return principal\n}\n\n/**\n * ์„œ๋ฒ„ ๋น„๋ฐ€: config.secret > MEXT_SECRET > undefined (ํ”„๋กœ์„ธ์Šค๋ณ„ ์ž„์˜ ํ‚ค).\n * ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์ด ์งง์œผ๋ฉด TypeError (config.secret ์€ ์„ค์ • ๋กœ๋“œ ์‹œ ๊ฒ€์‚ฌ)\n */\nexport function resolveSecret(config: MextConfig, env: Record<string, string | undefined> = process.env): string | undefined {\n if (config.secret !== undefined) return config.secret\n const value = env[SECRET_ENV]\n if (value === undefined || value === \"\") return undefined\n if (Buffer.byteLength(value) < SECRET_MIN_BYTES) throw new TypeError(`${SECRET_ENV} must be at least ${SECRET_MIN_BYTES} bytes`)\n return value\n}\n\n/** ์„œ๋ฒ„ ์„ ์–ธ (๋ชจ๋“  transport): config.mcp ์˜ name ยท instructions ยท capabilities + secret (requestStateKey) + state + audit. onConnect ๋Š” stdio ๋งŒ ๋”ฐ๋กœ */\nexport function mcpDeclarations(\n config: MextConfig,\n env: Record<string, string | undefined> = process.env,\n): { name?: string; instructions?: string; capabilities?: McpCapabilities; requestStateKey?: string; state?: MextState; audit?: AuditConfig; approval?: ApprovalConfig } {\n const mcp = config.mcp\n const secret = resolveSecret(config, env)\n return {\n ...(mcp?.name !== undefined ? { name: mcp.name } : {}),\n ...(mcp?.instructions !== undefined ? { instructions: mcp.instructions } : {}),\n ...(mcp?.capabilities !== undefined ? { capabilities: mcp.capabilities } : {}),\n ...(secret !== undefined ? { requestStateKey: secret } : {}),\n ...(config.state !== undefined ? { state: config.state } : {}),\n ...(config.audit !== undefined ? { audit: config.audit } : {}),\n ...(config.approval !== undefined ? { approval: config.approval } : {}),\n }\n}\n\n/** stdio ์˜ต์…˜ = ์„ ์–ธ + onConnect */\nexport function mcpStdioDeclarations(\n config: MextConfig,\n env: Record<string, string | undefined> = process.env,\n): ReturnType<typeof mcpDeclarations> & { onConnect?: McpConnectHandler; era?: \"auto\" | \"legacy\" } {\n return {\n ...mcpDeclarations(config, env),\n ...(config.mcp?.onConnect ? { onConnect: config.mcp.onConnect } : {}),\n ...(config.mcp?.stdioEra ? { era: config.mcp.stdioEra } : {}),\n }\n}\n\n/** cli.errors ์ ˆ๋Œ€ ๊ฒฝ๋กœ (์—†์œผ๋ฉด undefined) */\nexport function resolveCliErrorsPath(cwd: string, config: MextConfig): string | undefined {\n return config.cli?.errors === undefined ? undefined : resolve(cwd, config.cli.errors)\n}\n\n/** cli.errors ๋ชจ๋“ˆ์˜ default export (ํ•จ์ˆ˜). ํŒŒ์ผ ์—†์Œ ยท default ๊ฐ€ ํ•จ์ˆ˜ ์•„๋‹˜ = TypeError */\nexport async function loadCliErrorFormatter(cwd: string, config: MextConfig): Promise<CliErrorFormatter | undefined> {\n const file = resolveCliErrorsPath(cwd, config)\n if (file === undefined) return undefined\n if (!existsSync(file)) throw new TypeError(`${CONFIG_FILE}: cli.errors file not found: ${config.cli!.errors}`)\n const mod = (await import(pathToFileURL(file).href)) as { default?: unknown }\n if (typeof mod.default !== \"function\") throw new TypeError(`${config.cli!.errors}: default export must be a function (CliErrorFormatter)`)\n return mod.default as CliErrorFormatter\n}\n\n/** ctx.app: config.app() ๋˜๋Š” {} */\nexport async function createApp(config: MextConfig): Promise<MextApp> {\n return config.app ? await config.app() : ({} as MextApp)\n}\n\nfunction validateConfig(value: unknown): MextConfig {\n const fail = (message: string): never => {\n throw new TypeError(`${CONFIG_FILE}: ${message}`)\n }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return fail(\"default export must be an object (export default defineConfig({ ... }))\")\n }\n const c = value as Record<string, unknown>\n const unknown = Object.keys(c).filter((k) => !CONFIG_KEYS.includes(k))\n if (unknown.length > 0) fail(`unknown key${unknown.length === 1 ? \"\" : \"s\"}: ${unknown.join(\", \")}`)\n if (c.commandsDir !== undefined && typeof c.commandsDir !== \"string\") fail(\"commandsDir must be a string\")\n if (c.resourcesDir !== undefined && typeof c.resourcesDir !== \"string\") fail(\"resourcesDir must be a string\")\n if (c.routesDir !== undefined && typeof c.routesDir !== \"string\") fail(\"routesDir must be a string\")\n if (c.promptsDir !== undefined && typeof c.promptsDir !== \"string\") fail(\"promptsDir must be a string\")\n if (c.types !== undefined && typeof c.types !== \"boolean\" && (typeof c.types !== \"string\" || !c.types.endsWith(\".ts\"))) {\n fail('types must be true or a .ts file path (e.g. \"./mext.gen.ts\")')\n }\n if (c.app !== undefined && typeof c.app !== \"function\") fail(\"app must be a function\")\n if (c.auth !== undefined && typeof c.auth !== \"function\") fail(\"auth must be a function\")\n if (c.tools !== undefined && c.tools !== \"execute\" && c.tools !== \"split\" && c.tools !== \"command\") {\n fail('tools must be \"execute\", \"split\" or \"command\"')\n }\n if (c.server !== undefined && (typeof c.server !== \"object\" || c.server === null)) fail(\"server must be an object\")\n if (c.oauth !== undefined) {\n const o = c.oauth as { authorizationServers?: unknown } | null\n if (typeof o !== \"object\" || o === null || !Array.isArray(o.authorizationServers) || o.authorizationServers.length === 0) {\n fail(\"oauth.authorizationServers must be a non-empty array of URLs\")\n }\n }\n const lp = c.localPrincipal\n if (lp !== undefined && typeof lp !== \"function\" && !isPrincipal(lp)) {\n fail(\"localPrincipal must be a Principal ({ id, kind, scopes }) or a function\")\n }\n if (c.secret !== undefined && (typeof c.secret !== \"string\" || Buffer.byteLength(c.secret) < SECRET_MIN_BYTES)) {\n fail(`secret must be a string of at least ${SECRET_MIN_BYTES} bytes`)\n }\n if (c.state !== undefined) {\n const problem = stateProblem(c.state)\n if (problem !== undefined) fail(problem)\n }\n if (c.audit !== undefined) {\n const problem = auditConfigProblem(c.audit)\n if (problem !== undefined) fail(problem)\n }\n if (c.approval !== undefined) {\n const problem = approvalConfigProblem(c.approval)\n if (problem !== undefined) fail(problem)\n }\n if (c.cli !== undefined) validateCli(c.cli, fail)\n if (c.mcp !== undefined) validateMcp(c.mcp, fail)\n return c as MextConfig\n}\n\nfunction validateMcp(value: unknown, fail: (message: string) => never): void {\n if (!isPlainObject(value)) fail(\"mcp must be an object\")\n const mcp = value as Record<string, unknown>\n const unknown = Object.keys(mcp).filter((k) => !MCP_KEYS.includes(k))\n if (unknown.length > 0) fail(`unknown mcp key${unknown.length === 1 ? \"\" : \"s\"}: ${unknown.join(\", \")}`)\n if (mcp.name !== undefined && (typeof mcp.name !== \"string\" || mcp.name.trim() === \"\")) fail(\"mcp.name must be a non-empty string\")\n if (mcp.instructions !== undefined && typeof mcp.instructions !== \"string\") fail(\"mcp.instructions must be a string\")\n if (mcp.onConnect !== undefined && typeof mcp.onConnect !== \"function\") fail(\"mcp.onConnect must be a function\")\n if (mcp.stdioEra !== undefined && mcp.stdioEra !== \"auto\" && mcp.stdioEra !== \"legacy\") fail('mcp.stdioEra must be \"auto\" or \"legacy\"')\n if (mcp.capabilities !== undefined) {\n if (!isPlainObject(mcp.capabilities)) fail(\"mcp.capabilities must be an object ({ experimental })\")\n const caps = mcp.capabilities as Record<string, unknown>\n const other = Object.keys(caps).filter((k) => k !== \"experimental\")\n if (other.length > 0) fail(`mcp.capabilities supports only experimental (got ${other.join(\", \")})`)\n const exp = caps.experimental\n if (exp !== undefined) {\n if (!isPlainObject(exp)) fail(\"mcp.capabilities.experimental must be an object\")\n for (const [key, v] of Object.entries(exp as Record<string, unknown>)) {\n if (!isPlainObject(v)) fail(`mcp.capabilities.experimental[\"${key}\"] must be an object`)\n }\n }\n }\n}\n\nfunction isPlainObject(value: unknown): boolean {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction validateCli(value: unknown, fail: (message: string) => never): void {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) fail(\"cli must be an object ({ bin, url })\")\n const cli = value as Record<string, unknown>\n const unknown = Object.keys(cli).filter((k) => !CLI_KEYS.includes(k))\n if (unknown.length > 0) fail(`unknown cli key${unknown.length === 1 ? \"\" : \"s\"}: ${unknown.join(\", \")}`)\n if (typeof cli.bin !== \"string\" || !isSegment(cli.bin)) fail('cli.bin must be a kebab-case name (e.g. \"myapp\")')\n if (cli.local !== undefined && typeof cli.local !== \"boolean\") fail(\"cli.local must be a boolean\")\n if (cli.local === true) {\n const remoteOnly = [\"url\", \"packageName\", \"manifest\"].filter((k) => cli[k] !== undefined)\n if (remoteOnly.length > 0) fail(`cli.local cannot be combined with ${remoteOnly.map((k) => `cli.${k}`).join(\", \")} (local bin runs handlers, no server)`)\n } else if (typeof cli.url !== \"string\" || !isHttpUrl(cli.url)) {\n fail(\"cli.url must be an http(s) URL of the MCP endpoint (or set cli.local: true for a local bin)\")\n }\n if (cli.packageName !== undefined && (typeof cli.packageName !== \"string\" || !NPM_NAME.test(cli.packageName))) {\n fail('cli.packageName must be an npm package name (e.g. \"@example/myapp-cli\")')\n }\n if (cli.version !== undefined && (typeof cli.version !== \"string\" || cli.version.trim() === \"\")) {\n fail(\"cli.version must be a non-empty string\")\n }\n if (cli.manifest !== undefined && typeof cli.manifest !== \"boolean\") fail(\"cli.manifest must be a boolean\")\n if (cli.errors !== undefined && (typeof cli.errors !== \"string\" || cli.errors.trim() === \"\")) {\n fail('cli.errors must be a module path (e.g. \"./cli-errors.ts\")')\n }\n}\n\n/** npm ํŒจํ‚ค์ง€ ์ด๋ฆ„ (์†Œ๋ฌธ์ž ยท scope ์„ ํƒ) */\nconst NPM_NAME = /^(?:@[a-z0-9][a-z0-9._~-]*\\/)?[a-z0-9][a-z0-9._~-]*$/\n\nfunction isHttpUrl(value: string): boolean {\n if (!/^https?:\\/\\//i.test(value)) return false\n try {\n new URL(value)\n return true\n } catch {\n return false\n }\n}\n\nfunction isPrincipal(value: unknown): value is Principal {\n const p = value as Partial<Principal> | null\n return (\n typeof p === \"object\" &&\n p !== null &&\n typeof p.id === \"string\" &&\n (p.kind === \"local\" || p.kind === \"token\" || p.kind === \"anonymous\") &&\n Array.isArray(p.scopes) &&\n callerFieldsProblem(p) === undefined\n )\n}\n"]}
package/dist/errors.d.ts CHANGED
@@ -11,7 +11,7 @@ export declare class MextBuildError extends Error {
11
11
  readonly issues: readonly BuildIssue[];
12
12
  constructor(issues: readonly BuildIssue[]);
13
13
  }
14
- export type MextErrorCode = "UNKNOWN_COMMAND" | "INVALID_ARGUMENT" | "UNAUTHENTICATED" | "PERMISSION_DENIED" | "INPUT_UNAVAILABLE" | "INPUT_DECLINED";
14
+ export type MextErrorCode = "UNKNOWN_COMMAND" | "INVALID_ARGUMENT" | "UNAUTHENTICATED" | "PERMISSION_DENIED" | "INPUT_UNAVAILABLE" | "INPUT_DECLINED" | "APPROVAL_REQUIRED";
15
15
  export interface ArgumentIssue {
16
16
  /** ์  ๊ตฌ๋ถ„ ๊ฒฝ๋กœ. "" = ์ž…๋ ฅ ์ „์ฒด */
17
17
  path: string;
@@ -42,11 +42,25 @@ export interface MextErrorDetails {
42
42
  };
43
43
  PERMISSION_DENIED: {
44
44
  command: string;
45
- /** anonymous = ์ธ์ฆ ์—†๋Š” ์ฃผ์ฒด์˜ readOnly ์™ธ ๋ช…๋ น์–ด ยท read_only = readOnly ์ „์šฉ ํ˜ธ์ถœ (split query) ยท scope = scopes ๋ถ€์กฑ */
46
- reason: "anonymous" | "read_only" | "scope";
45
+ /**
46
+ * anonymous = ์ธ์ฆ ์—†๋Š” ์ฃผ์ฒด์˜ readOnly ์™ธ ๋ช…๋ น์–ด ยท read_only = readOnly ์ „์šฉ ํ˜ธ์ถœ (split query) ยท scope = scopes ๋ถ€์กฑ ยท
47
+ * authorize = ๋ช…๋ น์–ด์˜ authorize ๊ฐ€๋“œ๊ฐ€ ๊ฑฐ๋ถ€ (spec ยง4)
48
+ */
49
+ reason: "anonymous" | "read_only" | "scope" | "authorize";
47
50
  required_scopes: string[];
48
51
  held_scopes: string[];
49
52
  };
53
+ /**
54
+ * ์‚ฌ๋žŒ์˜ ์Šน์ธ ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ํ˜ธ์ถœ (needsApproval ยท requiresConfirmation, spec ยง4 ์Šน์ธ). PERMISSION_DENIED ์™€ ๋‹ฌ๋ฆฌ ์‚ฌ๋žŒ์ด ํ™•์ธํ•˜๋ฉด ์‹คํ–‰๋œ๋‹ค.
55
+ * unconfirmed = client ๋ฐฉ์‹ ํ‘œ๋ฉด์ธ๋ฐ ์š”์ฒญ์— ํ™•์ธ ํ‘œ์‹œ๊ฐ€ ์—†๋‹ค (ํ™•์ธ๋ฐ›๊ณ  meta_key ์— { confirmed: true } ๋ฅผ ์‹ค์–ด ๋‹ค์‹œ ํ˜ธ์ถœ).
56
+ * human_required = ์ด ํ˜ธ์ถœ์ž๋Š” ์Šน์ธํ•  ์ˆ˜ ์—†๋‹ค (ํ–‰์œ„์ž๊ฐ€ agent ยท client ๋ฐฉ์‹ ํ‘œ๋ฉด์—์„œ human ์ด ์•„๋‹˜). ์‚ฌ๋žŒ์ด ์‚ฌ๋žŒ ํ‘œ๋ฉด์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค
57
+ */
58
+ APPROVAL_REQUIRED: {
59
+ command: string;
60
+ reason: "unconfirmed" | "human_required";
61
+ /** reason unconfirmed: ํ™•์ธ ํ‘œ์‹œ๋ฅผ ์‹ฃ๋Š” ์š”์ฒญ params._meta ํ‚ค ("dev.mext/approval") */
62
+ meta_key?: string;
63
+ };
50
64
  /** ctx.ask ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ (TTY ์—†๋Š” CLI ๋“ฑ) */
51
65
  INPUT_UNAVAILABLE: {
52
66
  command: string;
@@ -74,6 +88,10 @@ export declare function isMextError<C extends MextErrorCode>(error: unknown, cod
74
88
  export declare function unauthenticated(reason: MextErrorDetails["UNAUTHENTICATED"]["reason"]): MextError<"UNAUTHENTICATED">;
75
89
  /** ctx.ask ๊ฑฐ์ ˆ. AskHandler ๊ฐ€ input ์š”์ฒญ ๊ฑฐ์ ˆ ยท ์ทจ์†Œ์— ๋˜์ง„๋‹ค. invoke ๋Š” requiresConfirmation ํ™•์ธ ๊ฑฐ์ ˆ์— ๋˜์ง„๋‹ค */
76
90
  export declare function inputDeclined(command: string, kind: "confirm" | "input"): MextError<"INPUT_DECLINED">;
91
+ /** ์Šน์ธ ๋ถ€์กฑ (ยง4 ์Šน์ธ). agent = ์„œ๋ฒ„๊ฐ€ ์ •ํ•œ ํ–‰์œ„์ž๊ฐ€ agent */
92
+ export declare function approvalRequired(command: string, reason: MextErrorDetails["APPROVAL_REQUIRED"]["reason"], options?: {
93
+ agent?: boolean;
94
+ }): MextError<"APPROVAL_REQUIRED">;
77
95
  /** mext ๊ฐ€ ์“ฐ๋Š” ์˜ค๋ฅ˜ code. CommandError ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค */
78
96
  export declare const RESERVED_ERROR_CODES: readonly string[];
79
97
  /**
package/dist/errors.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { APPROVAL_META_KEY } from "./mcp/constants.js";
1
2
  /** ์Šค์บ” ยท Registry ์ƒ์„ฑ์˜ ๋นŒ๋“œ ์˜ค๋ฅ˜. ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ๋ชจ์•„ ํ•œ ๋ฒˆ์— ๋˜์ง„๋‹ค */
2
3
  export class MextBuildError extends Error {
3
4
  issues;
@@ -35,6 +36,17 @@ export function inputDeclined(command, kind) {
35
36
  const message = kind === "confirm" ? `${command} was not confirmed and did not run.` : `${command} requested input, but it was declined.`;
36
37
  return new MextError("INPUT_DECLINED", message, { command, kind });
37
38
  }
39
+ /** ์Šน์ธ ๋ถ€์กฑ (ยง4 ์Šน์ธ). agent = ์„œ๋ฒ„๊ฐ€ ์ •ํ•œ ํ–‰์œ„์ž๊ฐ€ agent */
40
+ export function approvalRequired(command, reason, options = {}) {
41
+ if (reason === "unconfirmed") {
42
+ const key = APPROVAL_META_KEY;
43
+ return new MextError("APPROVAL_REQUIRED", `${command} needs approval. Confirm with the person, then call again with _meta["${key}"] = { "confirmed": true }.`, { command, reason, meta_key: key });
44
+ }
45
+ const message = options.agent
46
+ ? `${command} needs approval from a person. An agent cannot approve it; a person has to run it.`
47
+ : `${command} needs approval from a person, and this caller is not identified as one.`;
48
+ return new MextError("APPROVAL_REQUIRED", message, { command, reason });
49
+ }
38
50
  /** mext ๊ฐ€ ์“ฐ๋Š” ์˜ค๋ฅ˜ code. CommandError ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค */
39
51
  export const RESERVED_ERROR_CODES = [
40
52
  "UNKNOWN_COMMAND",
@@ -43,6 +55,7 @@ export const RESERVED_ERROR_CODES = [
43
55
  "PERMISSION_DENIED",
44
56
  "INPUT_UNAVAILABLE",
45
57
  "INPUT_DECLINED",
58
+ "APPROVAL_REQUIRED",
46
59
  "EXECUTION_ERROR",
47
60
  "EXECUTION_FAILED",
48
61
  "INTERRUPTED",
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["export type BuildIssueCode =\n | \"COMMANDS_DIR_MISSING\"\n | \"PATH_COLLISION\"\n | \"DUPLICATE_ID\"\n | \"INVALID_SEGMENT\"\n | \"INVALID_ALIAS\"\n | \"RESERVED_ID\"\n | \"ROOT_INDEX\"\n | \"INVALID_COMMAND\"\n | \"LOAD_FAILED\"\n | \"SCHEMA_UNREPRESENTABLE\"\n | \"CLI_UNCONVERTIBLE\"\n | \"BUNDLE_FAILED\"\n | \"INVALID_CONFIG\"\n | \"INVALID_RESOURCE\"\n | \"INVALID_PROMPT\"\n | \"ROUTE_CONFLICT\"\n | \"DUPLICATE_ROUTE\"\n | \"INVALID_ROUTE\"\n\nexport interface BuildIssue {\n code: BuildIssueCode\n message: string\n /** commands/ ๊ธฐ์ค€ ์ƒ๋Œ€ ๊ฒฝ๋กœ (posix) */\n file?: string\n id?: string\n}\n\n/** ์Šค์บ” ยท Registry ์ƒ์„ฑ์˜ ๋นŒ๋“œ ์˜ค๋ฅ˜. ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ๋ชจ์•„ ํ•œ ๋ฒˆ์— ๋˜์ง„๋‹ค */\nexport class MextBuildError extends Error {\n readonly issues: readonly BuildIssue[]\n\n constructor(issues: readonly BuildIssue[]) {\n super(\n `mext build failed (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"})\\n` +\n issues.map((i) => ` ${i.code}${i.file ? ` ${i.file}` : \"\"}: ${i.message}`).join(\"\\n\"),\n )\n this.name = \"MextBuildError\"\n this.issues = issues\n }\n}\n\nexport type MextErrorCode =\n | \"UNKNOWN_COMMAND\"\n | \"INVALID_ARGUMENT\"\n | \"UNAUTHENTICATED\"\n | \"PERMISSION_DENIED\"\n | \"INPUT_UNAVAILABLE\"\n | \"INPUT_DECLINED\"\n\nexport interface ArgumentIssue {\n /** ์  ๊ตฌ๋ถ„ ๊ฒฝ๋กœ. \"\" = ์ž…๋ ฅ ์ „์ฒด */\n path: string\n code: string\n message: string\n}\n\nexport interface MextErrorDetails {\n UNKNOWN_COMMAND: {\n command: string\n /** ์œ ์‚ฌ ์ •์‹ ID (๊ฐ€๊นŒ์šด ์ˆœ) */\n suggested: string[]\n /** ๋‹ค์Œ์— ๋ณผ help ๋Œ€์ƒ. \"help\" (๋ฃจํŠธ) ยท \"help users\" (๋„ค์ž„์ŠคํŽ˜์ด์Šค) */\n usage: string\n }\n INVALID_ARGUMENT: {\n command: string\n /** ์›๋ณธ ์ž…๋ ฅ์— ์—†๋Š” ํ•„์ˆ˜ ํ•„๋“œ ๊ฒฝ๋กœ */\n missing_fields: string[]\n issues: ArgumentIssue[]\n /** input JSON Schema 2020-12 */\n expected_schema: Record<string, unknown>\n examples: unknown[]\n }\n UNAUTHENTICATED: {\n reason: \"missing_token\" | \"invalid_token\"\n /** CLI ์›๊ฒฉ ์‹คํ–‰: ํ† ํฐ ๋ฐœ๊ธ‰ ๋ช…๋ น (mext login --url <url>) */\n login?: string\n }\n PERMISSION_DENIED: {\n command: string\n /** anonymous = ์ธ์ฆ ์—†๋Š” ์ฃผ์ฒด์˜ readOnly ์™ธ ๋ช…๋ น์–ด ยท read_only = readOnly ์ „์šฉ ํ˜ธ์ถœ (split query) ยท scope = scopes ๋ถ€์กฑ */\n reason: \"anonymous\" | \"read_only\" | \"scope\"\n required_scopes: string[]\n held_scopes: string[]\n }\n /** ctx.ask ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ (TTY ์—†๋Š” CLI ๋“ฑ) */\n INPUT_UNAVAILABLE: {\n command: string\n /** url ์š”์ฒญ (ctx.ask kind url) ์˜ URL. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์—ด๊ณ  ๋‹ค์‹œ ์‹คํ–‰ */\n url?: string\n }\n /** ctx.ask ๊ฑฐ์ ˆ ยท ์ทจ์†Œ. confirm = requiresConfirmation ํ™•์ธ ๊ฑฐ์ ˆ (์‹คํ–‰ ์•ˆ ํ•จ), input = ์ž…๋ ฅ ์š”์ฒญ ๊ฑฐ์ ˆ */\n INPUT_DECLINED: {\n command: string\n kind: \"confirm\" | \"input\"\n }\n}\n\n/** ๊ตฌ์กฐํ™” ์˜ค๋ฅ˜. ์–ด๋Œ‘ํ„ฐ๋Š” code ๋กœ ๋ถ„๊ธฐํ•˜๊ณ  toJSON() ์„ ์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ์“ด๋‹ค */\nexport class MextError<C extends MextErrorCode = MextErrorCode> extends Error {\n readonly code: C\n readonly details: MextErrorDetails[C]\n\n constructor(code: C, message: string, details: MextErrorDetails[C]) {\n super(message)\n this.name = \"MextError\"\n this.code = code\n this.details = details\n }\n\n toJSON(): { code: C; message: string } & MextErrorDetails[C] {\n return { code: this.code, message: this.message, ...this.details }\n }\n}\n\nexport function isMextError<C extends MextErrorCode>(error: unknown, code?: C): error is MextError<C> {\n return error instanceof MextError && (code === undefined || error.code === code)\n}\n\n/** auth ๋‹จ๊ณ„์—์„œ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๋˜์ง€๋Š” ์˜ค๋ฅ˜. anonymous ๋กœ ๋‚ฎ์ถ”์ง€ ์•Š๋Š”๋‹ค */\nexport function unauthenticated(reason: MextErrorDetails[\"UNAUTHENTICATED\"][\"reason\"]): MextError<\"UNAUTHENTICATED\"> {\n const message = reason === \"missing_token\" ? \"Authentication required.\" : \"Invalid authentication token.\"\n return new MextError(\"UNAUTHENTICATED\", message, { reason })\n}\n\n/** ctx.ask ๊ฑฐ์ ˆ. AskHandler ๊ฐ€ input ์š”์ฒญ ๊ฑฐ์ ˆ ยท ์ทจ์†Œ์— ๋˜์ง„๋‹ค. invoke ๋Š” requiresConfirmation ํ™•์ธ ๊ฑฐ์ ˆ์— ๋˜์ง„๋‹ค */\nexport function inputDeclined(command: string, kind: \"confirm\" | \"input\"): MextError<\"INPUT_DECLINED\"> {\n const message =\n kind === \"confirm\" ? `${command} was not confirmed and did not run.` : `${command} requested input, but it was declined.`\n return new MextError(\"INPUT_DECLINED\", message, { command, kind })\n}\n\n/** mext ๊ฐ€ ์“ฐ๋Š” ์˜ค๋ฅ˜ code. CommandError ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค */\nexport const RESERVED_ERROR_CODES: readonly string[] = [\n \"UNKNOWN_COMMAND\",\n \"INVALID_ARGUMENT\",\n \"UNAUTHENTICATED\",\n \"PERMISSION_DENIED\",\n \"INPUT_UNAVAILABLE\",\n \"INPUT_DECLINED\",\n \"EXECUTION_ERROR\",\n \"EXECUTION_FAILED\",\n \"INTERRUPTED\",\n \"BUILD_ERROR\",\n \"REMOTE_ERROR\",\n]\n\nconst ERROR_CODE = /^[A-Z][A-Z0-9_]*$/\n\n/**\n * ํ•ธ๋“ค๋Ÿฌ ์ •์˜ ์˜ค๋ฅ˜ (ยง4). ์‘๋‹ต ๋ณธ๋ฌธ = { code, message, ...details } (MCP structuredContent.error ยท CLI --json).\n * code = ๋Œ€๋ฌธ์ž ์Šค๋„ค์ดํฌ, mext ์˜ˆ์•ฝ code ๋ถˆ๊ฐ€ (TypeError). onCommandError ์— ๋ณด๊ณ ํ•˜์ง€ ์•Š๋Š”๋‹ค (์˜๋„๋œ ์˜ค๋ฅ˜)\n */\nexport class CommandError extends Error {\n readonly code: string\n readonly details: Record<string, unknown>\n\n constructor(code: string, message: string, details: Record<string, unknown> = {}) {\n if (typeof code !== \"string\" || !ERROR_CODE.test(code)) {\n throw new TypeError(`CommandError code must be UPPER_SNAKE_CASE (got ${JSON.stringify(code)})`)\n }\n if (RESERVED_ERROR_CODES.includes(code)) throw new TypeError(`CommandError code \"${code}\" is reserved by mext`)\n if (typeof details !== \"object\" || details === null || Array.isArray(details)) {\n throw new TypeError(\"CommandError details must be an object\")\n }\n super(message)\n this.name = \"CommandError\"\n this.code = code\n this.details = details\n }\n\n toJSON(): { code: string; message: string } & Record<string, unknown> {\n return { ...this.details, code: this.code, message: this.message }\n }\n}\n\nexport function isCommandError(error: unknown): error is CommandError {\n return error instanceof CommandError\n}\n\n/** ์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ๊ทธ๋Œ€๋กœ ๋ณด๋‚ด๋Š” ์˜ค๋ฅ˜ (MextError ยท CommandError) */\nexport function isDeclaredError(error: unknown): error is MextError | CommandError {\n return error instanceof MextError || error instanceof CommandError\n}\n"]}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["import { APPROVAL_META_KEY } from \"./mcp/constants.ts\"\nexport type BuildIssueCode =\n | \"COMMANDS_DIR_MISSING\"\n | \"PATH_COLLISION\"\n | \"DUPLICATE_ID\"\n | \"INVALID_SEGMENT\"\n | \"INVALID_ALIAS\"\n | \"RESERVED_ID\"\n | \"ROOT_INDEX\"\n | \"INVALID_COMMAND\"\n | \"LOAD_FAILED\"\n | \"SCHEMA_UNREPRESENTABLE\"\n | \"CLI_UNCONVERTIBLE\"\n | \"BUNDLE_FAILED\"\n | \"INVALID_CONFIG\"\n | \"INVALID_RESOURCE\"\n | \"INVALID_PROMPT\"\n | \"ROUTE_CONFLICT\"\n | \"DUPLICATE_ROUTE\"\n | \"INVALID_ROUTE\"\n\nexport interface BuildIssue {\n code: BuildIssueCode\n message: string\n /** commands/ ๊ธฐ์ค€ ์ƒ๋Œ€ ๊ฒฝ๋กœ (posix) */\n file?: string\n id?: string\n}\n\n/** ์Šค์บ” ยท Registry ์ƒ์„ฑ์˜ ๋นŒ๋“œ ์˜ค๋ฅ˜. ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ๋ชจ์•„ ํ•œ ๋ฒˆ์— ๋˜์ง„๋‹ค */\nexport class MextBuildError extends Error {\n readonly issues: readonly BuildIssue[]\n\n constructor(issues: readonly BuildIssue[]) {\n super(\n `mext build failed (${issues.length} issue${issues.length === 1 ? \"\" : \"s\"})\\n` +\n issues.map((i) => ` ${i.code}${i.file ? ` ${i.file}` : \"\"}: ${i.message}`).join(\"\\n\"),\n )\n this.name = \"MextBuildError\"\n this.issues = issues\n }\n}\n\nexport type MextErrorCode =\n | \"UNKNOWN_COMMAND\"\n | \"INVALID_ARGUMENT\"\n | \"UNAUTHENTICATED\"\n | \"PERMISSION_DENIED\"\n | \"INPUT_UNAVAILABLE\"\n | \"INPUT_DECLINED\"\n | \"APPROVAL_REQUIRED\"\n\nexport interface ArgumentIssue {\n /** ์  ๊ตฌ๋ถ„ ๊ฒฝ๋กœ. \"\" = ์ž…๋ ฅ ์ „์ฒด */\n path: string\n code: string\n message: string\n}\n\nexport interface MextErrorDetails {\n UNKNOWN_COMMAND: {\n command: string\n /** ์œ ์‚ฌ ์ •์‹ ID (๊ฐ€๊นŒ์šด ์ˆœ) */\n suggested: string[]\n /** ๋‹ค์Œ์— ๋ณผ help ๋Œ€์ƒ. \"help\" (๋ฃจํŠธ) ยท \"help users\" (๋„ค์ž„์ŠคํŽ˜์ด์Šค) */\n usage: string\n }\n INVALID_ARGUMENT: {\n command: string\n /** ์›๋ณธ ์ž…๋ ฅ์— ์—†๋Š” ํ•„์ˆ˜ ํ•„๋“œ ๊ฒฝ๋กœ */\n missing_fields: string[]\n issues: ArgumentIssue[]\n /** input JSON Schema 2020-12 */\n expected_schema: Record<string, unknown>\n examples: unknown[]\n }\n UNAUTHENTICATED: {\n reason: \"missing_token\" | \"invalid_token\"\n /** CLI ์›๊ฒฉ ์‹คํ–‰: ํ† ํฐ ๋ฐœ๊ธ‰ ๋ช…๋ น (mext login --url <url>) */\n login?: string\n }\n PERMISSION_DENIED: {\n command: string\n /**\n * anonymous = ์ธ์ฆ ์—†๋Š” ์ฃผ์ฒด์˜ readOnly ์™ธ ๋ช…๋ น์–ด ยท read_only = readOnly ์ „์šฉ ํ˜ธ์ถœ (split query) ยท scope = scopes ๋ถ€์กฑ ยท\n * authorize = ๋ช…๋ น์–ด์˜ authorize ๊ฐ€๋“œ๊ฐ€ ๊ฑฐ๋ถ€ (spec ยง4)\n */\n reason: \"anonymous\" | \"read_only\" | \"scope\" | \"authorize\"\n required_scopes: string[]\n held_scopes: string[]\n }\n /**\n * ์‚ฌ๋žŒ์˜ ์Šน์ธ ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ํ˜ธ์ถœ (needsApproval ยท requiresConfirmation, spec ยง4 ์Šน์ธ). PERMISSION_DENIED ์™€ ๋‹ฌ๋ฆฌ ์‚ฌ๋žŒ์ด ํ™•์ธํ•˜๋ฉด ์‹คํ–‰๋œ๋‹ค.\n * unconfirmed = client ๋ฐฉ์‹ ํ‘œ๋ฉด์ธ๋ฐ ์š”์ฒญ์— ํ™•์ธ ํ‘œ์‹œ๊ฐ€ ์—†๋‹ค (ํ™•์ธ๋ฐ›๊ณ  meta_key ์— { confirmed: true } ๋ฅผ ์‹ค์–ด ๋‹ค์‹œ ํ˜ธ์ถœ).\n * human_required = ์ด ํ˜ธ์ถœ์ž๋Š” ์Šน์ธํ•  ์ˆ˜ ์—†๋‹ค (ํ–‰์œ„์ž๊ฐ€ agent ยท client ๋ฐฉ์‹ ํ‘œ๋ฉด์—์„œ human ์ด ์•„๋‹˜). ์‚ฌ๋žŒ์ด ์‚ฌ๋žŒ ํ‘œ๋ฉด์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค\n */\n APPROVAL_REQUIRED: {\n command: string\n reason: \"unconfirmed\" | \"human_required\"\n /** reason unconfirmed: ํ™•์ธ ํ‘œ์‹œ๋ฅผ ์‹ฃ๋Š” ์š”์ฒญ params._meta ํ‚ค (\"dev.mext/approval\") */\n meta_key?: string\n }\n /** ctx.ask ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ (TTY ์—†๋Š” CLI ๋“ฑ) */\n INPUT_UNAVAILABLE: {\n command: string\n /** url ์š”์ฒญ (ctx.ask kind url) ์˜ URL. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์—ด๊ณ  ๋‹ค์‹œ ์‹คํ–‰ */\n url?: string\n }\n /** ctx.ask ๊ฑฐ์ ˆ ยท ์ทจ์†Œ. confirm = requiresConfirmation ํ™•์ธ ๊ฑฐ์ ˆ (์‹คํ–‰ ์•ˆ ํ•จ), input = ์ž…๋ ฅ ์š”์ฒญ ๊ฑฐ์ ˆ */\n INPUT_DECLINED: {\n command: string\n kind: \"confirm\" | \"input\"\n }\n}\n\n/** ๊ตฌ์กฐํ™” ์˜ค๋ฅ˜. ์–ด๋Œ‘ํ„ฐ๋Š” code ๋กœ ๋ถ„๊ธฐํ•˜๊ณ  toJSON() ์„ ์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ์“ด๋‹ค */\nexport class MextError<C extends MextErrorCode = MextErrorCode> extends Error {\n readonly code: C\n readonly details: MextErrorDetails[C]\n\n constructor(code: C, message: string, details: MextErrorDetails[C]) {\n super(message)\n this.name = \"MextError\"\n this.code = code\n this.details = details\n }\n\n toJSON(): { code: C; message: string } & MextErrorDetails[C] {\n return { code: this.code, message: this.message, ...this.details }\n }\n}\n\nexport function isMextError<C extends MextErrorCode>(error: unknown, code?: C): error is MextError<C> {\n return error instanceof MextError && (code === undefined || error.code === code)\n}\n\n/** auth ๋‹จ๊ณ„์—์„œ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๋˜์ง€๋Š” ์˜ค๋ฅ˜. anonymous ๋กœ ๋‚ฎ์ถ”์ง€ ์•Š๋Š”๋‹ค */\nexport function unauthenticated(reason: MextErrorDetails[\"UNAUTHENTICATED\"][\"reason\"]): MextError<\"UNAUTHENTICATED\"> {\n const message = reason === \"missing_token\" ? \"Authentication required.\" : \"Invalid authentication token.\"\n return new MextError(\"UNAUTHENTICATED\", message, { reason })\n}\n\n/** ctx.ask ๊ฑฐ์ ˆ. AskHandler ๊ฐ€ input ์š”์ฒญ ๊ฑฐ์ ˆ ยท ์ทจ์†Œ์— ๋˜์ง„๋‹ค. invoke ๋Š” requiresConfirmation ํ™•์ธ ๊ฑฐ์ ˆ์— ๋˜์ง„๋‹ค */\nexport function inputDeclined(command: string, kind: \"confirm\" | \"input\"): MextError<\"INPUT_DECLINED\"> {\n const message =\n kind === \"confirm\" ? `${command} was not confirmed and did not run.` : `${command} requested input, but it was declined.`\n return new MextError(\"INPUT_DECLINED\", message, { command, kind })\n}\n\n/** ์Šน์ธ ๋ถ€์กฑ (ยง4 ์Šน์ธ). agent = ์„œ๋ฒ„๊ฐ€ ์ •ํ•œ ํ–‰์œ„์ž๊ฐ€ agent */\nexport function approvalRequired(\n command: string,\n reason: MextErrorDetails[\"APPROVAL_REQUIRED\"][\"reason\"],\n options: { agent?: boolean } = {},\n): MextError<\"APPROVAL_REQUIRED\"> {\n if (reason === \"unconfirmed\") {\n const key = APPROVAL_META_KEY\n return new MextError(\n \"APPROVAL_REQUIRED\",\n `${command} needs approval. Confirm with the person, then call again with _meta[\"${key}\"] = { \"confirmed\": true }.`,\n { command, reason, meta_key: key },\n )\n }\n const message = options.agent\n ? `${command} needs approval from a person. An agent cannot approve it; a person has to run it.`\n : `${command} needs approval from a person, and this caller is not identified as one.`\n return new MextError(\"APPROVAL_REQUIRED\", message, { command, reason })\n}\n\n/** mext ๊ฐ€ ์“ฐ๋Š” ์˜ค๋ฅ˜ code. CommandError ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค */\nexport const RESERVED_ERROR_CODES: readonly string[] = [\n \"UNKNOWN_COMMAND\",\n \"INVALID_ARGUMENT\",\n \"UNAUTHENTICATED\",\n \"PERMISSION_DENIED\",\n \"INPUT_UNAVAILABLE\",\n \"INPUT_DECLINED\",\n \"APPROVAL_REQUIRED\",\n \"EXECUTION_ERROR\",\n \"EXECUTION_FAILED\",\n \"INTERRUPTED\",\n \"BUILD_ERROR\",\n \"REMOTE_ERROR\",\n]\n\nconst ERROR_CODE = /^[A-Z][A-Z0-9_]*$/\n\n/**\n * ํ•ธ๋“ค๋Ÿฌ ์ •์˜ ์˜ค๋ฅ˜ (ยง4). ์‘๋‹ต ๋ณธ๋ฌธ = { code, message, ...details } (MCP structuredContent.error ยท CLI --json).\n * code = ๋Œ€๋ฌธ์ž ์Šค๋„ค์ดํฌ, mext ์˜ˆ์•ฝ code ๋ถˆ๊ฐ€ (TypeError). onCommandError ์— ๋ณด๊ณ ํ•˜์ง€ ์•Š๋Š”๋‹ค (์˜๋„๋œ ์˜ค๋ฅ˜)\n */\nexport class CommandError extends Error {\n readonly code: string\n readonly details: Record<string, unknown>\n\n constructor(code: string, message: string, details: Record<string, unknown> = {}) {\n if (typeof code !== \"string\" || !ERROR_CODE.test(code)) {\n throw new TypeError(`CommandError code must be UPPER_SNAKE_CASE (got ${JSON.stringify(code)})`)\n }\n if (RESERVED_ERROR_CODES.includes(code)) throw new TypeError(`CommandError code \"${code}\" is reserved by mext`)\n if (typeof details !== \"object\" || details === null || Array.isArray(details)) {\n throw new TypeError(\"CommandError details must be an object\")\n }\n super(message)\n this.name = \"CommandError\"\n this.code = code\n this.details = details\n }\n\n toJSON(): { code: string; message: string } & Record<string, unknown> {\n return { ...this.details, code: this.code, message: this.message }\n }\n}\n\nexport function isCommandError(error: unknown): error is CommandError {\n return error instanceof CommandError\n}\n\n/** ์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ๊ทธ๋Œ€๋กœ ๋ณด๋‚ด๋Š” ์˜ค๋ฅ˜ (MextError ยท CommandError) */\nexport function isDeclaredError(error: unknown): error is MextError | CommandError {\n return error instanceof MextError || error instanceof CommandError\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { type Surface } from "./caller.ts";
2
+ import { type Registry } from "./registry.ts";
3
+ /** expose ๋ฅผ ์“ฐ๋Š” ๋ช…๋ น์–ด๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š”์ง€. false = ํ‘œ๋ฉด๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ฐ™์€ ๋ชฉ๋ก (๋ณด๊ธฐ = ์›๋ณธ) */
4
+ export declare function hasExposure(registry: Registry): boolean;
5
+ /**
6
+ * surface ์—์„œ ๋ณด์ด๋Š” Registry. ์ˆจ๊ธธ ๋ช…๋ น์–ด๊ฐ€ ์—†์œผ๋ฉด registry ๊ทธ๋Œ€๋กœ (๊ฐ™์€ ๊ฐ์ฒด).
7
+ * ๊ฐ™์€ ์ˆจ๊น€ ์ง‘ํ•ฉ = ๊ฐ™์€ ๋ณด๊ธฐ ๊ฐ์ฒด (๋„๊ตฌ ๋ชฉ๋ก ยท manifestHash ๋ฅผ ๋ณด๊ธฐ๋ณ„๋กœ 1ํšŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค)
8
+ */
9
+ export declare function exposedRegistry(registry: Registry, surface: Surface): Registry;
package/dist/expose.js ADDED
@@ -0,0 +1,52 @@
1
+ import { isExposedOn } from "./caller.js";
2
+ import { filterRegistry } from "./registry.js";
3
+ /**
4
+ * ํ‘œ๋ฉด๋ณ„ ๋…ธ์ถœ (defineCommand expose, spec ยง4) ์˜ Registry ๋ณด๊ธฐ.
5
+ * ์ˆจ๊ธด ๋ช…๋ น์–ด = ๊ทธ ํ‘œ๋ฉด์—์„œ ์—†๋Š” ๋ช…๋ น์–ด: ๋ณด๊ธฐ์—๋Š” ๋ช…๋ น์–ด ยท ๋ณ„์นญ ยท (๋‚จ์€ ๋ช…๋ น์–ด๊ฐ€ ์—†๋Š”) ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค.
6
+ * help ยท tools/list ยท UNKNOWN_COMMAND (suggested ยท usage) ยท invoke ๊ฐ€ ๋ชจ๋‘ ๋ณด๊ธฐ๋ฅผ ์“ฐ๋ฏ€๋กœ ์—†๋Š” ID ์™€ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š”๋‹ค.
7
+ * ํŒ์ • ์ž…๋ ฅ = ์„œ๋ฒ„๊ฐ€ ์ •ํ•œ ํ‘œ๋ฉด (surfaceOf(principal, transport)) ๋งŒ
8
+ */
9
+ const rules = new WeakMap();
10
+ const views = new WeakMap();
11
+ /** expose ๋ฅผ ์“ฐ๋Š” ๋ช…๋ น์–ด๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š”์ง€. false = ํ‘œ๋ฉด๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ฐ™์€ ๋ชฉ๋ก (๋ณด๊ธฐ = ์›๋ณธ) */
12
+ export function hasExposure(registry) {
13
+ let value = rules.get(registry);
14
+ if (value === undefined) {
15
+ value = false;
16
+ for (const entry of registry.commands.values()) {
17
+ if (entry.command.expose !== undefined) {
18
+ value = true;
19
+ break;
20
+ }
21
+ }
22
+ rules.set(registry, value);
23
+ }
24
+ return value;
25
+ }
26
+ /**
27
+ * surface ์—์„œ ๋ณด์ด๋Š” Registry. ์ˆจ๊ธธ ๋ช…๋ น์–ด๊ฐ€ ์—†์œผ๋ฉด registry ๊ทธ๋Œ€๋กœ (๊ฐ™์€ ๊ฐ์ฒด).
28
+ * ๊ฐ™์€ ์ˆจ๊น€ ์ง‘ํ•ฉ = ๊ฐ™์€ ๋ณด๊ธฐ ๊ฐ์ฒด (๋„๊ตฌ ๋ชฉ๋ก ยท manifestHash ๋ฅผ ๋ณด๊ธฐ๋ณ„๋กœ 1ํšŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค)
29
+ */
30
+ export function exposedRegistry(registry, surface) {
31
+ if (!hasExposure(registry))
32
+ return registry;
33
+ const hidden = [];
34
+ for (const entry of registry.commands.values()) {
35
+ if (!isExposedOn(entry.command.expose, surface))
36
+ hidden.push(entry.id);
37
+ }
38
+ if (hidden.length === 0)
39
+ return registry;
40
+ let cache = views.get(registry);
41
+ if (!cache)
42
+ views.set(registry, (cache = new Map()));
43
+ const key = hidden.join("\n");
44
+ let view = cache.get(key);
45
+ if (!view) {
46
+ const set = new Set(hidden);
47
+ view = filterRegistry(registry, (entry) => !set.has(entry.id));
48
+ cache.set(key, view);
49
+ }
50
+ return view;
51
+ }
52
+ //# sourceMappingURL=expose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expose.js","sourceRoot":"","sources":["../src/expose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,cAAc,EAAiB,MAAM,eAAe,CAAA;AAE7D;;;;;GAKG;AAEH,MAAM,KAAK,GAAG,IAAI,OAAO,EAAqB,CAAA;AAC9C,MAAM,KAAK,GAAG,IAAI,OAAO,EAAmC,CAAA;AAE5D,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG,KAAK,CAAA;QACb,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvC,KAAK,GAAG,IAAI,CAAA;gBACZ,MAAK;YACP,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB,EAAE,OAAgB;IAClE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC3C,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IACxC,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC/B,IAAI,CAAC,KAAK;QAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;IACpD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACzB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;QAC3B,IAAI,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import { isExposedOn, type Surface } from \"./caller.ts\"\nimport { filterRegistry, type Registry } from \"./registry.ts\"\n\n/**\n * ํ‘œ๋ฉด๋ณ„ ๋…ธ์ถœ (defineCommand expose, spec ยง4) ์˜ Registry ๋ณด๊ธฐ.\n * ์ˆจ๊ธด ๋ช…๋ น์–ด = ๊ทธ ํ‘œ๋ฉด์—์„œ ์—†๋Š” ๋ช…๋ น์–ด: ๋ณด๊ธฐ์—๋Š” ๋ช…๋ น์–ด ยท ๋ณ„์นญ ยท (๋‚จ์€ ๋ช…๋ น์–ด๊ฐ€ ์—†๋Š”) ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค.\n * help ยท tools/list ยท UNKNOWN_COMMAND (suggested ยท usage) ยท invoke ๊ฐ€ ๋ชจ๋‘ ๋ณด๊ธฐ๋ฅผ ์“ฐ๋ฏ€๋กœ ์—†๋Š” ID ์™€ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š”๋‹ค.\n * ํŒ์ • ์ž…๋ ฅ = ์„œ๋ฒ„๊ฐ€ ์ •ํ•œ ํ‘œ๋ฉด (surfaceOf(principal, transport)) ๋งŒ\n */\n\nconst rules = new WeakMap<Registry, boolean>()\nconst views = new WeakMap<Registry, Map<string, Registry>>()\n\n/** expose ๋ฅผ ์“ฐ๋Š” ๋ช…๋ น์–ด๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š”์ง€. false = ํ‘œ๋ฉด๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ฐ™์€ ๋ชฉ๋ก (๋ณด๊ธฐ = ์›๋ณธ) */\nexport function hasExposure(registry: Registry): boolean {\n let value = rules.get(registry)\n if (value === undefined) {\n value = false\n for (const entry of registry.commands.values()) {\n if (entry.command.expose !== undefined) {\n value = true\n break\n }\n }\n rules.set(registry, value)\n }\n return value\n}\n\n/**\n * surface ์—์„œ ๋ณด์ด๋Š” Registry. ์ˆจ๊ธธ ๋ช…๋ น์–ด๊ฐ€ ์—†์œผ๋ฉด registry ๊ทธ๋Œ€๋กœ (๊ฐ™์€ ๊ฐ์ฒด).\n * ๊ฐ™์€ ์ˆจ๊น€ ์ง‘ํ•ฉ = ๊ฐ™์€ ๋ณด๊ธฐ ๊ฐ์ฒด (๋„๊ตฌ ๋ชฉ๋ก ยท manifestHash ๋ฅผ ๋ณด๊ธฐ๋ณ„๋กœ 1ํšŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค)\n */\nexport function exposedRegistry(registry: Registry, surface: Surface): Registry {\n if (!hasExposure(registry)) return registry\n const hidden: string[] = []\n for (const entry of registry.commands.values()) {\n if (!isExposedOn(entry.command.expose, surface)) hidden.push(entry.id)\n }\n if (hidden.length === 0) return registry\n let cache = views.get(registry)\n if (!cache) views.set(registry, (cache = new Map()))\n const key = hidden.join(\"\\n\")\n let view = cache.get(key)\n if (!view) {\n const set = new Set(hidden)\n view = filterRegistry(registry, (entry) => !set.has(entry.id))\n cache.set(key, view)\n }\n return view\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,19 +1,26 @@
1
1
  export { VERSION } from "./version.ts";
2
2
  export { DEFAULT_TASK_TTL_MS, defineCommand, isCommand } from "./command.ts";
3
- export type { Ask, AskRequest, Command, CommandContext, CommandDefinition, ConfirmRequest, InputRequest, InputSchema, MextApp, ProgressUpdate, TaskOptions, UrlRequest, } from "./command.ts";
3
+ export type { Ask, AskRequest, Command, CommandAudit, CommandContext, CommandDefinition, ConfirmRequest, InputRequest, InputSchema, MextApp, ProgressUpdate, TaskOptions, UrlRequest, } from "./command.ts";
4
4
  export { collectResources, collectResourceSet, createLazyResourceSet, createResourceSet, defineResource, describeResource, isResource, loadResourceSet, matchResource, parseUriTemplate, resourceEntries, withResources, } from "./resource.ts";
5
5
  export type { LazyResourceInput, ManifestResource, RegisteredResource, Resource, ResourceCompleteContext, ResourceCompleter, ResourceContext, ResourceDefinition, ResourceInput, ResourceListItem, ResourceSet, ResourceVariables, UriTemplatePattern, } from "./resource.ts";
6
6
  export { collectPrompts, collectPromptSet, createLazyPromptSet, createPromptSet, definePrompt, describePrompt, isPrompt, loadPromptSet, promptArguments, withPrompts, } from "./prompt.ts";
7
7
  export type { LazyPromptInput, ManifestPrompt, Prompt, PromptArgs, PromptArgument, PromptCompleteContext, PromptCompleter, PromptContext, PromptDefinition, PromptInput, PromptMessage, PromptResult, PromptSet, RegisteredPrompt, } from "./prompt.ts";
8
8
  export { ANONYMOUS, hasScope, localPrincipal } from "./principal.ts";
9
- export type { Principal } from "./principal.ts";
10
- export { CommandError, inputDeclined, isCommandError, isMextError, MextBuildError, MextError, RESERVED_ERROR_CODES, unauthenticated, } from "./errors.ts";
9
+ export type { Actor, ActorKind, Principal } from "./principal.ts";
10
+ export { ANY_SURFACE, callerOf, defaultSurface, isExposedOn, surfaceOf } from "./caller.ts";
11
+ export type { BuiltinSurface, Caller, Exposure, ReportedClient, Surface } from "./caller.ts";
12
+ export { exposedRegistry, hasExposure } from "./expose.ts";
13
+ export { approvalModeOf, isApprovalMark } from "./approval.ts";
14
+ export type { ApprovalConfig, ApprovalMode, ApprovalSignal } from "./approval.ts";
15
+ export { auditHidden, startAudit } from "./audit.ts";
16
+ export type { AuditConfig, AuditContext, AuditEvent, AuditOutcome, AuditTarget, AuditTrail } from "./audit.ts";
17
+ export { CommandError, approvalRequired, inputDeclined, isCommandError, isMextError, MextBuildError, MextError, RESERVED_ERROR_CODES, unauthenticated, } from "./errors.ts";
11
18
  export type { ArgumentIssue, BuildIssue, BuildIssueCode, MextErrorCode, MextErrorDetails } from "./errors.ts";
12
19
  export { authorize, confirmationMessage, createContext, findCommand, invalidArgument, invoke, OutputValidationError, parseInput } from "./invoke.ts";
13
20
  export type { AskHandler, AskHandlerRequest, DetachedExecution, InvokeOptions, InvokeResult } from "./invoke.ts";
14
21
  export { findInstrumentation, INSTRUMENTATION_FILE, loadInstrumentation, loadProjectInstrumentation, } from "./instrumentation.ts";
15
- export type { CommandErrorInfo, Instrumentation, InstrumentationModule, LoadInstrumentationOptions, OtelApi, Transport, } from "./instrumentation.ts";
16
- export { collectRegistry, createLazyRegistry, createRegistry, loadCommand, resolveCommand } from "./registry.ts";
22
+ export type { CommandErrorInfo, Instrumentation, InstrumentationModule, LoadInstrumentationOptions, OtelApi, TraceIds, Transport, } from "./instrumentation.ts";
23
+ export { collectRegistry, createLazyRegistry, createRegistry, filterRegistry, loadCommand, resolveCommand } from "./registry.ts";
17
24
  export type { JsonSchema, LazyCommandInput, NamespaceInfo, RegisteredCommand, Registry, RegistryCommandInput, RegistryInput, RegistryNamespaceInput, } from "./registry.ts";
18
25
  export { collectCommands, loadRegistry, scanCommands, walkCommands } from "./scan.ts";
19
26
  export type { ScannedFile, ScanResult } from "./scan.ts";
@@ -26,6 +33,8 @@ export { BUILD_DIR, BUILD_MANIFEST_FILE, buildProject, HANDLER_JS, RolldownUnava
26
33
  export type { BuildOptions, BuildResult, BuildWarning, RolldownModule, RolldownOutputItem } from "./build.ts";
27
34
  export { formatBuildSummary, runBuild } from "./cli/build.ts";
28
35
  export { mextVersion } from "./version.ts";
36
+ export { renderTypes, resolveTypesPath, TYPES_FILE, writeTypes } from "./typegen.ts";
37
+ export type { WriteTypesResult } from "./typegen.ts";
29
38
  export * from "./mcp/index.ts";
30
39
  export { CLI_BUILTIN_COMMANDS, CONFIG_FILE, createApp, defineConfig, loadConfig, resolveCommandsDir, resolveLocalPrincipal } from "./config.ts";
31
40
  export { resolveResourcesDir } from "./config.ts";
@@ -33,7 +42,7 @@ export { resolvePromptsDir } from "./config.ts";
33
42
  export { resolveRoutesDir } from "./config.ts";
34
43
  export { memoryState } from "./state.ts";
35
44
  export type { MemoryStateOptions, MextBus, MextState, MextStore } from "./state.ts";
36
- export type { CliConfig, McpCapabilities, McpConfig, McpConnectHandler, McpConnection, MextConfig } from "./config.ts";
45
+ export type { CliConfig, LocalPrincipalRequest, McpCapabilities, McpConfig, McpConnectHandler, McpConnection, MextConfig } from "./config.ts";
37
46
  export { buildCustomerCli, CLI_BIN_FILE, CLI_DIR, customerCliIssues } from "./build-cli.ts";
38
47
  export type { BuildCustomerCliOptions, CustomerCliBuild } from "./build-cli.ts";
39
48
  export { runCustomerCli } from "./client/main.ts";
package/dist/index.js CHANGED
@@ -3,16 +3,21 @@ export { DEFAULT_TASK_TTL_MS, defineCommand, isCommand } from "./command.js";
3
3
  export { collectResources, collectResourceSet, createLazyResourceSet, createResourceSet, defineResource, describeResource, isResource, loadResourceSet, matchResource, parseUriTemplate, resourceEntries, withResources, } from "./resource.js";
4
4
  export { collectPrompts, collectPromptSet, createLazyPromptSet, createPromptSet, definePrompt, describePrompt, isPrompt, loadPromptSet, promptArguments, withPrompts, } from "./prompt.js";
5
5
  export { ANONYMOUS, hasScope, localPrincipal } from "./principal.js";
6
- export { CommandError, inputDeclined, isCommandError, isMextError, MextBuildError, MextError, RESERVED_ERROR_CODES, unauthenticated, } from "./errors.js";
6
+ export { ANY_SURFACE, callerOf, defaultSurface, isExposedOn, surfaceOf } from "./caller.js";
7
+ export { exposedRegistry, hasExposure } from "./expose.js";
8
+ export { approvalModeOf, isApprovalMark } from "./approval.js";
9
+ export { auditHidden, startAudit } from "./audit.js";
10
+ export { CommandError, approvalRequired, inputDeclined, isCommandError, isMextError, MextBuildError, MextError, RESERVED_ERROR_CODES, unauthenticated, } from "./errors.js";
7
11
  export { authorize, confirmationMessage, createContext, findCommand, invalidArgument, invoke, OutputValidationError, parseInput } from "./invoke.js";
8
12
  export { findInstrumentation, INSTRUMENTATION_FILE, loadInstrumentation, loadProjectInstrumentation, } from "./instrumentation.js";
9
- export { collectRegistry, createLazyRegistry, createRegistry, loadCommand, resolveCommand } from "./registry.js";
13
+ export { collectRegistry, createLazyRegistry, createRegistry, filterRegistry, loadCommand, resolveCommand } from "./registry.js";
10
14
  export { collectCommands, loadRegistry, scanCommands, walkCommands } from "./scan.js";
11
15
  export { buildManifest, describeCommand, generateManifest, MANIFEST_SCHEMA_VERSION, manifestHash } from "./manifest.js";
12
16
  export { collectRoutes, loadRoutes, ROUTE_METHODS, walkRoutes } from "./route.js";
13
17
  export { BUILD_DIR, BUILD_MANIFEST_FILE, buildProject, HANDLER_JS, RolldownUnavailableError, SERVER_JS, START_ENTRY } from "./build.js";
14
18
  export { formatBuildSummary, runBuild } from "./cli/build.js";
15
19
  export { mextVersion } from "./version.js";
20
+ export { renderTypes, resolveTypesPath, TYPES_FILE, writeTypes } from "./typegen.js";
16
21
  export * from "./mcp/index.js";
17
22
  export { CLI_BUILTIN_COMMANDS, CONFIG_FILE, createApp, defineConfig, loadConfig, resolveCommandsDir, resolveLocalPrincipal } from "./config.js";
18
23
  export { resolveResourcesDir } from "./config.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { VERSION } from \"./version.ts\"\n\nexport { DEFAULT_TASK_TTL_MS, defineCommand, isCommand } from \"./command.ts\"\nexport type {\n Ask,\n AskRequest,\n Command,\n CommandContext,\n CommandDefinition,\n ConfirmRequest,\n InputRequest,\n InputSchema,\n MextApp,\n ProgressUpdate,\n TaskOptions,\n UrlRequest,\n} from \"./command.ts\"\nexport {\n collectResources,\n collectResourceSet,\n createLazyResourceSet,\n createResourceSet,\n defineResource,\n describeResource,\n isResource,\n loadResourceSet,\n matchResource,\n parseUriTemplate,\n resourceEntries,\n withResources,\n} from \"./resource.ts\"\nexport type {\n LazyResourceInput,\n ManifestResource,\n RegisteredResource,\n Resource,\n ResourceCompleteContext,\n ResourceCompleter,\n ResourceContext,\n ResourceDefinition,\n ResourceInput,\n ResourceListItem,\n ResourceSet,\n ResourceVariables,\n UriTemplatePattern,\n} from \"./resource.ts\"\nexport {\n collectPrompts,\n collectPromptSet,\n createLazyPromptSet,\n createPromptSet,\n definePrompt,\n describePrompt,\n isPrompt,\n loadPromptSet,\n promptArguments,\n withPrompts,\n} from \"./prompt.ts\"\nexport type {\n LazyPromptInput,\n ManifestPrompt,\n Prompt,\n PromptArgs,\n PromptArgument,\n PromptCompleteContext,\n PromptCompleter,\n PromptContext,\n PromptDefinition,\n PromptInput,\n PromptMessage,\n PromptResult,\n PromptSet,\n RegisteredPrompt,\n} from \"./prompt.ts\"\nexport { ANONYMOUS, hasScope, localPrincipal } from \"./principal.ts\"\nexport type { Principal } from \"./principal.ts\"\nexport {\n CommandError,\n inputDeclined,\n isCommandError,\n isMextError,\n MextBuildError,\n MextError,\n RESERVED_ERROR_CODES,\n unauthenticated,\n} from \"./errors.ts\"\nexport type { ArgumentIssue, BuildIssue, BuildIssueCode, MextErrorCode, MextErrorDetails } from \"./errors.ts\"\nexport { authorize, confirmationMessage, createContext, findCommand, invalidArgument, invoke, OutputValidationError, parseInput } from \"./invoke.ts\"\nexport type { AskHandler, AskHandlerRequest, DetachedExecution, InvokeOptions, InvokeResult } from \"./invoke.ts\"\nexport {\n findInstrumentation,\n INSTRUMENTATION_FILE,\n loadInstrumentation,\n loadProjectInstrumentation,\n} from \"./instrumentation.ts\"\nexport type {\n CommandErrorInfo,\n Instrumentation,\n InstrumentationModule,\n LoadInstrumentationOptions,\n OtelApi,\n Transport,\n} from \"./instrumentation.ts\"\nexport { collectRegistry, createLazyRegistry, createRegistry, loadCommand, resolveCommand } from \"./registry.ts\"\nexport type {\n JsonSchema,\n LazyCommandInput,\n NamespaceInfo,\n RegisteredCommand,\n Registry,\n RegistryCommandInput,\n RegistryInput,\n RegistryNamespaceInput,\n} from \"./registry.ts\"\nexport { collectCommands, loadRegistry, scanCommands, walkCommands } from \"./scan.ts\"\nexport type { ScannedFile, ScanResult } from \"./scan.ts\"\nexport { buildManifest, describeCommand, generateManifest, MANIFEST_SCHEMA_VERSION, manifestHash } from \"./manifest.ts\"\nexport type { BuildManifest, BuildManifestCommand, BuildManifestResource, BuildManifestRoute, Manifest, ManifestCommand, ManifestNamespace } from \"./manifest.ts\"\nexport type { BuildManifestPrompt } from \"./manifest.ts\"\nexport { collectRoutes, loadRoutes, ROUTE_METHODS, walkRoutes } from \"./route.ts\"\nexport type { RouteContext, RouteEntry, RouteHandler, RouteMethod, RouteModule, ScannedRoute } from \"./route.ts\"\nexport { BUILD_DIR, BUILD_MANIFEST_FILE, buildProject, HANDLER_JS, RolldownUnavailableError, SERVER_JS, START_ENTRY } from \"./build.ts\"\nexport type { BuildOptions, BuildResult, BuildWarning, RolldownModule, RolldownOutputItem } from \"./build.ts\"\nexport { formatBuildSummary, runBuild } from \"./cli/build.ts\"\nexport { mextVersion } from \"./version.ts\"\nexport * from \"./mcp/index.ts\"\nexport { CLI_BUILTIN_COMMANDS, CONFIG_FILE, createApp, defineConfig, loadConfig, resolveCommandsDir, resolveLocalPrincipal } from \"./config.ts\"\nexport { resolveResourcesDir } from \"./config.ts\"\nexport { resolvePromptsDir } from \"./config.ts\"\nexport { resolveRoutesDir } from \"./config.ts\"\nexport { memoryState } from \"./state.ts\"\nexport type { MemoryStateOptions, MextBus, MextState, MextStore } from \"./state.ts\"\nexport type { CliConfig, McpCapabilities, McpConfig, McpConnectHandler, McpConnection, MextConfig } from \"./config.ts\"\nexport { buildCustomerCli, CLI_BIN_FILE, CLI_DIR, customerCliIssues } from \"./build-cli.ts\"\nexport type { BuildCustomerCliOptions, CustomerCliBuild } from \"./build-cli.ts\"\nexport { runCustomerCli } from \"./client/main.ts\"\nexport type { CustomerCliConfig } from \"./client/main.ts\"\nexport { clientManifest, manifestHelp } from \"./client/manifest.ts\"\nexport type { ClientManifest, ClientManifestCommand } from \"./client/manifest.ts\"\nexport { runRemote } from \"./client/runner.ts\"\nexport type { HelpSource, RemoteRunOptions } from \"./client/runner.ts\"\nexport { runCli, SUBCOMMANDS } from \"./cli/main.ts\"\nexport type { CliSubcommand } from \"./cli/main.ts\"\nexport type { CliIo, CliWriter } from \"./cli/io.ts\"\nexport { analyzeInput, assertCliConvertible, cliBuildIssues, cliSpec, parseArgs, RESERVED_FLAGS, toKebab } from \"./cli/args.ts\"\nexport type { CliField, CliSpec, FieldKind, ParseArgsOptions, ParsedArgs, Primitive, ScalarKind } from \"./cli/args.ts\"\nexport {\n cliPath,\n formatInvocation,\n renderCommandHelp,\n renderHelp,\n renderNamespaceHelp,\n resolveHelpTarget,\n} from \"./cli/help.ts\"\nexport type { HelpOptions, HelpTarget } from \"./cli/help.ts\"\nexport { errorJson, exitCodeOf, formatError, formatJson, formatResult } from \"./cli/output.ts\"\nexport type { CliErrorFormatter, CliErrorInfo, CliErrorOutput } from \"./cli/output.ts\"\nexport { loginCommand, resolveServerUrl } from \"./cli/login.ts\"\nexport type { AuthCommandOptions } from \"./cli/login.ts\"\nexport { logoutCommand } from \"./cli/logout.ts\"\nexport * from \"./remote/index.ts\"\nexport { cliSpecFromJsonSchema, defineCliSpec } from \"./cli/args.ts\"\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { VERSION } from \"./version.ts\"\n\nexport { DEFAULT_TASK_TTL_MS, defineCommand, isCommand } from \"./command.ts\"\nexport type {\n Ask,\n AskRequest,\n Command,\n CommandAudit,\n CommandContext,\n CommandDefinition,\n ConfirmRequest,\n InputRequest,\n InputSchema,\n MextApp,\n ProgressUpdate,\n TaskOptions,\n UrlRequest,\n} from \"./command.ts\"\nexport {\n collectResources,\n collectResourceSet,\n createLazyResourceSet,\n createResourceSet,\n defineResource,\n describeResource,\n isResource,\n loadResourceSet,\n matchResource,\n parseUriTemplate,\n resourceEntries,\n withResources,\n} from \"./resource.ts\"\nexport type {\n LazyResourceInput,\n ManifestResource,\n RegisteredResource,\n Resource,\n ResourceCompleteContext,\n ResourceCompleter,\n ResourceContext,\n ResourceDefinition,\n ResourceInput,\n ResourceListItem,\n ResourceSet,\n ResourceVariables,\n UriTemplatePattern,\n} from \"./resource.ts\"\nexport {\n collectPrompts,\n collectPromptSet,\n createLazyPromptSet,\n createPromptSet,\n definePrompt,\n describePrompt,\n isPrompt,\n loadPromptSet,\n promptArguments,\n withPrompts,\n} from \"./prompt.ts\"\nexport type {\n LazyPromptInput,\n ManifestPrompt,\n Prompt,\n PromptArgs,\n PromptArgument,\n PromptCompleteContext,\n PromptCompleter,\n PromptContext,\n PromptDefinition,\n PromptInput,\n PromptMessage,\n PromptResult,\n PromptSet,\n RegisteredPrompt,\n} from \"./prompt.ts\"\nexport { ANONYMOUS, hasScope, localPrincipal } from \"./principal.ts\"\nexport type { Actor, ActorKind, Principal } from \"./principal.ts\"\nexport { ANY_SURFACE, callerOf, defaultSurface, isExposedOn, surfaceOf } from \"./caller.ts\"\nexport type { BuiltinSurface, Caller, Exposure, ReportedClient, Surface } from \"./caller.ts\"\nexport { exposedRegistry, hasExposure } from \"./expose.ts\"\nexport { approvalModeOf, isApprovalMark } from \"./approval.ts\"\nexport type { ApprovalConfig, ApprovalMode, ApprovalSignal } from \"./approval.ts\"\nexport { auditHidden, startAudit } from \"./audit.ts\"\nexport type { AuditConfig, AuditContext, AuditEvent, AuditOutcome, AuditTarget, AuditTrail } from \"./audit.ts\"\nexport {\n CommandError,\n approvalRequired,\n inputDeclined,\n isCommandError,\n isMextError,\n MextBuildError,\n MextError,\n RESERVED_ERROR_CODES,\n unauthenticated,\n} from \"./errors.ts\"\nexport type { ArgumentIssue, BuildIssue, BuildIssueCode, MextErrorCode, MextErrorDetails } from \"./errors.ts\"\nexport { authorize, confirmationMessage, createContext, findCommand, invalidArgument, invoke, OutputValidationError, parseInput } from \"./invoke.ts\"\nexport type { AskHandler, AskHandlerRequest, DetachedExecution, InvokeOptions, InvokeResult } from \"./invoke.ts\"\nexport {\n findInstrumentation,\n INSTRUMENTATION_FILE,\n loadInstrumentation,\n loadProjectInstrumentation,\n} from \"./instrumentation.ts\"\nexport type {\n CommandErrorInfo,\n Instrumentation,\n InstrumentationModule,\n LoadInstrumentationOptions,\n OtelApi,\n TraceIds,\n Transport,\n} from \"./instrumentation.ts\"\nexport { collectRegistry, createLazyRegistry, createRegistry, filterRegistry, loadCommand, resolveCommand } from \"./registry.ts\"\nexport type {\n JsonSchema,\n LazyCommandInput,\n NamespaceInfo,\n RegisteredCommand,\n Registry,\n RegistryCommandInput,\n RegistryInput,\n RegistryNamespaceInput,\n} from \"./registry.ts\"\nexport { collectCommands, loadRegistry, scanCommands, walkCommands } from \"./scan.ts\"\nexport type { ScannedFile, ScanResult } from \"./scan.ts\"\nexport { buildManifest, describeCommand, generateManifest, MANIFEST_SCHEMA_VERSION, manifestHash } from \"./manifest.ts\"\nexport type { BuildManifest, BuildManifestCommand, BuildManifestResource, BuildManifestRoute, Manifest, ManifestCommand, ManifestNamespace } from \"./manifest.ts\"\nexport type { BuildManifestPrompt } from \"./manifest.ts\"\nexport { collectRoutes, loadRoutes, ROUTE_METHODS, walkRoutes } from \"./route.ts\"\nexport type { RouteContext, RouteEntry, RouteHandler, RouteMethod, RouteModule, ScannedRoute } from \"./route.ts\"\nexport { BUILD_DIR, BUILD_MANIFEST_FILE, buildProject, HANDLER_JS, RolldownUnavailableError, SERVER_JS, START_ENTRY } from \"./build.ts\"\nexport type { BuildOptions, BuildResult, BuildWarning, RolldownModule, RolldownOutputItem } from \"./build.ts\"\nexport { formatBuildSummary, runBuild } from \"./cli/build.ts\"\nexport { mextVersion } from \"./version.ts\"\nexport { renderTypes, resolveTypesPath, TYPES_FILE, writeTypes } from \"./typegen.ts\"\nexport type { WriteTypesResult } from \"./typegen.ts\"\nexport * from \"./mcp/index.ts\"\nexport { CLI_BUILTIN_COMMANDS, CONFIG_FILE, createApp, defineConfig, loadConfig, resolveCommandsDir, resolveLocalPrincipal } from \"./config.ts\"\nexport { resolveResourcesDir } from \"./config.ts\"\nexport { resolvePromptsDir } from \"./config.ts\"\nexport { resolveRoutesDir } from \"./config.ts\"\nexport { memoryState } from \"./state.ts\"\nexport type { MemoryStateOptions, MextBus, MextState, MextStore } from \"./state.ts\"\nexport type { CliConfig, LocalPrincipalRequest, McpCapabilities, McpConfig, McpConnectHandler, McpConnection, MextConfig } from \"./config.ts\"\nexport { buildCustomerCli, CLI_BIN_FILE, CLI_DIR, customerCliIssues } from \"./build-cli.ts\"\nexport type { BuildCustomerCliOptions, CustomerCliBuild } from \"./build-cli.ts\"\nexport { runCustomerCli } from \"./client/main.ts\"\nexport type { CustomerCliConfig } from \"./client/main.ts\"\nexport { clientManifest, manifestHelp } from \"./client/manifest.ts\"\nexport type { ClientManifest, ClientManifestCommand } from \"./client/manifest.ts\"\nexport { runRemote } from \"./client/runner.ts\"\nexport type { HelpSource, RemoteRunOptions } from \"./client/runner.ts\"\nexport { runCli, SUBCOMMANDS } from \"./cli/main.ts\"\nexport type { CliSubcommand } from \"./cli/main.ts\"\nexport type { CliIo, CliWriter } from \"./cli/io.ts\"\nexport { analyzeInput, assertCliConvertible, cliBuildIssues, cliSpec, parseArgs, RESERVED_FLAGS, toKebab } from \"./cli/args.ts\"\nexport type { CliField, CliSpec, FieldKind, ParseArgsOptions, ParsedArgs, Primitive, ScalarKind } from \"./cli/args.ts\"\nexport {\n cliPath,\n formatInvocation,\n renderCommandHelp,\n renderHelp,\n renderNamespaceHelp,\n resolveHelpTarget,\n} from \"./cli/help.ts\"\nexport type { HelpOptions, HelpTarget } from \"./cli/help.ts\"\nexport { errorJson, exitCodeOf, formatError, formatJson, formatResult } from \"./cli/output.ts\"\nexport type { CliErrorFormatter, CliErrorInfo, CliErrorOutput } from \"./cli/output.ts\"\nexport { loginCommand, resolveServerUrl } from \"./cli/login.ts\"\nexport type { AuthCommandOptions } from \"./cli/login.ts\"\nexport { logoutCommand } from \"./cli/logout.ts\"\nexport * from \"./remote/index.ts\"\nexport { cliSpecFromJsonSchema, defineCliSpec } from \"./cli/args.ts\"\n"]}