vibecodingmachine-cli 2026.2.26-1739 → 2026.3.9-1621
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/auth/auth-compliance.js +7 -1
- package/bin/commands/agent-commands.js +150 -228
- package/bin/commands/command-aliases.js +68 -0
- package/bin/vibecodingmachine.js +1 -2
- package/package.json +2 -2
- package/src/commands/agents/list.js +71 -115
- package/src/commands/agents-check.js +16 -4
- package/src/commands/analyze-file-sizes.js +1 -1
- package/src/commands/auto-direct/auto-provider-manager.js +290 -0
- package/src/commands/auto-direct/auto-status-display.js +331 -0
- package/src/commands/auto-direct/auto-utils.js +439 -0
- package/src/commands/auto-direct/file-operations.js +110 -0
- package/src/commands/auto-direct/provider-config.js +1 -1
- package/src/commands/auto-direct/provider-manager.js +1 -1
- package/src/commands/auto-direct/status-display.js +1 -1
- package/src/commands/auto-direct/utils.js +24 -18
- package/src/commands/auto-direct-refactored.js +413 -0
- package/src/commands/auto-direct.js +594 -188
- package/src/commands/requirements/commands.js +353 -0
- package/src/commands/requirements/default-handlers.js +272 -0
- package/src/commands/requirements/disable.js +97 -0
- package/src/commands/requirements/enable.js +97 -0
- package/src/commands/requirements/utils.js +194 -0
- package/src/commands/requirements-refactored.js +60 -0
- package/src/commands/requirements.js +38 -771
- package/src/commands/specs/disable.js +96 -0
- package/src/commands/specs/enable.js +96 -0
- package/src/trui/TruiInterface.js +5 -11
- package/src/trui/agents/AgentInterface.js +24 -396
- package/src/trui/agents/handlers/CommandHandler.js +93 -0
- package/src/trui/agents/handlers/ContextManager.js +117 -0
- package/src/trui/agents/handlers/DisplayHandler.js +243 -0
- package/src/trui/agents/handlers/HelpHandler.js +51 -0
- package/src/utils/auth.js +13 -111
- package/src/utils/config.js +5 -1
- package/src/utils/interactive/requirements-navigation.js +17 -15
- package/src/utils/interactive-broken.js +2 -2
- package/src/utils/provider-checker/agent-runner.js +15 -1
- package/src/utils/provider-checker/cli-installer.js +149 -7
- package/src/utils/provider-checker/opencode-checker.js +588 -0
- package/src/utils/provider-checker/provider-validator.js +88 -3
- package/src/utils/provider-checker/time-formatter.js +3 -2
- package/src/utils/provider-manager.js +28 -20
- package/src/utils/provider-registry.js +35 -3
- package/src/utils/requirements-navigator/index.js +94 -0
- package/src/utils/requirements-navigator/input-handler.js +217 -0
- package/src/utils/requirements-navigator/section-loader.js +188 -0
- package/src/utils/requirements-navigator/tree-builder.js +105 -0
- package/src/utils/requirements-navigator/tree-renderer.js +50 -0
- package/src/utils/requirements-navigator.js +2 -583
- package/src/utils/trui-clarifications.js +188 -0
- package/src/utils/trui-feedback.js +54 -1
- package/src/utils/trui-kiro-integration.js +398 -0
- package/src/utils/trui-main-handlers.js +194 -0
- package/src/utils/trui-main-menu.js +235 -0
- package/src/utils/trui-nav-agents.js +178 -25
- package/src/utils/trui-nav-requirements.js +203 -27
- package/src/utils/trui-nav-settings.js +114 -1
- package/src/utils/trui-nav-specifications.js +44 -3
- package/src/utils/trui-navigation-backup.js +603 -0
- package/src/utils/trui-navigation.js +70 -228
- package/src/utils/trui-provider-health.js +274 -0
- package/src/utils/trui-provider-manager.js +376 -0
- package/src/utils/trui-quick-menu.js +25 -1
- package/src/utils/trui-req-actions-backup.js +507 -0
- package/src/utils/trui-req-actions.js +148 -216
- package/src/utils/trui-req-editor.js +170 -0
- package/src/utils/trui-req-file-ops.js +278 -0
- package/src/utils/trui-req-tree-old.js +719 -0
- package/src/utils/trui-req-tree.js +348 -627
- package/src/utils/trui-specifications.js +25 -7
- package/src/utils/trui-windsurf.js +231 -10
- package/src/utils/welcome-screen-extracted.js +2 -2
- package/src/utils/welcome-screen.js +2 -2
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto Mode Status Display
|
|
3
|
+
*
|
|
4
|
+
* Handles status display and UI components for auto mode
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const chalk = require('chalk');
|
|
8
|
+
const { getStages, DEFAULT_STAGES } = require('../../../utils/config');
|
|
9
|
+
const { stripAnsi, padToVisualWidth } = require('./auto-utils');
|
|
10
|
+
|
|
11
|
+
// Global status mode tracking
|
|
12
|
+
let currentStatusMode = 'active';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Print status card with current workflow information
|
|
16
|
+
*/
|
|
17
|
+
function printStatusCard(currentTitle, currentStatus, mode = 'active') {
|
|
18
|
+
currentStatusMode = mode; // Update global mode tracking
|
|
19
|
+
|
|
20
|
+
const stages = configuredStages || DEFAULT_STAGES;
|
|
21
|
+
const currentStageIndex = stages.indexOf(currentStatus);
|
|
22
|
+
|
|
23
|
+
// Build status card
|
|
24
|
+
const width = 60;
|
|
25
|
+
const border = '─'.repeat(width);
|
|
26
|
+
|
|
27
|
+
console.log(chalk.cyan(`┌─ ${border} ─┐`));
|
|
28
|
+
console.log(chalk.cyan('│') + padToVisualWidth(` 🤖 Auto Mode Status`, width - 4) + chalk.cyan('│'));
|
|
29
|
+
console.log(chalk.cyan(`├─ ${border} ─┤`));
|
|
30
|
+
|
|
31
|
+
// Current requirement
|
|
32
|
+
if (currentTitle) {
|
|
33
|
+
const titleLine = ` 📋 ${currentTitle}`;
|
|
34
|
+
console.log(chalk.cyan('│') + padToVisualWidth(titleLine, width - 4) + chalk.cyan('│'));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Current stage
|
|
38
|
+
const statusIcon = getStatusIcon(currentStatus, mode);
|
|
39
|
+
const statusLine = ` ${statusIcon} ${currentStatus}`;
|
|
40
|
+
console.log(chalk.cyan('│') + padToVisualWidth(statusLine, width - 4) + chalk.cyan('│'));
|
|
41
|
+
|
|
42
|
+
// Progress bar
|
|
43
|
+
if (currentStageIndex >= 0) {
|
|
44
|
+
const progress = ((currentStageIndex + 1) / stages.length) * 100;
|
|
45
|
+
const progressBar = createProgressBar(progress, width - 8);
|
|
46
|
+
console.log(chalk.cyan('│') + padToVisualWidth(` ${progressBar}`, width - 4) + chalk.cyan('│'));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
console.log(chalk.cyan(`└─ ${border} ─┘`));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Get status icon based on status and mode
|
|
54
|
+
*/
|
|
55
|
+
function getStatusIcon(status, mode) {
|
|
56
|
+
const statusIcons = {
|
|
57
|
+
'PREPARE': '🔧',
|
|
58
|
+
'REPRODUCE': '🔄',
|
|
59
|
+
'ACT': '⚡',
|
|
60
|
+
'CLEAN UP': '🧹',
|
|
61
|
+
'VERIFY': '✅',
|
|
62
|
+
'DONE': '🎉'
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const baseIcon = statusIcons[status] || '❓';
|
|
66
|
+
|
|
67
|
+
if (mode === 'waiting') {
|
|
68
|
+
return '⏳';
|
|
69
|
+
} else if (mode === 'stopped') {
|
|
70
|
+
return '⏹️';
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return baseIcon;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Create progress bar
|
|
78
|
+
*/
|
|
79
|
+
function createProgressBar(percentage, width) {
|
|
80
|
+
const filled = Math.round((percentage / 100) * width);
|
|
81
|
+
const empty = width - filled;
|
|
82
|
+
|
|
83
|
+
const filledBar = '█'.repeat(filled);
|
|
84
|
+
const emptyBar = '░'.repeat(empty);
|
|
85
|
+
|
|
86
|
+
return chalk.green(filledBar) + chalk.gray(emptyBar) + ` ${Math.round(percentage)}%`;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Print workflow stages with current stage highlighted
|
|
91
|
+
*/
|
|
92
|
+
function printWorkflowStages(currentStatus) {
|
|
93
|
+
const stages = configuredStages || DEFAULT_STAGES;
|
|
94
|
+
const currentIndex = stages.indexOf(currentStatus);
|
|
95
|
+
|
|
96
|
+
console.log(chalk.blue('\n🔄 Workflow Stages:'));
|
|
97
|
+
|
|
98
|
+
stages.forEach((stage, index) => {
|
|
99
|
+
const isCurrent = index === currentIndex;
|
|
100
|
+
const isCompleted = index < currentIndex;
|
|
101
|
+
const isPending = index > currentIndex;
|
|
102
|
+
|
|
103
|
+
let icon = '⭕';
|
|
104
|
+
let color = chalk.gray;
|
|
105
|
+
|
|
106
|
+
if (isCurrent) {
|
|
107
|
+
icon = '🔵';
|
|
108
|
+
color = chalk.blue;
|
|
109
|
+
} else if (isCompleted) {
|
|
110
|
+
icon = '✅';
|
|
111
|
+
color = chalk.green;
|
|
112
|
+
} else if (isPending) {
|
|
113
|
+
icon = '⭕';
|
|
114
|
+
color = chalk.gray;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const stageText = `${icon} ${stage}`;
|
|
118
|
+
console.log(color(` ${stageText}`));
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
console.log();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Print provider information
|
|
126
|
+
*/
|
|
127
|
+
function printProviderInfo(providerName, providerConfig) {
|
|
128
|
+
console.log(chalk.blue('\n🔌 Provider Information:'));
|
|
129
|
+
console.log(chalk.cyan(` Provider: ${providerName}`));
|
|
130
|
+
|
|
131
|
+
if (providerConfig.model) {
|
|
132
|
+
console.log(chalk.cyan(` Model: ${providerConfig.model}`));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (providerConfig.baseUrl) {
|
|
136
|
+
console.log(chalk.cyan(` Base URL: ${providerConfig.baseUrl}`));
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (providerConfig.region) {
|
|
140
|
+
console.log(chalk.cyan(` Region: ${providerConfig.region}`));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
console.log();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Print rate limit warning
|
|
148
|
+
*/
|
|
149
|
+
function printRateLimitWarning(providerName, waitTime) {
|
|
150
|
+
const waitMinutes = Math.ceil(waitTime / 60000);
|
|
151
|
+
console.log(chalk.yellow(`\n⚠️ Rate limit detected for ${providerName}`));
|
|
152
|
+
console.log(chalk.yellow(` Waiting ${waitMinutes} minute(s) before retry...`));
|
|
153
|
+
console.log();
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Print error information
|
|
158
|
+
*/
|
|
159
|
+
function printError(error, context = '') {
|
|
160
|
+
console.log(chalk.red(`\n❌ Error${context ? ` (${context})` : ''}:`));
|
|
161
|
+
console.log(chalk.red(` ${error.message}`));
|
|
162
|
+
|
|
163
|
+
if (error.stack && process.env.DEBUG) {
|
|
164
|
+
console.log(chalk.gray(` Stack trace:\n${error.stack}`));
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
console.log();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Print success message
|
|
172
|
+
*/
|
|
173
|
+
function printSuccess(message) {
|
|
174
|
+
console.log(chalk.green(`\n✅ ${message}`));
|
|
175
|
+
console.log();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Print warning message
|
|
180
|
+
*/
|
|
181
|
+
function printWarning(message) {
|
|
182
|
+
console.log(chalk.yellow(`\n⚠️ ${message}`));
|
|
183
|
+
console.log();
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Print info message
|
|
188
|
+
*/
|
|
189
|
+
function printInfo(message) {
|
|
190
|
+
console.log(chalk.blue(`\nℹ️ ${message}`));
|
|
191
|
+
console.log();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Print debug message (only in debug mode)
|
|
196
|
+
*/
|
|
197
|
+
function printDebug(message) {
|
|
198
|
+
if (process.env.DEBUG || process.env.VERBOSE) {
|
|
199
|
+
console.log(chalk.gray(`🐛 DEBUG: ${message}`));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Create spinner animation
|
|
205
|
+
*/
|
|
206
|
+
function createSpinner(text) {
|
|
207
|
+
const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
208
|
+
let index = 0;
|
|
209
|
+
|
|
210
|
+
return {
|
|
211
|
+
start: () => {
|
|
212
|
+
process.stdout.write(`\r${frames[index]} ${text}`);
|
|
213
|
+
index = (index + 1) % frames.length;
|
|
214
|
+
},
|
|
215
|
+
stop: (finalText = text) => {
|
|
216
|
+
process.stdout.write(`\r✅ ${finalText}\n`);
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Print file change summary
|
|
223
|
+
*/
|
|
224
|
+
function printFileChangeSummary(changes) {
|
|
225
|
+
if (!changes || changes.length === 0) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
console.log(chalk.blue('\n📁 File Changes:'));
|
|
230
|
+
|
|
231
|
+
changes.forEach(change => {
|
|
232
|
+
const icon = getFileChangeIcon(change.type);
|
|
233
|
+
const color = getFileChangeColor(change.type);
|
|
234
|
+
console.log(color(` ${icon} ${change.path}`));
|
|
235
|
+
|
|
236
|
+
if (change.type === 'modify' && change.linesAdded) {
|
|
237
|
+
console.log(chalk.gray(` +${change.linesAdded} -${change.linesRemoved || 0} lines`));
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
console.log();
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Get file change icon
|
|
246
|
+
*/
|
|
247
|
+
function getFileChangeIcon(type) {
|
|
248
|
+
const icons = {
|
|
249
|
+
'create': '📝',
|
|
250
|
+
'modify': '✏️',
|
|
251
|
+
'delete': '🗑️',
|
|
252
|
+
'move': '📂',
|
|
253
|
+
'copy': '📋'
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
return icons[type] || '📄';
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Get file change color
|
|
261
|
+
*/
|
|
262
|
+
function getFileChangeColor(type) {
|
|
263
|
+
const colors = {
|
|
264
|
+
'create': chalk.green,
|
|
265
|
+
'modify': chalk.yellow,
|
|
266
|
+
'delete': chalk.red,
|
|
267
|
+
'move': chalk.blue,
|
|
268
|
+
'copy': chalk.cyan
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
return colors[type] || chalk.gray;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Print iteration summary
|
|
276
|
+
*/
|
|
277
|
+
function printIterationSummary(iteration, total, title, status) {
|
|
278
|
+
const percentage = Math.round((iteration / total) * 100);
|
|
279
|
+
const icon = status === 'completed' ? '✅' : '🔄';
|
|
280
|
+
|
|
281
|
+
console.log(chalk.blue(`${icon} Iteration ${iteration}/${total} (${percentage}%) - ${title}`));
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Print timing information
|
|
286
|
+
*/
|
|
287
|
+
function printTiming(startTime, endTime) {
|
|
288
|
+
const duration = endTime - startTime;
|
|
289
|
+
const seconds = Math.round(duration / 1000);
|
|
290
|
+
const minutes = Math.floor(seconds / 60);
|
|
291
|
+
const remainingSeconds = seconds % 60;
|
|
292
|
+
|
|
293
|
+
if (minutes > 0) {
|
|
294
|
+
console.log(chalk.gray(`⏱️ Duration: ${minutes}m ${remainingSeconds}s`));
|
|
295
|
+
} else {
|
|
296
|
+
console.log(chalk.gray(`⏱️ Duration: ${seconds}s`));
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Clear current line (for spinner updates)
|
|
302
|
+
*/
|
|
303
|
+
function clearLine() {
|
|
304
|
+
process.stdout.write('\r\x1b[K');
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Export configured stages (will be set by main module)
|
|
308
|
+
let configuredStages = null;
|
|
309
|
+
|
|
310
|
+
function setConfiguredStages(stages) {
|
|
311
|
+
configuredStages = stages;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
module.exports = {
|
|
315
|
+
printStatusCard,
|
|
316
|
+
printWorkflowStages,
|
|
317
|
+
printProviderInfo,
|
|
318
|
+
printRateLimitWarning,
|
|
319
|
+
printError,
|
|
320
|
+
printSuccess,
|
|
321
|
+
printWarning,
|
|
322
|
+
printInfo,
|
|
323
|
+
printDebug,
|
|
324
|
+
createSpinner,
|
|
325
|
+
printFileChangeSummary,
|
|
326
|
+
printIterationSummary,
|
|
327
|
+
printTiming,
|
|
328
|
+
clearLine,
|
|
329
|
+
setConfiguredStages,
|
|
330
|
+
currentStatusMode
|
|
331
|
+
};
|