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.
Files changed (170) hide show
  1. package/README.md +166 -0
  2. package/dist/__tests__/fakes/FakeDockerManager.d.ts +115 -0
  3. package/dist/__tests__/fakes/FakeDockerManager.d.ts.map +1 -0
  4. package/dist/__tests__/fakes/FakeDockerManager.js +203 -0
  5. package/dist/__tests__/fakes/FakeDockerManager.js.map +1 -0
  6. package/dist/acceptanceChecker.d.ts +26 -0
  7. package/dist/acceptanceChecker.d.ts.map +1 -0
  8. package/dist/acceptanceChecker.js +64 -0
  9. package/dist/acceptanceChecker.js.map +1 -0
  10. package/dist/advancedAgent.d.ts +161 -0
  11. package/dist/advancedAgent.d.ts.map +1 -0
  12. package/dist/advancedAgent.js +604 -0
  13. package/dist/advancedAgent.js.map +1 -0
  14. package/dist/agent.d.ts +101 -0
  15. package/dist/agent.d.ts.map +1 -0
  16. package/dist/agent.js +490 -0
  17. package/dist/agent.js.map +1 -0
  18. package/dist/api/jobStatusApi.d.ts +88 -0
  19. package/dist/api/jobStatusApi.d.ts.map +1 -0
  20. package/dist/api/jobStatusApi.js +240 -0
  21. package/dist/api/jobStatusApi.js.map +1 -0
  22. package/dist/autoUpdater.d.ts +135 -0
  23. package/dist/autoUpdater.d.ts.map +1 -0
  24. package/dist/autoUpdater.js +494 -0
  25. package/dist/autoUpdater.js.map +1 -0
  26. package/dist/cacheManager.d.ts +108 -0
  27. package/dist/cacheManager.d.ts.map +1 -0
  28. package/dist/cacheManager.js +300 -0
  29. package/dist/cacheManager.js.map +1 -0
  30. package/dist/cli.d.ts +11 -0
  31. package/dist/cli.d.ts.map +1 -0
  32. package/dist/cli.js +749 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/config/index.d.ts +30 -0
  35. package/dist/config/index.d.ts.map +1 -0
  36. package/dist/config/index.js +35 -0
  37. package/dist/config/index.js.map +1 -0
  38. package/dist/config/loader.d.ts +45 -0
  39. package/dist/config/loader.d.ts.map +1 -0
  40. package/dist/config/loader.js +269 -0
  41. package/dist/config/loader.js.map +1 -0
  42. package/dist/config/types.d.ts +193 -0
  43. package/dist/config/types.d.ts.map +1 -0
  44. package/dist/config/types.js +90 -0
  45. package/dist/config/types.js.map +1 -0
  46. package/dist/config/validation.d.ts +28 -0
  47. package/dist/config/validation.d.ts.map +1 -0
  48. package/dist/config/validation.js +397 -0
  49. package/dist/config/validation.js.map +1 -0
  50. package/dist/docker.d.ts +96 -0
  51. package/dist/docker.d.ts.map +1 -0
  52. package/dist/docker.js +411 -0
  53. package/dist/docker.js.map +1 -0
  54. package/dist/enhancedJobExecutor.d.ts +81 -0
  55. package/dist/enhancedJobExecutor.d.ts.map +1 -0
  56. package/dist/enhancedJobExecutor.js +223 -0
  57. package/dist/enhancedJobExecutor.js.map +1 -0
  58. package/dist/executors/executorFactory.d.ts +46 -0
  59. package/dist/executors/executorFactory.d.ts.map +1 -0
  60. package/dist/executors/executorFactory.js +80 -0
  61. package/dist/executors/executorFactory.js.map +1 -0
  62. package/dist/executors/index.d.ts +7 -0
  63. package/dist/executors/index.d.ts.map +1 -0
  64. package/dist/executors/index.js +6 -0
  65. package/dist/executors/index.js.map +1 -0
  66. package/dist/executors/nativeExecutor.d.ts +60 -0
  67. package/dist/executors/nativeExecutor.d.ts.map +1 -0
  68. package/dist/executors/nativeExecutor.js +311 -0
  69. package/dist/executors/nativeExecutor.js.map +1 -0
  70. package/dist/executors/types.d.ts +38 -0
  71. package/dist/executors/types.d.ts.map +1 -0
  72. package/dist/executors/types.js +9 -0
  73. package/dist/executors/types.js.map +1 -0
  74. package/dist/healthMonitor.d.ts +213 -0
  75. package/dist/healthMonitor.d.ts.map +1 -0
  76. package/dist/healthMonitor.js +547 -0
  77. package/dist/healthMonitor.js.map +1 -0
  78. package/dist/index.d.ts +16 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +16 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/jobExecutor.d.ts +117 -0
  83. package/dist/jobExecutor.d.ts.map +1 -0
  84. package/dist/jobExecutor.js +458 -0
  85. package/dist/jobExecutor.js.map +1 -0
  86. package/dist/lifecycleExecutor.d.ts +54 -0
  87. package/dist/lifecycleExecutor.d.ts.map +1 -0
  88. package/dist/lifecycleExecutor.js +230 -0
  89. package/dist/lifecycleExecutor.js.map +1 -0
  90. package/dist/main.d.ts +15 -0
  91. package/dist/main.d.ts.map +1 -0
  92. package/dist/main.js +77 -0
  93. package/dist/main.js.map +1 -0
  94. package/dist/metrics.d.ts +103 -0
  95. package/dist/metrics.d.ts.map +1 -0
  96. package/dist/metrics.js +360 -0
  97. package/dist/metrics.js.map +1 -0
  98. package/dist/recipes/builtinRecipes.d.ts +11 -0
  99. package/dist/recipes/builtinRecipes.d.ts.map +1 -0
  100. package/dist/recipes/builtinRecipes.js +688 -0
  101. package/dist/recipes/builtinRecipes.js.map +1 -0
  102. package/dist/recipes/index.d.ts +18 -0
  103. package/dist/recipes/index.d.ts.map +1 -0
  104. package/dist/recipes/index.js +17 -0
  105. package/dist/recipes/index.js.map +1 -0
  106. package/dist/recipes/recipeRegistry.d.ts +49 -0
  107. package/dist/recipes/recipeRegistry.d.ts.map +1 -0
  108. package/dist/recipes/recipeRegistry.js +264 -0
  109. package/dist/recipes/recipeRegistry.js.map +1 -0
  110. package/dist/recipes/types.d.ts +116 -0
  111. package/dist/recipes/types.d.ts.map +1 -0
  112. package/dist/recipes/types.js +10 -0
  113. package/dist/recipes/types.js.map +1 -0
  114. package/dist/recovery.d.ts +133 -0
  115. package/dist/recovery.d.ts.map +1 -0
  116. package/dist/recovery.js +299 -0
  117. package/dist/recovery.js.map +1 -0
  118. package/dist/registration/apiClient.d.ts +44 -0
  119. package/dist/registration/apiClient.d.ts.map +1 -0
  120. package/dist/registration/apiClient.js +149 -0
  121. package/dist/registration/apiClient.js.map +1 -0
  122. package/dist/registration/index.d.ts +41 -0
  123. package/dist/registration/index.d.ts.map +1 -0
  124. package/dist/registration/index.js +141 -0
  125. package/dist/registration/index.js.map +1 -0
  126. package/dist/registration/machineId.d.ts +30 -0
  127. package/dist/registration/machineId.d.ts.map +1 -0
  128. package/dist/registration/machineId.js +89 -0
  129. package/dist/registration/machineId.js.map +1 -0
  130. package/dist/registration/types.d.ts +32 -0
  131. package/dist/registration/types.d.ts.map +1 -0
  132. package/dist/registration/types.js +9 -0
  133. package/dist/registration/types.js.map +1 -0
  134. package/dist/resourceGovernor.d.ts +57 -0
  135. package/dist/resourceGovernor.d.ts.map +1 -0
  136. package/dist/resourceGovernor.js +125 -0
  137. package/dist/resourceGovernor.js.map +1 -0
  138. package/dist/security/secretManager.d.ts +107 -0
  139. package/dist/security/secretManager.d.ts.map +1 -0
  140. package/dist/security/secretManager.js +361 -0
  141. package/dist/security/secretManager.js.map +1 -0
  142. package/dist/security.d.ts +134 -0
  143. package/dist/security.d.ts.map +1 -0
  144. package/dist/security.js +470 -0
  145. package/dist/security.js.map +1 -0
  146. package/dist/storage/artifactUploader.d.ts +155 -0
  147. package/dist/storage/artifactUploader.d.ts.map +1 -0
  148. package/dist/storage/artifactUploader.js +554 -0
  149. package/dist/storage/artifactUploader.js.map +1 -0
  150. package/dist/types.d.ts +49 -0
  151. package/dist/types.d.ts.map +1 -0
  152. package/dist/types.js +7 -0
  153. package/dist/types.js.map +1 -0
  154. package/dist/utils/capabilities.d.ts +23 -0
  155. package/dist/utils/capabilities.d.ts.map +1 -0
  156. package/dist/utils/capabilities.js +200 -0
  157. package/dist/utils/capabilities.js.map +1 -0
  158. package/dist/utils/logger.d.ts +20 -0
  159. package/dist/utils/logger.d.ts.map +1 -0
  160. package/dist/utils/logger.js +188 -0
  161. package/dist/utils/logger.js.map +1 -0
  162. package/dist/utils/sdkScanner.d.ts +105 -0
  163. package/dist/utils/sdkScanner.d.ts.map +1 -0
  164. package/dist/utils/sdkScanner.js +459 -0
  165. package/dist/utils/sdkScanner.js.map +1 -0
  166. package/dist/websocketClient.d.ts +154 -0
  167. package/dist/websocketClient.d.ts.map +1 -0
  168. package/dist/websocketClient.js +422 -0
  169. package/dist/websocketClient.js.map +1 -0
  170. package/package.json +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Agent Configuration Types
3
+ *
4
+ * Defines TypeScript types for agent configuration schema
5
+ * Requirements: 1.1, 1.2
6
+ */
7
+ export const DEFAULT_CONFIG = {
8
+ maxConcurrentJobs: 1,
9
+ heartbeatInterval: 30,
10
+ tags: [],
11
+ dockerConfig: {
12
+ baseImage: 'ubuntu:22.04',
13
+ networkMode: 'none',
14
+ memoryLimit: '2g',
15
+ cpuLimit: '1.0',
16
+ volumeMounts: []
17
+ },
18
+ securityConfig: {
19
+ maxMemoryMB: 2048,
20
+ maxCpuCores: 2,
21
+ maxDiskSpaceMB: 10240,
22
+ maxProcesses: 256,
23
+ maxFileDescriptors: 1024,
24
+ networkMode: 'none',
25
+ allowedOutboundPorts: [],
26
+ blockPrivateNetworks: true,
27
+ readOnlyRoot: true,
28
+ allowedWritePaths: ['/workspace', '/tmp/buildhive'],
29
+ tempDirSizeMB: 512,
30
+ dropAllCapabilities: true,
31
+ allowedCapabilities: ['CHOWN', 'DAC_OVERRIDE', 'FOWNER'],
32
+ noNewPrivileges: true,
33
+ maxExecutionTimeSeconds: 3600,
34
+ killTimeoutSeconds: 30,
35
+ enableResourceMonitoring: true,
36
+ enableSecurityAuditing: true,
37
+ logSecurityEvents: true
38
+ },
39
+ storageConfig: {
40
+ type: 'local',
41
+ localPath: '/tmp/buildhive/artifacts',
42
+ cleanupAfterUpload: true,
43
+ retentionDays: 7
44
+ },
45
+ maxMemoryUsage: 80,
46
+ maxCpuUsage: 80,
47
+ maxDiskUsage: 90,
48
+ logLevel: 'info',
49
+ logRetentionDays: 7,
50
+ jobTimeoutMinutes: 60,
51
+ connectionTimeoutSeconds: 30,
52
+ enableMetrics: true,
53
+ enableAutoUpdates: true,
54
+ // Enhanced configuration defaults
55
+ acceptanceRules: {
56
+ allowedRecipes: ['*'],
57
+ blockedRecipes: [],
58
+ allowedRepositories: ['*'],
59
+ maxJobDurationMinutes: 120,
60
+ requireDocker: false
61
+ },
62
+ resourceGovernance: {
63
+ maxCpuPercent: 80,
64
+ maxMemoryPercent: 70,
65
+ reservedDiskGB: 10
66
+ },
67
+ executionConfig: {
68
+ defaultMode: 'docker',
69
+ native: {
70
+ enabled: false,
71
+ allowedPaths: ['/tmp/buildhive'],
72
+ userIsolation: true
73
+ },
74
+ docker: {
75
+ baseImage: 'ubuntu:22.04',
76
+ networkMode: 'none',
77
+ memoryLimit: '2g',
78
+ cpuLimit: '1.0',
79
+ volumeMounts: []
80
+ }
81
+ },
82
+ cacheConfig: {
83
+ enabled: true,
84
+ directory: '/tmp/buildhive/cache',
85
+ maxSizeGB: 20,
86
+ strategy: 'lru',
87
+ volumes: {}
88
+ }
89
+ };
90
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2PH,MAAM,CAAC,MAAM,cAAc,GAAyB;IAClD,iBAAiB,EAAE,CAAC;IACpB,iBAAiB,EAAE,EAAE;IACrB,IAAI,EAAE,EAAE;IACR,YAAY,EAAE;QACZ,SAAS,EAAE,cAAc;QACzB,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,EAAE;KACjB;IACD,cAAc,EAAE;QACd,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,GAAG;QACjB,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,MAAM;QACnB,oBAAoB,EAAE,EAAE;QACxB,oBAAoB,EAAE,IAAI;QAC1B,YAAY,EAAE,IAAI;QAClB,iBAAiB,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC;QACnD,aAAa,EAAE,GAAG;QAClB,mBAAmB,EAAE,IAAI;QACzB,mBAAmB,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC;QACxD,eAAe,EAAE,IAAI;QACrB,uBAAuB,EAAE,IAAI;QAC7B,kBAAkB,EAAE,EAAE;QACtB,wBAAwB,EAAE,IAAI;QAC9B,sBAAsB,EAAE,IAAI;QAC5B,iBAAiB,EAAE,IAAI;KACxB;IACD,aAAa,EAAE;QACb,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,0BAA0B;QACrC,kBAAkB,EAAE,IAAI;QACxB,aAAa,EAAE,CAAC;KACjB;IACD,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,EAAE;IACf,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,MAAM;IAChB,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,EAAE;IACrB,wBAAwB,EAAE,EAAE;IAC5B,aAAa,EAAE,IAAI;IACnB,iBAAiB,EAAE,IAAI;IAEvB,kCAAkC;IAClC,eAAe,EAAE;QACf,cAAc,EAAE,CAAC,GAAG,CAAC;QACrB,cAAc,EAAE,EAAE;QAClB,mBAAmB,EAAE,CAAC,GAAG,CAAC;QAC1B,qBAAqB,EAAE,GAAG;QAC1B,aAAa,EAAE,KAAK;KACrB;IACD,kBAAkB,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,gBAAgB,EAAE,EAAE;QACpB,cAAc,EAAE,EAAE;KACnB;IACD,eAAe,EAAE;QACf,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE;YACN,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,CAAC,gBAAgB,CAAC;YAChC,aAAa,EAAE,IAAI;SACpB;QACD,MAAM,EAAE;YACN,SAAS,EAAE,cAAc;YACzB,WAAW,EAAE,MAAM;YACnB,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,EAAE;SACjB;KACF;IACD,WAAW,EAAE;QACX,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,EAAE;KACZ;CACF,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Configuration Validation
3
+ *
4
+ * Validates agent configuration against schema and business rules
5
+ * Requirements: 1.1, 1.2
6
+ */
7
+ import { AgentConfig, ConfigValidationResult } from './types.js';
8
+ export declare class ConfigValidator {
9
+ /**
10
+ * Validates the complete agent configuration
11
+ */
12
+ static validate(config: Partial<AgentConfig>): ConfigValidationResult;
13
+ private static validateRequiredFields;
14
+ private static validateTypes;
15
+ private static validateBusinessRules;
16
+ private static validateDockerConfig;
17
+ private static validateAcceptanceRules;
18
+ private static validateResourceGovernance;
19
+ private static validateQuietHours;
20
+ private static validateCacheConfig;
21
+ private static validateExecutionConfig;
22
+ /** Validates "HH:MM-HH:MM" format */
23
+ static isValidQuietHoursSchedule(schedule: string): boolean;
24
+ private static isValidUrl;
25
+ private static isValidMemoryLimit;
26
+ private static isValidCpuLimit;
27
+ }
28
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAyB,sBAAsB,EAAuF,MAAM,YAAY,CAAC;AAE7K,qBAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,sBAAsB;IA2BrE,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAmBrC,OAAO,CAAC,MAAM,CAAC,aAAa;IA6E5B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAgFpC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA6EnC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAqCtC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAiCzC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA0BjC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAqBlC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAatC,qCAAqC;IACrC,MAAM,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK3D,OAAO,CAAC,MAAM,CAAC,UAAU;IASzB,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAIjC,OAAO,CAAC,MAAM,CAAC,eAAe;CAI/B"}
@@ -0,0 +1,397 @@
1
+ /**
2
+ * Configuration Validation
3
+ *
4
+ * Validates agent configuration against schema and business rules
5
+ * Requirements: 1.1, 1.2
6
+ */
7
+ export class ConfigValidator {
8
+ /**
9
+ * Validates the complete agent configuration
10
+ */
11
+ static validate(config) {
12
+ const errors = [];
13
+ // Required fields validation
14
+ this.validateRequiredFields(config, errors);
15
+ // Type and format validation
16
+ this.validateTypes(config, errors);
17
+ // Business rules validation
18
+ this.validateBusinessRules(config, errors);
19
+ // Docker configuration validation
20
+ this.validateDockerConfig(config, errors);
21
+ // Enhanced configuration validation
22
+ this.validateAcceptanceRules(config, errors);
23
+ this.validateResourceGovernance(config, errors);
24
+ this.validateCacheConfig(config, errors);
25
+ this.validateExecutionConfig(config, errors);
26
+ return {
27
+ isValid: errors.length === 0,
28
+ errors
29
+ };
30
+ }
31
+ static validateRequiredFields(config, errors) {
32
+ const requiredFields = [
33
+ 'platformUrl',
34
+ 'apiKey',
35
+ 'agentId',
36
+ 'name'
37
+ ];
38
+ for (const field of requiredFields) {
39
+ if (!config[field]) {
40
+ errors.push({
41
+ field,
42
+ message: `${field} is required`,
43
+ value: config[field]
44
+ });
45
+ }
46
+ }
47
+ }
48
+ static validateTypes(config, errors) {
49
+ // URL validation
50
+ if (config.platformUrl && !this.isValidUrl(config.platformUrl)) {
51
+ errors.push({
52
+ field: 'platformUrl',
53
+ message: 'platformUrl must be a valid URL',
54
+ value: config.platformUrl
55
+ });
56
+ }
57
+ // String validations
58
+ if (config.apiKey && typeof config.apiKey !== 'string') {
59
+ errors.push({
60
+ field: 'apiKey',
61
+ message: 'apiKey must be a string',
62
+ value: config.apiKey
63
+ });
64
+ }
65
+ if (config.agentId && typeof config.agentId !== 'string') {
66
+ errors.push({
67
+ field: 'agentId',
68
+ message: 'agentId must be a string',
69
+ value: config.agentId
70
+ });
71
+ }
72
+ if (config.name && typeof config.name !== 'string') {
73
+ errors.push({
74
+ field: 'name',
75
+ message: 'name must be a string',
76
+ value: config.name
77
+ });
78
+ }
79
+ // Number validations
80
+ if (config.maxConcurrentJobs !== undefined && (!Number.isInteger(config.maxConcurrentJobs) || config.maxConcurrentJobs < 1)) {
81
+ errors.push({
82
+ field: 'maxConcurrentJobs',
83
+ message: 'maxConcurrentJobs must be a positive integer',
84
+ value: config.maxConcurrentJobs
85
+ });
86
+ }
87
+ if (config.heartbeatInterval !== undefined && (!Number.isInteger(config.heartbeatInterval) || config.heartbeatInterval < 5)) {
88
+ errors.push({
89
+ field: 'heartbeatInterval',
90
+ message: 'heartbeatInterval must be an integer >= 5 seconds',
91
+ value: config.heartbeatInterval
92
+ });
93
+ }
94
+ // Array validations
95
+ if (config.tags && !Array.isArray(config.tags)) {
96
+ errors.push({
97
+ field: 'tags',
98
+ message: 'tags must be an array of strings',
99
+ value: config.tags
100
+ });
101
+ }
102
+ else if (config.tags && !config.tags.every(tag => typeof tag === 'string')) {
103
+ errors.push({
104
+ field: 'tags',
105
+ message: 'all tags must be strings',
106
+ value: config.tags
107
+ });
108
+ }
109
+ // Log level validation
110
+ if (config.logLevel && !['debug', 'info', 'warn', 'error'].includes(config.logLevel)) {
111
+ errors.push({
112
+ field: 'logLevel',
113
+ message: 'logLevel must be one of: debug, info, warn, error',
114
+ value: config.logLevel
115
+ });
116
+ }
117
+ }
118
+ static validateBusinessRules(config, errors) {
119
+ // Resource usage limits
120
+ if (config.maxMemoryUsage !== undefined && (config.maxMemoryUsage < 10 || config.maxMemoryUsage > 95)) {
121
+ errors.push({
122
+ field: 'maxMemoryUsage',
123
+ message: 'maxMemoryUsage must be between 10 and 95 percent',
124
+ value: config.maxMemoryUsage
125
+ });
126
+ }
127
+ if (config.maxCpuUsage !== undefined && (config.maxCpuUsage < 10 || config.maxCpuUsage > 95)) {
128
+ errors.push({
129
+ field: 'maxCpuUsage',
130
+ message: 'maxCpuUsage must be between 10 and 95 percent',
131
+ value: config.maxCpuUsage
132
+ });
133
+ }
134
+ if (config.maxDiskUsage !== undefined && (config.maxDiskUsage < 50 || config.maxDiskUsage > 95)) {
135
+ errors.push({
136
+ field: 'maxDiskUsage',
137
+ message: 'maxDiskUsage must be between 50 and 95 percent',
138
+ value: config.maxDiskUsage
139
+ });
140
+ }
141
+ // Timeout validations
142
+ if (config.jobTimeoutMinutes !== undefined && (config.jobTimeoutMinutes < 1 || config.jobTimeoutMinutes > 480)) {
143
+ errors.push({
144
+ field: 'jobTimeoutMinutes',
145
+ message: 'jobTimeoutMinutes must be between 1 and 480 minutes (8 hours)',
146
+ value: config.jobTimeoutMinutes
147
+ });
148
+ }
149
+ if (config.connectionTimeoutSeconds !== undefined && (config.connectionTimeoutSeconds < 5 || config.connectionTimeoutSeconds > 300)) {
150
+ errors.push({
151
+ field: 'connectionTimeoutSeconds',
152
+ message: 'connectionTimeoutSeconds must be between 5 and 300 seconds',
153
+ value: config.connectionTimeoutSeconds
154
+ });
155
+ }
156
+ // Log retention validation
157
+ if (config.logRetentionDays !== undefined && (config.logRetentionDays < 1 || config.logRetentionDays > 90)) {
158
+ errors.push({
159
+ field: 'logRetentionDays',
160
+ message: 'logRetentionDays must be between 1 and 90 days',
161
+ value: config.logRetentionDays
162
+ });
163
+ }
164
+ // Repository list validations
165
+ if (config.allowedRepositories && config.blockedRepositories) {
166
+ errors.push({
167
+ field: 'allowedRepositories',
168
+ message: 'Cannot specify both allowedRepositories and blockedRepositories',
169
+ value: { allowed: config.allowedRepositories, blocked: config.blockedRepositories }
170
+ });
171
+ }
172
+ // Agent name validation
173
+ if (config.name && (config.name.length < 1 || config.name.length > 100)) {
174
+ errors.push({
175
+ field: 'name',
176
+ message: 'name must be between 1 and 100 characters',
177
+ value: config.name
178
+ });
179
+ }
180
+ // API key validation
181
+ if (config.apiKey && config.apiKey.length < 10) {
182
+ errors.push({
183
+ field: 'apiKey',
184
+ message: 'apiKey appears to be too short (minimum 10 characters)',
185
+ value: config.apiKey
186
+ });
187
+ }
188
+ }
189
+ static validateDockerConfig(config, errors) {
190
+ if (!config.dockerConfig)
191
+ return;
192
+ const dockerConfig = config.dockerConfig;
193
+ // Base image validation
194
+ if (!dockerConfig.baseImage || typeof dockerConfig.baseImage !== 'string') {
195
+ errors.push({
196
+ field: 'dockerConfig.baseImage',
197
+ message: 'dockerConfig.baseImage must be a non-empty string',
198
+ value: dockerConfig.baseImage
199
+ });
200
+ }
201
+ // Network mode validation
202
+ if (!['none', 'bridge'].includes(dockerConfig.networkMode)) {
203
+ errors.push({
204
+ field: 'dockerConfig.networkMode',
205
+ message: 'dockerConfig.networkMode must be "none" or "bridge"',
206
+ value: dockerConfig.networkMode
207
+ });
208
+ }
209
+ // Memory limit validation
210
+ if (!this.isValidMemoryLimit(dockerConfig.memoryLimit)) {
211
+ errors.push({
212
+ field: 'dockerConfig.memoryLimit',
213
+ message: 'dockerConfig.memoryLimit must be a valid memory specification (e.g., "1g", "512m")',
214
+ value: dockerConfig.memoryLimit
215
+ });
216
+ }
217
+ // CPU limit validation
218
+ if (!this.isValidCpuLimit(dockerConfig.cpuLimit)) {
219
+ errors.push({
220
+ field: 'dockerConfig.cpuLimit',
221
+ message: 'dockerConfig.cpuLimit must be a valid CPU specification (e.g., "1.0", "0.5")',
222
+ value: dockerConfig.cpuLimit
223
+ });
224
+ }
225
+ // Volume mounts validation
226
+ if (!Array.isArray(dockerConfig.volumeMounts)) {
227
+ errors.push({
228
+ field: 'dockerConfig.volumeMounts',
229
+ message: 'dockerConfig.volumeMounts must be an array',
230
+ value: dockerConfig.volumeMounts
231
+ });
232
+ }
233
+ else {
234
+ dockerConfig.volumeMounts.forEach((mount, index) => {
235
+ if (!mount.hostPath || typeof mount.hostPath !== 'string') {
236
+ errors.push({
237
+ field: `dockerConfig.volumeMounts[${index}].hostPath`,
238
+ message: 'hostPath must be a non-empty string',
239
+ value: mount.hostPath
240
+ });
241
+ }
242
+ if (!mount.containerPath || typeof mount.containerPath !== 'string') {
243
+ errors.push({
244
+ field: `dockerConfig.volumeMounts[${index}].containerPath`,
245
+ message: 'containerPath must be a non-empty string',
246
+ value: mount.containerPath
247
+ });
248
+ }
249
+ if (typeof mount.readOnly !== 'boolean') {
250
+ errors.push({
251
+ field: `dockerConfig.volumeMounts[${index}].readOnly`,
252
+ message: 'readOnly must be a boolean',
253
+ value: mount.readOnly
254
+ });
255
+ }
256
+ });
257
+ }
258
+ }
259
+ static validateAcceptanceRules(config, errors) {
260
+ const rules = config.acceptanceRules;
261
+ if (!rules)
262
+ return;
263
+ if (rules.maxJobDurationMinutes !== undefined && (rules.maxJobDurationMinutes < 1 || rules.maxJobDurationMinutes > 1440)) {
264
+ errors.push({
265
+ field: 'acceptanceRules.maxJobDurationMinutes',
266
+ message: 'maxJobDurationMinutes must be between 1 and 1440 (24 hours)',
267
+ value: rules.maxJobDurationMinutes
268
+ });
269
+ }
270
+ if (rules.allowedRecipes && !Array.isArray(rules.allowedRecipes)) {
271
+ errors.push({
272
+ field: 'acceptanceRules.allowedRecipes',
273
+ message: 'allowedRecipes must be an array of glob patterns',
274
+ value: rules.allowedRecipes
275
+ });
276
+ }
277
+ if (rules.blockedRecipes && !Array.isArray(rules.blockedRecipes)) {
278
+ errors.push({
279
+ field: 'acceptanceRules.blockedRecipes',
280
+ message: 'blockedRecipes must be an array of glob patterns',
281
+ value: rules.blockedRecipes
282
+ });
283
+ }
284
+ if (rules.allowedRepositories && !Array.isArray(rules.allowedRepositories)) {
285
+ errors.push({
286
+ field: 'acceptanceRules.allowedRepositories',
287
+ message: 'allowedRepositories must be an array of glob patterns',
288
+ value: rules.allowedRepositories
289
+ });
290
+ }
291
+ }
292
+ static validateResourceGovernance(config, errors) {
293
+ const rg = config.resourceGovernance;
294
+ if (!rg)
295
+ return;
296
+ if (rg.maxCpuPercent !== undefined && (rg.maxCpuPercent < 1 || rg.maxCpuPercent > 100)) {
297
+ errors.push({
298
+ field: 'resourceGovernance.maxCpuPercent',
299
+ message: 'maxCpuPercent must be between 1 and 100',
300
+ value: rg.maxCpuPercent
301
+ });
302
+ }
303
+ if (rg.maxMemoryPercent !== undefined && (rg.maxMemoryPercent < 1 || rg.maxMemoryPercent > 100)) {
304
+ errors.push({
305
+ field: 'resourceGovernance.maxMemoryPercent',
306
+ message: 'maxMemoryPercent must be between 1 and 100',
307
+ value: rg.maxMemoryPercent
308
+ });
309
+ }
310
+ if (rg.reservedDiskGB !== undefined && rg.reservedDiskGB < 0) {
311
+ errors.push({
312
+ field: 'resourceGovernance.reservedDiskGB',
313
+ message: 'reservedDiskGB must be >= 0',
314
+ value: rg.reservedDiskGB
315
+ });
316
+ }
317
+ if (rg.quietHours) {
318
+ this.validateQuietHours(rg.quietHours, errors);
319
+ }
320
+ }
321
+ static validateQuietHours(qh, errors) {
322
+ if (qh.schedule && !this.isValidQuietHoursSchedule(qh.schedule)) {
323
+ errors.push({
324
+ field: 'resourceGovernance.quietHours.schedule',
325
+ message: 'schedule must be in "HH:MM-HH:MM" format (24h)',
326
+ value: qh.schedule
327
+ });
328
+ }
329
+ if (qh.maxConcurrentJobs !== undefined && (qh.maxConcurrentJobs < 0 || !Number.isInteger(qh.maxConcurrentJobs))) {
330
+ errors.push({
331
+ field: 'resourceGovernance.quietHours.maxConcurrentJobs',
332
+ message: 'maxConcurrentJobs must be a non-negative integer',
333
+ value: qh.maxConcurrentJobs
334
+ });
335
+ }
336
+ if (qh.maxCpuPercent !== undefined && (qh.maxCpuPercent < 1 || qh.maxCpuPercent > 100)) {
337
+ errors.push({
338
+ field: 'resourceGovernance.quietHours.maxCpuPercent',
339
+ message: 'maxCpuPercent must be between 1 and 100',
340
+ value: qh.maxCpuPercent
341
+ });
342
+ }
343
+ }
344
+ static validateCacheConfig(config, errors) {
345
+ const cc = config.cacheConfig;
346
+ if (!cc)
347
+ return;
348
+ if (cc.maxSizeGB !== undefined && cc.maxSizeGB < 0) {
349
+ errors.push({
350
+ field: 'cacheConfig.maxSizeGB',
351
+ message: 'maxSizeGB must be >= 0',
352
+ value: cc.maxSizeGB
353
+ });
354
+ }
355
+ if (cc.strategy && !['lru', 'fifo', 'lfu'].includes(cc.strategy)) {
356
+ errors.push({
357
+ field: 'cacheConfig.strategy',
358
+ message: 'strategy must be one of: lru, fifo, lfu',
359
+ value: cc.strategy
360
+ });
361
+ }
362
+ }
363
+ static validateExecutionConfig(config, errors) {
364
+ const ec = config.executionConfig;
365
+ if (!ec)
366
+ return;
367
+ if (ec.defaultMode && !['docker', 'native', 'auto'].includes(ec.defaultMode)) {
368
+ errors.push({
369
+ field: 'executionConfig.defaultMode',
370
+ message: 'defaultMode must be one of: docker, native, auto',
371
+ value: ec.defaultMode
372
+ });
373
+ }
374
+ }
375
+ /** Validates "HH:MM-HH:MM" format */
376
+ static isValidQuietHoursSchedule(schedule) {
377
+ const pattern = /^([01]\d|2[0-3]):[0-5]\d-([01]\d|2[0-3]):[0-5]\d$/;
378
+ return pattern.test(schedule);
379
+ }
380
+ static isValidUrl(url) {
381
+ try {
382
+ new URL(url);
383
+ return true;
384
+ }
385
+ catch {
386
+ return false;
387
+ }
388
+ }
389
+ static isValidMemoryLimit(limit) {
390
+ return /^\d+[kmg]$/i.test(limit);
391
+ }
392
+ static isValidCpuLimit(limit) {
393
+ const num = parseFloat(limit);
394
+ return !isNaN(num) && num > 0 && num <= 32;
395
+ }
396
+ }
397
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Docker Manager - Container management for job execution
3
+ *
4
+ * Handles Docker container lifecycle, security configuration,
5
+ * and resource management for isolated job execution.
6
+ *
7
+ * Enhanced with comprehensive security measures and monitoring.
8
+ *
9
+ * Requirements: 4.1, 4.2, 4.3, 4.4, 4.5
10
+ */
11
+ import { DockerConfig } from './config/types.js';
12
+ import { SecurityConfig, SecurityViolation } from './security.js';
13
+ export interface ContainerConfig {
14
+ image: string;
15
+ workDir: string;
16
+ environment: Record<string, string>;
17
+ volumeMounts: Array<{
18
+ hostPath: string;
19
+ containerPath: string;
20
+ readOnly: boolean;
21
+ }>;
22
+ }
23
+ export interface ExecutionOptions {
24
+ timeout?: number;
25
+ onOutput?: (output: string) => void;
26
+ }
27
+ export interface ExecutionResult {
28
+ exitCode: number;
29
+ output: string;
30
+ error?: string;
31
+ }
32
+ export declare class DockerManager {
33
+ private config;
34
+ private securityManager;
35
+ private activeContainers;
36
+ private containerTempDirs;
37
+ constructor(config: DockerConfig, securityConfig: SecurityConfig);
38
+ /**
39
+ * Clean up orphaned BuildHive containers from previous agent crashes.
40
+ * Should be called on startup before accepting new jobs.
41
+ */
42
+ cleanupOrphanedContainers(): Promise<number>;
43
+ /**
44
+ * Check if Docker is available and running
45
+ */
46
+ checkDockerAvailability(): Promise<boolean>;
47
+ /**
48
+ * Pull Docker image
49
+ */
50
+ pullImage(image: string): Promise<void>;
51
+ /**
52
+ * Create a Docker container with enhanced security configuration
53
+ */
54
+ createContainer(containerConfig: ContainerConfig): Promise<string>;
55
+ /**
56
+ * Start a Docker container with security monitoring
57
+ */
58
+ startContainer(containerId: string): Promise<void>;
59
+ /**
60
+ * Execute a command in a running container
61
+ */
62
+ executeCommand(containerId: string, command: string, options?: ExecutionOptions): Promise<ExecutionResult>;
63
+ /**
64
+ * Stop a running container
65
+ */
66
+ stopContainer(containerId: string, timeout?: number): Promise<void>;
67
+ /**
68
+ * Remove a container with security cleanup
69
+ */
70
+ removeContainer(containerId: string): Promise<void>;
71
+ /**
72
+ * Copy file from container to host
73
+ */
74
+ copyFromContainer(containerId: string, containerPath: string, hostPath: string): Promise<void>;
75
+ /**
76
+ * Get container logs
77
+ */
78
+ getContainerLogs(containerId: string): Promise<string>;
79
+ /**
80
+ * Get security violations for monitoring
81
+ */
82
+ getSecurityViolations(): SecurityViolation[];
83
+ /**
84
+ * Get resource usage for a container
85
+ */
86
+ getResourceUsage(containerId: string): Promise<import("./security.js").ResourceUsage>;
87
+ /**
88
+ * Clean up all active containers with security cleanup
89
+ */
90
+ cleanup(): Promise<void>;
91
+ /**
92
+ * Execute a Docker command
93
+ */
94
+ private executeDockerCommand;
95
+ }
96
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAmB,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOnF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,YAAY,EAAE,KAAK,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,iBAAiB,CAA6B;gBAE1C,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc;IAMhE;;;OAGG;IACG,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC;IAgClD;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC;IAUjD;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7C;;OAEG;IACG,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAwGxE;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxD;;OAEG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC;IA0B3B;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7E;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCzD;;OAEG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpG;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAU5D;;OAEG;IACH,qBAAqB,IAAI,iBAAiB,EAAE;IAI5C;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM;IAI1C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B;;OAEG;YACW,oBAAoB;CAuEnC"}