UNPKG

mlld

Version:

mlld: llm scripting language

1 lines 34.4 kB
{"version":3,"sources":["../interpreter/env/CommandUtils.ts","../interpreter/env/variable-proxy.ts"],"names":["CommandUtils","validateAndParseCommand","command","parsed","parse","bannedOperators","Set","token","operator","op","has","operatorDescriptions","description","errorMessage","join","Error","enhanceShellCodeForCommandSubstitution","code","commandSubstitutionPattern","enhancedCode","replace","match","innerCommand","interactivePatterns","needsStderrCapture","some","pattern","test","hasStderrRedirection","includes","hasTrailingStderrRedirection","trim","cleanCommand","hasDirectStderrPattern","isSafeCommand","extractCommandName","trimmed","firstSpace","indexOf","substring","requiresShellEnhancement","stderrProducers","hasPipeOperator","cloneValue","input","undefined","structuredClone","JSON","stringify","VARIABLE_PROXY_PROPS","TYPE","SUBTYPE","METADATA","VARIABLE","IS_VARIABLE","createVariableProxy","variable","value","Proxy","get","target","prop","receiver","type","subtype","mx","internal","customToString","bind","Reflect","customToJSON","set","Object","values","ownKeys","getOwnPropertyDescriptor","configurable","enumerable","recordPrimitiveMetadata","key","metadata","__mlldPrimitiveMetadata","defineProperty","prepareValueForShadow","isVariable","primitiveType","isFileLoadedValue","isStructuredValue","text","content","isLoadContentArray","source","data","asData","prepareParamsForShadow","params","shadowParams","entries","isVariableProxy","getVariableType","createMlldHelpers","primitiveMetadata","getProxyVariable","helpers","name","getType","proxyType","getCtx","proxyVariable","getInternal","getMetadata","getSubtype","getVariable","meta"],"mappings":"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","file":"chunk-ONLT7ZR3.mjs","sourcesContent":["import * as shellQuote from 'shell-quote';\n\n/**\n * CommandUtils provides utilities for command validation, parsing, and enhancement.\n * These are pure utility functions with no state dependencies.\n */\nexport class CommandUtils {\n \n /**\n * Validate and parse command for security\n * Blocks dangerous shell operators that could be used maliciously\n * Uses shell-quote library for accurate operator detection\n */\n static validateAndParseCommand(command: string): string {\n // Use shell-quote to parse the command and detect operators\n const parsed = shellQuote.parse(command);\n \n // List of allowed operators (pipes are OK for command chaining)\n const allowedOperators = new Set(['|']);\n \n // List of banned operators that could be dangerous\n const bannedOperators = new Set([\n '&&', // AND operator\n '||', // OR operator\n ';', // Command separator\n // '>', // Output redirect - Allowed: just writes to local files\n // '>>', // Append redirect - Allowed: just appends to local files \n // '<', // Input redirect - Allowed: just reads from local files\n '&' // Background execution - Still dangerous (zombie processes)\n ]);\n \n // Check for dangerous operators\n for (const token of parsed) {\n if (typeof token === 'object' && 'op' in token) {\n const operator = token.op;\n if (bannedOperators.has(operator)) {\n // Create a helpful error message with the actual command and operator\n const operatorDescriptions: Record<string, string> = {\n '&&': 'AND operator (&&)',\n '||': 'OR operator (||)',\n ';': 'semicolon (;)',\n '&': 'background execution (&)'\n };\n \n const description = operatorDescriptions[operator] || `operator (${operator})`;\n \n // Build a detailed error message\n const errorMessage = [\n `Shell ${description} is not allowed in /run commands`,\n '',\n 'Command rejected:',\n ` ${command}`,\n '',\n `The ${description} character is not allowed in the /run context.`,\n 'Use a full shell command with /run sh { ... } for less restrictive execution,',\n 'or split into separate /run commands.'\n ].join('\\n');\n \n throw new Error(errorMessage);\n }\n }\n }\n \n // Command passed validation, return as-is\n return command;\n }\n\n /**\n * Enhance shell code for command substitution\n * Adds stderr capture and output normalization for problematic patterns\n */\n static enhanceShellCodeForCommandSubstitution(code: string): string {\n // Pattern to match command substitution that doesn't already have stderr redirection\n // Matches: $(...) where ... doesn't contain \"2>&1\" or \"2>/dev/null\"\n const commandSubstitutionPattern = /\\$\\(([^)]*)\\)/g;\n \n const enhancedCode = code.replace(commandSubstitutionPattern, (match, innerCommand) => {\n if (typeof innerCommand !== 'string') {\n return match;\n }\n // Check if this looks like an interactive command pattern that might write to stderr\n const interactivePatterns = [\n /if\\s*\\[\\s*-t\\s+[01]\\s*\\]/, // TTY detection: if [ -t 0 ] or if [ -t 1 ]\n /echo\\s+.*\\s+>&2/, // Direct stderr output: echo \"...\" >&2\n /\\|\\|\\s*echo/, // Fallback pattern: command || echo\n /python3?\\s+-c/, // Python scripts that might detect TTY\n /node\\s+-e/, // Node scripts that might detect TTY\n /sh\\s+-c\\s+.*>&2/, // Shell commands with stderr: sh -c '... >&2'\n /echo.*&&.*echo.*>&2/, // Commands with multiple echo, one to stderr\n ];\n \n const needsStderrCapture = interactivePatterns.some(pattern => pattern.test(innerCommand));\n const hasStderrRedirection = innerCommand.includes('2>&1') || innerCommand.includes('2>/dev/null') || innerCommand.includes('2>');\n \n // Check if stderr redirection is at the end of the command (common pattern)\n const hasTrailingStderrRedirection = /\\s+2>&1\\s*$/.test(innerCommand);\n \n if (needsStderrCapture && !hasStderrRedirection) {\n // Add stderr capture to the command substitution and normalize whitespace\n return `$(${innerCommand.trim()} 2>&1 | tr '\\\\n' ' ' | sed 's/[[:space:]]*$//')`;\n } else if (hasStderrRedirection && (needsStderrCapture || hasTrailingStderrRedirection)) {\n // For commands that already capture stderr but might have multi-line output, normalize whitespace\n // Remove the trailing 2>&1 and re-add it after normalization\n const cleanCommand = innerCommand.replace(/\\s+2>&1\\s*$/, '').trim();\n return `$(${cleanCommand} 2>&1 | tr '\\\\n' ' ' | sed 's/[[:space:]]*$//')`;\n } else if (innerCommand.includes('&&') || innerCommand.includes('||')) {\n // For commands with && or || that might produce multi-line output, normalize whitespace\n // Wrap the command in parentheses to ensure proper precedence\n return `$({ ${innerCommand.trim()}; } | tr '\\\\n' ' ' | sed 's/[[:space:]]*$//')`;\n }\n \n return match;\n });\n \n // Also add stderr capture for direct commands that might write to stderr when no TTY\n // This helps with direct execution cases\n const hasDirectStderrPattern = /echo\\s+.*\\s+>&2/;\n if (hasDirectStderrPattern.test(code) && !code.includes('2>&1')) {\n // For direct commands that write to stderr, we need to ensure they're captured\n // But we need to be careful not to break existing functionality\n // This is more complex and should be handled case by case\n }\n \n return enhancedCode;\n }\n\n /**\n * Check if a command appears to be safe for execution\n * This is a basic heuristic check, not a comprehensive security analysis\n */\n static isSafeCommand(command: string): boolean {\n try {\n CommandUtils.validateAndParseCommand(command);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Extract command name from a command string\n * Returns the first word (command) from the command string\n */\n static extractCommandName(command: string): string {\n const trimmed = command.trim();\n const firstSpace = trimmed.indexOf(' ');\n return firstSpace === -1 ? trimmed : trimmed.substring(0, firstSpace);\n }\n\n /**\n * Check if command requires shell enhancement\n */\n static requiresShellEnhancement(command: string): boolean {\n const stderrProducers = [\n /curl\\s+/,\n /wget\\s+/,\n /git\\s+/,\n /npm\\s+/,\n /yarn\\s+/,\n /pip\\s+/,\n /docker\\s+/,\n /kubectl\\s+/,\n /python\\s+[^|&;]+\\.py/,\n /node\\s+[^|&;]+\\.js/\n ];\n\n return stderrProducers.some(pattern => pattern.test(command));\n }\n\n /**\n * Check if command contains an actual pipe operator (quote-aware)\n * Uses shell-quote to properly detect pipes vs pipe characters in strings\n */\n static hasPipeOperator(command: string): boolean {\n const parsed = shellQuote.parse(command);\n return parsed.some(token =>\n typeof token === 'object' &&\n 'op' in token &&\n token.op === '|'\n );\n }\n}","/**\n * Variable Proxy System for Shadow Environments\n * Part of Phase 4: System-wide Variable Flow\n * \n * Creates proxy objects that allow shadow environment code to:\n * 1. Use Variables normally (transparent value access)\n * 2. Introspect type information via special properties\n * 3. Access metadata for advanced use cases\n */\n\nimport type { Variable } from '@core/types/variable/VariableTypes';\nimport { isVariable } from '@interpreter/utils/variable-resolution';\nimport { wrapLoadContentValue, isFileLoadedValue } from '@interpreter/utils/load-content-structured';\nimport { asData, isStructuredValue } from '@interpreter/utils/structured-value';\n\nfunction cloneValue<T>(input: T | undefined): T | undefined {\n if (input === undefined) {\n return undefined;\n }\n if (typeof structuredClone === 'function') {\n try {\n return structuredClone(input);\n } catch {\n // Fall through to JSON cloning\n }\n }\n try {\n return JSON.parse(JSON.stringify(input));\n } catch {\n return input;\n }\n}\n\n/**\n * Special property names for Variable introspection\n */\nexport const VARIABLE_PROXY_PROPS = {\n TYPE: '__mlld_type',\n SUBTYPE: '__mlld_subtype',\n METADATA: '__mlld_metadata',\n VARIABLE: '__mlld_variable',\n IS_VARIABLE: '__mlld_is_variable'\n} as const;\n\n/**\n * Create a proxy for a Variable that allows transparent value access\n * while exposing type information through special properties\n */\nexport function createVariableProxy(variable: Variable): any {\n const value = variable.value;\n \n // Can't proxy primitives (string, number, boolean, null)\n if (value === null || typeof value !== 'object') {\n // For primitives, we'll need a different strategy\n // Could wrap in an object but that changes behavior\n return value;\n }\n \n // Create proxy for objects and arrays\n return new Proxy(value, {\n get(target, prop, receiver) {\n // Handle special Variable introspection properties\n switch (prop) {\n case VARIABLE_PROXY_PROPS.TYPE:\n return variable.type;\n \n case VARIABLE_PROXY_PROPS.SUBTYPE:\n return variable.subtype;\n \n case VARIABLE_PROXY_PROPS.METADATA:\n return {\n mx: variable.mx,\n internal: variable.internal\n };\n \n case VARIABLE_PROXY_PROPS.VARIABLE:\n return variable;\n \n case VARIABLE_PROXY_PROPS.IS_VARIABLE:\n return true;\n \n // Special handling for toString to preserve custom behavior\n case 'toString':\n const customToString = variable.internal?.customToString;\n if (customToString) {\n // Bind the custom toString to the target\n return customToString.bind(target);\n }\n return Reflect.get(target, prop, receiver);\n \n // Special handling for toJSON\n case 'toJSON':\n const customToJSON = variable.internal?.customToJSON;\n if (customToJSON) {\n return customToJSON;\n }\n return Reflect.get(target, prop, receiver);\n \n default:\n // Normal property access\n return Reflect.get(target, prop, receiver);\n }\n },\n \n // Preserve normal array/object behavior for other operations\n set(target, prop, value, receiver) {\n return Reflect.set(target, prop, value, receiver);\n },\n \n has(target, prop) {\n // Report that we have the special properties\n if (Object.values(VARIABLE_PROXY_PROPS).includes(prop as any)) {\n return true;\n }\n return Reflect.has(target, prop);\n },\n \n ownKeys(target) {\n // Don't include special properties in enumeration\n // This keeps JSON.stringify and for...in loops clean\n return Reflect.ownKeys(target);\n },\n \n getOwnPropertyDescriptor(target, prop) {\n // Special properties are non-enumerable\n if (Object.values(VARIABLE_PROXY_PROPS).includes(prop as any)) {\n return {\n configurable: true,\n enumerable: false,\n get: () => this.get!(target, prop, target)\n };\n }\n return Reflect.getOwnPropertyDescriptor(target, prop);\n }\n });\n}\n\n/**\n * Prepare a value for passing to shadow environment\n * Variables become proxies, non-Variables pass through\n */\nfunction recordPrimitiveMetadata(\n target: Record<string, any>,\n key: string,\n metadata: Record<string, any>\n): void {\n if (!target.__mlldPrimitiveMetadata) {\n Object.defineProperty(target, '__mlldPrimitiveMetadata', {\n value: {},\n enumerable: false,\n configurable: true\n });\n }\n target.__mlldPrimitiveMetadata[key] = metadata;\n}\n\nexport function prepareValueForShadow(value: any, key?: string, target?: Record<string, any>): any {\n if (isVariable(value)) {\n if (value.type === 'primitive' || value.type === 'simple-text' || value.type === 'interpolated-text') {\n if (target && key) {\n recordPrimitiveMetadata(target, key, {\n isVariable: true,\n type: value.type,\n subtype: (value as any).primitiveType,\n mx: value.mx,\n internal: value.internal\n });\n }\n return value.value;\n }\n return createVariableProxy(value);\n }\n\n // Handle file-loaded values (both StructuredValue and legacy LoadContentResult)\n if (isFileLoadedValue(value)) {\n if (isStructuredValue(value)) {\n // StructuredValue with file metadata\n if (target && key) {\n recordPrimitiveMetadata(target, key, {\n isVariable: false,\n type: 'load-content',\n mx: value.mx,\n internal: value.internal,\n text: value.text\n });\n }\n return value.text;\n } else {\n // Legacy LoadContentResult\n if (target && key) {\n recordPrimitiveMetadata(target, key, {\n isVariable: false,\n type: 'load-content',\n mx: undefined,\n internal: undefined\n });\n }\n return (value as any).content;\n }\n }\n\n // Handle other StructuredValue types\n if (isStructuredValue(value)) {\n // For load-content arrays, use .text (concatenated content)\n if (value.type === 'array') {\n const isLoadContentArray = value.mx?.source === 'load-content' ||\n value.metadata?.source === 'load-content';\n\n if (isLoadContentArray) {\n // Return text for display - preserves concatenation\n if (target && key) {\n recordPrimitiveMetadata(target, key, {\n isVariable: false,\n type: value.type,\n mx: value.mx,\n internal: value.internal,\n text: value.text\n });\n }\n return value.text;\n }\n }\n\n // For non-load-content structured values, extract data\n const data = asData(value);\n if (target && key) {\n recordPrimitiveMetadata(target, key, {\n isVariable: false,\n type: value.type,\n mx: value.mx,\n internal: value.internal,\n text: value.text\n });\n }\n return data;\n }\n return value;\n}\n\n/**\n * Prepare parameters object for shadow environment\n * Converts all Variable values to proxies\n */\nexport function prepareParamsForShadow(params: Record<string, any>): Record<string, any> {\n const shadowParams: Record<string, any> = {};\n \n for (const [key, value] of Object.entries(params)) {\n shadowParams[key] = prepareValueForShadow(value, key, shadowParams);\n }\n \n return shadowParams;\n}\n\n/**\n * Helper function for shadow environments to check if a value is a Variable proxy\n */\nexport function isVariableProxy(value: any): boolean {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n \n try {\n // Try to access the special property\n return value[VARIABLE_PROXY_PROPS.IS_VARIABLE] === true;\n } catch {\n return false;\n }\n}\n\n/**\n * Helper function to get Variable type from a proxy\n */\nexport function getVariableType(value: any): string | undefined {\n if (!isVariableProxy(value)) {\n return undefined;\n }\n \n try {\n return value[VARIABLE_PROXY_PROPS.TYPE];\n } catch {\n return undefined;\n }\n}\n\n/**\n * Create mlld helper object for shadow environments\n * @param primitiveMetadata - Optional metadata for primitive values that can't be proxied\n */\nexport function createMlldHelpers(primitiveMetadata?: Record<string, any>) {\n const getProxyVariable = (value: any) => {\n if (isVariableProxy(value)) {\n try {\n return value[VARIABLE_PROXY_PROPS.VARIABLE] as Variable | undefined;\n } catch {\n return undefined;\n }\n }\n return undefined;\n };\n\n const helpers = {\n // Type checking - also check primitive metadata\n isVariable: (value: any, name?: string) => {\n // First check if it's a proxy\n if (isVariableProxy(value)) {\n return true;\n }\n // Then check if we have metadata for this primitive\n if (name && primitiveMetadata && primitiveMetadata[name]) {\n return primitiveMetadata[name].isVariable === true;\n }\n return false;\n },\n \n getType: (value: any, name?: string) => {\n // First check if it's a proxy\n const proxyType = getVariableType(value);\n if (proxyType !== undefined) {\n return proxyType;\n }\n // Then check primitive metadata\n if (name && primitiveMetadata && primitiveMetadata[name]) {\n return primitiveMetadata[name].type;\n }\n return undefined;\n },\n \n // Property names for direct access\n TYPE: VARIABLE_PROXY_PROPS.TYPE,\n SUBTYPE: VARIABLE_PROXY_PROPS.SUBTYPE,\n METADATA: VARIABLE_PROXY_PROPS.METADATA,\n VARIABLE: VARIABLE_PROXY_PROPS.VARIABLE,\n \n // Metadata helpers - also check primitive metadata\n getCtx: (value: any, name?: string) => {\n const proxyVariable = getProxyVariable(value);\n if (proxyVariable) {\n return cloneValue(proxyVariable.mx);\n }\n if (name && primitiveMetadata && primitiveMetadata[name]) {\n return cloneValue(primitiveMetadata[name].mx);\n }\n return undefined;\n },\n\n getInternal: (value: any, name?: string) => {\n const proxyVariable = getProxyVariable(value);\n if (proxyVariable) {\n return cloneValue(proxyVariable.internal);\n }\n if (name && primitiveMetadata && primitiveMetadata[name]) {\n return cloneValue(primitiveMetadata[name].internal);\n }\n return undefined;\n },\n\n getMetadata: (value: any, name?: string) => {\n const mx = helpers.getCtx(value, name);\n const internal = helpers.getInternal(value, name);\n if (!mx && !internal) {\n return undefined;\n }\n return { mx, internal };\n },\n \n // Get subtype - also check primitive metadata\n getSubtype: (value: any, name?: string) => {\n if (isVariableProxy(value)) {\n try {\n return value[VARIABLE_PROXY_PROPS.SUBTYPE];\n } catch {\n return undefined;\n }\n }\n // Check primitive metadata\n if (name && primitiveMetadata && primitiveMetadata[name]) {\n return primitiveMetadata[name].subtype;\n }\n return undefined;\n },\n \n // Get the full Variable object - or reconstruct from metadata\n getVariable: (value: any, name?: string) => {\n const proxyVariable = getProxyVariable(value);\n if (proxyVariable) {\n return proxyVariable;\n }\n if (name && primitiveMetadata && primitiveMetadata[name]) {\n const meta = primitiveMetadata[name];\n return {\n name,\n value,\n type: meta.type,\n subtype: meta.subtype,\n mx: meta.mx || {},\n internal: meta.internal || {},\n isVariable: true\n };\n }\n return undefined;\n }\n } as const;\n\n return {\n ...helpers,\n mx: helpers.getCtx\n };\n}\n"]}