@savestate/cli 0.6.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.
Files changed (159) hide show
  1. package/dist/cli/__tests__/progress.test.d.ts +5 -0
  2. package/dist/cli/__tests__/progress.test.d.ts.map +1 -0
  3. package/dist/cli/__tests__/progress.test.js +212 -0
  4. package/dist/cli/__tests__/progress.test.js.map +1 -0
  5. package/dist/cli/__tests__/signal-handler.test.d.ts +5 -0
  6. package/dist/cli/__tests__/signal-handler.test.d.ts.map +1 -0
  7. package/dist/cli/__tests__/signal-handler.test.js +99 -0
  8. package/dist/cli/__tests__/signal-handler.test.js.map +1 -0
  9. package/dist/cli/__tests__/summary.test.d.ts +5 -0
  10. package/dist/cli/__tests__/summary.test.d.ts.map +1 -0
  11. package/dist/cli/__tests__/summary.test.js +242 -0
  12. package/dist/cli/__tests__/summary.test.js.map +1 -0
  13. package/dist/cli/index.d.ts +10 -0
  14. package/dist/cli/index.d.ts.map +1 -0
  15. package/dist/cli/index.js +10 -0
  16. package/dist/cli/index.js.map +1 -0
  17. package/dist/cli/progress.d.ts +86 -0
  18. package/dist/cli/progress.d.ts.map +1 -0
  19. package/dist/cli/progress.js +205 -0
  20. package/dist/cli/progress.js.map +1 -0
  21. package/dist/cli/prompts.d.ts +49 -0
  22. package/dist/cli/prompts.d.ts.map +1 -0
  23. package/dist/cli/prompts.js +266 -0
  24. package/dist/cli/prompts.js.map +1 -0
  25. package/dist/cli/signal-handler.d.ts +63 -0
  26. package/dist/cli/signal-handler.d.ts.map +1 -0
  27. package/dist/cli/signal-handler.js +165 -0
  28. package/dist/cli/signal-handler.js.map +1 -0
  29. package/dist/cli/summary.d.ts +33 -0
  30. package/dist/cli/summary.d.ts.map +1 -0
  31. package/dist/cli/summary.js +296 -0
  32. package/dist/cli/summary.js.map +1 -0
  33. package/dist/cli.js +7 -1
  34. package/dist/cli.js.map +1 -1
  35. package/dist/commands/migrate.d.ts +18 -4
  36. package/dist/commands/migrate.d.ts.map +1 -1
  37. package/dist/commands/migrate.js +324 -163
  38. package/dist/commands/migrate.js.map +1 -1
  39. package/dist/migrate/__tests__/capabilities.test.d.ts +7 -0
  40. package/dist/migrate/__tests__/capabilities.test.d.ts.map +1 -0
  41. package/dist/migrate/__tests__/capabilities.test.js +90 -0
  42. package/dist/migrate/__tests__/capabilities.test.js.map +1 -0
  43. package/dist/migrate/__tests__/chatgpt-loader.test.d.ts +7 -0
  44. package/dist/migrate/__tests__/chatgpt-loader.test.d.ts.map +1 -0
  45. package/dist/migrate/__tests__/chatgpt-loader.test.js +889 -0
  46. package/dist/migrate/__tests__/chatgpt-loader.test.js.map +1 -0
  47. package/dist/migrate/__tests__/claude-loader.test.d.ts +7 -0
  48. package/dist/migrate/__tests__/claude-loader.test.d.ts.map +1 -0
  49. package/dist/migrate/__tests__/claude-loader.test.js +544 -0
  50. package/dist/migrate/__tests__/claude-loader.test.js.map +1 -0
  51. package/dist/migrate/__tests__/edge-cases.test.d.ts +7 -0
  52. package/dist/migrate/__tests__/edge-cases.test.d.ts.map +1 -0
  53. package/dist/migrate/__tests__/edge-cases.test.js +787 -0
  54. package/dist/migrate/__tests__/edge-cases.test.js.map +1 -0
  55. package/dist/migrate/__tests__/error-recovery.test.d.ts +7 -0
  56. package/dist/migrate/__tests__/error-recovery.test.d.ts.map +1 -0
  57. package/dist/migrate/__tests__/error-recovery.test.js +461 -0
  58. package/dist/migrate/__tests__/error-recovery.test.js.map +1 -0
  59. package/dist/migrate/__tests__/integration.test.d.ts +7 -0
  60. package/dist/migrate/__tests__/integration.test.d.ts.map +1 -0
  61. package/dist/migrate/__tests__/integration.test.js +536 -0
  62. package/dist/migrate/__tests__/integration.test.js.map +1 -0
  63. package/dist/migrate/__tests__/orchestrator.test.d.ts +8 -0
  64. package/dist/migrate/__tests__/orchestrator.test.d.ts.map +1 -0
  65. package/dist/migrate/__tests__/orchestrator.test.js +355 -0
  66. package/dist/migrate/__tests__/orchestrator.test.js.map +1 -0
  67. package/dist/migrate/__tests__/performance.test.d.ts +7 -0
  68. package/dist/migrate/__tests__/performance.test.d.ts.map +1 -0
  69. package/dist/migrate/__tests__/performance.test.js +478 -0
  70. package/dist/migrate/__tests__/performance.test.js.map +1 -0
  71. package/dist/migrate/__tests__/registry.test.d.ts +7 -0
  72. package/dist/migrate/__tests__/registry.test.d.ts.map +1 -0
  73. package/dist/migrate/__tests__/registry.test.js +167 -0
  74. package/dist/migrate/__tests__/registry.test.js.map +1 -0
  75. package/dist/migrate/compatibility.d.ts +47 -0
  76. package/dist/migrate/compatibility.d.ts.map +1 -0
  77. package/dist/migrate/compatibility.js +468 -0
  78. package/dist/migrate/compatibility.js.map +1 -0
  79. package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts +12 -0
  80. package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts.map +1 -0
  81. package/dist/migrate/extractors/__tests__/chatgpt.test.js +522 -0
  82. package/dist/migrate/extractors/__tests__/chatgpt.test.js.map +1 -0
  83. package/dist/migrate/extractors/__tests__/claude.test.d.ts +12 -0
  84. package/dist/migrate/extractors/__tests__/claude.test.d.ts.map +1 -0
  85. package/dist/migrate/extractors/__tests__/claude.test.js +789 -0
  86. package/dist/migrate/extractors/__tests__/claude.test.js.map +1 -0
  87. package/dist/migrate/extractors/chatgpt.d.ts +70 -0
  88. package/dist/migrate/extractors/chatgpt.d.ts.map +1 -0
  89. package/dist/migrate/extractors/chatgpt.js +791 -0
  90. package/dist/migrate/extractors/chatgpt.js.map +1 -0
  91. package/dist/migrate/extractors/claude.d.ts +69 -0
  92. package/dist/migrate/extractors/claude.d.ts.map +1 -0
  93. package/dist/migrate/extractors/claude.js +1136 -0
  94. package/dist/migrate/extractors/claude.js.map +1 -0
  95. package/dist/migrate/extractors/registry.js +6 -4
  96. package/dist/migrate/extractors/registry.js.map +1 -1
  97. package/dist/migrate/index.d.ts +6 -1
  98. package/dist/migrate/index.d.ts.map +1 -1
  99. package/dist/migrate/index.js +12 -1
  100. package/dist/migrate/index.js.map +1 -1
  101. package/dist/migrate/loaders/chatgpt.d.ts +72 -0
  102. package/dist/migrate/loaders/chatgpt.d.ts.map +1 -0
  103. package/dist/migrate/loaders/chatgpt.js +691 -0
  104. package/dist/migrate/loaders/chatgpt.js.map +1 -0
  105. package/dist/migrate/loaders/claude.d.ts +61 -0
  106. package/dist/migrate/loaders/claude.d.ts.map +1 -0
  107. package/dist/migrate/loaders/claude.js +433 -0
  108. package/dist/migrate/loaders/claude.js.map +1 -0
  109. package/dist/migrate/loaders/registry.js +6 -4
  110. package/dist/migrate/loaders/registry.js.map +1 -1
  111. package/dist/migrate/orchestrator.d.ts +75 -1
  112. package/dist/migrate/orchestrator.d.ts.map +1 -1
  113. package/dist/migrate/orchestrator.js +215 -19
  114. package/dist/migrate/orchestrator.js.map +1 -1
  115. package/dist/migrate/testing/index.d.ts +28 -0
  116. package/dist/migrate/testing/index.d.ts.map +1 -0
  117. package/dist/migrate/testing/index.js +55 -0
  118. package/dist/migrate/testing/index.js.map +1 -0
  119. package/dist/migrate/testing/mock-extractor.d.ts +30 -0
  120. package/dist/migrate/testing/mock-extractor.d.ts.map +1 -0
  121. package/dist/migrate/testing/mock-extractor.js +137 -0
  122. package/dist/migrate/testing/mock-extractor.js.map +1 -0
  123. package/dist/migrate/testing/mock-loader.d.ts +36 -0
  124. package/dist/migrate/testing/mock-loader.d.ts.map +1 -0
  125. package/dist/migrate/testing/mock-loader.js +81 -0
  126. package/dist/migrate/testing/mock-loader.js.map +1 -0
  127. package/dist/migrate/testing/mock-transformer.d.ts +26 -0
  128. package/dist/migrate/testing/mock-transformer.d.ts.map +1 -0
  129. package/dist/migrate/testing/mock-transformer.js +185 -0
  130. package/dist/migrate/testing/mock-transformer.js.map +1 -0
  131. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts +5 -0
  132. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts.map +1 -0
  133. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js +333 -0
  134. package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js.map +1 -0
  135. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts +5 -0
  136. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts.map +1 -0
  137. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js +333 -0
  138. package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js.map +1 -0
  139. package/dist/migrate/transformers/__tests__/rules.test.d.ts +5 -0
  140. package/dist/migrate/transformers/__tests__/rules.test.d.ts.map +1 -0
  141. package/dist/migrate/transformers/__tests__/rules.test.js +375 -0
  142. package/dist/migrate/transformers/__tests__/rules.test.js.map +1 -0
  143. package/dist/migrate/transformers/chatgpt-to-claude.d.ts +40 -0
  144. package/dist/migrate/transformers/chatgpt-to-claude.d.ts.map +1 -0
  145. package/dist/migrate/transformers/chatgpt-to-claude.js +443 -0
  146. package/dist/migrate/transformers/chatgpt-to-claude.js.map +1 -0
  147. package/dist/migrate/transformers/claude-to-chatgpt.d.ts +41 -0
  148. package/dist/migrate/transformers/claude-to-chatgpt.d.ts.map +1 -0
  149. package/dist/migrate/transformers/claude-to-chatgpt.js +532 -0
  150. package/dist/migrate/transformers/claude-to-chatgpt.js.map +1 -0
  151. package/dist/migrate/transformers/registry.js +6 -4
  152. package/dist/migrate/transformers/registry.js.map +1 -1
  153. package/dist/migrate/transformers/rules.d.ts +168 -0
  154. package/dist/migrate/transformers/rules.d.ts.map +1 -0
  155. package/dist/migrate/transformers/rules.js +487 -0
  156. package/dist/migrate/transformers/rules.js.map +1 -0
  157. package/dist/migrate/types.d.ts +2 -0
  158. package/dist/migrate/types.d.ts.map +1 -1
  159. package/package.json +7 -2
@@ -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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"}