mcp-adr-analysis-server 2.0.21 → 2.0.24

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 (119) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/index.d.ts +9 -0
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +1380 -781
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  7. package/dist/src/tools/adr-suggestion-tool.js +32 -30
  8. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  9. package/dist/src/tools/content-masking-tool.d.ts +4 -0
  10. package/dist/src/tools/content-masking-tool.d.ts.map +1 -1
  11. package/dist/src/tools/content-masking-tool.js +531 -28
  12. package/dist/src/tools/content-masking-tool.js.map +1 -1
  13. package/dist/src/tools/deployment-readiness-tool.d.ts +8 -5
  14. package/dist/src/tools/deployment-readiness-tool.d.ts.map +1 -1
  15. package/dist/src/tools/deployment-readiness-tool.js +741 -79
  16. package/dist/src/tools/deployment-readiness-tool.js.map +1 -1
  17. package/dist/src/tools/environment-analysis-tool.d.ts +4 -0
  18. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  19. package/dist/src/tools/environment-analysis-tool.js +568 -24
  20. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  21. package/dist/src/tools/mcp-planning-tool.d.ts.map +1 -1
  22. package/dist/src/tools/mcp-planning-tool.js +298 -173
  23. package/dist/src/tools/mcp-planning-tool.js.map +1 -1
  24. package/dist/src/tools/memory-loading-tool.d.ts +60 -0
  25. package/dist/src/tools/memory-loading-tool.d.ts.map +1 -0
  26. package/dist/src/tools/memory-loading-tool.js +457 -0
  27. package/dist/src/tools/memory-loading-tool.js.map +1 -0
  28. package/dist/src/tools/smart-git-push-tool.d.ts +3 -0
  29. package/dist/src/tools/smart-git-push-tool.d.ts.map +1 -1
  30. package/dist/src/tools/smart-git-push-tool.js +177 -223
  31. package/dist/src/tools/smart-git-push-tool.js.map +1 -1
  32. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts +20 -11
  33. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts.map +1 -1
  34. package/dist/src/tools/troubleshoot-guided-workflow-tool.js +506 -22
  35. package/dist/src/tools/troubleshoot-guided-workflow-tool.js.map +1 -1
  36. package/dist/src/types/enhanced-errors.d.ts +173 -0
  37. package/dist/src/types/enhanced-errors.d.ts.map +1 -0
  38. package/dist/src/types/enhanced-errors.js +668 -0
  39. package/dist/src/types/enhanced-errors.js.map +1 -0
  40. package/dist/src/types/knowledge-graph-schemas.d.ts +92 -0
  41. package/dist/src/types/knowledge-graph-schemas.d.ts.map +1 -1
  42. package/dist/src/types/knowledge-graph-schemas.js +45 -17
  43. package/dist/src/types/knowledge-graph-schemas.js.map +1 -1
  44. package/dist/src/types/memory-entities.d.ts +7209 -0
  45. package/dist/src/types/memory-entities.d.ts.map +1 -0
  46. package/dist/src/types/memory-entities.js +395 -0
  47. package/dist/src/types/memory-entities.js.map +1 -0
  48. package/dist/src/types/todo-json-schemas.d.ts +7 -653
  49. package/dist/src/types/todo-json-schemas.d.ts.map +1 -1
  50. package/dist/src/types/todo-json-schemas.js +6 -110
  51. package/dist/src/types/todo-json-schemas.js.map +1 -1
  52. package/dist/src/utils/enhanced-logging.d.ts +195 -0
  53. package/dist/src/utils/enhanced-logging.d.ts.map +1 -0
  54. package/dist/src/utils/enhanced-logging.js +449 -0
  55. package/dist/src/utils/enhanced-logging.js.map +1 -0
  56. package/dist/src/utils/interactive-approval.d.ts +1 -1
  57. package/dist/src/utils/interactive-approval.d.ts.map +1 -1
  58. package/dist/src/utils/interactive-approval.js +20 -16
  59. package/dist/src/utils/interactive-approval.js.map +1 -1
  60. package/dist/src/utils/knowledge-graph-manager.d.ts +23 -1
  61. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
  62. package/dist/src/utils/knowledge-graph-manager.js +297 -69
  63. package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
  64. package/dist/src/utils/memory-entity-manager.d.ts +134 -0
  65. package/dist/src/utils/memory-entity-manager.d.ts.map +1 -0
  66. package/dist/src/utils/memory-entity-manager.js +848 -0
  67. package/dist/src/utils/memory-entity-manager.js.map +1 -0
  68. package/dist/src/utils/memory-health-scoring.d.ts +125 -0
  69. package/dist/src/utils/memory-health-scoring.d.ts.map +1 -0
  70. package/dist/src/utils/memory-health-scoring.js +277 -0
  71. package/dist/src/utils/memory-health-scoring.js.map +1 -0
  72. package/dist/src/utils/memory-migration-manager.d.ts +93 -0
  73. package/dist/src/utils/memory-migration-manager.d.ts.map +1 -0
  74. package/dist/src/utils/memory-migration-manager.js +834 -0
  75. package/dist/src/utils/memory-migration-manager.js.map +1 -0
  76. package/dist/src/utils/memory-relationship-mapper.d.ts +87 -0
  77. package/dist/src/utils/memory-relationship-mapper.d.ts.map +1 -0
  78. package/dist/src/utils/memory-relationship-mapper.js +481 -0
  79. package/dist/src/utils/memory-relationship-mapper.js.map +1 -0
  80. package/dist/src/utils/memory-rollback-manager.d.ts +93 -0
  81. package/dist/src/utils/memory-rollback-manager.d.ts.map +1 -0
  82. package/dist/src/utils/memory-rollback-manager.js +542 -0
  83. package/dist/src/utils/memory-rollback-manager.js.map +1 -0
  84. package/dist/src/utils/memory-transformation.d.ts +59 -0
  85. package/dist/src/utils/memory-transformation.d.ts.map +1 -0
  86. package/dist/src/utils/memory-transformation.js +742 -0
  87. package/dist/src/utils/memory-transformation.js.map +1 -0
  88. package/dist/src/utils/prompt-execution.d.ts.map +1 -1
  89. package/dist/src/utils/prompt-execution.js +72 -51
  90. package/dist/src/utils/prompt-execution.js.map +1 -1
  91. package/dist/src/utils/todo-file-watcher.d.ts +11 -23
  92. package/dist/src/utils/todo-file-watcher.d.ts.map +1 -1
  93. package/dist/src/utils/todo-file-watcher.js +18 -156
  94. package/dist/src/utils/todo-file-watcher.js.map +1 -1
  95. package/package.json +22 -6
  96. package/dist/src/tools/smart-score-tool.d.ts +0 -173
  97. package/dist/src/tools/smart-score-tool.d.ts.map +0 -1
  98. package/dist/src/tools/smart-score-tool.js +0 -681
  99. package/dist/src/tools/smart-score-tool.js.map +0 -1
  100. package/dist/src/tools/todo-management-tool-v2.d.ts +0 -368
  101. package/dist/src/tools/todo-management-tool-v2.d.ts.map +0 -1
  102. package/dist/src/tools/todo-management-tool-v2.js +0 -922
  103. package/dist/src/tools/todo-management-tool-v2.js.map +0 -1
  104. package/dist/src/utils/project-health-scoring.d.ts +0 -177
  105. package/dist/src/utils/project-health-scoring.d.ts.map +0 -1
  106. package/dist/src/utils/project-health-scoring.js +0 -370
  107. package/dist/src/utils/project-health-scoring.js.map +0 -1
  108. package/dist/src/utils/todo-json-manager.d.ts +0 -71
  109. package/dist/src/utils/todo-json-manager.d.ts.map +0 -1
  110. package/dist/src/utils/todo-json-manager.js +0 -396
  111. package/dist/src/utils/todo-json-manager.js.map +0 -1
  112. package/dist/src/utils/todo-markdown-converter.d.ts +0 -16
  113. package/dist/src/utils/todo-markdown-converter.d.ts.map +0 -1
  114. package/dist/src/utils/todo-markdown-converter.js +0 -362
  115. package/dist/src/utils/todo-markdown-converter.js.map +0 -1
  116. package/dist/src/utils/todo-migration.d.ts +0 -47
  117. package/dist/src/utils/todo-migration.d.ts.map +0 -1
  118. package/dist/src/utils/todo-migration.js +0 -261
  119. package/dist/src/utils/todo-migration.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-relationship-mapper.js","sourceRoot":"","sources":["../../../src/utils/memory-relationship-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Memory Rollback Manager
3
+ *
4
+ * Provides safe rollback capabilities for memory-centric architecture migration.
5
+ * Handles restoration of legacy systems and data integrity validation.
6
+ */
7
+ import { MemoryEntityManager } from './memory-entity-manager.js';
8
+ export interface RollbackConfig {
9
+ backupDirectory: string;
10
+ validateBeforeRollback: boolean;
11
+ createPreRollbackBackup: boolean;
12
+ preserveMemoryData: boolean;
13
+ rollbackTimeout: number;
14
+ }
15
+ export interface RollbackResult {
16
+ success: boolean;
17
+ rollbackType: 'full' | 'partial' | 'failed';
18
+ restoredFiles: string[];
19
+ preservedData?: string;
20
+ errors: Array<{
21
+ operation: string;
22
+ error: string;
23
+ critical: boolean;
24
+ }>;
25
+ performance: {
26
+ startTime: string;
27
+ endTime: string;
28
+ durationMs: number;
29
+ };
30
+ validation: {
31
+ preRollbackValid: boolean;
32
+ postRollbackValid: boolean;
33
+ issues: string[];
34
+ };
35
+ }
36
+ export interface BackupManifest {
37
+ timestamp: string;
38
+ migrationVersion: string;
39
+ projectPath: string;
40
+ backupContents: {
41
+ cache: boolean;
42
+ docs: boolean;
43
+ memoryData?: boolean;
44
+ };
45
+ fileList: Array<{
46
+ originalPath: string;
47
+ backupPath: string;
48
+ fileSize: number;
49
+ checksum: string;
50
+ }>;
51
+ }
52
+ export declare class MemoryRollbackManager {
53
+ private logger;
54
+ private config;
55
+ private projectConfig;
56
+ constructor(_memoryManager: MemoryEntityManager, config?: Partial<RollbackConfig>);
57
+ /**
58
+ * Perform complete rollback to legacy system
59
+ */
60
+ performFullRollback(backupPath?: string): Promise<RollbackResult>;
61
+ /**
62
+ * Perform selective rollback of specific components
63
+ */
64
+ performSelectiveRollback(components: Array<'cache' | 'docs' | 'memory'>, backupPath?: string): Promise<RollbackResult>;
65
+ /**
66
+ * Validate that rollback can be performed safely
67
+ */
68
+ validateRollbackReadiness(backupPath?: string): Promise<{
69
+ canRollback: boolean;
70
+ issues: string[];
71
+ recommendations: string[];
72
+ backupInfo?: BackupManifest;
73
+ }>;
74
+ /**
75
+ * Create rollback plan documentation
76
+ */
77
+ generateRollbackPlan(backupPath?: string): Promise<string>;
78
+ private findLatestBackup;
79
+ private validateBackup;
80
+ private createPreRollbackBackup;
81
+ private preserveMemoryData;
82
+ private stopMemoryServices;
83
+ private clearMemoryData;
84
+ private restoreLegacyData;
85
+ private restoreComponent;
86
+ private validateLegacyRestoration;
87
+ private restartLegacyServices;
88
+ private attemptPartialRecovery;
89
+ private checkDiskSpace;
90
+ private checkRunningProcesses;
91
+ private copyDirectory;
92
+ }
93
+ //# sourceMappingURL=memory-rollback-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-rollback-manager.d.ts","sourceRoot":"","sources":["../../../src/utils/memory-rollback-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKjE,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;IAChC,uBAAuB,EAAE,OAAO,CAAC;IACjC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC5C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,EAAE;QACV,gBAAgB,EAAE,OAAO,CAAC;QAC1B,iBAAiB,EAAE,OAAO,CAAC;QAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE;QACd,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,OAAO,CAAC;QACd,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,aAAa,CAAM;gBAEf,cAAc,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAejF;;OAEG;IACG,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA+GvE;;OAEG;IACG,wBAAwB,CAC5B,UAAU,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC9C,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC;IA8D1B;;OAEG;IACG,yBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5D,WAAW,EAAE,OAAO,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,UAAU,CAAC,EAAE,cAAc,CAAC;KAC7B,CAAC;IAoEF;;OAEG;IACG,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAmGlD,gBAAgB;YAqBhB,cAAc;YAgDd,uBAAuB;YAevB,kBAAkB;YAclB,kBAAkB;YAMlB,eAAe;YAQf,iBAAiB;YAwBjB,gBAAgB;YAgChB,yBAAyB;YA0CzB,qBAAqB;YAKrB,sBAAsB;YAKtB,cAAc;YAcd,qBAAqB;YAYrB,aAAa;CAe5B"}
@@ -0,0 +1,542 @@
1
+ /**
2
+ * Memory Rollback Manager
3
+ *
4
+ * Provides safe rollback capabilities for memory-centric architecture migration.
5
+ * Handles restoration of legacy systems and data integrity validation.
6
+ */
7
+ import * as fs from 'fs/promises';
8
+ import * as path from 'path';
9
+ import { existsSync } from 'fs';
10
+ import { EnhancedLogger } from './enhanced-logging.js';
11
+ import { loadConfig } from './config.js';
12
+ import { McpAdrError } from '../types/index.js';
13
+ export class MemoryRollbackManager {
14
+ // Memory manager could be used for selective rollback operations
15
+ logger;
16
+ config;
17
+ projectConfig;
18
+ constructor(_memoryManager, config) {
19
+ // Store memory manager reference if needed for future selective rollback features
20
+ this.logger = new EnhancedLogger();
21
+ this.projectConfig = loadConfig();
22
+ this.config = {
23
+ backupDirectory: path.join(this.projectConfig.projectPath, '.mcp-migration-backups'),
24
+ validateBeforeRollback: true,
25
+ createPreRollbackBackup: true,
26
+ preserveMemoryData: true,
27
+ rollbackTimeout: 300000, // 5 minutes
28
+ ...config,
29
+ };
30
+ }
31
+ /**
32
+ * Perform complete rollback to legacy system
33
+ */
34
+ async performFullRollback(backupPath) {
35
+ const startTime = new Date();
36
+ this.logger.info('Starting full rollback to legacy system', 'MemoryRollbackManager');
37
+ const result = {
38
+ success: false,
39
+ rollbackType: 'failed',
40
+ restoredFiles: [],
41
+ errors: [],
42
+ performance: {
43
+ startTime: startTime.toISOString(),
44
+ endTime: '',
45
+ durationMs: 0,
46
+ },
47
+ validation: {
48
+ preRollbackValid: false,
49
+ postRollbackValid: false,
50
+ issues: [],
51
+ },
52
+ };
53
+ try {
54
+ // Find backup to restore from
55
+ const resolvedBackupPath = backupPath || (await this.findLatestBackup());
56
+ if (!resolvedBackupPath) {
57
+ throw new McpAdrError('No backup found for rollback', 'ROLLBACK_NO_BACKUP');
58
+ }
59
+ this.logger.info('Using backup for rollback', 'MemoryRollbackManager', {
60
+ backupPath: resolvedBackupPath,
61
+ });
62
+ // Validate backup before proceeding
63
+ if (this.config.validateBeforeRollback) {
64
+ const backupValidation = await this.validateBackup(resolvedBackupPath);
65
+ result.validation.preRollbackValid = backupValidation.isValid;
66
+ result.validation.issues.push(...backupValidation.issues);
67
+ if (!backupValidation.isValid) {
68
+ throw new McpAdrError(`Backup validation failed: ${backupValidation.issues.join(', ')}`, 'ROLLBACK_INVALID_BACKUP');
69
+ }
70
+ }
71
+ // Create pre-rollback backup if enabled
72
+ if (this.config.createPreRollbackBackup) {
73
+ const preRollbackBackup = await this.createPreRollbackBackup();
74
+ this.logger.info('Pre-rollback backup created', 'MemoryRollbackManager', {
75
+ backupPath: preRollbackBackup,
76
+ });
77
+ }
78
+ // Preserve memory data if requested
79
+ if (this.config.preserveMemoryData) {
80
+ result.preservedData = await this.preserveMemoryData();
81
+ }
82
+ // Stop memory services (in a real implementation, this would stop the server)
83
+ await this.stopMemoryServices();
84
+ // Clear memory data
85
+ await this.clearMemoryData();
86
+ // Restore legacy data
87
+ const restoredFiles = await this.restoreLegacyData(resolvedBackupPath);
88
+ result.restoredFiles = restoredFiles;
89
+ // Validate restoration
90
+ const postValidation = await this.validateLegacyRestoration(resolvedBackupPath);
91
+ result.validation.postRollbackValid = postValidation.isValid;
92
+ result.validation.issues.push(...postValidation.issues);
93
+ // Restart services (in a real implementation)
94
+ await this.restartLegacyServices();
95
+ result.success = true;
96
+ result.rollbackType = 'full';
97
+ this.logger.info('Full rollback completed successfully', 'MemoryRollbackManager', {
98
+ restoredFiles: restoredFiles.length,
99
+ preservedData: !!result.preservedData,
100
+ });
101
+ }
102
+ catch (error) {
103
+ result.success = false;
104
+ result.errors.push({
105
+ operation: 'full_rollback',
106
+ error: error instanceof Error ? error.message : String(error),
107
+ critical: true,
108
+ });
109
+ this.logger.error('Full rollback failed', 'MemoryRollbackManager');
110
+ // Attempt partial recovery
111
+ try {
112
+ await this.attemptPartialRecovery();
113
+ result.rollbackType = 'partial';
114
+ }
115
+ catch (recoveryError) {
116
+ this.logger.error('Partial recovery also failed', 'MemoryRollbackManager');
117
+ }
118
+ }
119
+ // Calculate performance metrics
120
+ const endTime = new Date();
121
+ result.performance.endTime = endTime.toISOString();
122
+ result.performance.durationMs = endTime.getTime() - startTime.getTime();
123
+ return result;
124
+ }
125
+ /**
126
+ * Perform selective rollback of specific components
127
+ */
128
+ async performSelectiveRollback(components, backupPath) {
129
+ const startTime = new Date();
130
+ this.logger.info('Starting selective rollback', 'MemoryRollbackManager', { components });
131
+ const result = {
132
+ success: false,
133
+ rollbackType: 'failed',
134
+ restoredFiles: [],
135
+ errors: [],
136
+ performance: {
137
+ startTime: startTime.toISOString(),
138
+ endTime: '',
139
+ durationMs: 0,
140
+ },
141
+ validation: {
142
+ preRollbackValid: true,
143
+ postRollbackValid: false,
144
+ issues: [],
145
+ },
146
+ };
147
+ try {
148
+ const resolvedBackupPath = backupPath || (await this.findLatestBackup());
149
+ if (!resolvedBackupPath) {
150
+ throw new McpAdrError('No backup found for rollback', 'ROLLBACK_NO_BACKUP');
151
+ }
152
+ for (const component of components) {
153
+ try {
154
+ const componentFiles = await this.restoreComponent(component, resolvedBackupPath);
155
+ result.restoredFiles.push(...componentFiles);
156
+ this.logger.debug('Component restored successfully', 'MemoryRollbackManager', {
157
+ component,
158
+ filesRestored: componentFiles.length,
159
+ });
160
+ }
161
+ catch (error) {
162
+ result.errors.push({
163
+ operation: `restore_${component}`,
164
+ error: error instanceof Error ? error.message : String(error),
165
+ critical: false,
166
+ });
167
+ }
168
+ }
169
+ result.success = result.errors.filter(e => e.critical).length === 0;
170
+ result.rollbackType = result.success ? 'full' : 'partial';
171
+ }
172
+ catch (error) {
173
+ result.errors.push({
174
+ operation: 'selective_rollback',
175
+ error: error instanceof Error ? error.message : String(error),
176
+ critical: true,
177
+ });
178
+ }
179
+ const endTime = new Date();
180
+ result.performance.endTime = endTime.toISOString();
181
+ result.performance.durationMs = endTime.getTime() - startTime.getTime();
182
+ return result;
183
+ }
184
+ /**
185
+ * Validate that rollback can be performed safely
186
+ */
187
+ async validateRollbackReadiness(backupPath) {
188
+ const issues = [];
189
+ const recommendations = [];
190
+ let backupInfo;
191
+ try {
192
+ // Find and validate backup
193
+ const resolvedBackupPath = backupPath || (await this.findLatestBackup());
194
+ if (!resolvedBackupPath) {
195
+ issues.push('No backup available for rollback');
196
+ recommendations.push('Create a backup before attempting rollback');
197
+ return { canRollback: false, issues, recommendations };
198
+ }
199
+ // Load backup manifest
200
+ const manifestPath = path.join(resolvedBackupPath, 'backup-manifest.json');
201
+ if (existsSync(manifestPath)) {
202
+ const manifestContent = await fs.readFile(manifestPath, 'utf-8');
203
+ backupInfo = JSON.parse(manifestContent);
204
+ }
205
+ else {
206
+ issues.push('Backup manifest not found');
207
+ }
208
+ // Validate backup integrity
209
+ const backupValidation = await this.validateBackup(resolvedBackupPath);
210
+ if (!backupValidation.isValid) {
211
+ issues.push(...backupValidation.issues);
212
+ }
213
+ // Check disk space
214
+ const spaceCheck = await this.checkDiskSpace(resolvedBackupPath);
215
+ if (!spaceCheck.sufficient) {
216
+ issues.push(`Insufficient disk space: ${spaceCheck.available} available, ${spaceCheck.required} required`);
217
+ recommendations.push('Free up disk space before rollback');
218
+ }
219
+ // Check for running processes
220
+ const processCheck = await this.checkRunningProcesses();
221
+ if (processCheck.hasRunningProcesses) {
222
+ issues.push('Memory-related processes are still running');
223
+ recommendations.push('Stop all memory-related services before rollback');
224
+ }
225
+ // Check backup age
226
+ if (backupInfo) {
227
+ const backupAge = Date.now() - new Date(backupInfo.timestamp).getTime();
228
+ const maxAge = 7 * 24 * 60 * 60 * 1000; // 7 days
229
+ if (backupAge > maxAge) {
230
+ recommendations.push('Backup is older than 7 days - consider creating a fresh backup');
231
+ }
232
+ }
233
+ }
234
+ catch (error) {
235
+ issues.push(`Rollback validation failed: ${error instanceof Error ? error.message : String(error)}`);
236
+ }
237
+ return {
238
+ canRollback: issues.length === 0,
239
+ issues,
240
+ recommendations,
241
+ ...(backupInfo && { backupInfo }),
242
+ };
243
+ }
244
+ /**
245
+ * Create rollback plan documentation
246
+ */
247
+ async generateRollbackPlan(backupPath) {
248
+ const resolvedBackupPath = backupPath || (await this.findLatestBackup());
249
+ const readinessCheck = await this.validateRollbackReadiness(resolvedBackupPath || undefined);
250
+ const plan = [
251
+ '# Memory System Rollback Plan',
252
+ '',
253
+ `Generated: ${new Date().toISOString()}`,
254
+ `Backup Path: ${resolvedBackupPath || 'Not found'}`,
255
+ '',
256
+ '## Pre-Rollback Checklist',
257
+ '',
258
+ '- [ ] Stop MCP ADR Analysis Server',
259
+ '- [ ] Verify backup integrity',
260
+ '- [ ] Create pre-rollback backup',
261
+ '- [ ] Ensure sufficient disk space',
262
+ '- [ ] Notify stakeholders',
263
+ '',
264
+ '## Rollback Steps',
265
+ '',
266
+ '### 1. Preparation',
267
+ '```bash',
268
+ '# Stop the server (implementation specific)',
269
+ 'systemctl stop mcp-adr-server # or your stop command',
270
+ '',
271
+ '# Verify backup location',
272
+ `ls -la "${resolvedBackupPath}"`,
273
+ '```',
274
+ '',
275
+ '### 2. Clear Memory Data',
276
+ '```bash',
277
+ `rm -rf "${path.join(this.projectConfig.projectPath, '.mcp-adr-memory')}"`,
278
+ '```',
279
+ '',
280
+ '### 3. Restore Legacy Data',
281
+ '```bash',
282
+ `cp -r "${path.join(resolvedBackupPath || '', 'cache')}" "${path.join(this.projectConfig.projectPath, '.mcp-adr-cache')}"`,
283
+ `cp -r "${path.join(resolvedBackupPath || '', 'docs')}" "${path.join(this.projectConfig.projectPath, 'docs')}"`,
284
+ '```',
285
+ '',
286
+ '### 4. Restart System',
287
+ '```bash',
288
+ '# Start the server with legacy configuration',
289
+ 'systemctl start mcp-adr-server # or your start command',
290
+ '```',
291
+ '',
292
+ '## Post-Rollback Validation',
293
+ '',
294
+ '- [ ] Verify ADR files are accessible',
295
+ '- [ ] Check deployment history is available',
296
+ '- [ ] Confirm troubleshooting data is present',
297
+ '- [ ] Test basic server functionality',
298
+ '',
299
+ '## Rollback Readiness Assessment',
300
+ '',
301
+ `**Can Rollback**: ${readinessCheck.canRollback ? '✅ Yes' : '❌ No'}`,
302
+ '',
303
+ ];
304
+ if (readinessCheck.issues.length > 0) {
305
+ plan.push('### Issues to Resolve:');
306
+ readinessCheck.issues.forEach(issue => {
307
+ plan.push(`- ❌ ${issue}`);
308
+ });
309
+ plan.push('');
310
+ }
311
+ if (readinessCheck.recommendations.length > 0) {
312
+ plan.push('### Recommendations:');
313
+ readinessCheck.recommendations.forEach(rec => {
314
+ plan.push(`- 💡 ${rec}`);
315
+ });
316
+ plan.push('');
317
+ }
318
+ if (readinessCheck.backupInfo) {
319
+ plan.push('### Backup Information:');
320
+ plan.push(`- **Created**: ${readinessCheck.backupInfo.timestamp}`);
321
+ plan.push(`- **Version**: ${readinessCheck.backupInfo.migrationVersion}`);
322
+ plan.push(`- **Contents**: ${Object.entries(readinessCheck.backupInfo.backupContents)
323
+ .filter(([_, exists]) => exists)
324
+ .map(([name]) => name)
325
+ .join(', ')}`);
326
+ plan.push('');
327
+ }
328
+ plan.push('## Emergency Contacts');
329
+ plan.push('');
330
+ plan.push('- **System Administrator**: [Contact Info]');
331
+ plan.push('- **Database Administrator**: [Contact Info]');
332
+ plan.push('- **Development Team Lead**: [Contact Info]');
333
+ return plan.join('\n');
334
+ }
335
+ // Private helper methods
336
+ async findLatestBackup() {
337
+ try {
338
+ if (!existsSync(this.config.backupDirectory)) {
339
+ return null;
340
+ }
341
+ const backupDirs = await fs.readdir(this.config.backupDirectory);
342
+ const migrationBackups = backupDirs
343
+ .filter(dir => dir.startsWith('migration-'))
344
+ .sort()
345
+ .reverse();
346
+ return migrationBackups.length > 0
347
+ ? path.join(this.config.backupDirectory, migrationBackups[0] || '')
348
+ : null;
349
+ }
350
+ catch (error) {
351
+ this.logger.error('Failed to find latest backup', 'MemoryRollbackManager');
352
+ return null;
353
+ }
354
+ }
355
+ async validateBackup(backupPath) {
356
+ const issues = [];
357
+ try {
358
+ // Check if backup directory exists
359
+ if (!existsSync(backupPath)) {
360
+ issues.push('Backup directory does not exist');
361
+ return { isValid: false, issues };
362
+ }
363
+ // Check for manifest file
364
+ const manifestPath = path.join(backupPath, 'backup-manifest.json');
365
+ if (!existsSync(manifestPath)) {
366
+ issues.push('Backup manifest file missing');
367
+ }
368
+ else {
369
+ try {
370
+ const manifest = JSON.parse(await fs.readFile(manifestPath, 'utf-8'));
371
+ if (!manifest.timestamp || !manifest.projectPath) {
372
+ issues.push('Invalid backup manifest format');
373
+ }
374
+ }
375
+ catch (error) {
376
+ issues.push('Cannot parse backup manifest');
377
+ }
378
+ }
379
+ // Check for expected backup contents
380
+ const expectedDirs = ['cache', 'docs'];
381
+ for (const dir of expectedDirs) {
382
+ const dirPath = path.join(backupPath, dir);
383
+ if (!existsSync(dirPath)) {
384
+ issues.push(`Expected backup directory missing: ${dir}`);
385
+ }
386
+ }
387
+ }
388
+ catch (error) {
389
+ issues.push(`Backup validation error: ${error instanceof Error ? error.message : String(error)}`);
390
+ }
391
+ return {
392
+ isValid: issues.length === 0,
393
+ issues,
394
+ };
395
+ }
396
+ async createPreRollbackBackup() {
397
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
398
+ const backupDir = path.join(this.config.backupDirectory, `pre-rollback-${timestamp}`);
399
+ await fs.mkdir(backupDir, { recursive: true });
400
+ // Backup current memory data if it exists
401
+ const memoryDir = path.join(this.projectConfig.projectPath, '.mcp-adr-memory');
402
+ if (existsSync(memoryDir)) {
403
+ await this.copyDirectory(memoryDir, path.join(backupDir, 'memory'));
404
+ }
405
+ return backupDir;
406
+ }
407
+ async preserveMemoryData() {
408
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
409
+ const preservationDir = path.join(this.config.backupDirectory, `preserved-memory-${timestamp}`);
410
+ await fs.mkdir(preservationDir, { recursive: true });
411
+ const memoryDir = path.join(this.projectConfig.projectPath, '.mcp-adr-memory');
412
+ if (existsSync(memoryDir)) {
413
+ await this.copyDirectory(memoryDir, preservationDir);
414
+ }
415
+ return preservationDir;
416
+ }
417
+ async stopMemoryServices() {
418
+ this.logger.info('Stopping memory services', 'MemoryRollbackManager');
419
+ // In a real implementation, this would stop the MCP server
420
+ // For now, we'll just log the action
421
+ }
422
+ async clearMemoryData() {
423
+ const memoryDir = path.join(this.projectConfig.projectPath, '.mcp-adr-memory');
424
+ if (existsSync(memoryDir)) {
425
+ await fs.rm(memoryDir, { recursive: true, force: true });
426
+ this.logger.info('Memory data cleared', 'MemoryRollbackManager');
427
+ }
428
+ }
429
+ async restoreLegacyData(backupPath) {
430
+ const restoredFiles = [];
431
+ // Restore cache directory
432
+ const cacheBackupPath = path.join(backupPath, 'cache');
433
+ const cacheTargetPath = path.join(this.projectConfig.projectPath, '.mcp-adr-cache');
434
+ if (existsSync(cacheBackupPath)) {
435
+ await this.copyDirectory(cacheBackupPath, cacheTargetPath);
436
+ restoredFiles.push(cacheTargetPath);
437
+ }
438
+ // Restore docs directory
439
+ const docsBackupPath = path.join(backupPath, 'docs');
440
+ const docsTargetPath = path.join(this.projectConfig.projectPath, 'docs');
441
+ if (existsSync(docsBackupPath)) {
442
+ await this.copyDirectory(docsBackupPath, docsTargetPath);
443
+ restoredFiles.push(docsTargetPath);
444
+ }
445
+ return restoredFiles;
446
+ }
447
+ async restoreComponent(component, backupPath) {
448
+ const restoredFiles = [];
449
+ let sourcePath;
450
+ let targetPath;
451
+ switch (component) {
452
+ case 'cache':
453
+ sourcePath = path.join(backupPath, 'cache');
454
+ targetPath = path.join(this.projectConfig.projectPath, '.mcp-adr-cache');
455
+ break;
456
+ case 'docs':
457
+ sourcePath = path.join(backupPath, 'docs');
458
+ targetPath = path.join(this.projectConfig.projectPath, 'docs');
459
+ break;
460
+ case 'memory':
461
+ sourcePath = path.join(backupPath, 'memory');
462
+ targetPath = path.join(this.projectConfig.projectPath, '.mcp-adr-memory');
463
+ break;
464
+ }
465
+ if (existsSync(sourcePath)) {
466
+ await this.copyDirectory(sourcePath, targetPath);
467
+ restoredFiles.push(targetPath);
468
+ }
469
+ return restoredFiles;
470
+ }
471
+ async validateLegacyRestoration(_backupPath) {
472
+ const issues = [];
473
+ try {
474
+ // Check if expected legacy files exist
475
+ const cacheDir = path.join(this.projectConfig.projectPath, '.mcp-adr-cache');
476
+ const docsDir = path.join(this.projectConfig.projectPath, 'docs');
477
+ if (!existsSync(cacheDir)) {
478
+ issues.push('Cache directory not restored');
479
+ }
480
+ if (!existsSync(docsDir)) {
481
+ issues.push('Docs directory not restored');
482
+ }
483
+ // Verify specific legacy files exist
484
+ const expectedFiles = [
485
+ path.join(cacheDir, 'deployment-history.json'),
486
+ path.join(docsDir, 'adrs'),
487
+ ];
488
+ for (const filePath of expectedFiles) {
489
+ if (!existsSync(filePath)) {
490
+ issues.push(`Expected file/directory not found: ${filePath}`);
491
+ }
492
+ }
493
+ }
494
+ catch (error) {
495
+ issues.push(`Legacy restoration validation error: ${error instanceof Error ? error.message : String(error)}`);
496
+ }
497
+ return {
498
+ isValid: issues.length === 0,
499
+ issues,
500
+ };
501
+ }
502
+ async restartLegacyServices() {
503
+ this.logger.info('Restarting legacy services', 'MemoryRollbackManager');
504
+ // In a real implementation, this would restart the server with legacy configuration
505
+ }
506
+ async attemptPartialRecovery() {
507
+ this.logger.info('Attempting partial recovery', 'MemoryRollbackManager');
508
+ // Implement partial recovery logic here
509
+ }
510
+ async checkDiskSpace(_backupPath) {
511
+ // Simplified disk space check
512
+ // In a real implementation, you'd use fs.stat or a system call
513
+ return {
514
+ sufficient: true,
515
+ available: '10GB',
516
+ required: '5GB',
517
+ };
518
+ }
519
+ async checkRunningProcesses() {
520
+ // Simplified process check
521
+ // In a real implementation, you'd check for running MCP processes
522
+ return {
523
+ hasRunningProcesses: false,
524
+ processes: [],
525
+ };
526
+ }
527
+ async copyDirectory(src, dest) {
528
+ await fs.mkdir(dest, { recursive: true });
529
+ const entries = await fs.readdir(src, { withFileTypes: true });
530
+ for (const entry of entries) {
531
+ const srcPath = path.join(src, entry.name);
532
+ const destPath = path.join(dest, entry.name);
533
+ if (entry.isDirectory()) {
534
+ await this.copyDirectory(srcPath, destPath);
535
+ }
536
+ else {
537
+ await fs.copyFile(srcPath, destPath);
538
+ }
539
+ }
540
+ }
541
+ }
542
+ //# sourceMappingURL=memory-rollback-manager.js.map