@kernlang/mcp 3.1.6 → 3.1.8

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.
@@ -0,0 +1,453 @@
1
+ import { accountNode, buildDiagnostics, countTokens, getChildren, getFirstChild, getProps, serializeIR, } from '@kernlang/core';
2
+ // ── Helpers ─────────────────────────────────────────────────────────────
3
+ function pyStr(value) {
4
+ return JSON.stringify(value);
5
+ }
6
+ function str(value) {
7
+ if (value === undefined || value === null)
8
+ return undefined;
9
+ return String(value);
10
+ }
11
+ function findMcpNode(root) {
12
+ if (root.type === 'mcp')
13
+ return root;
14
+ for (const child of root.children || []) {
15
+ const found = findMcpNode(child);
16
+ if (found)
17
+ return found;
18
+ }
19
+ return undefined;
20
+ }
21
+ function extractDescription(node) {
22
+ const props = getProps(node);
23
+ const descNode = getFirstChild(node, 'description');
24
+ const raw = str(props.description) ||
25
+ (descNode ? str(getProps(descNode).text) || str(getProps(descNode).value) : undefined) ||
26
+ '';
27
+ return raw.replace(/[\u0000-\u001F\u007F-\u009F]/g, '').trim();
28
+ }
29
+ function ind(lines, spaces) {
30
+ const prefix = ' '.repeat(spaces);
31
+ return lines.map((line) => (line.length > 0 ? `${prefix}${line}` : ''));
32
+ }
33
+ function splitCsv(value) {
34
+ return (value || '')
35
+ .split(',')
36
+ .map((p) => p.trim())
37
+ .filter(Boolean);
38
+ }
39
+ /** Find a handler node appropriate for Python output.
40
+ * - handler with lang=python → use it
41
+ * - handler with no lang → TypeScript-only, skip for Python
42
+ * - handler with lang=<other> → skip
43
+ * Returns the Python handler code, or '' if none found. */
44
+ function findPythonHandler(node) {
45
+ const handlers = getChildren(node, 'handler');
46
+ // First look for an explicit lang=python handler
47
+ for (const h of handlers) {
48
+ const lang = str(getProps(h).lang);
49
+ if (lang === 'python' || lang === 'py') {
50
+ return str(getProps(h).code) || '';
51
+ }
52
+ }
53
+ // No Python handler found — all handlers are either TS-only or absent
54
+ return '';
55
+ }
56
+ // ── Python type mapping ─────────────────────────────────────────────────
57
+ function pyType(kernType) {
58
+ switch (kernType) {
59
+ case 'number':
60
+ case 'float':
61
+ return 'float';
62
+ case 'int':
63
+ case 'integer':
64
+ return 'int';
65
+ case 'boolean':
66
+ case 'bool':
67
+ return 'bool';
68
+ case 'string':
69
+ return 'str';
70
+ case 'string[]':
71
+ return 'list[str]';
72
+ case 'number[]':
73
+ return 'list[float]';
74
+ case 'object':
75
+ case 'json':
76
+ return 'dict';
77
+ default:
78
+ return 'str';
79
+ }
80
+ }
81
+ // ── Guard code generation ───────────────────────────────────────────────
82
+ function emitPyGuards(node) {
83
+ const guards = getChildren(node, 'guard');
84
+ const toolName = str(getProps(node).name) || 'unknown';
85
+ const lines = [];
86
+ for (const g of guards) {
87
+ const props = getProps(g);
88
+ const kind = str(props.name) || str(props.kind) || str(props.type);
89
+ const param = str(props.param) || str(props.target) || str(props.field);
90
+ if (kind === 'sanitize' && param) {
91
+ const pattern = str(props.pattern) || '[^\\w./ -]';
92
+ // Validate regex at transpile time to prevent ReDoS
93
+ try {
94
+ new RegExp(pattern);
95
+ }
96
+ catch {
97
+ continue;
98
+ }
99
+ lines.push(` try:`);
100
+ lines.push(` ${param} = re.sub(r${pyStr(pattern)}, "", str(${param}))`);
101
+ lines.push(` except re.error:`);
102
+ lines.push(` pass`);
103
+ }
104
+ if (kind === 'pathContainment' && param) {
105
+ const allowRaw = splitCsv(str(props.allowlist) || str(props.allow));
106
+ const allowPy = allowRaw.length > 0 ? `[${allowRaw.map((a) => pyStr(a)).join(', ')}]` : '[os.getcwd()]';
107
+ lines.push(` _resolved = os.path.realpath(str(${param}))`);
108
+ lines.push(` if not any(_resolved == os.path.realpath(d) or _resolved.startswith(os.path.realpath(d) + os.sep) for d in ${allowPy}):`);
109
+ lines.push(` raise ValueError(f"Path escapes allowed directories: {${param}}")`);
110
+ lines.push(` ${param} = _resolved`);
111
+ }
112
+ if (kind === 'validate' && param) {
113
+ if (props.min !== undefined && !Number.isNaN(Number(props.min)))
114
+ lines.push(` if ${param} < ${props.min}: raise ValueError("${param} below minimum ${props.min}")`);
115
+ if (props.max !== undefined && !Number.isNaN(Number(props.max)))
116
+ lines.push(` if ${param} > ${props.max}: raise ValueError("${param} above maximum ${props.max}")`);
117
+ }
118
+ if (kind === 'auth') {
119
+ const envVar = str(props.envVar) || str(props.env) || 'MCP_AUTH_TOKEN';
120
+ lines.push(` if not os.environ.get(${pyStr(envVar)}):`);
121
+ lines.push(` raise PermissionError(f"Authentication required: set ${envVar}")`);
122
+ }
123
+ if (kind === 'rateLimit') {
124
+ const windowMs = parseInt(str(props.window) || '60000', 10) || 60000;
125
+ const maxReqs = parseInt(str(props.requests) || str(props.maxRequests) || '100', 10) || 100;
126
+ lines.push(` _check_rate_limit(${pyStr(toolName)}, ${windowMs}, ${maxReqs})`);
127
+ }
128
+ if (kind === 'sizeLimit' && param) {
129
+ const maxBytes = str(props.maxBytes) || str(props.max) || '1048576';
130
+ lines.push(` if isinstance(${param}, str) and len(${param}.encode()) > ${maxBytes}:`);
131
+ lines.push(` raise ValueError(f"${param} exceeds size limit of ${maxBytes} bytes")`);
132
+ }
133
+ }
134
+ return lines;
135
+ }
136
+ // ── Main Python transpiler ──────────────────────────────────────────────
137
+ function buildPythonCode(root, _config) {
138
+ const accounted = new Map();
139
+ accountNode(accounted, root, 'consumed', 'parse root');
140
+ const mcpNode = findMcpNode(root);
141
+ const container = mcpNode || root;
142
+ if (mcpNode)
143
+ accountNode(accounted, mcpNode, 'expressed', 'mcp server root', true);
144
+ const props = mcpNode ? getProps(mcpNode) : {};
145
+ const serverName = str(props.name) || 'KernMCPServer';
146
+ const toolNodes = getChildren(container, 'tool');
147
+ const resourceNodes = getChildren(container, 'resource');
148
+ const promptNodes = getChildren(container, 'prompt');
149
+ for (const n of [...toolNodes, ...resourceNodes, ...promptNodes]) {
150
+ accountNode(accounted, n, 'expressed', `mcp ${n.type}`, true);
151
+ }
152
+ // Check what imports we need — match prop priority: name > kind > type (same as emitPyGuards)
153
+ const allGuards = [...toolNodes, ...resourceNodes, ...promptNodes].flatMap((n) => getChildren(n, 'guard'));
154
+ const guardKind = (g) => str(getProps(g).name) || str(getProps(g).kind) || str(getProps(g).type);
155
+ // Pre-scan handlers for effect-based auto-injection (determines imports + sanitizeOutput)
156
+ const PRE_FILE_IO = /\b(open|read|write|readlines|os\.path|os\.listdir|os\.remove|os\.unlink|os\.rename|os\.mkdir|shutil\.|pathlib\.|readFile|readFileSync|writeFile|readdir)\b/;
157
+ const PRE_SHELL = /\b(subprocess|os\.system|os\.popen|execSync|execFile|spawn|spawnSync)\b/;
158
+ const PRE_NETWORK = /\b(requests\.|httpx\.|aiohttp\.|urllib\.|fetch|http\.request)\b/;
159
+ const willAutoInjectOs = toolNodes.some((n) => {
160
+ const hCode = findPythonHandler(n);
161
+ const existingKinds = new Set(getChildren(n, 'guard').map((g) => guardKind(g)));
162
+ return hCode && PRE_FILE_IO.test(hCode) && !existingKinds.has('pathContainment');
163
+ });
164
+ const willAutoInjectRe = toolNodes.some((n) => {
165
+ const hCode = findPythonHandler(n);
166
+ return hCode && PRE_SHELL.test(hCode);
167
+ });
168
+ const needsRe = willAutoInjectRe || allGuards.some((g) => guardKind(g) === 'sanitize');
169
+ const needsOs = willAutoInjectOs ||
170
+ allGuards.some((g) => {
171
+ const k = guardKind(g);
172
+ return k === 'pathContainment' || k === 'auth';
173
+ });
174
+ const needsRateLimit = allGuards.some((g) => guardKind(g) === 'rateLimit');
175
+ let needsSanitizeOutput = allGuards.some((g) => guardKind(g) === 'sanitizeOutput') ||
176
+ toolNodes.some((n) => {
177
+ const hCode = findPythonHandler(n);
178
+ return hCode && PRE_NETWORK.test(hCode);
179
+ });
180
+ const transport = str(props.transport) || 'stdio';
181
+ const sourceMap = [];
182
+ const lines = [];
183
+ // ── Imports
184
+ lines.push(`"""${serverName} — Generated by KERN MCP transpiler."""`);
185
+ lines.push('');
186
+ lines.push('import logging');
187
+ if (needsOs)
188
+ lines.push('import os');
189
+ if (needsRe || needsSanitizeOutput)
190
+ lines.push('import re');
191
+ if (needsRateLimit)
192
+ lines.push('import time');
193
+ lines.push('');
194
+ lines.push('from mcp.server.fastmcp import FastMCP');
195
+ lines.push('from mcp.shared.exceptions import McpError');
196
+ lines.push('from mcp.types import INTERNAL_ERROR');
197
+ lines.push('');
198
+ // ── Server
199
+ lines.push(`mcp = FastMCP(${pyStr(serverName)})`);
200
+ lines.push('');
201
+ lines.push(`logger = logging.getLogger(${pyStr(serverName)})`);
202
+ lines.push('');
203
+ lines.push('class _JsonFormatter(logging.Formatter):');
204
+ lines.push(' def format(self, record: logging.LogRecord) -> str:');
205
+ lines.push(' import json as _json');
206
+ lines.push(' entry = {"level": record.levelname.lower(), "event": record.getMessage(), "ts": self.formatTime(record)}');
207
+ lines.push(' if hasattr(record, "tool"): entry["tool"] = record.tool');
208
+ lines.push(' if hasattr(record, "error"): entry["error"] = record.error');
209
+ lines.push(' if hasattr(record, "resource"): entry["resource"] = record.resource');
210
+ lines.push(' if hasattr(record, "prompt"): entry["prompt"] = record.prompt');
211
+ lines.push(' return _json.dumps(entry)');
212
+ lines.push('');
213
+ lines.push('_handler = logging.StreamHandler()');
214
+ lines.push('_handler.setFormatter(_JsonFormatter())');
215
+ lines.push('logger.addHandler(_handler)');
216
+ lines.push('logger.setLevel(logging.INFO)');
217
+ lines.push('');
218
+ if (needsRateLimit) {
219
+ lines.push('_rate_limit_store: dict[str, dict] = {}');
220
+ lines.push('');
221
+ lines.push('');
222
+ lines.push('def _check_rate_limit(tool_name: str, window_ms: int, max_requests: int) -> None:');
223
+ lines.push(' now = time.time() * 1000');
224
+ lines.push(' entry = _rate_limit_store.get(tool_name)');
225
+ lines.push(' if entry is None or now > entry["reset_at"]:');
226
+ lines.push(' _rate_limit_store[tool_name] = {"count": 1, "reset_at": now + window_ms}');
227
+ lines.push(' return');
228
+ lines.push(' entry["count"] += 1');
229
+ lines.push(' if entry["count"] > max_requests:');
230
+ lines.push(' raise McpError(INTERNAL_ERROR, f"Rate limit exceeded for {tool_name}: {max_requests} requests per {window_ms}ms")');
231
+ lines.push('');
232
+ lines.push('');
233
+ }
234
+ if (needsSanitizeOutput) {
235
+ lines.push('_INJECTION_PATTERNS = [');
236
+ lines.push(' re.compile(r"\\b(?:ignore|disregard|forget)\\s+(?:all\\s+)?(?:previous|above|prior)\\s+instructions?", re.IGNORECASE),');
237
+ lines.push(' re.compile(r"\\b(?:you\\s+are|act\\s+as|pretend\\s+to\\s+be|roleplay\\s+as)\\b", re.IGNORECASE),');
238
+ lines.push(' re.compile(r"\\b(?:system\\s*prompt|</?(?:system|user|assistant)>)", re.IGNORECASE),');
239
+ lines.push(' re.compile(r"\\[(?:INST|SYS|/?SYSTEM)\\]", re.IGNORECASE),');
240
+ lines.push(']');
241
+ lines.push('');
242
+ lines.push('');
243
+ lines.push('def _sanitize_output(result: str) -> str:');
244
+ lines.push(' """Strip prompt injection markers from tool output."""');
245
+ lines.push(' for pattern in _INJECTION_PATTERNS:');
246
+ lines.push(' result = pattern.sub("[FILTERED]", result)');
247
+ lines.push(' return result');
248
+ lines.push('');
249
+ lines.push('');
250
+ }
251
+ // ── Tools
252
+ for (const toolNode of toolNodes) {
253
+ sourceMap.push({
254
+ irLine: toolNode.loc?.line || 0,
255
+ irCol: toolNode.loc?.col || 1,
256
+ outLine: lines.length + 1,
257
+ outCol: 1,
258
+ });
259
+ const tp = getProps(toolNode);
260
+ const name = str(tp.name) || 'tool';
261
+ const desc = extractDescription(toolNode);
262
+ const paramNodes = getChildren(toolNode, 'param');
263
+ const handlerCode = findPythonHandler(toolNode);
264
+ lines.push('@mcp.tool()');
265
+ // Build function signature
266
+ const pyParams = [];
267
+ for (const p of paramNodes) {
268
+ const pp = getProps(p);
269
+ const pName = str(pp.name) || 'input';
270
+ const kernType = str(pp.type) || 'string';
271
+ let pType = pyType(kernType);
272
+ const isOptional = str(pp.required) === 'false';
273
+ const defaultVal = str(pp.default);
274
+ // Auto-infer int when type=number but default/min/max are all integers
275
+ if (pType === 'float' && defaultVal !== undefined) {
276
+ const isIntDefault = /^-?\d+$/.test(defaultVal);
277
+ const guards = getChildren(toolNode, 'guard').filter((g) => {
278
+ const gp = getProps(g);
279
+ return ((str(gp.param) === pName || str(gp.target) === pName) &&
280
+ (str(gp.kind) === 'validate' || str(gp.type) === 'validate'));
281
+ });
282
+ const minMax = guards.flatMap((g) => [str(getProps(g).min), str(getProps(g).max)].filter(Boolean));
283
+ const allIntConstraints = minMax.every((v) => /^-?\d+$/.test(v));
284
+ if (isIntDefault && (minMax.length === 0 || allIntConstraints)) {
285
+ pType = 'int';
286
+ }
287
+ }
288
+ if (defaultVal !== undefined) {
289
+ const pyDefault = pType === 'bool' ? (defaultVal === 'true' ? 'True' : 'False') : defaultVal;
290
+ pyParams.push(`${pName}: ${pType} = ${pyDefault}`);
291
+ }
292
+ else if (isOptional) {
293
+ pyParams.push(`${pName}: ${pType} | None = None`);
294
+ }
295
+ else {
296
+ pyParams.push(`${pName}: ${pType}`);
297
+ }
298
+ }
299
+ lines.push(`async def ${name}(${pyParams.join(', ')}) -> str:`);
300
+ if (desc)
301
+ lines.push(` """${desc}"""`);
302
+ lines.push(` logger.info("tool:call", extra={"tool": ${pyStr(name)}})`);
303
+ // Auto-inject guards based on handler effects (secure by construction)
304
+ const FILE_IO_PY = /\b(open|read|write|readlines|os\.path|os\.listdir|os\.remove|os\.unlink|os\.rename|os\.mkdir|shutil\.|pathlib\.|readFile|readFileSync|writeFile|readdir)\b/;
305
+ const SHELL_EXEC_PY = /\b(subprocess|os\.system|os\.popen|execSync|execFile|spawn|spawnSync)\b/;
306
+ const NETWORK_PY = /\b(requests\.|httpx\.|aiohttp\.|urllib\.|fetch|http\.request)\b/;
307
+ if (handlerCode) {
308
+ const allToolGuards = getChildren(toolNode, 'guard');
309
+ const allToolKinds = new Set(allToolGuards.map((g) => guardKind(g)));
310
+ const stringParams = paramNodes.filter((p) => (str(getProps(p).type) || 'string') === 'string');
311
+ if (FILE_IO_PY.test(handlerCode) && !allToolKinds.has('pathContainment') && stringParams.length > 0) {
312
+ for (const p of stringParams) {
313
+ const pName = str(getProps(p).name) || 'input';
314
+ if (!toolNode.children)
315
+ toolNode.children = [];
316
+ toolNode.children.push({ type: 'guard', props: { type: 'pathContainment', param: pName } });
317
+ }
318
+ }
319
+ if (SHELL_EXEC_PY.test(handlerCode) && stringParams.length > 0) {
320
+ for (const p of stringParams) {
321
+ const pName = str(getProps(p).name) || 'input';
322
+ const existingGuards = getChildren(toolNode, 'guard').filter((g) => str(getProps(g).param) === pName);
323
+ if (!existingGuards.some((g) => guardKind(g) === 'sanitize')) {
324
+ if (!toolNode.children)
325
+ toolNode.children = [];
326
+ toolNode.children.push({ type: 'guard', props: { type: 'sanitize', param: pName } });
327
+ }
328
+ }
329
+ }
330
+ }
331
+ const hasSanitizeOutput = getChildren(toolNode, 'guard').some((g) => guardKind(g) === 'sanitizeOutput') ||
332
+ (handlerCode && NETWORK_PY.test(handlerCode));
333
+ lines.push(' try:');
334
+ // Guards — inside try so exceptions become MCP errors
335
+ const guardLines = emitPyGuards(toolNode);
336
+ if (guardLines.length > 0) {
337
+ lines.push(...guardLines.map((l) => (l.length > 0 ? ` ${l}` : '')));
338
+ }
339
+ if (hasSanitizeOutput) {
340
+ needsSanitizeOutput = true;
341
+ // Wrap handler in nested async function, sanitize its return value
342
+ lines.push(` async def _handler():`);
343
+ if (handlerCode) {
344
+ lines.push(...ind(handlerCode.split('\n'), 12));
345
+ }
346
+ else {
347
+ lines.push(` return f"${name} completed"`);
348
+ }
349
+ lines.push(` return _sanitize_output(await _handler())`);
350
+ }
351
+ else if (handlerCode) {
352
+ lines.push(...ind(handlerCode.split('\n'), 8));
353
+ }
354
+ else {
355
+ lines.push(` return f"${name} completed"`);
356
+ }
357
+ lines.push(' except McpError:');
358
+ lines.push(' raise');
359
+ lines.push(' except Exception as e:');
360
+ lines.push(` logger.error("tool:error", extra={"tool": ${pyStr(name)}, "error": str(e)})`);
361
+ lines.push(` raise McpError(INTERNAL_ERROR, str(e))`);
362
+ lines.push('');
363
+ }
364
+ // ── Resources
365
+ for (const resourceNode of resourceNodes) {
366
+ sourceMap.push({
367
+ irLine: resourceNode.loc?.line || 0,
368
+ irCol: resourceNode.loc?.col || 1,
369
+ outLine: lines.length + 1,
370
+ outCol: 1,
371
+ });
372
+ const rp = getProps(resourceNode);
373
+ const name = str(rp.name) || 'resource';
374
+ const uri = str(rp.uri) || `${name}://default`;
375
+ const desc = extractDescription(resourceNode);
376
+ const handlerCode = findPythonHandler(resourceNode);
377
+ lines.push(`@mcp.resource(${pyStr(uri)})`);
378
+ // Extract URI template params
379
+ const templateParams = (uri.match(/\{(\w+)\}/g) || []).map((m) => m.slice(1, -1));
380
+ const sig = templateParams.length > 0 ? templateParams.map((p) => `${p}: str`).join(', ') : '';
381
+ lines.push(`async def ${name}(${sig}) -> str:`);
382
+ if (desc)
383
+ lines.push(` """${desc}"""`);
384
+ lines.push(` logger.info("resource:read", extra={"resource": ${pyStr(name)}})`);
385
+ if (handlerCode) {
386
+ lines.push(...ind(handlerCode.split('\n'), 4));
387
+ }
388
+ else {
389
+ lines.push(` return f"${name} content"`);
390
+ }
391
+ lines.push('');
392
+ }
393
+ // ── Prompts
394
+ for (const promptNode of promptNodes) {
395
+ sourceMap.push({
396
+ irLine: promptNode.loc?.line || 0,
397
+ irCol: promptNode.loc?.col || 1,
398
+ outLine: lines.length + 1,
399
+ outCol: 1,
400
+ });
401
+ const pp = getProps(promptNode);
402
+ const name = str(pp.name) || 'prompt';
403
+ const desc = extractDescription(promptNode);
404
+ const paramNodes = getChildren(promptNode, 'param');
405
+ const handlerCode = findPythonHandler(promptNode);
406
+ lines.push(`@mcp.prompt()`);
407
+ const pyParams = [];
408
+ for (const p of paramNodes) {
409
+ const pProps = getProps(p);
410
+ const pName = str(pProps.name) || 'input';
411
+ const isOptional = str(pProps.required) === 'false';
412
+ pyParams.push(isOptional ? `${pName}: str = ""` : `${pName}: str`);
413
+ }
414
+ lines.push(`async def ${name}(${pyParams.join(', ')}) -> str:`);
415
+ if (desc)
416
+ lines.push(` """${desc}"""`);
417
+ if (handlerCode) {
418
+ lines.push(...ind(handlerCode.split('\n'), 4));
419
+ }
420
+ else {
421
+ lines.push(` return f"${name} prompt"`);
422
+ }
423
+ lines.push('');
424
+ }
425
+ // ── Entrypoint
426
+ lines.push('');
427
+ lines.push('if __name__ == "__main__":');
428
+ lines.push(` mcp.run(transport=${pyStr(transport)})`);
429
+ lines.push('');
430
+ return {
431
+ code: lines.join('\n'),
432
+ sourceMap,
433
+ diagnostics: buildDiagnostics(root, accounted, 'mcp'),
434
+ };
435
+ }
436
+ /** Transpile KERN IR to Python FastMCP server code. */
437
+ export function transpileMCPPython(root, config) {
438
+ const { code, sourceMap, diagnostics } = buildPythonCode(root, config);
439
+ const ir = serializeIR(root);
440
+ const irTokenCount = countTokens(ir);
441
+ const tsTokenCount = countTokens(code);
442
+ return {
443
+ code,
444
+ sourceMap: sourceMap.length > 0
445
+ ? sourceMap
446
+ : [{ irLine: root.loc?.line || 0, irCol: root.loc?.col || 1, outLine: 1, outCol: 1 }],
447
+ irTokenCount,
448
+ tsTokenCount,
449
+ tokenReduction: irTokenCount === 0 ? 0 : Math.round((1 - irTokenCount / tsTokenCount) * 100),
450
+ diagnostics,
451
+ };
452
+ }
453
+ //# sourceMappingURL=transpiler-mcp-python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transpiler-mcp-python.js","sourceRoot":"","sources":["../src/transpiler-mcp-python.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { IRNode, ResolvedKernConfig, KernConfig, TranspileResult } from '@kernlang/core';
1
+ import type { IRNode, KernConfig, ResolvedKernConfig, TranspileResult } from '@kernlang/core';
2
2
  /** Transpile a KERN IR tree to MCP server TypeScript code string. */
3
3
  export declare function transpileMCP(root: IRNode, config?: ResolvedKernConfig): TranspileResult;
4
4
  /** Alias for use from CLI where config may not be fully resolved. */