import { r as theme } from "./theme-CStEj1vt.js";
import { n as defaultRuntime } from "./runtime-CQSN8SGD.js";
import { n as runCommandWithRuntime } from "./cli-utils-CF_IHIl7.js";
import { t as formatHelpExamples } from "./help-format-lBwPCuwT.js";
import { i as migratePlanCommand, n as migrateDefaultCommand, r as migrateListCommand, t as migrateApplyCommand } from "./migrate--x8px7y8.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", false).option("--overwrite", "Overwrite conflicting target files after item-level backups", false).option("--json", "Output JSON", false))));
}
function readVerifyPluginApps(value) {
	return value === true;
}
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", false).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 Klaw backup").option("--force", "Allow dangerous options such as --no-backup", false).option("--json", "Output JSON", false)).addHelpText("after", () => `\n${theme.heading("Examples:")}\n${formatHelpExamples([
		["klaw migrate list", "Show available migration providers."],
		["klaw migrate hermes", "Preview Hermes migration, then prompt before applying."],
		["klaw migrate hermes --dry-run", "Preview Hermes migration only."],
		["klaw migrate apply hermes --yes", "Apply Hermes migration non-interactively after writing a verified backup."],
		["klaw migrate apply hermes --include-secrets --yes", "Include supported credentials in the migration."]
	])}`).action(async (provider, opts) => {
		await runCommandWithRuntime(defaultRuntime, async () => {
			await migrateDefaultCommand(defaultRuntime, {
				provider,
				source: opts.from,
				includeSecrets: Boolean(opts.includeSecrets),
				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 Klaw state")).action(async (provider, opts) => {
		await runCommandWithRuntime(defaultRuntime, async () => {
			await migratePlanCommand(defaultRuntime, {
				provider,
				source: opts.from,
				includeSecrets: Boolean(opts.includeSecrets),
				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 Klaw 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: Boolean(opts.includeSecrets),
				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 };
