nexusforge-cli 1.1.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/components/App.d.ts.map +1 -1
  2. package/dist/components/App.js +183 -17
  3. package/dist/components/App.js.map +1 -1
  4. package/dist/index.js +462 -10
  5. package/dist/index.js.map +1 -1
  6. package/dist/modules/commandEngine.d.ts +70 -0
  7. package/dist/modules/commandEngine.d.ts.map +1 -0
  8. package/dist/modules/commandEngine.js +672 -0
  9. package/dist/modules/commandEngine.js.map +1 -0
  10. package/dist/modules/contextBuilder.d.ts +51 -0
  11. package/dist/modules/contextBuilder.d.ts.map +1 -0
  12. package/dist/modules/contextBuilder.js +725 -0
  13. package/dist/modules/contextBuilder.js.map +1 -0
  14. package/dist/modules/domainDetector.d.ts +64 -0
  15. package/dist/modules/domainDetector.d.ts.map +1 -0
  16. package/dist/modules/domainDetector.js +722 -0
  17. package/dist/modules/domainDetector.js.map +1 -0
  18. package/dist/modules/fileOperations.d.ts +99 -0
  19. package/dist/modules/fileOperations.d.ts.map +1 -0
  20. package/dist/modules/fileOperations.js +543 -0
  21. package/dist/modules/fileOperations.js.map +1 -0
  22. package/dist/modules/forgeEngine.d.ts +153 -0
  23. package/dist/modules/forgeEngine.d.ts.map +1 -0
  24. package/dist/modules/forgeEngine.js +652 -0
  25. package/dist/modules/forgeEngine.js.map +1 -0
  26. package/dist/modules/gitManager.d.ts +151 -0
  27. package/dist/modules/gitManager.d.ts.map +1 -0
  28. package/dist/modules/gitManager.js +539 -0
  29. package/dist/modules/gitManager.js.map +1 -0
  30. package/dist/modules/index.d.ts +25 -0
  31. package/dist/modules/index.d.ts.map +1 -0
  32. package/dist/modules/index.js +25 -0
  33. package/dist/modules/index.js.map +1 -0
  34. package/dist/modules/prdProcessor.d.ts +125 -0
  35. package/dist/modules/prdProcessor.d.ts.map +1 -0
  36. package/dist/modules/prdProcessor.js +466 -0
  37. package/dist/modules/prdProcessor.js.map +1 -0
  38. package/dist/modules/projectScanner.d.ts +105 -0
  39. package/dist/modules/projectScanner.d.ts.map +1 -0
  40. package/dist/modules/projectScanner.js +859 -0
  41. package/dist/modules/projectScanner.js.map +1 -0
  42. package/dist/modules/safetyGuard.d.ts +83 -0
  43. package/dist/modules/safetyGuard.d.ts.map +1 -0
  44. package/dist/modules/safetyGuard.js +492 -0
  45. package/dist/modules/safetyGuard.js.map +1 -0
  46. package/dist/modules/templateManager.d.ts +78 -0
  47. package/dist/modules/templateManager.d.ts.map +1 -0
  48. package/dist/modules/templateManager.js +556 -0
  49. package/dist/modules/templateManager.js.map +1 -0
  50. package/dist/native/index.d.ts +125 -0
  51. package/dist/native/index.d.ts.map +1 -0
  52. package/dist/native/index.js +164 -0
  53. package/dist/native/index.js.map +1 -0
  54. package/dist/services/executor.d.ts +24 -0
  55. package/dist/services/executor.d.ts.map +1 -1
  56. package/dist/services/executor.js +149 -6
  57. package/dist/services/executor.js.map +1 -1
  58. package/dist/services/fileManager.d.ts +134 -0
  59. package/dist/services/fileManager.d.ts.map +1 -0
  60. package/dist/services/fileManager.js +489 -0
  61. package/dist/services/fileManager.js.map +1 -0
  62. package/package.json +1 -1
@@ -0,0 +1,134 @@
1
+ /**
2
+ * NexusForge CLI File Manager
3
+ *
4
+ * Enterprise-grade file operations with safety checks, atomic writes, and backups.
5
+ * Ported from Python nexusforge.modules.fileops.operations
6
+ */
7
+ export interface OperationLog {
8
+ timestamp: Date;
9
+ operation: string;
10
+ path: string;
11
+ details: Record<string, unknown>;
12
+ success: boolean;
13
+ error?: string;
14
+ }
15
+ export interface FileInfo {
16
+ path: string;
17
+ name: string;
18
+ size: number;
19
+ sizeHuman: string;
20
+ created: string;
21
+ modified: string;
22
+ isFile: boolean;
23
+ isDirectory: boolean;
24
+ isSymlink: boolean;
25
+ permissions: string;
26
+ hash?: string;
27
+ }
28
+ export interface WriteOptions {
29
+ encoding?: BufferEncoding;
30
+ createDirs?: boolean;
31
+ atomic?: boolean;
32
+ backup?: boolean;
33
+ }
34
+ export interface ReplaceResult {
35
+ replacements: number;
36
+ path: string;
37
+ }
38
+ export declare class FileOperations {
39
+ private safeMode;
40
+ private backupEnabled;
41
+ private backupDir;
42
+ private operationLog;
43
+ private maxFileSize;
44
+ private maxLogEntries;
45
+ constructor(safeMode?: boolean, backupEnabled?: boolean);
46
+ /**
47
+ * Read file with safety checks
48
+ */
49
+ readFile(filePath: string, encoding?: BufferEncoding, maxSize?: number): Promise<string>;
50
+ /**
51
+ * Write file atomically with backup
52
+ */
53
+ writeFile(filePath: string, content: string, options?: WriteOptions): Promise<string>;
54
+ /**
55
+ * Append to file safely
56
+ */
57
+ appendFile(filePath: string, content: string, encoding?: BufferEncoding, addNewline?: boolean): Promise<string>;
58
+ /**
59
+ * Copy file with safety checks
60
+ */
61
+ copyFile(src: string, dst: string, overwrite?: boolean): Promise<string>;
62
+ /**
63
+ * Move file
64
+ */
65
+ moveFile(src: string, dst: string, overwrite?: boolean): Promise<string>;
66
+ /**
67
+ * Delete file with safety checks
68
+ */
69
+ deleteFile(filePath: string): Promise<boolean>;
70
+ /**
71
+ * Create directory
72
+ */
73
+ createDirectory(dirPath: string): Promise<string>;
74
+ /**
75
+ * Replace text in file atomically
76
+ */
77
+ replaceInFile(filePath: string, oldText: string, newText: string, options?: {
78
+ count?: number;
79
+ regex?: boolean;
80
+ }): Promise<ReplaceResult>;
81
+ /**
82
+ * Insert text at specific line
83
+ */
84
+ insertAtLine(filePath: string, lineNumber: number, text: string): Promise<string>;
85
+ /**
86
+ * Delete lines from file
87
+ */
88
+ deleteLines(filePath: string, startLine: number, endLine?: number): Promise<string>;
89
+ /**
90
+ * Get detailed file information
91
+ */
92
+ getFileInfo(filePath: string): Promise<FileInfo>;
93
+ /**
94
+ * Check if path exists
95
+ */
96
+ exists(filePath: string): boolean;
97
+ /**
98
+ * Check if path is file
99
+ */
100
+ isFile(filePath: string): boolean;
101
+ /**
102
+ * Check if path is directory
103
+ */
104
+ isDirectory(filePath: string): boolean;
105
+ /**
106
+ * Get operation log
107
+ */
108
+ getOperationLog(limit?: number): OperationLog[];
109
+ /**
110
+ * Clear operation log
111
+ */
112
+ clearOperationLog(): void;
113
+ private createBackup;
114
+ private copyDirectory;
115
+ private cleanupOldBackups;
116
+ private logOperation;
117
+ private calculateHash;
118
+ private formatSize;
119
+ private escapeRegex;
120
+ }
121
+ export declare const fileOps: FileOperations;
122
+ export declare const read: (path: string) => Promise<string>;
123
+ export declare const write: (path: string, content: string) => Promise<string>;
124
+ export declare const append: (path: string, content: string) => Promise<string>;
125
+ export declare const copy: (src: string, dst: string) => Promise<string>;
126
+ export declare const move: (src: string, dst: string) => Promise<string>;
127
+ export declare const remove: (path: string) => Promise<boolean>;
128
+ export declare const mkdir: (path: string) => Promise<string>;
129
+ export declare const exists: (path: string) => boolean;
130
+ export declare const isFile: (path: string) => boolean;
131
+ export declare const isDir: (path: string) => boolean;
132
+ export declare const info: (path: string) => Promise<FileInfo>;
133
+ export declare const replace: (path: string, old: string, newText: string) => Promise<ReplaceResult>;
134
+ //# sourceMappingURL=fileManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileManager.d.ts","sourceRoot":"","sources":["../../src/services/fileManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,489 @@
1
+ /**
2
+ * NexusForge CLI File Manager
3
+ *
4
+ * Enterprise-grade file operations with safety checks, atomic writes, and backups.
5
+ * Ported from Python nexusforge.modules.fileops.operations
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as fsPromises from 'fs/promises';
9
+ import * as path from 'path';
10
+ import * as os from 'os';
11
+ import * as crypto from 'crypto';
12
+ // ============================================================================
13
+ // FILE OPERATIONS CLASS
14
+ // ============================================================================
15
+ export class FileOperations {
16
+ safeMode;
17
+ backupEnabled;
18
+ backupDir;
19
+ operationLog = [];
20
+ maxFileSize = 100 * 1024 * 1024; // 100MB
21
+ maxLogEntries = 1000;
22
+ constructor(safeMode = true, backupEnabled = true) {
23
+ this.safeMode = safeMode;
24
+ this.backupEnabled = backupEnabled;
25
+ this.backupDir = path.join(os.homedir(), '.nexusforge', 'file_backups');
26
+ // Create backup directory
27
+ if (!fs.existsSync(this.backupDir)) {
28
+ fs.mkdirSync(this.backupDir, { recursive: true });
29
+ }
30
+ }
31
+ // ==========================================================================
32
+ // CORE READ/WRITE OPERATIONS
33
+ // ==========================================================================
34
+ /**
35
+ * Read file with safety checks
36
+ */
37
+ async readFile(filePath, encoding = 'utf-8', maxSize) {
38
+ const resolvedPath = path.resolve(filePath);
39
+ const limit = maxSize || this.maxFileSize;
40
+ if (!fs.existsSync(resolvedPath)) {
41
+ throw new Error(`File not found: ${resolvedPath}`);
42
+ }
43
+ const stats = fs.statSync(resolvedPath);
44
+ if (stats.size > limit) {
45
+ throw new Error(`File too large: ${stats.size} bytes (max: ${limit})`);
46
+ }
47
+ try {
48
+ const content = await fsPromises.readFile(resolvedPath, encoding);
49
+ this.logOperation('read', resolvedPath, true, { size: stats.size });
50
+ return content;
51
+ }
52
+ catch (error) {
53
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
54
+ this.logOperation('read', resolvedPath, false, {}, errorMsg);
55
+ throw new Error(`Failed to read ${resolvedPath}: ${errorMsg}`);
56
+ }
57
+ }
58
+ /**
59
+ * Write file atomically with backup
60
+ */
61
+ async writeFile(filePath, content, options = {}) {
62
+ const { encoding = 'utf-8', createDirs = true, atomic = true, backup = this.backupEnabled, } = options;
63
+ const resolvedPath = path.resolve(filePath);
64
+ const dir = path.dirname(resolvedPath);
65
+ // Create parent directories if needed
66
+ if (createDirs && !fs.existsSync(dir)) {
67
+ await fsPromises.mkdir(dir, { recursive: true });
68
+ }
69
+ // Backup existing file
70
+ if (backup && fs.existsSync(resolvedPath)) {
71
+ await this.createBackup(resolvedPath);
72
+ }
73
+ if (atomic) {
74
+ // Write atomically using temporary file
75
+ const tempPath = path.join(dir, `.${path.basename(resolvedPath)}.tmp.${process.pid}`);
76
+ try {
77
+ await fsPromises.writeFile(tempPath, content, encoding);
78
+ await fsPromises.rename(tempPath, resolvedPath);
79
+ this.logOperation('write', resolvedPath, true, { size: content.length, atomic: true });
80
+ return resolvedPath;
81
+ }
82
+ catch (error) {
83
+ // Clean up temp file
84
+ if (fs.existsSync(tempPath)) {
85
+ await fsPromises.unlink(tempPath);
86
+ }
87
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
88
+ this.logOperation('write', resolvedPath, false, {}, errorMsg);
89
+ throw new Error(`Failed to write ${resolvedPath}: ${errorMsg}`);
90
+ }
91
+ }
92
+ else {
93
+ try {
94
+ await fsPromises.writeFile(resolvedPath, content, encoding);
95
+ this.logOperation('write', resolvedPath, true, { size: content.length, atomic: false });
96
+ return resolvedPath;
97
+ }
98
+ catch (error) {
99
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
100
+ this.logOperation('write', resolvedPath, false, {}, errorMsg);
101
+ throw new Error(`Failed to write ${resolvedPath}: ${errorMsg}`);
102
+ }
103
+ }
104
+ }
105
+ /**
106
+ * Append to file safely
107
+ */
108
+ async appendFile(filePath, content, encoding = 'utf-8', addNewline = true) {
109
+ const resolvedPath = path.resolve(filePath);
110
+ if (!fs.existsSync(resolvedPath)) {
111
+ return this.writeFile(resolvedPath, content, { encoding });
112
+ }
113
+ // Backup before appending
114
+ if (this.backupEnabled) {
115
+ await this.createBackup(resolvedPath);
116
+ }
117
+ try {
118
+ const stats = fs.statSync(resolvedPath);
119
+ const prefix = addNewline && stats.size > 0 ? '\n' : '';
120
+ await fsPromises.appendFile(resolvedPath, prefix + content, encoding);
121
+ this.logOperation('append', resolvedPath, true, { size: content.length });
122
+ return resolvedPath;
123
+ }
124
+ catch (error) {
125
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
126
+ this.logOperation('append', resolvedPath, false, {}, errorMsg);
127
+ throw new Error(`Failed to append to ${resolvedPath}: ${errorMsg}`);
128
+ }
129
+ }
130
+ // ==========================================================================
131
+ // FILE MANIPULATION OPERATIONS
132
+ // ==========================================================================
133
+ /**
134
+ * Copy file with safety checks
135
+ */
136
+ async copyFile(src, dst, overwrite = false) {
137
+ const srcPath = path.resolve(src);
138
+ const dstPath = path.resolve(dst);
139
+ if (!fs.existsSync(srcPath)) {
140
+ throw new Error(`Source file not found: ${srcPath}`);
141
+ }
142
+ if (fs.existsSync(dstPath) && !overwrite) {
143
+ throw new Error(`Destination already exists: ${dstPath}. Use overwrite=true to replace.`);
144
+ }
145
+ // Create parent directories
146
+ const dstDir = path.dirname(dstPath);
147
+ if (!fs.existsSync(dstDir)) {
148
+ await fsPromises.mkdir(dstDir, { recursive: true });
149
+ }
150
+ // Backup destination if it exists
151
+ if (this.backupEnabled && fs.existsSync(dstPath)) {
152
+ await this.createBackup(dstPath);
153
+ }
154
+ try {
155
+ await fsPromises.copyFile(srcPath, dstPath);
156
+ this.logOperation('copy', srcPath, true, { destination: dstPath });
157
+ return dstPath;
158
+ }
159
+ catch (error) {
160
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
161
+ this.logOperation('copy', srcPath, false, {}, errorMsg);
162
+ throw new Error(`Failed to copy ${srcPath} to ${dstPath}: ${errorMsg}`);
163
+ }
164
+ }
165
+ /**
166
+ * Move file
167
+ */
168
+ async moveFile(src, dst, overwrite = false) {
169
+ const srcPath = path.resolve(src);
170
+ const dstPath = path.resolve(dst);
171
+ if (!fs.existsSync(srcPath)) {
172
+ throw new Error(`Source file not found: ${srcPath}`);
173
+ }
174
+ if (fs.existsSync(dstPath) && !overwrite) {
175
+ throw new Error(`Destination already exists: ${dstPath}. Use overwrite=true to replace.`);
176
+ }
177
+ // Create parent directories
178
+ const dstDir = path.dirname(dstPath);
179
+ if (!fs.existsSync(dstDir)) {
180
+ await fsPromises.mkdir(dstDir, { recursive: true });
181
+ }
182
+ // Backup destination if it exists
183
+ if (this.backupEnabled && fs.existsSync(dstPath)) {
184
+ await this.createBackup(dstPath);
185
+ }
186
+ try {
187
+ await fsPromises.rename(srcPath, dstPath);
188
+ this.logOperation('move', srcPath, true, { destination: dstPath });
189
+ return dstPath;
190
+ }
191
+ catch (error) {
192
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
193
+ this.logOperation('move', srcPath, false, {}, errorMsg);
194
+ throw new Error(`Failed to move ${srcPath} to ${dstPath}: ${errorMsg}`);
195
+ }
196
+ }
197
+ /**
198
+ * Delete file with safety checks
199
+ */
200
+ async deleteFile(filePath) {
201
+ const resolvedPath = path.resolve(filePath);
202
+ if (!fs.existsSync(resolvedPath)) {
203
+ return false;
204
+ }
205
+ // Backup before deletion
206
+ if (this.backupEnabled) {
207
+ await this.createBackup(resolvedPath);
208
+ }
209
+ try {
210
+ const stats = fs.statSync(resolvedPath);
211
+ if (stats.isDirectory()) {
212
+ await fsPromises.rm(resolvedPath, { recursive: true });
213
+ }
214
+ else {
215
+ await fsPromises.unlink(resolvedPath);
216
+ }
217
+ this.logOperation('delete', resolvedPath, true);
218
+ return true;
219
+ }
220
+ catch (error) {
221
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
222
+ this.logOperation('delete', resolvedPath, false, {}, errorMsg);
223
+ throw new Error(`Failed to delete ${resolvedPath}: ${errorMsg}`);
224
+ }
225
+ }
226
+ /**
227
+ * Create directory
228
+ */
229
+ async createDirectory(dirPath) {
230
+ const resolvedPath = path.resolve(dirPath);
231
+ try {
232
+ await fsPromises.mkdir(resolvedPath, { recursive: true });
233
+ this.logOperation('mkdir', resolvedPath, true);
234
+ return resolvedPath;
235
+ }
236
+ catch (error) {
237
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
238
+ this.logOperation('mkdir', resolvedPath, false, {}, errorMsg);
239
+ throw new Error(`Failed to create directory ${resolvedPath}: ${errorMsg}`);
240
+ }
241
+ }
242
+ // ==========================================================================
243
+ // ADVANCED OPERATIONS
244
+ // ==========================================================================
245
+ /**
246
+ * Replace text in file atomically
247
+ */
248
+ async replaceInFile(filePath, oldText, newText, options = {}) {
249
+ const { count = -1, regex = false } = options;
250
+ const resolvedPath = path.resolve(filePath);
251
+ const content = await this.readFile(resolvedPath);
252
+ let newContent;
253
+ let replacements;
254
+ if (regex) {
255
+ const pattern = new RegExp(oldText, 'g');
256
+ let matches = 0;
257
+ newContent = content.replace(pattern, (match) => {
258
+ if (count >= 0 && matches >= count) {
259
+ return match;
260
+ }
261
+ matches++;
262
+ return newText;
263
+ });
264
+ replacements = matches;
265
+ }
266
+ else {
267
+ if (count < 0) {
268
+ // Replace all
269
+ replacements = content.split(oldText).length - 1;
270
+ newContent = content.split(oldText).join(newText);
271
+ }
272
+ else {
273
+ // Replace limited count
274
+ let remaining = count;
275
+ replacements = 0;
276
+ newContent = content.replace(new RegExp(this.escapeRegex(oldText), 'g'), (match) => {
277
+ if (remaining <= 0)
278
+ return match;
279
+ remaining--;
280
+ replacements++;
281
+ return newText;
282
+ });
283
+ }
284
+ }
285
+ if (newContent !== content) {
286
+ await this.writeFile(resolvedPath, newContent);
287
+ }
288
+ return { replacements, path: resolvedPath };
289
+ }
290
+ /**
291
+ * Insert text at specific line
292
+ */
293
+ async insertAtLine(filePath, lineNumber, text) {
294
+ const content = await this.readFile(filePath);
295
+ const lines = content.split('\n');
296
+ // Insert at the specified line (1-indexed)
297
+ const index = Math.max(0, Math.min(lineNumber - 1, lines.length));
298
+ lines.splice(index, 0, text);
299
+ const newContent = lines.join('\n');
300
+ return this.writeFile(filePath, newContent);
301
+ }
302
+ /**
303
+ * Delete lines from file
304
+ */
305
+ async deleteLines(filePath, startLine, endLine) {
306
+ const content = await this.readFile(filePath);
307
+ const lines = content.split('\n');
308
+ const start = Math.max(0, startLine - 1);
309
+ const end = endLine ? Math.min(endLine, lines.length) : start + 1;
310
+ lines.splice(start, end - start);
311
+ const newContent = lines.join('\n');
312
+ return this.writeFile(filePath, newContent);
313
+ }
314
+ // ==========================================================================
315
+ // UTILITY METHODS
316
+ // ==========================================================================
317
+ /**
318
+ * Get detailed file information
319
+ */
320
+ async getFileInfo(filePath) {
321
+ const resolvedPath = path.resolve(filePath);
322
+ if (!fs.existsSync(resolvedPath)) {
323
+ throw new Error(`File not found: ${resolvedPath}`);
324
+ }
325
+ const stats = fs.statSync(resolvedPath);
326
+ const lstat = fs.lstatSync(resolvedPath);
327
+ const info = {
328
+ path: resolvedPath,
329
+ name: path.basename(resolvedPath),
330
+ size: stats.size,
331
+ sizeHuman: this.formatSize(stats.size),
332
+ created: stats.birthtime.toISOString(),
333
+ modified: stats.mtime.toISOString(),
334
+ isFile: stats.isFile(),
335
+ isDirectory: stats.isDirectory(),
336
+ isSymlink: lstat.isSymbolicLink(),
337
+ permissions: (stats.mode & 0o777).toString(8),
338
+ };
339
+ // Add hash for files under 100MB
340
+ if (stats.isFile() && stats.size < 100 * 1024 * 1024) {
341
+ info.hash = await this.calculateHash(resolvedPath);
342
+ }
343
+ return info;
344
+ }
345
+ /**
346
+ * Check if path exists
347
+ */
348
+ exists(filePath) {
349
+ return fs.existsSync(path.resolve(filePath));
350
+ }
351
+ /**
352
+ * Check if path is file
353
+ */
354
+ isFile(filePath) {
355
+ const resolvedPath = path.resolve(filePath);
356
+ return fs.existsSync(resolvedPath) && fs.statSync(resolvedPath).isFile();
357
+ }
358
+ /**
359
+ * Check if path is directory
360
+ */
361
+ isDirectory(filePath) {
362
+ const resolvedPath = path.resolve(filePath);
363
+ return fs.existsSync(resolvedPath) && fs.statSync(resolvedPath).isDirectory();
364
+ }
365
+ /**
366
+ * Get operation log
367
+ */
368
+ getOperationLog(limit = 100) {
369
+ return this.operationLog.slice(-limit);
370
+ }
371
+ /**
372
+ * Clear operation log
373
+ */
374
+ clearOperationLog() {
375
+ this.operationLog = [];
376
+ }
377
+ // ==========================================================================
378
+ // INTERNAL HELPER METHODS
379
+ // ==========================================================================
380
+ async createBackup(filePath) {
381
+ if (!fs.existsSync(filePath))
382
+ return;
383
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
384
+ const backupName = `${path.basename(filePath)}.${timestamp}.backup`;
385
+ const backupPath = path.join(this.backupDir, backupName);
386
+ try {
387
+ const stats = fs.statSync(filePath);
388
+ if (stats.isDirectory()) {
389
+ await this.copyDirectory(filePath, backupPath);
390
+ }
391
+ else {
392
+ await fsPromises.copyFile(filePath, backupPath);
393
+ }
394
+ // Keep only last 10 backups per file
395
+ await this.cleanupOldBackups(path.basename(filePath));
396
+ }
397
+ catch (error) {
398
+ console.warn(`Failed to create backup: ${error}`);
399
+ }
400
+ }
401
+ async copyDirectory(src, dst) {
402
+ await fsPromises.mkdir(dst, { recursive: true });
403
+ const entries = await fsPromises.readdir(src, { withFileTypes: true });
404
+ for (const entry of entries) {
405
+ const srcPath = path.join(src, entry.name);
406
+ const dstPath = path.join(dst, entry.name);
407
+ if (entry.isDirectory()) {
408
+ await this.copyDirectory(srcPath, dstPath);
409
+ }
410
+ else {
411
+ await fsPromises.copyFile(srcPath, dstPath);
412
+ }
413
+ }
414
+ }
415
+ async cleanupOldBackups(filename, keep = 10) {
416
+ try {
417
+ const entries = await fsPromises.readdir(this.backupDir);
418
+ const backups = entries
419
+ .filter(f => f.startsWith(filename) && f.endsWith('.backup'))
420
+ .map(f => ({
421
+ name: f,
422
+ path: path.join(this.backupDir, f),
423
+ mtime: fs.statSync(path.join(this.backupDir, f)).mtime,
424
+ }))
425
+ .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
426
+ // Remove old backups
427
+ for (const backup of backups.slice(keep)) {
428
+ await fsPromises.unlink(backup.path);
429
+ }
430
+ }
431
+ catch {
432
+ // Ignore cleanup errors
433
+ }
434
+ }
435
+ logOperation(operation, filePath, success, details = {}, error) {
436
+ const entry = {
437
+ timestamp: new Date(),
438
+ operation,
439
+ path: filePath,
440
+ details,
441
+ success,
442
+ error,
443
+ };
444
+ this.operationLog.push(entry);
445
+ // Limit log size
446
+ if (this.operationLog.length > this.maxLogEntries) {
447
+ this.operationLog = this.operationLog.slice(-this.maxLogEntries);
448
+ }
449
+ }
450
+ async calculateHash(filePath, algorithm = 'sha256') {
451
+ try {
452
+ const content = await fsPromises.readFile(filePath);
453
+ return crypto.createHash(algorithm).update(content).digest('hex');
454
+ }
455
+ catch {
456
+ return '';
457
+ }
458
+ }
459
+ formatSize(bytes) {
460
+ const units = ['B', 'KB', 'MB', 'GB', 'TB'];
461
+ let size = bytes;
462
+ let unitIndex = 0;
463
+ while (size >= 1024 && unitIndex < units.length - 1) {
464
+ size /= 1024;
465
+ unitIndex++;
466
+ }
467
+ return `${size.toFixed(2)} ${units[unitIndex]}`;
468
+ }
469
+ escapeRegex(str) {
470
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
471
+ }
472
+ }
473
+ // ============================================================================
474
+ // GLOBAL INSTANCE AND CONVENIENCE FUNCTIONS
475
+ // ============================================================================
476
+ export const fileOps = new FileOperations();
477
+ export const read = (path) => fileOps.readFile(path);
478
+ export const write = (path, content) => fileOps.writeFile(path, content);
479
+ export const append = (path, content) => fileOps.appendFile(path, content);
480
+ export const copy = (src, dst) => fileOps.copyFile(src, dst);
481
+ export const move = (src, dst) => fileOps.moveFile(src, dst);
482
+ export const remove = (path) => fileOps.deleteFile(path);
483
+ export const mkdir = (path) => fileOps.createDirectory(path);
484
+ export const exists = (path) => fileOps.exists(path);
485
+ export const isFile = (path) => fileOps.isFile(path);
486
+ export const isDir = (path) => fileOps.isDirectory(path);
487
+ export const info = (path) => fileOps.getFileInfo(path);
488
+ export const replace = (path, old, newText) => fileOps.replaceInFile(path, old, newText);
489
+ //# sourceMappingURL=fileManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileManager.js","sourceRoot":"","sources":["../../src/services/fileManager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexusforge-cli",
3
- "version": "1.1.1",
3
+ "version": "1.2.1",
4
4
  "description": "NexusForge CLI - AI-powered development companion for your terminal",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",