UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

108 lines (107 loc) 6.81 kB
import { r as theme } from "./theme-vjDs9tao.js"; import { n as defaultRuntime } from "./runtime-B4lgFmsS.js"; import { n as runCommandWithRuntime } from "./cli-utils-Cuzzfy1Q.js"; import { t as formatHelpExamples } from "./help-format-CAcwboTs.js"; import { i as migratePlanCommand, n as migrateDefaultCommand, r as migrateListCommand, t as migrateApplyCommand } from "./migrate-DH1vbJwT.js"; //#region src/cli/program/register.migrate.ts function collectMigrationSkill(value, previous) { return [...previous ?? [], value]; } function collectMigrationPlugin(value, previous) { return [...previous ?? [], value]; } function readMigrationSkills(value) { if (!Array.isArray(value)) return; const skills = value.filter((item) => typeof item === "string").map((item) => item.trim()).filter((item) => item.length > 0); return skills.length > 0 ? skills : void 0; } function readMigrationPlugins(value) { if (!Array.isArray(value)) return; const plugins = value.filter((item) => typeof item === "string").map((item) => item.trim()).filter((item) => item.length > 0); return plugins.length > 0 ? plugins : void 0; } function addMigrationSkillOption(command) { return command.option("--skill <name>", "Select one skill to migrate by name or item id; repeat for multiple skills", collectMigrationSkill); } function addMigrationPluginOption(command) { return command.option("--plugin <name>", "Select one Codex plugin to migrate by name or item id; repeat for multiple plugins", collectMigrationPlugin); } function addVerifyPluginAppsOption(command) { return command.option("--verify-plugin-apps", "Codex only: verify source plugin app accessibility with app/list before planning native plugin activation", false); } function addMigrationOptions(command) { return addVerifyPluginAppsOption(addMigrationPluginOption(addMigrationSkillOption(command.option("--from <path>", "Source directory to migrate from").option("--include-secrets", "Import supported credentials and secrets").option("--no-auth-credentials", "Skip auth credential migration").option("--overwrite", "Overwrite conflicting target files after item-level backups", false).option("--json", "Output JSON", false)))); } function readVerifyPluginApps(value) { return value === true; } /** Register migration commands and shared provider/item selection flags. */ function registerMigrateCommand(program) { const migrate = addVerifyPluginAppsOption(program.command("migrate").description("Import state from another agent system").argument("[provider]", "Migration provider id, for example hermes").option("--from <path>", "Source directory to migrate from").option("--include-secrets", "Import supported credentials and secrets").option("--no-auth-credentials", "Skip auth credential migration").option("--overwrite", "Overwrite conflicting target files after item-level backups", false).option("--dry-run", "Preview only; do not apply changes", false).option("--yes", "Apply without prompting after preview", false).option("--skill <name>", "Select one skill to migrate by name or item id; repeat for multiple skills", collectMigrationSkill).option("--plugin <name>", "Select one Codex plugin to migrate by name or item id; repeat for multiple plugins", collectMigrationPlugin).option("--backup-output <path>", "Pre-migration backup archive path or directory").option("--no-backup", "Skip the pre-migration OpenClaw backup").option("--force", "Allow dangerous options such as --no-backup", false).option("--json", "Output JSON", false)).addHelpText("after", () => `\n${theme.heading("Examples:")}\n${formatHelpExamples([ ["openclaw migrate list", "Show available migration providers."], ["openclaw migrate hermes", "Preview Hermes migration, then prompt before applying."], ["openclaw migrate hermes --dry-run", "Preview Hermes migration only."], ["openclaw migrate apply hermes --yes", "Apply Hermes migration non-interactively after writing a verified backup."], ["openclaw migrate hermes --no-auth-credentials", "Preview and apply Hermes migration while skipping auth credential import."] ])}`).action(async (provider, opts) => { await runCommandWithRuntime(defaultRuntime, async () => { await migrateDefaultCommand(defaultRuntime, { provider, source: opts.from, includeSecrets: opts.includeSecrets === true ? true : void 0, authCredentials: opts.authCredentials, overwrite: Boolean(opts.overwrite), skills: readMigrationSkills(opts.skill), plugins: readMigrationPlugins(opts.plugin), verifyPluginApps: readVerifyPluginApps(opts.verifyPluginApps), dryRun: Boolean(opts.dryRun), yes: Boolean(opts.yes), backupOutput: opts.backupOutput, noBackup: opts.backup === false, force: Boolean(opts.force), json: Boolean(opts.json) }); }); }); migrate.command("list").description("List migration providers").option("--json", "Output JSON", false).action(async (opts) => { await runCommandWithRuntime(defaultRuntime, async () => { await migrateListCommand(defaultRuntime, { json: Boolean(opts.json) }); }); }); addMigrationOptions(migrate.command("plan <provider>").description("Preview a migration without changing OpenClaw state")).action(async (provider, opts) => { await runCommandWithRuntime(defaultRuntime, async () => { await migratePlanCommand(defaultRuntime, { provider, source: opts.from, includeSecrets: opts.includeSecrets === true ? true : void 0, authCredentials: opts.authCredentials, overwrite: Boolean(opts.overwrite), skills: readMigrationSkills(opts.skill), plugins: readMigrationPlugins(opts.plugin), verifyPluginApps: readVerifyPluginApps(opts.verifyPluginApps), json: Boolean(opts.json) }); }); }); addMigrationOptions(migrate.command("apply <provider>").description("Apply a migration after a verified backup")).option("--yes", "Apply without prompting", false).option("--backup-output <path>", "Pre-migration backup archive path or directory").option("--no-backup", "Skip the pre-migration OpenClaw backup").option("--force", "Allow dangerous options such as --no-backup", false).action(async (provider, opts) => { await runCommandWithRuntime(defaultRuntime, async () => { await migrateApplyCommand(defaultRuntime, { provider, source: opts.from, includeSecrets: opts.includeSecrets === true ? true : void 0, authCredentials: opts.authCredentials, overwrite: Boolean(opts.overwrite), skills: readMigrationSkills(opts.skill), plugins: readMigrationPlugins(opts.plugin), verifyPluginApps: readVerifyPluginApps(opts.verifyPluginApps), yes: Boolean(opts.yes), backupOutput: opts.backupOutput, noBackup: opts.backup === false, force: Boolean(opts.force), json: Boolean(opts.json) }); }); }); } //#endregion export { registerMigrateCommand };