create-eliza
Version:
Initialize an Eliza project
129 lines (125 loc) • 4.54 kB
JavaScript
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
import {
logger
} from "./chunk-UIEY2LL5.js";
// src/project.ts
import * as fs from "node:fs";
import path from "node:path";
function isPlugin(module) {
if (module && typeof module === "object" && typeof module.name === "string" && typeof module.description === "string") {
return true;
}
if (module && typeof module === "object" && module.default && typeof module.default === "object" && typeof module.default.name === "string" && typeof module.default.description === "string") {
return true;
}
for (const key in module) {
if (key !== "default" && module[key] && typeof module[key] === "object" && typeof module[key].name === "string" && typeof module[key].description === "string") {
return true;
}
}
return false;
}
function extractPlugin(module) {
if (module && typeof module === "object" && typeof module.name === "string" && typeof module.description === "string") {
return module;
}
if (module && typeof module === "object" && module.default && typeof module.default === "object" && typeof module.default.name === "string" && typeof module.default.description === "string") {
return module.default;
}
for (const key in module) {
if (key !== "default" && module[key] && typeof module[key] === "object" && typeof module[key].name === "string" && typeof module[key].description === "string") {
return module[key];
}
}
throw new Error("Could not extract plugin from module");
}
async function loadProject(dir) {
try {
const entryPoints = [
path.join(dir, "src/index.ts"),
path.join(dir, "src/index.js"),
path.join(dir, "dist/index.js"),
path.join(dir, "index.ts"),
path.join(dir, "index.js")
];
let projectModule = null;
for (const entryPoint of entryPoints) {
if (fs.existsSync(entryPoint)) {
try {
const importPath = path.resolve(entryPoint);
projectModule = await import(importPath);
logger.info(`Loaded project from ${entryPoint}`);
const exportKeys = Object.keys(projectModule);
logger.debug(`Module exports: ${exportKeys.join(", ")}`);
if (exportKeys.includes("default")) {
logger.debug(`Default export type: ${typeof projectModule.default}`);
if (typeof projectModule.default === "object" && projectModule.default !== null) {
logger.debug(`Default export keys: ${Object.keys(projectModule.default).join(", ")}`);
}
}
break;
} catch (error) {
logger.warn(`Failed to import project from ${entryPoint}:`, error);
}
}
}
if (!projectModule) {
throw new Error("Could not find project entry point");
}
const moduleIsPlugin = isPlugin(projectModule);
logger.debug(`Is this a plugin? ${moduleIsPlugin}`);
if (moduleIsPlugin) {
logger.info("Detected plugin module instead of project");
try {
const plugin = extractPlugin(projectModule);
logger.info(`Found plugin: ${plugin.name} - ${plugin.description}`);
const dummyCharacter = {
name: `Test Agent for ${plugin.name}`,
bio: `Test agent for running tests on the ${plugin.name} plugin`,
system: "You are a test agent for running plugin tests"
};
const dummyAgent = {
character: dummyCharacter,
plugins: [plugin]
};
return {
agents: [dummyAgent],
dir,
isPlugin: true,
pluginModule: plugin
};
} catch (error) {
logger.error("Error extracting plugin from module:", error);
throw error;
}
}
const agents = [];
for (const [key, value] of Object.entries(projectModule)) {
if (key === "default" && value && typeof value === "object") {
if (Array.isArray(value.agents)) {
agents.push(...value.agents);
} else if (value.character && value.init) {
agents.push(value);
}
} else if (value && typeof value === "object" && value.character && value.init) {
agents.push(value);
}
}
if (agents.length === 0) {
throw new Error("No agents found in project");
}
const project = {
agents,
dir
};
return project;
} catch (error) {
logger.error("Error loading project:", error);
throw error;
}
}
export {
loadProject
};
//# sourceMappingURL=chunk-6S5VTJZU.js.map