@wundr.io/cli 1.0.0 → 1.0.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 (166) hide show
  1. package/README.md +696 -280
  2. package/package.json +4 -4
  3. package/src/commands/computer-setup-commands.ts +160 -0
  4. package/src/tests/computer-setup-integration.test.ts +439 -0
  5. package/src/utils/backup-rollback-manager.ts +361 -0
  6. package/src/utils/claude-config-installer.ts +732 -0
  7. package/dist/ai/ai-service.d.ts +0 -152
  8. package/dist/ai/ai-service.d.ts.map +0 -1
  9. package/dist/ai/ai-service.js +0 -430
  10. package/dist/ai/ai-service.js.map +0 -1
  11. package/dist/ai/claude-client.d.ts +0 -130
  12. package/dist/ai/claude-client.d.ts.map +0 -1
  13. package/dist/ai/claude-client.js +0 -339
  14. package/dist/ai/claude-client.js.map +0 -1
  15. package/dist/ai/conversation-manager.d.ts +0 -164
  16. package/dist/ai/conversation-manager.d.ts.map +0 -1
  17. package/dist/ai/conversation-manager.js +0 -612
  18. package/dist/ai/conversation-manager.js.map +0 -1
  19. package/dist/ai/index.d.ts +0 -5
  20. package/dist/ai/index.d.ts.map +0 -1
  21. package/dist/ai/index.js +0 -8
  22. package/dist/ai/index.js.map +0 -1
  23. package/dist/cli.d.ts +0 -36
  24. package/dist/cli.d.ts.map +0 -1
  25. package/dist/cli.js +0 -173
  26. package/dist/cli.js.map +0 -1
  27. package/dist/commands/ai.d.ts +0 -89
  28. package/dist/commands/ai.d.ts.map +0 -1
  29. package/dist/commands/ai.js +0 -735
  30. package/dist/commands/ai.js.map +0 -1
  31. package/dist/commands/analyze-optimized.d.ts +0 -14
  32. package/dist/commands/analyze-optimized.d.ts.map +0 -1
  33. package/dist/commands/analyze-optimized.js +0 -437
  34. package/dist/commands/analyze-optimized.js.map +0 -1
  35. package/dist/commands/analyze.d.ts +0 -65
  36. package/dist/commands/analyze.d.ts.map +0 -1
  37. package/dist/commands/analyze.js +0 -435
  38. package/dist/commands/analyze.js.map +0 -1
  39. package/dist/commands/batch.d.ts +0 -71
  40. package/dist/commands/batch.d.ts.map +0 -1
  41. package/dist/commands/batch.js +0 -738
  42. package/dist/commands/batch.js.map +0 -1
  43. package/dist/commands/chat.d.ts +0 -71
  44. package/dist/commands/chat.d.ts.map +0 -1
  45. package/dist/commands/chat.js +0 -674
  46. package/dist/commands/chat.js.map +0 -1
  47. package/dist/commands/claude-init.d.ts +0 -28
  48. package/dist/commands/claude-init.d.ts.map +0 -1
  49. package/dist/commands/claude-init.js +0 -587
  50. package/dist/commands/claude-init.js.map +0 -1
  51. package/dist/commands/claude-setup.d.ts +0 -32
  52. package/dist/commands/claude-setup.d.ts.map +0 -1
  53. package/dist/commands/claude-setup.js +0 -570
  54. package/dist/commands/claude-setup.js.map +0 -1
  55. package/dist/commands/computer-setup-commands.d.ts +0 -39
  56. package/dist/commands/computer-setup-commands.d.ts.map +0 -1
  57. package/dist/commands/computer-setup-commands.js +0 -563
  58. package/dist/commands/computer-setup-commands.js.map +0 -1
  59. package/dist/commands/computer-setup.d.ts +0 -7
  60. package/dist/commands/computer-setup.d.ts.map +0 -1
  61. package/dist/commands/computer-setup.js +0 -481
  62. package/dist/commands/computer-setup.js.map +0 -1
  63. package/dist/commands/create-command.d.ts +0 -7
  64. package/dist/commands/create-command.d.ts.map +0 -1
  65. package/dist/commands/create-command.js +0 -158
  66. package/dist/commands/create-command.js.map +0 -1
  67. package/dist/commands/create.d.ts +0 -74
  68. package/dist/commands/create.d.ts.map +0 -1
  69. package/dist/commands/create.js +0 -556
  70. package/dist/commands/create.js.map +0 -1
  71. package/dist/commands/dashboard.d.ts +0 -91
  72. package/dist/commands/dashboard.d.ts.map +0 -1
  73. package/dist/commands/dashboard.js +0 -537
  74. package/dist/commands/dashboard.js.map +0 -1
  75. package/dist/commands/govern.d.ts +0 -70
  76. package/dist/commands/govern.d.ts.map +0 -1
  77. package/dist/commands/govern.js +0 -480
  78. package/dist/commands/govern.js.map +0 -1
  79. package/dist/commands/init.d.ts +0 -55
  80. package/dist/commands/init.d.ts.map +0 -1
  81. package/dist/commands/init.js +0 -584
  82. package/dist/commands/init.js.map +0 -1
  83. package/dist/commands/performance-optimizer.d.ts +0 -30
  84. package/dist/commands/performance-optimizer.d.ts.map +0 -1
  85. package/dist/commands/performance-optimizer.js +0 -649
  86. package/dist/commands/performance-optimizer.js.map +0 -1
  87. package/dist/commands/plugins.d.ts +0 -87
  88. package/dist/commands/plugins.d.ts.map +0 -1
  89. package/dist/commands/plugins.js +0 -685
  90. package/dist/commands/plugins.js.map +0 -1
  91. package/dist/commands/setup.d.ts +0 -29
  92. package/dist/commands/setup.d.ts.map +0 -1
  93. package/dist/commands/setup.js +0 -399
  94. package/dist/commands/setup.js.map +0 -1
  95. package/dist/commands/test-init.d.ts +0 -9
  96. package/dist/commands/test-init.d.ts.map +0 -1
  97. package/dist/commands/test-init.js +0 -222
  98. package/dist/commands/test-init.js.map +0 -1
  99. package/dist/commands/test.d.ts +0 -25
  100. package/dist/commands/test.d.ts.map +0 -1
  101. package/dist/commands/test.js +0 -217
  102. package/dist/commands/test.js.map +0 -1
  103. package/dist/commands/watch.d.ts +0 -76
  104. package/dist/commands/watch.d.ts.map +0 -1
  105. package/dist/commands/watch.js +0 -610
  106. package/dist/commands/watch.js.map +0 -1
  107. package/dist/context/context-manager.d.ts +0 -155
  108. package/dist/context/context-manager.d.ts.map +0 -1
  109. package/dist/context/context-manager.js +0 -383
  110. package/dist/context/context-manager.js.map +0 -1
  111. package/dist/context/index.d.ts +0 -3
  112. package/dist/context/index.d.ts.map +0 -1
  113. package/dist/context/index.js +0 -6
  114. package/dist/context/index.js.map +0 -1
  115. package/dist/context/session-manager.d.ts +0 -207
  116. package/dist/context/session-manager.d.ts.map +0 -1
  117. package/dist/context/session-manager.js +0 -682
  118. package/dist/context/session-manager.js.map +0 -1
  119. package/dist/index.d.ts +0 -8
  120. package/dist/index.d.ts.map +0 -1
  121. package/dist/index.js +0 -51
  122. package/dist/index.js.map +0 -1
  123. package/dist/interactive/interactive-mode.d.ts +0 -76
  124. package/dist/interactive/interactive-mode.d.ts.map +0 -1
  125. package/dist/interactive/interactive-mode.js +0 -730
  126. package/dist/interactive/interactive-mode.js.map +0 -1
  127. package/dist/nlp/command-mapper.d.ts +0 -174
  128. package/dist/nlp/command-mapper.d.ts.map +0 -1
  129. package/dist/nlp/command-mapper.js +0 -623
  130. package/dist/nlp/command-mapper.js.map +0 -1
  131. package/dist/nlp/command-parser.d.ts +0 -106
  132. package/dist/nlp/command-parser.d.ts.map +0 -1
  133. package/dist/nlp/command-parser.js +0 -416
  134. package/dist/nlp/command-parser.js.map +0 -1
  135. package/dist/nlp/index.d.ts +0 -5
  136. package/dist/nlp/index.d.ts.map +0 -1
  137. package/dist/nlp/index.js +0 -8
  138. package/dist/nlp/index.js.map +0 -1
  139. package/dist/nlp/intent-classifier.d.ts +0 -59
  140. package/dist/nlp/intent-classifier.d.ts.map +0 -1
  141. package/dist/nlp/intent-classifier.js +0 -384
  142. package/dist/nlp/intent-classifier.js.map +0 -1
  143. package/dist/nlp/intent-parser.d.ts +0 -152
  144. package/dist/nlp/intent-parser.d.ts.map +0 -1
  145. package/dist/nlp/intent-parser.js +0 -739
  146. package/dist/nlp/intent-parser.js.map +0 -1
  147. package/dist/plugins/plugin-manager.d.ts +0 -120
  148. package/dist/plugins/plugin-manager.d.ts.map +0 -1
  149. package/dist/plugins/plugin-manager.js +0 -595
  150. package/dist/plugins/plugin-manager.js.map +0 -1
  151. package/dist/types/index.d.ts +0 -224
  152. package/dist/types/index.d.ts.map +0 -1
  153. package/dist/types/index.js +0 -3
  154. package/dist/types/index.js.map +0 -1
  155. package/dist/utils/config-manager.d.ts +0 -73
  156. package/dist/utils/config-manager.d.ts.map +0 -1
  157. package/dist/utils/config-manager.js +0 -339
  158. package/dist/utils/config-manager.js.map +0 -1
  159. package/dist/utils/error-handler.d.ts +0 -46
  160. package/dist/utils/error-handler.d.ts.map +0 -1
  161. package/dist/utils/error-handler.js +0 -169
  162. package/dist/utils/error-handler.js.map +0 -1
  163. package/dist/utils/logger.d.ts +0 -25
  164. package/dist/utils/logger.d.ts.map +0 -1
  165. package/dist/utils/logger.js +0 -94
  166. package/dist/utils/logger.js.map +0 -1
@@ -1,730 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InteractiveMode = void 0;
4
- const tslib_1 = require("tslib");
5
- const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
6
- const blessed_1 = tslib_1.__importDefault(require("blessed"));
7
- const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
- const logger_1 = require("../utils/logger");
9
- const error_handler_1 = require("../utils/error-handler");
10
- /**
11
- * Interactive mode manager for wizard, TUI, and chat interfaces
12
- */
13
- class InteractiveMode {
14
- configManager;
15
- pluginManager;
16
- activeSessions = new Map();
17
- constructor(configManager, pluginManager) {
18
- this.configManager = configManager;
19
- this.pluginManager = pluginManager;
20
- }
21
- /**
22
- * Launch interactive wizard mode
23
- */
24
- async launchWizard(mode = 'setup') {
25
- try {
26
- logger_1.logger.info('Launching interactive wizard...');
27
- const session = {
28
- mode: 'wizard',
29
- config: { wizardMode: mode },
30
- state: {},
31
- active: true,
32
- };
33
- this.activeSessions.set(`wizard-${Date.now()}`, session);
34
- switch (mode) {
35
- case 'setup':
36
- await this.setupWizard();
37
- break;
38
- case 'analyze':
39
- await this.analyzeWizard();
40
- break;
41
- case 'create':
42
- await this.createWizard();
43
- break;
44
- case 'govern':
45
- await this.governWizard();
46
- break;
47
- default:
48
- await this.generalWizard();
49
- }
50
- }
51
- catch (error) {
52
- throw error_handler_1.errorHandler.createError('WUNDR_WIZARD_FAILED', 'Failed to launch wizard', { mode }, true);
53
- }
54
- }
55
- /**
56
- * Launch chat interface
57
- */
58
- async launchChat(options) {
59
- try {
60
- logger_1.logger.info('Launching chat interface...');
61
- // This would integrate with the chat commands
62
- const { spawn } = await Promise.resolve().then(() => tslib_1.__importStar(require('child_process')));
63
- const chatArgs = ['chat', 'start'];
64
- if (options.model)
65
- chatArgs.push('--model', options.model);
66
- if (options.context)
67
- chatArgs.push('--context', options.context);
68
- const child = spawn('wundr', chatArgs, {
69
- stdio: 'inherit',
70
- shell: true,
71
- });
72
- child.on('exit', code => {
73
- if (code !== 0) {
74
- logger_1.logger.error(`Chat interface exited with code ${code}`);
75
- }
76
- });
77
- }
78
- catch (error) {
79
- throw error_handler_1.errorHandler.createError('WUNDR_CHAT_LAUNCH_FAILED', 'Failed to launch chat interface', { options }, true);
80
- }
81
- }
82
- /**
83
- * Launch Terminal User Interface (TUI)
84
- */
85
- async launchTUI(layout = 'dashboard') {
86
- try {
87
- logger_1.logger.info(`Launching TUI with layout: ${layout}`);
88
- const screen = blessed_1.default.screen({
89
- smartCSR: true,
90
- title: 'Wundr CLI Dashboard',
91
- });
92
- await this.setupTUILayout(screen, layout);
93
- // Handle exit
94
- screen.key(['escape', 'q', 'C-c'], () => {
95
- return process.exit(0);
96
- });
97
- screen.render();
98
- }
99
- catch (error) {
100
- throw error_handler_1.errorHandler.createError('WUNDR_TUI_LAUNCH_FAILED', 'Failed to launch TUI', { layout }, true);
101
- }
102
- }
103
- /**
104
- * Setup wizard for initial configuration
105
- */
106
- async setupWizard() {
107
- console.log(chalk_1.default.cyan('\n🚀 Welcome to Wundr CLI Setup Wizard\n'));
108
- const answers = await inquirer_1.default.prompt([
109
- {
110
- type: 'confirm',
111
- name: 'initialize',
112
- message: 'Initialize Wundr in this directory?',
113
- default: true,
114
- },
115
- {
116
- type: 'list',
117
- name: 'projectType',
118
- message: 'What type of project is this?',
119
- choices: [
120
- { name: 'Single Package', value: 'single' },
121
- { name: 'Monorepo', value: 'monorepo' },
122
- { name: 'Workspace', value: 'workspace' },
123
- ],
124
- when: answers => answers.initialize,
125
- },
126
- {
127
- type: 'checkbox',
128
- name: 'features',
129
- message: 'Select features to enable:',
130
- choices: [
131
- { name: 'Code Analysis', value: 'analysis', checked: true },
132
- { name: 'Governance Rules', value: 'governance', checked: true },
133
- { name: 'AI Assistance', value: 'ai', checked: false },
134
- { name: 'Dashboard', value: 'dashboard', checked: true },
135
- { name: 'Watch Mode', value: 'watch', checked: false },
136
- ],
137
- when: answers => answers.initialize,
138
- },
139
- {
140
- type: 'input',
141
- name: 'aiProvider',
142
- message: 'AI Provider:',
143
- default: 'claude',
144
- when: answers => answers.features?.includes('ai'),
145
- },
146
- {
147
- type: 'password',
148
- name: 'aiApiKey',
149
- message: 'AI API Key (optional):',
150
- mask: '*',
151
- when: answers => answers.features?.includes('ai'),
152
- },
153
- ]);
154
- if (!answers.initialize) {
155
- console.log(chalk_1.default.yellow('Setup cancelled'));
156
- return;
157
- }
158
- // Execute setup commands based on answers
159
- console.log(chalk_1.default.green('\n✨ Setting up your project...\n'));
160
- const setupCommands = [
161
- `wundr init ${answers.projectType === 'single' ? 'project' : answers.projectType}`,
162
- 'wundr init config',
163
- ];
164
- if (answers.features?.includes('governance')) {
165
- setupCommands.push('wundr govern rules add no-console');
166
- }
167
- if (answers.features?.includes('dashboard')) {
168
- setupCommands.push('wundr dashboard config set theme default');
169
- }
170
- for (const command of setupCommands) {
171
- console.log(chalk_1.default.blue(`Running: ${command}`));
172
- // Execute command (simplified for demo)
173
- await this.simulateCommand(command);
174
- }
175
- console.log(chalk_1.default.green('\n🎉 Setup complete! Your Wundr project is ready.'));
176
- console.log(chalk_1.default.gray('\nNext steps:'));
177
- console.log(chalk_1.default.gray(' • Run "wundr analyze" to analyze your code'));
178
- console.log(chalk_1.default.gray(' • Run "wundr dashboard start" to launch the dashboard'));
179
- console.log(chalk_1.default.gray(' • Run "wundr --help" to see all available commands'));
180
- }
181
- /**
182
- * Analysis wizard
183
- */
184
- async analyzeWizard() {
185
- console.log(chalk_1.default.cyan('\n🔍 Code Analysis Wizard\n'));
186
- const answers = await inquirer_1.default.prompt([
187
- {
188
- type: 'checkbox',
189
- name: 'analysisTypes',
190
- message: 'What would you like to analyze?',
191
- choices: [
192
- { name: 'Dependencies', value: 'deps', checked: true },
193
- { name: 'Code Quality', value: 'quality', checked: true },
194
- { name: 'Performance', value: 'perf', checked: false },
195
- { name: 'Architecture', value: 'arch', checked: false },
196
- { name: 'Security', value: 'security', checked: true },
197
- ],
198
- },
199
- {
200
- type: 'list',
201
- name: 'outputFormat',
202
- message: 'Output format:',
203
- choices: [
204
- { name: 'Table (Console)', value: 'table' },
205
- { name: 'JSON File', value: 'json' },
206
- { name: 'HTML Report', value: 'html' },
207
- ],
208
- default: 'table',
209
- },
210
- {
211
- type: 'confirm',
212
- name: 'autoFix',
213
- message: 'Automatically fix issues where possible?',
214
- default: false,
215
- },
216
- ]);
217
- console.log(chalk_1.default.green('\n🔬 Running analysis...\n'));
218
- for (const analysisType of answers.analysisTypes) {
219
- let command = `wundr analyze ${analysisType}`;
220
- if (answers.outputFormat !== 'table') {
221
- command += ` --format ${answers.outputFormat}`;
222
- }
223
- if (answers.autoFix) {
224
- command += ' --fix';
225
- }
226
- console.log(chalk_1.default.blue(`Running: ${command}`));
227
- await this.simulateCommand(command);
228
- }
229
- console.log(chalk_1.default.green('\n✅ Analysis complete!'));
230
- }
231
- /**
232
- * Creation wizard
233
- */
234
- async createWizard() {
235
- console.log(chalk_1.default.cyan('\n🛠️ Code Generation Wizard\n'));
236
- const answers = await inquirer_1.default.prompt([
237
- {
238
- type: 'list',
239
- name: 'createType',
240
- message: 'What would you like to create?',
241
- choices: [
242
- { name: 'Component', value: 'component' },
243
- { name: 'Service', value: 'service' },
244
- { name: 'Package (Monorepo)', value: 'package' },
245
- { name: 'Template', value: 'template' },
246
- { name: 'Workflow', value: 'workflow' },
247
- { name: 'Configuration', value: 'config' },
248
- ],
249
- },
250
- {
251
- type: 'input',
252
- name: 'name',
253
- message: 'Name:',
254
- validate: input => input.length > 0 || 'Name is required',
255
- },
256
- ]);
257
- // Get specific options based on type
258
- let specificAnswers = {};
259
- switch (answers.createType) {
260
- case 'component':
261
- specificAnswers = await this.getComponentOptions();
262
- break;
263
- case 'service':
264
- specificAnswers = await this.getServiceOptions();
265
- break;
266
- case 'package':
267
- specificAnswers = await this.getPackageOptions();
268
- break;
269
- default:
270
- specificAnswers = {};
271
- }
272
- console.log(chalk_1.default.green(`\n🏗️ Creating ${answers.createType}: ${answers.name}\n`));
273
- let command = `wundr create ${answers.createType} ${answers.name}`;
274
- // Add specific options to command
275
- Object.entries(specificAnswers).forEach(([key, value]) => {
276
- if (typeof value === 'boolean' && value) {
277
- command += ` --${key}`;
278
- }
279
- else if (typeof value === 'string' && value) {
280
- command += ` --${key} ${value}`;
281
- }
282
- });
283
- console.log(chalk_1.default.blue(`Running: ${command}`));
284
- await this.simulateCommand(command);
285
- console.log(chalk_1.default.green(`\n🎉 ${answers.createType} created successfully!`));
286
- }
287
- /**
288
- * Governance wizard
289
- */
290
- async governWizard() {
291
- console.log(chalk_1.default.cyan('\n⚖️ Governance Setup Wizard\n'));
292
- const answers = await inquirer_1.default.prompt([
293
- {
294
- type: 'checkbox',
295
- name: 'ruleCategories',
296
- message: 'Select rule categories to enable:',
297
- choices: [
298
- { name: 'Code Quality', value: 'quality', checked: true },
299
- { name: 'Security', value: 'security', checked: true },
300
- { name: 'Performance', value: 'performance', checked: false },
301
- { name: 'Testing', value: 'testing', checked: true },
302
- { name: 'Documentation', value: 'docs', checked: false },
303
- ],
304
- },
305
- {
306
- type: 'list',
307
- name: 'severity',
308
- message: 'Default severity level:',
309
- choices: [
310
- { name: 'Error (Strict)', value: 'error' },
311
- { name: 'Warning (Balanced)', value: 'warning' },
312
- { name: 'Info (Lenient)', value: 'info' },
313
- ],
314
- default: 'warning',
315
- },
316
- {
317
- type: 'confirm',
318
- name: 'createQualityGate',
319
- message: 'Create a quality gate?',
320
- default: true,
321
- },
322
- ]);
323
- console.log(chalk_1.default.green('\n⚙️ Setting up governance rules...\n'));
324
- // Add rules based on categories
325
- for (const category of answers.ruleCategories) {
326
- const rules = this.getRulesForCategory(category);
327
- for (const rule of rules) {
328
- const command = `wundr govern rules add ${rule}`;
329
- console.log(chalk_1.default.blue(`Running: ${command}`));
330
- await this.simulateCommand(command);
331
- }
332
- }
333
- // Set severity
334
- const severityCommand = `wundr govern config set severity ${answers.severity}`;
335
- console.log(chalk_1.default.blue(`Running: ${severityCommand}`));
336
- await this.simulateCommand(severityCommand);
337
- // Create quality gate
338
- if (answers.createQualityGate) {
339
- const gateCommand = 'wundr govern gate create default --conditions "coverage>80,complexity<10"';
340
- console.log(chalk_1.default.blue(`Running: ${gateCommand}`));
341
- await this.simulateCommand(gateCommand);
342
- }
343
- console.log(chalk_1.default.green('\n✅ Governance setup complete!'));
344
- console.log(chalk_1.default.gray('\nRun "wundr govern check" to validate your code against the rules.'));
345
- }
346
- /**
347
- * General purpose wizard
348
- */
349
- async generalWizard() {
350
- console.log(chalk_1.default.cyan('\n🧙 Wundr CLI Wizard\n'));
351
- const answers = await inquirer_1.default.prompt([
352
- {
353
- type: 'list',
354
- name: 'action',
355
- message: 'What would you like to do?',
356
- choices: [
357
- { name: 'Setup a new project', value: 'setup' },
358
- { name: 'Analyze existing code', value: 'analyze' },
359
- { name: 'Create new code', value: 'create' },
360
- { name: 'Setup governance', value: 'govern' },
361
- { name: 'Configure AI features', value: 'ai' },
362
- { name: 'Launch dashboard', value: 'dashboard' },
363
- ],
364
- },
365
- ]);
366
- switch (answers.action) {
367
- case 'setup':
368
- await this.setupWizard();
369
- break;
370
- case 'analyze':
371
- await this.analyzeWizard();
372
- break;
373
- case 'create':
374
- await this.createWizard();
375
- break;
376
- case 'govern':
377
- await this.governWizard();
378
- break;
379
- case 'ai':
380
- await this.aiConfigWizard();
381
- break;
382
- case 'dashboard':
383
- await this.launchDashboard();
384
- break;
385
- }
386
- }
387
- /**
388
- * AI configuration wizard
389
- */
390
- async aiConfigWizard() {
391
- console.log(chalk_1.default.cyan('\n🤖 AI Configuration Wizard\n'));
392
- const answers = await inquirer_1.default.prompt([
393
- {
394
- type: 'list',
395
- name: 'provider',
396
- message: 'AI Provider:',
397
- choices: [
398
- { name: 'Claude (Anthropic)', value: 'claude' },
399
- { name: 'ChatGPT (OpenAI)', value: 'openai' },
400
- { name: 'Local Model', value: 'local' },
401
- ],
402
- },
403
- {
404
- type: 'list',
405
- name: 'model',
406
- message: 'Model:',
407
- choices: answers => {
408
- switch (answers.provider) {
409
- case 'claude':
410
- return ['claude-3', 'claude-3-haiku', 'claude-3-sonnet'];
411
- case 'openai':
412
- return ['gpt-4', 'gpt-4-turbo', 'gpt-3.5-turbo'];
413
- case 'local':
414
- return ['llama2', 'codellama', 'custom'];
415
- default:
416
- return ['claude-3'];
417
- }
418
- },
419
- },
420
- {
421
- type: 'password',
422
- name: 'apiKey',
423
- message: 'API Key:',
424
- mask: '*',
425
- when: answers => answers.provider !== 'local',
426
- },
427
- {
428
- type: 'checkbox',
429
- name: 'features',
430
- message: 'Enable AI features:',
431
- choices: [
432
- { name: 'Code Generation', value: 'generate', checked: true },
433
- { name: 'Code Review', value: 'review', checked: true },
434
- { name: 'Refactoring', value: 'refactor', checked: false },
435
- { name: 'Documentation', value: 'docs', checked: true },
436
- { name: 'Test Generation', value: 'test', checked: false },
437
- ],
438
- },
439
- ]);
440
- console.log(chalk_1.default.green('\n🔧 Configuring AI features...\n'));
441
- // Set AI configuration
442
- const commands = [
443
- `wundr ai config set provider ${answers.provider}`,
444
- `wundr ai config set model ${answers.model}`,
445
- ];
446
- if (answers.apiKey) {
447
- commands.push(`wundr ai config set apiKey ${answers.apiKey}`);
448
- }
449
- for (const command of commands) {
450
- console.log(chalk_1.default.blue(`Running: ${command}`));
451
- await this.simulateCommand(command);
452
- }
453
- console.log(chalk_1.default.green('\n✅ AI configuration complete!'));
454
- console.log(chalk_1.default.gray('\nTry "wundr ai ask" to start chatting with AI.'));
455
- }
456
- /**
457
- * Launch dashboard shortcut
458
- */
459
- async launchDashboard() {
460
- console.log(chalk_1.default.green('\n📊 Launching Wundr Dashboard...\n'));
461
- const command = 'wundr dashboard start --open';
462
- console.log(chalk_1.default.blue(`Running: ${command}`));
463
- await this.simulateCommand(command);
464
- }
465
- /**
466
- * Setup TUI layout
467
- */
468
- async setupTUILayout(screen, layoutType) {
469
- switch (layoutType) {
470
- case 'dashboard':
471
- await this.setupDashboardLayout(screen);
472
- break;
473
- case 'monitor':
474
- await this.setupMonitorLayout(screen);
475
- break;
476
- case 'debug':
477
- await this.setupDebugLayout(screen);
478
- break;
479
- default:
480
- await this.setupDashboardLayout(screen);
481
- }
482
- }
483
- /**
484
- * Setup dashboard TUI layout
485
- */
486
- async setupDashboardLayout(screen) {
487
- // Header
488
- const header = blessed_1.default.box({
489
- top: 0,
490
- left: 0,
491
- width: '100%',
492
- height: 3,
493
- content: `{center}${chalk_1.default.cyan('🚀 Wundr CLI Dashboard')}{/center}`,
494
- tags: true,
495
- border: {
496
- type: 'line',
497
- },
498
- style: {
499
- fg: 'white',
500
- bg: 'blue',
501
- border: {
502
- fg: '#f0f0f0',
503
- },
504
- },
505
- });
506
- // Sidebar
507
- const sidebar = blessed_1.default.box({
508
- top: 3,
509
- left: 0,
510
- width: '25%',
511
- height: '100%-6',
512
- content: 'Navigation\n\n→ Overview\n Analysis\n Governance\n AI Tools\n Settings',
513
- border: {
514
- type: 'line',
515
- },
516
- style: {
517
- fg: 'white',
518
- border: {
519
- fg: '#f0f0f0',
520
- },
521
- },
522
- });
523
- // Main content
524
- const main = blessed_1.default.box({
525
- top: 3,
526
- left: '25%',
527
- width: '75%',
528
- height: '100%-6',
529
- content: 'Project Overview\n\n' +
530
- '📁 Files: 1,234\n' +
531
- '🔍 Issues: 5\n' +
532
- '✅ Tests: 98% coverage\n' +
533
- '📦 Dependencies: 45\n' +
534
- '🚀 Performance: Good',
535
- border: {
536
- type: 'line',
537
- },
538
- style: {
539
- fg: 'white',
540
- border: {
541
- fg: '#f0f0f0',
542
- },
543
- },
544
- });
545
- // Footer
546
- const footer = blessed_1.default.box({
547
- bottom: 0,
548
- left: 0,
549
- width: '100%',
550
- height: 3,
551
- content: '{center}Press q or Esc to exit{/center}',
552
- tags: true,
553
- border: {
554
- type: 'line',
555
- },
556
- style: {
557
- fg: 'white',
558
- bg: 'black',
559
- border: {
560
- fg: '#f0f0f0',
561
- },
562
- },
563
- });
564
- screen.append(header);
565
- screen.append(sidebar);
566
- screen.append(main);
567
- screen.append(footer);
568
- // Focus handling
569
- main.focus();
570
- }
571
- /**
572
- * Setup monitor TUI layout
573
- */
574
- async setupMonitorLayout(screen) {
575
- // Real-time monitoring layout with logs and metrics
576
- const log = blessed_1.default.log({
577
- top: 0,
578
- left: 0,
579
- width: '100%',
580
- height: '100%',
581
- border: {
582
- type: 'line',
583
- },
584
- style: {
585
- fg: 'white',
586
- border: {
587
- fg: '#f0f0f0',
588
- },
589
- },
590
- scrollable: true,
591
- alwaysScroll: true,
592
- });
593
- screen.append(log);
594
- // Simulate log entries
595
- setInterval(() => {
596
- log.log(`[${new Date().toLocaleTimeString()}] Monitoring active...`);
597
- }, 2000);
598
- log.focus();
599
- }
600
- /**
601
- * Setup debug TUI layout
602
- */
603
- async setupDebugLayout(screen) {
604
- // Debug information layout
605
- const debugInfo = blessed_1.default.box({
606
- top: 0,
607
- left: 0,
608
- width: '100%',
609
- height: '100%',
610
- content: 'Debug Information\n\n' +
611
- 'CLI Version: 1.0.0\n' +
612
- 'Node Version: ' +
613
- process.version +
614
- '\n' +
615
- 'Platform: ' +
616
- process.platform +
617
- '\n' +
618
- 'Working Directory: ' +
619
- process.cwd() +
620
- '\n' +
621
- 'Arguments: ' +
622
- process.argv.join(' '),
623
- border: {
624
- type: 'line',
625
- },
626
- style: {
627
- fg: 'white',
628
- border: {
629
- fg: '#f0f0f0',
630
- },
631
- },
632
- });
633
- screen.append(debugInfo);
634
- debugInfo.focus();
635
- }
636
- /**
637
- * Helper methods for wizard options
638
- */
639
- async getComponentOptions() {
640
- return await inquirer_1.default.prompt([
641
- {
642
- type: 'list',
643
- name: 'type',
644
- message: 'Component type:',
645
- choices: ['react', 'vue', 'angular'],
646
- default: 'react',
647
- },
648
- {
649
- type: 'confirm',
650
- name: 'withTests',
651
- message: 'Generate test files?',
652
- default: true,
653
- },
654
- {
655
- type: 'confirm',
656
- name: 'withStories',
657
- message: 'Generate Storybook stories?',
658
- default: false,
659
- },
660
- ]);
661
- }
662
- async getServiceOptions() {
663
- return await inquirer_1.default.prompt([
664
- {
665
- type: 'list',
666
- name: 'type',
667
- message: 'Service type:',
668
- choices: ['api', 'worker', 'microservice'],
669
- default: 'api',
670
- },
671
- {
672
- type: 'list',
673
- name: 'framework',
674
- message: 'Framework:',
675
- choices: ['express', 'fastify', 'nest'],
676
- default: 'express',
677
- },
678
- {
679
- type: 'confirm',
680
- name: 'withTests',
681
- message: 'Generate test files?',
682
- default: true,
683
- },
684
- {
685
- type: 'confirm',
686
- name: 'withDocs',
687
- message: 'Generate API documentation?',
688
- default: true,
689
- },
690
- ]);
691
- }
692
- async getPackageOptions() {
693
- return await inquirer_1.default.prompt([
694
- {
695
- type: 'list',
696
- name: 'type',
697
- message: 'Package type:',
698
- choices: ['library', 'app', 'tool'],
699
- default: 'library',
700
- },
701
- {
702
- type: 'confirm',
703
- name: 'public',
704
- message: 'Make package public?',
705
- default: false,
706
- },
707
- ]);
708
- }
709
- getRulesForCategory(category) {
710
- const rulesByCategory = {
711
- quality: ['no-console', 'no-debugger', 'prefer-const'],
712
- security: ['no-eval', 'no-unsafe-inline'],
713
- performance: ['no-inefficient-loops', 'prefer-map-over-loop'],
714
- testing: ['require-tests', 'no-skip-tests'],
715
- docs: ['require-jsdoc', 'require-readme'],
716
- };
717
- return rulesByCategory[category] || [];
718
- }
719
- async simulateCommand(command) {
720
- // Simulate command execution with a delay
721
- return new Promise(resolve => {
722
- setTimeout(() => {
723
- console.log(chalk_1.default.green(` ✓ ${command}`));
724
- resolve();
725
- }, 500);
726
- });
727
- }
728
- }
729
- exports.InteractiveMode = InteractiveMode;
730
- //# sourceMappingURL=interactive-mode.js.map