82 lines
1.6 KiB
JavaScript
Executable File
82 lines
1.6 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
const path = require("path");
|
|
const fs = require("fs");
|
|
|
|
function parseArgv() {
|
|
let toolName = process.argv[1];
|
|
let toolData = null;
|
|
|
|
if (toolName.endsWith("run-tool.js")) {
|
|
toolName = process.argv[2];
|
|
toolData = process.argv[3];
|
|
} else {
|
|
toolName = path.basename(toolName);
|
|
toolData = process.argv[2];
|
|
}
|
|
|
|
if (toolName.endsWith(".js")) {
|
|
toolName = toolName.slice(0, -3);
|
|
}
|
|
|
|
return [toolName, toolData];
|
|
}
|
|
|
|
function loadModule(toolName) {
|
|
const toolFileName = `${toolName}.js`;
|
|
const toolPath = path.resolve(
|
|
process.env["LLM_ROOT_DIR"],
|
|
`tools/${toolFileName}`,
|
|
);
|
|
try {
|
|
return require(toolPath);
|
|
} catch {
|
|
console.log(`Invalid tooltion: ${toolFileName}`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
function loadEnv(filePath) {
|
|
try {
|
|
const data = fs.readFileSync(filePath, "utf-8");
|
|
const lines = data.split("\n");
|
|
|
|
lines.forEach((line) => {
|
|
if (line.trim().startsWith("#") || line.trim() === "") return;
|
|
|
|
const [key, ...value] = line.split("=");
|
|
process.env[key.trim()] = value.join("=").trim();
|
|
});
|
|
} catch {}
|
|
}
|
|
|
|
const LLM_ROOT_DIR = path.resolve(__dirname, "..");
|
|
process.env["LLM_ROOT_DIR"] = LLM_ROOT_DIR;
|
|
|
|
loadEnv(path.resolve(LLM_ROOT_DIR, ".env"));
|
|
|
|
const [toolName, toolData] = parseArgv();
|
|
|
|
process.env["LLM_TOOL_NAME"] = toolName;
|
|
process.env["LLM_TOOL_CACHE_DIR"] = path.resolve(
|
|
LLM_ROOT_DIR,
|
|
"cache",
|
|
toolName,
|
|
);
|
|
|
|
if (!toolData) {
|
|
console.log("No json data");
|
|
process.exit(1);
|
|
}
|
|
|
|
let data = null;
|
|
try {
|
|
data = JSON.parse(toolData);
|
|
} catch {
|
|
console.log("Invalid json data");
|
|
process.exit(1);
|
|
}
|
|
|
|
const { run } = loadModule(toolName);
|
|
run(data);
|