agentic-qe 2.8.1 → 2.8.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/CHANGELOG.md +43 -0
  2. package/README.md +1 -1
  3. package/dist/agents/BaseAgent.d.ts +201 -0
  4. package/dist/agents/BaseAgent.d.ts.map +1 -1
  5. package/dist/agents/BaseAgent.js +401 -0
  6. package/dist/agents/BaseAgent.js.map +1 -1
  7. package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.d.ts +135 -0
  8. package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.d.ts.map +1 -0
  9. package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.js +301 -0
  10. package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.js.map +1 -0
  11. package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts +78 -6
  12. package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts.map +1 -1
  13. package/dist/code-intelligence/embeddings/NomicEmbedder.js +162 -21
  14. package/dist/code-intelligence/embeddings/NomicEmbedder.js.map +1 -1
  15. package/dist/code-intelligence/embeddings/backends/MemoryBackend.d.ts +59 -0
  16. package/dist/code-intelligence/embeddings/backends/MemoryBackend.d.ts.map +1 -0
  17. package/dist/code-intelligence/embeddings/backends/MemoryBackend.js +173 -0
  18. package/dist/code-intelligence/embeddings/backends/MemoryBackend.js.map +1 -0
  19. package/dist/code-intelligence/embeddings/backends/RedisBackend.d.ts +50 -0
  20. package/dist/code-intelligence/embeddings/backends/RedisBackend.d.ts.map +1 -0
  21. package/dist/code-intelligence/embeddings/backends/RedisBackend.js +279 -0
  22. package/dist/code-intelligence/embeddings/backends/RedisBackend.js.map +1 -0
  23. package/dist/code-intelligence/embeddings/backends/SQLiteBackend.d.ts +64 -0
  24. package/dist/code-intelligence/embeddings/backends/SQLiteBackend.d.ts.map +1 -0
  25. package/dist/code-intelligence/embeddings/backends/SQLiteBackend.js +314 -0
  26. package/dist/code-intelligence/embeddings/backends/SQLiteBackend.js.map +1 -0
  27. package/dist/code-intelligence/embeddings/backends/index.d.ts +16 -0
  28. package/dist/code-intelligence/embeddings/backends/index.d.ts.map +1 -0
  29. package/dist/code-intelligence/embeddings/backends/index.js +28 -0
  30. package/dist/code-intelligence/embeddings/backends/index.js.map +1 -0
  31. package/dist/code-intelligence/embeddings/backends/types.d.ts +177 -0
  32. package/dist/code-intelligence/embeddings/backends/types.d.ts.map +1 -0
  33. package/dist/code-intelligence/embeddings/backends/types.js +30 -0
  34. package/dist/code-intelligence/embeddings/backends/types.js.map +1 -0
  35. package/dist/code-intelligence/embeddings/index.d.ts +7 -0
  36. package/dist/code-intelligence/embeddings/index.d.ts.map +1 -1
  37. package/dist/code-intelligence/embeddings/index.js +16 -1
  38. package/dist/code-intelligence/embeddings/index.js.map +1 -1
  39. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  40. package/dist/infrastructure/index.d.ts +15 -0
  41. package/dist/infrastructure/index.d.ts.map +1 -0
  42. package/dist/infrastructure/index.js +44 -0
  43. package/dist/infrastructure/index.js.map +1 -0
  44. package/dist/infrastructure/network/AgentRateLimiter.d.ts +59 -0
  45. package/dist/infrastructure/network/AgentRateLimiter.d.ts.map +1 -0
  46. package/dist/infrastructure/network/AgentRateLimiter.js +186 -0
  47. package/dist/infrastructure/network/AgentRateLimiter.js.map +1 -0
  48. package/dist/infrastructure/network/AuditLogger.d.ts +102 -0
  49. package/dist/infrastructure/network/AuditLogger.d.ts.map +1 -0
  50. package/dist/infrastructure/network/AuditLogger.js +284 -0
  51. package/dist/infrastructure/network/AuditLogger.js.map +1 -0
  52. package/dist/infrastructure/network/DomainWhitelist.d.ts +111 -0
  53. package/dist/infrastructure/network/DomainWhitelist.d.ts.map +1 -0
  54. package/dist/infrastructure/network/DomainWhitelist.js +216 -0
  55. package/dist/infrastructure/network/DomainWhitelist.js.map +1 -0
  56. package/dist/infrastructure/network/NetworkPolicyManager.d.ts +97 -0
  57. package/dist/infrastructure/network/NetworkPolicyManager.d.ts.map +1 -0
  58. package/dist/infrastructure/network/NetworkPolicyManager.js +309 -0
  59. package/dist/infrastructure/network/NetworkPolicyManager.js.map +1 -0
  60. package/dist/infrastructure/network/index.d.ts +19 -0
  61. package/dist/infrastructure/network/index.d.ts.map +1 -0
  62. package/dist/infrastructure/network/index.js +46 -0
  63. package/dist/infrastructure/network/index.js.map +1 -0
  64. package/dist/infrastructure/network/policies/default-policies.d.ts +78 -0
  65. package/dist/infrastructure/network/policies/default-policies.d.ts.map +1 -0
  66. package/dist/infrastructure/network/policies/default-policies.js +312 -0
  67. package/dist/infrastructure/network/policies/default-policies.js.map +1 -0
  68. package/dist/infrastructure/network/types.d.ts +214 -0
  69. package/dist/infrastructure/network/types.d.ts.map +1 -0
  70. package/dist/infrastructure/network/types.js +25 -0
  71. package/dist/infrastructure/network/types.js.map +1 -0
  72. package/dist/infrastructure/sandbox/ResourceMonitor.d.ts +124 -0
  73. package/dist/infrastructure/sandbox/ResourceMonitor.d.ts.map +1 -0
  74. package/dist/infrastructure/sandbox/ResourceMonitor.js +305 -0
  75. package/dist/infrastructure/sandbox/ResourceMonitor.js.map +1 -0
  76. package/dist/infrastructure/sandbox/SandboxManager.d.ts +122 -0
  77. package/dist/infrastructure/sandbox/SandboxManager.d.ts.map +1 -0
  78. package/dist/infrastructure/sandbox/SandboxManager.js +527 -0
  79. package/dist/infrastructure/sandbox/SandboxManager.js.map +1 -0
  80. package/dist/infrastructure/sandbox/index.d.ts +18 -0
  81. package/dist/infrastructure/sandbox/index.d.ts.map +1 -0
  82. package/dist/infrastructure/sandbox/index.js +38 -0
  83. package/dist/infrastructure/sandbox/index.js.map +1 -0
  84. package/dist/infrastructure/sandbox/profiles/agent-profiles.d.ts +53 -0
  85. package/dist/infrastructure/sandbox/profiles/agent-profiles.d.ts.map +1 -0
  86. package/dist/infrastructure/sandbox/profiles/agent-profiles.js +433 -0
  87. package/dist/infrastructure/sandbox/profiles/agent-profiles.js.map +1 -0
  88. package/dist/infrastructure/sandbox/types.d.ts +227 -0
  89. package/dist/infrastructure/sandbox/types.d.ts.map +1 -0
  90. package/dist/infrastructure/sandbox/types.js +63 -0
  91. package/dist/infrastructure/sandbox/types.js.map +1 -0
  92. package/dist/mcp/server-instructions.d.ts +1 -1
  93. package/dist/mcp/server-instructions.js +1 -1
  94. package/dist/persistence/SupabasePersistenceProvider.d.ts.map +1 -1
  95. package/dist/persistence/SupabasePersistenceProvider.js +8 -4
  96. package/dist/persistence/SupabasePersistenceProvider.js.map +1 -1
  97. package/package.json +5 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceMonitor.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/sandbox/ResourceMonitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAgB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IAEnB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IAEtB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAIhC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IAEnB,qCAAqC;IACrC,UAAU,EAAE,kBAAkB,CAAC;IAE/B,sCAAsC;IACtC,mBAAmB,EAAE,OAAO,CAAC;IAE7B,uDAAuD;IACvD,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,qBAKpC,CAAC;AAcF;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,SAAS,CAAkB;gBAEvB,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAMvE;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAU3E;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAYb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgBlE;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAIzD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAaxD;;OAEG;IACH,EAAE,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAItC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAOvC;;OAEG;YACW,eAAe;IAQ7B;;OAEG;YACW,wBAAwB;IAoBtC;;OAEG;YACW,qBAAqB;IAWnC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyCxB;;OAEG;YACW,eAAe;IAmE7B;;OAEG;YACW,SAAS;IAUvB;;OAEG;IACH,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACpB;CAOF"}
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ /**
3
+ * Resource Monitor for Docker Containers
4
+ *
5
+ * Monitors CPU, memory, disk, and network usage for sandboxed agent containers.
6
+ * Provides real-time stats and threshold-based alerts.
7
+ *
8
+ * @module infrastructure/sandbox/ResourceMonitor
9
+ * @see Issue #146 - Security Hardening: Docker Sandboxing
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ResourceMonitor = exports.DEFAULT_MONITOR_CONFIG = exports.DEFAULT_THRESHOLDS = void 0;
13
+ /**
14
+ * Default resource thresholds for alerts
15
+ */
16
+ exports.DEFAULT_THRESHOLDS = {
17
+ cpuPercent: 90,
18
+ memoryPercent: 85,
19
+ diskPercent: 80,
20
+ };
21
+ /**
22
+ * Default monitor configuration
23
+ */
24
+ exports.DEFAULT_MONITOR_CONFIG = {
25
+ intervalMs: 5000,
26
+ thresholds: exports.DEFAULT_THRESHOLDS,
27
+ enableOomPrevention: true,
28
+ oomPreventionThreshold: 95,
29
+ };
30
+ /**
31
+ * ResourceMonitor class for tracking container resource usage
32
+ */
33
+ class ResourceMonitor {
34
+ constructor(docker, config = {}) {
35
+ this.monitorInterval = null;
36
+ this.eventHandlers = [];
37
+ this.isRunning = false;
38
+ this.docker = docker;
39
+ this.config = { ...exports.DEFAULT_MONITOR_CONFIG, ...config };
40
+ this.containers = new Map();
41
+ }
42
+ /**
43
+ * Start monitoring a container
44
+ */
45
+ addContainer(containerId, agentId, agentType) {
46
+ this.containers.set(containerId, {
47
+ containerId,
48
+ agentId,
49
+ agentType,
50
+ consecutiveHighMemory: 0,
51
+ consecutiveHighCpu: 0,
52
+ });
53
+ }
54
+ /**
55
+ * Stop monitoring a container
56
+ */
57
+ removeContainer(containerId) {
58
+ this.containers.delete(containerId);
59
+ }
60
+ /**
61
+ * Start the monitoring loop
62
+ */
63
+ start() {
64
+ if (this.isRunning)
65
+ return;
66
+ this.isRunning = true;
67
+ this.monitorInterval = setInterval(async () => {
68
+ await this.collectAllStats();
69
+ }, this.config.intervalMs);
70
+ // Collect initial stats immediately
71
+ this.collectAllStats().catch(console.error);
72
+ }
73
+ /**
74
+ * Stop the monitoring loop
75
+ */
76
+ stop() {
77
+ if (this.monitorInterval) {
78
+ clearInterval(this.monitorInterval);
79
+ this.monitorInterval = null;
80
+ }
81
+ this.isRunning = false;
82
+ }
83
+ /**
84
+ * Get stats for a specific container
85
+ */
86
+ async getStats(containerId) {
87
+ const monitored = this.containers.get(containerId);
88
+ if (!monitored)
89
+ return null;
90
+ try {
91
+ const stats = await this.collectContainerStats(containerId);
92
+ if (stats) {
93
+ monitored.lastStats = stats;
94
+ }
95
+ return stats;
96
+ }
97
+ catch (error) {
98
+ console.error(`Failed to get stats for ${containerId}:`, error);
99
+ return monitored.lastStats || null;
100
+ }
101
+ }
102
+ /**
103
+ * Get cached stats for a container (no API call)
104
+ */
105
+ getCachedStats(containerId) {
106
+ return this.containers.get(containerId)?.lastStats || null;
107
+ }
108
+ /**
109
+ * Get stats for all monitored containers
110
+ */
111
+ async getAllStats() {
112
+ const result = new Map();
113
+ for (const [containerId, monitored] of this.containers) {
114
+ const stats = await this.getStats(containerId);
115
+ if (stats) {
116
+ result.set(containerId, stats);
117
+ }
118
+ }
119
+ return result;
120
+ }
121
+ /**
122
+ * Add event handler
123
+ */
124
+ on(handler) {
125
+ this.eventHandlers.push(handler);
126
+ }
127
+ /**
128
+ * Remove event handler
129
+ */
130
+ off(handler) {
131
+ const index = this.eventHandlers.indexOf(handler);
132
+ if (index !== -1) {
133
+ this.eventHandlers.splice(index, 1);
134
+ }
135
+ }
136
+ /**
137
+ * Collect stats for all monitored containers
138
+ */
139
+ async collectAllStats() {
140
+ const promises = Array.from(this.containers.keys()).map((containerId) => this.collectAndCheckContainer(containerId));
141
+ await Promise.allSettled(promises);
142
+ }
143
+ /**
144
+ * Collect stats and check thresholds for a container
145
+ */
146
+ async collectAndCheckContainer(containerId) {
147
+ const monitored = this.containers.get(containerId);
148
+ if (!monitored)
149
+ return;
150
+ try {
151
+ const stats = await this.collectContainerStats(containerId);
152
+ if (!stats)
153
+ return;
154
+ monitored.lastStats = stats;
155
+ // Check thresholds
156
+ await this.checkThresholds(monitored, stats);
157
+ }
158
+ catch (error) {
159
+ // Container might have been removed
160
+ if (error.message?.includes('no such container')) {
161
+ this.containers.delete(containerId);
162
+ }
163
+ }
164
+ }
165
+ /**
166
+ * Collect resource stats for a container
167
+ */
168
+ async collectContainerStats(containerId) {
169
+ try {
170
+ const container = this.docker.getContainer(containerId);
171
+ const stats = await container.stats({ stream: false });
172
+ return this.parseDockerStats(stats);
173
+ }
174
+ catch {
175
+ return null;
176
+ }
177
+ }
178
+ /**
179
+ * Parse Docker stats response into ResourceStats
180
+ */
181
+ parseDockerStats(stats) {
182
+ // Calculate CPU percentage
183
+ const cpuDelta = stats.cpu_stats.cpu_usage.total_usage - stats.precpu_stats.cpu_usage.total_usage;
184
+ const systemDelta = stats.cpu_stats.system_cpu_usage - stats.precpu_stats.system_cpu_usage;
185
+ const cpuCount = stats.cpu_stats.online_cpus || 1;
186
+ const cpuPercent = systemDelta > 0 ? (cpuDelta / systemDelta) * cpuCount * 100 : 0;
187
+ // Memory stats
188
+ const memoryUsage = stats.memory_stats.usage || 0;
189
+ const memoryLimit = stats.memory_stats.limit || 1;
190
+ const memoryUsageMB = memoryUsage / (1024 * 1024);
191
+ const memoryLimitMB = memoryLimit / (1024 * 1024);
192
+ const memoryPercent = (memoryUsage / memoryLimit) * 100;
193
+ // Network stats
194
+ let networkRxBytes = 0;
195
+ let networkTxBytes = 0;
196
+ if (stats.networks) {
197
+ for (const network of Object.values(stats.networks)) {
198
+ networkRxBytes += network.rx_bytes || 0;
199
+ networkTxBytes += network.tx_bytes || 0;
200
+ }
201
+ }
202
+ // PIDs
203
+ const pidsCount = stats.pids_stats?.current || 0;
204
+ return {
205
+ cpuPercent: Math.round(cpuPercent * 100) / 100,
206
+ memoryUsageMB: Math.round(memoryUsageMB * 100) / 100,
207
+ memoryLimitMB: Math.round(memoryLimitMB * 100) / 100,
208
+ memoryPercent: Math.round(memoryPercent * 100) / 100,
209
+ diskUsageMB: 0, // Disk stats require additional API call
210
+ networkRxBytes,
211
+ networkTxBytes,
212
+ pidsCount,
213
+ timestamp: new Date(),
214
+ };
215
+ }
216
+ /**
217
+ * Check resource thresholds and emit events
218
+ */
219
+ async checkThresholds(monitored, stats) {
220
+ const { thresholds } = this.config;
221
+ // Check CPU threshold
222
+ if (stats.cpuPercent > thresholds.cpuPercent) {
223
+ monitored.consecutiveHighCpu++;
224
+ if (monitored.consecutiveHighCpu >= 3) {
225
+ await this.emitEvent({
226
+ type: 'resource_limit_exceeded',
227
+ containerId: monitored.containerId,
228
+ agentId: monitored.agentId,
229
+ agentType: monitored.agentType,
230
+ timestamp: new Date(),
231
+ details: {
232
+ resource: 'cpu',
233
+ current: stats.cpuPercent,
234
+ threshold: thresholds.cpuPercent,
235
+ },
236
+ });
237
+ }
238
+ }
239
+ else {
240
+ monitored.consecutiveHighCpu = 0;
241
+ }
242
+ // Check memory threshold
243
+ if (stats.memoryPercent > thresholds.memoryPercent) {
244
+ monitored.consecutiveHighMemory++;
245
+ // OOM prevention
246
+ if (this.config.enableOomPrevention &&
247
+ stats.memoryPercent > this.config.oomPreventionThreshold) {
248
+ await this.emitEvent({
249
+ type: 'oom_killed',
250
+ containerId: monitored.containerId,
251
+ agentId: monitored.agentId,
252
+ agentType: monitored.agentType,
253
+ timestamp: new Date(),
254
+ details: {
255
+ memoryPercent: stats.memoryPercent,
256
+ threshold: this.config.oomPreventionThreshold,
257
+ action: 'container_restart_recommended',
258
+ },
259
+ });
260
+ }
261
+ else if (monitored.consecutiveHighMemory >= 3) {
262
+ await this.emitEvent({
263
+ type: 'resource_limit_exceeded',
264
+ containerId: monitored.containerId,
265
+ agentId: monitored.agentId,
266
+ agentType: monitored.agentType,
267
+ timestamp: new Date(),
268
+ details: {
269
+ resource: 'memory',
270
+ current: stats.memoryPercent,
271
+ threshold: thresholds.memoryPercent,
272
+ },
273
+ });
274
+ }
275
+ }
276
+ else {
277
+ monitored.consecutiveHighMemory = 0;
278
+ }
279
+ }
280
+ /**
281
+ * Emit event to all handlers
282
+ */
283
+ async emitEvent(event) {
284
+ for (const handler of this.eventHandlers) {
285
+ try {
286
+ await handler(event);
287
+ }
288
+ catch (error) {
289
+ console.error('Error in sandbox event handler:', error);
290
+ }
291
+ }
292
+ }
293
+ /**
294
+ * Get monitoring status
295
+ */
296
+ getStatus() {
297
+ return {
298
+ running: this.isRunning,
299
+ containerCount: this.containers.size,
300
+ intervalMs: this.config.intervalMs,
301
+ };
302
+ }
303
+ }
304
+ exports.ResourceMonitor = ResourceMonitor;
305
+ //# sourceMappingURL=ResourceMonitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceMonitor.js","sourceRoot":"","sources":["../../../src/infrastructure/sandbox/ResourceMonitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Sandbox Manager for Docker-Based Agent Isolation
3
+ *
4
+ * Manages the lifecycle of sandboxed agent containers with resource limits
5
+ * enforced by cgroups. Provides secure, isolated execution environments
6
+ * for QE agents.
7
+ *
8
+ * @module infrastructure/sandbox/SandboxManager
9
+ * @see Issue #146 - Security Hardening: Docker Sandboxing
10
+ */
11
+ import type { SandboxConfig, SandboxManagerConfig, ContainerInfo, ResourceStats, SandboxCreateResult, SandboxDestroyResult, HealthCheckResult, SandboxEventHandler } from './types.js';
12
+ /**
13
+ * SandboxManager manages Docker containers for secure agent execution
14
+ */
15
+ export declare class SandboxManager {
16
+ private docker;
17
+ private config;
18
+ private containers;
19
+ private resourceMonitor;
20
+ private eventHandlers;
21
+ private isInitialized;
22
+ private networkId;
23
+ constructor(config?: Partial<SandboxManagerConfig>);
24
+ /**
25
+ * Initialize the sandbox manager
26
+ * Creates network if needed and validates Docker connection
27
+ */
28
+ initialize(): Promise<void>;
29
+ /**
30
+ * Shutdown the sandbox manager
31
+ * Optionally cleans up all containers
32
+ */
33
+ shutdown(): Promise<void>;
34
+ /**
35
+ * Create a sandboxed container for an agent
36
+ */
37
+ createSandbox(agentId: string, agentType: string, customConfig?: Partial<SandboxConfig>): Promise<SandboxCreateResult>;
38
+ /**
39
+ * Destroy a sandboxed container
40
+ */
41
+ destroySandbox(containerId: string, force?: boolean): Promise<SandboxDestroyResult>;
42
+ /**
43
+ * Destroy all sandboxed containers
44
+ */
45
+ destroyAll(): Promise<SandboxDestroyResult[]>;
46
+ /**
47
+ * Get resource usage for a container
48
+ */
49
+ getResourceUsage(containerId: string): Promise<ResourceStats | null>;
50
+ /**
51
+ * List all sandboxed containers
52
+ */
53
+ listSandboxes(): ContainerInfo[];
54
+ /**
55
+ * Get container info by ID
56
+ */
57
+ getContainer(containerId: string): ContainerInfo | undefined;
58
+ /**
59
+ * Get container by agent ID
60
+ */
61
+ getContainerByAgentId(agentId: string): ContainerInfo | undefined;
62
+ /**
63
+ * Check container health
64
+ */
65
+ healthCheck(containerId: string): Promise<HealthCheckResult>;
66
+ /**
67
+ * Execute a command in a container
68
+ */
69
+ exec(containerId: string, command: string[]): Promise<{
70
+ exitCode: number;
71
+ output: string;
72
+ }>;
73
+ /**
74
+ * Get container logs
75
+ */
76
+ getLogs(containerId: string, options?: {
77
+ tail?: number;
78
+ since?: number;
79
+ }): Promise<string>;
80
+ /**
81
+ * Add event handler
82
+ */
83
+ on(handler: SandboxEventHandler): void;
84
+ /**
85
+ * Remove event handler
86
+ */
87
+ off(handler: SandboxEventHandler): void;
88
+ /**
89
+ * Check if Docker is available
90
+ */
91
+ isDockerAvailable(): Promise<boolean>;
92
+ /**
93
+ * Get manager status
94
+ */
95
+ getStatus(): {
96
+ initialized: boolean;
97
+ dockerAvailable: boolean;
98
+ containerCount: number;
99
+ networkId: string | null;
100
+ };
101
+ /**
102
+ * Build Docker container create options
103
+ */
104
+ private buildContainerOptions;
105
+ /**
106
+ * Ensure sandbox network exists
107
+ */
108
+ private ensureNetwork;
109
+ /**
110
+ * Parse memory string to bytes
111
+ */
112
+ private parseMemory;
113
+ /**
114
+ * Emit event to all handlers
115
+ */
116
+ private emitEvent;
117
+ }
118
+ /**
119
+ * Create a new SandboxManager instance
120
+ */
121
+ export declare function createSandboxManager(config?: Partial<SandboxManagerConfig>): SandboxManager;
122
+ //# sourceMappingURL=SandboxManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxManager.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/sandbox/SandboxManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EAEjB,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAoBpB;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,SAAS,CAAuB;gBAE5B,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAsBtD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBjC;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACpC,OAAO,CAAC,mBAAmB,CAAC;IAwE/B;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAwDhG;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAWnD;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAI1E;;OAEG;IACH,aAAa,IAAI,aAAa,EAAE;IAIhC;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI5D;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IASjE;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqClE;;OAEG;IACG,IAAI,CACR,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAmChD;;OAEG;IACG,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC9C,OAAO,CAAC,MAAM,CAAC;IAalB;;OAEG;IACH,EAAE,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAItC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAOvC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAS3C;;OAEG;IACH,SAAS,IAAI;QACX,WAAW,EAAE,OAAO,CAAC;QACrB,eAAe,EAAE,OAAO,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B;IAaD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsG7B;;OAEG;YACW,aAAa;IA8B3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;YACW,SAAS;CASxB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,cAAc,CAE3F"}