@savestate/cli 0.7.0 → 0.8.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/dist/cli/__tests__/progress.test.d.ts +5 -0
- package/dist/cli/__tests__/progress.test.d.ts.map +1 -0
- package/dist/cli/__tests__/progress.test.js +212 -0
- package/dist/cli/__tests__/progress.test.js.map +1 -0
- package/dist/cli/__tests__/signal-handler.test.d.ts +5 -0
- package/dist/cli/__tests__/signal-handler.test.d.ts.map +1 -0
- package/dist/cli/__tests__/signal-handler.test.js +99 -0
- package/dist/cli/__tests__/signal-handler.test.js.map +1 -0
- package/dist/cli/__tests__/summary.test.d.ts +5 -0
- package/dist/cli/__tests__/summary.test.d.ts.map +1 -0
- package/dist/cli/__tests__/summary.test.js +242 -0
- package/dist/cli/__tests__/summary.test.js.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/progress.d.ts +86 -0
- package/dist/cli/progress.d.ts.map +1 -0
- package/dist/cli/progress.js +205 -0
- package/dist/cli/progress.js.map +1 -0
- package/dist/cli/prompts.d.ts +49 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +266 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/signal-handler.d.ts +63 -0
- package/dist/cli/signal-handler.d.ts.map +1 -0
- package/dist/cli/signal-handler.js +165 -0
- package/dist/cli/signal-handler.js.map +1 -0
- package/dist/cli/summary.d.ts +33 -0
- package/dist/cli/summary.d.ts.map +1 -0
- package/dist/cli/summary.js +296 -0
- package/dist/cli/summary.js.map +1 -0
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/migrate.d.ts +18 -4
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +324 -163
- package/dist/commands/migrate.js.map +1 -1
- package/dist/migrate/__tests__/capabilities.test.d.ts +7 -0
- package/dist/migrate/__tests__/capabilities.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/capabilities.test.js +90 -0
- package/dist/migrate/__tests__/capabilities.test.js.map +1 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.d.ts +7 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.js +889 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.js.map +1 -0
- package/dist/migrate/__tests__/edge-cases.test.d.ts +7 -0
- package/dist/migrate/__tests__/edge-cases.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/edge-cases.test.js +787 -0
- package/dist/migrate/__tests__/edge-cases.test.js.map +1 -0
- package/dist/migrate/__tests__/error-recovery.test.d.ts +7 -0
- package/dist/migrate/__tests__/error-recovery.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/error-recovery.test.js +461 -0
- package/dist/migrate/__tests__/error-recovery.test.js.map +1 -0
- package/dist/migrate/__tests__/integration.test.d.ts +7 -0
- package/dist/migrate/__tests__/integration.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/integration.test.js +536 -0
- package/dist/migrate/__tests__/integration.test.js.map +1 -0
- package/dist/migrate/__tests__/performance.test.d.ts +7 -0
- package/dist/migrate/__tests__/performance.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/performance.test.js +478 -0
- package/dist/migrate/__tests__/performance.test.js.map +1 -0
- package/dist/migrate/__tests__/registry.test.d.ts +7 -0
- package/dist/migrate/__tests__/registry.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/registry.test.js +167 -0
- package/dist/migrate/__tests__/registry.test.js.map +1 -0
- package/dist/migrate/compatibility.d.ts +47 -0
- package/dist/migrate/compatibility.d.ts.map +1 -0
- package/dist/migrate/compatibility.js +468 -0
- package/dist/migrate/compatibility.js.map +1 -0
- package/dist/migrate/extractors/__tests__/claude.test.d.ts +12 -0
- package/dist/migrate/extractors/__tests__/claude.test.d.ts.map +1 -0
- package/dist/migrate/extractors/__tests__/claude.test.js +789 -0
- package/dist/migrate/extractors/__tests__/claude.test.js.map +1 -0
- package/dist/migrate/extractors/claude.d.ts +69 -0
- package/dist/migrate/extractors/claude.d.ts.map +1 -0
- package/dist/migrate/extractors/claude.js +1136 -0
- package/dist/migrate/extractors/claude.js.map +1 -0
- package/dist/migrate/extractors/registry.js +3 -2
- package/dist/migrate/extractors/registry.js.map +1 -1
- package/dist/migrate/loaders/chatgpt.d.ts +72 -0
- package/dist/migrate/loaders/chatgpt.d.ts.map +1 -0
- package/dist/migrate/loaders/chatgpt.js +691 -0
- package/dist/migrate/loaders/chatgpt.js.map +1 -0
- package/dist/migrate/loaders/registry.js +3 -2
- package/dist/migrate/loaders/registry.js.map +1 -1
- package/dist/migrate/types.d.ts +2 -0
- package/dist/migrate/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Display
|
|
3
|
+
*
|
|
4
|
+
* Enhanced progress indicators for migration phases.
|
|
5
|
+
* Uses ora spinners with phase-specific styling.
|
|
6
|
+
*/
|
|
7
|
+
import { Ora } from 'ora';
|
|
8
|
+
import type { MigrationPhase, MigrationEvent } from '../migrate/index.js';
|
|
9
|
+
export interface PhaseProgress {
|
|
10
|
+
phase: MigrationPhase;
|
|
11
|
+
spinner: Ora;
|
|
12
|
+
startTime: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ProgressDisplayOptions {
|
|
15
|
+
/** Disable colors */
|
|
16
|
+
noColor?: boolean;
|
|
17
|
+
/** Verbose output */
|
|
18
|
+
verbose?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare class ProgressDisplay {
|
|
21
|
+
private spinner;
|
|
22
|
+
private currentPhase;
|
|
23
|
+
private phaseStartTime;
|
|
24
|
+
private verbose;
|
|
25
|
+
private noColor;
|
|
26
|
+
constructor(options?: ProgressDisplayOptions);
|
|
27
|
+
/**
|
|
28
|
+
* Handle migration events
|
|
29
|
+
*/
|
|
30
|
+
handleEvent: (event: MigrationEvent) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Start a new phase
|
|
33
|
+
*/
|
|
34
|
+
startPhase(phase: MigrationPhase, message?: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Complete current phase
|
|
37
|
+
*/
|
|
38
|
+
completePhase(phase: MigrationPhase, message?: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* Fail current phase
|
|
41
|
+
*/
|
|
42
|
+
failPhase(errorMessage: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Update progress percentage
|
|
45
|
+
*/
|
|
46
|
+
updateProgress(progress?: number, message?: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Show completion summary
|
|
49
|
+
*/
|
|
50
|
+
showComplete(data?: unknown): void;
|
|
51
|
+
/**
|
|
52
|
+
* Show error
|
|
53
|
+
*/
|
|
54
|
+
showError(error?: Error): void;
|
|
55
|
+
/**
|
|
56
|
+
* Log a message (preserving spinner)
|
|
57
|
+
*/
|
|
58
|
+
log(message: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Stop spinner (cleanup)
|
|
61
|
+
*/
|
|
62
|
+
stop(): void;
|
|
63
|
+
private createProgressBar;
|
|
64
|
+
private formatElapsed;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create a simple spinner
|
|
68
|
+
*/
|
|
69
|
+
export declare function createSpinner(text: string): Ora;
|
|
70
|
+
/**
|
|
71
|
+
* Show a success message with checkmark
|
|
72
|
+
*/
|
|
73
|
+
export declare function success(message: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* Show a warning message
|
|
76
|
+
*/
|
|
77
|
+
export declare function warning(message: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* Show an error message
|
|
80
|
+
*/
|
|
81
|
+
export declare function error(message: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Show an info message
|
|
84
|
+
*/
|
|
85
|
+
export declare function info(message: string): void;
|
|
86
|
+
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/cli/progress.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1E,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAeD,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,GAAE,sBAA2B;IAKhD;;OAEG;IACH,WAAW,GAAI,OAAO,cAAc,KAAG,IAAI,CA0BzC;IAEF;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAiBzD;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAW5D;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAOrC;;OAEG;IACH,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAezD;;OAEG;IACH,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAQlC;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAY9B;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAU1B;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,aAAa;CAOtB;AAID;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAE/C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Display
|
|
3
|
+
*
|
|
4
|
+
* Enhanced progress indicators for migration phases.
|
|
5
|
+
* Uses ora spinners with phase-specific styling.
|
|
6
|
+
*/
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
// ─── Phase Icons & Colors ────────────────────────────────────
|
|
10
|
+
const PHASE_CONFIG = {
|
|
11
|
+
pending: { icon: '○', color: chalk.dim, label: 'Pending' },
|
|
12
|
+
extracting: { icon: '📤', color: chalk.blue, label: 'Extracting' },
|
|
13
|
+
transforming: { icon: '🔄', color: chalk.yellow, label: 'Transforming' },
|
|
14
|
+
loading: { icon: '📥', color: chalk.magenta, label: 'Loading' },
|
|
15
|
+
complete: { icon: '✓', color: chalk.green, label: 'Complete' },
|
|
16
|
+
failed: { icon: '✗', color: chalk.red, label: 'Failed' },
|
|
17
|
+
};
|
|
18
|
+
// ─── Progress Display Class ──────────────────────────────────
|
|
19
|
+
export class ProgressDisplay {
|
|
20
|
+
spinner = null;
|
|
21
|
+
currentPhase = 'pending';
|
|
22
|
+
phaseStartTime = 0;
|
|
23
|
+
verbose;
|
|
24
|
+
noColor;
|
|
25
|
+
constructor(options = {}) {
|
|
26
|
+
this.verbose = options.verbose ?? false;
|
|
27
|
+
this.noColor = options.noColor ?? false;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Handle migration events
|
|
31
|
+
*/
|
|
32
|
+
handleEvent = (event) => {
|
|
33
|
+
switch (event.type) {
|
|
34
|
+
case 'phase:start':
|
|
35
|
+
this.startPhase(event.phase, event.message);
|
|
36
|
+
break;
|
|
37
|
+
case 'phase:complete':
|
|
38
|
+
this.completePhase(event.phase, event.message);
|
|
39
|
+
break;
|
|
40
|
+
case 'phase:error':
|
|
41
|
+
this.failPhase(event.error?.message || 'Unknown error');
|
|
42
|
+
break;
|
|
43
|
+
case 'progress':
|
|
44
|
+
this.updateProgress(event.progress, event.message);
|
|
45
|
+
break;
|
|
46
|
+
case 'checkpoint':
|
|
47
|
+
if (this.verbose) {
|
|
48
|
+
this.log(chalk.dim(` ⟳ Checkpoint: ${event.message}`));
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case 'complete':
|
|
52
|
+
this.showComplete(event.data);
|
|
53
|
+
break;
|
|
54
|
+
case 'error':
|
|
55
|
+
this.showError(event.error);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Start a new phase
|
|
61
|
+
*/
|
|
62
|
+
startPhase(phase, message) {
|
|
63
|
+
if (this.spinner) {
|
|
64
|
+
this.spinner.stop();
|
|
65
|
+
}
|
|
66
|
+
this.currentPhase = phase;
|
|
67
|
+
this.phaseStartTime = Date.now();
|
|
68
|
+
const config = PHASE_CONFIG[phase];
|
|
69
|
+
const text = message || `${config.label}...`;
|
|
70
|
+
this.spinner = ora({
|
|
71
|
+
text: `${config.icon} ${text}`,
|
|
72
|
+
color: this.noColor ? undefined : 'cyan',
|
|
73
|
+
}).start();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Complete current phase
|
|
77
|
+
*/
|
|
78
|
+
completePhase(phase, message) {
|
|
79
|
+
const elapsed = this.formatElapsed(Date.now() - this.phaseStartTime);
|
|
80
|
+
const config = PHASE_CONFIG[phase];
|
|
81
|
+
if (this.spinner) {
|
|
82
|
+
const text = message || config.label;
|
|
83
|
+
this.spinner.succeed(`${config.icon} ${text} ${chalk.dim(`(${elapsed})`)}`);
|
|
84
|
+
this.spinner = null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Fail current phase
|
|
89
|
+
*/
|
|
90
|
+
failPhase(errorMessage) {
|
|
91
|
+
if (this.spinner) {
|
|
92
|
+
this.spinner.fail(`Failed: ${errorMessage}`);
|
|
93
|
+
this.spinner = null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Update progress percentage
|
|
98
|
+
*/
|
|
99
|
+
updateProgress(progress, message) {
|
|
100
|
+
if (!this.spinner)
|
|
101
|
+
return;
|
|
102
|
+
const config = PHASE_CONFIG[this.currentPhase];
|
|
103
|
+
let text = message || config.label;
|
|
104
|
+
if (progress !== undefined) {
|
|
105
|
+
const percent = Math.round(progress);
|
|
106
|
+
const bar = this.createProgressBar(progress);
|
|
107
|
+
text = `${text} ${bar} ${percent}%`;
|
|
108
|
+
}
|
|
109
|
+
this.spinner.text = `${config.icon} ${text}`;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Show completion summary
|
|
113
|
+
*/
|
|
114
|
+
showComplete(data) {
|
|
115
|
+
console.log();
|
|
116
|
+
console.log(chalk.green.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
117
|
+
console.log(chalk.green.bold(' ✓ Migration Complete!'));
|
|
118
|
+
console.log(chalk.green.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
119
|
+
console.log();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Show error
|
|
123
|
+
*/
|
|
124
|
+
showError(error) {
|
|
125
|
+
console.log();
|
|
126
|
+
console.log(chalk.red.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
127
|
+
console.log(chalk.red.bold(' ✗ Migration Failed'));
|
|
128
|
+
console.log(chalk.red.bold('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
|
|
129
|
+
if (error) {
|
|
130
|
+
console.log();
|
|
131
|
+
console.log(chalk.red(` ${error.message}`));
|
|
132
|
+
}
|
|
133
|
+
console.log();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Log a message (preserving spinner)
|
|
137
|
+
*/
|
|
138
|
+
log(message) {
|
|
139
|
+
if (this.spinner) {
|
|
140
|
+
this.spinner.stop();
|
|
141
|
+
console.log(message);
|
|
142
|
+
this.spinner.start();
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
console.log(message);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Stop spinner (cleanup)
|
|
150
|
+
*/
|
|
151
|
+
stop() {
|
|
152
|
+
if (this.spinner) {
|
|
153
|
+
this.spinner.stop();
|
|
154
|
+
this.spinner = null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// ─── Helpers ─────────────────────────────────────────────────
|
|
158
|
+
createProgressBar(progress, width = 20) {
|
|
159
|
+
const filled = Math.round((progress / 100) * width);
|
|
160
|
+
const empty = width - filled;
|
|
161
|
+
const bar = '█'.repeat(filled) + '░'.repeat(empty);
|
|
162
|
+
return this.noColor ? `[${bar}]` : chalk.cyan(`[${bar}]`);
|
|
163
|
+
}
|
|
164
|
+
formatElapsed(ms) {
|
|
165
|
+
if (ms < 1000)
|
|
166
|
+
return `${ms}ms`;
|
|
167
|
+
if (ms < 60000)
|
|
168
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
169
|
+
const minutes = Math.floor(ms / 60000);
|
|
170
|
+
const seconds = Math.round((ms % 60000) / 1000);
|
|
171
|
+
return `${minutes}m ${seconds}s`;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// ─── Convenience Functions ───────────────────────────────────
|
|
175
|
+
/**
|
|
176
|
+
* Create a simple spinner
|
|
177
|
+
*/
|
|
178
|
+
export function createSpinner(text) {
|
|
179
|
+
return ora({ text }).start();
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Show a success message with checkmark
|
|
183
|
+
*/
|
|
184
|
+
export function success(message) {
|
|
185
|
+
console.log(chalk.green('✓') + ' ' + message);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Show a warning message
|
|
189
|
+
*/
|
|
190
|
+
export function warning(message) {
|
|
191
|
+
console.log(chalk.yellow('⚠') + ' ' + message);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Show an error message
|
|
195
|
+
*/
|
|
196
|
+
export function error(message) {
|
|
197
|
+
console.log(chalk.red('✗') + ' ' + message);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Show an info message
|
|
201
|
+
*/
|
|
202
|
+
export function info(message) {
|
|
203
|
+
console.log(chalk.blue('ℹ') + ' ' + message);
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/cli/progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Prompts
|
|
3
|
+
*
|
|
4
|
+
* Lightweight interactive prompts using native readline with nice styling.
|
|
5
|
+
* Supports both interactive and non-interactive modes.
|
|
6
|
+
*/
|
|
7
|
+
import type { Platform } from '../migrate/types.js';
|
|
8
|
+
export interface SelectOption<T = string> {
|
|
9
|
+
value: T;
|
|
10
|
+
label: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface PromptOptions {
|
|
15
|
+
/** Skip prompts in non-interactive mode */
|
|
16
|
+
nonInteractive?: boolean;
|
|
17
|
+
/** Disable colors */
|
|
18
|
+
noColor?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function setColorsEnabled(enabled: boolean): void;
|
|
21
|
+
/**
|
|
22
|
+
* Ask a simple question
|
|
23
|
+
*/
|
|
24
|
+
export declare function ask(question: string): Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Ask for confirmation (yes/no)
|
|
27
|
+
*/
|
|
28
|
+
export declare function confirm(message: string, defaultValue?: boolean): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Select from a list of options with arrow key navigation
|
|
31
|
+
*/
|
|
32
|
+
export declare function select<T>(message: string, options: SelectOption<T>[]): Promise<T>;
|
|
33
|
+
/**
|
|
34
|
+
* Multi-select from a list of options
|
|
35
|
+
*/
|
|
36
|
+
export declare function multiSelect<T>(message: string, options: SelectOption<T>[]): Promise<T[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Select a source platform
|
|
39
|
+
*/
|
|
40
|
+
export declare function selectSourcePlatform(): Promise<Platform>;
|
|
41
|
+
/**
|
|
42
|
+
* Select a target platform
|
|
43
|
+
*/
|
|
44
|
+
export declare function selectTargetPlatform(source: Platform): Promise<Platform>;
|
|
45
|
+
/**
|
|
46
|
+
* Select content types to include
|
|
47
|
+
*/
|
|
48
|
+
export declare function selectContentTypes(): Promise<string[]>;
|
|
49
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKpD,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,MAAM;IACtC,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEvD;AAkBD;;GAEG;AACH,wBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3D;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CASrF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GACzB,OAAO,CAAC,CAAC,CAAC,CAiFZ;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GACzB,OAAO,CAAC,CAAC,EAAE,CAAC,CAkFd;AAID;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,QAAQ,CAAC,CAS9D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAW9E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAU5D"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Prompts
|
|
3
|
+
*
|
|
4
|
+
* Lightweight interactive prompts using native readline with nice styling.
|
|
5
|
+
* Supports both interactive and non-interactive modes.
|
|
6
|
+
*/
|
|
7
|
+
import * as readline from 'node:readline';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { PLATFORM_CAPABILITIES } from '../migrate/capabilities.js';
|
|
10
|
+
// ─── Color Wrapper ───────────────────────────────────────────
|
|
11
|
+
let colorsEnabled = true;
|
|
12
|
+
export function setColorsEnabled(enabled) {
|
|
13
|
+
colorsEnabled = enabled;
|
|
14
|
+
}
|
|
15
|
+
function c(fn, text) {
|
|
16
|
+
return colorsEnabled ? fn(text) : text;
|
|
17
|
+
}
|
|
18
|
+
// ─── Core Prompt Functions ───────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* Create readline interface
|
|
21
|
+
*/
|
|
22
|
+
function createInterface() {
|
|
23
|
+
return readline.createInterface({
|
|
24
|
+
input: process.stdin,
|
|
25
|
+
output: process.stdout,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Ask a simple question
|
|
30
|
+
*/
|
|
31
|
+
export async function ask(question) {
|
|
32
|
+
const rl = createInterface();
|
|
33
|
+
return new Promise((resolve) => {
|
|
34
|
+
rl.question(c(chalk.cyan, question), (answer) => {
|
|
35
|
+
rl.close();
|
|
36
|
+
resolve(answer.trim());
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Ask for confirmation (yes/no)
|
|
42
|
+
*/
|
|
43
|
+
export async function confirm(message, defaultValue = false) {
|
|
44
|
+
const hint = defaultValue ? '(Y/n)' : '(y/N)';
|
|
45
|
+
const answer = await ask(`${message} ${c(chalk.dim, hint)} `);
|
|
46
|
+
if (answer === '') {
|
|
47
|
+
return defaultValue;
|
|
48
|
+
}
|
|
49
|
+
return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Select from a list of options with arrow key navigation
|
|
53
|
+
*/
|
|
54
|
+
export async function select(message, options) {
|
|
55
|
+
return new Promise((resolve) => {
|
|
56
|
+
let selectedIndex = options.findIndex((o) => !o.disabled);
|
|
57
|
+
if (selectedIndex === -1)
|
|
58
|
+
selectedIndex = 0;
|
|
59
|
+
const render = () => {
|
|
60
|
+
// Clear previous render
|
|
61
|
+
process.stdout.write('\x1B[2K\x1B[1A'.repeat(options.length + 1));
|
|
62
|
+
process.stdout.write('\x1B[2K');
|
|
63
|
+
// Print question
|
|
64
|
+
console.log(c(chalk.cyan, '?') + ' ' + c(chalk.white.bold, message));
|
|
65
|
+
// Print options
|
|
66
|
+
options.forEach((option, index) => {
|
|
67
|
+
const isSelected = index === selectedIndex;
|
|
68
|
+
const prefix = isSelected ? c(chalk.cyan, '❯') : ' ';
|
|
69
|
+
const label = option.disabled
|
|
70
|
+
? c(chalk.dim, option.label)
|
|
71
|
+
: isSelected
|
|
72
|
+
? c(chalk.cyan, option.label)
|
|
73
|
+
: option.label;
|
|
74
|
+
const desc = option.description ? ' ' + c(chalk.dim, `- ${option.description}`) : '';
|
|
75
|
+
console.log(` ${prefix} ${label}${desc}`);
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
// Initial render with blank lines
|
|
79
|
+
console.log('');
|
|
80
|
+
options.forEach(() => console.log(''));
|
|
81
|
+
render();
|
|
82
|
+
// Handle keyboard input
|
|
83
|
+
process.stdin.setRawMode(true);
|
|
84
|
+
process.stdin.resume();
|
|
85
|
+
process.stdin.setEncoding('utf8');
|
|
86
|
+
const onKeypress = (key) => {
|
|
87
|
+
// Handle arrow keys
|
|
88
|
+
if (key === '\x1B[A' || key === 'k') {
|
|
89
|
+
// Up arrow or k
|
|
90
|
+
do {
|
|
91
|
+
selectedIndex = (selectedIndex - 1 + options.length) % options.length;
|
|
92
|
+
} while (options[selectedIndex].disabled);
|
|
93
|
+
render();
|
|
94
|
+
}
|
|
95
|
+
else if (key === '\x1B[B' || key === 'j') {
|
|
96
|
+
// Down arrow or j
|
|
97
|
+
do {
|
|
98
|
+
selectedIndex = (selectedIndex + 1) % options.length;
|
|
99
|
+
} while (options[selectedIndex].disabled);
|
|
100
|
+
render();
|
|
101
|
+
}
|
|
102
|
+
else if (key === '\r' || key === '\n') {
|
|
103
|
+
// Enter
|
|
104
|
+
process.stdin.setRawMode(false);
|
|
105
|
+
process.stdin.removeListener('data', onKeypress);
|
|
106
|
+
process.stdin.pause();
|
|
107
|
+
// Clear and show selected value
|
|
108
|
+
process.stdout.write('\x1B[2K\x1B[1A'.repeat(options.length + 1));
|
|
109
|
+
process.stdout.write('\x1B[2K');
|
|
110
|
+
console.log(c(chalk.cyan, '✓') +
|
|
111
|
+
' ' +
|
|
112
|
+
c(chalk.white.bold, message) +
|
|
113
|
+
' ' +
|
|
114
|
+
c(chalk.cyan, options[selectedIndex].label));
|
|
115
|
+
resolve(options[selectedIndex].value);
|
|
116
|
+
}
|
|
117
|
+
else if (key === '\x03') {
|
|
118
|
+
// Ctrl+C
|
|
119
|
+
process.stdin.setRawMode(false);
|
|
120
|
+
process.stdin.removeListener('data', onKeypress);
|
|
121
|
+
process.stdin.pause();
|
|
122
|
+
process.exit(130);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
process.stdin.on('data', onKeypress);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Multi-select from a list of options
|
|
130
|
+
*/
|
|
131
|
+
export async function multiSelect(message, options) {
|
|
132
|
+
return new Promise((resolve) => {
|
|
133
|
+
let selectedIndex = 0;
|
|
134
|
+
const selected = new Set();
|
|
135
|
+
const render = () => {
|
|
136
|
+
// Clear previous render
|
|
137
|
+
process.stdout.write('\x1B[2K\x1B[1A'.repeat(options.length + 2));
|
|
138
|
+
process.stdout.write('\x1B[2K');
|
|
139
|
+
// Print question
|
|
140
|
+
console.log(c(chalk.cyan, '?') + ' ' + c(chalk.white.bold, message) + c(chalk.dim, ' (space to toggle, enter to confirm)'));
|
|
141
|
+
// Print options
|
|
142
|
+
options.forEach((option, index) => {
|
|
143
|
+
const isHighlighted = index === selectedIndex;
|
|
144
|
+
const isChecked = selected.has(index);
|
|
145
|
+
const cursor = isHighlighted ? c(chalk.cyan, '❯') : ' ';
|
|
146
|
+
const checkbox = isChecked ? c(chalk.green, '◉') : c(chalk.dim, '○');
|
|
147
|
+
const label = isHighlighted ? c(chalk.cyan, option.label) : option.label;
|
|
148
|
+
const desc = option.description ? ' ' + c(chalk.dim, `- ${option.description}`) : '';
|
|
149
|
+
console.log(` ${cursor} ${checkbox} ${label}${desc}`);
|
|
150
|
+
});
|
|
151
|
+
console.log(c(chalk.dim, ` ${selected.size} selected`));
|
|
152
|
+
};
|
|
153
|
+
// Initial render
|
|
154
|
+
console.log('');
|
|
155
|
+
options.forEach(() => console.log(''));
|
|
156
|
+
console.log('');
|
|
157
|
+
render();
|
|
158
|
+
process.stdin.setRawMode(true);
|
|
159
|
+
process.stdin.resume();
|
|
160
|
+
process.stdin.setEncoding('utf8');
|
|
161
|
+
const onKeypress = (key) => {
|
|
162
|
+
if (key === '\x1B[A' || key === 'k') {
|
|
163
|
+
selectedIndex = (selectedIndex - 1 + options.length) % options.length;
|
|
164
|
+
render();
|
|
165
|
+
}
|
|
166
|
+
else if (key === '\x1B[B' || key === 'j') {
|
|
167
|
+
selectedIndex = (selectedIndex + 1) % options.length;
|
|
168
|
+
render();
|
|
169
|
+
}
|
|
170
|
+
else if (key === ' ') {
|
|
171
|
+
// Space - toggle selection
|
|
172
|
+
if (selected.has(selectedIndex)) {
|
|
173
|
+
selected.delete(selectedIndex);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
selected.add(selectedIndex);
|
|
177
|
+
}
|
|
178
|
+
render();
|
|
179
|
+
}
|
|
180
|
+
else if (key === '\r' || key === '\n') {
|
|
181
|
+
process.stdin.setRawMode(false);
|
|
182
|
+
process.stdin.removeListener('data', onKeypress);
|
|
183
|
+
process.stdin.pause();
|
|
184
|
+
// Clear and show selected values
|
|
185
|
+
process.stdout.write('\x1B[2K\x1B[1A'.repeat(options.length + 2));
|
|
186
|
+
process.stdout.write('\x1B[2K');
|
|
187
|
+
const selectedLabels = [...selected].map((i) => options[i].label).join(', ');
|
|
188
|
+
console.log(c(chalk.cyan, '✓') +
|
|
189
|
+
' ' +
|
|
190
|
+
c(chalk.white.bold, message) +
|
|
191
|
+
' ' +
|
|
192
|
+
c(chalk.cyan, selectedLabels || 'none'));
|
|
193
|
+
resolve([...selected].map((i) => options[i].value));
|
|
194
|
+
}
|
|
195
|
+
else if (key === '\x03') {
|
|
196
|
+
process.stdin.setRawMode(false);
|
|
197
|
+
process.stdin.removeListener('data', onKeypress);
|
|
198
|
+
process.stdin.pause();
|
|
199
|
+
process.exit(130);
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
process.stdin.on('data', onKeypress);
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
// ─── Platform-Specific Prompts ───────────────────────────────
|
|
206
|
+
/**
|
|
207
|
+
* Select a source platform
|
|
208
|
+
*/
|
|
209
|
+
export async function selectSourcePlatform() {
|
|
210
|
+
const options = Object.entries(PLATFORM_CAPABILITIES)
|
|
211
|
+
.map(([id, cap]) => ({
|
|
212
|
+
value: id,
|
|
213
|
+
label: cap.name,
|
|
214
|
+
description: getSourceDescription(id),
|
|
215
|
+
}));
|
|
216
|
+
return select('Select source platform (migrate FROM):', options);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Select a target platform
|
|
220
|
+
*/
|
|
221
|
+
export async function selectTargetPlatform(source) {
|
|
222
|
+
const options = Object.entries(PLATFORM_CAPABILITIES)
|
|
223
|
+
.filter(([id]) => id !== source)
|
|
224
|
+
.map(([id, cap]) => ({
|
|
225
|
+
value: id,
|
|
226
|
+
label: cap.name,
|
|
227
|
+
description: getTargetDescription(id),
|
|
228
|
+
disabled: id === source,
|
|
229
|
+
}));
|
|
230
|
+
return select('Select target platform (migrate TO):', options);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Select content types to include
|
|
234
|
+
*/
|
|
235
|
+
export async function selectContentTypes() {
|
|
236
|
+
const options = [
|
|
237
|
+
{ value: 'instructions', label: 'Instructions', description: 'System prompts, personality' },
|
|
238
|
+
{ value: 'memories', label: 'Memories', description: 'Learned facts, preferences' },
|
|
239
|
+
{ value: 'conversations', label: 'Conversations', description: 'Chat history' },
|
|
240
|
+
{ value: 'files', label: 'Files', description: 'Uploaded documents' },
|
|
241
|
+
{ value: 'customBots', label: 'Custom Bots', description: 'GPTs, projects' },
|
|
242
|
+
];
|
|
243
|
+
return multiSelect('Select content to migrate:', options);
|
|
244
|
+
}
|
|
245
|
+
// ─── Helpers ─────────────────────────────────────────────────
|
|
246
|
+
function getSourceDescription(platform) {
|
|
247
|
+
const descriptions = {
|
|
248
|
+
chatgpt: 'OpenAI ChatGPT',
|
|
249
|
+
claude: 'Anthropic Claude',
|
|
250
|
+
gemini: 'Google Gemini',
|
|
251
|
+
copilot: 'Microsoft Copilot',
|
|
252
|
+
};
|
|
253
|
+
return descriptions[platform] || '';
|
|
254
|
+
}
|
|
255
|
+
function getTargetDescription(platform) {
|
|
256
|
+
const cap = PLATFORM_CAPABILITIES[platform];
|
|
257
|
+
const features = [];
|
|
258
|
+
if (cap.hasMemory)
|
|
259
|
+
features.push('memories');
|
|
260
|
+
if (cap.hasProjects)
|
|
261
|
+
features.push('projects');
|
|
262
|
+
if (cap.hasFiles)
|
|
263
|
+
features.push('files');
|
|
264
|
+
return features.length > 0 ? `Supports: ${features.join(', ')}` : '';
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"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"}
|