vibecodingmachine-cli 2026.3.14-1537 โ†’ 2026.6.17-1835

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 (162) hide show
  1. package/bin/auth/auth-compliance.js +7 -7
  2. package/bin/commands/agent-commands.js +15 -15
  3. package/bin/commands/auto-commands.js +3 -3
  4. package/bin/commands/command-aliases.js +13 -4
  5. package/bin/config/cli-config.js +15 -5
  6. package/bin/update/update-checker.js +5 -5
  7. package/bin/vibecodingmachine.js +2 -2
  8. package/package.json +2 -2
  9. package/src/commands/agents/add.js +5 -5
  10. package/src/commands/agents/check.js +19 -19
  11. package/src/commands/agents/list.js +24 -24
  12. package/src/commands/agents/remove.js +4 -4
  13. package/src/commands/agents-check.js +1 -1
  14. package/src/commands/analyze-file-sizes.js +43 -43
  15. package/src/commands/auto-direct/auto-provider-manager.js +19 -19
  16. package/src/commands/auto-direct/auto-start-phases.js +493 -0
  17. package/src/commands/auto-direct/auto-status-display.js +35 -35
  18. package/src/commands/auto-direct/auto-utils.js +50 -50
  19. package/src/commands/auto-direct/cline-installer.js +56 -0
  20. package/src/commands/auto-direct/code-processor.js +27 -27
  21. package/src/commands/auto-direct/file-scanner.js +19 -19
  22. package/src/commands/auto-direct/ide-completion-waiter.js +485 -0
  23. package/src/commands/auto-direct/ide-fallback-runner.js +226 -0
  24. package/src/commands/auto-direct/ide-provider-runner.js +103 -0
  25. package/src/commands/auto-direct/iteration-handlers.js +189 -0
  26. package/src/commands/auto-direct/iteration-runner.js +485 -0
  27. package/src/commands/auto-direct/provider-config.js +38 -7
  28. package/src/commands/auto-direct/provider-manager.js +132 -6
  29. package/src/commands/auto-direct/requirement-manager.js +169 -104
  30. package/src/commands/auto-direct/requirement-mover.js +350 -0
  31. package/src/commands/auto-direct/spec-handlers.js +155 -0
  32. package/src/commands/auto-direct/spec-ide-runner.js +318 -0
  33. package/src/commands/auto-direct/spec-processing.js +203 -0
  34. package/src/commands/auto-direct/status-display.js +9 -9
  35. package/src/commands/auto-direct/utils.js +83 -1
  36. package/src/commands/auto-direct-refactored.js +1 -413
  37. package/src/commands/auto-direct.js +127 -4119
  38. package/src/commands/auto-execution.js +21 -21
  39. package/src/commands/auto-status-helpers.js +0 -2
  40. package/src/commands/auto.js +22 -22
  41. package/src/commands/check-compliance.js +65 -65
  42. package/src/commands/computers.js +39 -39
  43. package/src/commands/continuous-scan.js +19 -19
  44. package/src/commands/ide.js +4 -4
  45. package/src/commands/locale.js +7 -7
  46. package/src/commands/refactor-file.js +59 -59
  47. package/src/commands/requirements/commands.js +17 -17
  48. package/src/commands/requirements/default-handlers.js +30 -30
  49. package/src/commands/requirements/disable.js +3 -3
  50. package/src/commands/requirements/enable.js +3 -3
  51. package/src/commands/requirements/utils.js +6 -6
  52. package/src/commands/requirements-refactored.js +3 -3
  53. package/src/commands/requirements-remote.js +38 -38
  54. package/src/commands/requirements.js +3 -3
  55. package/src/commands/settings.js +111 -0
  56. package/src/commands/specs/count.js +60 -0
  57. package/src/commands/specs/disable.js +3 -3
  58. package/src/commands/specs/enable.js +3 -3
  59. package/src/commands/status.js +10 -10
  60. package/src/commands/sync.js +25 -25
  61. package/src/commands/timeout.js +35 -35
  62. package/src/trui/TruiInterface.js +2 -2
  63. package/src/trui/agents/AgentInterface.js +4 -4
  64. package/src/trui/agents/handlers/CommandHandler.js +4 -4
  65. package/src/trui/agents/handlers/ContextManager.js +1 -1
  66. package/src/trui/agents/handlers/DisplayHandler.js +11 -11
  67. package/src/trui/agents/handlers/HelpHandler.js +1 -1
  68. package/src/utils/agent-selector.js +6 -6
  69. package/src/utils/antigravity-installer.js +4 -4
  70. package/src/utils/asset-cleanup.js +1 -1
  71. package/src/utils/auth.js +9 -12
  72. package/src/utils/clarification-actions.js +4 -4
  73. package/src/utils/cline-js-handler.js +5 -5
  74. package/src/utils/compliance-check.js +6 -6
  75. package/src/utils/config.js +12 -12
  76. package/src/utils/display-formatters-complete.js +2 -2
  77. package/src/utils/display-formatters-extracted.js +2 -2
  78. package/src/utils/display-formatters.js +2 -2
  79. package/src/utils/feedback-handler.js +2 -2
  80. package/src/utils/first-run.js +7 -7
  81. package/src/utils/ide-detection.js +1 -1
  82. package/src/utils/ide-handlers.js +6 -6
  83. package/src/utils/interactive/clarification-actions.js +3 -3
  84. package/src/utils/interactive/core-ui.js +7 -7
  85. package/src/utils/interactive/file-backup.js +6 -6
  86. package/src/utils/interactive/file-import-export.js +49 -49
  87. package/src/utils/interactive/file-operations.js +3 -3
  88. package/src/utils/interactive/file-validation.js +41 -41
  89. package/src/utils/interactive/interactive-prompts.js +41 -41
  90. package/src/utils/interactive/requirement-actions.js +5 -5
  91. package/src/utils/interactive/requirement-crud.js +4 -4
  92. package/src/utils/interactive/requirements-navigation.js +10 -10
  93. package/src/utils/interactive-broken.js +6 -6
  94. package/src/utils/interactive.js +37 -37
  95. package/src/utils/keyboard-handler.js +4 -4
  96. package/src/utils/prompt-helper.js +6 -6
  97. package/src/utils/provider-checker/agent-checker.js +1 -1
  98. package/src/utils/provider-checker/agent-runner.js +203 -314
  99. package/src/utils/provider-checker/agents-file-lock.js +134 -0
  100. package/src/utils/provider-checker/agents-manager.js +224 -36
  101. package/src/utils/provider-checker/cli-installer.js +28 -28
  102. package/src/utils/provider-checker/cli-utils.js +2 -2
  103. package/src/utils/provider-checker/cursor-approval-clicker.js +108 -0
  104. package/src/utils/provider-checker/format-utils.js +4 -4
  105. package/src/utils/provider-checker/ide-installer-helper.js +96 -0
  106. package/src/utils/provider-checker/ide-manager.js +19 -8
  107. package/src/utils/provider-checker/ide-quota-checker.js +120 -0
  108. package/src/utils/provider-checker/ide-utils.js +2 -2
  109. package/src/utils/provider-checker/node-detector.js +4 -4
  110. package/src/utils/provider-checker/node-utils.js +5 -5
  111. package/src/utils/provider-checker/opencode-checker.js +107 -73
  112. package/src/utils/provider-checker/process-utils.js +1 -1
  113. package/src/utils/provider-checker/provider-validator.js +11 -11
  114. package/src/utils/provider-checker/quota-checker.js +5 -5
  115. package/src/utils/provider-checker/quota-detector.js +5 -5
  116. package/src/utils/provider-checker/requirements-manager.js +6 -6
  117. package/src/utils/provider-checker/test-requirements.js +1 -1
  118. package/src/utils/provider-checker/vscode-approval-clicker.js +328 -0
  119. package/src/utils/provider-checker-new.js +6 -6
  120. package/src/utils/provider-checker.js +6 -6
  121. package/src/utils/provider-checkers/ide-manager.js +13 -13
  122. package/src/utils/provider-checkers/node-executable-finder.js +4 -4
  123. package/src/utils/provider-checkers/provider-checker-core.js +5 -5
  124. package/src/utils/provider-checkers/provider-checker-main.js +17 -17
  125. package/src/utils/provider-registry.js +5 -6
  126. package/src/utils/provider-utils.js +12 -12
  127. package/src/utils/quota-detectors.js +32 -32
  128. package/src/utils/requirement-action-handlers.js +12 -12
  129. package/src/utils/requirement-actions/requirement-operations.js +3 -3
  130. package/src/utils/requirement-actions.js +1 -1
  131. package/src/utils/requirement-file-operations.js +5 -5
  132. package/src/utils/requirement-helpers.js +1 -1
  133. package/src/utils/requirement-management.js +5 -5
  134. package/src/utils/requirement-navigation.js +2 -2
  135. package/src/utils/requirement-organization.js +3 -3
  136. package/src/utils/rui-trui-adapter.js +14 -14
  137. package/src/utils/simple-trui.js +3 -3
  138. package/src/utils/status-helpers-extracted.js +3 -3
  139. package/src/utils/trui-clarifications.js +11 -11
  140. package/src/utils/trui-debug.js +3 -2
  141. package/src/utils/trui-devin.js +217 -0
  142. package/src/utils/trui-feedback.js +7 -7
  143. package/src/utils/trui-kiro-integration.js +34 -34
  144. package/src/utils/trui-main-handlers.js +20 -21
  145. package/src/utils/trui-main-menu.js +19 -19
  146. package/src/utils/trui-nav-agents.js +59 -8
  147. package/src/utils/trui-nav-requirements.js +3 -3
  148. package/src/utils/trui-nav-settings.js +10 -10
  149. package/src/utils/trui-nav-specifications.js +1 -1
  150. package/src/utils/trui-navigation-backup.js +11 -11
  151. package/src/utils/trui-navigation.js +9 -9
  152. package/src/utils/trui-provider-health.js +25 -25
  153. package/src/utils/trui-provider-manager.js +28 -28
  154. package/src/utils/trui-quick-menu.js +2 -2
  155. package/src/utils/trui-req-actions-backup.js +21 -21
  156. package/src/utils/trui-req-actions.js +20 -20
  157. package/src/utils/trui-req-editor.js +10 -10
  158. package/src/utils/trui-req-file-ops.js +3 -3
  159. package/src/utils/trui-req-tree.js +7 -7
  160. package/src/utils/trui-windsurf.js +103 -103
  161. package/src/utils/user-tracking.js +15 -15
  162. package/src/utils/trui-req-tree-old.js +0 -719
@@ -8,34 +8,34 @@ const { t } = require('vibecodingmachine-core');
8
8
  */
9
9
  async function listComputers(options = {}) {
10
10
  const syncEngine = new SyncEngine();
11
-
11
+
12
12
  try {
13
13
  await syncEngine.initialize();
14
-
14
+
15
15
  // Fetch all computers from DynamoDB
16
16
  const computers = await fetchAllComputers(syncEngine);
17
-
17
+
18
18
  if (computers.length === 0) {
19
19
  console.log(chalk.yellow(`\n${t('computers.no.computers')}\n`));
20
20
  console.log(chalk.gray(`${t('computers.will.appear')}\n`));
21
21
  return;
22
22
  }
23
-
23
+
24
24
  // Filter by focus area if specified
25
25
  let filteredComputers = computers;
26
26
  if (options.focus) {
27
- filteredComputers = computers.filter(c =>
27
+ filteredComputers = computers.filter(c =>
28
28
  c.focusArea && c.focusArea.toLowerCase().includes(options.focus.toLowerCase())
29
29
  );
30
30
  }
31
-
31
+
32
32
  // Filter by status if specified
33
33
  if (options.status) {
34
- filteredComputers = filteredComputers.filter(c =>
34
+ filteredComputers = filteredComputers.filter(c =>
35
35
  c.status && c.status.toLowerCase() === options.status.toLowerCase()
36
36
  );
37
37
  }
38
-
38
+
39
39
  // Create table
40
40
  const table = new Table({
41
41
  head: [
@@ -48,7 +48,7 @@ async function listComputers(options = {}) {
48
48
  ],
49
49
  colWidths: [25, 30, 12, 35, 10, 15]
50
50
  });
51
-
51
+
52
52
  // Add rows
53
53
  for (const computer of filteredComputers) {
54
54
  const statusIcon = getStatusIcon(computer.status);
@@ -58,7 +58,7 @@ async function listComputers(options = {}) {
58
58
  const lastSync = computer.lastSyncTime
59
59
  ? formatTimeSince(computer.lastSyncTime)
60
60
  : t('computers.never');
61
-
61
+
62
62
  table.push([
63
63
  computer.hostname || computer.computerId,
64
64
  computer.focusArea || '-',
@@ -68,9 +68,9 @@ async function listComputers(options = {}) {
68
68
  lastSync
69
69
  ]);
70
70
  }
71
-
71
+
72
72
  console.log('\n' + table.toString() + '\n');
73
-
73
+
74
74
  // Show summary
75
75
  const activeCount = computers.filter(c => c.status === 'active').length;
76
76
  const idleCount = computers.filter(c => c.status === 'idle').length;
@@ -83,7 +83,7 @@ async function listComputers(options = {}) {
83
83
  console.log(chalk.red(` ${t('computers.error', { count: errorCount })}`));
84
84
  }
85
85
  console.log('');
86
-
86
+
87
87
  } catch (error) {
88
88
  console.error(chalk.red(`\nโœ— ${t('computers.fetch.failed')}`), error.message);
89
89
  await errorReporter.reportError(error, {
@@ -102,17 +102,17 @@ async function listComputers(options = {}) {
102
102
  */
103
103
  async function showComputerStatus(computerId) {
104
104
  const syncEngine = new SyncEngine();
105
-
105
+
106
106
  try {
107
107
  await syncEngine.initialize();
108
-
108
+
109
109
  const computer = await fetchComputer(syncEngine, computerId);
110
-
110
+
111
111
  if (!computer) {
112
112
  console.log(chalk.red(`\nโœ— ${t('computers.not.found', { id: computerId })}\n`));
113
113
  return;
114
114
  }
115
-
115
+
116
116
  // Display computer details
117
117
  console.log('\n' + chalk.bold.cyan(t('computers.details.title')));
118
118
  console.log(chalk.gray('โ”€'.repeat(60)));
@@ -124,7 +124,7 @@ async function showComputerStatus(computerId) {
124
124
  console.log(chalk.white(t('computers.details.status').padEnd(17)) + getStatusIcon(computer.status) + ' ' + t(statusKey));
125
125
  console.log(chalk.white(t('computers.details.last.sync').padEnd(17)) + (computer.lastSyncTime ? formatTimeSince(computer.lastSyncTime) : t('computers.never')));
126
126
  console.log('');
127
-
127
+
128
128
  // Current work
129
129
  console.log(chalk.bold.cyan(t('computers.work.title')));
130
130
  console.log(chalk.gray('โ”€'.repeat(60)));
@@ -133,7 +133,7 @@ async function showComputerStatus(computerId) {
133
133
  console.log(chalk.white(t('computers.work.time.active').padEnd(17)) + (computer.timeActive || '-'));
134
134
  console.log(chalk.white(t('computers.work.ide').padEnd(17)) + (computer.ide || '-'));
135
135
  console.log('');
136
-
136
+
137
137
  // Statistics
138
138
  if (computer.stats) {
139
139
  console.log(chalk.bold.cyan(t('computers.stats.title')));
@@ -145,7 +145,7 @@ async function showComputerStatus(computerId) {
145
145
  console.log(chalk.white(t('computers.stats.completion.rate').padEnd(21)) + (computer.stats.completionRate || '0%'));
146
146
  console.log('');
147
147
  }
148
-
148
+
149
149
  } catch (error) {
150
150
  console.error(chalk.red(`\nโœ— ${t('computers.status.fetch.failed')}`), error.message);
151
151
  throw error;
@@ -159,10 +159,10 @@ async function showComputerStatus(computerId) {
159
159
  */
160
160
  async function registerComputer(focusArea) {
161
161
  const syncEngine = new SyncEngine();
162
-
162
+
163
163
  try {
164
164
  await syncEngine.initialize();
165
-
165
+
166
166
  const os = require('os');
167
167
  const computerData = {
168
168
  computerId: syncEngine.computerId,
@@ -173,7 +173,7 @@ async function registerComputer(focusArea) {
173
173
  lastSyncTime: Date.now(),
174
174
  status: 'idle'
175
175
  };
176
-
176
+
177
177
  await saveComputer(syncEngine, computerData);
178
178
 
179
179
  console.log(chalk.green(`\nโœ“ ${t('computers.register.success')}\n`));
@@ -181,7 +181,7 @@ async function registerComputer(focusArea) {
181
181
  console.log(chalk.white(t('computers.register.hostname').padEnd(14)) + computerData.hostname);
182
182
  console.log(chalk.white(t('computers.register.focus').padEnd(14)) + computerData.focusArea);
183
183
  console.log('');
184
-
184
+
185
185
  } catch (error) {
186
186
  console.error(chalk.red(`\nโœ— ${t('computers.register.failed')}`), error.message);
187
187
  await errorReporter.reportError(error, {
@@ -199,28 +199,28 @@ async function registerComputer(focusArea) {
199
199
  */
200
200
  async function updateFocus(newFocusArea) {
201
201
  const syncEngine = new SyncEngine();
202
-
202
+
203
203
  try {
204
204
  await syncEngine.initialize();
205
-
205
+
206
206
  const computer = await fetchComputer(syncEngine, syncEngine.computerId);
207
-
207
+
208
208
  if (!computer) {
209
209
  console.log(chalk.yellow(`\nโš  ${t('computers.not.registered')}\n`));
210
210
  await registerComputer(newFocusArea);
211
211
  return;
212
212
  }
213
-
213
+
214
214
  computer.focusArea = newFocusArea;
215
215
  computer.lastSyncTime = Date.now();
216
-
216
+
217
217
  await saveComputer(syncEngine, computer);
218
218
 
219
219
  console.log(chalk.green(`\nโœ“ ${t('computers.focus.updated')}\n`));
220
220
  console.log(chalk.white(t('computers.focus.computer').padEnd(14)) + computer.hostname);
221
221
  console.log(chalk.white(t('computers.focus.new').padEnd(14)) + newFocusArea);
222
222
  console.log('');
223
-
223
+
224
224
  } catch (error) {
225
225
  console.error(chalk.red(`\nโœ— ${t('computers.focus.update.failed')}`), error.message);
226
226
  throw error;
@@ -263,14 +263,14 @@ function truncate(str, maxLength) {
263
263
 
264
264
  async function fetchAllComputers(syncEngine) {
265
265
  const { ScanCommand } = require('@aws-sdk/lib-dynamodb');
266
-
266
+
267
267
  const tableName = 'vibecodingmachine-computers';
268
-
268
+
269
269
  try {
270
270
  const command = new ScanCommand({
271
271
  TableName: tableName
272
272
  });
273
-
273
+
274
274
  const response = await syncEngine.dynamoClient.send(command);
275
275
  return response.Items || [];
276
276
  } catch (error) {
@@ -281,15 +281,15 @@ async function fetchAllComputers(syncEngine) {
281
281
 
282
282
  async function fetchComputer(syncEngine, computerId) {
283
283
  const { GetCommand } = require('@aws-sdk/lib-dynamodb');
284
-
284
+
285
285
  const tableName = 'vibecodingmachine-computers';
286
-
286
+
287
287
  try {
288
288
  const command = new GetCommand({
289
289
  TableName: tableName,
290
290
  Key: { computerId }
291
291
  });
292
-
292
+
293
293
  const response = await syncEngine.dynamoClient.send(command);
294
294
  return response.Item;
295
295
  } catch (error) {
@@ -299,14 +299,14 @@ async function fetchComputer(syncEngine, computerId) {
299
299
 
300
300
  async function saveComputer(syncEngine, computerData) {
301
301
  const { PutCommand } = require('@aws-sdk/lib-dynamodb');
302
-
302
+
303
303
  const tableName = 'vibecodingmachine-computers';
304
-
304
+
305
305
  const command = new PutCommand({
306
306
  TableName: tableName,
307
307
  Item: computerData
308
308
  });
309
-
309
+
310
310
  await syncEngine.dynamoClient.send(command);
311
311
  }
312
312
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  /**
4
4
  * Continuous Scan CLI Command
5
- *
5
+ *
6
6
  * This command runs continuous compliance scanning to identify files
7
7
  * exceeding the 555-line limit and generates refactoring tasks.
8
8
  */
@@ -24,44 +24,44 @@ program
24
24
  .action(async (options) => {
25
25
  try {
26
26
  console.log(chalk.blue('๐Ÿ” Starting continuous compliance scan...'));
27
-
27
+
28
28
  // Initialize scanner
29
29
  const scanner = new ContinuousScanner({
30
30
  maxFileSize: parseInt(options.threshold),
31
31
  enableFileWatching: options.watch
32
32
  });
33
-
33
+
34
34
  // Set up event handlers
35
35
  scanner.events.on('scan_completed', (data) => {
36
36
  const violations = data.violations || [];
37
-
37
+
38
38
  if (violations.length === 0) {
39
39
  console.log(chalk.green('โœ… No file size violations found!'));
40
40
  return;
41
41
  }
42
-
42
+
43
43
  console.log(chalk.yellow(`โš ๏ธ Found ${violations.length} files exceeding ${options.threshold} lines:`));
44
-
44
+
45
45
  // Display violations
46
46
  violations.forEach((violation, index) => {
47
- const severity = violation.lineCount > 1000 ? chalk.red('CRITICAL') :
48
- violation.lineCount > 750 ? chalk.orange('HIGH') :
47
+ const severity = violation.lineCount > 1000 ? chalk.red('CRITICAL') :
48
+ violation.lineCount > 750 ? chalk.orange('HIGH') :
49
49
  chalk.yellow('MEDIUM');
50
-
50
+
51
51
  console.log(`${index + 1}. ${violation.filePath} - ${violation.lineCount} lines ${severity}`);
52
-
52
+
53
53
  if (options.verbose) {
54
54
  console.log(` File size: ${(violation.fileSize / 1024).toFixed(2)} KB`);
55
55
  }
56
56
  });
57
-
57
+
58
58
  // Generate tasks if requested
59
59
  if (options.tasks) {
60
60
  console.log(chalk.blue('\n๐Ÿ“‹ Generating refactoring tasks...'));
61
61
  // Task generation would be implemented here
62
62
  console.log(chalk.yellow('โš ๏ธ Task generation not yet implemented'));
63
63
  }
64
-
64
+
65
65
  // Generate report
66
66
  if (options.output) {
67
67
  const report = {
@@ -72,7 +72,7 @@ program
72
72
  require('fs').writeFileSync(options.output, JSON.stringify(report, null, 2));
73
73
  console.log(chalk.blue(`๐Ÿ“„ Report saved to: ${options.output}`));
74
74
  }
75
-
75
+
76
76
  // Summary statistics
77
77
  console.log(chalk.blue('\n๐Ÿ“Š Scan Summary:'));
78
78
  console.log(`Violations found: ${violations.length}`);
@@ -81,18 +81,18 @@ program
81
81
  console.log(`Compliance rate: ${((data.stats.filesScanned - violations.length) / data.stats.filesScanned * 100).toFixed(1)}%`);
82
82
  }
83
83
  });
84
-
84
+
85
85
  // Start scanning
86
86
  scanner.start();
87
-
87
+
88
88
  if (options.watch) {
89
89
  console.log(chalk.green('๐Ÿ‘€ Watching for file changes... Press Ctrl+C to stop'));
90
-
90
+
91
91
  // Set up additional event handlers for continuous monitoring
92
92
  scanner.events.on('violations_found', ({ count, violations }) => {
93
93
  console.log(chalk.yellow(`\n๐Ÿšจ Violations found: ${count}`));
94
94
  });
95
-
95
+
96
96
  // Handle graceful shutdown
97
97
  process.on('SIGINT', () => {
98
98
  console.log(chalk.yellow('\n๐Ÿ›‘ Stopping continuous scan...'));
@@ -100,7 +100,7 @@ program
100
100
  console.log(chalk.green('โœ… Continuous scan stopped'));
101
101
  process.exit(0);
102
102
  });
103
-
103
+
104
104
  // Keep process running
105
105
  // The scanner will continue running in the background
106
106
  } else {
@@ -109,7 +109,7 @@ program
109
109
  scanner.stop();
110
110
  }, 5000);
111
111
  }
112
-
112
+
113
113
  } catch (error) {
114
114
  console.error(chalk.red('โŒ Error during continuous scan:'), error.message);
115
115
  process.exit(1);
@@ -4,7 +4,7 @@ const ora = require('ora');
4
4
  const { AppleScriptManager, IDEHealthTracker } = require('vibecodingmachine-core');
5
5
  const { getRepoPath } = require('../utils/config');
6
6
 
7
- const IDES = ['cursor', 'vscode', 'windsurf', 'antigravity', 'cline', 'github-copilot', 'amazon-q', 'replit', 'kiro'];
7
+ const IDES = ['cursor', 'vscode', 'devin', 'antigravity', 'cline', 'github-copilot', 'amazon-q', 'replit', 'kiro'];
8
8
 
9
9
  async function list() {
10
10
  console.log(chalk.bold('\nAvailable IDEs'));
@@ -76,7 +76,7 @@ async function health(options = {}) {
76
76
  try {
77
77
  // Test basic connectivity by attempting to get IDE status
78
78
  const appleScriptManager = new AppleScriptManager();
79
-
79
+
80
80
  // For web-based IDEs, we'll simulate a basic check
81
81
  if (['replit', 'antigravity', 'kiro'].includes(ide)) {
82
82
  // Simulate health check for web-based IDEs
@@ -87,7 +87,7 @@ async function health(options = {}) {
87
87
  // For desktop IDEs, try to get basic status
88
88
  await appleScriptManager.getIDEStatus(ide);
89
89
  const responseTime = Date.now() - startTime;
90
-
90
+
91
91
  spinner.succeed(chalk.green(`${ide} - Connected (${responseTime}ms)`));
92
92
  results.push({ ide, status: 'success', responseTime });
93
93
  }
@@ -100,7 +100,7 @@ async function health(options = {}) {
100
100
 
101
101
  } catch (error) {
102
102
  const responseTime = Date.now() - startTime;
103
-
103
+
104
104
  // Check if it timed out (2 minute limit)
105
105
  if (responseTime >= 120000) {
106
106
  spinner.fail(chalk.red(`${ide} - Timeout (${Math.floor(responseTime / 1000)}s)`));
@@ -13,7 +13,7 @@ async function show() {
13
13
  console.log(chalk.gray('Current locale:'), chalk.cyan(current));
14
14
  console.log(chalk.gray('Detected locale:'), chalk.cyan(detected));
15
15
  console.log(chalk.gray('Available locales:'), chalk.cyan(available.join(', ')));
16
-
16
+
17
17
  // Test some translations
18
18
  console.log(chalk.bold('\n๐Ÿ“ Sample Translations:'));
19
19
  console.log(` ${t('auth.login')}`);
@@ -28,7 +28,7 @@ async function show() {
28
28
  */
29
29
  async function set(locale) {
30
30
  const available = getAvailableLocales();
31
-
31
+
32
32
  if (!available.includes(locale)) {
33
33
  console.log(chalk.red(`\nโœ— Unsupported locale: ${locale}`));
34
34
  console.log(chalk.gray('Available locales:'), chalk.cyan(available.join(', ')));
@@ -37,7 +37,7 @@ async function set(locale) {
37
37
 
38
38
  setLocale(locale);
39
39
  console.log(chalk.green(`\nโœ“ Locale set to: ${chalk.cyan(locale)}`));
40
-
40
+
41
41
  // Show sample translation
42
42
  console.log(chalk.gray('Sample:'), t('app.name'));
43
43
  console.log();
@@ -48,19 +48,19 @@ async function set(locale) {
48
48
  */
49
49
  async function test() {
50
50
  console.log(chalk.bold(`\n๐Ÿงช Testing Locale System`));
51
-
51
+
52
52
  const available = getAvailableLocales();
53
-
53
+
54
54
  for (const locale of available) {
55
55
  console.log(chalk.bold(`\n--- ${locale.toUpperCase()} ---`));
56
56
  setLocale(locale);
57
-
57
+
58
58
  console.log(`${t('app.name')}`);
59
59
  console.log(`${t('auth.login')}`);
60
60
  console.log(`${t('status.title')}`);
61
61
  console.log(`${t('setup.title')}`);
62
62
  }
63
-
63
+
64
64
  // Reset to detected locale
65
65
  setLocale(detectLocale());
66
66
  console.log();