vibecodingmachine-cli 2025.11.2-9.855 → 2025.12.6-1702
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/bin/vibecodingmachine.js +92 -4
- package/package.json +5 -2
- package/repro_open.js +13 -0
- package/scripts/postinstall.js +80 -0
- package/src/commands/auto-direct.js +401 -97
- package/src/commands/auto.js +343 -115
- package/src/commands/computers.js +306 -0
- package/src/commands/requirements-remote.js +304 -0
- package/src/commands/requirements.js +204 -13
- package/src/commands/sync.js +280 -0
- package/src/utils/asset-cleanup.js +61 -0
- package/src/utils/auth.js +84 -7
- package/src/utils/auto-mode-simple-ui.js +2 -22
- package/src/utils/first-run.js +293 -0
- package/src/utils/interactive.js +1027 -217
- package/src/utils/kiro-installer.js +146 -0
- package/src/utils/provider-registry.js +8 -0
- package/src/utils/status-card.js +2 -1
package/bin/vibecodingmachine.js
CHANGED
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
const path = require('path');
|
|
4
4
|
const fs = require('fs');
|
|
5
5
|
|
|
6
|
-
// Auto-load .env.
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
// Auto-load .env.cognito from root
|
|
7
|
+
const rootDir = path.join(__dirname, '..', '..', '..');
|
|
8
|
+
const envCognitoPath = path.join(rootDir, '.env.cognito');
|
|
9
|
+
|
|
10
|
+
if (fs.existsSync(envCognitoPath)) {
|
|
11
|
+
const envContent = fs.readFileSync(envCognitoPath, 'utf8');
|
|
10
12
|
envContent.split('\n').forEach(line => {
|
|
11
13
|
const trimmed = line.trim();
|
|
12
14
|
if (trimmed && !trimmed.startsWith('#')) {
|
|
@@ -23,6 +25,13 @@ if (fs.existsSync(envAuthPath)) {
|
|
|
23
25
|
* "Big Dreams + AI + VibeCodingMachine.com = Your money making apps"
|
|
24
26
|
*/
|
|
25
27
|
|
|
28
|
+
const { cleanupBrokenAssets } = require('../src/utils/asset-cleanup');
|
|
29
|
+
|
|
30
|
+
(async () => {
|
|
31
|
+
// mitigate broken assets issue
|
|
32
|
+
await cleanupBrokenAssets();
|
|
33
|
+
})();
|
|
34
|
+
|
|
26
35
|
const { program } = require('commander');
|
|
27
36
|
const chalk = require('chalk');
|
|
28
37
|
const inquirer = require('inquirer');
|
|
@@ -140,6 +149,11 @@ program
|
|
|
140
149
|
.description('Watch requirements file for changes')
|
|
141
150
|
.action(reqCommands.watch);
|
|
142
151
|
|
|
152
|
+
program
|
|
153
|
+
.command('req:rename <old-title> <new-title> [description...]')
|
|
154
|
+
.description('Rename requirement and optionally update description')
|
|
155
|
+
.action((oldTitle, newTitle, description) => reqCommands.rename(oldTitle, newTitle, description));
|
|
156
|
+
|
|
143
157
|
// IDE integration commands
|
|
144
158
|
program
|
|
145
159
|
.command('ide:list')
|
|
@@ -201,6 +215,76 @@ program
|
|
|
201
215
|
.description('Check authentication status')
|
|
202
216
|
.action(authCommands.status);
|
|
203
217
|
|
|
218
|
+
// Multi-computer management commands
|
|
219
|
+
const computerCommands = require('../src/commands/computers');
|
|
220
|
+
const remoteReqCommands = require('../src/commands/requirements-remote');
|
|
221
|
+
program
|
|
222
|
+
.command('computers')
|
|
223
|
+
.description('List all registered computers')
|
|
224
|
+
.option('-f, --focus <area>', 'Filter by focus area')
|
|
225
|
+
.option('-s, --status <status>', 'Filter by status (active, idle, error)')
|
|
226
|
+
.action(computerCommands.listComputers);
|
|
227
|
+
|
|
228
|
+
program
|
|
229
|
+
.command('computer:status <computerId>')
|
|
230
|
+
.description('Show detailed status of a specific computer')
|
|
231
|
+
.action(computerCommands.showComputerStatus);
|
|
232
|
+
|
|
233
|
+
program
|
|
234
|
+
.command('computer:register <focusArea>')
|
|
235
|
+
.description('Register current computer with focus area')
|
|
236
|
+
.action(computerCommands.registerComputer);
|
|
237
|
+
|
|
238
|
+
program
|
|
239
|
+
.command('computer:focus [newFocusArea]')
|
|
240
|
+
.description('View or update focus area for current computer')
|
|
241
|
+
.action((newFocusArea) => {
|
|
242
|
+
if (newFocusArea) {
|
|
243
|
+
computerCommands.updateFocus(newFocusArea);
|
|
244
|
+
} else {
|
|
245
|
+
// Show current focus
|
|
246
|
+
computerCommands.showComputerStatus(require('os').hostname());
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
program
|
|
251
|
+
.command('computer:requirements <computerId>')
|
|
252
|
+
.description('View requirements for another computer')
|
|
253
|
+
.action(remoteReqCommands.listRemoteRequirements);
|
|
254
|
+
|
|
255
|
+
program
|
|
256
|
+
.command('computer:add-requirement <computerId> <requirement>')
|
|
257
|
+
.description('Add requirement to another computer')
|
|
258
|
+
.action(remoteReqCommands.addRemoteRequirement);
|
|
259
|
+
|
|
260
|
+
// Sync management commands
|
|
261
|
+
const syncCommands = require('../src/commands/sync');
|
|
262
|
+
program
|
|
263
|
+
.command('sync:now')
|
|
264
|
+
.description('Trigger immediate sync')
|
|
265
|
+
.action(syncCommands.syncNow);
|
|
266
|
+
|
|
267
|
+
program
|
|
268
|
+
.command('sync:status')
|
|
269
|
+
.description('Show sync status and statistics')
|
|
270
|
+
.action(syncCommands.syncStatus);
|
|
271
|
+
|
|
272
|
+
program
|
|
273
|
+
.command('sync:queue')
|
|
274
|
+
.description('View pending changes in offline queue')
|
|
275
|
+
.action(syncCommands.viewQueue);
|
|
276
|
+
|
|
277
|
+
program
|
|
278
|
+
.command('sync:force')
|
|
279
|
+
.description('Force sync even if offline')
|
|
280
|
+
.action(syncCommands.forceSync);
|
|
281
|
+
|
|
282
|
+
program
|
|
283
|
+
.command('sync:history')
|
|
284
|
+
.description('View sync history')
|
|
285
|
+
.option('-n, --limit <number>', 'Number of history entries to show', '50')
|
|
286
|
+
.action(syncCommands.viewHistory);
|
|
287
|
+
|
|
204
288
|
// Interactive mode
|
|
205
289
|
program
|
|
206
290
|
.command('interactive')
|
|
@@ -281,6 +365,10 @@ if (!process.argv.slice(2).length) {
|
|
|
281
365
|
// Check for updates first
|
|
282
366
|
await checkForUpdates();
|
|
283
367
|
|
|
368
|
+
// Check for first run experience
|
|
369
|
+
const { checkFirstRun } = require('../src/utils/first-run');
|
|
370
|
+
await checkFirstRun();
|
|
371
|
+
|
|
284
372
|
// Check authentication before allowing interactive mode
|
|
285
373
|
const auth = require('../src/utils/auth');
|
|
286
374
|
const isAuth = await auth.isAuthenticated();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibecodingmachine-cli",
|
|
3
|
-
"version": "2025.
|
|
3
|
+
"version": "2025.12.06-1702",
|
|
4
4
|
"description": "Command-line interface for Vibe Coding Machine - Autonomous development",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -25,10 +25,13 @@
|
|
|
25
25
|
"author": "Vibe Coding Machine Team",
|
|
26
26
|
"license": "MIT",
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"vibecodingmachine-core": "^2025.
|
|
28
|
+
"vibecodingmachine-core": "^2025.12.06-1702",
|
|
29
|
+
"@aws-sdk/client-dynamodb": "^3.600.0",
|
|
30
|
+
"@aws-sdk/lib-dynamodb": "^3.600.0",
|
|
29
31
|
"boxen": "^5.1.2",
|
|
30
32
|
"chalk": "^4.1.2",
|
|
31
33
|
"chokidar": "^3.6.0",
|
|
34
|
+
"cli-table3": "^0.6.3",
|
|
32
35
|
"commander": "^11.1.0",
|
|
33
36
|
"fs-extra": "^11.2.0",
|
|
34
37
|
"ink": "^6.4.0",
|
package/repro_open.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
try {
|
|
2
|
+
const open = require('open');
|
|
3
|
+
console.log('Type of open:', typeof open);
|
|
4
|
+
console.log('open:', open);
|
|
5
|
+
if (typeof open !== 'function') {
|
|
6
|
+
console.log('Exports:', Object.keys(open));
|
|
7
|
+
if (open.default) {
|
|
8
|
+
console.log('Type of open.default:', typeof open.default);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
} catch (e) {
|
|
12
|
+
console.error('Require failed:', e.message);
|
|
13
|
+
}
|
package/scripts/postinstall.js
CHANGED
|
@@ -10,6 +10,30 @@ const chalk = require('chalk');
|
|
|
10
10
|
const path = require('path');
|
|
11
11
|
const fs = require('fs');
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Detect if user is using asdf for Node.js version management
|
|
15
|
+
*/
|
|
16
|
+
function detectAsdf() {
|
|
17
|
+
try {
|
|
18
|
+
const nodePath = execSync('which node 2>/dev/null || true', { encoding: 'utf8' }).trim();
|
|
19
|
+
return nodePath.includes('/.asdf/');
|
|
20
|
+
} catch (error) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Attempt to reshim asdf to make vcm command immediately available
|
|
27
|
+
*/
|
|
28
|
+
function reshimAsdf() {
|
|
29
|
+
try {
|
|
30
|
+
execSync('asdf reshim nodejs 2>/dev/null', { encoding: 'utf8' });
|
|
31
|
+
return true;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
13
37
|
function checkForExistingAna() {
|
|
14
38
|
try {
|
|
15
39
|
// Check if 'vcm' command exists in PATH before installation
|
|
@@ -22,6 +46,20 @@ function checkForExistingAna() {
|
|
|
22
46
|
console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
|
|
23
47
|
console.log(chalk.gray(' You can use either:'));
|
|
24
48
|
console.log(chalk.cyan(' vibecodingmachine') + chalk.gray(' or ') + chalk.cyan('vcm'));
|
|
49
|
+
|
|
50
|
+
// Check if user is using asdf and attempt to reshim
|
|
51
|
+
const isAsdf = detectAsdf();
|
|
52
|
+
if (isAsdf) {
|
|
53
|
+
const reshimSuccess = reshimAsdf();
|
|
54
|
+
if (reshimSuccess) {
|
|
55
|
+
console.log(chalk.gray(' ✓ asdf reshimmed successfully'));
|
|
56
|
+
} else {
|
|
57
|
+
console.log(chalk.yellow('\n ⚠️ Note: You appear to be using asdf.'));
|
|
58
|
+
console.log(chalk.yellow(' If "vcm" command is not found, run:'));
|
|
59
|
+
console.log(chalk.cyan(' asdf reshim nodejs'));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
25
63
|
console.log();
|
|
26
64
|
return;
|
|
27
65
|
}
|
|
@@ -39,6 +77,20 @@ function checkForExistingAna() {
|
|
|
39
77
|
console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
|
|
40
78
|
console.log(chalk.gray(' You can use either:'));
|
|
41
79
|
console.log(chalk.cyan(' vibecodingmachine') + chalk.gray(' or ') + chalk.cyan('vcm'));
|
|
80
|
+
|
|
81
|
+
// Check if user is using asdf and attempt to reshim
|
|
82
|
+
const isAsdf = detectAsdf();
|
|
83
|
+
if (isAsdf) {
|
|
84
|
+
const reshimSuccess = reshimAsdf();
|
|
85
|
+
if (reshimSuccess) {
|
|
86
|
+
console.log(chalk.gray(' ✓ asdf reshimmed successfully'));
|
|
87
|
+
} else {
|
|
88
|
+
console.log(chalk.yellow('\n ⚠️ Note: You appear to be using asdf.'));
|
|
89
|
+
console.log(chalk.yellow(' If "vcm" command is not found, run:'));
|
|
90
|
+
console.log(chalk.cyan(' asdf reshim nodejs'));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
42
94
|
console.log();
|
|
43
95
|
return;
|
|
44
96
|
}
|
|
@@ -64,6 +116,20 @@ function checkForExistingAna() {
|
|
|
64
116
|
console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
|
|
65
117
|
console.log(chalk.gray(' You can use either:'));
|
|
66
118
|
console.log(chalk.cyan(' vibecodingmachine') + chalk.gray(' or ') + chalk.cyan('vcm'));
|
|
119
|
+
|
|
120
|
+
// Check if user is using asdf and attempt to reshim
|
|
121
|
+
const isAsdf = detectAsdf();
|
|
122
|
+
if (isAsdf) {
|
|
123
|
+
const reshimSuccess = reshimAsdf();
|
|
124
|
+
if (reshimSuccess) {
|
|
125
|
+
console.log(chalk.gray(' ✓ asdf reshimmed successfully'));
|
|
126
|
+
} else {
|
|
127
|
+
console.log(chalk.yellow('\n ⚠️ Note: You appear to be using asdf.'));
|
|
128
|
+
console.log(chalk.yellow(' If "vcm" command is not found, run:'));
|
|
129
|
+
console.log(chalk.cyan(' asdf reshim nodejs'));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
67
133
|
console.log();
|
|
68
134
|
}
|
|
69
135
|
} catch (error) {
|
|
@@ -71,6 +137,20 @@ function checkForExistingAna() {
|
|
|
71
137
|
console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
|
|
72
138
|
console.log(chalk.gray(' You can use either:'));
|
|
73
139
|
console.log(chalk.cyan(' vibecodingmachine') + chalk.gray(' or ') + chalk.cyan('vcm'));
|
|
140
|
+
|
|
141
|
+
// Check if user is using asdf and attempt to reshim
|
|
142
|
+
const isAsdf = detectAsdf();
|
|
143
|
+
if (isAsdf) {
|
|
144
|
+
const reshimSuccess = reshimAsdf();
|
|
145
|
+
if (reshimSuccess) {
|
|
146
|
+
console.log(chalk.gray(' ✓ asdf reshimmed successfully'));
|
|
147
|
+
} else {
|
|
148
|
+
console.log(chalk.yellow('\n ⚠️ Note: You appear to be using asdf.'));
|
|
149
|
+
console.log(chalk.yellow(' If "vcm" command is not found, run:'));
|
|
150
|
+
console.log(chalk.cyan(' asdf reshim nodejs'));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
74
154
|
console.log();
|
|
75
155
|
}
|
|
76
156
|
}
|