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.
Files changed (45) hide show
  1. package/bin/vibecodingmachine.js +124 -0
  2. package/package.json +3 -2
  3. package/src/commands/agents-check.js +69 -0
  4. package/src/commands/auto-direct.js +930 -145
  5. package/src/commands/auto.js +26 -4
  6. package/src/commands/ide.js +2 -1
  7. package/src/commands/requirements.js +23 -27
  8. package/src/utils/auto-mode.js +4 -1
  9. package/src/utils/cline-js-handler.js +218 -0
  10. package/src/utils/config.js +22 -0
  11. package/src/utils/display-formatters-complete.js +229 -0
  12. package/src/utils/display-formatters-extracted.js +219 -0
  13. package/src/utils/display-formatters.js +157 -0
  14. package/src/utils/feedback-handler.js +143 -0
  15. package/src/utils/ide-detection-complete.js +126 -0
  16. package/src/utils/ide-detection-extracted.js +116 -0
  17. package/src/utils/ide-detection.js +124 -0
  18. package/src/utils/interactive-backup.js +5664 -0
  19. package/src/utils/interactive-broken.js +280 -0
  20. package/src/utils/interactive.js +31 -5534
  21. package/src/utils/provider-checker.js +410 -0
  22. package/src/utils/provider-manager.js +251 -0
  23. package/src/utils/provider-registry.js +18 -9
  24. package/src/utils/requirement-actions.js +884 -0
  25. package/src/utils/requirements-navigator.js +585 -0
  26. package/src/utils/rui-trui-adapter.js +311 -0
  27. package/src/utils/simple-trui.js +204 -0
  28. package/src/utils/status-helpers-extracted.js +125 -0
  29. package/src/utils/status-helpers.js +107 -0
  30. package/src/utils/trui-debug.js +261 -0
  31. package/src/utils/trui-feedback.js +133 -0
  32. package/src/utils/trui-nav-agents.js +119 -0
  33. package/src/utils/trui-nav-requirements.js +268 -0
  34. package/src/utils/trui-nav-settings.js +157 -0
  35. package/src/utils/trui-nav-specifications.js +139 -0
  36. package/src/utils/trui-navigation.js +303 -0
  37. package/src/utils/trui-provider-manager.js +182 -0
  38. package/src/utils/trui-quick-menu.js +365 -0
  39. package/src/utils/trui-req-actions.js +372 -0
  40. package/src/utils/trui-req-tree.js +534 -0
  41. package/src/utils/trui-specifications.js +359 -0
  42. package/src/utils/trui-text-editor.js +350 -0
  43. package/src/utils/trui-windsurf.js +336 -0
  44. package/src/utils/welcome-screen-extracted.js +135 -0
  45. package/src/utils/welcome-screen.js +134 -0
@@ -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.01.29-0713",
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.01.29-0713"
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 };