@wundr.io/cli 1.0.11 → 1.0.12

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 (269) hide show
  1. package/bin/wundr.js +8 -4
  2. package/package.json +23 -23
  3. package/src/ai/ai-service.ts +16 -17
  4. package/src/ai/claude-client.ts +16 -16
  5. package/src/ai/conversation-manager.ts +29 -29
  6. package/src/cli.ts +4 -4
  7. package/src/commands/ai.ts +246 -78
  8. package/src/commands/alignment.ts +74 -74
  9. package/src/commands/analyze-optimized.ts +111 -78
  10. package/src/commands/analyze.ts +14 -14
  11. package/src/commands/batch.ts +179 -42
  12. package/src/commands/chat.ts +37 -30
  13. package/src/commands/claude-init.ts +41 -45
  14. package/src/commands/claude-setup.ts +204 -119
  15. package/src/commands/computer-setup.ts +85 -43
  16. package/src/commands/create-command.ts +4 -4
  17. package/src/commands/create.ts +27 -27
  18. package/src/commands/dashboard.ts +24 -24
  19. package/src/commands/govern.ts +25 -25
  20. package/src/commands/governance.ts +34 -34
  21. package/src/commands/guardian.ts +56 -56
  22. package/src/commands/init.ts +25 -22
  23. package/src/commands/orchestrator.ts +68 -41
  24. package/src/commands/performance-optimizer.ts +34 -35
  25. package/src/commands/plugins.ts +27 -27
  26. package/src/commands/project-update.ts +175 -72
  27. package/src/commands/rag.ts +185 -78
  28. package/src/commands/session.ts +35 -35
  29. package/src/commands/setup.ts +40 -344
  30. package/src/commands/test-init.ts +3 -3
  31. package/src/commands/test.ts +4 -4
  32. package/src/commands/watch.ts +28 -29
  33. package/src/commands/worktree.ts +49 -49
  34. package/src/context/context-manager.ts +10 -10
  35. package/src/context/session-manager.ts +41 -41
  36. package/src/framework/command-interface.ts +520 -0
  37. package/src/framework/command-registry.ts +942 -0
  38. package/src/framework/completion-exporter.ts +383 -0
  39. package/src/framework/debug-logger.ts +519 -0
  40. package/src/framework/error-handler.ts +867 -0
  41. package/src/framework/help-generator.ts +540 -0
  42. package/src/framework/index.ts +169 -0
  43. package/src/framework/interactive-repl.ts +703 -0
  44. package/src/framework/output-formatter.ts +834 -0
  45. package/src/framework/progress-manager.ts +539 -0
  46. package/src/index.ts +4 -4
  47. package/src/interactive/interactive-mode.ts +16 -16
  48. package/src/lib/conflict-resolution.ts +799 -9
  49. package/src/lib/merge-strategy.ts +529 -7
  50. package/src/lib/safety-mechanisms.ts +422 -18
  51. package/src/lib/state-detection.ts +1015 -13
  52. package/src/nlp/command-mapper.ts +29 -29
  53. package/src/nlp/command-parser.ts +17 -17
  54. package/src/nlp/intent-classifier.ts +7 -7
  55. package/src/nlp/intent-parser.ts +54 -52
  56. package/src/plugins/plugin-manager.ts +61 -39
  57. package/src/tests/computer-setup-integration.test.ts +46 -15
  58. package/src/types/modules.d.ts +424 -1
  59. package/src/utils/backup-rollback-manager.ts +11 -8
  60. package/src/utils/config-manager.ts +3 -3
  61. package/src/utils/error-handler.ts +2 -2
  62. package/src/utils/logger.ts +22 -22
  63. package/templates/batch/ci-cd.yaml +7 -7
  64. package/test-suites/api/health.spec.ts +20 -23
  65. package/test-suites/helpers/test-config.ts +14 -13
  66. package/test-suites/ui/accessibility.spec.ts +27 -22
  67. package/test-suites/ui/smoke.spec.ts +26 -21
  68. package/LICENSE +0 -21
  69. package/dist/ai/ai-service.d.ts +0 -152
  70. package/dist/ai/ai-service.d.ts.map +0 -1
  71. package/dist/ai/ai-service.js +0 -430
  72. package/dist/ai/ai-service.js.map +0 -1
  73. package/dist/ai/claude-client.d.ts +0 -130
  74. package/dist/ai/claude-client.d.ts.map +0 -1
  75. package/dist/ai/claude-client.js +0 -340
  76. package/dist/ai/claude-client.js.map +0 -1
  77. package/dist/ai/conversation-manager.d.ts +0 -164
  78. package/dist/ai/conversation-manager.d.ts.map +0 -1
  79. package/dist/ai/conversation-manager.js +0 -614
  80. package/dist/ai/conversation-manager.js.map +0 -1
  81. package/dist/ai/index.d.ts +0 -5
  82. package/dist/ai/index.d.ts.map +0 -1
  83. package/dist/ai/index.js +0 -8
  84. package/dist/ai/index.js.map +0 -1
  85. package/dist/cli.d.ts +0 -36
  86. package/dist/cli.d.ts.map +0 -1
  87. package/dist/cli.js +0 -192
  88. package/dist/cli.js.map +0 -1
  89. package/dist/commands/ai.d.ts +0 -89
  90. package/dist/commands/ai.d.ts.map +0 -1
  91. package/dist/commands/ai.js +0 -799
  92. package/dist/commands/ai.js.map +0 -1
  93. package/dist/commands/alignment.d.ts +0 -78
  94. package/dist/commands/alignment.d.ts.map +0 -1
  95. package/dist/commands/alignment.js +0 -817
  96. package/dist/commands/alignment.js.map +0 -1
  97. package/dist/commands/analyze-optimized.d.ts +0 -14
  98. package/dist/commands/analyze-optimized.d.ts.map +0 -1
  99. package/dist/commands/analyze-optimized.js +0 -600
  100. package/dist/commands/analyze-optimized.js.map +0 -1
  101. package/dist/commands/analyze.d.ts +0 -65
  102. package/dist/commands/analyze.d.ts.map +0 -1
  103. package/dist/commands/analyze.js +0 -435
  104. package/dist/commands/analyze.js.map +0 -1
  105. package/dist/commands/batch.d.ts +0 -71
  106. package/dist/commands/batch.d.ts.map +0 -1
  107. package/dist/commands/batch.js +0 -738
  108. package/dist/commands/batch.js.map +0 -1
  109. package/dist/commands/chat.d.ts +0 -71
  110. package/dist/commands/chat.d.ts.map +0 -1
  111. package/dist/commands/chat.js +0 -674
  112. package/dist/commands/chat.js.map +0 -1
  113. package/dist/commands/claude-init.d.ts +0 -28
  114. package/dist/commands/claude-init.d.ts.map +0 -1
  115. package/dist/commands/claude-init.js +0 -591
  116. package/dist/commands/claude-init.js.map +0 -1
  117. package/dist/commands/claude-setup.d.ts +0 -119
  118. package/dist/commands/claude-setup.d.ts.map +0 -1
  119. package/dist/commands/claude-setup.js +0 -1073
  120. package/dist/commands/claude-setup.js.map +0 -1
  121. package/dist/commands/computer-setup-commands.d.ts +0 -53
  122. package/dist/commands/computer-setup-commands.d.ts.map +0 -1
  123. package/dist/commands/computer-setup-commands.js +0 -705
  124. package/dist/commands/computer-setup-commands.js.map +0 -1
  125. package/dist/commands/computer-setup.d.ts +0 -7
  126. package/dist/commands/computer-setup.d.ts.map +0 -1
  127. package/dist/commands/computer-setup.js +0 -849
  128. package/dist/commands/computer-setup.js.map +0 -1
  129. package/dist/commands/create-command.d.ts +0 -7
  130. package/dist/commands/create-command.d.ts.map +0 -1
  131. package/dist/commands/create-command.js +0 -158
  132. package/dist/commands/create-command.js.map +0 -1
  133. package/dist/commands/create.d.ts +0 -74
  134. package/dist/commands/create.d.ts.map +0 -1
  135. package/dist/commands/create.js +0 -556
  136. package/dist/commands/create.js.map +0 -1
  137. package/dist/commands/dashboard.d.ts +0 -91
  138. package/dist/commands/dashboard.d.ts.map +0 -1
  139. package/dist/commands/dashboard.js +0 -538
  140. package/dist/commands/dashboard.js.map +0 -1
  141. package/dist/commands/govern.d.ts +0 -70
  142. package/dist/commands/govern.d.ts.map +0 -1
  143. package/dist/commands/govern.js +0 -481
  144. package/dist/commands/govern.js.map +0 -1
  145. package/dist/commands/governance.d.ts +0 -17
  146. package/dist/commands/governance.d.ts.map +0 -1
  147. package/dist/commands/governance.js +0 -703
  148. package/dist/commands/governance.js.map +0 -1
  149. package/dist/commands/guardian.d.ts +0 -20
  150. package/dist/commands/guardian.d.ts.map +0 -1
  151. package/dist/commands/guardian.js +0 -597
  152. package/dist/commands/guardian.js.map +0 -1
  153. package/dist/commands/init.d.ts +0 -59
  154. package/dist/commands/init.d.ts.map +0 -1
  155. package/dist/commands/init.js +0 -650
  156. package/dist/commands/init.js.map +0 -1
  157. package/dist/commands/orchestrator.d.ts +0 -7
  158. package/dist/commands/orchestrator.d.ts.map +0 -1
  159. package/dist/commands/orchestrator.js +0 -571
  160. package/dist/commands/orchestrator.js.map +0 -1
  161. package/dist/commands/performance-optimizer.d.ts +0 -30
  162. package/dist/commands/performance-optimizer.d.ts.map +0 -1
  163. package/dist/commands/performance-optimizer.js +0 -650
  164. package/dist/commands/performance-optimizer.js.map +0 -1
  165. package/dist/commands/plugins.d.ts +0 -87
  166. package/dist/commands/plugins.d.ts.map +0 -1
  167. package/dist/commands/plugins.js +0 -685
  168. package/dist/commands/plugins.js.map +0 -1
  169. package/dist/commands/rag.d.ts +0 -7
  170. package/dist/commands/rag.d.ts.map +0 -1
  171. package/dist/commands/rag.js +0 -748
  172. package/dist/commands/rag.js.map +0 -1
  173. package/dist/commands/session.d.ts +0 -41
  174. package/dist/commands/session.d.ts.map +0 -1
  175. package/dist/commands/session.js +0 -441
  176. package/dist/commands/session.js.map +0 -1
  177. package/dist/commands/setup.d.ts +0 -29
  178. package/dist/commands/setup.d.ts.map +0 -1
  179. package/dist/commands/setup.js +0 -397
  180. package/dist/commands/setup.js.map +0 -1
  181. package/dist/commands/test-init.d.ts +0 -9
  182. package/dist/commands/test-init.d.ts.map +0 -1
  183. package/dist/commands/test-init.js +0 -222
  184. package/dist/commands/test-init.js.map +0 -1
  185. package/dist/commands/test.d.ts +0 -25
  186. package/dist/commands/test.d.ts.map +0 -1
  187. package/dist/commands/test.js +0 -217
  188. package/dist/commands/test.js.map +0 -1
  189. package/dist/commands/vp.d.ts +0 -7
  190. package/dist/commands/vp.d.ts.map +0 -1
  191. package/dist/commands/vp.js +0 -571
  192. package/dist/commands/vp.js.map +0 -1
  193. package/dist/commands/watch.d.ts +0 -76
  194. package/dist/commands/watch.d.ts.map +0 -1
  195. package/dist/commands/watch.js +0 -613
  196. package/dist/commands/watch.js.map +0 -1
  197. package/dist/commands/worktree.d.ts +0 -63
  198. package/dist/commands/worktree.d.ts.map +0 -1
  199. package/dist/commands/worktree.js +0 -774
  200. package/dist/commands/worktree.js.map +0 -1
  201. package/dist/context/context-manager.d.ts +0 -155
  202. package/dist/context/context-manager.d.ts.map +0 -1
  203. package/dist/context/context-manager.js +0 -383
  204. package/dist/context/context-manager.js.map +0 -1
  205. package/dist/context/index.d.ts +0 -3
  206. package/dist/context/index.d.ts.map +0 -1
  207. package/dist/context/index.js +0 -6
  208. package/dist/context/index.js.map +0 -1
  209. package/dist/context/session-manager.d.ts +0 -207
  210. package/dist/context/session-manager.d.ts.map +0 -1
  211. package/dist/context/session-manager.js +0 -686
  212. package/dist/context/session-manager.js.map +0 -1
  213. package/dist/index.d.ts +0 -8
  214. package/dist/index.d.ts.map +0 -1
  215. package/dist/index.js +0 -51
  216. package/dist/index.js.map +0 -1
  217. package/dist/interactive/interactive-mode.d.ts +0 -76
  218. package/dist/interactive/interactive-mode.d.ts.map +0 -1
  219. package/dist/interactive/interactive-mode.js +0 -732
  220. package/dist/interactive/interactive-mode.js.map +0 -1
  221. package/dist/nlp/command-mapper.d.ts +0 -174
  222. package/dist/nlp/command-mapper.d.ts.map +0 -1
  223. package/dist/nlp/command-mapper.js +0 -624
  224. package/dist/nlp/command-mapper.js.map +0 -1
  225. package/dist/nlp/command-parser.d.ts +0 -106
  226. package/dist/nlp/command-parser.d.ts.map +0 -1
  227. package/dist/nlp/command-parser.js +0 -417
  228. package/dist/nlp/command-parser.js.map +0 -1
  229. package/dist/nlp/index.d.ts +0 -5
  230. package/dist/nlp/index.d.ts.map +0 -1
  231. package/dist/nlp/index.js +0 -8
  232. package/dist/nlp/index.js.map +0 -1
  233. package/dist/nlp/intent-classifier.d.ts +0 -59
  234. package/dist/nlp/intent-classifier.d.ts.map +0 -1
  235. package/dist/nlp/intent-classifier.js +0 -384
  236. package/dist/nlp/intent-classifier.js.map +0 -1
  237. package/dist/nlp/intent-parser.d.ts +0 -152
  238. package/dist/nlp/intent-parser.d.ts.map +0 -1
  239. package/dist/nlp/intent-parser.js +0 -744
  240. package/dist/nlp/intent-parser.js.map +0 -1
  241. package/dist/plugins/plugin-manager.d.ts +0 -120
  242. package/dist/plugins/plugin-manager.d.ts.map +0 -1
  243. package/dist/plugins/plugin-manager.js +0 -595
  244. package/dist/plugins/plugin-manager.js.map +0 -1
  245. package/dist/types/index.d.ts +0 -224
  246. package/dist/types/index.d.ts.map +0 -1
  247. package/dist/types/index.js +0 -3
  248. package/dist/types/index.js.map +0 -1
  249. package/dist/utils/backup-rollback-manager.d.ts +0 -72
  250. package/dist/utils/backup-rollback-manager.d.ts.map +0 -1
  251. package/dist/utils/backup-rollback-manager.js +0 -289
  252. package/dist/utils/backup-rollback-manager.js.map +0 -1
  253. package/dist/utils/claude-config-installer.d.ts +0 -98
  254. package/dist/utils/claude-config-installer.d.ts.map +0 -1
  255. package/dist/utils/claude-config-installer.js +0 -678
  256. package/dist/utils/claude-config-installer.js.map +0 -1
  257. package/dist/utils/config-manager.d.ts +0 -73
  258. package/dist/utils/config-manager.d.ts.map +0 -1
  259. package/dist/utils/config-manager.js +0 -339
  260. package/dist/utils/config-manager.js.map +0 -1
  261. package/dist/utils/error-handler.d.ts +0 -46
  262. package/dist/utils/error-handler.d.ts.map +0 -1
  263. package/dist/utils/error-handler.js +0 -169
  264. package/dist/utils/error-handler.js.map +0 -1
  265. package/dist/utils/logger.d.ts +0 -25
  266. package/dist/utils/logger.d.ts.map +0 -1
  267. package/dist/utils/logger.js +0 -105
  268. package/dist/utils/logger.js.map +0 -1
  269. package/src/commands/computer-setup-commands.ts +0 -872
@@ -1,224 +0,0 @@
1
- import type { Command } from 'commander';
2
- /**
3
- * Core types for the Wundr CLI
4
- */
5
- export interface WundrConfig {
6
- version: string;
7
- defaultMode: 'cli' | 'interactive' | 'chat' | 'tui';
8
- plugins: string[];
9
- integrations: {
10
- github?: GitHubIntegration;
11
- slack?: SlackIntegration;
12
- jira?: JiraIntegration;
13
- };
14
- ai: {
15
- provider: string;
16
- model: string;
17
- apiKey?: string;
18
- };
19
- analysis: {
20
- patterns: string[];
21
- excludes: string[];
22
- maxDepth: number;
23
- };
24
- governance: {
25
- rules: string[];
26
- severity: 'error' | 'warning' | 'info';
27
- };
28
- }
29
- export interface GitHubIntegration {
30
- token: string;
31
- owner: string;
32
- repo: string;
33
- webhooks?: boolean;
34
- }
35
- export interface SlackIntegration {
36
- token: string;
37
- channel: string;
38
- webhooks?: boolean;
39
- }
40
- export interface JiraIntegration {
41
- url: string;
42
- email: string;
43
- token: string;
44
- }
45
- export interface CommandContext {
46
- config: WundrConfig;
47
- logger: Logger;
48
- spinner: Spinner;
49
- interactive: boolean;
50
- dryRun: boolean;
51
- }
52
- export interface Logger {
53
- debug(message: string, ...args: any[]): void;
54
- info(message: string, ...args: any[]): void;
55
- warn(message: string, ...args: any[]): void;
56
- error(message: string, ...args: any[]): void;
57
- success(message: string, ...args: any[]): void;
58
- setLevel(level: 'debug' | 'info' | 'warn' | 'error'): void;
59
- }
60
- export interface Spinner {
61
- start(text?: string): void;
62
- succeed(text?: string): void;
63
- fail(text?: string): void;
64
- warn(text?: string): void;
65
- info(text?: string): void;
66
- stop(): void;
67
- text: string;
68
- }
69
- export interface Plugin {
70
- name: string;
71
- version: string;
72
- description: string;
73
- commands?: PluginCommand[];
74
- hooks?: PluginHook[];
75
- activate(context: PluginContext): Promise<void>;
76
- deactivate(): Promise<void>;
77
- }
78
- export interface PluginCommand {
79
- name: string;
80
- description: string;
81
- options?: CommandOption[];
82
- action: (args: any[], options: any, context: CommandContext) => Promise<void>;
83
- }
84
- export interface PluginHook {
85
- event: string;
86
- handler: (data: any, context: CommandContext) => Promise<void>;
87
- }
88
- export interface CommandOption {
89
- flags: string;
90
- description: string;
91
- defaultValue?: any;
92
- }
93
- export interface PluginContext {
94
- config: WundrConfig;
95
- logger: Logger;
96
- registerCommand(command: PluginCommand): void;
97
- registerHook(hook: PluginHook): void;
98
- }
99
- export interface BatchJob {
100
- name: string;
101
- description?: string;
102
- commands: BatchCommand[];
103
- parallel?: boolean;
104
- continueOnError?: boolean;
105
- timeout?: number;
106
- }
107
- export interface BatchCommand {
108
- command: string;
109
- args?: string[];
110
- options?: Record<string, any>;
111
- condition?: string;
112
- retry?: number;
113
- timeout?: number;
114
- }
115
- export interface WatchConfig {
116
- patterns: string[];
117
- ignore?: string[];
118
- commands: WatchCommand[];
119
- debounce?: number;
120
- recursive?: boolean;
121
- }
122
- export interface WatchCommand {
123
- trigger: 'change' | 'add' | 'delete' | 'rename';
124
- command: string;
125
- args?: string[];
126
- condition?: string;
127
- }
128
- export interface TUILayout {
129
- name: string;
130
- widgets: TUIWidget[];
131
- keybindings?: Keybinding[];
132
- }
133
- export interface TUIWidget {
134
- type: 'log' | 'chart' | 'table' | 'progress' | 'text';
135
- position: {
136
- top: string | number;
137
- left: string | number;
138
- width: string | number;
139
- height: string | number;
140
- };
141
- options: Record<string, any>;
142
- dataSource?: string;
143
- }
144
- export interface Keybinding {
145
- key: string;
146
- action: string;
147
- description: string;
148
- }
149
- export interface ChatSession {
150
- id: string;
151
- model: string;
152
- context?: string;
153
- history: ChatMessage[];
154
- created: Date;
155
- updated: Date;
156
- }
157
- export interface ChatMessage {
158
- role: 'user' | 'assistant' | 'system';
159
- content: string;
160
- timestamp: Date;
161
- metadata?: Record<string, any>;
162
- }
163
- export interface AnalysisResult {
164
- type: 'dependency' | 'quality' | 'security' | 'performance';
165
- findings: Finding[];
166
- metrics: Record<string, number>;
167
- recommendations: Recommendation[];
168
- timestamp: Date;
169
- }
170
- export interface Finding {
171
- id: string;
172
- severity: 'critical' | 'high' | 'medium' | 'low' | 'info';
173
- title: string;
174
- description: string;
175
- file: string;
176
- line?: number;
177
- column?: number;
178
- rule: string;
179
- fixable: boolean;
180
- fix?: string;
181
- }
182
- export interface Recommendation {
183
- id: string;
184
- title: string;
185
- description: string;
186
- impact: 'high' | 'medium' | 'low';
187
- effort: 'low' | 'medium' | 'high';
188
- category: string;
189
- actions: RecommendationAction[];
190
- }
191
- export interface RecommendationAction {
192
- type: 'command' | 'file_change' | 'config_change';
193
- description: string;
194
- command?: string;
195
- file?: string;
196
- changes?: any;
197
- }
198
- /**
199
- * Base command interface for all command categories
200
- */
201
- export interface BaseCommand {
202
- program: Command;
203
- config: WundrConfig;
204
- logger: Logger;
205
- registerCommands(): void;
206
- }
207
- /**
208
- * Interactive mode types
209
- */
210
- export interface InteractiveSession {
211
- mode: 'wizard' | 'chat' | 'tui' | 'watch';
212
- config: any;
213
- state: Record<string, any>;
214
- active: boolean;
215
- }
216
- /**
217
- * Error handling types
218
- */
219
- export interface WundrError extends Error {
220
- code?: string;
221
- context?: Record<string, any>;
222
- recoverable?: boolean;
223
- }
224
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -1,72 +0,0 @@
1
- /**
2
- * Backup and Rollback Manager
3
- * Handles backup creation and restoration for configuration files
4
- */
5
- export interface BackupMetadata {
6
- timestamp: string;
7
- backupId: string;
8
- files: BackupFile[];
9
- reason: string;
10
- success: boolean;
11
- }
12
- export interface BackupFile {
13
- originalPath: string;
14
- backupPath: string;
15
- size: number;
16
- checksum?: string;
17
- }
18
- export interface RollbackOptions {
19
- backupId?: string;
20
- dryRun?: boolean;
21
- verbose?: boolean;
22
- }
23
- export declare class BackupRollbackManager {
24
- private backupDir;
25
- private metadataFile;
26
- private homeDir;
27
- constructor(backupDir?: string);
28
- /**
29
- * Initialize backup directory structure
30
- */
31
- initialize(): Promise<void>;
32
- /**
33
- * Create backup of specified files
34
- */
35
- createBackup(files: string[], reason?: string): Promise<BackupMetadata>;
36
- /**
37
- * Restore from backup
38
- */
39
- rollback(options?: RollbackOptions): Promise<boolean>;
40
- /**
41
- * List all backups
42
- */
43
- listBackups(): Promise<BackupMetadata[]>;
44
- /**
45
- * Get specific backup metadata
46
- */
47
- getBackupMetadata(backupId: string): Promise<BackupMetadata | null>;
48
- /**
49
- * Get latest successful backup
50
- */
51
- getLatestBackup(): Promise<BackupMetadata | null>;
52
- /**
53
- * Delete old backups
54
- */
55
- cleanupOldBackups(retainCount?: number): Promise<void>;
56
- /**
57
- * Verify backup integrity
58
- */
59
- verifyBackup(backupId: string): Promise<boolean>;
60
- /**
61
- * Private helper methods
62
- */
63
- private generateBackupId;
64
- private expandPath;
65
- private getRelativePath;
66
- private saveMetadata;
67
- /**
68
- * Display backup information
69
- */
70
- displayBackupInfo(metadata: BackupMetadata): void;
71
- }
72
- //# sourceMappingURL=backup-rollback-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"backup-rollback-manager.d.ts","sourceRoot":"","sources":["../../src/utils/backup-rollback-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;gBAEZ,SAAS,CAAC,EAAE,MAAM;IAO9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,GAAE,MAAwB,GAC/B,OAAO,CAAC,cAAc,CAAC;IA0E1B;;OAEG;IACG,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAwE/D;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAa9C;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKzE;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKvD;;OAEG;IACG,iBAAiB,CAAC,WAAW,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC/D;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBtD;;OAEG;IAEH,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,eAAe;YAST,YAAY;IAM1B;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAkBlD"}
@@ -1,289 +0,0 @@
1
- "use strict";
2
- /**
3
- * Backup and Rollback Manager
4
- * Handles backup creation and restoration for configuration files
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.BackupRollbackManager = void 0;
8
- const tslib_1 = require("tslib");
9
- const fs_1 = require("fs");
10
- const fs = tslib_1.__importStar(require("fs/promises"));
11
- const path = tslib_1.__importStar(require("path"));
12
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
13
- const logger_1 = require("./logger");
14
- class BackupRollbackManager {
15
- backupDir;
16
- metadataFile;
17
- homeDir;
18
- constructor(backupDir) {
19
- this.homeDir = process.env.HOME || process.env.USERPROFILE || '';
20
- this.backupDir =
21
- backupDir || path.join(this.homeDir, '.wundr', 'backups');
22
- this.metadataFile = path.join(this.backupDir, 'metadata.json');
23
- }
24
- /**
25
- * Initialize backup directory structure
26
- */
27
- async initialize() {
28
- try {
29
- await fs.mkdir(this.backupDir, { recursive: true });
30
- if (!(0, fs_1.existsSync)(this.metadataFile)) {
31
- await fs.writeFile(this.metadataFile, JSON.stringify([], null, 2));
32
- }
33
- logger_1.logger.info('Backup manager initialized', { backupDir: this.backupDir });
34
- }
35
- catch (error) {
36
- logger_1.logger.error('Failed to initialize backup manager', error);
37
- throw error;
38
- }
39
- }
40
- /**
41
- * Create backup of specified files
42
- */
43
- async createBackup(files, reason = 'Manual backup') {
44
- const backupId = this.generateBackupId();
45
- const timestamp = new Date().toISOString();
46
- const backupPath = path.join(this.backupDir, backupId);
47
- logger_1.logger.info('Creating backup', { backupId, files: files.length, reason });
48
- try {
49
- await fs.mkdir(backupPath, { recursive: true });
50
- const backupFiles = [];
51
- for (const filePath of files) {
52
- const expandedPath = this.expandPath(filePath);
53
- if (!(0, fs_1.existsSync)(expandedPath)) {
54
- logger_1.logger.warn('File not found, skipping', { file: expandedPath });
55
- continue;
56
- }
57
- const stats = await fs.stat(expandedPath);
58
- const relativePath = this.getRelativePath(expandedPath);
59
- const backupFilePath = path.join(backupPath, relativePath);
60
- // Create directory structure
61
- await fs.mkdir(path.dirname(backupFilePath), { recursive: true });
62
- // Copy file
63
- await fs.copyFile(expandedPath, backupFilePath);
64
- backupFiles.push({
65
- originalPath: expandedPath,
66
- backupPath: backupFilePath,
67
- size: stats.size,
68
- });
69
- logger_1.logger.info('Backed up file', {
70
- original: expandedPath,
71
- backup: backupFilePath,
72
- });
73
- }
74
- const metadata = {
75
- timestamp,
76
- backupId,
77
- files: backupFiles,
78
- reason,
79
- success: true,
80
- };
81
- await this.saveMetadata(metadata);
82
- logger_1.logger.info('Backup created successfully', {
83
- backupId,
84
- filesBackedUp: backupFiles.length,
85
- });
86
- return metadata;
87
- }
88
- catch (error) {
89
- logger_1.logger.error('Backup failed', error);
90
- const metadata = {
91
- timestamp,
92
- backupId,
93
- files: [],
94
- reason,
95
- success: false,
96
- };
97
- await this.saveMetadata(metadata);
98
- throw error;
99
- }
100
- }
101
- /**
102
- * Restore from backup
103
- */
104
- async rollback(options = {}) {
105
- const { backupId, dryRun = false, verbose = false } = options;
106
- try {
107
- const metadata = backupId
108
- ? await this.getBackupMetadata(backupId)
109
- : await this.getLatestBackup();
110
- if (!metadata) {
111
- logger_1.logger.error('No backup found to restore');
112
- return false;
113
- }
114
- logger_1.logger.info('Rolling back', {
115
- backupId: metadata.backupId,
116
- dryRun,
117
- files: metadata.files.length,
118
- });
119
- if (dryRun) {
120
- console.log(chalk_1.default.yellow('\nšŸ” DRY RUN - No files will be modified\n'));
121
- console.log(chalk_1.default.cyan('Files that would be restored:'));
122
- metadata.files.forEach(file => {
123
- console.log(chalk_1.default.white(` ${file.originalPath}`));
124
- if (verbose) {
125
- console.log(chalk_1.default.gray(` ← ${file.backupPath}`));
126
- }
127
- });
128
- return true;
129
- }
130
- const restoredFiles = [];
131
- const failedFiles = [];
132
- for (const file of metadata.files) {
133
- try {
134
- // Create directory structure
135
- await fs.mkdir(path.dirname(file.originalPath), {
136
- recursive: true,
137
- });
138
- // Restore file
139
- await fs.copyFile(file.backupPath, file.originalPath);
140
- restoredFiles.push(file.originalPath);
141
- logger_1.logger.info('Restored file', { file: file.originalPath });
142
- }
143
- catch (error) {
144
- logger_1.logger.error('Failed to restore file', {
145
- file: file.originalPath,
146
- error,
147
- });
148
- failedFiles.push(file.originalPath);
149
- }
150
- }
151
- console.log(chalk_1.default.green(`\nāœ… Restored ${restoredFiles.length} files`));
152
- if (failedFiles.length > 0) {
153
- console.log(chalk_1.default.red(`āŒ Failed to restore ${failedFiles.length} files`));
154
- failedFiles.forEach(file => {
155
- console.log(chalk_1.default.red(` - ${file}`));
156
- });
157
- return false;
158
- }
159
- return true;
160
- }
161
- catch (error) {
162
- logger_1.logger.error('Rollback failed', error);
163
- return false;
164
- }
165
- }
166
- /**
167
- * List all backups
168
- */
169
- async listBackups() {
170
- try {
171
- const content = await fs.readFile(this.metadataFile, 'utf-8');
172
- const backups = JSON.parse(content);
173
- return backups.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
174
- }
175
- catch (error) {
176
- logger_1.logger.error('Failed to list backups', error);
177
- return [];
178
- }
179
- }
180
- /**
181
- * Get specific backup metadata
182
- */
183
- async getBackupMetadata(backupId) {
184
- const backups = await this.listBackups();
185
- return backups.find(b => b.backupId === backupId) || null;
186
- }
187
- /**
188
- * Get latest successful backup
189
- */
190
- async getLatestBackup() {
191
- const backups = await this.listBackups();
192
- return backups.find(b => b.success) || null;
193
- }
194
- /**
195
- * Delete old backups
196
- */
197
- async cleanupOldBackups(retainCount = 5) {
198
- const backups = await this.listBackups();
199
- if (backups.length <= retainCount) {
200
- logger_1.logger.info('No backups to clean up', {
201
- current: backups.length,
202
- retain: retainCount,
203
- });
204
- return;
205
- }
206
- const toDelete = backups.slice(retainCount);
207
- logger_1.logger.info('Cleaning up old backups', { count: toDelete.length });
208
- for (const backup of toDelete) {
209
- try {
210
- const backupPath = path.join(this.backupDir, backup.backupId);
211
- await fs.rm(backupPath, { recursive: true, force: true });
212
- logger_1.logger.info('Deleted backup', { backupId: backup.backupId });
213
- }
214
- catch (error) {
215
- logger_1.logger.error('Failed to delete backup', {
216
- backupId: backup.backupId,
217
- error,
218
- });
219
- }
220
- }
221
- // Update metadata
222
- const remaining = backups.slice(0, retainCount);
223
- await fs.writeFile(this.metadataFile, JSON.stringify(remaining, null, 2));
224
- }
225
- /**
226
- * Verify backup integrity
227
- */
228
- async verifyBackup(backupId) {
229
- const metadata = await this.getBackupMetadata(backupId);
230
- if (!metadata) {
231
- logger_1.logger.error('Backup not found', { backupId });
232
- return false;
233
- }
234
- let valid = true;
235
- for (const file of metadata.files) {
236
- if (!(0, fs_1.existsSync)(file.backupPath)) {
237
- logger_1.logger.error('Backup file missing', { file: file.backupPath });
238
- valid = false;
239
- }
240
- }
241
- return valid;
242
- }
243
- /**
244
- * Private helper methods
245
- */
246
- generateBackupId() {
247
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
248
- return `backup-${timestamp}`;
249
- }
250
- expandPath(filePath) {
251
- if (filePath.startsWith('~/')) {
252
- return path.join(this.homeDir, filePath.slice(2));
253
- }
254
- return filePath;
255
- }
256
- getRelativePath(absolutePath) {
257
- // Create relative path from home directory
258
- if (absolutePath.startsWith(this.homeDir)) {
259
- return path.relative(this.homeDir, absolutePath);
260
- }
261
- // For absolute paths outside home, use full path structure
262
- return absolutePath.replace(/^\//, '');
263
- }
264
- async saveMetadata(metadata) {
265
- const backups = await this.listBackups();
266
- backups.unshift(metadata);
267
- await fs.writeFile(this.metadataFile, JSON.stringify(backups, null, 2));
268
- }
269
- /**
270
- * Display backup information
271
- */
272
- displayBackupInfo(metadata) {
273
- console.log(chalk_1.default.cyan('\nšŸ“¦ Backup Information\n'));
274
- console.log(chalk_1.default.white('Backup ID:'), chalk_1.default.green(metadata.backupId));
275
- console.log(chalk_1.default.white('Timestamp:'), chalk_1.default.gray(metadata.timestamp));
276
- console.log(chalk_1.default.white('Reason:'), chalk_1.default.gray(metadata.reason));
277
- console.log(chalk_1.default.white('Status:'), metadata.success ? chalk_1.default.green('Success') : chalk_1.default.red('Failed'));
278
- console.log(chalk_1.default.white('Files:'), chalk_1.default.cyan(metadata.files.length));
279
- if (metadata.files.length > 0) {
280
- console.log(chalk_1.default.cyan('\nBacked up files:'));
281
- metadata.files.forEach(file => {
282
- const size = (file.size / 1024).toFixed(2);
283
- console.log(chalk_1.default.gray(` • ${file.originalPath} (${size} KB)`));
284
- });
285
- }
286
- }
287
- }
288
- exports.BackupRollbackManager = BackupRollbackManager;
289
- //# sourceMappingURL=backup-rollback-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"backup-rollback-manager.js","sourceRoot":"","sources":["../../src/utils/backup-rollback-manager.ts"],"names":[],"mappings":"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"}