vibecodingmachine-cli 2026.1.29-713 → 2026.2.20-423
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 +124 -0
- package/package.json +3 -2
- package/src/commands/agents-check.js +69 -0
- package/src/commands/auto-direct.js +930 -145
- package/src/commands/auto.js +26 -4
- package/src/commands/ide.js +2 -1
- package/src/commands/requirements.js +23 -27
- package/src/utils/auto-mode.js +4 -1
- package/src/utils/cline-js-handler.js +218 -0
- package/src/utils/config.js +22 -0
- package/src/utils/display-formatters-complete.js +229 -0
- package/src/utils/display-formatters-extracted.js +219 -0
- package/src/utils/display-formatters.js +157 -0
- package/src/utils/feedback-handler.js +143 -0
- package/src/utils/ide-detection-complete.js +126 -0
- package/src/utils/ide-detection-extracted.js +116 -0
- package/src/utils/ide-detection.js +124 -0
- package/src/utils/interactive-backup.js +5664 -0
- package/src/utils/interactive-broken.js +280 -0
- package/src/utils/interactive.js +31 -5534
- package/src/utils/provider-checker.js +410 -0
- package/src/utils/provider-manager.js +251 -0
- package/src/utils/provider-registry.js +18 -9
- package/src/utils/requirement-actions.js +884 -0
- package/src/utils/requirements-navigator.js +585 -0
- package/src/utils/rui-trui-adapter.js +311 -0
- package/src/utils/simple-trui.js +204 -0
- package/src/utils/status-helpers-extracted.js +125 -0
- package/src/utils/status-helpers.js +107 -0
- package/src/utils/trui-debug.js +261 -0
- package/src/utils/trui-feedback.js +133 -0
- package/src/utils/trui-nav-agents.js +119 -0
- package/src/utils/trui-nav-requirements.js +268 -0
- package/src/utils/trui-nav-settings.js +157 -0
- package/src/utils/trui-nav-specifications.js +139 -0
- package/src/utils/trui-navigation.js +303 -0
- package/src/utils/trui-provider-manager.js +182 -0
- package/src/utils/trui-quick-menu.js +365 -0
- package/src/utils/trui-req-actions.js +372 -0
- package/src/utils/trui-req-tree.js +534 -0
- package/src/utils/trui-specifications.js +359 -0
- package/src/utils/trui-text-editor.js +350 -0
- package/src/utils/trui-windsurf.js +336 -0
- package/src/utils/welcome-screen-extracted.js +135 -0
- package/src/utils/welcome-screen.js +134 -0
package/bin/vibecodingmachine.js
CHANGED
|
@@ -116,6 +116,7 @@ program
|
|
|
116
116
|
.command('auto:direct')
|
|
117
117
|
.description(t('cli.auto.direct'))
|
|
118
118
|
.option('-m, --max-chats <number>', 'Maximum number of iterations', parseInt)
|
|
119
|
+
.option('--provider <id>', 'Force a specific provider by ID (e.g. groq, anthropic, cursor)')
|
|
119
120
|
.action(handleDirectAutoStart);
|
|
120
121
|
|
|
121
122
|
program
|
|
@@ -141,6 +142,15 @@ program
|
|
|
141
142
|
.description(t('cli.auto.agents'))
|
|
142
143
|
.action(autoCommands.listAgents);
|
|
143
144
|
|
|
145
|
+
program
|
|
146
|
+
.command('agents:check')
|
|
147
|
+
.description('Ping all agents and show connection status')
|
|
148
|
+
.option('--provider <id>', 'Check a specific provider by ID')
|
|
149
|
+
.action(async (options) => {
|
|
150
|
+
const { checkAgents } = require('../src/commands/agents-check');
|
|
151
|
+
await checkAgents(options);
|
|
152
|
+
});
|
|
153
|
+
|
|
144
154
|
// Requirements management commands
|
|
145
155
|
program
|
|
146
156
|
.command('req:list')
|
|
@@ -149,8 +159,122 @@ program
|
|
|
149
159
|
.option('-c, --computer <hostname>', 'Filter by computer hostname')
|
|
150
160
|
.option('-f, --focus <area>', 'Filter by focus area')
|
|
151
161
|
.option('-a, --all-computers', 'Show requirements from all computers with computer tags')
|
|
162
|
+
.option('-d, --detailed', 'Show detailed requirement information')
|
|
152
163
|
.action(reqCommands.list);
|
|
153
164
|
|
|
165
|
+
// Helper: print requirements in tree format
|
|
166
|
+
async function printRequirementsTree() {
|
|
167
|
+
const { loadAllSections } = require('../src/utils/trui-req-tree');
|
|
168
|
+
const sections = await loadAllSections();
|
|
169
|
+
|
|
170
|
+
const total = sections.verified.length + sections.verify.length + sections.todo.length;
|
|
171
|
+
const pct = n => total > 0 ? ` — ${Math.round((n / total) * 100)}%` : '';
|
|
172
|
+
|
|
173
|
+
// Specifications
|
|
174
|
+
try {
|
|
175
|
+
const { getSpecsList } = require('../src/utils/trui-specifications');
|
|
176
|
+
const specs = await getSpecsList();
|
|
177
|
+
console.log(` ▸ 📋 TODO SPECIFICATIONS (${specs.length})`);
|
|
178
|
+
} catch (_) {
|
|
179
|
+
console.log(' ▸ 📋 TODO SPECIFICATIONS');
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const printSection = (icon, label, items) => {
|
|
183
|
+
const count = items.length;
|
|
184
|
+
console.log(` ▸ ${icon} ${label} (${count}${pct(count)})`);
|
|
185
|
+
items.forEach(req => console.log(` ${req.title || req}`));
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
printSection('🎉', 'VERIFIED', sections.verified);
|
|
189
|
+
printSection('✅', 'TO VERIFY', sections.verify);
|
|
190
|
+
printSection('⏳', 'TODO REQUIREMENTS', sections.todo);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Helper: print agents list
|
|
194
|
+
async function printAgentsList() {
|
|
195
|
+
const { getProviderDefinitions, getProviderPreferences } = require('../src/utils/provider-registry');
|
|
196
|
+
const defs = getProviderDefinitions();
|
|
197
|
+
const defMap = new Map(defs.map(d => [d.id, d]));
|
|
198
|
+
const prefs = await getProviderPreferences();
|
|
199
|
+
const order = prefs.order.slice();
|
|
200
|
+
defs.forEach(d => { if (!order.includes(d.id)) order.push(d.id); });
|
|
201
|
+
|
|
202
|
+
console.log(' 🤖 Agents / Providers\n');
|
|
203
|
+
order.forEach((id, idx) => {
|
|
204
|
+
const def = defMap.get(id);
|
|
205
|
+
if (!def) return;
|
|
206
|
+
const isEnabled = prefs.enabled[id] !== false;
|
|
207
|
+
const statusIcon = isEnabled ? '🟢' : '🔴';
|
|
208
|
+
const interfaceIcon = def.type === 'ide' ? '🖥️ ' : '⚡';
|
|
209
|
+
const providerIcon = (def.type === 'direct' && def.category === 'llm' && id === 'ollama') ? '🏠' : '☁️ ';
|
|
210
|
+
console.log(` ${statusIcon} ${interfaceIcon} ${providerIcon} #${idx + 1} ${def.name} (${id})`);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Helper: print settings
|
|
215
|
+
async function printSettingsList() {
|
|
216
|
+
const { getAutoConfig, getRepoPath, getStages } = require('../src/utils/config');
|
|
217
|
+
const os = require('os');
|
|
218
|
+
|
|
219
|
+
const repoPath = await getRepoPath();
|
|
220
|
+
const autoConfig = await getAutoConfig();
|
|
221
|
+
const stages = await getStages();
|
|
222
|
+
|
|
223
|
+
console.log(' ⚙️ Settings\n');
|
|
224
|
+
console.log(` repo: ${repoPath || '(not set)'}`);
|
|
225
|
+
console.log(` ide: ${autoConfig.ide || autoConfig.agent || 'cline'}`);
|
|
226
|
+
console.log(` maxChats: ${autoConfig.maxChats || '(unlimited)'}`);
|
|
227
|
+
console.log(` neverStop:${autoConfig.neverStop ? ' true' : ' false'}`);
|
|
228
|
+
console.log(` stages: ${stages.join(', ')}`);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Helper: print system info
|
|
232
|
+
async function printSystemInfo() {
|
|
233
|
+
const os = require('os');
|
|
234
|
+
const { getRepoPath } = require('../src/utils/config');
|
|
235
|
+
const { checkAutoModeStatus } = require('../src/utils/auto-mode');
|
|
236
|
+
|
|
237
|
+
const repoPath = await getRepoPath();
|
|
238
|
+
let autoStatus = { running: false };
|
|
239
|
+
try { autoStatus = await checkAutoModeStatus(); } catch (_) {}
|
|
240
|
+
|
|
241
|
+
console.log(' 🖥️ System\n');
|
|
242
|
+
console.log(` hostname: ${os.hostname()}`);
|
|
243
|
+
console.log(` platform: ${os.platform()} ${os.release()}`);
|
|
244
|
+
console.log(` node: ${process.version}`);
|
|
245
|
+
console.log(` repo: ${repoPath || '(not set)'}`);
|
|
246
|
+
console.log(` auto mode: ${autoStatus.running ? '🟢 running' : '🔴 stopped'}`);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Dispatch for list/GET resource
|
|
250
|
+
async function dispatchResource(resource, verb) {
|
|
251
|
+
const r = (resource || '').toLowerCase();
|
|
252
|
+
if (r === 'requirements' || r === 'reqs' || r === 'req') {
|
|
253
|
+
await printRequirementsTree();
|
|
254
|
+
} else if (r === 'agents' || r === 'agent' || r === 'providers') {
|
|
255
|
+
await printAgentsList();
|
|
256
|
+
} else if (r === 'settings' || r === 'setting' || r === 'config') {
|
|
257
|
+
await printSettingsList();
|
|
258
|
+
} else if (r === 'system' || r === 'sys' || r === 'info') {
|
|
259
|
+
await printSystemInfo();
|
|
260
|
+
} else {
|
|
261
|
+
console.log(`Usage: vcm ${verb} <resource>`);
|
|
262
|
+
console.log('Resources: requirements, agents, settings, system');
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// RUI-compliant app commands for requirements
|
|
268
|
+
program
|
|
269
|
+
.command('list [resource]')
|
|
270
|
+
.description('List resources (RUI pattern): requirements, agents, settings, system')
|
|
271
|
+
.action(async (resource) => dispatchResource(resource, 'list'));
|
|
272
|
+
|
|
273
|
+
program
|
|
274
|
+
.command('get [resource]')
|
|
275
|
+
.description('GET resource (RUI pattern): requirements, agents, settings, system')
|
|
276
|
+
.action(async (resource) => dispatchResource(resource, 'get'));
|
|
277
|
+
|
|
154
278
|
program
|
|
155
279
|
.command('req:add <requirement>')
|
|
156
280
|
.description(t('cli.req.add'))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibecodingmachine-cli",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.02.20-0423",
|
|
4
4
|
"description": "Command-line interface for Vibe Coding Machine - Autonomous development",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
19
|
"postinstall": "node scripts/postinstall.js",
|
|
20
|
+
"build": "echo 'CLI package - no build step needed'",
|
|
20
21
|
"test": "jest",
|
|
21
22
|
"test:watch": "jest --watch",
|
|
22
23
|
"lint": "eslint src/ --ext .js",
|
|
@@ -52,7 +53,7 @@
|
|
|
52
53
|
"react": "^19.2.0",
|
|
53
54
|
"screenshot-desktop": "^1.15.3",
|
|
54
55
|
"table": "^6.8.1",
|
|
55
|
-
"vibecodingmachine-core": "^2026.
|
|
56
|
+
"vibecodingmachine-core": "^2026.02.20-0423"
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
59
|
"eslint": "^8.57.0",
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const { getAutoConfig, getProviderCache, setProviderCache, getRepoPath } = require('../utils/config');
|
|
5
|
+
const { getProviderDefinitions } = require('../utils/provider-registry');
|
|
6
|
+
const { checkAllProviders, formatCheckedAt } = require('../utils/provider-checker');
|
|
7
|
+
|
|
8
|
+
async function checkAgents(options = {}) {
|
|
9
|
+
const config = await getAutoConfig();
|
|
10
|
+
const definitions = getProviderDefinitions();
|
|
11
|
+
const providerIds = options.provider
|
|
12
|
+
? definitions.filter(d => d.id === options.provider).map(d => d.id)
|
|
13
|
+
: definitions.map(d => d.id);
|
|
14
|
+
|
|
15
|
+
if (providerIds.length === 0) {
|
|
16
|
+
console.log(chalk.red(`\n✗ Unknown provider: ${options.provider}\n`));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const repoPath = await getRepoPath();
|
|
21
|
+
if (!repoPath) {
|
|
22
|
+
console.log(chalk.red('\n✗ No repository path set. Run: vcm repo:set <path>\n'));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
console.log(chalk.bold(`\n🔍 Checking ${providerIds.length} agent${providerIds.length !== 1 ? 's' : ''}...\n`));
|
|
27
|
+
|
|
28
|
+
const results = await checkAllProviders(providerIds, config, repoPath);
|
|
29
|
+
|
|
30
|
+
// Persist to providerCache — merge lastCheck into each existing provider entry
|
|
31
|
+
const existingCache = await getProviderCache();
|
|
32
|
+
const cacheUpdate = {};
|
|
33
|
+
for (const [id, result] of Object.entries(results)) {
|
|
34
|
+
cacheUpdate[id] = { ...(existingCache[id] || {}), lastCheck: result };
|
|
35
|
+
}
|
|
36
|
+
await setProviderCache(cacheUpdate);
|
|
37
|
+
|
|
38
|
+
// Display results
|
|
39
|
+
let successCount = 0;
|
|
40
|
+
for (const id of providerIds) {
|
|
41
|
+
const def = definitions.find(d => d.id === id);
|
|
42
|
+
const name = def ? def.name : id;
|
|
43
|
+
const result = results[id];
|
|
44
|
+
|
|
45
|
+
if (result.status === 'success') {
|
|
46
|
+
successCount++;
|
|
47
|
+
console.log(
|
|
48
|
+
chalk.green(' ✓') + ` ${name}` +
|
|
49
|
+
chalk.gray(` — ${result.message}`) +
|
|
50
|
+
chalk.gray(` (checked on ${formatCheckedAt(result.checkedAt)})`)
|
|
51
|
+
);
|
|
52
|
+
} else {
|
|
53
|
+
console.log(
|
|
54
|
+
chalk.red(' ✗') + ` ${name}` +
|
|
55
|
+
chalk.red(` — ${result.message}`)
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const total = providerIds.length;
|
|
61
|
+
console.log();
|
|
62
|
+
if (successCount === total) {
|
|
63
|
+
console.log(chalk.green(`All ${total} agents reachable.\n`));
|
|
64
|
+
} else {
|
|
65
|
+
console.log(chalk.yellow(`${successCount}/${total} agents reachable.\n`));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
module.exports = { checkAgents };
|