agentic-qe 1.7.0 → 1.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 (125) hide show
  1. package/.claude/skills/sherlock-review/SKILL.md +786 -0
  2. package/CHANGELOG.md +531 -0
  3. package/README.md +37 -21
  4. package/dist/agents/BaseAgent.d.ts +8 -10
  5. package/dist/agents/BaseAgent.d.ts.map +1 -1
  6. package/dist/agents/BaseAgent.js +41 -43
  7. package/dist/agents/BaseAgent.js.map +1 -1
  8. package/dist/agents/CoverageAnalyzerAgent.js +2 -2
  9. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  10. package/dist/agents/LearningAgent.d.ts +2 -2
  11. package/dist/agents/LearningAgent.d.ts.map +1 -1
  12. package/dist/agents/LearningAgent.js +4 -4
  13. package/dist/agents/LearningAgent.js.map +1 -1
  14. package/dist/agents/TestExecutorAgent.d.ts +9 -0
  15. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  16. package/dist/agents/TestExecutorAgent.js +60 -0
  17. package/dist/agents/TestExecutorAgent.js.map +1 -1
  18. package/dist/agents/examples/batchAnalyze.d.ts +252 -0
  19. package/dist/agents/examples/batchAnalyze.d.ts.map +1 -0
  20. package/dist/agents/examples/batchAnalyze.js +259 -0
  21. package/dist/agents/examples/batchAnalyze.js.map +1 -0
  22. package/dist/agents/examples/batchGenerate.d.ts +153 -0
  23. package/dist/agents/examples/batchGenerate.d.ts.map +1 -0
  24. package/dist/agents/examples/batchGenerate.js +166 -0
  25. package/dist/agents/examples/batchGenerate.js.map +1 -0
  26. package/dist/agents/generateWithPII.d.ts +128 -0
  27. package/dist/agents/generateWithPII.d.ts.map +1 -0
  28. package/dist/agents/generateWithPII.js +175 -0
  29. package/dist/agents/generateWithPII.js.map +1 -0
  30. package/dist/cli/commands/init.d.ts +6 -3
  31. package/dist/cli/commands/init.d.ts.map +1 -1
  32. package/dist/cli/commands/init.js +51 -46
  33. package/dist/cli/commands/init.js.map +1 -1
  34. package/dist/cli/commands/learn/index.d.ts +4 -0
  35. package/dist/cli/commands/learn/index.d.ts.map +1 -1
  36. package/dist/cli/commands/learn/index.js +57 -0
  37. package/dist/cli/commands/learn/index.js.map +1 -1
  38. package/dist/cli/index.js +14 -0
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/core/memory/AgentDBManager.d.ts +5 -0
  41. package/dist/core/memory/AgentDBManager.d.ts.map +1 -1
  42. package/dist/core/memory/AgentDBManager.js +19 -1
  43. package/dist/core/memory/AgentDBManager.js.map +1 -1
  44. package/dist/core/memory/RealAgentDBAdapter.d.ts +8 -0
  45. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  46. package/dist/core/memory/RealAgentDBAdapter.js +74 -17
  47. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  48. package/dist/core/memory/ReasoningBankAdapter.d.ts +4 -0
  49. package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -1
  50. package/dist/core/memory/ReasoningBankAdapter.js +20 -0
  51. package/dist/core/memory/ReasoningBankAdapter.js.map +1 -1
  52. package/dist/core/memory/SwarmMemoryManager.d.ts +8 -0
  53. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  54. package/dist/core/memory/SwarmMemoryManager.js +33 -0
  55. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  56. package/dist/learning/ImprovementLoop.js +2 -2
  57. package/dist/learning/ImprovementLoop.js.map +1 -1
  58. package/dist/learning/LearningEngine.d.ts +11 -7
  59. package/dist/learning/LearningEngine.d.ts.map +1 -1
  60. package/dist/learning/LearningEngine.js +156 -72
  61. package/dist/learning/LearningEngine.js.map +1 -1
  62. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +83 -0
  63. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +1 -0
  64. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +130 -0
  65. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +1 -0
  66. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +58 -0
  67. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +1 -0
  68. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +84 -0
  69. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +1 -0
  70. package/dist/mcp/handlers/filtered/index.d.ts +47 -0
  71. package/dist/mcp/handlers/filtered/index.d.ts.map +1 -0
  72. package/dist/mcp/handlers/filtered/index.js +63 -0
  73. package/dist/mcp/handlers/filtered/index.js.map +1 -0
  74. package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts +57 -0
  75. package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts.map +1 -0
  76. package/dist/mcp/handlers/filtered/performance-tester-filtered.js +83 -0
  77. package/dist/mcp/handlers/filtered/performance-tester-filtered.js.map +1 -0
  78. package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts +57 -0
  79. package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts.map +1 -0
  80. package/dist/mcp/handlers/filtered/quality-assessor-filtered.js +93 -0
  81. package/dist/mcp/handlers/filtered/quality-assessor-filtered.js.map +1 -0
  82. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +54 -0
  83. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +1 -0
  84. package/dist/mcp/handlers/filtered/security-scanner-filtered.js +73 -0
  85. package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +1 -0
  86. package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts +61 -0
  87. package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts.map +1 -0
  88. package/dist/mcp/handlers/filtered/test-executor-filtered.js +117 -0
  89. package/dist/mcp/handlers/filtered/test-executor-filtered.js.map +1 -0
  90. package/dist/mcp/handlers/phase2/Phase2Tools.js +2 -2
  91. package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
  92. package/dist/mcp/tools/deprecated.d.ts +8 -8
  93. package/dist/scripts/backup-helper.d.ts +64 -0
  94. package/dist/scripts/backup-helper.d.ts.map +1 -0
  95. package/dist/scripts/backup-helper.js +251 -0
  96. package/dist/scripts/backup-helper.js.map +1 -0
  97. package/dist/scripts/migrate-with-backup.d.ts +15 -0
  98. package/dist/scripts/migrate-with-backup.d.ts.map +1 -0
  99. package/dist/scripts/migrate-with-backup.js +194 -0
  100. package/dist/scripts/migrate-with-backup.js.map +1 -0
  101. package/dist/security/pii-tokenization.d.ts +216 -0
  102. package/dist/security/pii-tokenization.d.ts.map +1 -0
  103. package/dist/security/pii-tokenization.js +325 -0
  104. package/dist/security/pii-tokenization.js.map +1 -0
  105. package/dist/utils/EmbeddingGenerator.d.ts +35 -0
  106. package/dist/utils/EmbeddingGenerator.d.ts.map +1 -0
  107. package/dist/utils/EmbeddingGenerator.js +72 -0
  108. package/dist/utils/EmbeddingGenerator.js.map +1 -0
  109. package/dist/utils/batch-operations.d.ts +215 -0
  110. package/dist/utils/batch-operations.d.ts.map +1 -0
  111. package/dist/utils/batch-operations.js +266 -0
  112. package/dist/utils/batch-operations.js.map +1 -0
  113. package/dist/utils/filtering.d.ts +180 -0
  114. package/dist/utils/filtering.d.ts.map +1 -0
  115. package/dist/utils/filtering.js +288 -0
  116. package/dist/utils/filtering.js.map +1 -0
  117. package/dist/utils/prompt-cache-examples.d.ts +111 -0
  118. package/dist/utils/prompt-cache-examples.d.ts.map +1 -0
  119. package/dist/utils/prompt-cache-examples.js +416 -0
  120. package/dist/utils/prompt-cache-examples.js.map +1 -0
  121. package/dist/utils/prompt-cache.d.ts +305 -0
  122. package/dist/utils/prompt-cache.d.ts.map +1 -0
  123. package/dist/utils/prompt-cache.js +448 -0
  124. package/dist/utils/prompt-cache.js.map +1 -0
  125. package/package.json +6 -3
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Backup Helper for Database Migration
3
+ * Integrates backup system with migration scripts
4
+ */
5
+ export interface BackupResult {
6
+ success: boolean;
7
+ timestamp: string;
8
+ files: string[];
9
+ totalSize: number;
10
+ compressed: boolean;
11
+ error?: string;
12
+ }
13
+ export interface RestoreResult {
14
+ success: boolean;
15
+ timestamp: string;
16
+ filesRestored: number;
17
+ error?: string;
18
+ }
19
+ export declare class BackupHelper {
20
+ private backupDir;
21
+ private scriptsDir;
22
+ /**
23
+ * Create a database backup before migration
24
+ */
25
+ createBackup(options?: {
26
+ compress?: boolean;
27
+ verify?: boolean;
28
+ }): Promise<BackupResult>;
29
+ /**
30
+ * Restore database from backup
31
+ */
32
+ restoreBackup(timestamp: string, options?: {
33
+ verify?: boolean;
34
+ force?: boolean;
35
+ }): Promise<RestoreResult>;
36
+ /**
37
+ * List available backups
38
+ */
39
+ listBackups(): Promise<Array<{
40
+ timestamp: string;
41
+ date: string;
42
+ files: number;
43
+ size: number;
44
+ metadata?: any;
45
+ }>>;
46
+ /**
47
+ * Verify backup integrity
48
+ */
49
+ verifyBackup(timestamp: string): Promise<boolean>;
50
+ /**
51
+ * Clean old backups
52
+ */
53
+ cleanOldBackups(keepLast?: number): Promise<number>;
54
+ /**
55
+ * Get backup files for a specific timestamp
56
+ */
57
+ private getBackupFiles;
58
+ /**
59
+ * Create automatic backup before dangerous operation
60
+ */
61
+ createSafetyBackup(operationName: string): Promise<BackupResult>;
62
+ }
63
+ export declare const backupHelper: BackupHelper;
64
+ //# sourceMappingURL=backup-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-helper.d.ts","sourceRoot":"","sources":["../../src/scripts/backup-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,UAAU,CAAa;IAE/B;;OAEG;IACG,YAAY,CAAC,OAAO,GAAE;QAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;KACb,GAAG,OAAO,CAAC,YAAY,CAAC;IA4D9B;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE;QAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACZ,GAAG,OAAO,CAAC,aAAa,CAAC;IA6C/B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,GAAG,CAAC;KAChB,CAAC,CAAC;IAkDH;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcvD;;OAEG;IACG,eAAe,CAAC,QAAQ,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAe7D;;OAEG;YACW,cAAc;IAa5B;;OAEG;IACG,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAevE;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ /**
3
+ * Backup Helper for Database Migration
4
+ * Integrates backup system with migration scripts
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.backupHelper = exports.BackupHelper = void 0;
41
+ const child_process_1 = require("child_process");
42
+ const util_1 = require("util");
43
+ const fs = __importStar(require("fs/promises"));
44
+ const path = __importStar(require("path"));
45
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
46
+ class BackupHelper {
47
+ constructor() {
48
+ this.backupDir = '.agentic-qe/backups';
49
+ this.scriptsDir = 'scripts';
50
+ }
51
+ /**
52
+ * Create a database backup before migration
53
+ */
54
+ async createBackup(options = {}) {
55
+ const { compress = true, verify = true } = options;
56
+ try {
57
+ console.log('🔒 Creating database backup...');
58
+ const flags = [
59
+ compress ? '--compress' : '',
60
+ !verify ? '--no-verify' : ''
61
+ ].filter(Boolean).join(' ');
62
+ const backupScript = path.join(this.scriptsDir, 'backup-databases.sh');
63
+ // Make script executable
64
+ await execAsync(`chmod +x ${backupScript}`);
65
+ // Run backup
66
+ const { stdout, stderr } = await execAsync(`${backupScript} ${flags}`);
67
+ console.log(stdout);
68
+ if (stderr) {
69
+ console.warn('Backup warnings:', stderr);
70
+ }
71
+ // Parse output to get timestamp
72
+ const timestampMatch = stdout.match(/Timestamp: (\d{8}-\d{6})/);
73
+ const timestamp = timestampMatch ? timestampMatch[1] : '';
74
+ // Get backup files
75
+ const files = await this.getBackupFiles(timestamp);
76
+ // Calculate total size
77
+ let totalSize = 0;
78
+ for (const file of files) {
79
+ const stats = await fs.stat(file);
80
+ totalSize += stats.size;
81
+ }
82
+ return {
83
+ success: true,
84
+ timestamp,
85
+ files,
86
+ totalSize,
87
+ compressed: compress
88
+ };
89
+ }
90
+ catch (error) {
91
+ const errorMessage = error instanceof Error ? error.message : String(error);
92
+ console.error('❌ Backup failed:', errorMessage);
93
+ return {
94
+ success: false,
95
+ timestamp: '',
96
+ files: [],
97
+ totalSize: 0,
98
+ compressed: false,
99
+ error: errorMessage
100
+ };
101
+ }
102
+ }
103
+ /**
104
+ * Restore database from backup
105
+ */
106
+ async restoreBackup(timestamp, options = {}) {
107
+ const { verify = true, force = false } = options;
108
+ try {
109
+ console.log(`🔄 Restoring database backup: ${timestamp}...`);
110
+ const flags = [
111
+ !verify ? '--no-verify' : '',
112
+ force ? '--force' : ''
113
+ ].filter(Boolean).join(' ');
114
+ const restoreScript = path.join(this.scriptsDir, 'restore-databases.sh');
115
+ // Make script executable
116
+ await execAsync(`chmod +x ${restoreScript}`);
117
+ // Run restore (with force flag to skip confirmation)
118
+ const { stdout, stderr } = await execAsync(`${restoreScript} ${timestamp} ${flags}`);
119
+ console.log(stdout);
120
+ if (stderr) {
121
+ console.warn('Restore warnings:', stderr);
122
+ }
123
+ // Count restored files
124
+ const filesRestored = await this.getBackupFiles(timestamp);
125
+ return {
126
+ success: true,
127
+ timestamp,
128
+ filesRestored: filesRestored.length
129
+ };
130
+ }
131
+ catch (error) {
132
+ const errorMessage = error instanceof Error ? error.message : String(error);
133
+ console.error('❌ Restore failed:', errorMessage);
134
+ return {
135
+ success: false,
136
+ timestamp,
137
+ filesRestored: 0,
138
+ error: errorMessage
139
+ };
140
+ }
141
+ }
142
+ /**
143
+ * List available backups
144
+ */
145
+ async listBackups() {
146
+ try {
147
+ const backupFiles = await fs.readdir(this.backupDir);
148
+ const backupPattern = /\.backup\.(\d{8}-\d{6})/;
149
+ const timestamps = new Set();
150
+ for (const file of backupFiles) {
151
+ const match = file.match(backupPattern);
152
+ if (match) {
153
+ timestamps.add(match[1]);
154
+ }
155
+ }
156
+ const backups = [];
157
+ for (const timestamp of Array.from(timestamps).sort().reverse()) {
158
+ const files = await this.getBackupFiles(timestamp);
159
+ let totalSize = 0;
160
+ for (const file of files) {
161
+ const stats = await fs.stat(file);
162
+ totalSize += stats.size;
163
+ }
164
+ let metadata;
165
+ const metadataFile = path.join(this.backupDir, `backup-metadata.${timestamp}.json`);
166
+ try {
167
+ const metadataContent = await fs.readFile(metadataFile, 'utf-8');
168
+ metadata = JSON.parse(metadataContent);
169
+ }
170
+ catch {
171
+ // Metadata not available
172
+ }
173
+ backups.push({
174
+ timestamp,
175
+ date: metadata?.date || timestamp,
176
+ files: files.length,
177
+ size: totalSize,
178
+ metadata
179
+ });
180
+ }
181
+ return backups;
182
+ }
183
+ catch (error) {
184
+ console.error('Failed to list backups:', error);
185
+ return [];
186
+ }
187
+ }
188
+ /**
189
+ * Verify backup integrity
190
+ */
191
+ async verifyBackup(timestamp) {
192
+ try {
193
+ const manageScript = path.join(this.scriptsDir, 'manage-backups.sh');
194
+ await execAsync(`chmod +x ${manageScript}`);
195
+ const { stdout } = await execAsync(`${manageScript} verify ${timestamp}`);
196
+ return stdout.includes('All files verified');
197
+ }
198
+ catch (error) {
199
+ console.error('Backup verification failed:', error);
200
+ return false;
201
+ }
202
+ }
203
+ /**
204
+ * Clean old backups
205
+ */
206
+ async cleanOldBackups(keepLast = 10) {
207
+ try {
208
+ const manageScript = path.join(this.scriptsDir, 'manage-backups.sh');
209
+ await execAsync(`chmod +x ${manageScript}`);
210
+ const { stdout } = await execAsync(`${manageScript} clean ${keepLast}`);
211
+ const removedMatch = stdout.match(/Removed (\d+) old backup/);
212
+ return removedMatch ? parseInt(removedMatch[1]) : 0;
213
+ }
214
+ catch (error) {
215
+ console.error('Failed to clean old backups:', error);
216
+ return 0;
217
+ }
218
+ }
219
+ /**
220
+ * Get backup files for a specific timestamp
221
+ */
222
+ async getBackupFiles(timestamp) {
223
+ try {
224
+ const allFiles = await fs.readdir(this.backupDir);
225
+ const backupFiles = allFiles.filter(f => f.includes(`.backup.${timestamp}`) && !f.endsWith('.sha256'));
226
+ return backupFiles.map(f => path.join(this.backupDir, f));
227
+ }
228
+ catch {
229
+ return [];
230
+ }
231
+ }
232
+ /**
233
+ * Create automatic backup before dangerous operation
234
+ */
235
+ async createSafetyBackup(operationName) {
236
+ console.log(`đŸ›Ąī¸ Creating safety backup before: ${operationName}`);
237
+ const result = await this.createBackup({
238
+ compress: true,
239
+ verify: true
240
+ });
241
+ if (result.success) {
242
+ console.log(`✅ Safety backup created: ${result.timestamp}`);
243
+ console.log(` Use this to rollback: ./scripts/restore-databases.sh ${result.timestamp}`);
244
+ }
245
+ return result;
246
+ }
247
+ }
248
+ exports.BackupHelper = BackupHelper;
249
+ // Export singleton instance
250
+ exports.backupHelper = new BackupHelper();
251
+ //# sourceMappingURL=backup-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-helper.js","sourceRoot":"","sources":["../../src/scripts/backup-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Database Migration with Integrated Backup System
4
+ *
5
+ * This script demonstrates how to safely perform database migrations
6
+ * with automatic backup and restore capabilities.
7
+ */
8
+ interface MigrationOptions {
9
+ skipBackup?: boolean;
10
+ autoRestore?: boolean;
11
+ verifyBackup?: boolean;
12
+ }
13
+ declare function performDatabaseMigration(options?: MigrationOptions): Promise<void>;
14
+ export { performDatabaseMigration };
15
+ //# sourceMappingURL=migrate-with-backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-with-backup.d.ts","sourceRoot":"","sources":["../../src/scripts/migrate-with-backup.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAIH,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,iBAAe,wBAAwB,CAAC,OAAO,GAAE,gBAAqB,iBAyGrE;AA4GD,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,194 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Database Migration with Integrated Backup System
5
+ *
6
+ * This script demonstrates how to safely perform database migrations
7
+ * with automatic backup and restore capabilities.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.performDatabaseMigration = performDatabaseMigration;
11
+ const backup_helper_1 = require("./backup-helper");
12
+ async function performDatabaseMigration(options = {}) {
13
+ const { skipBackup = false, autoRestore = true, verifyBackup = true } = options;
14
+ let backupTimestamp;
15
+ try {
16
+ console.log('🚀 Starting Database Migration');
17
+ console.log('================================');
18
+ console.log('');
19
+ // Step 1: Create safety backup
20
+ if (!skipBackup) {
21
+ console.log('đŸ“Ļ Step 1: Creating pre-migration backup...');
22
+ const backupResult = await backup_helper_1.backupHelper.createSafetyBackup('database-migration');
23
+ if (!backupResult.success) {
24
+ console.error('❌ Backup failed! Aborting migration.');
25
+ console.error('Error:', backupResult.error);
26
+ process.exit(1);
27
+ }
28
+ backupTimestamp = backupResult.timestamp;
29
+ console.log(`✅ Backup created: ${backupTimestamp}`);
30
+ console.log(` Files: ${backupResult.files.length}`);
31
+ console.log(` Size: ${formatBytes(backupResult.totalSize)}`);
32
+ console.log('');
33
+ // Verify backup if requested
34
+ if (verifyBackup) {
35
+ console.log('🔍 Verifying backup integrity...');
36
+ const isValid = await backup_helper_1.backupHelper.verifyBackup(backupTimestamp);
37
+ if (!isValid) {
38
+ console.error('❌ Backup verification failed! Aborting migration.');
39
+ process.exit(1);
40
+ }
41
+ console.log('✅ Backup verified');
42
+ console.log('');
43
+ }
44
+ }
45
+ else {
46
+ console.log('âš ī¸ Skipping backup (--skip-backup flag)');
47
+ console.log('');
48
+ }
49
+ // Step 2: Perform migration
50
+ console.log('🔄 Step 2: Performing migration...');
51
+ await executeMigrationSteps();
52
+ console.log('✅ Migration completed successfully');
53
+ console.log('');
54
+ // Step 3: Verify migration
55
+ console.log('✅ Step 3: Verifying migration...');
56
+ await verifyMigration();
57
+ console.log('✅ Migration verification passed');
58
+ console.log('');
59
+ // Success!
60
+ console.log('🎉 Migration Complete!');
61
+ console.log('=====================');
62
+ if (backupTimestamp) {
63
+ console.log(`Safety backup: ${backupTimestamp}`);
64
+ console.log(`To rollback: ./scripts/restore-databases.sh ${backupTimestamp} --force`);
65
+ }
66
+ }
67
+ catch (error) {
68
+ console.error('');
69
+ console.error('❌ Migration Failed!');
70
+ console.error('====================');
71
+ console.error('Error:', error instanceof Error ? error.message : String(error));
72
+ console.error('');
73
+ // Automatic restore if enabled and backup exists
74
+ if (autoRestore && backupTimestamp) {
75
+ console.log('🔄 Auto-restore enabled. Restoring from backup...');
76
+ try {
77
+ const restoreResult = await backup_helper_1.backupHelper.restoreBackup(backupTimestamp, {
78
+ verify: true,
79
+ force: true
80
+ });
81
+ if (restoreResult.success) {
82
+ console.log('✅ Database restored to pre-migration state');
83
+ console.log(` Files restored: ${restoreResult.filesRestored}`);
84
+ }
85
+ else {
86
+ console.error('❌ Auto-restore failed!');
87
+ console.error('Manual restore required:');
88
+ console.error(` ./scripts/restore-databases.sh ${backupTimestamp} --force`);
89
+ }
90
+ }
91
+ catch (restoreError) {
92
+ console.error('❌ Auto-restore failed with error:', restoreError);
93
+ console.error('Manual restore required:');
94
+ console.error(` ./scripts/restore-databases.sh ${backupTimestamp} --force`);
95
+ }
96
+ }
97
+ else if (backupTimestamp) {
98
+ console.log('â„šī¸ To restore manually:');
99
+ console.log(` ./scripts/restore-databases.sh ${backupTimestamp} --force`);
100
+ }
101
+ process.exit(1);
102
+ }
103
+ }
104
+ /**
105
+ * Execute actual migration steps
106
+ * Replace this with your actual migration logic
107
+ */
108
+ async function executeMigrationSteps() {
109
+ // Example migration steps:
110
+ // 1. Update schema
111
+ // 2. Migrate data
112
+ // 3. Update indexes
113
+ // 4. Clean up old data
114
+ console.log(' - Updating schema...');
115
+ await simulateStep(1000);
116
+ console.log(' - Migrating data...');
117
+ await simulateStep(2000);
118
+ console.log(' - Creating indexes...');
119
+ await simulateStep(1000);
120
+ console.log(' - Cleaning up...');
121
+ await simulateStep(500);
122
+ }
123
+ /**
124
+ * Verify migration success
125
+ */
126
+ async function verifyMigration() {
127
+ console.log(' - Checking schema integrity...');
128
+ await simulateStep(500);
129
+ console.log(' - Validating data...');
130
+ await simulateStep(500);
131
+ console.log(' - Testing queries...');
132
+ await simulateStep(500);
133
+ }
134
+ /**
135
+ * Simulate async step
136
+ */
137
+ function simulateStep(ms) {
138
+ return new Promise(resolve => setTimeout(resolve, ms));
139
+ }
140
+ /**
141
+ * Format bytes to human readable
142
+ */
143
+ function formatBytes(bytes) {
144
+ if (bytes === 0)
145
+ return '0 Bytes';
146
+ const k = 1024;
147
+ const sizes = ['Bytes', 'KB', 'MB', 'GB'];
148
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
149
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
150
+ }
151
+ /**
152
+ * CLI entry point
153
+ */
154
+ async function main() {
155
+ const args = process.argv.slice(2);
156
+ const options = {
157
+ skipBackup: args.includes('--skip-backup'),
158
+ autoRestore: !args.includes('--no-auto-restore'),
159
+ verifyBackup: !args.includes('--no-verify')
160
+ };
161
+ if (args.includes('--help') || args.includes('-h')) {
162
+ console.log(`
163
+ Database Migration with Backup
164
+
165
+ Usage: node migrate-with-backup.js [options]
166
+
167
+ Options:
168
+ --skip-backup Skip pre-migration backup (dangerous!)
169
+ --no-auto-restore Disable automatic restore on failure
170
+ --no-verify Skip backup verification
171
+ --help, -h Show this help message
172
+
173
+ Examples:
174
+ # Normal migration with backup
175
+ node migrate-with-backup.js
176
+
177
+ # Migration without verification (faster)
178
+ node migrate-with-backup.js --no-verify
179
+
180
+ # Migration without auto-restore
181
+ node migrate-with-backup.js --no-auto-restore
182
+ `);
183
+ process.exit(0);
184
+ }
185
+ await performDatabaseMigration(options);
186
+ }
187
+ // Run if called directly
188
+ if (require.main === module) {
189
+ main().catch(error => {
190
+ console.error('Fatal error:', error);
191
+ process.exit(1);
192
+ });
193
+ }
194
+ //# sourceMappingURL=migrate-with-backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-with-backup.js","sourceRoot":"","sources":["../../src/scripts/migrate-with-backup.ts"],"names":[],"mappings":"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"}