couchloop-eq-mcp 1.0.4 → 1.1.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 (282) hide show
  1. package/README.md +24 -11
  2. package/dist/developer/analyzers/bloat-detector.d.ts +89 -0
  3. package/dist/developer/analyzers/bloat-detector.d.ts.map +1 -0
  4. package/dist/developer/analyzers/bloat-detector.js +483 -0
  5. package/dist/developer/analyzers/bloat-detector.js.map +1 -0
  6. package/dist/developer/backup/auto-backup.d.ts +96 -0
  7. package/dist/developer/backup/auto-backup.d.ts.map +1 -0
  8. package/dist/developer/backup/auto-backup.js +346 -0
  9. package/dist/developer/backup/auto-backup.js.map +1 -0
  10. package/dist/developer/blockers/package-blocker.d.ts +33 -0
  11. package/dist/developer/blockers/package-blocker.d.ts.map +1 -0
  12. package/dist/developer/blockers/package-blocker.js +224 -0
  13. package/dist/developer/blockers/package-blocker.js.map +1 -0
  14. package/dist/developer/evaluators/ai-error-preventer.d.ts +54 -0
  15. package/dist/developer/evaluators/ai-error-preventer.d.ts.map +1 -0
  16. package/dist/developer/evaluators/ai-error-preventer.js +270 -0
  17. package/dist/developer/evaluators/ai-error-preventer.js.map +1 -0
  18. package/dist/developer/evaluators/build-context-detector.d.ts +44 -0
  19. package/dist/developer/evaluators/build-context-detector.d.ts.map +1 -0
  20. package/dist/developer/evaluators/build-context-detector.js +258 -0
  21. package/dist/developer/evaluators/build-context-detector.js.map +1 -0
  22. package/dist/developer/evaluators/package-evaluator.d.ts +37 -0
  23. package/dist/developer/evaluators/package-evaluator.d.ts.map +1 -0
  24. package/dist/developer/evaluators/package-evaluator.js +278 -0
  25. package/dist/developer/evaluators/package-evaluator.js.map +1 -0
  26. package/dist/developer/guards/file-guardian.d.ts +79 -0
  27. package/dist/developer/guards/file-guardian.d.ts.map +1 -0
  28. package/dist/developer/guards/file-guardian.js +309 -0
  29. package/dist/developer/guards/file-guardian.js.map +1 -0
  30. package/dist/developer/managers/context-manager.d.ts +61 -0
  31. package/dist/developer/managers/context-manager.d.ts.map +1 -0
  32. package/dist/developer/managers/context-manager.js +302 -0
  33. package/dist/developer/managers/context-manager.js.map +1 -0
  34. package/dist/developer/metrics/complexity-calculator.d.ts +52 -0
  35. package/dist/developer/metrics/complexity-calculator.d.ts.map +1 -0
  36. package/dist/developer/metrics/complexity-calculator.js +259 -0
  37. package/dist/developer/metrics/complexity-calculator.js.map +1 -0
  38. package/dist/developer/reports/review-summary.d.ts +49 -0
  39. package/dist/developer/reports/review-summary.d.ts.map +1 -0
  40. package/dist/developer/reports/review-summary.js +249 -0
  41. package/dist/developer/reports/review-summary.js.map +1 -0
  42. package/dist/developer/scanners/review-assistant.d.ts +41 -0
  43. package/dist/developer/scanners/review-assistant.d.ts.map +1 -0
  44. package/dist/developer/scanners/review-assistant.js +374 -0
  45. package/dist/developer/scanners/review-assistant.js.map +1 -0
  46. package/dist/developer/scanners/secret-scanner.d.ts +66 -0
  47. package/dist/developer/scanners/secret-scanner.d.ts.map +1 -0
  48. package/dist/developer/scanners/secret-scanner.js +287 -0
  49. package/dist/developer/scanners/secret-scanner.js.map +1 -0
  50. package/dist/developer/scanners/sql-injection-detector.d.ts +54 -0
  51. package/dist/developer/scanners/sql-injection-detector.d.ts.map +1 -0
  52. package/dist/developer/scanners/sql-injection-detector.js +174 -0
  53. package/dist/developer/scanners/sql-injection-detector.js.map +1 -0
  54. package/dist/developer/scanners/xss-detector.d.ts +60 -0
  55. package/dist/developer/scanners/xss-detector.d.ts.map +1 -0
  56. package/dist/developer/scanners/xss-detector.js +229 -0
  57. package/dist/developer/scanners/xss-detector.js.map +1 -0
  58. package/dist/developer/types/ai-errors.d.ts +34 -0
  59. package/dist/developer/types/ai-errors.d.ts.map +1 -0
  60. package/dist/developer/types/ai-errors.js +271 -0
  61. package/dist/developer/types/ai-errors.js.map +1 -0
  62. package/dist/developer/types/package.d.ts +32 -0
  63. package/dist/developer/types/package.d.ts.map +1 -0
  64. package/dist/developer/types/package.js +5 -0
  65. package/dist/developer/types/package.js.map +1 -0
  66. package/dist/developer/updaters/dependency-updater.d.ts +102 -0
  67. package/dist/developer/updaters/dependency-updater.d.ts.map +1 -0
  68. package/dist/developer/updaters/dependency-updater.js +472 -0
  69. package/dist/developer/updaters/dependency-updater.js.map +1 -0
  70. package/dist/developer/validators/cargo.d.ts +14 -0
  71. package/dist/developer/validators/cargo.d.ts.map +1 -0
  72. package/dist/developer/validators/cargo.js +132 -0
  73. package/dist/developer/validators/cargo.js.map +1 -0
  74. package/dist/developer/validators/gem.d.ts +14 -0
  75. package/dist/developer/validators/gem.d.ts.map +1 -0
  76. package/dist/developer/validators/gem.js +85 -0
  77. package/dist/developer/validators/gem.js.map +1 -0
  78. package/dist/developer/validators/go.d.ts +14 -0
  79. package/dist/developer/validators/go.d.ts.map +1 -0
  80. package/dist/developer/validators/go.js +138 -0
  81. package/dist/developer/validators/go.js.map +1 -0
  82. package/dist/developer/validators/maven.d.ts +14 -0
  83. package/dist/developer/validators/maven.d.ts.map +1 -0
  84. package/dist/developer/validators/maven.js +99 -0
  85. package/dist/developer/validators/maven.js.map +1 -0
  86. package/dist/developer/validators/npm.d.ts +14 -0
  87. package/dist/developer/validators/npm.d.ts.map +1 -0
  88. package/dist/developer/validators/npm.js +96 -0
  89. package/dist/developer/validators/npm.js.map +1 -0
  90. package/dist/developer/validators/nuget.d.ts +15 -0
  91. package/dist/developer/validators/nuget.d.ts.map +1 -0
  92. package/dist/developer/validators/nuget.js +107 -0
  93. package/dist/developer/validators/nuget.js.map +1 -0
  94. package/dist/developer/validators/pypi.d.ts +14 -0
  95. package/dist/developer/validators/pypi.d.ts.map +1 -0
  96. package/dist/developer/validators/pypi.js +118 -0
  97. package/dist/developer/validators/pypi.js.map +1 -0
  98. package/dist/developer/validators/registry-manager.d.ts +37 -0
  99. package/dist/developer/validators/registry-manager.d.ts.map +1 -0
  100. package/dist/developer/validators/registry-manager.js +89 -0
  101. package/dist/developer/validators/registry-manager.js.map +1 -0
  102. package/dist/developer/validators/version-checker.d.ts +145 -0
  103. package/dist/developer/validators/version-checker.d.ts.map +1 -0
  104. package/dist/developer/validators/version-checker.js +529 -0
  105. package/dist/developer/validators/version-checker.js.map +1 -0
  106. package/dist/server/index.js.map +1 -1
  107. package/dist/server/middleware/auth.d.ts +7 -9
  108. package/dist/server/middleware/auth.d.ts.map +1 -1
  109. package/dist/server/middleware/auth.js.map +1 -1
  110. package/dist/tools/check-versions.d.ts +100 -0
  111. package/dist/tools/check-versions.d.ts.map +1 -0
  112. package/dist/tools/check-versions.js +328 -0
  113. package/dist/tools/check-versions.js.map +1 -0
  114. package/dist/tools/detect-code-smell.d.ts +9 -0
  115. package/dist/tools/detect-code-smell.d.ts.map +1 -0
  116. package/dist/tools/detect-code-smell.js +231 -0
  117. package/dist/tools/detect-code-smell.js.map +1 -0
  118. package/dist/tools/index.d.ts +471 -0
  119. package/dist/tools/index.d.ts.map +1 -1
  120. package/dist/tools/index.js +178 -0
  121. package/dist/tools/index.js.map +1 -1
  122. package/dist/tools/journey.js +1 -1
  123. package/dist/tools/journey.js.map +1 -1
  124. package/dist/tools/pre-review-code.d.ts +71 -0
  125. package/dist/tools/pre-review-code.d.ts.map +1 -0
  126. package/dist/tools/pre-review-code.js +159 -0
  127. package/dist/tools/pre-review-code.js.map +1 -0
  128. package/dist/tools/preserve-context.d.ts +27 -0
  129. package/dist/tools/preserve-context.d.ts.map +1 -0
  130. package/dist/tools/preserve-context.js +98 -0
  131. package/dist/tools/preserve-context.js.map +1 -0
  132. package/dist/tools/protect-files.d.ts +224 -0
  133. package/dist/tools/protect-files.d.ts.map +1 -0
  134. package/dist/tools/protect-files.js +286 -0
  135. package/dist/tools/protect-files.js.map +1 -0
  136. package/dist/tools/scan-security.d.ts +38 -0
  137. package/dist/tools/scan-security.d.ts.map +1 -0
  138. package/dist/tools/scan-security.js +237 -0
  139. package/dist/tools/scan-security.js.map +1 -0
  140. package/dist/tools/validate_packages.d.ts +8 -0
  141. package/dist/tools/validate_packages.d.ts.map +1 -0
  142. package/dist/tools/validate_packages.js +159 -0
  143. package/dist/tools/validate_packages.js.map +1 -0
  144. package/dist/types/auth.d.ts.map +1 -1
  145. package/dist/types/auth.js +1 -2
  146. package/dist/types/auth.js.map +1 -1
  147. package/dist/types/context.d.ts +46 -0
  148. package/dist/types/context.d.ts.map +1 -0
  149. package/dist/types/context.js +17 -0
  150. package/dist/types/context.js.map +1 -0
  151. package/dist/types/file-protection.d.ts +50 -0
  152. package/dist/types/file-protection.d.ts.map +1 -0
  153. package/dist/types/file-protection.js +9 -0
  154. package/dist/types/file-protection.js.map +1 -0
  155. package/dist/utils/errorHandler.d.ts.map +1 -1
  156. package/dist/utils/errorHandler.js +2 -1
  157. package/dist/utils/errorHandler.js.map +1 -1
  158. package/package.json +30 -4
  159. package/dist/db/migrate.d.ts +0 -4
  160. package/dist/db/migrate.d.ts.map +0 -1
  161. package/dist/db/migrate.js +0 -34
  162. package/dist/db/migrate.js.map +0 -1
  163. package/dist/db/migrations/schema.d.ts +0 -1074
  164. package/dist/db/migrations/schema.d.ts.map +0 -1
  165. package/dist/db/migrations/schema.js +0 -160
  166. package/dist/db/migrations/schema.js.map +0 -1
  167. package/dist/db/schema.d.ts +0 -1576
  168. package/dist/db/schema.d.ts.map +0 -1
  169. package/dist/db/schema.js +0 -204
  170. package/dist/db/schema.js.map +0 -1
  171. package/dist/db/seed.d.ts +0 -4
  172. package/dist/db/seed.d.ts.map +0 -1
  173. package/dist/db/seed.js +0 -57
  174. package/dist/db/seed.js.map +0 -1
  175. package/dist/db/seedOAuth.d.ts +0 -4
  176. package/dist/db/seedOAuth.d.ts.map +0 -1
  177. package/dist/db/seedOAuth.js +0 -76
  178. package/dist/db/seedOAuth.js.map +0 -1
  179. package/dist/governance/config.d.ts +0 -66
  180. package/dist/governance/config.d.ts.map +0 -1
  181. package/dist/governance/config.js +0 -238
  182. package/dist/governance/config.js.map +0 -1
  183. package/dist/governance/detectors/hallucination.d.ts +0 -61
  184. package/dist/governance/detectors/hallucination.d.ts.map +0 -1
  185. package/dist/governance/detectors/hallucination.js +0 -338
  186. package/dist/governance/detectors/hallucination.js.map +0 -1
  187. package/dist/governance/detectors/inconsistency.d.ts +0 -99
  188. package/dist/governance/detectors/inconsistency.d.ts.map +0 -1
  189. package/dist/governance/detectors/inconsistency.js +0 -548
  190. package/dist/governance/detectors/inconsistency.js.map +0 -1
  191. package/dist/governance/detectors/toneDrift.d.ts +0 -63
  192. package/dist/governance/detectors/toneDrift.d.ts.map +0 -1
  193. package/dist/governance/detectors/toneDrift.js +0 -421
  194. package/dist/governance/detectors/toneDrift.js.map +0 -1
  195. package/dist/governance/detectors/unsafeReasoning.d.ts +0 -54
  196. package/dist/governance/detectors/unsafeReasoning.d.ts.map +0 -1
  197. package/dist/governance/detectors/unsafeReasoning.js +0 -473
  198. package/dist/governance/detectors/unsafeReasoning.js.map +0 -1
  199. package/dist/governance/evaluationEngine.d.ts +0 -112
  200. package/dist/governance/evaluationEngine.d.ts.map +0 -1
  201. package/dist/governance/evaluationEngine.js +0 -265
  202. package/dist/governance/evaluationEngine.js.map +0 -1
  203. package/dist/governance/intervention.d.ts +0 -81
  204. package/dist/governance/intervention.d.ts.map +0 -1
  205. package/dist/governance/intervention.js +0 -405
  206. package/dist/governance/intervention.js.map +0 -1
  207. package/dist/server/oauth/anomalyDetection.d.ts +0 -146
  208. package/dist/server/oauth/anomalyDetection.d.ts.map +0 -1
  209. package/dist/server/oauth/anomalyDetection.js +0 -405
  210. package/dist/server/oauth/anomalyDetection.js.map +0 -1
  211. package/dist/server/oauth/authServer.d.ts +0 -61
  212. package/dist/server/oauth/authServer.d.ts.map +0 -1
  213. package/dist/server/oauth/authServer.js +0 -283
  214. package/dist/server/oauth/authServer.js.map +0 -1
  215. package/dist/server/oauth/dpop.d.ts +0 -135
  216. package/dist/server/oauth/dpop.d.ts.map +0 -1
  217. package/dist/server/oauth/dpop.js +0 -338
  218. package/dist/server/oauth/dpop.js.map +0 -1
  219. package/dist/server/oauth/gdpr/consent.d.ts +0 -173
  220. package/dist/server/oauth/gdpr/consent.d.ts.map +0 -1
  221. package/dist/server/oauth/gdpr/consent.js +0 -388
  222. package/dist/server/oauth/gdpr/consent.js.map +0 -1
  223. package/dist/server/oauth/gdpr/dataPortability.d.ts +0 -214
  224. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +0 -1
  225. package/dist/server/oauth/gdpr/dataPortability.js +0 -486
  226. package/dist/server/oauth/gdpr/dataPortability.js.map +0 -1
  227. package/dist/server/oauth/gdpr/index.d.ts +0 -103
  228. package/dist/server/oauth/gdpr/index.d.ts.map +0 -1
  229. package/dist/server/oauth/gdpr/index.js +0 -273
  230. package/dist/server/oauth/gdpr/index.js.map +0 -1
  231. package/dist/server/oauth/gdpr/rightToErasure.d.ts +0 -184
  232. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +0 -1
  233. package/dist/server/oauth/gdpr/rightToErasure.js +0 -527
  234. package/dist/server/oauth/gdpr/rightToErasure.js.map +0 -1
  235. package/dist/server/oauth/monitoring/securityMonitor.d.ts +0 -218
  236. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +0 -1
  237. package/dist/server/oauth/monitoring/securityMonitor.js +0 -615
  238. package/dist/server/oauth/monitoring/securityMonitor.js.map +0 -1
  239. package/dist/server/oauth/pkce.d.ts +0 -61
  240. package/dist/server/oauth/pkce.d.ts.map +0 -1
  241. package/dist/server/oauth/pkce.js +0 -157
  242. package/dist/server/oauth/pkce.js.map +0 -1
  243. package/dist/server/oauth/providers/base.d.ts +0 -147
  244. package/dist/server/oauth/providers/base.d.ts.map +0 -1
  245. package/dist/server/oauth/providers/base.js +0 -312
  246. package/dist/server/oauth/providers/base.js.map +0 -1
  247. package/dist/server/oauth/providers/github.d.ts +0 -55
  248. package/dist/server/oauth/providers/github.d.ts.map +0 -1
  249. package/dist/server/oauth/providers/github.js +0 -225
  250. package/dist/server/oauth/providers/github.js.map +0 -1
  251. package/dist/server/oauth/providers/google.d.ts +0 -49
  252. package/dist/server/oauth/providers/google.d.ts.map +0 -1
  253. package/dist/server/oauth/providers/google.js +0 -153
  254. package/dist/server/oauth/providers/google.js.map +0 -1
  255. package/dist/server/oauth/providers/index.d.ts +0 -9
  256. package/dist/server/oauth/providers/index.d.ts.map +0 -1
  257. package/dist/server/oauth/providers/index.js +0 -24
  258. package/dist/server/oauth/providers/index.js.map +0 -1
  259. package/dist/server/oauth/refreshTokenRotation.d.ts +0 -114
  260. package/dist/server/oauth/refreshTokenRotation.d.ts.map +0 -1
  261. package/dist/server/oauth/refreshTokenRotation.js +0 -344
  262. package/dist/server/oauth/refreshTokenRotation.js.map +0 -1
  263. package/dist/server/oauth/security.d.ts +0 -101
  264. package/dist/server/oauth/security.d.ts.map +0 -1
  265. package/dist/server/oauth/security.js +0 -268
  266. package/dist/server/oauth/security.js.map +0 -1
  267. package/dist/server/oauth/tokenEncryption.d.ts +0 -80
  268. package/dist/server/oauth/tokenEncryption.d.ts.map +0 -1
  269. package/dist/server/oauth/tokenEncryption.js +0 -218
  270. package/dist/server/oauth/tokenEncryption.js.map +0 -1
  271. package/dist/tools/sendMessage-complex-backup.d.ts +0 -6
  272. package/dist/tools/sendMessage-complex-backup.d.ts.map +0 -1
  273. package/dist/tools/sendMessage-complex-backup.js +0 -545
  274. package/dist/tools/sendMessage-complex-backup.js.map +0 -1
  275. package/dist/tools/sendMessage-revised.d.ts +0 -11
  276. package/dist/tools/sendMessage-revised.d.ts.map +0 -1
  277. package/dist/tools/sendMessage-revised.js +0 -429
  278. package/dist/tools/sendMessage-revised.js.map +0 -1
  279. package/dist/tools/sendMessage-truly-simple.d.ts +0 -8
  280. package/dist/tools/sendMessage-truly-simple.d.ts.map +0 -1
  281. package/dist/tools/sendMessage-truly-simple.js +0 -299
  282. package/dist/tools/sendMessage-truly-simple.js.map +0 -1
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Auto-Backup System - Creates automatic backups before file modifications
3
+ * Enables rollback capability and disaster recovery
4
+ */
5
+ export interface BackupMetadata {
6
+ originalPath: string;
7
+ backupPath: string;
8
+ timestamp: Date;
9
+ fileSize: number;
10
+ hash: string;
11
+ operation: 'delete' | 'overwrite' | 'move';
12
+ reason?: string;
13
+ }
14
+ export interface RollbackResult {
15
+ success: boolean;
16
+ restoredPath: string;
17
+ backupPath: string;
18
+ message: string;
19
+ timestamp: Date;
20
+ }
21
+ export declare class AutoBackup {
22
+ private backupDir;
23
+ private backupMetadata;
24
+ private maxBackupAge;
25
+ private maxBackupSize;
26
+ private cleanupInterval;
27
+ constructor(backupDir?: string);
28
+ /**
29
+ * Initialize backup directory structure
30
+ */
31
+ private initializeBackupDirectory;
32
+ /**
33
+ * Create a backup of a file before modification
34
+ */
35
+ createBackup(filePath: string, operation: 'delete' | 'overwrite' | 'move', reason?: string): Promise<{
36
+ success: boolean;
37
+ backupPath?: string;
38
+ backupId?: string;
39
+ error?: string;
40
+ }>;
41
+ /**
42
+ * Restore a file from backup (rollback capability)
43
+ */
44
+ rollback(backupId: string): Promise<RollbackResult>;
45
+ /**
46
+ * Get list of available backups
47
+ */
48
+ listBackups(): Promise<BackupMetadata[]>;
49
+ /**
50
+ * Get backup details
51
+ */
52
+ getBackupDetails(backupId: string): BackupMetadata | null;
53
+ /**
54
+ * Clean up old backups (>7 days)
55
+ */
56
+ cleanupOldBackups(): Promise<{
57
+ deletedCount: number;
58
+ freedSpace: number;
59
+ }>;
60
+ /**
61
+ * Get backup statistics
62
+ */
63
+ getBackupStats(): Promise<{
64
+ totalBackups: number;
65
+ totalSize: number;
66
+ oldestBackup?: Date;
67
+ newestBackup?: Date;
68
+ diskUsagePercent: number;
69
+ }>;
70
+ /**
71
+ * Start automatic cleanup schedule
72
+ */
73
+ private startCleanupSchedule;
74
+ /**
75
+ * Stop cleanup schedule
76
+ */
77
+ stopCleanupSchedule(): void;
78
+ /**
79
+ * Save metadata to file
80
+ */
81
+ private saveMetadata;
82
+ /**
83
+ * Log rollback operation
84
+ */
85
+ private logRollback;
86
+ /**
87
+ * Generate simple hash of file content for verification
88
+ */
89
+ private generateSimpleHash;
90
+ /**
91
+ * Format bytes to human readable
92
+ */
93
+ private formatBytes;
94
+ }
95
+ export declare const autoBackup: AutoBackup;
96
+ //# sourceMappingURL=auto-backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-backup.d.ts","sourceRoot":"","sources":["../../../src/developer/backup/auto-backup.ts"],"names":[],"mappings":"AAYA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,eAAe,CAA+B;gBAE1C,SAAS,GAAE,MAAoB;IAM3C;;OAEG;YACW,yBAAyB;IAqBvC;;OAEG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,EAC1C,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAwEF;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgEzD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA6B9C;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIzD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAuChF;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,IAAI,CAAC;QACpB,YAAY,CAAC,EAAE,IAAI,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IA8BF;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAQ3B;;OAEG;YACW,YAAY;IAS1B;;OAEG;YACW,WAAW;IAuBzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,WAAW;CAOpB;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -0,0 +1,346 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { promisify } from 'util';
4
+ import { logger } from '../../utils/logger.js';
5
+ const readFile = promisify(fs.readFile);
6
+ const writeFile = promisify(fs.writeFile);
7
+ const mkdir = promisify(fs.mkdir);
8
+ const stat = promisify(fs.stat);
9
+ const readdir = promisify(fs.readdir);
10
+ const unlink = promisify(fs.unlink);
11
+ export class AutoBackup {
12
+ backupDir;
13
+ backupMetadata = new Map();
14
+ maxBackupAge = 7 * 24 * 60 * 60 * 1000; // 7 days in milliseconds
15
+ maxBackupSize = 500 * 1024 * 1024; // 500MB
16
+ cleanupInterval = null;
17
+ constructor(backupDir = './.backup') {
18
+ this.backupDir = backupDir;
19
+ this.initializeBackupDirectory();
20
+ this.startCleanupSchedule();
21
+ }
22
+ /**
23
+ * Initialize backup directory structure
24
+ */
25
+ async initializeBackupDirectory() {
26
+ try {
27
+ const fullPath = path.resolve(this.backupDir);
28
+ if (!fs.existsSync(fullPath)) {
29
+ await mkdir(fullPath, { recursive: true });
30
+ logger.info(`Backup directory created: ${fullPath}`);
31
+ }
32
+ // Create subdirectories for organization
33
+ const subdirs = ['snapshots', 'metadata', 'rollback-logs'];
34
+ for (const subdir of subdirs) {
35
+ const subdirPath = path.join(fullPath, subdir);
36
+ if (!fs.existsSync(subdirPath)) {
37
+ await mkdir(subdirPath, { recursive: true });
38
+ }
39
+ }
40
+ }
41
+ catch (error) {
42
+ logger.error('Failed to initialize backup directory:', error);
43
+ }
44
+ }
45
+ /**
46
+ * Create a backup of a file before modification
47
+ */
48
+ async createBackup(filePath, operation, reason) {
49
+ try {
50
+ const fullPath = path.resolve(filePath);
51
+ // Verify file exists
52
+ if (!fs.existsSync(fullPath)) {
53
+ return {
54
+ success: false,
55
+ error: `File not found: ${filePath}`,
56
+ };
57
+ }
58
+ // Get file stats
59
+ const stats = await stat(fullPath);
60
+ if (!stats.isFile()) {
61
+ return {
62
+ success: false,
63
+ error: `Path is not a file: ${filePath}`,
64
+ };
65
+ }
66
+ // Check file size
67
+ if (stats.size > 50 * 1024 * 1024) {
68
+ return {
69
+ success: false,
70
+ error: `File too large for backup (>50MB): ${filePath}`,
71
+ };
72
+ }
73
+ // Read file content
74
+ const fileContent = await readFile(fullPath);
75
+ // Generate backup ID and paths
76
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
77
+ const backupId = `${timestamp}_${path.basename(fullPath)}`;
78
+ const backupPath = path.join(this.backupDir, 'snapshots', backupId);
79
+ // Write backup file
80
+ await writeFile(backupPath, fileContent);
81
+ // Create metadata
82
+ const metadata = {
83
+ originalPath: fullPath,
84
+ backupPath,
85
+ timestamp: new Date(),
86
+ fileSize: stats.size,
87
+ hash: this.generateSimpleHash(fileContent.toString()),
88
+ operation,
89
+ reason,
90
+ };
91
+ this.backupMetadata.set(backupId, metadata);
92
+ // Save metadata to file
93
+ await this.saveMetadata(backupId, metadata);
94
+ logger.info(`Backup created: ${backupPath} for ${operation} operation on ${filePath}`);
95
+ return {
96
+ success: true,
97
+ backupPath,
98
+ backupId,
99
+ };
100
+ }
101
+ catch (error) {
102
+ logger.error(`Failed to create backup for ${filePath}:`, error);
103
+ return {
104
+ success: false,
105
+ error: error instanceof Error ? error.message : 'Unknown error during backup creation',
106
+ };
107
+ }
108
+ }
109
+ /**
110
+ * Restore a file from backup (rollback capability)
111
+ */
112
+ async rollback(backupId) {
113
+ try {
114
+ const metadata = this.backupMetadata.get(backupId);
115
+ if (!metadata) {
116
+ return {
117
+ success: false,
118
+ restoredPath: '',
119
+ backupPath: '',
120
+ message: `Backup not found: ${backupId}`,
121
+ timestamp: new Date(),
122
+ };
123
+ }
124
+ // Verify backup exists
125
+ if (!fs.existsSync(metadata.backupPath)) {
126
+ return {
127
+ success: false,
128
+ restoredPath: '',
129
+ backupPath: metadata.backupPath,
130
+ message: `Backup file no longer exists: ${metadata.backupPath}`,
131
+ timestamp: new Date(),
132
+ };
133
+ }
134
+ // Read backup content
135
+ const backupContent = await readFile(metadata.backupPath);
136
+ // Restore to original path
137
+ const restorePath = metadata.originalPath;
138
+ // Create parent directory if needed
139
+ const parentDir = path.dirname(restorePath);
140
+ if (!fs.existsSync(parentDir)) {
141
+ await mkdir(parentDir, { recursive: true });
142
+ }
143
+ // Restore file
144
+ await writeFile(restorePath, backupContent);
145
+ // Log rollback
146
+ await this.logRollback(backupId, restorePath, metadata);
147
+ logger.info(`File rolled back from backup: ${restorePath}`);
148
+ return {
149
+ success: true,
150
+ restoredPath: restorePath,
151
+ backupPath: metadata.backupPath,
152
+ message: `Successfully restored ${path.basename(restorePath)} from backup`,
153
+ timestamp: new Date(),
154
+ };
155
+ }
156
+ catch (error) {
157
+ logger.error(`Failed to rollback backup ${backupId}:`, error);
158
+ return {
159
+ success: false,
160
+ restoredPath: '',
161
+ backupPath: '',
162
+ message: error instanceof Error ? error.message : 'Unknown error during rollback',
163
+ timestamp: new Date(),
164
+ };
165
+ }
166
+ }
167
+ /**
168
+ * Get list of available backups
169
+ */
170
+ async listBackups() {
171
+ const backups = [];
172
+ try {
173
+ const snapshotsDir = path.join(this.backupDir, 'snapshots');
174
+ if (!fs.existsSync(snapshotsDir)) {
175
+ return backups;
176
+ }
177
+ const files = await readdir(snapshotsDir);
178
+ for (const file of files) {
179
+ const backupId = path.basename(file, path.extname(file));
180
+ const metadata = this.backupMetadata.get(backupId);
181
+ if (metadata) {
182
+ backups.push(metadata);
183
+ }
184
+ }
185
+ // Sort by timestamp descending
186
+ backups.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
187
+ return backups;
188
+ }
189
+ catch (error) {
190
+ logger.error('Failed to list backups:', error);
191
+ return backups;
192
+ }
193
+ }
194
+ /**
195
+ * Get backup details
196
+ */
197
+ getBackupDetails(backupId) {
198
+ return this.backupMetadata.get(backupId) || null;
199
+ }
200
+ /**
201
+ * Clean up old backups (>7 days)
202
+ */
203
+ async cleanupOldBackups() {
204
+ let deletedCount = 0;
205
+ let freedSpace = 0;
206
+ try {
207
+ const backups = await this.listBackups();
208
+ const now = new Date().getTime();
209
+ for (const backup of backups) {
210
+ const backupAge = now - backup.timestamp.getTime();
211
+ if (backupAge > this.maxBackupAge) {
212
+ try {
213
+ if (fs.existsSync(backup.backupPath)) {
214
+ const stats = await stat(backup.backupPath);
215
+ await unlink(backup.backupPath);
216
+ freedSpace += stats.size;
217
+ deletedCount++;
218
+ this.backupMetadata.delete(path.basename(backup.backupPath, path.extname(backup.backupPath)));
219
+ }
220
+ }
221
+ catch (error) {
222
+ logger.error(`Failed to delete old backup ${backup.backupPath}:`, error);
223
+ }
224
+ }
225
+ }
226
+ if (deletedCount > 0) {
227
+ logger.info(`Cleanup: Removed ${deletedCount} old backups, freed ${this.formatBytes(freedSpace)}`);
228
+ }
229
+ return { deletedCount, freedSpace };
230
+ }
231
+ catch (error) {
232
+ logger.error('Failed to cleanup old backups:', error);
233
+ return { deletedCount: 0, freedSpace: 0 };
234
+ }
235
+ }
236
+ /**
237
+ * Get backup statistics
238
+ */
239
+ async getBackupStats() {
240
+ try {
241
+ const backups = await this.listBackups();
242
+ let totalSize = 0;
243
+ for (const backup of backups) {
244
+ totalSize += backup.fileSize;
245
+ }
246
+ const oldestBackup = backups.length > 0 ? backups[backups.length - 1]?.timestamp : undefined;
247
+ const newestBackup = backups.length > 0 ? backups[0]?.timestamp : undefined;
248
+ const diskUsagePercent = (totalSize / this.maxBackupSize) * 100;
249
+ return {
250
+ totalBackups: backups.length,
251
+ totalSize,
252
+ oldestBackup,
253
+ newestBackup,
254
+ diskUsagePercent,
255
+ };
256
+ }
257
+ catch (error) {
258
+ logger.error('Failed to get backup stats:', error);
259
+ return {
260
+ totalBackups: 0,
261
+ totalSize: 0,
262
+ diskUsagePercent: 0,
263
+ };
264
+ }
265
+ }
266
+ /**
267
+ * Start automatic cleanup schedule
268
+ */
269
+ startCleanupSchedule() {
270
+ // Run cleanup every 6 hours
271
+ this.cleanupInterval = setInterval(() => {
272
+ this.cleanupOldBackups().catch(error => {
273
+ logger.error('Scheduled backup cleanup failed:', error);
274
+ });
275
+ }, 6 * 60 * 60 * 1000);
276
+ logger.info('Backup cleanup schedule started (every 6 hours)');
277
+ }
278
+ /**
279
+ * Stop cleanup schedule
280
+ */
281
+ stopCleanupSchedule() {
282
+ if (this.cleanupInterval) {
283
+ clearInterval(this.cleanupInterval);
284
+ this.cleanupInterval = null;
285
+ logger.info('Backup cleanup schedule stopped');
286
+ }
287
+ }
288
+ /**
289
+ * Save metadata to file
290
+ */
291
+ async saveMetadata(backupId, metadata) {
292
+ try {
293
+ const metadataPath = path.join(this.backupDir, 'metadata', `${backupId}.json`);
294
+ await writeFile(metadataPath, JSON.stringify(metadata, null, 2));
295
+ }
296
+ catch (error) {
297
+ logger.error(`Failed to save metadata for ${backupId}:`, error);
298
+ }
299
+ }
300
+ /**
301
+ * Log rollback operation
302
+ */
303
+ async logRollback(backupId, restoredPath, metadata) {
304
+ try {
305
+ const rollbackLogPath = path.join(this.backupDir, 'rollback-logs', `rollback_${new Date().toISOString().replace(/[:.]/g, '-')}.json`);
306
+ const logEntry = {
307
+ backupId,
308
+ restoredPath,
309
+ originalPath: metadata.originalPath,
310
+ operation: metadata.operation,
311
+ timestamp: new Date().toISOString(),
312
+ originalBackupTime: metadata.timestamp,
313
+ };
314
+ await writeFile(rollbackLogPath, JSON.stringify(logEntry, null, 2));
315
+ }
316
+ catch (error) {
317
+ logger.error(`Failed to log rollback:`, error);
318
+ }
319
+ }
320
+ /**
321
+ * Generate simple hash of file content for verification
322
+ */
323
+ generateSimpleHash(content) {
324
+ let hash = 0;
325
+ for (let i = 0; i < Math.min(content.length, 1000); i++) {
326
+ const char = content.charCodeAt(i);
327
+ hash = (hash << 5) - hash + char;
328
+ hash = hash & hash; // Convert to 32bit integer
329
+ }
330
+ return Math.abs(hash).toString(16);
331
+ }
332
+ /**
333
+ * Format bytes to human readable
334
+ */
335
+ formatBytes(bytes) {
336
+ if (bytes === 0)
337
+ return '0 Bytes';
338
+ const k = 1024;
339
+ const sizes = ['Bytes', 'KB', 'MB', 'GB'];
340
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
341
+ return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
342
+ }
343
+ }
344
+ // Export singleton instance
345
+ export const autoBackup = new AutoBackup();
346
+ //# sourceMappingURL=auto-backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-backup.js","sourceRoot":"","sources":["../../../src/developer/backup/auto-backup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Package Blocker - Intercepts and blocks AI package recommendations
3
+ * This is the enforcement layer that prevents bad packages from being installed
4
+ */
5
+ export interface BlockerResult {
6
+ allowed: boolean;
7
+ original: string;
8
+ modified?: string;
9
+ warnings: string[];
10
+ blockedPackages: string[];
11
+ suggestions: Record<string, string[]>;
12
+ }
13
+ export declare class PackageBlocker {
14
+ private evaluator;
15
+ private autoFix;
16
+ constructor(autoFix?: boolean);
17
+ /**
18
+ * Intercept and validate code with package installations
19
+ */
20
+ interceptCode(code: string, language: 'javascript' | 'typescript' | 'python' | 'java' | 'go' | 'rust' | 'csharp' | 'ruby' | 'unknown'): Promise<BlockerResult>;
21
+ /**
22
+ * Intercept package manager commands (npm install, pip install, etc.)
23
+ */
24
+ interceptCommand(command: string): Promise<BlockerResult>;
25
+ private parseCommand;
26
+ private buildCommand;
27
+ private replacePackage;
28
+ /**
29
+ * Generate a report of blocked packages
30
+ */
31
+ generateReport(results: BlockerResult[]): string;
32
+ }
33
+ //# sourceMappingURL=package-blocker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-blocker.d.ts","sourceRoot":"","sources":["../../../src/developer/blockers/package-blocker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,UAAO;IAK1B;;OAEG;IACG,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GACxG,OAAO,CAAC,aAAa,CAAC;IA4DzB;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAoD/D,OAAO,CAAC,YAAY;IAuEpB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,cAAc;IAsCtB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM;CAoCjD"}