rl-rockcli 0.0.1 → 0.0.2

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 (97) hide show
  1. package/commands/log/core/constants.js +237 -0
  2. package/commands/log/core/display.js +370 -0
  3. package/commands/log/core/search.js +330 -0
  4. package/commands/log/core/tail.js +216 -0
  5. package/commands/log/core/utils.js +424 -0
  6. package/commands/log.js +298 -0
  7. package/commands/sandbox/core/log-bridge.js +119 -0
  8. package/commands/sandbox/core/replay/analyzer.js +311 -0
  9. package/commands/sandbox/core/replay/batch-orchestrator.js +536 -0
  10. package/commands/sandbox/core/replay/batch-task.js +369 -0
  11. package/commands/sandbox/core/replay/concurrent-display.js +70 -0
  12. package/commands/sandbox/core/replay/concurrent-orchestrator.js +170 -0
  13. package/commands/sandbox/core/replay/data-source.js +86 -0
  14. package/commands/sandbox/core/replay/display.js +231 -0
  15. package/commands/sandbox/core/replay/executor.js +634 -0
  16. package/commands/sandbox/core/replay/history-fetcher.js +124 -0
  17. package/commands/sandbox/core/replay/index.js +338 -0
  18. package/commands/sandbox/core/replay/loghouse-data-source.js +177 -0
  19. package/commands/sandbox/core/replay/pid-mapping.js +26 -0
  20. package/commands/sandbox/core/replay/request.js +109 -0
  21. package/commands/sandbox/core/replay/worker.js +166 -0
  22. package/commands/sandbox/core/session.js +346 -0
  23. package/commands/sandbox/log-bridge.js +2 -0
  24. package/commands/sandbox/ray.js +2 -0
  25. package/commands/sandbox/replay/analyzer.js +311 -0
  26. package/commands/sandbox/replay/batch-orchestrator.js +536 -0
  27. package/commands/sandbox/replay/batch-task.js +369 -0
  28. package/commands/sandbox/replay/concurrent-display.js +70 -0
  29. package/commands/sandbox/replay/concurrent-orchestrator.js +170 -0
  30. package/commands/sandbox/replay/display.js +231 -0
  31. package/commands/sandbox/replay/executor.js +634 -0
  32. package/commands/sandbox/replay/history-fetcher.js +118 -0
  33. package/commands/sandbox/replay/index.js +338 -0
  34. package/commands/sandbox/replay/pid-mapping.js +26 -0
  35. package/commands/sandbox/replay/request.js +109 -0
  36. package/commands/sandbox/replay/worker.js +166 -0
  37. package/commands/sandbox/replay.js +2 -0
  38. package/commands/sandbox/session.js +2 -0
  39. package/commands/sandbox-original.js +1393 -0
  40. package/commands/sandbox.js +499 -0
  41. package/help/help.json +1071 -0
  42. package/help/middleware.js +71 -0
  43. package/help/renderer.js +800 -0
  44. package/index.js +38 -0
  45. package/lib/plugin-context.js +40 -0
  46. package/package.json +29 -43
  47. package/sdks/sandbox/core/client.js +845 -0
  48. package/sdks/sandbox/core/config.js +70 -0
  49. package/sdks/sandbox/core/types.js +74 -0
  50. package/sdks/sandbox/httpLogger.js +251 -0
  51. package/sdks/sandbox/index.js +9 -0
  52. package/utils/asciiArt.js +138 -0
  53. package/utils/bun-compat.js +59 -0
  54. package/utils/ciPipelines.js +138 -0
  55. package/utils/cli.js +17 -0
  56. package/utils/command-router.js +79 -0
  57. package/utils/configManager.js +503 -0
  58. package/utils/dependency-resolver.js +135 -0
  59. package/utils/eagleeye_traceid.js +151 -0
  60. package/utils/envDetector.js +78 -0
  61. package/utils/execution_logger.js +415 -0
  62. package/utils/featureManager.js +68 -0
  63. package/utils/firstTimeTip.js +44 -0
  64. package/utils/hook-manager.js +125 -0
  65. package/utils/http-logger.js +264 -0
  66. package/utils/i18n.js +139 -0
  67. package/utils/image-progress.js +159 -0
  68. package/utils/logger.js +154 -0
  69. package/utils/plugin-loader.js +124 -0
  70. package/utils/plugin-manager.js +348 -0
  71. package/utils/ray_cli_wrapper.js +746 -0
  72. package/utils/sandbox-client.js +419 -0
  73. package/utils/terminal.js +32 -0
  74. package/utils/tips.js +106 -0
  75. package/LICENSE +0 -21
  76. package/bin/rockcli.js +0 -40
  77. package/src/core/commands/attach/index.js +0 -242
  78. package/src/core/commands/log/constants.js +0 -20
  79. package/src/core/commands/log/index.js +0 -94
  80. package/src/core/commands/log/search.js +0 -106
  81. package/src/core/commands/sandbox/index.js +0 -428
  82. package/src/core/config/index.js +0 -77
  83. package/src/core/display/constants.js +0 -59
  84. package/src/core/display/format.js +0 -178
  85. package/src/core/display/highlight.js +0 -34
  86. package/src/core/index.js +0 -55
  87. package/src/core/providers/index.js +0 -9
  88. package/src/core/providers/log-provider.js +0 -79
  89. package/src/core/sdks/sandbox/client.js +0 -472
  90. package/src/core/sdks/sandbox/config.js +0 -57
  91. package/src/core/sdks/sandbox/index.js +0 -13
  92. package/src/core/sdks/sandbox/types.js +0 -5
  93. package/src/core/utils/index.js +0 -9
  94. package/src/core/utils/logger.js +0 -106
  95. package/src/core/utils/time.js +0 -52
  96. package/src/plugins/oss-file-log/file-client.js +0 -186
  97. package/src/plugins/oss-file-log/index.js +0 -18
@@ -0,0 +1,166 @@
1
+ const path = require('path');
2
+ const { SandboxClient, SandboxConfig } = require('../../../utils/sandbox-client');
3
+ const { ReplayExecutor } = require('./executor');
4
+ const { ReplayRequest, ReplayPlan } = require('./request');
5
+
6
+ /**
7
+ * 单个沙箱回放工作者
8
+ * 封装独立的 SandboxClient 和 ReplayExecutor
9
+ */
10
+ class ReplayWorker {
11
+ /**
12
+ * @param {number} workerId - 工作者 ID(1-based)
13
+ * @param {SandboxConfig} config - 沙箱配置
14
+ * @param {ReplayPlan} plan - 回放计划(会被深拷贝)
15
+ * @param {Object} options - 回放选项
16
+ * @param {string} options.timing - 时间控制
17
+ * @param {number} options.interval - 固定间隔
18
+ * @param {string} options.logFile - 日志文件基础路径
19
+ */
20
+ constructor(workerId, config, plan, options = {}) {
21
+ this.workerId = workerId;
22
+ this.config = config;
23
+ this.plan = this.deepClonePlan(plan);
24
+ this.options = options;
25
+
26
+ // 独立的沙箱客户端和执行器
27
+ this.client = null;
28
+ this.executor = null;
29
+
30
+ // 执行状态
31
+ this.status = 'pending'; // pending | running | completed | failed
32
+ this.error = null;
33
+ this.results = null;
34
+ this.startTime = null;
35
+ this.endTime = null;
36
+ }
37
+
38
+ /**
39
+ * 深拷贝回放计划
40
+ * 确保每个 worker 有独立的请求对象(requestBody 可能被修改)
41
+ * @param {ReplayPlan} plan
42
+ * @returns {ReplayPlan}
43
+ */
44
+ deepClonePlan(plan) {
45
+ const cloned = new ReplayPlan();
46
+ cloned.originalCount = plan.originalCount;
47
+ cloned.stats = { ...plan.stats };
48
+ cloned.pidAssociations = new Map(plan.pidAssociations);
49
+
50
+ // 深拷贝请求列表
51
+ cloned.requests = plan.requests.map(req => this.cloneRequest(req));
52
+ cloned.skippedRequests = plan.skippedRequests.map(req => this.cloneRequest(req));
53
+ cloned.mergedRequests = plan.mergedRequests.map(req => this.cloneRequest(req));
54
+
55
+ return cloned;
56
+ }
57
+
58
+ /**
59
+ * 深拷贝单个请求
60
+ * @param {ReplayRequest} req
61
+ * @returns {ReplayRequest}
62
+ */
63
+ cloneRequest(req) {
64
+ const cloned = new ReplayRequest({
65
+ method: req.method,
66
+ uri: req.uri,
67
+ requestBody: JSON.parse(JSON.stringify(req.requestBody || {})),
68
+ headers: JSON.parse(JSON.stringify(req.headers || {})),
69
+ responseTime: req.responseTime
70
+ }, req.index);
71
+
72
+ cloned.category = req.category;
73
+ cloned.action = req.action;
74
+ cloned.originalPid = req.originalPid;
75
+ cloned.skipReason = req.skipReason;
76
+
77
+ return cloned;
78
+ }
79
+
80
+ /**
81
+ * 获取 worker 专属的日志文件名
82
+ * @returns {string}
83
+ */
84
+ getLogFileName() {
85
+ const baseLogFile = this.options.logFile || 'replay.log';
86
+ const ext = path.extname(baseLogFile);
87
+ const base = path.basename(baseLogFile, ext);
88
+ const dir = path.dirname(baseLogFile);
89
+ return path.join(dir, `${base}-worker${this.workerId}${ext}`);
90
+ }
91
+
92
+ /**
93
+ * 执行回放
94
+ * @returns {Promise<WorkerResult>}
95
+ */
96
+ async execute() {
97
+ this.status = 'running';
98
+ this.startTime = Date.now();
99
+
100
+ try {
101
+ // 创建独立的 SandboxClient
102
+ this.client = new SandboxClient(this.config);
103
+
104
+ // 创建独立的 ReplayExecutor
105
+ this.executor = new ReplayExecutor(this.client, {
106
+ timing: this.options.timing,
107
+ interval: this.options.interval,
108
+ quiet: true, // 并发模式下强制静默,由 orchestrator 统一输出
109
+ logFile: this.getLogFileName(),
110
+ plan: this.plan,
111
+ workerId: this.workerId
112
+ });
113
+
114
+ // 执行回放
115
+ this.results = await this.executor.execute(this.plan);
116
+ this.status = 'completed';
117
+
118
+ } catch (error) {
119
+ this.status = 'failed';
120
+ this.error = error;
121
+ this.results = {
122
+ total: this.plan.requests.length,
123
+ success: 0,
124
+ failed: this.plan.requests.length,
125
+ skipped: 0
126
+ };
127
+ } finally {
128
+ this.endTime = Date.now();
129
+ }
130
+
131
+ return this.getWorkerResult();
132
+ }
133
+
134
+ /**
135
+ * 获取工作者执行结果
136
+ * @returns {WorkerResult}
137
+ */
138
+ getWorkerResult() {
139
+ return {
140
+ workerId: this.workerId,
141
+ status: this.status,
142
+ sandboxId: this.executor?.currentSandboxId || null,
143
+ results: this.results,
144
+ error: this.error?.message || null,
145
+ duration: this.endTime - this.startTime,
146
+ logFile: this.getLogFileName()
147
+ };
148
+ }
149
+
150
+ /**
151
+ * 获取当前进度
152
+ * @returns {Object}
153
+ */
154
+ getProgress() {
155
+ return {
156
+ workerId: this.workerId,
157
+ status: this.status,
158
+ sandboxId: this.executor?.currentSandboxId?.substring(0, 8) || null,
159
+ success: this.executor?.results?.success || 0,
160
+ failed: this.executor?.results?.failed || 0,
161
+ total: this.plan.requests.length
162
+ };
163
+ }
164
+ }
165
+
166
+ module.exports = { ReplayWorker };
@@ -0,0 +1,2 @@
1
+ // Core replay - re-export from new location
2
+ module.exports = require('./core/replay');
@@ -0,0 +1,2 @@
1
+ // Compatibility wrapper - delegates to core implementation
2
+ module.exports = require('./core/session');