@savestate/cli 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -147,6 +147,15 @@ savestate config View/edit configuration
147
147
  --set <key=value> Set a config value
148
148
  --json Output as JSON
149
149
  savestate adapters List available adapters
150
+ savestate schedule Configure auto-backups (Pro/Team)
151
+ --every <interval> Backup interval (1h, 6h, 12h, 1d)
152
+ --disable Disable scheduled backups
153
+ --status Show schedule status
154
+ savestate migrate Migration wizard between platforms
155
+ --from <platform> Source platform
156
+ --to <platform> Target platform
157
+ --list Show platform capabilities
158
+ --dry-run Preview migration plan
150
159
  ```
151
160
 
152
161
  ## Storage Backends
package/dist/cli.js CHANGED
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import { Command } from 'commander';
17
17
  import { initCommand, snapshotCommand, restoreCommand, listCommand, diffCommand, configCommand, adaptersCommand, } from './commands/index.js';
18
+ import { loginCommand, logoutCommand } from './commands/login.js';
18
19
  const program = new Command();
19
20
  program
20
21
  .name('savestate')
@@ -33,6 +34,7 @@ program
33
34
  .option('-t, --tags <tags>', 'Comma-separated tags')
34
35
  .option('-a, --adapter <adapter>', 'Adapter to use (default: auto-detect)')
35
36
  .option('-s, --schedule <interval>', 'Set up auto-snapshot schedule (e.g., 6h, 1d)')
37
+ .option('--full', 'Force a full snapshot (skip incremental)')
36
38
  .action(snapshotCommand);
37
39
  // ─── savestate restore ───────────────────────────────────────
38
40
  program
@@ -67,6 +69,46 @@ program
67
69
  .command('adapters')
68
70
  .description('List available platform adapters')
69
71
  .action(adaptersCommand);
72
+ // ─── savestate search ────────────────────────────────────────
73
+ import { searchCommand } from './commands/search.js';
74
+ program
75
+ .command('search <query>')
76
+ .description('Search across all snapshots')
77
+ .option('--type <type>', 'Filter by type (memory, conversation, identity)')
78
+ .option('--limit <n>', 'Maximum results')
79
+ .option('--snapshot <id>', 'Search within a specific snapshot')
80
+ .action(searchCommand);
81
+ // ─── savestate login ─────────────────────────────────────────
82
+ program
83
+ .command('login')
84
+ .description('Authenticate with SaveState cloud')
85
+ .option('-k, --key <api-key>', 'API key (or enter interactively)')
86
+ .action(loginCommand);
87
+ // ─── savestate logout ────────────────────────────────────────
88
+ program
89
+ .command('logout')
90
+ .description('Remove saved API key')
91
+ .action(logoutCommand);
92
+ // ─── savestate schedule ──────────────────────────────────────
93
+ import { scheduleCommand } from './commands/schedule.js';
94
+ program
95
+ .command('schedule')
96
+ .description('Configure automatic backup schedule (Pro/Team)')
97
+ .option('-e, --every <interval>', 'Backup interval (e.g., 1h, 6h, 12h, 1d)')
98
+ .option('-d, --disable', 'Disable scheduled backups')
99
+ .option('-s, --status', 'Show schedule status')
100
+ .action(scheduleCommand);
101
+ // ─── savestate migrate ───────────────────────────────────────
102
+ import { migrateCommand } from './commands/migrate.js';
103
+ program
104
+ .command('migrate')
105
+ .description('Migrate AI identity between platforms (ChatGPT → Claude, etc.)')
106
+ .option('-f, --from <platform>', 'Source platform to migrate from')
107
+ .option('-t, --to <platform>', 'Target platform to migrate to')
108
+ .option('-s, --snapshot <id>', 'Use existing snapshot instead of creating new one')
109
+ .option('--dry-run', 'Show migration plan without making changes')
110
+ .option('-l, --list', 'List available platforms and their capabilities')
111
+ .action(migrateCommand);
70
112
  // ─── Parse & run ─────────────────────────────────────────────
71
113
  program.parse();
72
114
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,qEAAqE,CAAC;KAClF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gEAAgE;AAEhE,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,gEAAgE;AAEhE,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;KACvE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;KACnD,MAAM,CAAC,yBAAyB,EAAE,uCAAuC,CAAC;KAC1E,MAAM,CAAC,2BAA2B,EAAE,8CAA8C,CAAC;KACnF,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,gEAAgE;AAEhE,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;KAC5D,MAAM,CAAC,WAAW,EAAE,oDAAoD,CAAC;KACzE,MAAM,CAAC,wBAAwB,EAAE,kEAAkE,CAAC;KACpG,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,gEAAgE;AAEhE,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,aAAa,EAAE,qCAAqC,CAAC;KAC5D,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,gEAAgE;AAEhE,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,gEAAgE;AAEhE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,gEAAgE;AAEhE,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,gEAAgE;AAEhE,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * savestate login — Authenticate with SaveState cloud
3
+ */
4
+ interface LoginOptions {
5
+ key?: string;
6
+ }
7
+ export declare function loginCommand(options: LoginOptions): Promise<void>;
8
+ /**
9
+ * savestate logout — Remove API key
10
+ */
11
+ export declare function logoutCommand(): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsFvE;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBnD"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * savestate login — Authenticate with SaveState cloud
3
+ */
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import { loadConfig, saveConfig, isInitialized } from '../config.js';
7
+ const API_BASE = 'https://savestate.dev/api';
8
+ export async function loginCommand(options) {
9
+ console.log();
10
+ if (!isInitialized()) {
11
+ console.log(chalk.red('✗ SaveState not initialized. Run `savestate init` first.'));
12
+ process.exit(1);
13
+ }
14
+ let apiKey = options.key;
15
+ // If no key provided, prompt for it
16
+ if (!apiKey) {
17
+ const readline = await import('node:readline');
18
+ const rl = readline.createInterface({
19
+ input: process.stdin,
20
+ output: process.stdout,
21
+ });
22
+ apiKey = await new Promise((resolve) => {
23
+ rl.question(chalk.dim(' API Key: '), (answer) => {
24
+ rl.close();
25
+ resolve(answer.trim());
26
+ });
27
+ });
28
+ }
29
+ if (!apiKey || !apiKey.startsWith('ss_live_')) {
30
+ console.log(chalk.red('✗ Invalid API key. Keys start with ss_live_'));
31
+ console.log(chalk.dim(' Get your key at https://savestate.dev/account'));
32
+ console.log();
33
+ process.exit(1);
34
+ }
35
+ // Validate the key against the API
36
+ const spinner = ora('Validating API key...').start();
37
+ try {
38
+ const res = await fetch(`${API_BASE}/account`, {
39
+ headers: { Authorization: `Bearer ${apiKey}` },
40
+ });
41
+ if (!res.ok) {
42
+ spinner.fail('Invalid API key');
43
+ const body = await res.json().catch(() => ({}));
44
+ console.log(chalk.red(` ${body.error || 'Authentication failed'}`));
45
+ console.log();
46
+ process.exit(1);
47
+ }
48
+ const account = await res.json();
49
+ // Save to config
50
+ const config = await loadConfig();
51
+ // Extend config with cloud auth fields
52
+ const extConfig = config;
53
+ extConfig.apiKey = apiKey;
54
+ extConfig.account = {
55
+ email: account.email,
56
+ tier: account.tier,
57
+ };
58
+ await saveConfig(config);
59
+ spinner.succeed('Authenticated!');
60
+ console.log();
61
+ console.log(` ${chalk.dim('Account:')} ${chalk.cyan(account.email)}`);
62
+ console.log(` ${chalk.dim('Tier:')} ${chalk.green(account.tier.toUpperCase())}`);
63
+ console.log(` ${chalk.dim('Features:')} ${account.features.length} enabled`);
64
+ if (account.storage.limit > 0) {
65
+ console.log(` ${chalk.dim('Storage:')} ${formatBytes(account.storage.limit)} cloud storage`);
66
+ }
67
+ console.log();
68
+ console.log(chalk.dim(' Your API key is saved locally. Cloud features are now unlocked.'));
69
+ console.log();
70
+ }
71
+ catch (err) {
72
+ spinner.fail('Connection failed');
73
+ console.log(chalk.red(` Could not reach ${API_BASE}`));
74
+ console.log(chalk.dim(' Check your internet connection and try again.'));
75
+ console.log();
76
+ process.exit(1);
77
+ }
78
+ }
79
+ /**
80
+ * savestate logout — Remove API key
81
+ */
82
+ export async function logoutCommand() {
83
+ console.log();
84
+ if (!isInitialized()) {
85
+ console.log(chalk.red('✗ SaveState not initialized.'));
86
+ process.exit(1);
87
+ }
88
+ const config = await loadConfig();
89
+ const extConfig = config;
90
+ const hadKey = !!extConfig.apiKey;
91
+ delete extConfig.apiKey;
92
+ delete extConfig.account;
93
+ await saveConfig(config);
94
+ if (hadKey) {
95
+ console.log(chalk.green(' ✓ Logged out. API key removed.'));
96
+ }
97
+ else {
98
+ console.log(chalk.dim(' Not logged in.'));
99
+ }
100
+ console.log();
101
+ }
102
+ function formatBytes(bytes) {
103
+ if (bytes < 1024)
104
+ return `${bytes} B`;
105
+ if (bytes < 1024 * 1024)
106
+ return `${(bytes / 1024).toFixed(1)} KB`;
107
+ if (bytes < 1024 * 1024 * 1024)
108
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
109
+ return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
110
+ }
111
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * savestate migrate — Cross-platform AI identity migration wizard
3
+ *
4
+ * Helps users move their AI identity from one platform to another:
5
+ * - ChatGPT → Claude
6
+ * - Claude → Gemini
7
+ * - OpenAI Assistants → Clawdbot
8
+ * - etc.
9
+ *
10
+ * This is a guided wizard with clear explanations.
11
+ */
12
+ interface MigrateOptions {
13
+ from?: string;
14
+ to?: string;
15
+ snapshot?: string;
16
+ dryRun?: boolean;
17
+ list?: boolean;
18
+ }
19
+ export declare function migrateCommand(options: MigrateOptions): Promise<void>;
20
+ export {};
21
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAYD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4L3E"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * savestate migrate — Cross-platform AI identity migration wizard
3
+ *
4
+ * Helps users move their AI identity from one platform to another:
5
+ * - ChatGPT → Claude
6
+ * - Claude → Gemini
7
+ * - OpenAI Assistants → Clawdbot
8
+ * - etc.
9
+ *
10
+ * This is a guided wizard with clear explanations.
11
+ */
12
+ import chalk from 'chalk';
13
+ import ora from 'ora';
14
+ import * as readline from 'node:readline';
15
+ import { isInitialized, loadConfig } from '../config.js';
16
+ import { getAdapter, listAdapters } from '../adapters/registry.js';
17
+ import { createSnapshot } from '../snapshot.js';
18
+ import { restoreSnapshot } from '../restore.js';
19
+ import { resolveStorage } from '../storage/resolve.js';
20
+ import { getPassphrase } from '../passphrase.js';
21
+ // Platform migration capabilities (what each platform can do)
22
+ const PLATFORM_INFO = {
23
+ 'clawdbot': { extract: true, restore: true },
24
+ 'claude-code': { extract: true, restore: true },
25
+ 'openai-assistants': { extract: true, restore: true },
26
+ 'chatgpt': { extract: true, restore: false, note: 'Memory/instructions only' },
27
+ 'claude-web': { extract: true, restore: false, note: 'Memory/projects only' },
28
+ 'gemini': { extract: true, restore: false, note: 'Limited restore' },
29
+ };
30
+ export async function migrateCommand(options) {
31
+ console.log();
32
+ console.log(chalk.cyan.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
33
+ console.log(chalk.cyan.bold(' ⏸ SaveState Migration Wizard'));
34
+ console.log(chalk.cyan.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
35
+ console.log();
36
+ if (options.list) {
37
+ showPlatforms();
38
+ return;
39
+ }
40
+ if (!isInitialized()) {
41
+ console.log(chalk.red('✗ SaveState not initialized. Run `savestate init` first.'));
42
+ process.exit(1);
43
+ }
44
+ const config = await loadConfig();
45
+ const storage = resolveStorage(config);
46
+ // Interactive mode if not all options provided
47
+ if (!options.from || !options.to) {
48
+ console.log(chalk.white('This wizard helps you migrate your AI identity between platforms.'));
49
+ console.log(chalk.dim('Your data will be encrypted throughout the process.'));
50
+ console.log();
51
+ showPlatforms();
52
+ }
53
+ const rl = readline.createInterface({
54
+ input: process.stdin,
55
+ output: process.stdout,
56
+ });
57
+ const ask = (question) => {
58
+ return new Promise(resolve => {
59
+ rl.question(chalk.cyan(question), answer => resolve(answer.trim()));
60
+ });
61
+ };
62
+ try {
63
+ // Step 1: Select source platform
64
+ let sourceId = options.from;
65
+ if (!sourceId) {
66
+ sourceId = await ask('Source platform (migrate FROM): ');
67
+ }
68
+ const sourceAdapter = getAdapter(sourceId);
69
+ if (!sourceAdapter) {
70
+ console.log(chalk.red(`\n✗ Unknown platform: ${sourceId}`));
71
+ console.log(chalk.dim(` Available: ${listAdapters().join(', ')}`));
72
+ process.exit(1);
73
+ }
74
+ const sourceInfo = PLATFORM_INFO[sourceId];
75
+ if (!sourceInfo?.extract) {
76
+ console.log(chalk.red(`\n✗ ${sourceAdapter.name} doesn't support extraction`));
77
+ process.exit(1);
78
+ }
79
+ // Step 2: Select target platform
80
+ let targetId = options.to;
81
+ if (!targetId) {
82
+ targetId = await ask('Target platform (migrate TO): ');
83
+ }
84
+ const targetAdapter = getAdapter(targetId);
85
+ if (!targetAdapter) {
86
+ console.log(chalk.red(`\n✗ Unknown platform: ${targetId}`));
87
+ process.exit(1);
88
+ }
89
+ const targetInfo = PLATFORM_INFO[targetId];
90
+ if (!targetInfo?.restore) {
91
+ console.log(chalk.yellow(`\n⚠ ${targetAdapter.name} has limited restore support`));
92
+ if (targetInfo?.note) {
93
+ console.log(chalk.dim(` ${targetInfo.note}`));
94
+ }
95
+ const proceed = await ask('Continue anyway? (yes/no): ');
96
+ if (proceed.toLowerCase() !== 'yes' && proceed.toLowerCase() !== 'y') {
97
+ console.log(chalk.yellow('\nMigration cancelled.'));
98
+ rl.close();
99
+ return;
100
+ }
101
+ }
102
+ console.log();
103
+ console.log(chalk.white.bold('Migration Plan:'));
104
+ console.log();
105
+ console.log(` ${chalk.cyan('From:')} ${sourceAdapter.name}`);
106
+ console.log(` ${chalk.cyan('To:')} ${targetAdapter.name}`);
107
+ console.log();
108
+ // Show what will be migrated
109
+ console.log(chalk.white.bold('What will be migrated:'));
110
+ console.log();
111
+ console.log(` ${chalk.green('✓')} Identity (personality, instructions, system prompts)`);
112
+ console.log(` ${chalk.green('✓')} Memory (learned facts, preferences)`);
113
+ console.log(` ${chalk.green('✓')} Configuration (settings, tool configs)`);
114
+ if (sourceId === 'chatgpt' || sourceId === 'claude-web') {
115
+ console.log(` ${chalk.yellow('⚠')} Conversations ${chalk.dim('(preserved in snapshot, may not import to target)')}`);
116
+ }
117
+ else {
118
+ console.log(` ${chalk.green('✓')} Conversations (if supported by target)`);
119
+ }
120
+ console.log();
121
+ // Specific migration notes
122
+ if (sourceId === 'chatgpt') {
123
+ console.log(chalk.yellow.bold('Note for ChatGPT migration:'));
124
+ console.log(chalk.yellow(' Your ChatGPT memories and custom instructions will be exported.'));
125
+ console.log(chalk.yellow(' Conversation history is preserved but may not import elsewhere.'));
126
+ console.log();
127
+ }
128
+ if (options.dryRun) {
129
+ console.log(chalk.cyan.bold('DRY RUN — no changes will be made'));
130
+ console.log();
131
+ rl.close();
132
+ return;
133
+ }
134
+ // Confirm
135
+ const confirm = await ask('Proceed with migration? (yes/no): ');
136
+ if (confirm.toLowerCase() !== 'yes' && confirm.toLowerCase() !== 'y') {
137
+ console.log(chalk.yellow('\nMigration cancelled.'));
138
+ rl.close();
139
+ return;
140
+ }
141
+ console.log();
142
+ // Step 4: Get passphrase
143
+ const passphrase = await getPassphrase();
144
+ // Step 5: Create snapshot from source
145
+ const spinner1 = ora(`Extracting from ${sourceAdapter.name}...`).start();
146
+ let snapshotId = options.snapshot;
147
+ if (!snapshotId) {
148
+ try {
149
+ const result = await createSnapshot(sourceAdapter, storage, passphrase, {
150
+ label: `migration-from-${sourceId}`,
151
+ tags: ['migration', `from:${sourceId}`, `to:${targetId}`],
152
+ });
153
+ snapshotId = result.snapshot.manifest.id;
154
+ spinner1.succeed(`Snapshot created: ${chalk.cyan(snapshotId)}`);
155
+ }
156
+ catch (err) {
157
+ spinner1.fail('Failed to create snapshot');
158
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
159
+ process.exit(1);
160
+ }
161
+ }
162
+ else {
163
+ spinner1.succeed(`Using existing snapshot: ${chalk.cyan(snapshotId)}`);
164
+ }
165
+ // Step 6: Restore to target
166
+ const spinner2 = ora(`Restoring to ${targetAdapter.name}...`).start();
167
+ try {
168
+ await restoreSnapshot(snapshotId, targetAdapter, storage, passphrase);
169
+ spinner2.succeed(`Migration complete!`);
170
+ }
171
+ catch (err) {
172
+ spinner2.fail('Failed to restore');
173
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
174
+ console.log();
175
+ console.log(chalk.dim(`Your snapshot is preserved: ${snapshotId}`));
176
+ console.log(chalk.dim(`You can retry with: savestate restore ${snapshotId} --to ${targetId}`));
177
+ process.exit(1);
178
+ }
179
+ // Success
180
+ console.log();
181
+ console.log(chalk.green.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
182
+ console.log(chalk.green.bold(' ✓ Migration Successful!'));
183
+ console.log(chalk.green.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
184
+ console.log();
185
+ console.log(` Your AI identity has been migrated from ${chalk.cyan(sourceAdapter.name)}`);
186
+ console.log(` to ${chalk.cyan(targetAdapter.name)}.`);
187
+ console.log();
188
+ console.log(chalk.dim(` Snapshot preserved: ${snapshotId}`));
189
+ console.log(chalk.dim(` You can restore again anytime with:`));
190
+ console.log(chalk.dim(` savestate restore ${snapshotId} --to <platform>`));
191
+ console.log();
192
+ }
193
+ finally {
194
+ rl.close();
195
+ }
196
+ }
197
+ function showPlatforms() {
198
+ console.log(chalk.white.bold('Available Platforms:'));
199
+ console.log();
200
+ const adapterIds = listAdapters();
201
+ adapterIds.forEach(id => {
202
+ const adapter = getAdapter(id);
203
+ if (!adapter)
204
+ return;
205
+ const info = PLATFORM_INFO[id] || { extract: true, restore: true };
206
+ const extract = info.extract ? chalk.green('✓') : chalk.red('✗');
207
+ const restore = info.restore ? chalk.green('✓') : chalk.yellow('⚠');
208
+ let line = ` ${chalk.white(id.padEnd(20))} ${extract} extract ${restore} restore`;
209
+ if (info.note) {
210
+ line += chalk.dim(` (${info.note})`);
211
+ }
212
+ console.log(line);
213
+ });
214
+ console.log();
215
+ console.log(chalk.dim('Legend: ✓ = full support, ⚠ = partial/limited, ✗ = not supported'));
216
+ console.log();
217
+ }
218
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * savestate schedule — Configure automatic backup schedules
3
+ *
4
+ * Uses launchd (macOS) or systemd timers (Linux) for reliable scheduling.
5
+ * Requires Pro or Team tier for cloud-backed schedules.
6
+ */
7
+ interface ScheduleOptions {
8
+ every?: string;
9
+ disable?: boolean;
10
+ status?: boolean;
11
+ }
12
+ export declare function scheduleCommand(options: ScheduleOptions): Promise<void>;
13
+ export {};
14
+ //# sourceMappingURL=schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB7E"}