UNPKG

mlld

Version:

mlld: llm scripting language

1 lines 28.2 kB
{"version":3,"sources":["../interpreter/eval/prose-execution.ts"],"names":["buildSkillInjectionPrompt","skills","runSkill","find","s","includes","buildSkillInjectionEnd","executeProseExecutable","definition","args","env","process","DEBUG_EXEC","logger","debug","contentType","hasConfig","configRef","paramNames","length","Error","configRefNode","configVarName","type","identifier","content","configVar","getVariable","config","extractProseConfig","proseEnv","createChild","key","value","Object","entries","setParameterVariable","createSimpleTextVariable","proseContent","contentTemplate","interpolate","InterpolationContext","Default","pathTemplate","filePath","fileContent","readFile","err","message","lowerPath","toLowerCase","endsWith","parseAndInterpolateTemplate","interpolateProseTemplate","templateStyle","trim","source","skillPrompt","skillPromptEnd","fullPrompt","contentLength","fullPromptLength","modelName","result","invokeModelExecutor","join","undefined","Array","isArray","model","modelVar","isExecutableVariable","name","resolved","defaultSkills","cwd","maxTokens","temperature","templateContent","style","parseSync","startRule","templateNodes","parseErr","normalized","replace","regex","match","seen","Set","exec","varPath","has","add","parts","split","varName","variable","i","stringValue","JSON","stringify","RegExp","prompt","commandRef","location","invocation","execEnv","setVariable","evaluateExecInvocation","String"],"mappings":"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","file":"prose-execution-BCUOZNHM.mjs","sourcesContent":["/**\n * Prose Execution Handler\n *\n * Handles execution of prose executables (prose:@config { ... }).\n * Prose blocks are executed by:\n * 1. Resolving the config reference for model settings\n * 2. Interpolating variables in the prose content\n * 3. Wrapping with skill injection prompt\n * 4. Executing via the model executor\n *\n * The skill name is configurable via config.skillName (default: \"prose\").\n * This allows users to use custom interpreters instead of OpenProse.\n */\n\nimport type { Environment } from '../env/Environment';\nimport type { ProseExecutable } from '@core/types/executable';\nimport { interpolate } from '../core/interpreter';\nimport { InterpolationContext } from '../core/interpolation-context';\nimport { createSimpleTextVariable, isExecutableVariable } from '@core/types/variable';\nimport type { Variable } from '@core/types/variable';\nimport { logger } from '@core/utils/logger';\nimport { evaluateExecInvocation } from './exec-invocation';\nimport type { ExecInvocation, CommandReference } from '@core/types';\n\n/**\n * Build the skill injection prompt for a given skill name\n * Default skill is \"prose\" (OpenProse), but users can specify custom interpreters\n */\nfunction buildSkillInjectionPrompt(skills: string[]): string {\n const runSkill = skills.find(s => s.includes('run')) || skills[0];\n\n return `Run /${runSkill} with this program:\n\n`;\n}\n\nfunction buildSkillInjectionEnd(skills: string[]): string {\n return `\n\nReturn only the output. If the skill is unavailable, respond: ERROR: SKILLS_NOT_FOUND`;\n}\n\n/**\n * Execute a prose executable\n *\n * @param definition - The prose executable definition\n * @param args - Arguments passed to the executable\n * @param env - The execution environment\n * @returns The result of prose execution\n */\nexport async function executeProseExecutable(\n definition: ProseExecutable,\n args: Record<string, string>,\n env: Environment\n): Promise<string> {\n if (process.env.DEBUG_EXEC) {\n logger.debug('Executing prose executable:', {\n contentType: definition.contentType,\n hasConfig: !!definition.configRef,\n paramNames: definition.paramNames\n });\n }\n\n // 1. Resolve the config reference\n const configRef = definition.configRef;\n if (!configRef || configRef.length === 0) {\n throw new Error('Prose executable missing config reference');\n }\n\n const configRefNode = configRef[0];\n let configVarName: string;\n if (configRefNode.type === 'VariableReference') {\n configVarName = (configRefNode as any).identifier;\n } else if (configRefNode.type === 'Text') {\n configVarName = (configRefNode as any).content;\n } else {\n throw new Error('Invalid config reference in prose executable');\n }\n\n const configVar = env.getVariable(configVarName);\n if (!configVar) {\n throw new Error(`Prose config not found: @${configVarName}`);\n }\n\n // Extract and validate config values\n const config = extractProseConfig(configVar, configVarName, env);\n\n // 2. Create parameter environment\n const proseEnv = env.createChild();\n for (const [key, value] of Object.entries(args)) {\n proseEnv.setParameterVariable(key, createSimpleTextVariable(key, value));\n }\n\n // 3. Get the prose content based on content type\n let proseContent: string;\n\n if (definition.contentType === 'inline') {\n // Inline prose: prose:@config { session \"...\" }\n if (!definition.contentTemplate) {\n throw new Error('Inline prose executable missing content');\n }\n proseContent = await interpolate(\n definition.contentTemplate,\n proseEnv,\n InterpolationContext.Default\n );\n } else if (definition.contentType === 'file') {\n // File-based prose: prose:@config \"file.prose\"\n // Also handles .prose.att and .prose.mtt with auto-detection\n if (!definition.pathTemplate) {\n throw new Error('File-based prose executable missing path');\n }\n const filePath = await interpolate(\n definition.pathTemplate,\n proseEnv,\n InterpolationContext.Default\n );\n\n let fileContent: string;\n try {\n fileContent = await env.readFile(filePath);\n } catch (err: any) {\n throw new Error(\n `Failed to read prose file \"${filePath}\": ${err.message || err}`\n );\n }\n\n // Check for template extensions (.prose.att or .prose.mtt)\n const lowerPath = filePath.toLowerCase();\n if (lowerPath.endsWith('.prose.att')) {\n // ATT-style template: @var interpolation\n proseContent = await parseAndInterpolateTemplate(fileContent, 'att', proseEnv);\n } else if (lowerPath.endsWith('.prose.mtt')) {\n // MTT-style template: {{var}} interpolation\n proseContent = await parseAndInterpolateTemplate(fileContent, 'mtt', proseEnv);\n } else {\n // Plain .prose file - still interpolate @vars for convenience\n proseContent = await interpolateProseTemplate(fileContent, proseEnv);\n }\n } else if (definition.contentType === 'template') {\n // Explicit template prose: prose:@config template \"file.prose.att\"\n if (!definition.pathTemplate) {\n throw new Error('Template prose executable missing path');\n }\n const filePath = await interpolate(\n definition.pathTemplate,\n proseEnv,\n InterpolationContext.Default\n );\n\n let fileContent: string;\n try {\n fileContent = await env.readFile(filePath);\n } catch (err: any) {\n throw new Error(\n `Failed to read prose template \"${filePath}\": ${err.message || err}`\n );\n }\n\n // Detect template style from extension\n const lowerPath = filePath.toLowerCase();\n const templateStyle = lowerPath.endsWith('.mtt') ? 'mtt' : 'att';\n proseContent = await parseAndInterpolateTemplate(fileContent, templateStyle, proseEnv);\n } else {\n throw new Error(`Unknown prose content type: ${definition.contentType}`);\n }\n\n // 4. Validate prose content is not empty\n if (!proseContent || proseContent.trim() === '') {\n const source = definition.contentType === 'inline' ? 'inline block' :\n definition.contentType === 'file' ? 'file' : 'template';\n throw new Error(\n `Prose ${source} is empty. Prose content must contain at least one instruction.`\n );\n }\n\n // 5. Construct the skill-injected prompt\n // Use custom prompts if provided, otherwise build from skills list\n const skillPrompt = config.skillPrompt || buildSkillInjectionPrompt(config.skills);\n const skillPromptEnd = config.skillPromptEnd || buildSkillInjectionEnd(config.skills);\n const fullPrompt = skillPrompt + proseContent + skillPromptEnd;\n\n if (process.env.DEBUG_EXEC) {\n logger.debug('Prose prompt constructed:', {\n contentLength: proseContent.length,\n fullPromptLength: fullPrompt.length,\n modelName: config.modelName,\n skills: config.skills\n });\n }\n\n // 6. Execute via model executor\n const result = await invokeModelExecutor(fullPrompt, config, env);\n\n // 7. Check for skills-not-found error\n if (result.includes('ERROR: SKILLS_NOT_FOUND:')) {\n throw new Error(\n `Prose execution failed: OpenProse skills not available. ` +\n `Skills must be installed AND approved. Required skills: ${config.skills.join(', ')}`\n );\n }\n\n return result;\n}\n\n/**\n * Extract and validate prose configuration from a config variable\n * The model field must be an executable Variable (e.g., @opus from @mlld/claude)\n */\nfunction extractProseConfig(configVar: any, configVarName: string, env: Environment): ProseConfig {\n const value = configVar.value;\n\n // Handle null/undefined\n if (value === null || value === undefined) {\n throw new Error(\n `Prose config @${configVarName} is ${value === null ? 'null' : 'undefined'}. ` +\n `Expected an object with { model: @executor, skillName?: string }.`\n );\n }\n\n // Handle object config\n if (typeof value === 'object' && !Array.isArray(value)) {\n // Validate model is present\n if (!value.model) {\n throw new Error(\n `Prose config @${configVarName} missing required 'model' field. ` +\n `Expected: { model: @opus } where @opus is an executable from @mlld/claude.`\n );\n }\n\n // Model should be a Variable (executable)\n let modelVar: Variable;\n let modelName: string;\n\n if (isExecutableVariable(value.model)) {\n // model is directly an executable Variable\n modelVar = value.model;\n modelName = modelVar.name || 'model';\n } else if (typeof value.model === 'string') {\n // model is a string reference to an executable (e.g., \"opus\")\n // Look it up in the environment\n const resolved = env.getVariable(value.model);\n if (!resolved) {\n throw new Error(\n `Prose config @${configVarName}.model references unknown variable @${value.model}. ` +\n `Import an executor like: import { @opus } from @mlld/claude`\n );\n }\n if (!isExecutableVariable(resolved)) {\n throw new Error(\n `Prose config @${configVarName}.model must be an executable, but @${value.model} is not. ` +\n `Use an executor like @opus from @mlld/claude.`\n );\n }\n modelVar = resolved;\n modelName = value.model;\n } else {\n throw new Error(\n `Prose config @${configVarName}.model must be an executable (like @opus from @mlld/claude), ` +\n `got ${typeof value.model}.`\n );\n }\n\n // Validate skills if provided\n if (value.skills !== undefined && !Array.isArray(value.skills)) {\n throw new Error(\n `Prose config @${configVarName}.skills must be an array, got ${typeof value.skills}.`\n );\n }\n\n // Default skills for OpenProse plugin\n const defaultSkills = [\n 'open-prose:prose-boot',\n 'open-prose:prose-compile',\n 'open-prose:prose-run'\n ];\n\n return {\n model: modelVar,\n modelName,\n cwd: value.cwd,\n skills: value.skills || defaultSkills,\n skillPrompt: value.skillPrompt,\n skillPromptEnd: value.skillPromptEnd,\n maxTokens: value.maxTokens,\n temperature: value.temperature\n };\n }\n\n // Handle executable variable directly (shorthand: prose:@opus)\n if (isExecutableVariable(configVar)) {\n return {\n model: configVar,\n modelName: configVar.name || configVarName,\n skills: [\n 'open-prose:prose-boot',\n 'open-prose:prose-compile',\n 'open-prose:prose-run'\n ]\n };\n }\n\n // Handle arrays and other types\n if (Array.isArray(value)) {\n throw new Error(\n `Prose config @${configVarName} is an array. ` +\n `Expected: { model: @opus } where @opus is an executable.`\n );\n }\n\n throw new Error(\n `Prose config @${configVarName} has invalid type '${typeof value}'. ` +\n `Expected an object with { model: @executor } or an executable directly.`\n );\n}\n\ninterface ProseConfig {\n model: Variable; // Executable variable (e.g., @opus from @mlld/claude)\n modelName: string; // Name of the executable for error messages\n cwd?: string;\n skills: string[]; // Skills needed for prose execution (e.g., [\"open-prose:prose-run\"])\n skillPrompt?: string;\n skillPromptEnd?: string;\n maxTokens?: number;\n temperature?: number;\n}\n\n/**\n * Parse and interpolate a prose template using the proper grammar parser\n * Supports both ATT (@var) and MTT ({{var}}) styles\n */\nasync function parseAndInterpolateTemplate(\n templateContent: string,\n style: 'att' | 'mtt',\n env: Environment\n): Promise<string> {\n const { parseSync } = await import('@grammar/parser');\n const startRule = style === 'mtt' ? 'TemplateBodyMtt' : 'TemplateBodyAtt';\n\n let templateNodes: any[];\n try {\n templateNodes = parseSync(templateContent, { startRule });\n } catch (parseErr: any) {\n // Fallback to simple interpolation if parser fails\n if (process.env.DEBUG_EXEC) {\n logger.debug('Template parse failed, using fallback:', parseErr.message);\n }\n\n if (style === 'mtt') {\n // Normalize {{var}} to @var for fallback interpolation\n const normalized = templateContent.replace(/{{\\s*([A-Za-z_][\\w.]*)\\s*}}/g, '@$1');\n return interpolateProseTemplate(normalized, env);\n }\n return interpolateProseTemplate(templateContent, env);\n }\n\n // Interpolate the parsed template nodes\n return interpolate(templateNodes, env, InterpolationContext.Default);\n}\n\n/**\n * Interpolate a prose template file with ATT-style variables (@var)\n * Simple fallback interpolation when parser is not available\n */\nasync function interpolateProseTemplate(\n templateContent: string,\n env: Environment\n): Promise<string> {\n // Simple ATT interpolation - replace @varName with variable values\n const regex = /@([a-zA-Z_][\\w.]*)/g;\n let result = templateContent;\n let match: RegExpExecArray | null;\n\n const seen = new Set<string>();\n while ((match = regex.exec(templateContent)) !== null) {\n const varPath = match[1];\n if (seen.has(varPath)) continue;\n seen.add(varPath);\n\n // Split by dots for nested access\n const parts = varPath.split('.');\n const varName = parts[0];\n const variable = env.getVariable(varName);\n\n if (variable) {\n let value = variable.value;\n // Navigate nested fields\n for (let i = 1; i < parts.length; i++) {\n if (value && typeof value === 'object') {\n value = (value as any)[parts[i]];\n } else {\n value = undefined;\n break;\n }\n }\n\n if (value !== undefined) {\n const stringValue = typeof value === 'string' ? value : JSON.stringify(value);\n result = result.replace(new RegExp(`@${varPath.replace('.', '\\\\.')}`, 'g'), stringValue);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Invoke the model executor with the wrapped prose prompt.\n *\n * The model executor (e.g., @opus from @mlld/claude) takes a prompt parameter\n * and returns the LLM's response.\n */\nasync function invokeModelExecutor(\n prompt: string,\n config: ProseConfig,\n env: Environment\n): Promise<string> {\n const modelVar = config.model;\n const modelName = config.modelName;\n\n if (!isExecutableVariable(modelVar)) {\n throw new Error(\n `Prose config model is not an executable. ` +\n `Expected an executor like @opus from @mlld/claude.`\n );\n }\n\n // Construct an ExecInvocation node to call the model executor with the prompt\n // The executor signature is: exe @opus(prompt) = @prompt | cmd { claude -p ... }\n const commandRef: CommandReference = {\n type: 'CommandReference',\n identifier: modelName,\n args: [\n {\n type: 'VariableReference',\n identifier: '__prose_prompt__',\n location: null\n } as any\n ]\n };\n\n const invocation: ExecInvocation = {\n type: 'ExecInvocation',\n commandRef,\n location: null\n };\n\n // Set up the prompt as a temporary variable\n const execEnv = env.createChild();\n execEnv.setVariable('__prose_prompt__', createSimpleTextVariable('__prose_prompt__', prompt));\n\n // Also make the model executor available by the name we're calling\n // (in case it was passed as an object field rather than directly in scope)\n if (!execEnv.getVariable(modelName)) {\n execEnv.setVariable(modelName, modelVar);\n }\n\n try {\n const result = await evaluateExecInvocation(invocation, execEnv);\n\n // Extract the string value from the result\n if (typeof result.value === 'string') {\n return result.value;\n }\n if (result.value && typeof result.value === 'object' && 'value' in result.value) {\n return String((result.value as any).value);\n }\n return String(result.value ?? '');\n } catch (err: any) {\n throw new Error(\n `Prose execution via @${modelName} failed: ${err.message || err}`\n );\n }\n}\n"]}