cursor-history 0.6.0 → 0.9.1

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 (101) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +371 -9
  3. package/dist/cli/commands/backup.d.ts +9 -0
  4. package/dist/cli/commands/backup.d.ts.map +1 -0
  5. package/dist/cli/commands/backup.js +168 -0
  6. package/dist/cli/commands/backup.js.map +1 -0
  7. package/dist/cli/commands/export.d.ts.map +1 -1
  8. package/dist/cli/commands/export.js +38 -6
  9. package/dist/cli/commands/export.js.map +1 -1
  10. package/dist/cli/commands/list-backups.d.ts +9 -0
  11. package/dist/cli/commands/list-backups.d.ts.map +1 -0
  12. package/dist/cli/commands/list-backups.js +166 -0
  13. package/dist/cli/commands/list-backups.js.map +1 -0
  14. package/dist/cli/commands/list.d.ts.map +1 -1
  15. package/dist/cli/commands/list.js +44 -9
  16. package/dist/cli/commands/list.js.map +1 -1
  17. package/dist/cli/commands/migrate-session.d.ts +12 -0
  18. package/dist/cli/commands/migrate-session.d.ts.map +1 -0
  19. package/dist/cli/commands/migrate-session.js +125 -0
  20. package/dist/cli/commands/migrate-session.js.map +1 -0
  21. package/dist/cli/commands/migrate.d.ts +13 -0
  22. package/dist/cli/commands/migrate.d.ts.map +1 -0
  23. package/dist/cli/commands/migrate.js +122 -0
  24. package/dist/cli/commands/migrate.js.map +1 -0
  25. package/dist/cli/commands/restore.d.ts +9 -0
  26. package/dist/cli/commands/restore.d.ts.map +1 -0
  27. package/dist/cli/commands/restore.js +192 -0
  28. package/dist/cli/commands/restore.js.map +1 -0
  29. package/dist/cli/commands/search.d.ts.map +1 -1
  30. package/dist/cli/commands/search.js +30 -2
  31. package/dist/cli/commands/search.js.map +1 -1
  32. package/dist/cli/commands/show.d.ts.map +1 -1
  33. package/dist/cli/commands/show.js +31 -3
  34. package/dist/cli/commands/show.js.map +1 -1
  35. package/dist/cli/index.js +10 -0
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/core/backup.d.ts +86 -0
  38. package/dist/core/backup.d.ts.map +1 -0
  39. package/dist/core/backup.js +727 -0
  40. package/dist/core/backup.js.map +1 -0
  41. package/dist/core/database/debug.d.ts +12 -0
  42. package/dist/core/database/debug.d.ts.map +1 -0
  43. package/dist/core/database/debug.js +16 -0
  44. package/dist/core/database/debug.js.map +1 -0
  45. package/dist/core/database/drivers/better-sqlite3.d.ts +11 -0
  46. package/dist/core/database/drivers/better-sqlite3.d.ts.map +1 -0
  47. package/dist/core/database/drivers/better-sqlite3.js +93 -0
  48. package/dist/core/database/drivers/better-sqlite3.js.map +1 -0
  49. package/dist/core/database/drivers/node-sqlite.d.ts +15 -0
  50. package/dist/core/database/drivers/node-sqlite.d.ts.map +1 -0
  51. package/dist/core/database/drivers/node-sqlite.js +135 -0
  52. package/dist/core/database/drivers/node-sqlite.js.map +1 -0
  53. package/dist/core/database/errors.d.ts +24 -0
  54. package/dist/core/database/errors.d.ts.map +1 -0
  55. package/dist/core/database/errors.js +38 -0
  56. package/dist/core/database/errors.js.map +1 -0
  57. package/dist/core/database/index.d.ts +98 -0
  58. package/dist/core/database/index.d.ts.map +1 -0
  59. package/dist/core/database/index.js +125 -0
  60. package/dist/core/database/index.js.map +1 -0
  61. package/dist/core/database/registry.d.ts +81 -0
  62. package/dist/core/database/registry.d.ts.map +1 -0
  63. package/dist/core/database/registry.js +171 -0
  64. package/dist/core/database/registry.js.map +1 -0
  65. package/dist/core/database/types.d.ts +115 -0
  66. package/dist/core/database/types.d.ts.map +1 -0
  67. package/dist/core/database/types.js +8 -0
  68. package/dist/core/database/types.js.map +1 -0
  69. package/dist/core/migrate.d.ts +40 -0
  70. package/dist/core/migrate.d.ts.map +1 -0
  71. package/dist/core/migrate.js +586 -0
  72. package/dist/core/migrate.js.map +1 -0
  73. package/dist/core/storage.d.ts +84 -10
  74. package/dist/core/storage.d.ts.map +1 -1
  75. package/dist/core/storage.js +319 -33
  76. package/dist/core/storage.js.map +1 -1
  77. package/dist/core/types.d.ts +252 -0
  78. package/dist/core/types.d.ts.map +1 -1
  79. package/dist/lib/backup.d.ts +98 -0
  80. package/dist/lib/backup.d.ts.map +1 -0
  81. package/dist/lib/backup.js +108 -0
  82. package/dist/lib/backup.js.map +1 -0
  83. package/dist/lib/config.d.ts +3 -1
  84. package/dist/lib/config.d.ts.map +1 -1
  85. package/dist/lib/config.js +10 -0
  86. package/dist/lib/config.js.map +1 -1
  87. package/dist/lib/errors.d.ts +229 -0
  88. package/dist/lib/errors.d.ts.map +1 -1
  89. package/dist/lib/errors.js +361 -0
  90. package/dist/lib/errors.js.map +1 -1
  91. package/dist/lib/index.d.ts +133 -24
  92. package/dist/lib/index.d.ts.map +1 -1
  93. package/dist/lib/index.js +212 -49
  94. package/dist/lib/index.js.map +1 -1
  95. package/dist/lib/platform.d.ts +11 -0
  96. package/dist/lib/platform.d.ts.map +1 -1
  97. package/dist/lib/platform.js +32 -0
  98. package/dist/lib/platform.js.map +1 -1
  99. package/dist/lib/types.d.ts +267 -0
  100. package/dist/lib/types.d.ts.map +1 -1
  101. package/package.json +23 -3
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * Export command - export chat sessions to files
3
3
  */
4
+ import pc from 'picocolors';
4
5
  import { writeFileSync, existsSync, mkdirSync } from 'node:fs';
5
6
  import { dirname, join } from 'node:path';
6
7
  import { getSession, listSessions, findWorkspaces } from '../../core/storage.js';
8
+ import { validateBackup } from '../../core/backup.js';
7
9
  import { exportToMarkdown, exportToJson } from '../../core/parser.js';
8
10
  import { formatExportSuccess, formatExportResultJson } from '../formatters/index.js';
9
11
  import { SessionNotFoundError, FileExistsError, handleError, CliError, ExitCode, } from '../errors.js';
@@ -19,11 +21,33 @@ export function registerExportCommand(program) {
19
21
  .option('-f, --format <format>', 'Output format: md or json', 'md')
20
22
  .option('--force', 'Overwrite existing files')
21
23
  .option('-a, --all', 'Export all sessions')
24
+ .option('-b, --backup <path>', 'Export from backup file instead of live data')
22
25
  .action(async (indexArg, options, command) => {
23
26
  const globalOptions = command.parent?.opts();
24
27
  const useJson = options.json ?? globalOptions?.json ?? false;
25
28
  const customPath = options.dataPath ?? globalOptions?.dataPath;
26
29
  const format = options.format === 'json' ? 'json' : 'md';
30
+ const backupPath = options.backup ? expandPath(options.backup) : undefined;
31
+ // T037: Validate backup if exporting from backup
32
+ if (backupPath) {
33
+ const validation = validateBackup(backupPath);
34
+ if (validation.status === 'invalid') {
35
+ if (useJson) {
36
+ console.log(JSON.stringify({ error: 'Invalid backup', errors: validation.errors }));
37
+ }
38
+ else {
39
+ console.error(pc.red('Invalid backup file:'));
40
+ for (const err of validation.errors) {
41
+ console.error(pc.dim(` ${err}`));
42
+ }
43
+ }
44
+ process.exit(3);
45
+ }
46
+ if (validation.status === 'warnings' && !useJson) {
47
+ console.error(pc.yellow(`Warning: Backup has integrity issues (${validation.corruptedFiles.length} corrupted files)`));
48
+ console.error(pc.dim('Continuing with intact files...\n'));
49
+ }
50
+ }
27
51
  try {
28
52
  // Validate arguments
29
53
  if (!options.all && !indexArg) {
@@ -32,7 +56,7 @@ export function registerExportCommand(program) {
32
56
  const exported = [];
33
57
  if (options.all) {
34
58
  // Export all sessions
35
- const sessions = listSessions({ limit: 0, all: true }, customPath ? expandPath(customPath) : undefined);
59
+ const sessions = await listSessions({ limit: 0, all: true }, customPath ? expandPath(customPath) : undefined, backupPath);
36
60
  if (sessions.length === 0) {
37
61
  throw new CliError('No sessions to export.', ExitCode.NOT_FOUND);
38
62
  }
@@ -42,9 +66,13 @@ export function registerExportCommand(program) {
42
66
  if (!existsSync(outputDir)) {
43
67
  mkdirSync(outputDir, { recursive: true });
44
68
  }
45
- const workspaces = findWorkspaces(customPath ? expandPath(customPath) : undefined);
69
+ const workspaces = await findWorkspaces(customPath ? expandPath(customPath) : undefined, backupPath);
70
+ // Show backup source indicator if exporting from backup
71
+ if (backupPath && !useJson) {
72
+ console.log(pc.dim(`Exporting from backup: ${contractPath(backupPath)}\n`));
73
+ }
46
74
  for (const summary of sessions) {
47
- const session = getSession(summary.index, customPath ? expandPath(customPath) : undefined);
75
+ const session = await getSession(summary.index, customPath ? expandPath(customPath) : undefined, backupPath);
48
76
  if (!session)
49
77
  continue;
50
78
  const workspace = workspaces.find((w) => w.id === session.workspaceId);
@@ -74,12 +102,12 @@ export function registerExportCommand(program) {
74
102
  if (isNaN(index) || index < 1) {
75
103
  throw new CliError(`Invalid index: ${indexArg}. Must be a positive number.`, ExitCode.USAGE_ERROR);
76
104
  }
77
- const session = getSession(index, customPath ? expandPath(customPath) : undefined);
105
+ const session = await getSession(index, customPath ? expandPath(customPath) : undefined, backupPath);
78
106
  if (!session) {
79
- const sessions = listSessions({ limit: 0, all: true }, customPath ? expandPath(customPath) : undefined);
107
+ const sessions = await listSessions({ limit: 0, all: true }, customPath ? expandPath(customPath) : undefined, backupPath);
80
108
  throw new SessionNotFoundError(index, sessions.length);
81
109
  }
82
- const workspaces = findWorkspaces(customPath ? expandPath(customPath) : undefined);
110
+ const workspaces = await findWorkspaces(customPath ? expandPath(customPath) : undefined, backupPath);
83
111
  const workspace = workspaces.find((w) => w.id === session.workspaceId);
84
112
  const workspacePath = workspace?.path;
85
113
  // Determine output path
@@ -103,6 +131,10 @@ export function registerExportCommand(program) {
103
131
  if (dir !== '.' && !existsSync(dir)) {
104
132
  mkdirSync(dir, { recursive: true });
105
133
  }
134
+ // Show backup source indicator if exporting from backup
135
+ if (backupPath && !useJson) {
136
+ console.log(pc.dim(`Exporting from backup: ${contractPath(backupPath)}\n`));
137
+ }
106
138
  // Export
107
139
  const content = format === 'json'
108
140
  ? exportToJson(session, workspacePath)
@@ -1 +1 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * List-backups command - list available backup files
3
+ */
4
+ import type { Command } from 'commander';
5
+ /**
6
+ * Register the list-backups command
7
+ */
8
+ export declare function registerListBackupsCommand(program: Command): void;
9
+ //# sourceMappingURL=list-backups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-backups.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list-backups.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwHzC;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiEjE"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * List-backups command - list available backup files
3
+ */
4
+ import pc from 'picocolors';
5
+ import { existsSync } from 'node:fs';
6
+ import { listBackups, getDefaultBackupDir } from '../../core/backup.js';
7
+ import { handleError, ExitCode } from '../errors.js';
8
+ import { expandPath, contractPath } from '../../lib/platform.js';
9
+ /**
10
+ * Format file size for display
11
+ */
12
+ function formatSize(bytes) {
13
+ if (bytes < 1024) {
14
+ return `${bytes} B`;
15
+ }
16
+ if (bytes < 1024 * 1024) {
17
+ return `${(bytes / 1024).toFixed(1)} KB`;
18
+ }
19
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
20
+ }
21
+ /**
22
+ * Format date for display
23
+ */
24
+ function formatDate(date) {
25
+ return date.toISOString().replace('T', ' ').slice(0, 19);
26
+ }
27
+ /**
28
+ * T062: Format backup list as a table
29
+ */
30
+ function formatBackupsTable(backups) {
31
+ const lines = [];
32
+ // Header
33
+ lines.push(pc.dim(' #') +
34
+ ' ' +
35
+ pc.dim('Filename'.padEnd(45)) +
36
+ pc.dim('Created'.padEnd(22)) +
37
+ pc.dim('Size'.padEnd(10)) +
38
+ pc.dim('Sessions'.padEnd(10)) +
39
+ pc.dim('Status'));
40
+ lines.push(pc.dim('─'.repeat(110)));
41
+ // Rows
42
+ for (let i = 0; i < backups.length; i++) {
43
+ const backup = backups[i];
44
+ const index = String(i + 1).padStart(3);
45
+ const filename = backup.filename.length > 44
46
+ ? backup.filename.slice(0, 41) + '...'
47
+ : backup.filename.padEnd(45);
48
+ // Use manifest date if available, otherwise file modification time
49
+ const createdAt = backup.manifest?.createdAt
50
+ ? formatDate(new Date(backup.manifest.createdAt))
51
+ : formatDate(backup.modifiedAt);
52
+ const size = formatSize(backup.fileSize).padEnd(10);
53
+ const sessions = backup.manifest
54
+ ? String(backup.manifest.stats.sessionCount).padEnd(10)
55
+ : pc.dim('N/A'.padEnd(10));
56
+ // Status indicator
57
+ let status;
58
+ if (backup.error) {
59
+ status = pc.red('Invalid');
60
+ }
61
+ else if (backup.manifest) {
62
+ status = pc.green('Valid');
63
+ }
64
+ else {
65
+ status = pc.yellow('Unknown');
66
+ }
67
+ lines.push(`${pc.dim(index)} ${filename}${createdAt.padEnd(22)}${size}${sessions}${status}`);
68
+ }
69
+ // Summary
70
+ lines.push('');
71
+ const invalidCount = backups.filter((b) => b.error).length;
72
+ lines.push(pc.dim(`Total: ${backups.length} backup(s)`) +
73
+ (invalidCount > 0 ? pc.dim(` (${invalidCount} invalid)`) : ''));
74
+ return lines.join('\n');
75
+ }
76
+ /**
77
+ * Format backup list for JSON output
78
+ */
79
+ function formatBackupsJson(backups, directory) {
80
+ return JSON.stringify({
81
+ directory,
82
+ count: backups.length,
83
+ backups: backups.map((backup) => ({
84
+ filename: backup.filename,
85
+ filePath: backup.filePath,
86
+ fileSize: backup.fileSize,
87
+ modifiedAt: backup.modifiedAt.toISOString(),
88
+ ...(backup.manifest && {
89
+ createdAt: backup.manifest.createdAt,
90
+ sessionCount: backup.manifest.stats.sessionCount,
91
+ workspaceCount: backup.manifest.stats.workspaceCount,
92
+ totalSize: backup.manifest.stats.totalSize,
93
+ }),
94
+ ...(backup.error && { error: backup.error }),
95
+ })),
96
+ }, null, 2);
97
+ }
98
+ /**
99
+ * Register the list-backups command
100
+ */
101
+ export function registerListBackupsCommand(program) {
102
+ program
103
+ .command('list-backups')
104
+ .alias('backups')
105
+ .description('List available backup files')
106
+ .option('-d, --directory <path>', 'Directory to scan (default: ~/cursor-history-backups)')
107
+ .action((options, command) => {
108
+ const globalOptions = command.parent?.opts();
109
+ const useJson = options.json ?? globalOptions?.json ?? false;
110
+ try {
111
+ // Resolve directory path
112
+ const directory = options.directory
113
+ ? expandPath(options.directory)
114
+ : getDefaultBackupDir();
115
+ // T064: Check if directory exists
116
+ if (!existsSync(directory)) {
117
+ if (useJson) {
118
+ console.log(JSON.stringify({
119
+ error: 'Directory not found',
120
+ directory,
121
+ count: 0,
122
+ backups: []
123
+ }));
124
+ }
125
+ else {
126
+ console.error(pc.yellow('Backup directory not found:'));
127
+ console.error(pc.dim(` ${contractPath(directory)}`));
128
+ console.error('');
129
+ console.error(pc.dim('Create a backup first with: cursor-history backup'));
130
+ }
131
+ process.exit(ExitCode.USAGE_ERROR);
132
+ }
133
+ // List backups
134
+ const backups = listBackups(directory);
135
+ // T063: Handle no backups found
136
+ if (backups.length === 0) {
137
+ if (useJson) {
138
+ console.log(JSON.stringify({
139
+ directory: contractPath(directory),
140
+ count: 0,
141
+ backups: []
142
+ }));
143
+ }
144
+ else {
145
+ console.log(pc.dim('No backups found in:'));
146
+ console.log(pc.dim(` ${contractPath(directory)}`));
147
+ console.log('');
148
+ console.log(pc.dim('Create a backup with: cursor-history backup'));
149
+ }
150
+ return; // Exit code 0 - this is informational, not an error
151
+ }
152
+ // Output results
153
+ if (useJson) {
154
+ console.log(formatBackupsJson(backups, contractPath(directory)));
155
+ }
156
+ else {
157
+ console.log(pc.dim(`Backups in: ${contractPath(directory)}\n`));
158
+ console.log(formatBackupsTable(backups));
159
+ }
160
+ }
161
+ catch (error) {
162
+ handleError(error);
163
+ }
164
+ });
165
+ }
166
+ //# sourceMappingURL=list-backups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-backups.js","sourceRoot":"","sources":["../../../src/cli/commands/list-backups.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuE1D"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BzC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8G1D"}
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * List command - display chat sessions and workspaces
3
3
  */
4
+ import pc from 'picocolors';
4
5
  import { listSessions, listWorkspaces } from '../../core/storage.js';
6
+ import { validateBackup } from '../../core/backup.js';
5
7
  import { formatSessionsTable, formatSessionsJson, formatWorkspacesTable, formatWorkspacesJson, formatNoHistory, formatCursorNotFound, } from '../formatters/index.js';
6
- import { getCursorDataPath, expandPath } from '../../lib/platform.js';
8
+ import { getCursorDataPath, expandPath, contractPath } from '../../lib/platform.js';
7
9
  import { existsSync } from 'node:fs';
8
10
  /**
9
11
  * Register the list command
@@ -17,25 +19,50 @@ export function registerListCommand(program) {
17
19
  .option('-a, --all', 'Show all sessions (ignore limit)')
18
20
  .option('--workspaces', 'List workspaces instead of sessions')
19
21
  .option('--ids', 'Show composer IDs (for external export tools)')
22
+ .option('-b, --backup <path>', 'Read from backup file instead of live data')
20
23
  .action(async (options, command) => {
21
24
  const globalOptions = command.parent?.opts();
22
25
  const useJson = options.json ?? globalOptions?.json ?? false;
23
26
  const customPath = options.dataPath ?? globalOptions?.dataPath;
24
27
  const workspaceFilter = options.workspace ?? globalOptions?.workspace;
25
- if (options.workspaces) {
26
- // Verify Cursor data exists for workspaces listing
27
- const dataPath = getCursorDataPath(customPath ? expandPath(customPath) : undefined);
28
- if (!existsSync(dataPath)) {
28
+ const backupPath = options.backup ? expandPath(options.backup) : undefined;
29
+ // T034: Validate backup if reading from backup
30
+ if (backupPath) {
31
+ const validation = validateBackup(backupPath);
32
+ if (validation.status === 'invalid') {
29
33
  if (useJson) {
30
- console.log(JSON.stringify({ error: 'Cursor data not found', path: dataPath }));
34
+ console.log(JSON.stringify({ error: 'Invalid backup', errors: validation.errors }));
31
35
  }
32
36
  else {
33
- console.log(formatCursorNotFound(dataPath));
37
+ console.error(pc.red('Invalid backup file:'));
38
+ for (const err of validation.errors) {
39
+ console.error(pc.dim(` ${err}`));
40
+ }
34
41
  }
35
42
  process.exit(3);
36
43
  }
44
+ if (validation.status === 'warnings' && !useJson) {
45
+ console.error(pc.yellow(`Warning: Backup has integrity issues (${validation.corruptedFiles.length} corrupted files)`));
46
+ console.error(pc.dim('Continuing with intact files...\n'));
47
+ }
48
+ }
49
+ if (options.workspaces) {
50
+ // For backup mode, skip Cursor data check - we read from backup
51
+ if (!backupPath) {
52
+ // Verify Cursor data exists for workspaces listing
53
+ const dataPath = getCursorDataPath(customPath ? expandPath(customPath) : undefined);
54
+ if (!existsSync(dataPath)) {
55
+ if (useJson) {
56
+ console.log(JSON.stringify({ error: 'Cursor data not found', path: dataPath }));
57
+ }
58
+ else {
59
+ console.log(formatCursorNotFound(dataPath));
60
+ }
61
+ process.exit(3);
62
+ }
63
+ }
37
64
  // List workspaces
38
- const workspaces = listWorkspaces(customPath ? expandPath(customPath) : undefined);
65
+ const workspaces = await listWorkspaces(customPath ? expandPath(customPath) : undefined, backupPath);
39
66
  if (workspaces.length === 0) {
40
67
  if (useJson) {
41
68
  console.log(JSON.stringify({ count: 0, workspaces: [] }));
@@ -45,6 +72,10 @@ export function registerListCommand(program) {
45
72
  }
46
73
  return;
47
74
  }
75
+ // Show backup source indicator if reading from backup
76
+ if (backupPath && !useJson) {
77
+ console.log(pc.dim(`Reading from backup: ${contractPath(backupPath)}\n`));
78
+ }
48
79
  if (useJson) {
49
80
  console.log(formatWorkspacesJson(workspaces));
50
81
  }
@@ -55,7 +86,7 @@ export function registerListCommand(program) {
55
86
  else {
56
87
  // List sessions
57
88
  const limit = options.all ? 0 : parseInt(options.limit ?? '20', 10);
58
- const sessions = listSessions({ limit, all: options.all ?? false, workspacePath: workspaceFilter }, customPath ? expandPath(customPath) : undefined);
89
+ const sessions = await listSessions({ limit, all: options.all ?? false, workspacePath: workspaceFilter }, customPath ? expandPath(customPath) : undefined, backupPath);
59
90
  if (sessions.length === 0) {
60
91
  if (useJson) {
61
92
  console.log(JSON.stringify({ count: 0, sessions: [] }));
@@ -65,6 +96,10 @@ export function registerListCommand(program) {
65
96
  }
66
97
  return;
67
98
  }
99
+ // Show backup source indicator if reading from backup
100
+ if (backupPath && !useJson) {
101
+ console.log(pc.dim(`Reading from backup: ${contractPath(backupPath)}\n`));
102
+ }
68
103
  if (useJson) {
69
104
  console.log(formatSessionsJson(sessions));
70
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CLI command for migrating individual sessions between workspaces
3
+ *
4
+ * Usage:
5
+ * cursor-history migrate-session <session> <destination>
6
+ * cursor-history migrate-session 3 /path/to/new/project
7
+ * cursor-history migrate-session 1,3,5 /path/to/new/project
8
+ * cursor-history migrate-session --dry-run 3 /path/to/new/project
9
+ */
10
+ import { Command } from 'commander';
11
+ export declare function registerMigrateSessionCommand(program: Command): void;
12
+ //# sourceMappingURL=migrate-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-session.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/migrate-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyDpE"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * CLI command for migrating individual sessions between workspaces
3
+ *
4
+ * Usage:
5
+ * cursor-history migrate-session <session> <destination>
6
+ * cursor-history migrate-session 3 /path/to/new/project
7
+ * cursor-history migrate-session 1,3,5 /path/to/new/project
8
+ * cursor-history migrate-session --dry-run 3 /path/to/new/project
9
+ */
10
+ import pc from 'picocolors';
11
+ import { resolveSessionIdentifiers } from '../../core/storage.js';
12
+ import { migrateSessions } from '../../core/migrate.js';
13
+ import { expandPath } from '../../lib/platform.js';
14
+ import { isSessionNotFoundError, isWorkspaceNotFoundError, isSameWorkspaceError, isNestedPathError, } from '../../lib/errors.js';
15
+ export function registerMigrateSessionCommand(program) {
16
+ program
17
+ .command('migrate-session')
18
+ .description('Move or copy sessions to a different workspace')
19
+ .argument('<session>', 'Session index or ID (comma-separated for multiple)')
20
+ .argument('<destination>', 'Destination workspace path')
21
+ .option('--dry-run', 'Preview migration without making changes')
22
+ .option('--copy', 'Copy sessions instead of moving (keeps originals)')
23
+ .option('-f, --force', 'Proceed even if destination has existing sessions')
24
+ .option('--debug', 'Show detailed path transformation logs')
25
+ .action(async (sessionArg, destinationArg, options) => {
26
+ const globalOptions = program.opts();
27
+ const dataPath = globalOptions.dataPath;
28
+ const jsonOutput = globalOptions.json || options.json;
29
+ try {
30
+ // Expand ~ in destination path
31
+ const destination = expandPath(destinationArg);
32
+ // Resolve session identifiers to IDs
33
+ const sessionIds = await resolveSessionIdentifiers(sessionArg, dataPath);
34
+ // Determine mode
35
+ const mode = options.copy ? 'copy' : 'move';
36
+ // Perform migration
37
+ const results = await migrateSessions({
38
+ sessionIds,
39
+ destination,
40
+ mode,
41
+ dryRun: options.dryRun ?? false,
42
+ force: options.force ?? false,
43
+ dataPath,
44
+ debug: options.debug ?? false,
45
+ });
46
+ // Output results
47
+ if (jsonOutput) {
48
+ console.log(JSON.stringify(results, null, 2));
49
+ }
50
+ else {
51
+ outputResults(results, options.dryRun ?? false);
52
+ }
53
+ // Exit with error code if any failures
54
+ const hasFailures = results.some((r) => !r.success);
55
+ if (hasFailures) {
56
+ process.exit(1);
57
+ }
58
+ }
59
+ catch (error) {
60
+ if (jsonOutput) {
61
+ console.log(JSON.stringify({ error: formatError(error) }, null, 2));
62
+ }
63
+ else {
64
+ console.error(pc.red(formatError(error)));
65
+ }
66
+ process.exit(1);
67
+ }
68
+ });
69
+ }
70
+ function outputResults(results, isDryRun) {
71
+ if (isDryRun) {
72
+ console.log(pc.yellow('Dry run - no changes made\n'));
73
+ }
74
+ const successful = results.filter((r) => r.success);
75
+ const failed = results.filter((r) => !r.success);
76
+ if (successful.length > 0) {
77
+ const action = isDryRun ? 'Would migrate' : 'Migrated';
78
+ console.log(pc.green(`${action} ${successful.length} session(s):\n`));
79
+ for (const result of successful) {
80
+ const modeLabel = result.mode === 'copy' ? 'copied' : 'moved';
81
+ const actionLabel = isDryRun ? `would be ${modeLabel}` : modeLabel;
82
+ console.log(` ${pc.cyan(result.sessionId.slice(0, 8))}...`);
83
+ console.log(` From: ${result.sourceWorkspace}`);
84
+ console.log(` To: ${result.destinationWorkspace}`);
85
+ if (isDryRun && result.pathsWillBeUpdated) {
86
+ console.log(` ${pc.blue('File paths will be updated to destination workspace')}`);
87
+ }
88
+ console.log(` ${pc.dim(`(${actionLabel})`)}\n`);
89
+ }
90
+ }
91
+ if (failed.length > 0) {
92
+ console.log(pc.red(`Failed to migrate ${failed.length} session(s):\n`));
93
+ for (const result of failed) {
94
+ console.log(` ${pc.red('✗')} ${pc.cyan(result.sessionId.slice(0, 8))}...`);
95
+ console.log(` ${pc.red(result.error ?? 'Unknown error')}\n`);
96
+ }
97
+ }
98
+ // Summary
99
+ if (results.length > 1) {
100
+ console.log(pc.dim(`Summary: ${successful.length} succeeded, ${failed.length} failed`));
101
+ }
102
+ }
103
+ function formatError(error) {
104
+ if (isSessionNotFoundError(error)) {
105
+ return `Session not found: ${error.identifier}\nRun 'cursor-history list' to see available sessions.`;
106
+ }
107
+ if (isWorkspaceNotFoundError(error)) {
108
+ return `Workspace not found: ${error.path}\nPlease open the project in Cursor first to create the workspace.`;
109
+ }
110
+ if (isSameWorkspaceError(error)) {
111
+ return `Source and destination are the same: ${error.path}\nSpecify a different destination path.`;
112
+ }
113
+ if (isNestedPathError(error)) {
114
+ return `Destination is nested within source: ${error.destination} is inside ${error.source}\nThis would cause infinite path replacement loops. Choose a different destination.`;
115
+ }
116
+ if (error instanceof Error) {
117
+ // Check for database lock error
118
+ if (error.message.includes('SQLITE_BUSY') || error.message.includes('database is locked')) {
119
+ return 'Database is locked. Please close Cursor and try again.';
120
+ }
121
+ return error.message;
122
+ }
123
+ return String(error);
124
+ }
125
+ //# sourceMappingURL=migrate-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-session.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CLI command for migrating all sessions between workspaces
3
+ *
4
+ * Usage:
5
+ * cursor-history migrate <source> <destination>
6
+ * cursor-history migrate /old/project /new/project
7
+ * cursor-history migrate --copy /project /backup/project
8
+ * cursor-history migrate --dry-run /old/path /new/path
9
+ * cursor-history migrate --force /old/path /existing/path
10
+ */
11
+ import { Command } from 'commander';
12
+ export declare function registerMigrateCommand(program: Command): void;
13
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsD7D"}