vibecodingmachine-cli 2026.3.10-1807 → 2026.3.14-1528

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 (36) hide show
  1. package/README.md +85 -85
  2. package/bin/vibecodingmachine.js +3 -0
  3. package/package.json +4 -3
  4. package/scripts/postinstall.js +161 -161
  5. package/src/commands/auth.js +100 -100
  6. package/src/commands/auto-direct.js +16 -5
  7. package/src/commands/auto-execution.js +25 -0
  8. package/src/commands/auto-requirement-management.js +8 -8
  9. package/src/commands/auto-status-helpers.js +5 -3
  10. package/src/commands/computers.js +318 -318
  11. package/src/commands/feature.js +123 -123
  12. package/src/commands/locale.js +72 -72
  13. package/src/commands/repo.js +163 -163
  14. package/src/commands/setup.js +93 -93
  15. package/src/commands/sync.js +287 -287
  16. package/src/index.js +5 -5
  17. package/src/utils/agent-selector.js +50 -50
  18. package/src/utils/asset-cleanup.js +60 -60
  19. package/src/utils/auto-mode-ansi-ui.js +237 -237
  20. package/src/utils/auto-mode-simple-ui.js +141 -141
  21. package/src/utils/copy-with-progress.js +167 -167
  22. package/src/utils/download-with-progress.js +84 -84
  23. package/src/utils/keyboard-handler.js +153 -153
  24. package/src/utils/kiro-installer.js +178 -178
  25. package/src/utils/logger.js +4 -4
  26. package/src/utils/persistent-header.js +114 -114
  27. package/src/utils/prompt-helper.js +63 -63
  28. package/src/utils/provider-checker/agent-checker.js +25 -1
  29. package/src/utils/provider-checker/agent-runner.js +115 -37
  30. package/src/utils/provider-checker/agents-manager.js +210 -0
  31. package/src/utils/provider-checker/provider-validator.js +5 -49
  32. package/src/utils/provider-checker/requirements-manager.js +86 -65
  33. package/src/utils/provider-checker/test-requirements.js +25 -17
  34. package/src/utils/status-card.js +121 -121
  35. package/src/utils/stdout-interceptor.js +127 -127
  36. 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
+ ```
@@ -23,6 +23,8 @@ const { initializeEnvironment } = require('./init/environment-setup');
23
23
  const { configureCli, setupBasicCommands, setupRequirementsCommands, setupFeatureAndIdeCommands, setupStatusCommands, setupAuthCommands, setupComputerCommands, setupSyncCommands } = require('./config/cli-config');
24
24
  const { setupAgentCommands } = require('./commands/agent-commands');
25
25
  const { setupRuiCommands } = require('./commands/rui-commands');
26
+ const { setupAutoCommands } = require('./commands/auto-commands');
27
+ const autoCommands = require('../src/commands/auto');
26
28
  const { checkForUpdates } = require('./update/update-checker');
27
29
  const { setupInteractiveAuth, setupCommandAuth } = require('./auth/auth-compliance');
28
30
 
@@ -37,6 +39,7 @@ setupComputerCommands({ t });
37
39
  setupSyncCommands({ t });
38
40
  setupAgentCommands({ t });
39
41
  setupRuiCommands({ t });
42
+ setupAutoCommands(autoCommands);
40
43
 
41
44
  // Start interactive mode if no command provided (check BEFORE parsing)
42
45
  if (!process.argv.slice(2).length) {
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "vibecodingmachine-cli",
3
- "version": "2026.03.10-1807",
3
+ "version": "2026.03.14-1528",
4
4
  "description": "Command-line interface for Vibe Coding Machine - Autonomous development",
5
5
  "main": "src/index.js",
6
6
  "bin": {
7
- "vibecodingmachine": "./bin/vibecodingmachine.js"
7
+ "vibecodingmachine": "./bin/vibecodingmachine.js",
8
+ "vcm": "./bin/vibecodingmachine.js"
8
9
  },
9
10
  "files": [
10
11
  "bin/**/*.js",
@@ -59,7 +60,7 @@
59
60
  "react": "^19.2.0",
60
61
  "screenshot-desktop": "^1.15.3",
61
62
  "table": "^6.8.1",
62
- "vibecodingmachine-core": "^2026.03.10-1807"
63
+ "vibecodingmachine-core": "^2026.03.14-1528"
63
64
  },
64
65
  "devDependencies": {
65
66
  "eslint": "^8.57.0",
@@ -1,161 +1,161 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Post-install script to check if 'vcm' command exists
5
- * and warn users if there's a conflict
6
- */
7
-
8
- const { execSync } = require('child_process');
9
- const chalk = require('chalk');
10
- const path = require('path');
11
- const fs = require('fs');
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
-
37
- function checkForExistingAna() {
38
- try {
39
- // Check if 'vcm' command exists in PATH before installation
40
- // We need to check the actual binary, not symlinks
41
- const result = execSync('which vcm 2>/dev/null || true', { encoding: 'utf8' });
42
- const vcmPath = result.trim();
43
-
44
- if (!vcmPath) {
45
- // No vcm found - safe to install
46
- console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
47
- console.log(chalk.gray(' You can use either:'));
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
-
63
- console.log();
64
- return;
65
- }
66
-
67
- // Check if it's a real file (not a broken symlink from previous install)
68
- try {
69
- fs.accessSync(vcmPath, fs.constants.X_OK);
70
-
71
- // Read the file to see if it's ours
72
- const content = fs.readFileSync(vcmPath, 'utf8');
73
-
74
- // Check if this is our VibeCodingMachine binary
75
- if (content.includes('VibeCodingMachine CLI') || content.includes('vibecodingmachine')) {
76
- // It's ours, all good
77
- console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
78
- console.log(chalk.gray(' You can use either:'));
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
-
94
- console.log();
95
- return;
96
- }
97
-
98
- // It's NOT ours - there's a conflict
99
- console.log(chalk.yellow('\n⚠️ Warning: An existing "vcm" command was detected at:'));
100
- console.log(chalk.yellow(` ${vcmPath}`));
101
- console.log(chalk.yellow('\n The "vcm" shortcut will NOT be installed to avoid conflicts.'));
102
- console.log(chalk.cyan(' You can still use the full command: ') + chalk.bold('vibecodingmachine'));
103
- console.log();
104
-
105
- // Remove vcm from bin to prevent conflict
106
- const packageJsonPath = path.join(__dirname, '..', 'package.json');
107
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
108
-
109
- if (packageJson.bin && packageJson.bin.vcm) {
110
- delete packageJson.bin.vcm;
111
- fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
112
- console.log(chalk.gray(' ✓ Removed "vcm" from bin configuration to prevent conflict\n'));
113
- }
114
- } catch (err) {
115
- // File doesn't exist or can't be read - probably safe to install
116
- console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
117
- console.log(chalk.gray(' You can use either:'));
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
-
133
- console.log();
134
- }
135
- } catch (error) {
136
- // Error running which - assume no vcm exists
137
- console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
138
- console.log(chalk.gray(' You can use either:'));
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
-
154
- console.log();
155
- }
156
- }
157
-
158
- // Only run if not being installed as a dependency
159
- if (process.env.npm_config_global || process.env.npm_config_prefix) {
160
- checkForExistingAna();
161
- }
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Post-install script to check if 'vcm' command exists
5
+ * and warn users if there's a conflict
6
+ */
7
+
8
+ const { execSync } = require('child_process');
9
+ const chalk = require('chalk');
10
+ const path = require('path');
11
+ const fs = require('fs');
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
+
37
+ function checkForExistingAna() {
38
+ try {
39
+ // Check if 'vcm' command exists in PATH before installation
40
+ // We need to check the actual binary, not symlinks
41
+ const result = execSync('which vcm 2>/dev/null || true', { encoding: 'utf8' });
42
+ const vcmPath = result.trim();
43
+
44
+ if (!vcmPath) {
45
+ // No vcm found - safe to install
46
+ console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
47
+ console.log(chalk.gray(' You can use either:'));
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
+
63
+ console.log();
64
+ return;
65
+ }
66
+
67
+ // Check if it's a real file (not a broken symlink from previous install)
68
+ try {
69
+ fs.accessSync(vcmPath, fs.constants.X_OK);
70
+
71
+ // Read the file to see if it's ours
72
+ const content = fs.readFileSync(vcmPath, 'utf8');
73
+
74
+ // Check if this is our VibeCodingMachine binary
75
+ if (content.includes('VibeCodingMachine CLI') || content.includes('vibecodingmachine')) {
76
+ // It's ours, all good
77
+ console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
78
+ console.log(chalk.gray(' You can use either:'));
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
+
94
+ console.log();
95
+ return;
96
+ }
97
+
98
+ // It's NOT ours - there's a conflict
99
+ console.log(chalk.yellow('\n⚠️ Warning: An existing "vcm" command was detected at:'));
100
+ console.log(chalk.yellow(` ${vcmPath}`));
101
+ console.log(chalk.yellow('\n The "vcm" shortcut will NOT be installed to avoid conflicts.'));
102
+ console.log(chalk.cyan(' You can still use the full command: ') + chalk.bold('vibecodingmachine'));
103
+ console.log();
104
+
105
+ // Remove vcm from bin to prevent conflict
106
+ const packageJsonPath = path.join(__dirname, '..', 'package.json');
107
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
108
+
109
+ if (packageJson.bin && packageJson.bin.vcm) {
110
+ delete packageJson.bin.vcm;
111
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
112
+ console.log(chalk.gray(' ✓ Removed "vcm" from bin configuration to prevent conflict\n'));
113
+ }
114
+ } catch (err) {
115
+ // File doesn't exist or can't be read - probably safe to install
116
+ console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
117
+ console.log(chalk.gray(' You can use either:'));
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
+
133
+ console.log();
134
+ }
135
+ } catch (error) {
136
+ // Error running which - assume no vcm exists
137
+ console.log(chalk.green('\n✓ Vibe Coding Machine CLI installed successfully!'));
138
+ console.log(chalk.gray(' You can use either:'));
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
+
154
+ console.log();
155
+ }
156
+ }
157
+
158
+ // Only run if not being installed as a dependency
159
+ if (process.env.npm_config_global || process.env.npm_config_prefix) {
160
+ checkForExistingAna();
161
+ }