create-eliza
Version:
Initialize an Eliza project
175 lines (171 loc) • 6.64 kB
JavaScript
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
import {
buildProject
} from "./chunk-KMSIPPQV.js";
import {
runBunCommand
} from "./chunk-FPOBH723.js";
import {
handleError
} from "./chunk-252SDPU3.js";
import {
logger,
require_semver
} from "./chunk-2ORHBMCI.js";
import {
require_prompts
} from "./chunk-OGSHIQ3J.js";
import {
Command
} from "./chunk-S757QXWN.js";
import {
__toESM
} from "./chunk-WCMDOJQK.js";
// src/commands/update.ts
import { existsSync, readFileSync } from "node:fs";
import fs from "node:fs/promises";
import path from "node:path";
var import_prompts = __toESM(require_prompts(), 1);
var import_semver = __toESM(require_semver(), 1);
function getCurrentCliVersion() {
try {
const packageJsonPath = path.resolve(__dirname, "../package.json");
const packageJsonContent = readFileSync(packageJsonPath, "utf8");
const packageJson = JSON.parse(packageJsonContent);
return packageJson.version || "0.0.0";
} catch (error) {
try {
const packageJsonPath = path.resolve(__dirname, "../../package.json");
if (existsSync(packageJsonPath)) {
const packageJsonContent = readFileSync(packageJsonPath, "utf8");
const packageJson = JSON.parse(packageJsonContent);
return packageJson.version || "0.0.0";
}
} catch (nestedError) {
}
logger.warn(`Could not determine CLI version: ${error.message}`);
return "0.0.0";
}
}
function isWorkspaceVersion(versionString) {
return versionString === "workspace:*" || versionString === "workspace" || versionString.startsWith("workspace:");
}
async function updateDependencies(cwd, isPlugin) {
logger.info(`Updating ${isPlugin ? "plugin" : "project"} dependencies...`);
const cliVersion = getCurrentCliVersion();
logger.info(`Current CLI version: ${cliVersion}`);
try {
const packageJsonPath = path.join(cwd, "package.json");
if (!existsSync(packageJsonPath)) {
logger.error("package.json not found in the current directory");
return;
}
const packageJsonContent = await fs.readFile(packageJsonPath, "utf8");
const packageJson = JSON.parse(packageJsonContent);
const dependencies = packageJson.dependencies || {};
const devDependencies = packageJson.devDependencies || {};
const elizaPackages = [
...Object.entries(dependencies),
...Object.entries(devDependencies)
].filter(([pkg]) => pkg.startsWith("@elizaos/")).map(([pkg, version]) => ({ name: pkg, version }));
if (elizaPackages.length === 0) {
logger.info("No ElizaOS packages found to update");
return;
}
const workspacePackages = elizaPackages.filter((pkg) => isWorkspaceVersion(pkg.version));
if (workspacePackages.length > 0) {
logger.info(`Found ${workspacePackages.length} workspace references: ${workspacePackages.map((p) => p.name).join(", ")}`);
logger.info("Skipping update for workspace packages as they should be managed by the monorepo");
const packagesToUpdate = elizaPackages.filter((pkg) => !isWorkspaceVersion(pkg.version));
if (packagesToUpdate.length === 0) {
logger.info("No non-workspace ElizaOS packages to update");
return;
}
logger.info(`Will update ${packagesToUpdate.length} non-workspace packages: ${packagesToUpdate.map((p) => p.name).join(", ")}`);
elizaPackages.length = 0;
elizaPackages.push(...packagesToUpdate);
} else {
logger.info(`Found ${elizaPackages.length} ElizaOS packages: ${elizaPackages.map((p) => p.name).join(", ")}`);
}
const hasMajorUpdates = elizaPackages.some((pkg) => {
const pkgVersion = String(pkg.version).replace(/^\^|~/, "");
return pkgVersion && cliVersion && import_semver.default.major(cliVersion) > import_semver.default.major(pkgVersion);
});
if (hasMajorUpdates) {
const { confirmMajor } = await (0, import_prompts.default)({
type: "confirm",
name: "confirmMajor",
message: "Major version updates detected. This may include breaking changes. Continue?",
initial: false
});
if (!confirmMajor) {
logger.info("Update canceled");
return;
}
}
for (const pkg of elizaPackages) {
try {
logger.info(`Updating ${pkg.name} to version ${cliVersion}...`);
await runBunCommand(["add", `${pkg.name}@${cliVersion}`], cwd);
} catch (error) {
logger.error(`Failed to update ${pkg.name}: ${error.message}`);
logger.info("Trying to use exact version match...");
try {
await runBunCommand(["add", pkg.name], cwd);
} catch (secondError) {
logger.error(`Failed to install ${pkg.name} after retrying: ${secondError.message}`);
}
}
}
logger.success("Dependencies updated successfully");
logger.info("Installing updated dependencies...");
await runBunCommand(["install"], cwd);
await buildProject(cwd, isPlugin);
} catch (error) {
logger.error(`Error updating dependencies: ${error.message}`);
}
}
function checkIfPluginDir(dir) {
const packageJsonPath = path.join(dir, "package.json");
if (!existsSync(packageJsonPath)) {
return false;
}
try {
const packageJsonContent = readFileSync(packageJsonPath, "utf8");
const packageJson = JSON.parse(packageJsonContent);
if (packageJson.name?.startsWith("@elizaos/plugin-")) {
return true;
}
const keywords = packageJson.keywords || [];
return keywords.includes("elizaos-plugin");
} catch {
return false;
}
}
var update = new Command().name("update").description("Update ElizaOS packages to the latest versions").option("--check", "Check for available updates without applying them").option("--skip-build", "Skip building after updating").action(async (options) => {
try {
const cwd = process.cwd();
const isPlugin = checkIfPluginDir(cwd);
logger.info(`Detected ${isPlugin ? "plugin" : "project"} directory`);
if (options.check) {
logger.info("Checking for available updates...");
const cliVersion = getCurrentCliVersion();
logger.info(`Current CLI version: ${cliVersion}`);
logger.info("To apply updates, run this command without the --check flag");
return;
}
await updateDependencies(cwd, isPlugin);
logger.success(`${isPlugin ? "Plugin" : "Project"} successfully updated to the latest ElizaOS packages`);
} catch (error) {
handleError(error);
}
});
function registerCommand(cli) {
return cli.addCommand(update);
}
export {
update,
registerCommand
};
//# sourceMappingURL=chunk-MB4HAOA5.js.map