rl-rockcli 0.0.7 → 0.0.8
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/index.js +15 -5
- package/package.json +2 -2
- package/commands/log/core/constants.js +0 -237
- package/commands/log/core/display.js +0 -370
- package/commands/log/core/search.js +0 -330
- package/commands/log/core/tail.js +0 -216
- package/commands/log/core/utils.js +0 -424
- package/commands/log.js +0 -298
- package/commands/sandbox/core/log-bridge.js +0 -119
- package/commands/sandbox/core/replay/analyzer.js +0 -311
- package/commands/sandbox/core/replay/batch-orchestrator.js +0 -536
- package/commands/sandbox/core/replay/batch-task.js +0 -369
- package/commands/sandbox/core/replay/concurrent-display.js +0 -70
- package/commands/sandbox/core/replay/concurrent-orchestrator.js +0 -170
- package/commands/sandbox/core/replay/data-source.js +0 -86
- package/commands/sandbox/core/replay/display.js +0 -231
- package/commands/sandbox/core/replay/executor.js +0 -634
- package/commands/sandbox/core/replay/history-fetcher.js +0 -124
- package/commands/sandbox/core/replay/index.js +0 -338
- package/commands/sandbox/core/replay/loghouse-data-source.js +0 -177
- package/commands/sandbox/core/replay/pid-mapping.js +0 -26
- package/commands/sandbox/core/replay/request.js +0 -109
- package/commands/sandbox/core/replay/worker.js +0 -166
- package/commands/sandbox/core/session.js +0 -346
- package/commands/sandbox/log-bridge.js +0 -2
- package/commands/sandbox/ray.js +0 -2
- package/commands/sandbox/replay/analyzer.js +0 -311
- package/commands/sandbox/replay/batch-orchestrator.js +0 -536
- package/commands/sandbox/replay/batch-task.js +0 -369
- package/commands/sandbox/replay/concurrent-display.js +0 -70
- package/commands/sandbox/replay/concurrent-orchestrator.js +0 -170
- package/commands/sandbox/replay/display.js +0 -231
- package/commands/sandbox/replay/executor.js +0 -634
- package/commands/sandbox/replay/history-fetcher.js +0 -118
- package/commands/sandbox/replay/index.js +0 -338
- package/commands/sandbox/replay/pid-mapping.js +0 -26
- package/commands/sandbox/replay/request.js +0 -109
- package/commands/sandbox/replay/worker.js +0 -166
- package/commands/sandbox/replay.js +0 -2
- package/commands/sandbox/session.js +0 -2
- package/commands/sandbox-original.js +0 -1393
- package/commands/sandbox.js +0 -499
- package/help/help.json +0 -1071
- package/help/middleware.js +0 -71
- package/help/renderer.js +0 -800
- package/lib/plugin-context.js +0 -40
- package/sdks/sandbox/core/client.js +0 -845
- package/sdks/sandbox/core/config.js +0 -70
- package/sdks/sandbox/core/types.js +0 -74
- package/sdks/sandbox/httpLogger.js +0 -251
- package/sdks/sandbox/index.js +0 -9
- package/utils/asciiArt.js +0 -138
- package/utils/bun-compat.js +0 -59
- package/utils/ciPipelines.js +0 -138
- package/utils/cli.js +0 -17
- package/utils/command-router.js +0 -79
- package/utils/configManager.js +0 -503
- package/utils/dependency-resolver.js +0 -135
- package/utils/eagleeye_traceid.js +0 -151
- package/utils/envDetector.js +0 -78
- package/utils/execution_logger.js +0 -415
- package/utils/featureManager.js +0 -68
- package/utils/firstTimeTip.js +0 -44
- package/utils/hook-manager.js +0 -125
- package/utils/http-logger.js +0 -264
- package/utils/i18n.js +0 -139
- package/utils/image-progress.js +0 -159
- package/utils/logger.js +0 -154
- package/utils/plugin-loader.js +0 -124
- package/utils/plugin-manager.js +0 -348
- package/utils/ray_cli_wrapper.js +0 -746
- package/utils/sandbox-client.js +0 -419
- package/utils/terminal.js +0 -32
- package/utils/tips.js +0 -106
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
const { RequestCategory, RequestAction } = require('./request');
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* 显示分析摘要
|
|
5
|
-
* @param {ReplayPlan} plan
|
|
6
|
-
* @param {Object} options
|
|
7
|
-
*/
|
|
8
|
-
function displayAnalysisSummary(plan, options = {}) {
|
|
9
|
-
const { mode = 'smart', quiet = false } = options;
|
|
10
|
-
|
|
11
|
-
if (quiet) {
|
|
12
|
-
console.log(`Replaying ${plan.executeCount}/${plan.originalCount} requests...`);
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
console.log(`\n📋 Loaded ${plan.originalCount} requests`);
|
|
17
|
-
console.log(`🔍 Mode: ${mode}\n`);
|
|
18
|
-
|
|
19
|
-
// 显示请求分析表格
|
|
20
|
-
console.log('Request Analysis:');
|
|
21
|
-
console.log('┌─────────────────────────────────┬───────┬─────────────────────────────────┐');
|
|
22
|
-
console.log('│ Category │ Count │ Action │');
|
|
23
|
-
console.log('├─────────────────────────────────┼───────┼─────────────────────────────────┤');
|
|
24
|
-
|
|
25
|
-
const { stats } = plan;
|
|
26
|
-
|
|
27
|
-
// Startup
|
|
28
|
-
if (stats.startup > 0) {
|
|
29
|
-
console.log(`│ Startup (start_async) │ ${padNumber(stats.startup)} │ ✅ Execute + wait for alive │`);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Startup Polling
|
|
33
|
-
if (stats.startupPolling > 0) {
|
|
34
|
-
const skipped = plan.skippedRequests.filter(r => r.category === RequestCategory.STARTUP_POLLING).length;
|
|
35
|
-
if (skipped === stats.startupPolling) {
|
|
36
|
-
console.log(`│ Startup polling (get_status) │ ${padNumber(stats.startupPolling)} │ ⏭️ Skip (built-in wait) │`);
|
|
37
|
-
} else {
|
|
38
|
-
console.log(`│ Startup polling (get_status) │ ${padNumber(stats.startupPolling)} │ ✅ Execute │`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Session
|
|
43
|
-
if (stats.session > 0) {
|
|
44
|
-
console.log(`│ Session (create/close) │ ${padNumber(stats.session)} │ ✅ Execute │`);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Nohup Commands
|
|
48
|
-
if (stats.nohupCommand > 0) {
|
|
49
|
-
console.log(`│ Nohup commands │ ${padNumber(stats.nohupCommand)} │ ✅ Execute + wait for process │`);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Process Check
|
|
53
|
-
if (stats.processCheck > 0) {
|
|
54
|
-
console.log(`│ Process checks (kill -0) │ ${padNumber(stats.processCheck)} │ ⏭️ Skip (auto wait in nohup) │`);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Log Query
|
|
58
|
-
if (stats.logQuery > 0) {
|
|
59
|
-
const skipped = plan.skippedRequests.filter(r => r.category === RequestCategory.LOG_QUERY).length;
|
|
60
|
-
if (skipped === stats.logQuery) {
|
|
61
|
-
console.log(`│ Log queries (head/tail) │ ${padNumber(stats.logQuery)} │ ⏭️ Skip (minimal mode) │`);
|
|
62
|
-
} else {
|
|
63
|
-
console.log(`│ Log queries (head/tail) │ ${padNumber(stats.logQuery)} │ ✅ Execute │`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Upload
|
|
68
|
-
if (stats.upload > 0) {
|
|
69
|
-
console.log(`│ Upload files │ ${padNumber(stats.upload)} │ ✅ Execute │`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Stop
|
|
73
|
-
if (stats.stop > 0) {
|
|
74
|
-
const skipped = plan.skippedRequests.filter(r => r.category === RequestCategory.STOP).length;
|
|
75
|
-
if (skipped === stats.stop) {
|
|
76
|
-
console.log(`│ Stop sandbox │ ${padNumber(stats.stop)} │ ⏭️ Skip (use --stop) │`);
|
|
77
|
-
} else {
|
|
78
|
-
console.log(`│ Stop sandbox │ ${padNumber(stats.stop)} │ ✅ Execute │`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Other
|
|
83
|
-
if (stats.other > 0) {
|
|
84
|
-
console.log(`│ Other commands │ ${padNumber(stats.other)} │ ✅ Execute │`);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
console.log('└─────────────────────────────────┴───────┴─────────────────────────────────┘');
|
|
88
|
-
|
|
89
|
-
// 显示摘要
|
|
90
|
-
const reduction = plan.originalCount > 0
|
|
91
|
-
? Math.round((1 - plan.executeCount / plan.originalCount) * 100)
|
|
92
|
-
: 0;
|
|
93
|
-
|
|
94
|
-
console.log(`\n📊 Summary: ${plan.originalCount} → ${plan.executeCount} requests`);
|
|
95
|
-
if (plan.skippedCount > 0) {
|
|
96
|
-
console.log(` - Skipped: ${plan.skippedCount}`);
|
|
97
|
-
}
|
|
98
|
-
if (plan.mergedCount > 0) {
|
|
99
|
-
console.log(` - Merged: ${plan.mergedCount}`);
|
|
100
|
-
}
|
|
101
|
-
console.log(` - To execute: ${plan.executeCount}`);
|
|
102
|
-
if (reduction > 0) {
|
|
103
|
-
console.log(` - Reduction: ${reduction}%`);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
console.log('\n⏳ Starting replay...\n');
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* 显示结果摘要
|
|
111
|
-
* @param {Object} results - 执行结果
|
|
112
|
-
* @param {Array} pidMappings - PID 映射列表
|
|
113
|
-
* @param {Object} options
|
|
114
|
-
*/
|
|
115
|
-
function displayResultsSummary(results, pidMappings = [], options = {}) {
|
|
116
|
-
const { quiet = false, logFile = 'replay.log', sandboxId = null } = options;
|
|
117
|
-
|
|
118
|
-
if (quiet) {
|
|
119
|
-
console.log(`\n✅ Done: ${results.success} success, ${results.failed} failed`);
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
console.log('\n═══════════════════════════════════════════════════════════════');
|
|
124
|
-
console.log('📊 Replay Summary');
|
|
125
|
-
console.log('═══════════════════════════════════════════════════════════════');
|
|
126
|
-
|
|
127
|
-
console.log(`Total requests: ${results.total}`);
|
|
128
|
-
console.log(`├── ✅ Successful: ${results.success}`);
|
|
129
|
-
console.log(`├── ❌ Failed: ${results.failed}`);
|
|
130
|
-
console.log(`└── ⏭️ Skipped: ${results.skipped}`);
|
|
131
|
-
|
|
132
|
-
if (sandboxId) {
|
|
133
|
-
console.log(`\nNew sandbox_id: ${sandboxId}`);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// 显示 PID 映射使用情况
|
|
137
|
-
if (pidMappings.length > 0) {
|
|
138
|
-
console.log('\nPID Mappings Used:');
|
|
139
|
-
pidMappings.forEach((mapping, index) => {
|
|
140
|
-
const prefix = index === pidMappings.length - 1 ? '└──' : '├──';
|
|
141
|
-
console.log(`${prefix} ${mapping.oldPid} → ${mapping.newPid} (used ${mapping.usageCount} times)`);
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
console.log(`\n📝 Log saved to: ${logFile}`);
|
|
146
|
-
console.log('═══════════════════════════════════════════════════════════════');
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* 显示 dry-run 摘要
|
|
151
|
-
* @param {ReplayPlan} plan
|
|
152
|
-
* @param {Object} options
|
|
153
|
-
*/
|
|
154
|
-
function displayDryRunSummary(plan, options = {}) {
|
|
155
|
-
console.log('\n🔍 Dry Run Mode - No requests will be executed\n');
|
|
156
|
-
|
|
157
|
-
// 显示将要执行的请求
|
|
158
|
-
if (plan.requests.length > 0) {
|
|
159
|
-
console.log('Requests to execute:');
|
|
160
|
-
const maxShow = 20;
|
|
161
|
-
const requests = plan.requests.slice(0, maxShow);
|
|
162
|
-
|
|
163
|
-
requests.forEach((req, index) => {
|
|
164
|
-
const action = getActionLabel(req.action);
|
|
165
|
-
console.log(` ${index + 1}. [${action}] ${req.method} ${req.getShortDescription()}`);
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
if (plan.requests.length > maxShow) {
|
|
169
|
-
console.log(` ... and ${plan.requests.length - maxShow} more`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// 显示将要跳过的请求
|
|
174
|
-
if (plan.skippedRequests.length > 0) {
|
|
175
|
-
console.log(`\nRequests to skip (${plan.skippedRequests.length}):`);
|
|
176
|
-
|
|
177
|
-
// 按跳过原因分组
|
|
178
|
-
const byReason = {};
|
|
179
|
-
plan.skippedRequests.forEach(req => {
|
|
180
|
-
const reason = req.skipReason || 'Unknown';
|
|
181
|
-
byReason[reason] = (byReason[reason] || 0) + 1;
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
Object.entries(byReason).forEach(([reason, count]) => {
|
|
185
|
-
console.log(` - ${reason}: ${count}`);
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// 显示将要合并的请求
|
|
190
|
-
if (plan.mergedRequests.length > 0) {
|
|
191
|
-
console.log(`\nRequests to merge (${plan.mergedRequests.length}):`);
|
|
192
|
-
|
|
193
|
-
const byReason = {};
|
|
194
|
-
plan.mergedRequests.forEach(req => {
|
|
195
|
-
const reason = req.skipReason || 'Merged into wait logic';
|
|
196
|
-
byReason[reason] = (byReason[reason] || 0) + 1;
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
Object.entries(byReason).forEach(([reason, count]) => {
|
|
200
|
-
console.log(` - ${reason}: ${count}`);
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
console.log('');
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// 辅助函数
|
|
208
|
-
function padNumber(num, width = 5) {
|
|
209
|
-
return String(num).padStart(width);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
function getActionLabel(action) {
|
|
213
|
-
switch (action) {
|
|
214
|
-
case RequestAction.EXECUTE:
|
|
215
|
-
return 'EXEC';
|
|
216
|
-
case RequestAction.EXECUTE_WITH_PROCESS_WAIT:
|
|
217
|
-
return 'EXEC+WAIT';
|
|
218
|
-
case RequestAction.SKIP:
|
|
219
|
-
return 'SKIP';
|
|
220
|
-
case RequestAction.MERGE:
|
|
221
|
-
return 'MERGE';
|
|
222
|
-
default:
|
|
223
|
-
return action;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
module.exports = {
|
|
228
|
-
displayAnalysisSummary,
|
|
229
|
-
displayResultsSummary,
|
|
230
|
-
displayDryRunSummary
|
|
231
|
-
};
|