@wundr.io/cli 1.0.12 → 1.0.13

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