import {
JSAstValidator,
PreScanner,
createAgentScriptPreset,
createPreScannerConfig,
transformAgentScript,
} from '@enclave-vm/ast';
async function validateAndTransform(code: string) {
// Step 1: Pre-scan
const scanner = new PreScanner(createPreScannerConfig('agentscript'));
const scanResult = scanner.scan(code);
if (!scanResult.valid) {
return { valid: false, error: 'Pre-scan failed', issues: scanResult.issues };
}
// Step 2: AST validation
const preset = createAgentScriptPreset({
allowedGlobals: ['callTool', 'Math', 'JSON', 'console'],
});
const validator = new JSAstValidator(preset);
const validation = await validator.validate(code);
if (!validation.valid) {
return { valid: false, error: 'Validation failed', issues: validation.issues };
}
// Step 3: Transform
const transformed = transformAgentScript(code, {
wrapInMain: true,
transformCallTool: true,
transformLoops: true,
});
return { valid: true, code: transformed };
}
// Usage
const result = await validateAndTransform(`
const users = await callTool('users:list', { limit: 10 });
return users.length;
`);
if (result.valid) {
console.log('Transformed code:', result.code);
} else {
console.log('Validation errors:', result.issues);
}