vibecodingmachine-cli 2026.3.9-907 → 2026.3.10-1548
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.
- package/README.md +85 -85
- package/bin/commands/agent-commands.js +295 -28
- package/bin/vibecodingmachine.js +0 -0
- package/package.json +2 -2
- package/scripts/postinstall.js +161 -161
- package/src/commands/auth.js +100 -100
- package/src/commands/auto-execution.js +120 -32
- package/src/commands/auto-requirement-management.js +9 -9
- package/src/commands/auto-status-helpers.js +6 -12
- package/src/commands/computers.js +318 -318
- package/src/commands/feature.js +123 -123
- package/src/commands/locale.js +72 -72
- package/src/commands/repo.js +163 -163
- package/src/commands/setup.js +93 -93
- package/src/commands/sync.js +287 -287
- package/src/index.js +5 -5
- package/src/utils/agent-selector.js +50 -50
- package/src/utils/asset-cleanup.js +60 -60
- package/src/utils/auth.js +6 -0
- package/src/utils/auto-mode-ansi-ui.js +237 -237
- package/src/utils/auto-mode-simple-ui.js +141 -141
- package/src/utils/copy-with-progress.js +167 -167
- package/src/utils/download-with-progress.js +84 -84
- package/src/utils/keyboard-handler.js +153 -153
- package/src/utils/kiro-installer.js +178 -178
- package/src/utils/logger.js +4 -4
- package/src/utils/persistent-header.js +114 -114
- package/src/utils/prompt-helper.js +63 -63
- package/src/utils/provider-checker/agent-runner.js +110 -31
- package/src/utils/provider-checker/ide-manager.js +37 -8
- package/src/utils/provider-checker/provider-validator.js +50 -0
- package/src/utils/provider-checker/requirements-manager.js +21 -6
- package/src/utils/status-card.js +121 -121
- package/src/utils/stdout-interceptor.js +127 -127
- package/src/utils/trui-main-handlers.js +41 -8
- package/src/utils/trui-main-menu.js +10 -3
- package/src/utils/trui-nav-agents.js +23 -33
- package/src/utils/trui-navigation.js +2 -2
- package/src/utils/user-tracking.js +299 -299
package/README.md
CHANGED
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
# Vibe Coding Machine CLI
|
|
2
|
-
|
|
3
|
-
Vibe Coding Machine command-line interface for managing repositories, auto mode, requirements, IDE actions, and status.
|
|
4
|
-
|
|
5
|
-
## Install
|
|
6
|
-
|
|
7
|
-
From the monorepo root:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install
|
|
11
|
-
# optional: link locally for global access
|
|
12
|
-
npm run --workspaces --if-present build
|
|
13
|
-
npm link ./packages/cli
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
Then run `vibecodingmachine` or `vcm` (short version).
|
|
17
|
-
|
|
18
|
-
**Note**: The `vcm` shortcut will only be installed if you don't already have another `vcm` command on your system. If a conflict is detected, you can still use the full `vibecodingmachine` command.
|
|
19
|
-
|
|
20
|
-
## Usage
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
vibecodingmachine --help # or: vcm --help (if installed)
|
|
24
|
-
vibecodingmachine -v # or: vcm -v (if installed)
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
**Note**: You can use either `vibecodingmachine` or `vcm` - they're the same command!
|
|
28
|
-
|
|
29
|
-
### Repository
|
|
30
|
-
```bash
|
|
31
|
-
vcm repo:init # initialize .vibecodingmachine in CWD and set repo
|
|
32
|
-
vcm repo:set /path/to/repo # set active repository
|
|
33
|
-
vcm repo:get # print current repo path
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### Auto Mode
|
|
37
|
-
```bash
|
|
38
|
-
vcm auto:start --ide cursor --max-chats 10
|
|
39
|
-
vcm auto:status
|
|
40
|
-
vcm auto:config --max-chats 25 --never-stop
|
|
41
|
-
vcm auto:stop
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Requirements
|
|
45
|
-
```bash
|
|
46
|
-
vcm req:list
|
|
47
|
-
vcm req:add "Build initial CLI MVP"
|
|
48
|
-
vcm req:current
|
|
49
|
-
vcm req:next
|
|
50
|
-
vcm req:edit
|
|
51
|
-
vcm req:watch
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### IDE
|
|
55
|
-
```bash
|
|
56
|
-
vcm ide:list
|
|
57
|
-
vcm ide:open cursor # or vscode, windsurf
|
|
58
|
-
vcm ide:send "Summarize failures" -i cursor
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### Status
|
|
62
|
-
```bash
|
|
63
|
-
vcm status
|
|
64
|
-
vcm progress
|
|
65
|
-
vcm logs -n 100
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Interactive
|
|
69
|
-
```bash
|
|
70
|
-
vcm interactive
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Configuration
|
|
74
|
-
- Stored at `~/.config/vibecodingmachine/config.json` by default
|
|
75
|
-
- Override for testing with env var `VIBECODINGMACHINE_CONFIG_PATH=/tmp/your-test-config.json`
|
|
76
|
-
|
|
77
|
-
## Development
|
|
78
|
-
```bash
|
|
79
|
-
# format and lint
|
|
80
|
-
npm run -w @vibecodingmachine/cli format
|
|
81
|
-
npm run -w @vibecodingmachine/cli lint
|
|
82
|
-
|
|
83
|
-
# tests
|
|
84
|
-
npm run -w @vibecodingmachine/cli test
|
|
85
|
-
```
|
|
1
|
+
# Vibe Coding Machine CLI
|
|
2
|
+
|
|
3
|
+
Vibe Coding Machine command-line interface for managing repositories, auto mode, requirements, IDE actions, and status.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
From the monorepo root:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install
|
|
11
|
+
# optional: link locally for global access
|
|
12
|
+
npm run --workspaces --if-present build
|
|
13
|
+
npm link ./packages/cli
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Then run `vibecodingmachine` or `vcm` (short version).
|
|
17
|
+
|
|
18
|
+
**Note**: The `vcm` shortcut will only be installed if you don't already have another `vcm` command on your system. If a conflict is detected, you can still use the full `vibecodingmachine` command.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
vibecodingmachine --help # or: vcm --help (if installed)
|
|
24
|
+
vibecodingmachine -v # or: vcm -v (if installed)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Note**: You can use either `vibecodingmachine` or `vcm` - they're the same command!
|
|
28
|
+
|
|
29
|
+
### Repository
|
|
30
|
+
```bash
|
|
31
|
+
vcm repo:init # initialize .vibecodingmachine in CWD and set repo
|
|
32
|
+
vcm repo:set /path/to/repo # set active repository
|
|
33
|
+
vcm repo:get # print current repo path
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Auto Mode
|
|
37
|
+
```bash
|
|
38
|
+
vcm auto:start --ide cursor --max-chats 10
|
|
39
|
+
vcm auto:status
|
|
40
|
+
vcm auto:config --max-chats 25 --never-stop
|
|
41
|
+
vcm auto:stop
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Requirements
|
|
45
|
+
```bash
|
|
46
|
+
vcm req:list
|
|
47
|
+
vcm req:add "Build initial CLI MVP"
|
|
48
|
+
vcm req:current
|
|
49
|
+
vcm req:next
|
|
50
|
+
vcm req:edit
|
|
51
|
+
vcm req:watch
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### IDE
|
|
55
|
+
```bash
|
|
56
|
+
vcm ide:list
|
|
57
|
+
vcm ide:open cursor # or vscode, windsurf
|
|
58
|
+
vcm ide:send "Summarize failures" -i cursor
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Status
|
|
62
|
+
```bash
|
|
63
|
+
vcm status
|
|
64
|
+
vcm progress
|
|
65
|
+
vcm logs -n 100
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Interactive
|
|
69
|
+
```bash
|
|
70
|
+
vcm interactive
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Configuration
|
|
74
|
+
- Stored at `~/.config/vibecodingmachine/config.json` by default
|
|
75
|
+
- Override for testing with env var `VIBECODINGMACHINE_CONFIG_PATH=/tmp/your-test-config.json`
|
|
76
|
+
|
|
77
|
+
## Development
|
|
78
|
+
```bash
|
|
79
|
+
# format and lint
|
|
80
|
+
npm run -w @vibecodingmachine/cli format
|
|
81
|
+
npm run -w @vibecodingmachine/cli lint
|
|
82
|
+
|
|
83
|
+
# tests
|
|
84
|
+
npm run -w @vibecodingmachine/cli test
|
|
85
|
+
```
|
|
@@ -177,56 +177,323 @@ function setupAgentCommands() {
|
|
|
177
177
|
}
|
|
178
178
|
});
|
|
179
179
|
|
|
180
|
-
// Add agents
|
|
180
|
+
// Add agents list command (specific commands must come before general pattern)
|
|
181
181
|
program
|
|
182
|
-
.command('agents
|
|
183
|
-
.description('
|
|
184
|
-
.action(async (
|
|
182
|
+
.command('agents-list')
|
|
183
|
+
.description('List all agents')
|
|
184
|
+
.action(async () => {
|
|
185
185
|
try {
|
|
186
|
-
|
|
187
|
-
if (
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
186
|
+
const result = await agentCommands.executeCommand('LIST', 'agents');
|
|
187
|
+
if (result.success && result.agents) {
|
|
188
|
+
console.log(chalk.blue('=== AGENTS ==='));
|
|
189
|
+
result.agents.forEach(agent => {
|
|
190
|
+
const status = agent.enabled ? '✓' : '✗';
|
|
191
|
+
console.log(`${status} ${agent.id.padEnd(12)} ${agent.name}`);
|
|
192
|
+
});
|
|
191
193
|
} else {
|
|
192
|
-
console.error(chalk.red(
|
|
194
|
+
console.error(chalk.red('Failed to list agents'));
|
|
193
195
|
process.exit(1);
|
|
194
196
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
197
|
+
} catch (error) {
|
|
198
|
+
console.error('Error listing agents:', error.message);
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
// Add agents check command (specific commands must come before general pattern)
|
|
205
|
+
program
|
|
206
|
+
.command('agents-check [agent-id]')
|
|
207
|
+
.description('Check agent(s) status and run validation tests')
|
|
208
|
+
.option('--all', 'Check all enabled agents')
|
|
209
|
+
.action(async (agentId, options) => {
|
|
210
|
+
try {
|
|
211
|
+
const { checkAllProviders } = require('../../src/utils/provider-checker');
|
|
212
|
+
const { getEffectiveRepoPath, getAutoConfig } = require('../../src/utils/config');
|
|
213
|
+
|
|
214
|
+
const repoPath = await getEffectiveRepoPath();
|
|
215
|
+
const autoConfig = await getAutoConfig();
|
|
216
|
+
|
|
217
|
+
console.log(chalk.blue('🔍 Running agent checks...\n'));
|
|
218
|
+
|
|
219
|
+
// Determine which agents to check
|
|
220
|
+
let agentsToCheck = [];
|
|
221
|
+
if (options.all || !agentId) {
|
|
222
|
+
// Check all enabled agents
|
|
223
|
+
const definitions = getProviderDefinitions();
|
|
224
|
+
const prefs = await getProviderPreferences();
|
|
225
|
+
agentsToCheck = definitions
|
|
226
|
+
.filter(def => prefs.enabled[def.id] !== false)
|
|
227
|
+
.map(def => def.id);
|
|
228
|
+
|
|
229
|
+
if (agentsToCheck.length === 0) {
|
|
230
|
+
console.log(chalk.yellow('No enabled agents found. Enable agents first with: vcm enable agents <agent-id>'));
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
console.log(chalk.gray(`Checking ${agentsToCheck.length} enabled agent(s): ${agentsToCheck.join(', ')}\n`));
|
|
198
235
|
} else {
|
|
199
|
-
|
|
236
|
+
// Check specific agent
|
|
237
|
+
agentsToCheck = [agentId];
|
|
238
|
+
console.log(chalk.gray(`Checking agent: ${agentId}\n`));
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Run the checks
|
|
242
|
+
const results = await checkAllProviders(agentsToCheck, autoConfig, repoPath, (providerId, phase, result, message) => {
|
|
243
|
+
// Progress callback
|
|
244
|
+
const phaseEmoji = {
|
|
245
|
+
'loading': '⏳',
|
|
246
|
+
'installing': '📥',
|
|
247
|
+
'checking': '🔍',
|
|
248
|
+
'awaiting': '⏱️',
|
|
249
|
+
'done': '✅',
|
|
250
|
+
'error': '❌',
|
|
251
|
+
'rate-limited': '⏸️'
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
const emoji = phaseEmoji[phase] || '•';
|
|
255
|
+
const msg = message || phase;
|
|
256
|
+
console.log(`${emoji} ${providerId}: ${msg}`);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
// Display summary
|
|
260
|
+
console.log(chalk.blue('\n=== CHECK SUMMARY ===\n'));
|
|
261
|
+
|
|
262
|
+
let passCount = 0;
|
|
263
|
+
let failCount = 0;
|
|
264
|
+
let rateLimitedCount = 0;
|
|
265
|
+
|
|
266
|
+
for (const [providerId, result] of Object.entries(results)) {
|
|
267
|
+
if (result.status === 'success') {
|
|
268
|
+
console.log(chalk.green(`✅ ${providerId}: ${result.message}`));
|
|
269
|
+
passCount++;
|
|
270
|
+
} else if (result.rateLimited) {
|
|
271
|
+
console.log(chalk.yellow(`⏸️ ${providerId}: Rate limited (resets ${result.rateLimitMessage || 'unknown'})`));
|
|
272
|
+
rateLimitedCount++;
|
|
273
|
+
} else {
|
|
274
|
+
console.log(chalk.red(`❌ ${providerId}: ${result.message || 'Failed'}`));
|
|
275
|
+
failCount++;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
console.log(chalk.blue('\n=== RESULTS ==='));
|
|
280
|
+
console.log(chalk.green(`✅ Passed: ${passCount}`));
|
|
281
|
+
if (rateLimitedCount > 0) {
|
|
282
|
+
console.log(chalk.yellow(`⏸️ Rate Limited: ${rateLimitedCount}`));
|
|
283
|
+
}
|
|
284
|
+
if (failCount > 0) {
|
|
285
|
+
console.log(chalk.red(`❌ Failed: ${failCount}`));
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Exit with error code if any failed
|
|
289
|
+
if (failCount > 0) {
|
|
200
290
|
process.exit(1);
|
|
201
291
|
}
|
|
292
|
+
|
|
202
293
|
} catch (error) {
|
|
203
|
-
console.error(
|
|
294
|
+
console.error(chalk.red('Error checking agents:'), error.message);
|
|
295
|
+
console.error(error.stack);
|
|
204
296
|
process.exit(1);
|
|
205
297
|
}
|
|
206
298
|
});
|
|
207
299
|
|
|
208
|
-
// Add agents
|
|
300
|
+
// Add "check agents" alias command
|
|
209
301
|
program
|
|
210
|
-
.command('agents
|
|
211
|
-
.description('
|
|
212
|
-
.
|
|
302
|
+
.command('check-agents [agent-id]')
|
|
303
|
+
.description('Check agent(s) status and run validation tests (alias)')
|
|
304
|
+
.option('--all', 'Check all enabled agents')
|
|
305
|
+
.action(async (agentId, options) => {
|
|
306
|
+
// Delegate to the agents check command logic
|
|
213
307
|
try {
|
|
214
|
-
const
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
308
|
+
const { checkAllProviders } = require('../../src/utils/provider-checker');
|
|
309
|
+
const { getEffectiveRepoPath, getAutoConfig } = require('../../src/utils/config');
|
|
310
|
+
|
|
311
|
+
const repoPath = await getEffectiveRepoPath();
|
|
312
|
+
const autoConfig = await getAutoConfig();
|
|
313
|
+
|
|
314
|
+
console.log(chalk.blue('🔍 Running agent checks...\n'));
|
|
315
|
+
|
|
316
|
+
// Determine which agents to check
|
|
317
|
+
let agentsToCheck = [];
|
|
318
|
+
if (options.all || !agentId) {
|
|
319
|
+
// Check all enabled agents
|
|
320
|
+
const definitions = getProviderDefinitions();
|
|
321
|
+
const prefs = await getProviderPreferences();
|
|
322
|
+
agentsToCheck = definitions
|
|
323
|
+
.filter(def => prefs.enabled[def.id] !== false)
|
|
324
|
+
.map(def => def.id);
|
|
325
|
+
|
|
326
|
+
if (agentsToCheck.length === 0) {
|
|
327
|
+
console.log(chalk.yellow('No enabled agents found. Enable agents first with: vcm enable agents <agent-id>'));
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
console.log(chalk.gray(`Checking ${agentsToCheck.length} enabled agent(s): ${agentsToCheck.join(', ')}\n`));
|
|
221
332
|
} else {
|
|
222
|
-
|
|
333
|
+
// Check specific agent
|
|
334
|
+
agentsToCheck = [agentId];
|
|
335
|
+
console.log(chalk.gray(`Checking agent: ${agentId}\n`));
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Run the checks
|
|
339
|
+
const results = await checkAllProviders(agentsToCheck, autoConfig, repoPath, (providerId, phase, result, message) => {
|
|
340
|
+
// Progress callback
|
|
341
|
+
const phaseEmoji = {
|
|
342
|
+
'loading': '⏳',
|
|
343
|
+
'installing': '📥',
|
|
344
|
+
'checking': '🔍',
|
|
345
|
+
'awaiting': '⏱️',
|
|
346
|
+
'done': '✅',
|
|
347
|
+
'error': '❌',
|
|
348
|
+
'rate-limited': '⏸️'
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
const emoji = phaseEmoji[phase] || '•';
|
|
352
|
+
const msg = message || phase;
|
|
353
|
+
console.log(`${emoji} ${providerId}: ${msg}`);
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
// Display summary
|
|
357
|
+
console.log(chalk.blue('\n=== CHECK SUMMARY ===\n'));
|
|
358
|
+
|
|
359
|
+
let passCount = 0;
|
|
360
|
+
let failCount = 0;
|
|
361
|
+
let rateLimitedCount = 0;
|
|
362
|
+
|
|
363
|
+
for (const [providerId, result] of Object.entries(results)) {
|
|
364
|
+
if (result.status === 'success') {
|
|
365
|
+
console.log(chalk.green(`✅ ${providerId}: ${result.message}`));
|
|
366
|
+
passCount++;
|
|
367
|
+
} else if (result.rateLimited) {
|
|
368
|
+
console.log(chalk.yellow(`⏸️ ${providerId}: Rate limited (resets ${result.rateLimitMessage || 'unknown'})`));
|
|
369
|
+
rateLimitedCount++;
|
|
370
|
+
} else {
|
|
371
|
+
console.log(chalk.red(`❌ ${providerId}: ${result.message || 'Failed'}`));
|
|
372
|
+
failCount++;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
console.log(chalk.blue('\n=== RESULTS ==='));
|
|
377
|
+
console.log(chalk.green(`✅ Passed: ${passCount}`));
|
|
378
|
+
if (rateLimitedCount > 0) {
|
|
379
|
+
console.log(chalk.yellow(`⏸️ Rate Limited: ${rateLimitedCount}`));
|
|
380
|
+
}
|
|
381
|
+
if (failCount > 0) {
|
|
382
|
+
console.log(chalk.red(`❌ Failed: ${failCount}`));
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// Exit with error code if any failed
|
|
386
|
+
if (failCount > 0) {
|
|
223
387
|
process.exit(1);
|
|
224
388
|
}
|
|
389
|
+
|
|
225
390
|
} catch (error) {
|
|
226
|
-
console.error('Error
|
|
391
|
+
console.error(chalk.red('Error checking agents:'), error.message);
|
|
392
|
+
console.error(error.stack);
|
|
227
393
|
process.exit(1);
|
|
228
394
|
}
|
|
229
395
|
});
|
|
396
|
+
|
|
397
|
+
// Alias: check agents
|
|
398
|
+
program
|
|
399
|
+
.command('check agents [agent-id]')
|
|
400
|
+
.description('Check agent(s) status and run validation tests (alias)')
|
|
401
|
+
.option('--all', 'Check all enabled agents')
|
|
402
|
+
.action(async (agentId, options) => {
|
|
403
|
+
// Delegate to the agents-check command logic
|
|
404
|
+
try {
|
|
405
|
+
const { checkAllProviders } = require('../../src/utils/provider-checker');
|
|
406
|
+
const { getEffectiveRepoPath, getAutoConfig } = require('../../src/utils/config');
|
|
407
|
+
|
|
408
|
+
const repoPath = await getEffectiveRepoPath();
|
|
409
|
+
const autoConfig = await getAutoConfig();
|
|
410
|
+
|
|
411
|
+
console.log(chalk.blue('🔍 Running agent checks...\n'));
|
|
412
|
+
|
|
413
|
+
// Determine which agents to check
|
|
414
|
+
let agentsToCheck = [];
|
|
415
|
+
if (options.all || !agentId) {
|
|
416
|
+
// Check all enabled agents
|
|
417
|
+
const definitions = getProviderDefinitions();
|
|
418
|
+
const prefs = await getProviderPreferences();
|
|
419
|
+
agentsToCheck = definitions
|
|
420
|
+
.filter(def => prefs.enabled[def.id] !== false)
|
|
421
|
+
.map(def => def.id);
|
|
422
|
+
|
|
423
|
+
if (agentsToCheck.length === 0) {
|
|
424
|
+
console.log(chalk.yellow('No enabled agents found. Enable agents first with: vcm enable agents <agent-id>'));
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
console.log(chalk.gray(`Checking ${agentsToCheck.length} enabled agent(s): ${agentsToCheck.join(', ')}\n`));
|
|
429
|
+
} else {
|
|
430
|
+
// Check specific agent
|
|
431
|
+
agentsToCheck = [agentId];
|
|
432
|
+
console.log(chalk.gray(`Checking agent: ${agentId}\n`));
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Run the checks
|
|
436
|
+
const results = await checkAllProviders(agentsToCheck, autoConfig, repoPath, (providerId, phase, result, message) => {
|
|
437
|
+
// Progress callback
|
|
438
|
+
const phaseEmoji = {
|
|
439
|
+
'loading': '⏳',
|
|
440
|
+
'installing': '📥',
|
|
441
|
+
'checking': '🔍',
|
|
442
|
+
'awaiting': '⏱️',
|
|
443
|
+
'done': '✅',
|
|
444
|
+
'error': '❌',
|
|
445
|
+
'rate-limited': '⏸️'
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
const emoji = phaseEmoji[phase] || '•';
|
|
449
|
+
const msg = message || phase;
|
|
450
|
+
console.log(`${emoji} ${providerId}: ${msg}`);
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
// Display summary
|
|
454
|
+
console.log(chalk.blue('\n=== CHECK SUMMARY ===\n'));
|
|
455
|
+
|
|
456
|
+
let passCount = 0;
|
|
457
|
+
let failCount = 0;
|
|
458
|
+
let rateLimitedCount = 0;
|
|
459
|
+
|
|
460
|
+
for (const [providerId, result] of Object.entries(results)) {
|
|
461
|
+
if (result.status === 'success') {
|
|
462
|
+
console.log(chalk.green(`✅ ${providerId}: ${result.message}`));
|
|
463
|
+
passCount++;
|
|
464
|
+
} else if (result.rateLimited) {
|
|
465
|
+
console.log(chalk.yellow(`⏸️ ${providerId}: Rate limited (resets ${result.rateLimitMessage || 'unknown'})`));
|
|
466
|
+
rateLimitedCount++;
|
|
467
|
+
} else {
|
|
468
|
+
console.log(chalk.red(`❌ ${providerId}: ${result.message || 'Failed'}`));
|
|
469
|
+
failCount++;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
console.log(chalk.blue('\n=== RESULTS ==='));
|
|
474
|
+
console.log(chalk.green(`✅ Passed: ${passCount}`));
|
|
475
|
+
if (rateLimitedCount > 0) {
|
|
476
|
+
console.log(chalk.yellow(`⏸️ Rate Limited: ${rateLimitedCount}`));
|
|
477
|
+
}
|
|
478
|
+
if (failCount > 0) {
|
|
479
|
+
console.log(chalk.red(`❌ Failed: ${failCount}`));
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// Exit with error code if any failed
|
|
483
|
+
if (failCount > 0) {
|
|
484
|
+
process.exit(1);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
} catch (error) {
|
|
488
|
+
console.error(chalk.red('Error checking agents:'), error.message);
|
|
489
|
+
console.error(error.stack);
|
|
490
|
+
process.exit(1);
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
|
|
494
|
+
// Note: Removed general agents <agent-id> <action> command
|
|
495
|
+
// It was conflicting with "agents check <agent-id>"
|
|
496
|
+
// Use explicit commands instead: "vcm agents <id> enable" or "vcm agents <id> disable"
|
|
230
497
|
}
|
|
231
498
|
|
|
232
499
|
module.exports = { setupAgentCommands, createAgentCommands };
|
package/bin/vibecodingmachine.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibecodingmachine-cli",
|
|
3
|
-
"version": "2026.03.
|
|
3
|
+
"version": "2026.03.10-1548",
|
|
4
4
|
"description": "Command-line interface for Vibe Coding Machine - Autonomous development",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"react": "^19.2.0",
|
|
60
60
|
"screenshot-desktop": "^1.15.3",
|
|
61
61
|
"table": "^6.8.1",
|
|
62
|
-
"vibecodingmachine-core": "^2026.03.
|
|
62
|
+
"vibecodingmachine-core": "^2026.03.10-1548"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"eslint": "^8.57.0",
|