buildhive-agent 1.0.0-beta.1
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/README.md +166 -0
- package/dist/__tests__/fakes/FakeDockerManager.d.ts +115 -0
- package/dist/__tests__/fakes/FakeDockerManager.d.ts.map +1 -0
- package/dist/__tests__/fakes/FakeDockerManager.js +203 -0
- package/dist/__tests__/fakes/FakeDockerManager.js.map +1 -0
- package/dist/acceptanceChecker.d.ts +26 -0
- package/dist/acceptanceChecker.d.ts.map +1 -0
- package/dist/acceptanceChecker.js +64 -0
- package/dist/acceptanceChecker.js.map +1 -0
- package/dist/advancedAgent.d.ts +161 -0
- package/dist/advancedAgent.d.ts.map +1 -0
- package/dist/advancedAgent.js +604 -0
- package/dist/advancedAgent.js.map +1 -0
- package/dist/agent.d.ts +101 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +490 -0
- package/dist/agent.js.map +1 -0
- package/dist/api/jobStatusApi.d.ts +88 -0
- package/dist/api/jobStatusApi.d.ts.map +1 -0
- package/dist/api/jobStatusApi.js +240 -0
- package/dist/api/jobStatusApi.js.map +1 -0
- package/dist/autoUpdater.d.ts +135 -0
- package/dist/autoUpdater.d.ts.map +1 -0
- package/dist/autoUpdater.js +494 -0
- package/dist/autoUpdater.js.map +1 -0
- package/dist/cacheManager.d.ts +108 -0
- package/dist/cacheManager.d.ts.map +1 -0
- package/dist/cacheManager.js +300 -0
- package/dist/cacheManager.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +749 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/index.d.ts +30 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +35 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +45 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +269 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +193 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +90 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +28 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +397 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/docker.d.ts +96 -0
- package/dist/docker.d.ts.map +1 -0
- package/dist/docker.js +411 -0
- package/dist/docker.js.map +1 -0
- package/dist/enhancedJobExecutor.d.ts +81 -0
- package/dist/enhancedJobExecutor.d.ts.map +1 -0
- package/dist/enhancedJobExecutor.js +223 -0
- package/dist/enhancedJobExecutor.js.map +1 -0
- package/dist/executors/executorFactory.d.ts +46 -0
- package/dist/executors/executorFactory.d.ts.map +1 -0
- package/dist/executors/executorFactory.js +80 -0
- package/dist/executors/executorFactory.js.map +1 -0
- package/dist/executors/index.d.ts +7 -0
- package/dist/executors/index.d.ts.map +1 -0
- package/dist/executors/index.js +6 -0
- package/dist/executors/index.js.map +1 -0
- package/dist/executors/nativeExecutor.d.ts +60 -0
- package/dist/executors/nativeExecutor.d.ts.map +1 -0
- package/dist/executors/nativeExecutor.js +311 -0
- package/dist/executors/nativeExecutor.js.map +1 -0
- package/dist/executors/types.d.ts +38 -0
- package/dist/executors/types.d.ts.map +1 -0
- package/dist/executors/types.js +9 -0
- package/dist/executors/types.js.map +1 -0
- package/dist/healthMonitor.d.ts +213 -0
- package/dist/healthMonitor.d.ts.map +1 -0
- package/dist/healthMonitor.js +547 -0
- package/dist/healthMonitor.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/jobExecutor.d.ts +117 -0
- package/dist/jobExecutor.d.ts.map +1 -0
- package/dist/jobExecutor.js +458 -0
- package/dist/jobExecutor.js.map +1 -0
- package/dist/lifecycleExecutor.d.ts +54 -0
- package/dist/lifecycleExecutor.d.ts.map +1 -0
- package/dist/lifecycleExecutor.js +230 -0
- package/dist/lifecycleExecutor.js.map +1 -0
- package/dist/main.d.ts +15 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +77 -0
- package/dist/main.js.map +1 -0
- package/dist/metrics.d.ts +103 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +360 -0
- package/dist/metrics.js.map +1 -0
- package/dist/recipes/builtinRecipes.d.ts +11 -0
- package/dist/recipes/builtinRecipes.d.ts.map +1 -0
- package/dist/recipes/builtinRecipes.js +688 -0
- package/dist/recipes/builtinRecipes.js.map +1 -0
- package/dist/recipes/index.d.ts +18 -0
- package/dist/recipes/index.d.ts.map +1 -0
- package/dist/recipes/index.js +17 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/recipes/recipeRegistry.d.ts +49 -0
- package/dist/recipes/recipeRegistry.d.ts.map +1 -0
- package/dist/recipes/recipeRegistry.js +264 -0
- package/dist/recipes/recipeRegistry.js.map +1 -0
- package/dist/recipes/types.d.ts +116 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +10 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/recovery.d.ts +133 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +299 -0
- package/dist/recovery.js.map +1 -0
- package/dist/registration/apiClient.d.ts +44 -0
- package/dist/registration/apiClient.d.ts.map +1 -0
- package/dist/registration/apiClient.js +149 -0
- package/dist/registration/apiClient.js.map +1 -0
- package/dist/registration/index.d.ts +41 -0
- package/dist/registration/index.d.ts.map +1 -0
- package/dist/registration/index.js +141 -0
- package/dist/registration/index.js.map +1 -0
- package/dist/registration/machineId.d.ts +30 -0
- package/dist/registration/machineId.d.ts.map +1 -0
- package/dist/registration/machineId.js +89 -0
- package/dist/registration/machineId.js.map +1 -0
- package/dist/registration/types.d.ts +32 -0
- package/dist/registration/types.d.ts.map +1 -0
- package/dist/registration/types.js +9 -0
- package/dist/registration/types.js.map +1 -0
- package/dist/resourceGovernor.d.ts +57 -0
- package/dist/resourceGovernor.d.ts.map +1 -0
- package/dist/resourceGovernor.js +125 -0
- package/dist/resourceGovernor.js.map +1 -0
- package/dist/security/secretManager.d.ts +107 -0
- package/dist/security/secretManager.d.ts.map +1 -0
- package/dist/security/secretManager.js +361 -0
- package/dist/security/secretManager.js.map +1 -0
- package/dist/security.d.ts +134 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +470 -0
- package/dist/security.js.map +1 -0
- package/dist/storage/artifactUploader.d.ts +155 -0
- package/dist/storage/artifactUploader.d.ts.map +1 -0
- package/dist/storage/artifactUploader.js +554 -0
- package/dist/storage/artifactUploader.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/capabilities.d.ts +23 -0
- package/dist/utils/capabilities.d.ts.map +1 -0
- package/dist/utils/capabilities.js +200 -0
- package/dist/utils/capabilities.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +188 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/sdkScanner.d.ts +105 -0
- package/dist/utils/sdkScanner.d.ts.map +1 -0
- package/dist/utils/sdkScanner.js +459 -0
- package/dist/utils/sdkScanner.js.map +1 -0
- package/dist/websocketClient.d.ts +154 -0
- package/dist/websocketClient.d.ts.map +1 -0
- package/dist/websocketClient.js +422 -0
- package/dist/websocketClient.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native Executor - Non-Docker job execution
|
|
3
|
+
*
|
|
4
|
+
* Runs build commands directly on the host OS in an isolated temp workspace.
|
|
5
|
+
* Designed for iOS/macOS builds that require native toolchains (Xcode, etc.)
|
|
6
|
+
* which are not available inside Docker containers.
|
|
7
|
+
*
|
|
8
|
+
* Security model:
|
|
9
|
+
* - Jobs run in an isolated temp directory (not the developer's workspace)
|
|
10
|
+
* - Environment variables are explicitly injected (PATH preserved)
|
|
11
|
+
* - Timeout enforcement with graceful shutdown (SIGTERM → 10s → SIGKILL)
|
|
12
|
+
*/
|
|
13
|
+
import { spawn } from 'child_process';
|
|
14
|
+
import { promises as fs } from 'fs';
|
|
15
|
+
import { join } from 'path';
|
|
16
|
+
import { tmpdir } from 'os';
|
|
17
|
+
import { randomUUID } from 'crypto';
|
|
18
|
+
export class NativeExecutor {
|
|
19
|
+
config;
|
|
20
|
+
type = 'native';
|
|
21
|
+
tempWorkspaces = new Set();
|
|
22
|
+
constructor(config = {}) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
}
|
|
25
|
+
async validate() {
|
|
26
|
+
const errors = [];
|
|
27
|
+
// 1. Check OS is macOS or Linux
|
|
28
|
+
const platform = process.platform;
|
|
29
|
+
if (platform !== 'darwin' && platform !== 'linux') {
|
|
30
|
+
errors.push(`Native execution is not supported on ${platform}. Requires macOS or Linux.`);
|
|
31
|
+
}
|
|
32
|
+
// 2. Check temp directory is writable
|
|
33
|
+
const testDir = join(tmpdir(), `buildhive-validate-${randomUUID()}`);
|
|
34
|
+
try {
|
|
35
|
+
await fs.mkdir(testDir, { recursive: true });
|
|
36
|
+
const testFile = join(testDir, 'test');
|
|
37
|
+
await fs.writeFile(testFile, 'test');
|
|
38
|
+
await fs.rm(testDir, { recursive: true, force: true });
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
errors.push(`Temp directory ${tmpdir()} is not writable`);
|
|
42
|
+
}
|
|
43
|
+
// 3. Check shell is available
|
|
44
|
+
const shellAvailable = await this.checkShellAvailable();
|
|
45
|
+
if (!shellAvailable) {
|
|
46
|
+
errors.push('No supported shell found (bash or zsh)');
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
valid: errors.length === 0,
|
|
50
|
+
errors,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async execute(options) {
|
|
54
|
+
const startTime = Date.now();
|
|
55
|
+
const timeout = options.timeout ?? this.config.defaultTimeout ?? 600_000; // 10 min default
|
|
56
|
+
// 1. Create isolated workspace
|
|
57
|
+
const workspace = join(tmpdir(), `buildhive-native-${randomUUID()}`);
|
|
58
|
+
await fs.mkdir(workspace, { recursive: true });
|
|
59
|
+
this.tempWorkspaces.add(workspace);
|
|
60
|
+
// Ensure workDir exists (may be the workspace itself or a subdirectory)
|
|
61
|
+
const workDir = options.workDir || workspace;
|
|
62
|
+
await fs.mkdir(workDir, { recursive: true });
|
|
63
|
+
let stdout = '';
|
|
64
|
+
let stderr = '';
|
|
65
|
+
let logs = '';
|
|
66
|
+
try {
|
|
67
|
+
// 2. Build environment: preserve PATH and SDK paths, merge user env
|
|
68
|
+
const environment = this.buildEnvironment(options.environment);
|
|
69
|
+
// 3. Resolve shell
|
|
70
|
+
const shell = await this.resolveShell();
|
|
71
|
+
// 4. Spawn child process
|
|
72
|
+
const result = await new Promise((resolve, reject) => {
|
|
73
|
+
const proc = spawn(shell, ['-c', options.command], {
|
|
74
|
+
cwd: workDir,
|
|
75
|
+
env: environment,
|
|
76
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
77
|
+
});
|
|
78
|
+
let killed = false;
|
|
79
|
+
let killTimer;
|
|
80
|
+
// Timeout enforcement: SIGTERM then SIGKILL after 10s
|
|
81
|
+
const timeoutTimer = setTimeout(() => {
|
|
82
|
+
if (!killed) {
|
|
83
|
+
killed = true;
|
|
84
|
+
proc.kill('SIGTERM');
|
|
85
|
+
killTimer = setTimeout(() => {
|
|
86
|
+
proc.kill('SIGKILL');
|
|
87
|
+
}, 10_000);
|
|
88
|
+
}
|
|
89
|
+
}, timeout);
|
|
90
|
+
// Abort signal handling
|
|
91
|
+
const onAbort = () => {
|
|
92
|
+
if (!killed) {
|
|
93
|
+
killed = true;
|
|
94
|
+
proc.kill('SIGTERM');
|
|
95
|
+
killTimer = setTimeout(() => {
|
|
96
|
+
proc.kill('SIGKILL');
|
|
97
|
+
}, 10_000);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
if (options.abortSignal) {
|
|
101
|
+
options.abortSignal.addEventListener('abort', onAbort, { once: true });
|
|
102
|
+
}
|
|
103
|
+
// Stream stdout
|
|
104
|
+
proc.stdout?.on('data', (data) => {
|
|
105
|
+
const text = data.toString();
|
|
106
|
+
stdout += text;
|
|
107
|
+
// Stream line by line to onLog
|
|
108
|
+
const lines = text.split('\n');
|
|
109
|
+
for (const line of lines) {
|
|
110
|
+
if (line.length > 0) {
|
|
111
|
+
logs += line + '\n';
|
|
112
|
+
options.onLog?.(line);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// Stream stderr
|
|
117
|
+
proc.stderr?.on('data', (data) => {
|
|
118
|
+
const text = data.toString();
|
|
119
|
+
stderr += text;
|
|
120
|
+
const lines = text.split('\n');
|
|
121
|
+
for (const line of lines) {
|
|
122
|
+
if (line.length > 0) {
|
|
123
|
+
logs += line + '\n';
|
|
124
|
+
options.onLog?.(line);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
proc.on('close', (code) => {
|
|
129
|
+
clearTimeout(timeoutTimer);
|
|
130
|
+
if (killTimer)
|
|
131
|
+
clearTimeout(killTimer);
|
|
132
|
+
if (options.abortSignal) {
|
|
133
|
+
options.abortSignal.removeEventListener('abort', onAbort);
|
|
134
|
+
}
|
|
135
|
+
if (killed && code === null) {
|
|
136
|
+
resolve({ exitCode: 143 }); // SIGTERM exit code
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
resolve({ exitCode: code ?? 1 });
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
proc.on('error', (err) => {
|
|
143
|
+
clearTimeout(timeoutTimer);
|
|
144
|
+
if (killTimer)
|
|
145
|
+
clearTimeout(killTimer);
|
|
146
|
+
if (options.abortSignal) {
|
|
147
|
+
options.abortSignal.removeEventListener('abort', onAbort);
|
|
148
|
+
}
|
|
149
|
+
reject(err);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
// 5. Collect artifacts
|
|
153
|
+
const artifacts = await this.collectArtifacts(workDir, options.artifactPaths || []);
|
|
154
|
+
const durationMs = Date.now() - startTime;
|
|
155
|
+
return {
|
|
156
|
+
exitCode: result.exitCode,
|
|
157
|
+
stdout,
|
|
158
|
+
stderr,
|
|
159
|
+
durationMs,
|
|
160
|
+
artifacts,
|
|
161
|
+
logs,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
const durationMs = Date.now() - startTime;
|
|
166
|
+
return {
|
|
167
|
+
exitCode: 1,
|
|
168
|
+
stdout,
|
|
169
|
+
stderr: stderr + (error instanceof Error ? error.message : String(error)),
|
|
170
|
+
durationMs,
|
|
171
|
+
artifacts: [],
|
|
172
|
+
logs,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async cleanup() {
|
|
177
|
+
const removePromises = Array.from(this.tempWorkspaces).map(async (dir) => {
|
|
178
|
+
try {
|
|
179
|
+
await fs.rm(dir, { recursive: true, force: true });
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Ignore cleanup errors
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
await Promise.all(removePromises);
|
|
186
|
+
this.tempWorkspaces.clear();
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Build the environment for the child process.
|
|
190
|
+
* Preserves PATH and common SDK paths from the system, then merges user-provided vars.
|
|
191
|
+
*/
|
|
192
|
+
buildEnvironment(userEnv) {
|
|
193
|
+
// Start with essential system env vars
|
|
194
|
+
const base = {};
|
|
195
|
+
// Preserve PATH
|
|
196
|
+
if (process.env.PATH) {
|
|
197
|
+
base.PATH = process.env.PATH;
|
|
198
|
+
}
|
|
199
|
+
// Preserve common SDK paths
|
|
200
|
+
const sdkVars = [
|
|
201
|
+
'HOME',
|
|
202
|
+
'USER',
|
|
203
|
+
'SHELL',
|
|
204
|
+
'LANG',
|
|
205
|
+
'JAVA_HOME',
|
|
206
|
+
'ANDROID_HOME',
|
|
207
|
+
'ANDROID_SDK_ROOT',
|
|
208
|
+
'DEVELOPER_DIR', // Xcode
|
|
209
|
+
'SDKROOT',
|
|
210
|
+
];
|
|
211
|
+
for (const key of sdkVars) {
|
|
212
|
+
if (process.env[key]) {
|
|
213
|
+
base[key] = process.env[key];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Merge user-provided environment (overrides base)
|
|
217
|
+
return { ...base, ...(userEnv || {}) };
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Resolve the best available shell.
|
|
221
|
+
*/
|
|
222
|
+
async resolveShell() {
|
|
223
|
+
// Prefer bash, fall back to zsh, then sh
|
|
224
|
+
for (const shell of ['/bin/bash', '/bin/zsh', '/bin/sh']) {
|
|
225
|
+
try {
|
|
226
|
+
await fs.access(shell);
|
|
227
|
+
return shell;
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return '/bin/sh';
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Check if a supported shell is available.
|
|
237
|
+
*/
|
|
238
|
+
async checkShellAvailable() {
|
|
239
|
+
for (const shell of ['/bin/bash', '/bin/zsh', '/bin/sh']) {
|
|
240
|
+
try {
|
|
241
|
+
await fs.access(shell);
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Collect artifacts matching glob-like patterns from the workDir.
|
|
252
|
+
* Walks the directory tree and matches files against the patterns.
|
|
253
|
+
* Patterns can include ** for recursive matching and * for single-segment matching.
|
|
254
|
+
*/
|
|
255
|
+
async collectArtifacts(workDir, patterns) {
|
|
256
|
+
if (patterns.length === 0) {
|
|
257
|
+
return [];
|
|
258
|
+
}
|
|
259
|
+
const allFiles = await this.walkDirectory(workDir);
|
|
260
|
+
const matched = [];
|
|
261
|
+
for (const filePath of allFiles) {
|
|
262
|
+
// Get path relative to workDir
|
|
263
|
+
const relativePath = filePath.substring(workDir.length + 1);
|
|
264
|
+
for (const pattern of patterns) {
|
|
265
|
+
if (this.matchPattern(relativePath, pattern)) {
|
|
266
|
+
matched.push(filePath);
|
|
267
|
+
break; // Don't add same file twice
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return matched;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Recursively walk a directory and return all file paths.
|
|
275
|
+
*/
|
|
276
|
+
async walkDirectory(dir) {
|
|
277
|
+
const files = [];
|
|
278
|
+
try {
|
|
279
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
280
|
+
for (const entry of entries) {
|
|
281
|
+
const fullPath = join(dir, entry.name);
|
|
282
|
+
if (entry.isDirectory()) {
|
|
283
|
+
const subFiles = await this.walkDirectory(fullPath);
|
|
284
|
+
files.push(...subFiles);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
files.push(fullPath);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
// Directory doesn't exist or isn't readable
|
|
293
|
+
}
|
|
294
|
+
return files;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Simple glob-like pattern matching.
|
|
298
|
+
* Supports * (any segment chars) and ** (any path depth).
|
|
299
|
+
*/
|
|
300
|
+
matchPattern(filePath, pattern) {
|
|
301
|
+
// Convert glob to regex
|
|
302
|
+
const regexStr = pattern
|
|
303
|
+
.replace(/\./g, '\\.')
|
|
304
|
+
.replace(/\*\*/g, '{{GLOBSTAR}}')
|
|
305
|
+
.replace(/\*/g, '[^/]*')
|
|
306
|
+
.replace(/\{\{GLOBSTAR\}\}/g, '.*');
|
|
307
|
+
const regex = new RegExp(`^${regexStr}$`);
|
|
308
|
+
return regex.test(filePath);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=nativeExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeExecutor.js","sourceRoot":"","sources":["../../src/executors/nativeExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Executor Interface Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the common interface for all execution backends (Docker, Native).
|
|
5
|
+
* This abstraction allows the agent to transparently switch between
|
|
6
|
+
* Docker-based and native (non-Docker) execution.
|
|
7
|
+
*/
|
|
8
|
+
export interface ExecutionResult {
|
|
9
|
+
exitCode: number;
|
|
10
|
+
stdout: string;
|
|
11
|
+
stderr: string;
|
|
12
|
+
durationMs: number;
|
|
13
|
+
artifacts: string[];
|
|
14
|
+
logs: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ExecutionOptions {
|
|
17
|
+
workDir: string;
|
|
18
|
+
command: string;
|
|
19
|
+
environment?: Record<string, string>;
|
|
20
|
+
timeout?: number;
|
|
21
|
+
onLog?: (log: string) => void;
|
|
22
|
+
onProgress?: (percent: number, stage: string) => void;
|
|
23
|
+
abortSignal?: AbortSignal;
|
|
24
|
+
artifactPaths?: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface Executor {
|
|
27
|
+
readonly type: 'docker' | 'native';
|
|
28
|
+
/** Validate the executor is available (Docker running, sandbox available, etc.) */
|
|
29
|
+
validate(): Promise<{
|
|
30
|
+
valid: boolean;
|
|
31
|
+
errors: string[];
|
|
32
|
+
}>;
|
|
33
|
+
/** Execute a build job */
|
|
34
|
+
execute(options: ExecutionOptions): Promise<ExecutionResult>;
|
|
35
|
+
/** Cleanup after execution */
|
|
36
|
+
cleanup(): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/executors/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAEnC,mFAAmF;IACnF,QAAQ,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAE1D,0BAA0B;IAC1B,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE7D,8BAA8B;IAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Executor Interface Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the common interface for all execution backends (Docker, Native).
|
|
5
|
+
* This abstraction allows the agent to transparently switch between
|
|
6
|
+
* Docker-based and native (non-Docker) execution.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/executors/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Monitor Module
|
|
3
|
+
*
|
|
4
|
+
* Advanced health monitoring system for the BuildHive agent including:
|
|
5
|
+
* - System resource monitoring
|
|
6
|
+
* - Performance metrics tracking
|
|
7
|
+
* - Predictive health analysis
|
|
8
|
+
* - Automated recovery actions
|
|
9
|
+
*
|
|
10
|
+
* Requirements: 6.1
|
|
11
|
+
*/
|
|
12
|
+
import { EventEmitter } from 'events';
|
|
13
|
+
export interface HealthMetrics {
|
|
14
|
+
timestamp: Date;
|
|
15
|
+
system: {
|
|
16
|
+
cpuUsage: number;
|
|
17
|
+
memoryUsage: number;
|
|
18
|
+
diskUsage: number;
|
|
19
|
+
loadAverage: number[];
|
|
20
|
+
uptime: number;
|
|
21
|
+
networkConnections: number;
|
|
22
|
+
};
|
|
23
|
+
process: {
|
|
24
|
+
memoryUsage: NodeJS.MemoryUsage;
|
|
25
|
+
cpuUsage: NodeJS.CpuUsage;
|
|
26
|
+
uptime: number;
|
|
27
|
+
activeHandles: number;
|
|
28
|
+
activeRequests: number;
|
|
29
|
+
};
|
|
30
|
+
application: {
|
|
31
|
+
activeJobs: number;
|
|
32
|
+
jobSuccessRate: number;
|
|
33
|
+
averageJobDuration: number;
|
|
34
|
+
errorRate: number;
|
|
35
|
+
responseTime: number;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface HealthThresholds {
|
|
39
|
+
cpu: {
|
|
40
|
+
warning: number;
|
|
41
|
+
critical: number;
|
|
42
|
+
};
|
|
43
|
+
memory: {
|
|
44
|
+
warning: number;
|
|
45
|
+
critical: number;
|
|
46
|
+
};
|
|
47
|
+
disk: {
|
|
48
|
+
warning: number;
|
|
49
|
+
critical: number;
|
|
50
|
+
};
|
|
51
|
+
errorRate: {
|
|
52
|
+
warning: number;
|
|
53
|
+
critical: number;
|
|
54
|
+
};
|
|
55
|
+
responseTime: {
|
|
56
|
+
warning: number;
|
|
57
|
+
critical: number;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface HealthAlert {
|
|
61
|
+
id: string;
|
|
62
|
+
severity: 'info' | 'warning' | 'critical';
|
|
63
|
+
category: 'system' | 'process' | 'application';
|
|
64
|
+
metric: string;
|
|
65
|
+
message: string;
|
|
66
|
+
value: number;
|
|
67
|
+
threshold: number;
|
|
68
|
+
timestamp: Date;
|
|
69
|
+
resolved?: Date;
|
|
70
|
+
}
|
|
71
|
+
export interface HealthTrend {
|
|
72
|
+
metric: string;
|
|
73
|
+
direction: 'improving' | 'stable' | 'degrading';
|
|
74
|
+
confidence: number;
|
|
75
|
+
prediction: {
|
|
76
|
+
nextValue: number;
|
|
77
|
+
timeToThreshold?: number;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export declare class HealthMonitor extends EventEmitter {
|
|
81
|
+
private thresholds;
|
|
82
|
+
private metrics;
|
|
83
|
+
private alerts;
|
|
84
|
+
private monitoringInterval;
|
|
85
|
+
private isMonitoring;
|
|
86
|
+
private maxMetricsHistory;
|
|
87
|
+
private jobStats;
|
|
88
|
+
constructor(thresholds?: Partial<HealthThresholds>);
|
|
89
|
+
/**
|
|
90
|
+
* Start health monitoring
|
|
91
|
+
*/
|
|
92
|
+
start(intervalSeconds?: number): void;
|
|
93
|
+
/**
|
|
94
|
+
* Stop health monitoring
|
|
95
|
+
*/
|
|
96
|
+
stop(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Get current health status
|
|
99
|
+
*/
|
|
100
|
+
getCurrentHealth(): {
|
|
101
|
+
status: 'healthy' | 'warning' | 'critical';
|
|
102
|
+
metrics: HealthMetrics | null;
|
|
103
|
+
activeAlerts: HealthAlert[];
|
|
104
|
+
trends: HealthTrend[];
|
|
105
|
+
score: number;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Record job execution for health tracking
|
|
109
|
+
*/
|
|
110
|
+
recordJobExecution(duration: number, success: boolean): void;
|
|
111
|
+
/**
|
|
112
|
+
* Get health history
|
|
113
|
+
*/
|
|
114
|
+
getHealthHistory(hours?: number): HealthMetrics[];
|
|
115
|
+
/**
|
|
116
|
+
* Get alert history
|
|
117
|
+
*/
|
|
118
|
+
getAlertHistory(hours?: number): HealthAlert[];
|
|
119
|
+
/**
|
|
120
|
+
* Update health thresholds
|
|
121
|
+
*/
|
|
122
|
+
updateThresholds(newThresholds: Partial<HealthThresholds>): void;
|
|
123
|
+
/**
|
|
124
|
+
* Collect comprehensive health metrics
|
|
125
|
+
*/
|
|
126
|
+
private collectMetrics;
|
|
127
|
+
/**
|
|
128
|
+
* Collect system-level metrics
|
|
129
|
+
*/
|
|
130
|
+
private collectSystemMetrics;
|
|
131
|
+
/**
|
|
132
|
+
* Collect process-level metrics
|
|
133
|
+
*/
|
|
134
|
+
private collectProcessMetrics;
|
|
135
|
+
/**
|
|
136
|
+
* Collect application-level metrics
|
|
137
|
+
*/
|
|
138
|
+
private collectApplicationMetrics;
|
|
139
|
+
/**
|
|
140
|
+
* Analyze health and generate alerts
|
|
141
|
+
*/
|
|
142
|
+
private analyzeHealth;
|
|
143
|
+
/**
|
|
144
|
+
* Check a metric against thresholds
|
|
145
|
+
*/
|
|
146
|
+
private checkThreshold;
|
|
147
|
+
/**
|
|
148
|
+
* Check for memory leaks
|
|
149
|
+
*/
|
|
150
|
+
private checkMemoryLeak;
|
|
151
|
+
/**
|
|
152
|
+
* Check for performance degradation
|
|
153
|
+
*/
|
|
154
|
+
private checkPerformanceDegradation;
|
|
155
|
+
/**
|
|
156
|
+
* Create a new alert
|
|
157
|
+
*/
|
|
158
|
+
private createAlert;
|
|
159
|
+
/**
|
|
160
|
+
* Resolve an alert
|
|
161
|
+
*/
|
|
162
|
+
private resolveAlert;
|
|
163
|
+
/**
|
|
164
|
+
* Generate alert message
|
|
165
|
+
*/
|
|
166
|
+
private generateAlertMessage;
|
|
167
|
+
/**
|
|
168
|
+
* Calculate trends for metrics
|
|
169
|
+
*/
|
|
170
|
+
private calculateTrends;
|
|
171
|
+
/**
|
|
172
|
+
* Create trend analysis
|
|
173
|
+
*/
|
|
174
|
+
private createTrend;
|
|
175
|
+
/**
|
|
176
|
+
* Get metric value from health metrics
|
|
177
|
+
*/
|
|
178
|
+
private getMetricValue;
|
|
179
|
+
/**
|
|
180
|
+
* Calculate linear trend
|
|
181
|
+
*/
|
|
182
|
+
private calculateLinearTrend;
|
|
183
|
+
/**
|
|
184
|
+
* Determine overall health status
|
|
185
|
+
*/
|
|
186
|
+
private determineOverallStatus;
|
|
187
|
+
/**
|
|
188
|
+
* Calculate overall health score
|
|
189
|
+
*/
|
|
190
|
+
private calculateHealthScore;
|
|
191
|
+
/**
|
|
192
|
+
* Trigger recovery actions for critical alerts
|
|
193
|
+
*/
|
|
194
|
+
private triggerRecoveryAction;
|
|
195
|
+
/**
|
|
196
|
+
* Check for alert recovery
|
|
197
|
+
*/
|
|
198
|
+
private checkForRecovery;
|
|
199
|
+
/**
|
|
200
|
+
* Recovery action implementations
|
|
201
|
+
*/
|
|
202
|
+
private triggerGarbageCollection;
|
|
203
|
+
private reduceProcessingLoad;
|
|
204
|
+
private cleanupTempFiles;
|
|
205
|
+
/**
|
|
206
|
+
* System metric collection helpers
|
|
207
|
+
*/
|
|
208
|
+
private getCpuUsage;
|
|
209
|
+
private getMemoryUsage;
|
|
210
|
+
private getDiskUsage;
|
|
211
|
+
private getNetworkConnections;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=healthMonitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healthMonitor.d.ts","sourceRoot":"","sources":["../src/healthMonitor.ts"],"names":[],"mappings":"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"}
|