vibecodingmachine-cli 2026.3.9-850 → 2026.3.10-1547
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/src/commands/feature.js
CHANGED
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
const chalk = require('chalk');
|
|
2
|
-
const { getRepoPath } = require('../utils/config');
|
|
3
|
-
const {
|
|
4
|
-
createRequirementBranch,
|
|
5
|
-
mergeRequirementBranch,
|
|
6
|
-
removeRequirementFeature,
|
|
7
|
-
listRequirementBranches,
|
|
8
|
-
getCurrentBranch
|
|
9
|
-
} = require('vibecodingmachine-core');
|
|
10
|
-
|
|
11
|
-
async function start(requirementTitle) {
|
|
12
|
-
try {
|
|
13
|
-
const repoPath = await getRepoPath();
|
|
14
|
-
if (!repoPath) {
|
|
15
|
-
console.log(chalk.yellow('No repository configured'));
|
|
16
|
-
console.log(chalk.gray('Run'), chalk.cyan('vcm repo:set <path>'));
|
|
17
|
-
process.exit(1);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
console.log(chalk.cyan(`Creating feature branch for: ${requirementTitle}`));
|
|
21
|
-
const result = await createRequirementBranch(repoPath, requirementTitle);
|
|
22
|
-
|
|
23
|
-
if (result.success) {
|
|
24
|
-
if (result.alreadyExists) {
|
|
25
|
-
console.log(chalk.yellow(`✓ Switched to existing branch: ${result.branchName}`));
|
|
26
|
-
} else {
|
|
27
|
-
console.log(chalk.green(`✓ Created and switched to branch: ${result.branchName}`));
|
|
28
|
-
}
|
|
29
|
-
console.log(chalk.gray(` Parent branch: ${result.parentBranch}`));
|
|
30
|
-
} else {
|
|
31
|
-
console.log(chalk.red(`✗ Failed to create branch: ${result.error}`));
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
} catch (error) {
|
|
35
|
-
console.error(chalk.red('Error creating feature branch:'), error.message);
|
|
36
|
-
process.exit(1);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
async function finish(requirementTitle, options = {}) {
|
|
41
|
-
try {
|
|
42
|
-
const repoPath = await getRepoPath();
|
|
43
|
-
if (!repoPath) {
|
|
44
|
-
console.log(chalk.yellow('No repository configured'));
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const parentBranch = options.parent || 'main';
|
|
49
|
-
|
|
50
|
-
console.log(chalk.cyan(`Merging feature branch for: ${requirementTitle}`));
|
|
51
|
-
const result = await mergeRequirementBranch(repoPath, requirementTitle, parentBranch);
|
|
52
|
-
|
|
53
|
-
if (result.success) {
|
|
54
|
-
console.log(chalk.green(`✓ Feature merged and branch deleted`));
|
|
55
|
-
} else {
|
|
56
|
-
console.log(chalk.red(`✗ Failed to merge branch: ${result.error}`));
|
|
57
|
-
process.exit(1);
|
|
58
|
-
}
|
|
59
|
-
} catch (error) {
|
|
60
|
-
console.error(chalk.red('Error merging feature branch:'), error.message);
|
|
61
|
-
process.exit(1);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async function remove(requirementTitle) {
|
|
66
|
-
try {
|
|
67
|
-
const repoPath = await getRepoPath();
|
|
68
|
-
if (!repoPath) {
|
|
69
|
-
console.log(chalk.yellow('No repository configured'));
|
|
70
|
-
process.exit(1);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
console.log(chalk.cyan(`Removing feature for: ${requirementTitle}`));
|
|
74
|
-
const result = await removeRequirementFeature(repoPath, requirementTitle);
|
|
75
|
-
|
|
76
|
-
if (result.success) {
|
|
77
|
-
console.log(chalk.green(`✓ Feature removed (merge reverted)`));
|
|
78
|
-
} else {
|
|
79
|
-
console.log(chalk.red(`✗ Failed to remove feature: ${result.error}`));
|
|
80
|
-
process.exit(1);
|
|
81
|
-
}
|
|
82
|
-
} catch (error) {
|
|
83
|
-
console.error(chalk.red('Error removing feature:'), error.message);
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
async function list() {
|
|
89
|
-
try {
|
|
90
|
-
const repoPath = await getRepoPath();
|
|
91
|
-
if (!repoPath) {
|
|
92
|
-
console.log(chalk.yellow('No repository configured'));
|
|
93
|
-
process.exit(1);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const branches = listRequirementBranches(repoPath);
|
|
97
|
-
const currentBranch = getCurrentBranch(repoPath);
|
|
98
|
-
|
|
99
|
-
if (branches.length === 0) {
|
|
100
|
-
console.log(chalk.yellow('No requirement branches found'));
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
console.log(chalk.cyan('\nRequirement Branches:\n'));
|
|
105
|
-
branches.forEach(({ branchName, reqNumber }) => {
|
|
106
|
-
const isCurrent = branchName === currentBranch;
|
|
107
|
-
const marker = isCurrent ? chalk.green('* ') : ' ';
|
|
108
|
-
const color = isCurrent ? chalk.green : chalk.white;
|
|
109
|
-
console.log(`${marker}${color(branchName)}`);
|
|
110
|
-
});
|
|
111
|
-
console.log();
|
|
112
|
-
} catch (error) {
|
|
113
|
-
console.error(chalk.red('Error listing branches:'), error.message);
|
|
114
|
-
process.exit(1);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
module.exports = {
|
|
119
|
-
start,
|
|
120
|
-
finish,
|
|
121
|
-
remove,
|
|
122
|
-
list
|
|
123
|
-
};
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const { getRepoPath } = require('../utils/config');
|
|
3
|
+
const {
|
|
4
|
+
createRequirementBranch,
|
|
5
|
+
mergeRequirementBranch,
|
|
6
|
+
removeRequirementFeature,
|
|
7
|
+
listRequirementBranches,
|
|
8
|
+
getCurrentBranch
|
|
9
|
+
} = require('vibecodingmachine-core');
|
|
10
|
+
|
|
11
|
+
async function start(requirementTitle) {
|
|
12
|
+
try {
|
|
13
|
+
const repoPath = await getRepoPath();
|
|
14
|
+
if (!repoPath) {
|
|
15
|
+
console.log(chalk.yellow('No repository configured'));
|
|
16
|
+
console.log(chalk.gray('Run'), chalk.cyan('vcm repo:set <path>'));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
console.log(chalk.cyan(`Creating feature branch for: ${requirementTitle}`));
|
|
21
|
+
const result = await createRequirementBranch(repoPath, requirementTitle);
|
|
22
|
+
|
|
23
|
+
if (result.success) {
|
|
24
|
+
if (result.alreadyExists) {
|
|
25
|
+
console.log(chalk.yellow(`✓ Switched to existing branch: ${result.branchName}`));
|
|
26
|
+
} else {
|
|
27
|
+
console.log(chalk.green(`✓ Created and switched to branch: ${result.branchName}`));
|
|
28
|
+
}
|
|
29
|
+
console.log(chalk.gray(` Parent branch: ${result.parentBranch}`));
|
|
30
|
+
} else {
|
|
31
|
+
console.log(chalk.red(`✗ Failed to create branch: ${result.error}`));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
} catch (error) {
|
|
35
|
+
console.error(chalk.red('Error creating feature branch:'), error.message);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function finish(requirementTitle, options = {}) {
|
|
41
|
+
try {
|
|
42
|
+
const repoPath = await getRepoPath();
|
|
43
|
+
if (!repoPath) {
|
|
44
|
+
console.log(chalk.yellow('No repository configured'));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const parentBranch = options.parent || 'main';
|
|
49
|
+
|
|
50
|
+
console.log(chalk.cyan(`Merging feature branch for: ${requirementTitle}`));
|
|
51
|
+
const result = await mergeRequirementBranch(repoPath, requirementTitle, parentBranch);
|
|
52
|
+
|
|
53
|
+
if (result.success) {
|
|
54
|
+
console.log(chalk.green(`✓ Feature merged and branch deleted`));
|
|
55
|
+
} else {
|
|
56
|
+
console.log(chalk.red(`✗ Failed to merge branch: ${result.error}`));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.error(chalk.red('Error merging feature branch:'), error.message);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async function remove(requirementTitle) {
|
|
66
|
+
try {
|
|
67
|
+
const repoPath = await getRepoPath();
|
|
68
|
+
if (!repoPath) {
|
|
69
|
+
console.log(chalk.yellow('No repository configured'));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
console.log(chalk.cyan(`Removing feature for: ${requirementTitle}`));
|
|
74
|
+
const result = await removeRequirementFeature(repoPath, requirementTitle);
|
|
75
|
+
|
|
76
|
+
if (result.success) {
|
|
77
|
+
console.log(chalk.green(`✓ Feature removed (merge reverted)`));
|
|
78
|
+
} else {
|
|
79
|
+
console.log(chalk.red(`✗ Failed to remove feature: ${result.error}`));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.error(chalk.red('Error removing feature:'), error.message);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async function list() {
|
|
89
|
+
try {
|
|
90
|
+
const repoPath = await getRepoPath();
|
|
91
|
+
if (!repoPath) {
|
|
92
|
+
console.log(chalk.yellow('No repository configured'));
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const branches = listRequirementBranches(repoPath);
|
|
97
|
+
const currentBranch = getCurrentBranch(repoPath);
|
|
98
|
+
|
|
99
|
+
if (branches.length === 0) {
|
|
100
|
+
console.log(chalk.yellow('No requirement branches found'));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
console.log(chalk.cyan('\nRequirement Branches:\n'));
|
|
105
|
+
branches.forEach(({ branchName, reqNumber }) => {
|
|
106
|
+
const isCurrent = branchName === currentBranch;
|
|
107
|
+
const marker = isCurrent ? chalk.green('* ') : ' ';
|
|
108
|
+
const color = isCurrent ? chalk.green : chalk.white;
|
|
109
|
+
console.log(`${marker}${color(branchName)}`);
|
|
110
|
+
});
|
|
111
|
+
console.log();
|
|
112
|
+
} catch (error) {
|
|
113
|
+
console.error(chalk.red('Error listing branches:'), error.message);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
module.exports = {
|
|
119
|
+
start,
|
|
120
|
+
finish,
|
|
121
|
+
remove,
|
|
122
|
+
list
|
|
123
|
+
};
|
package/src/commands/locale.js
CHANGED
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
const chalk = require('chalk');
|
|
2
|
-
const { t, getCurrentLocale, setLocale, getAvailableLocales, detectLocale } = require('vibecodingmachine-core');
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Show current locale information
|
|
6
|
-
*/
|
|
7
|
-
async function show() {
|
|
8
|
-
const current = getCurrentLocale();
|
|
9
|
-
const detected = detectLocale();
|
|
10
|
-
const available = getAvailableLocales();
|
|
11
|
-
|
|
12
|
-
console.log(chalk.bold(`\n🌍 ${t('app.name')} - Locale Information`));
|
|
13
|
-
console.log(chalk.gray('Current locale:'), chalk.cyan(current));
|
|
14
|
-
console.log(chalk.gray('Detected locale:'), chalk.cyan(detected));
|
|
15
|
-
console.log(chalk.gray('Available locales:'), chalk.cyan(available.join(', ')));
|
|
16
|
-
|
|
17
|
-
// Test some translations
|
|
18
|
-
console.log(chalk.bold('\n📝 Sample Translations:'));
|
|
19
|
-
console.log(` ${t('auth.login')}`);
|
|
20
|
-
console.log(` ${t('status.title')}`);
|
|
21
|
-
console.log(` ${t('setup.title')}`);
|
|
22
|
-
console.log();
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Set locale
|
|
27
|
-
* @param {string} locale - Locale to set
|
|
28
|
-
*/
|
|
29
|
-
async function set(locale) {
|
|
30
|
-
const available = getAvailableLocales();
|
|
31
|
-
|
|
32
|
-
if (!available.includes(locale)) {
|
|
33
|
-
console.log(chalk.red(`\n✗ Unsupported locale: ${locale}`));
|
|
34
|
-
console.log(chalk.gray('Available locales:'), chalk.cyan(available.join(', ')));
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
setLocale(locale);
|
|
39
|
-
console.log(chalk.green(`\n✓ Locale set to: ${chalk.cyan(locale)}`));
|
|
40
|
-
|
|
41
|
-
// Show sample translation
|
|
42
|
-
console.log(chalk.gray('Sample:'), t('app.name'));
|
|
43
|
-
console.log();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Test locale detection and translations
|
|
48
|
-
*/
|
|
49
|
-
async function test() {
|
|
50
|
-
console.log(chalk.bold(`\n🧪 Testing Locale System`));
|
|
51
|
-
|
|
52
|
-
const available = getAvailableLocales();
|
|
53
|
-
|
|
54
|
-
for (const locale of available) {
|
|
55
|
-
console.log(chalk.bold(`\n--- ${locale.toUpperCase()} ---`));
|
|
56
|
-
setLocale(locale);
|
|
57
|
-
|
|
58
|
-
console.log(`${t('app.name')}`);
|
|
59
|
-
console.log(`${t('auth.login')}`);
|
|
60
|
-
console.log(`${t('status.title')}`);
|
|
61
|
-
console.log(`${t('setup.title')}`);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Reset to detected locale
|
|
65
|
-
setLocale(detectLocale());
|
|
66
|
-
console.log();
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
module.exports = {
|
|
70
|
-
show,
|
|
71
|
-
set,
|
|
72
|
-
test
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const { t, getCurrentLocale, setLocale, getAvailableLocales, detectLocale } = require('vibecodingmachine-core');
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Show current locale information
|
|
6
|
+
*/
|
|
7
|
+
async function show() {
|
|
8
|
+
const current = getCurrentLocale();
|
|
9
|
+
const detected = detectLocale();
|
|
10
|
+
const available = getAvailableLocales();
|
|
11
|
+
|
|
12
|
+
console.log(chalk.bold(`\n🌍 ${t('app.name')} - Locale Information`));
|
|
13
|
+
console.log(chalk.gray('Current locale:'), chalk.cyan(current));
|
|
14
|
+
console.log(chalk.gray('Detected locale:'), chalk.cyan(detected));
|
|
15
|
+
console.log(chalk.gray('Available locales:'), chalk.cyan(available.join(', ')));
|
|
16
|
+
|
|
17
|
+
// Test some translations
|
|
18
|
+
console.log(chalk.bold('\n📝 Sample Translations:'));
|
|
19
|
+
console.log(` ${t('auth.login')}`);
|
|
20
|
+
console.log(` ${t('status.title')}`);
|
|
21
|
+
console.log(` ${t('setup.title')}`);
|
|
22
|
+
console.log();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Set locale
|
|
27
|
+
* @param {string} locale - Locale to set
|
|
28
|
+
*/
|
|
29
|
+
async function set(locale) {
|
|
30
|
+
const available = getAvailableLocales();
|
|
31
|
+
|
|
32
|
+
if (!available.includes(locale)) {
|
|
33
|
+
console.log(chalk.red(`\n✗ Unsupported locale: ${locale}`));
|
|
34
|
+
console.log(chalk.gray('Available locales:'), chalk.cyan(available.join(', ')));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
setLocale(locale);
|
|
39
|
+
console.log(chalk.green(`\n✓ Locale set to: ${chalk.cyan(locale)}`));
|
|
40
|
+
|
|
41
|
+
// Show sample translation
|
|
42
|
+
console.log(chalk.gray('Sample:'), t('app.name'));
|
|
43
|
+
console.log();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Test locale detection and translations
|
|
48
|
+
*/
|
|
49
|
+
async function test() {
|
|
50
|
+
console.log(chalk.bold(`\n🧪 Testing Locale System`));
|
|
51
|
+
|
|
52
|
+
const available = getAvailableLocales();
|
|
53
|
+
|
|
54
|
+
for (const locale of available) {
|
|
55
|
+
console.log(chalk.bold(`\n--- ${locale.toUpperCase()} ---`));
|
|
56
|
+
setLocale(locale);
|
|
57
|
+
|
|
58
|
+
console.log(`${t('app.name')}`);
|
|
59
|
+
console.log(`${t('auth.login')}`);
|
|
60
|
+
console.log(`${t('status.title')}`);
|
|
61
|
+
console.log(`${t('setup.title')}`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Reset to detected locale
|
|
65
|
+
setLocale(detectLocale());
|
|
66
|
+
console.log();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
module.exports = {
|
|
70
|
+
show,
|
|
71
|
+
set,
|
|
72
|
+
test
|
|
73
73
|
};
|