node-red/compiliance-js/preview-prompt.js
ruoyunbai d9b08c89ee js
2025-11-17 10:55:25 +08:00

49 lines
1.5 KiB
JavaScript

'use strict';
/**
* Usage: node compiliance-js/preview-prompt.js path/to/oas.json [operationId]
* Reads the OAS file, loads prepare-llm-request.js in a sandbox, and prints the prompt.
*/
const fs = require('fs');
const path = require('path');
const vm = require('vm');
const [, , oasPath, operationIdArg] = process.argv;
if (!oasPath) {
console.error('Usage: node compiliance-js/preview-prompt.js <oas.json> [operationId]');
process.exit(1);
}
const oas = JSON.parse(fs.readFileSync(oasPath, 'utf8'));
let code = fs.readFileSync(path.join(__dirname, 'prepare-llm-request.js'), 'utf8');
code = code.replace(/\nreturn\s+prepareLlmRequest\(msg,\s*node\);?\s*$/m, '\n');
const context = {
msg: { oas_def: oas, operationId: operationIdArg || 'createResource' },
node: {
error: (err) => { throw new Error(err); },
warn: (...args) => console.warn('[WARN]', ...args),
log: (...args) => console.log('[LOG]', ...args),
},
console,
Buffer,
process,
require,
setTimeout,
env: { get: () => undefined },
};
vm.createContext(context);
vm.runInContext(code, context);
if (!context.buildPrompt || !context.resolveOperationContext || !context.extractOpenApiDocument) {
throw new Error('Failed to load helper functions from prepare-llm-request.js');
}
const apiDoc = context.extractOpenApiDocument(context.msg);
const operationCtx = context.resolveOperationContext(context.msg, apiDoc);
const prompt = context.buildPrompt(operationCtx, apiDoc, context.msg);
console.log(prompt);