agentic-qe 1.6.1 → 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 (194) hide show
  1. package/.claude/skills/sherlock-review/SKILL.md +786 -0
  2. package/CHANGELOG.md +651 -0
  3. package/README.md +52 -8
  4. package/dist/agents/BaseAgent.d.ts +30 -10
  5. package/dist/agents/BaseAgent.d.ts.map +1 -1
  6. package/dist/agents/BaseAgent.js +115 -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/FleetCommanderAgent.d.ts +16 -0
  11. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  12. package/dist/agents/FleetCommanderAgent.js +35 -20
  13. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  14. package/dist/agents/LearningAgent.d.ts +2 -2
  15. package/dist/agents/LearningAgent.d.ts.map +1 -1
  16. package/dist/agents/LearningAgent.js +4 -4
  17. package/dist/agents/LearningAgent.js.map +1 -1
  18. package/dist/agents/TestExecutorAgent.d.ts +9 -0
  19. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  20. package/dist/agents/TestExecutorAgent.js +60 -0
  21. package/dist/agents/TestExecutorAgent.js.map +1 -1
  22. package/dist/agents/examples/batchAnalyze.d.ts +252 -0
  23. package/dist/agents/examples/batchAnalyze.d.ts.map +1 -0
  24. package/dist/agents/examples/batchAnalyze.js +259 -0
  25. package/dist/agents/examples/batchAnalyze.js.map +1 -0
  26. package/dist/agents/examples/batchGenerate.d.ts +153 -0
  27. package/dist/agents/examples/batchGenerate.d.ts.map +1 -0
  28. package/dist/agents/examples/batchGenerate.js +166 -0
  29. package/dist/agents/examples/batchGenerate.js.map +1 -0
  30. package/dist/agents/generateWithPII.d.ts +128 -0
  31. package/dist/agents/generateWithPII.d.ts.map +1 -0
  32. package/dist/agents/generateWithPII.js +175 -0
  33. package/dist/agents/generateWithPII.js.map +1 -0
  34. package/dist/agents/index.d.ts.map +1 -1
  35. package/dist/agents/index.js +0 -2
  36. package/dist/agents/index.js.map +1 -1
  37. package/dist/agents/lifecycle/AgentLifecycleManager.d.ts +5 -0
  38. package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
  39. package/dist/agents/lifecycle/AgentLifecycleManager.js +10 -0
  40. package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
  41. package/dist/cli/commands/agentdb/learn.d.ts.map +1 -1
  42. package/dist/cli/commands/agentdb/learn.js +190 -71
  43. package/dist/cli/commands/agentdb/learn.js.map +1 -1
  44. package/dist/cli/commands/debug/agent.d.ts.map +1 -1
  45. package/dist/cli/commands/debug/agent.js +40 -13
  46. package/dist/cli/commands/debug/agent.js.map +1 -1
  47. package/dist/cli/commands/debug/diagnostics.js +38 -11
  48. package/dist/cli/commands/debug/diagnostics.js.map +1 -1
  49. package/dist/cli/commands/debug/health-check.js +47 -12
  50. package/dist/cli/commands/debug/health-check.js.map +1 -1
  51. package/dist/cli/commands/debug/profile.js +7 -7
  52. package/dist/cli/commands/debug/profile.js.map +1 -1
  53. package/dist/cli/commands/debug/trace.js +4 -4
  54. package/dist/cli/commands/debug/trace.js.map +1 -1
  55. package/dist/cli/commands/debug/troubleshoot.js +41 -27
  56. package/dist/cli/commands/debug/troubleshoot.js.map +1 -1
  57. package/dist/cli/commands/init.d.ts +6 -3
  58. package/dist/cli/commands/init.d.ts.map +1 -1
  59. package/dist/cli/commands/init.js +71 -54
  60. package/dist/cli/commands/init.js.map +1 -1
  61. package/dist/cli/commands/learn/index.d.ts +4 -0
  62. package/dist/cli/commands/learn/index.d.ts.map +1 -1
  63. package/dist/cli/commands/learn/index.js +57 -0
  64. package/dist/cli/commands/learn/index.js.map +1 -1
  65. package/dist/cli/commands/test/clean.d.ts.map +1 -1
  66. package/dist/cli/commands/test/clean.js +26 -9
  67. package/dist/cli/commands/test/clean.js.map +1 -1
  68. package/dist/cli/commands/test/debug.js +6 -7
  69. package/dist/cli/commands/test/debug.js.map +1 -1
  70. package/dist/cli/commands/test/diff.js +4 -37
  71. package/dist/cli/commands/test/diff.js.map +1 -1
  72. package/dist/cli/commands/test/profile.js +7 -40
  73. package/dist/cli/commands/test/profile.js.map +1 -1
  74. package/dist/cli/commands/test/trace.js +4 -37
  75. package/dist/cli/commands/test/trace.js.map +1 -1
  76. package/dist/cli/index.js +14 -0
  77. package/dist/cli/index.js.map +1 -1
  78. package/dist/core/ArtifactWorkflow.d.ts +4 -0
  79. package/dist/core/ArtifactWorkflow.d.ts.map +1 -1
  80. package/dist/core/ArtifactWorkflow.js +34 -13
  81. package/dist/core/ArtifactWorkflow.js.map +1 -1
  82. package/dist/core/coordination/BlackboardCoordination.d.ts +4 -0
  83. package/dist/core/coordination/BlackboardCoordination.d.ts.map +1 -1
  84. package/dist/core/coordination/BlackboardCoordination.js +28 -22
  85. package/dist/core/coordination/BlackboardCoordination.js.map +1 -1
  86. package/dist/core/coordination/ConsensusGating.d.ts +4 -0
  87. package/dist/core/coordination/ConsensusGating.d.ts.map +1 -1
  88. package/dist/core/coordination/ConsensusGating.js +25 -18
  89. package/dist/core/coordination/ConsensusGating.js.map +1 -1
  90. package/dist/core/memory/AgentDBManager.d.ts +5 -0
  91. package/dist/core/memory/AgentDBManager.d.ts.map +1 -1
  92. package/dist/core/memory/AgentDBManager.js +19 -1
  93. package/dist/core/memory/AgentDBManager.js.map +1 -1
  94. package/dist/core/memory/AgentDBService.d.ts.map +1 -1
  95. package/dist/core/memory/AgentDBService.js +6 -3
  96. package/dist/core/memory/AgentDBService.js.map +1 -1
  97. package/dist/core/memory/RealAgentDBAdapter.d.ts +8 -0
  98. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  99. package/dist/core/memory/RealAgentDBAdapter.js +74 -17
  100. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  101. package/dist/core/memory/ReasoningBankAdapter.d.ts +4 -0
  102. package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -1
  103. package/dist/core/memory/ReasoningBankAdapter.js +20 -0
  104. package/dist/core/memory/ReasoningBankAdapter.js.map +1 -1
  105. package/dist/core/memory/SwarmMemoryManager.d.ts +8 -0
  106. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  107. package/dist/core/memory/SwarmMemoryManager.js +33 -0
  108. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  109. package/dist/learning/ImprovementLoop.js +2 -2
  110. package/dist/learning/ImprovementLoop.js.map +1 -1
  111. package/dist/learning/LearningEngine.d.ts +11 -7
  112. package/dist/learning/LearningEngine.d.ts.map +1 -1
  113. package/dist/learning/LearningEngine.js +157 -73
  114. package/dist/learning/LearningEngine.js.map +1 -1
  115. package/dist/learning/StateExtractor.d.ts +1 -1
  116. package/dist/learning/StateExtractor.d.ts.map +1 -1
  117. package/dist/learning/StateExtractor.js +62 -13
  118. package/dist/learning/StateExtractor.js.map +1 -1
  119. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +83 -0
  120. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +1 -0
  121. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +130 -0
  122. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +1 -0
  123. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +58 -0
  124. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +1 -0
  125. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +84 -0
  126. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +1 -0
  127. package/dist/mcp/handlers/filtered/index.d.ts +47 -0
  128. package/dist/mcp/handlers/filtered/index.d.ts.map +1 -0
  129. package/dist/mcp/handlers/filtered/index.js +63 -0
  130. package/dist/mcp/handlers/filtered/index.js.map +1 -0
  131. package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts +57 -0
  132. package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts.map +1 -0
  133. package/dist/mcp/handlers/filtered/performance-tester-filtered.js +83 -0
  134. package/dist/mcp/handlers/filtered/performance-tester-filtered.js.map +1 -0
  135. package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts +57 -0
  136. package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts.map +1 -0
  137. package/dist/mcp/handlers/filtered/quality-assessor-filtered.js +93 -0
  138. package/dist/mcp/handlers/filtered/quality-assessor-filtered.js.map +1 -0
  139. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +54 -0
  140. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +1 -0
  141. package/dist/mcp/handlers/filtered/security-scanner-filtered.js +73 -0
  142. package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +1 -0
  143. package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts +61 -0
  144. package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts.map +1 -0
  145. package/dist/mcp/handlers/filtered/test-executor-filtered.js +117 -0
  146. package/dist/mcp/handlers/filtered/test-executor-filtered.js.map +1 -0
  147. package/dist/mcp/handlers/phase2/Phase2Tools.js +2 -2
  148. package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
  149. package/dist/mcp/tools/deprecated.d.ts +8 -8
  150. package/dist/scripts/backup-helper.d.ts +64 -0
  151. package/dist/scripts/backup-helper.d.ts.map +1 -0
  152. package/dist/scripts/backup-helper.js +251 -0
  153. package/dist/scripts/backup-helper.js.map +1 -0
  154. package/dist/scripts/migrate-with-backup.d.ts +15 -0
  155. package/dist/scripts/migrate-with-backup.d.ts.map +1 -0
  156. package/dist/scripts/migrate-with-backup.js +194 -0
  157. package/dist/scripts/migrate-with-backup.js.map +1 -0
  158. package/dist/security/pii-tokenization.d.ts +216 -0
  159. package/dist/security/pii-tokenization.d.ts.map +1 -0
  160. package/dist/security/pii-tokenization.js +325 -0
  161. package/dist/security/pii-tokenization.js.map +1 -0
  162. package/dist/utils/Config.d.ts.map +1 -1
  163. package/dist/utils/Config.js +14 -5
  164. package/dist/utils/Config.js.map +1 -1
  165. package/dist/utils/Database.d.ts.map +1 -1
  166. package/dist/utils/Database.js +5 -2
  167. package/dist/utils/Database.js.map +1 -1
  168. package/dist/utils/EmbeddingGenerator.d.ts +35 -0
  169. package/dist/utils/EmbeddingGenerator.d.ts.map +1 -0
  170. package/dist/utils/EmbeddingGenerator.js +72 -0
  171. package/dist/utils/EmbeddingGenerator.js.map +1 -0
  172. package/dist/utils/Logger.d.ts +1 -1
  173. package/dist/utils/Logger.d.ts.map +1 -1
  174. package/dist/utils/Logger.js +4 -4
  175. package/dist/utils/Logger.js.map +1 -1
  176. package/dist/utils/SecurityScanner.js +1 -1
  177. package/dist/utils/SecurityScanner.js.map +1 -1
  178. package/dist/utils/batch-operations.d.ts +215 -0
  179. package/dist/utils/batch-operations.d.ts.map +1 -0
  180. package/dist/utils/batch-operations.js +266 -0
  181. package/dist/utils/batch-operations.js.map +1 -0
  182. package/dist/utils/filtering.d.ts +180 -0
  183. package/dist/utils/filtering.d.ts.map +1 -0
  184. package/dist/utils/filtering.js +288 -0
  185. package/dist/utils/filtering.js.map +1 -0
  186. package/dist/utils/prompt-cache-examples.d.ts +111 -0
  187. package/dist/utils/prompt-cache-examples.d.ts.map +1 -0
  188. package/dist/utils/prompt-cache-examples.js +416 -0
  189. package/dist/utils/prompt-cache-examples.js.map +1 -0
  190. package/dist/utils/prompt-cache.d.ts +305 -0
  191. package/dist/utils/prompt-cache.d.ts.map +1 -0
  192. package/dist/utils/prompt-cache.js +448 -0
  193. package/dist/utils/prompt-cache.js.map +1 -0
  194. package/package.json +6 -3
@@ -272,14 +272,14 @@ export declare const test_generate_unit: {
272
272
  aiEnhanced: z.ZodOptional<z.ZodBoolean>;
273
273
  includeEdgeCases: z.ZodOptional<z.ZodBoolean>;
274
274
  }, "strip", z.ZodTypeAny, {
275
- framework: "jest" | "mocha" | "testing" | "pytest" | "junit";
275
+ framework: "testing" | "jest" | "mocha" | "pytest" | "junit";
276
276
  language: "typescript" | "javascript" | "python" | "java" | "go";
277
277
  sourceCode: string;
278
278
  coverageGoal?: number | undefined;
279
279
  includeEdgeCases?: boolean | undefined;
280
280
  aiEnhanced?: boolean | undefined;
281
281
  }, {
282
- framework: "jest" | "mocha" | "testing" | "pytest" | "junit";
282
+ framework: "testing" | "jest" | "mocha" | "pytest" | "junit";
283
283
  language: "typescript" | "javascript" | "python" | "java" | "go";
284
284
  sourceCode: string;
285
285
  coverageGoal?: number | undefined;
@@ -304,14 +304,14 @@ export declare const test_generate_integration: {
304
304
  includeDatabaseTests: z.ZodOptional<z.ZodBoolean>;
305
305
  }, "strip", z.ZodTypeAny, {
306
306
  framework?: "supertest" | "axios" | "pact" | "rest-assured" | undefined;
307
- apiSpec?: string | undefined;
308
307
  endpoints?: string[] | undefined;
308
+ apiSpec?: string | undefined;
309
309
  includeContractTests?: boolean | undefined;
310
310
  includeDatabaseTests?: boolean | undefined;
311
311
  }, {
312
312
  framework?: "supertest" | "axios" | "pact" | "rest-assured" | undefined;
313
- apiSpec?: string | undefined;
314
313
  endpoints?: string[] | undefined;
314
+ apiSpec?: string | undefined;
315
315
  includeContractTests?: boolean | undefined;
316
316
  includeDatabaseTests?: boolean | undefined;
317
317
  }>;
@@ -980,14 +980,14 @@ export declare const deprecatedTools: ({
980
980
  aiEnhanced: z.ZodOptional<z.ZodBoolean>;
981
981
  includeEdgeCases: z.ZodOptional<z.ZodBoolean>;
982
982
  }, "strip", z.ZodTypeAny, {
983
- framework: "jest" | "mocha" | "testing" | "pytest" | "junit";
983
+ framework: "testing" | "jest" | "mocha" | "pytest" | "junit";
984
984
  language: "typescript" | "javascript" | "python" | "java" | "go";
985
985
  sourceCode: string;
986
986
  coverageGoal?: number | undefined;
987
987
  includeEdgeCases?: boolean | undefined;
988
988
  aiEnhanced?: boolean | undefined;
989
989
  }, {
990
- framework: "jest" | "mocha" | "testing" | "pytest" | "junit";
990
+ framework: "testing" | "jest" | "mocha" | "pytest" | "junit";
991
991
  language: "typescript" | "javascript" | "python" | "java" | "go";
992
992
  sourceCode: string;
993
993
  coverageGoal?: number | undefined;
@@ -1006,14 +1006,14 @@ export declare const deprecatedTools: ({
1006
1006
  includeDatabaseTests: z.ZodOptional<z.ZodBoolean>;
1007
1007
  }, "strip", z.ZodTypeAny, {
1008
1008
  framework?: "supertest" | "axios" | "pact" | "rest-assured" | undefined;
1009
- apiSpec?: string | undefined;
1010
1009
  endpoints?: string[] | undefined;
1010
+ apiSpec?: string | undefined;
1011
1011
  includeContractTests?: boolean | undefined;
1012
1012
  includeDatabaseTests?: boolean | undefined;
1013
1013
  }, {
1014
1014
  framework?: "supertest" | "axios" | "pact" | "rest-assured" | undefined;
1015
- apiSpec?: string | undefined;
1016
1015
  endpoints?: string[] | undefined;
1016
+ apiSpec?: string | undefined;
1017
1017
  includeContractTests?: boolean | undefined;
1018
1018
  includeDatabaseTests?: boolean | undefined;
1019
1019
  }>;
@@ -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":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAAqC;AACrC,+BAAiC;AACjC,gDAAkC;AAClC,2CAA6B;AAE7B,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAkBlC,MAAa,YAAY;IAAzB;QACU,cAAS,GAAG,qBAAqB,CAAC;QAClC,eAAU,GAAG,SAAS,CAAC;IAuPjC,CAAC;IArPC;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,UAGf,EAAE;QACJ,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAEnD,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAE9C,MAAM,KAAK,GAAG;gBACZ,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;gBAC5B,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;aAC7B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE5B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;YAEvE,yBAAyB;YACzB,MAAM,SAAS,CAAC,YAAY,YAAY,EAAE,CAAC,CAAC;YAE5C,aAAa;YACb,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,YAAY,IAAI,KAAK,EAAE,CAAC,CAAC;YAEvE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;YAED,gCAAgC;YAChC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAE1D,mBAAmB;YACnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAEnD,uBAAuB;YACvB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC;YAC1B,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS;gBACT,KAAK;gBACL,SAAS;gBACT,UAAU,EAAE,QAAQ;aACrB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;YAEhD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,YAAY;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,UAGnC,EAAE;QACJ,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;QAEjD,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,KAAK,CAAC,CAAC;YAE7D,MAAM,KAAK,GAAG;gBACZ,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;gBAC5B,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;aACvB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE5B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;YAEzE,yBAAyB;YACzB,MAAM,SAAS,CAAC,YAAY,aAAa,EAAE,CAAC,CAAC;YAE7C,qDAAqD;YACrD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,aAAa,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;YAErF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YAC5C,CAAC;YAED,uBAAuB;YACvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAE3D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS;gBACT,aAAa,EAAE,aAAa,CAAC,MAAM;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;YAEjD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,SAAS;gBACT,aAAa,EAAE,CAAC;gBAChB,KAAK,EAAE,YAAY;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QAOf,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,yBAAyB,CAAC;YAEhD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;YAErC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACxC,IAAI,KAAK,EAAE,CAAC;oBACV,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,CAAC;YAEnB,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAEnD,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC;gBAC1B,CAAC;gBAED,IAAI,QAAQ,CAAC;gBACb,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,SAAS,OAAO,CAAC,CAAC;gBACpF,IAAI,CAAC;oBACH,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBACjE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBACzC,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC;oBACX,SAAS;oBACT,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,SAAS;oBACjC,KAAK,EAAE,KAAK,CAAC,MAAM;oBACnB,IAAI,EAAE,SAAS;oBACf,QAAQ;iBACT,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,SAAiB;QAClC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;YACrE,MAAM,SAAS,CAAC,YAAY,YAAY,EAAE,CAAC,CAAC;YAE5C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,YAAY,WAAW,SAAS,EAAE,CAAC,CAAC;YAE1E,OAAO,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;YACrE,MAAM,SAAS,CAAC,YAAY,YAAY,EAAE,CAAC,CAAC;YAE5C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,YAAY,UAAU,QAAQ,EAAE,CAAC,CAAC;YAExE,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9D,OAAO,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,SAAiB;QAC5C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtC,CAAC,CAAC,QAAQ,CAAC,WAAW,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC7D,CAAC;YAEF,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,aAAqB;QAC5C,OAAO,CAAC,GAAG,CAAC,sCAAsC,aAAa,EAAE,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACrC,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,2DAA2D,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAzPD,oCAyPC;AAED,4BAA4B;AACf,QAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
@@ -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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"}