agentic-qe 2.8.0 → 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.
- package/CHANGELOG.md +148 -0
- package/README.md +1 -1
- package/dist/agents/BaseAgent.d.ts +329 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +657 -0
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/cli/commands/supabase/index.d.ts +20 -0
- package/dist/cli/commands/supabase/index.d.ts.map +1 -0
- package/dist/cli/commands/supabase/index.js +632 -0
- package/dist/cli/commands/supabase/index.js.map +1 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.d.ts +135 -0
- package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.js +301 -0
- package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.js.map +1 -0
- package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts +78 -6
- package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts.map +1 -1
- package/dist/code-intelligence/embeddings/NomicEmbedder.js +162 -21
- package/dist/code-intelligence/embeddings/NomicEmbedder.js.map +1 -1
- package/dist/code-intelligence/embeddings/backends/MemoryBackend.d.ts +59 -0
- package/dist/code-intelligence/embeddings/backends/MemoryBackend.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/MemoryBackend.js +173 -0
- package/dist/code-intelligence/embeddings/backends/MemoryBackend.js.map +1 -0
- package/dist/code-intelligence/embeddings/backends/RedisBackend.d.ts +50 -0
- package/dist/code-intelligence/embeddings/backends/RedisBackend.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/RedisBackend.js +279 -0
- package/dist/code-intelligence/embeddings/backends/RedisBackend.js.map +1 -0
- package/dist/code-intelligence/embeddings/backends/SQLiteBackend.d.ts +64 -0
- package/dist/code-intelligence/embeddings/backends/SQLiteBackend.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/SQLiteBackend.js +314 -0
- package/dist/code-intelligence/embeddings/backends/SQLiteBackend.js.map +1 -0
- package/dist/code-intelligence/embeddings/backends/index.d.ts +16 -0
- package/dist/code-intelligence/embeddings/backends/index.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/index.js +28 -0
- package/dist/code-intelligence/embeddings/backends/index.js.map +1 -0
- package/dist/code-intelligence/embeddings/backends/types.d.ts +177 -0
- package/dist/code-intelligence/embeddings/backends/types.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/backends/types.js +30 -0
- package/dist/code-intelligence/embeddings/backends/types.js.map +1 -0
- package/dist/code-intelligence/embeddings/index.d.ts +7 -0
- package/dist/code-intelligence/embeddings/index.d.ts.map +1 -1
- package/dist/code-intelligence/embeddings/index.js +16 -1
- package/dist/code-intelligence/embeddings/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/infrastructure/index.d.ts +15 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +44 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/network/AgentRateLimiter.d.ts +59 -0
- package/dist/infrastructure/network/AgentRateLimiter.d.ts.map +1 -0
- package/dist/infrastructure/network/AgentRateLimiter.js +186 -0
- package/dist/infrastructure/network/AgentRateLimiter.js.map +1 -0
- package/dist/infrastructure/network/AuditLogger.d.ts +102 -0
- package/dist/infrastructure/network/AuditLogger.d.ts.map +1 -0
- package/dist/infrastructure/network/AuditLogger.js +284 -0
- package/dist/infrastructure/network/AuditLogger.js.map +1 -0
- package/dist/infrastructure/network/DomainWhitelist.d.ts +111 -0
- package/dist/infrastructure/network/DomainWhitelist.d.ts.map +1 -0
- package/dist/infrastructure/network/DomainWhitelist.js +216 -0
- package/dist/infrastructure/network/DomainWhitelist.js.map +1 -0
- package/dist/infrastructure/network/NetworkPolicyManager.d.ts +97 -0
- package/dist/infrastructure/network/NetworkPolicyManager.d.ts.map +1 -0
- package/dist/infrastructure/network/NetworkPolicyManager.js +309 -0
- package/dist/infrastructure/network/NetworkPolicyManager.js.map +1 -0
- package/dist/infrastructure/network/index.d.ts +19 -0
- package/dist/infrastructure/network/index.d.ts.map +1 -0
- package/dist/infrastructure/network/index.js +46 -0
- package/dist/infrastructure/network/index.js.map +1 -0
- package/dist/infrastructure/network/policies/default-policies.d.ts +78 -0
- package/dist/infrastructure/network/policies/default-policies.d.ts.map +1 -0
- package/dist/infrastructure/network/policies/default-policies.js +312 -0
- package/dist/infrastructure/network/policies/default-policies.js.map +1 -0
- package/dist/infrastructure/network/types.d.ts +214 -0
- package/dist/infrastructure/network/types.d.ts.map +1 -0
- package/dist/infrastructure/network/types.js +25 -0
- package/dist/infrastructure/network/types.js.map +1 -0
- package/dist/infrastructure/sandbox/ResourceMonitor.d.ts +124 -0
- package/dist/infrastructure/sandbox/ResourceMonitor.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/ResourceMonitor.js +305 -0
- package/dist/infrastructure/sandbox/ResourceMonitor.js.map +1 -0
- package/dist/infrastructure/sandbox/SandboxManager.d.ts +122 -0
- package/dist/infrastructure/sandbox/SandboxManager.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/SandboxManager.js +527 -0
- package/dist/infrastructure/sandbox/SandboxManager.js.map +1 -0
- package/dist/infrastructure/sandbox/index.d.ts +18 -0
- package/dist/infrastructure/sandbox/index.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/index.js +38 -0
- package/dist/infrastructure/sandbox/index.js.map +1 -0
- package/dist/infrastructure/sandbox/profiles/agent-profiles.d.ts +53 -0
- package/dist/infrastructure/sandbox/profiles/agent-profiles.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/profiles/agent-profiles.js +433 -0
- package/dist/infrastructure/sandbox/profiles/agent-profiles.js.map +1 -0
- package/dist/infrastructure/sandbox/types.d.ts +227 -0
- package/dist/infrastructure/sandbox/types.d.ts.map +1 -0
- package/dist/infrastructure/sandbox/types.js +63 -0
- package/dist/infrastructure/sandbox/types.js.map +1 -0
- package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +8 -8
- package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -1
- package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -1
- package/dist/mcp/handlers/ruvector/RuVectorHandler.d.ts +54 -0
- package/dist/mcp/handlers/ruvector/RuVectorHandler.d.ts.map +1 -0
- package/dist/mcp/handlers/ruvector/RuVectorHandler.js +325 -0
- package/dist/mcp/handlers/ruvector/RuVectorHandler.js.map +1 -0
- package/dist/mcp/handlers/ruvector/index.d.ts +5 -0
- package/dist/mcp/handlers/ruvector/index.d.ts.map +1 -0
- package/dist/mcp/handlers/ruvector/index.js +9 -0
- package/dist/mcp/handlers/ruvector/index.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +100 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/nervous-system/adapters/BTSPAdapter.d.ts +342 -0
- package/dist/nervous-system/adapters/BTSPAdapter.d.ts.map +1 -0
- package/dist/nervous-system/adapters/BTSPAdapter.js +494 -0
- package/dist/nervous-system/adapters/BTSPAdapter.js.map +1 -0
- package/dist/nervous-system/adapters/CircadianController.d.ts +560 -0
- package/dist/nervous-system/adapters/CircadianController.d.ts.map +1 -0
- package/dist/nervous-system/adapters/CircadianController.js +882 -0
- package/dist/nervous-system/adapters/CircadianController.js.map +1 -0
- package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.d.ts +337 -0
- package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.d.ts.map +1 -0
- package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.js +532 -0
- package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.js.map +1 -0
- package/dist/nervous-system/adapters/HdcMemoryAdapter.d.ts +444 -0
- package/dist/nervous-system/adapters/HdcMemoryAdapter.d.ts.map +1 -0
- package/dist/nervous-system/adapters/HdcMemoryAdapter.js +715 -0
- package/dist/nervous-system/adapters/HdcMemoryAdapter.js.map +1 -0
- package/dist/nervous-system/adapters/ReflexLayer.d.ts +231 -0
- package/dist/nervous-system/adapters/ReflexLayer.d.ts.map +1 -0
- package/dist/nervous-system/adapters/ReflexLayer.js +309 -0
- package/dist/nervous-system/adapters/ReflexLayer.js.map +1 -0
- package/dist/nervous-system/index.d.ts +25 -0
- package/dist/nervous-system/index.d.ts.map +1 -0
- package/dist/nervous-system/index.js +80 -0
- package/dist/nervous-system/index.js.map +1 -0
- package/dist/nervous-system/integration/BTSPLearningEngine.d.ts +266 -0
- package/dist/nervous-system/integration/BTSPLearningEngine.d.ts.map +1 -0
- package/dist/nervous-system/integration/BTSPLearningEngine.js +587 -0
- package/dist/nervous-system/integration/BTSPLearningEngine.js.map +1 -0
- package/dist/nervous-system/integration/CircadianAgent.d.ts +389 -0
- package/dist/nervous-system/integration/CircadianAgent.d.ts.map +1 -0
- package/dist/nervous-system/integration/CircadianAgent.js +696 -0
- package/dist/nervous-system/integration/CircadianAgent.js.map +1 -0
- package/dist/nervous-system/integration/HybridPatternStore.d.ts +244 -0
- package/dist/nervous-system/integration/HybridPatternStore.d.ts.map +1 -0
- package/dist/nervous-system/integration/HybridPatternStore.js +622 -0
- package/dist/nervous-system/integration/HybridPatternStore.js.map +1 -0
- package/dist/nervous-system/integration/NervousSystemEnhancement.d.ts +459 -0
- package/dist/nervous-system/integration/NervousSystemEnhancement.d.ts.map +1 -0
- package/dist/nervous-system/integration/NervousSystemEnhancement.js +921 -0
- package/dist/nervous-system/integration/NervousSystemEnhancement.js.map +1 -0
- package/dist/nervous-system/integration/WorkspaceAgent.d.ts +398 -0
- package/dist/nervous-system/integration/WorkspaceAgent.d.ts.map +1 -0
- package/dist/nervous-system/integration/WorkspaceAgent.js +722 -0
- package/dist/nervous-system/integration/WorkspaceAgent.js.map +1 -0
- package/dist/nervous-system/integration/index.d.ts +22 -0
- package/dist/nervous-system/integration/index.d.ts.map +1 -0
- package/dist/nervous-system/integration/index.js +44 -0
- package/dist/nervous-system/integration/index.js.map +1 -0
- package/dist/nervous-system/persistence/BTSPSerializer.d.ts +96 -0
- package/dist/nervous-system/persistence/BTSPSerializer.d.ts.map +1 -0
- package/dist/nervous-system/persistence/BTSPSerializer.js +223 -0
- package/dist/nervous-system/persistence/BTSPSerializer.js.map +1 -0
- package/dist/nervous-system/persistence/CircadianSerializer.d.ts +90 -0
- package/dist/nervous-system/persistence/CircadianSerializer.d.ts.map +1 -0
- package/dist/nervous-system/persistence/CircadianSerializer.js +239 -0
- package/dist/nervous-system/persistence/CircadianSerializer.js.map +1 -0
- package/dist/nervous-system/persistence/HdcSerializer.d.ts +100 -0
- package/dist/nervous-system/persistence/HdcSerializer.d.ts.map +1 -0
- package/dist/nervous-system/persistence/HdcSerializer.js +259 -0
- package/dist/nervous-system/persistence/HdcSerializer.js.map +1 -0
- package/dist/nervous-system/persistence/INervousSystemStore.d.ts +208 -0
- package/dist/nervous-system/persistence/INervousSystemStore.d.ts.map +1 -0
- package/dist/nervous-system/persistence/INervousSystemStore.js +11 -0
- package/dist/nervous-system/persistence/INervousSystemStore.js.map +1 -0
- package/dist/nervous-system/persistence/NervousSystemPersistenceManager.d.ts +187 -0
- package/dist/nervous-system/persistence/NervousSystemPersistenceManager.d.ts.map +1 -0
- package/dist/nervous-system/persistence/NervousSystemPersistenceManager.js +411 -0
- package/dist/nervous-system/persistence/NervousSystemPersistenceManager.js.map +1 -0
- package/dist/nervous-system/persistence/SQLiteNervousSystemStore.d.ts +98 -0
- package/dist/nervous-system/persistence/SQLiteNervousSystemStore.d.ts.map +1 -0
- package/dist/nervous-system/persistence/SQLiteNervousSystemStore.js +510 -0
- package/dist/nervous-system/persistence/SQLiteNervousSystemStore.js.map +1 -0
- package/dist/nervous-system/persistence/index.d.ts +22 -0
- package/dist/nervous-system/persistence/index.d.ts.map +1 -0
- package/dist/nervous-system/persistence/index.js +45 -0
- package/dist/nervous-system/persistence/index.js.map +1 -0
- package/dist/nervous-system/wasm-loader.d.ts +52 -0
- package/dist/nervous-system/wasm-loader.d.ts.map +1 -0
- package/dist/nervous-system/wasm-loader.js +188 -0
- package/dist/nervous-system/wasm-loader.js.map +1 -0
- package/dist/persistence/HybridPersistenceProvider.d.ts +184 -0
- package/dist/persistence/HybridPersistenceProvider.d.ts.map +1 -0
- package/dist/persistence/HybridPersistenceProvider.js +1086 -0
- package/dist/persistence/HybridPersistenceProvider.js.map +1 -0
- package/dist/persistence/IPersistenceProvider.d.ts +657 -0
- package/dist/persistence/IPersistenceProvider.d.ts.map +1 -0
- package/dist/persistence/IPersistenceProvider.js +11 -0
- package/dist/persistence/IPersistenceProvider.js.map +1 -0
- package/dist/persistence/SupabaseConfig.d.ts +176 -0
- package/dist/persistence/SupabaseConfig.d.ts.map +1 -0
- package/dist/persistence/SupabaseConfig.js +277 -0
- package/dist/persistence/SupabaseConfig.js.map +1 -0
- package/dist/persistence/SupabasePersistenceProvider.d.ts +143 -0
- package/dist/persistence/SupabasePersistenceProvider.d.ts.map +1 -0
- package/dist/persistence/SupabasePersistenceProvider.js +959 -0
- package/dist/persistence/SupabasePersistenceProvider.js.map +1 -0
- package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.d.ts +213 -0
- package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.d.ts.map +1 -0
- package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.js +468 -0
- package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.js.map +1 -0
- package/dist/persistence/adapters/MemorySyncAdapter.d.ts +115 -0
- package/dist/persistence/adapters/MemorySyncAdapter.d.ts.map +1 -0
- package/dist/persistence/adapters/MemorySyncAdapter.js +291 -0
- package/dist/persistence/adapters/MemorySyncAdapter.js.map +1 -0
- package/dist/persistence/adapters/index.d.ts +11 -0
- package/dist/persistence/adapters/index.d.ts.map +1 -0
- package/dist/persistence/adapters/index.js +20 -0
- package/dist/persistence/adapters/index.js.map +1 -0
- package/dist/persistence/index.d.ts +14 -0
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +36 -1
- package/dist/persistence/index.js.map +1 -1
- package/package.json +7 -1
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Default Network Policies for QE Agents
|
|
4
|
+
*
|
|
5
|
+
* IMPORTANT: Network policy enforcement is OPT-IN, not opt-out.
|
|
6
|
+
* By default, agents have unrestricted network access for flexibility.
|
|
7
|
+
*
|
|
8
|
+
* Enable restrictive policies only when:
|
|
9
|
+
* - Deploying in security-sensitive environments
|
|
10
|
+
* - Running untrusted agent code
|
|
11
|
+
* - Compliance requirements mandate network isolation
|
|
12
|
+
*
|
|
13
|
+
* @module infrastructure/network/policies/default-policies
|
|
14
|
+
* @see Issue #146 - Security Hardening: SP-3 Network Policy Enforcement
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.DEFAULT_NETWORK_POLICIES = exports.RESTRICTIVE_POLICY_TEMPLATE = exports.DEVELOPMENT_DOMAINS = exports.LLM_PROVIDER_DOMAINS = void 0;
|
|
18
|
+
exports.getNetworkPolicy = getNetworkPolicy;
|
|
19
|
+
exports.listPolicyAgentTypes = listPolicyAgentTypes;
|
|
20
|
+
exports.mergePolicy = mergePolicy;
|
|
21
|
+
exports.createRestrictivePolicy = createRestrictivePolicy;
|
|
22
|
+
exports.enableRestrictiveModeGlobally = enableRestrictiveModeGlobally;
|
|
23
|
+
/**
|
|
24
|
+
* All known LLM provider domains that the multi-model router may access
|
|
25
|
+
* Add new providers here as they're supported
|
|
26
|
+
*/
|
|
27
|
+
exports.LLM_PROVIDER_DOMAINS = [
|
|
28
|
+
// Anthropic (Claude)
|
|
29
|
+
'api.anthropic.com',
|
|
30
|
+
// OpenAI
|
|
31
|
+
'api.openai.com',
|
|
32
|
+
// OpenRouter (multi-provider gateway)
|
|
33
|
+
'openrouter.ai',
|
|
34
|
+
// Groq
|
|
35
|
+
'api.groq.com',
|
|
36
|
+
// Google (Gemini)
|
|
37
|
+
'generativelanguage.googleapis.com',
|
|
38
|
+
// Together AI
|
|
39
|
+
'api.together.xyz',
|
|
40
|
+
// GitHub Models
|
|
41
|
+
'models.inference.ai.azure.com',
|
|
42
|
+
// Azure OpenAI
|
|
43
|
+
'openai.azure.com',
|
|
44
|
+
// Fireworks AI
|
|
45
|
+
'api.fireworks.ai',
|
|
46
|
+
// Mistral AI
|
|
47
|
+
'api.mistral.ai',
|
|
48
|
+
// Cohere
|
|
49
|
+
'api.cohere.ai',
|
|
50
|
+
// Perplexity
|
|
51
|
+
'api.perplexity.ai',
|
|
52
|
+
// DeepSeek
|
|
53
|
+
'api.deepseek.com',
|
|
54
|
+
// Local inference (Ollama, ruvLLM, vLLM, etc.)
|
|
55
|
+
'localhost',
|
|
56
|
+
'127.0.0.1',
|
|
57
|
+
];
|
|
58
|
+
/**
|
|
59
|
+
* Development/testing domains that agents commonly need
|
|
60
|
+
*/
|
|
61
|
+
exports.DEVELOPMENT_DOMAINS = [
|
|
62
|
+
// Package registries
|
|
63
|
+
'registry.npmjs.org',
|
|
64
|
+
'pypi.org',
|
|
65
|
+
// Code hosting
|
|
66
|
+
'api.github.com',
|
|
67
|
+
'github.com',
|
|
68
|
+
'gitlab.com',
|
|
69
|
+
'api.gitlab.com',
|
|
70
|
+
'bitbucket.org',
|
|
71
|
+
// Security databases (for security scanner)
|
|
72
|
+
'nvd.nist.gov',
|
|
73
|
+
'cve.mitre.org',
|
|
74
|
+
'osv.dev',
|
|
75
|
+
'security.snyk.io',
|
|
76
|
+
'cvedetails.com',
|
|
77
|
+
];
|
|
78
|
+
/**
|
|
79
|
+
* Default permissive policy - agents can access any domain
|
|
80
|
+
* This is the base policy when no restrictions are needed
|
|
81
|
+
*/
|
|
82
|
+
const PERMISSIVE_POLICY = {
|
|
83
|
+
agentType: 'default',
|
|
84
|
+
allowedDomains: [], // Empty = no whitelist = allow all
|
|
85
|
+
rateLimit: {
|
|
86
|
+
requestsPerMinute: 120,
|
|
87
|
+
requestsPerHour: 3000,
|
|
88
|
+
burstSize: 20,
|
|
89
|
+
},
|
|
90
|
+
auditLogging: true,
|
|
91
|
+
blockUnknownDomains: false, // OPT-IN: false = permissive by default
|
|
92
|
+
timeoutMs: 60000,
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Restrictive policy template for security-sensitive deployments
|
|
96
|
+
* Use this when you need to lock down agent network access
|
|
97
|
+
*/
|
|
98
|
+
exports.RESTRICTIVE_POLICY_TEMPLATE = {
|
|
99
|
+
agentType: 'restrictive-template',
|
|
100
|
+
allowedDomains: [...exports.LLM_PROVIDER_DOMAINS, ...exports.DEVELOPMENT_DOMAINS],
|
|
101
|
+
rateLimit: {
|
|
102
|
+
requestsPerMinute: 60,
|
|
103
|
+
requestsPerHour: 1000,
|
|
104
|
+
burstSize: 10,
|
|
105
|
+
},
|
|
106
|
+
auditLogging: true,
|
|
107
|
+
blockUnknownDomains: true, // Restrictive: only allow whitelisted domains
|
|
108
|
+
timeoutMs: 30000,
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Default network policies for all QE agent types
|
|
112
|
+
*
|
|
113
|
+
* DESIGN PRINCIPLE: Permissive by default (blockUnknownDomains: false)
|
|
114
|
+
* - QE agents need to test arbitrary websites/APIs
|
|
115
|
+
* - Multi-model router accesses multiple LLM providers
|
|
116
|
+
* - Rate limiting still applies for protection
|
|
117
|
+
*
|
|
118
|
+
* To enable restrictive mode:
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const policy = getNetworkPolicy('qe-test-generator');
|
|
121
|
+
* policy.blockUnknownDomains = true;
|
|
122
|
+
* policy.allowedDomains = [...LLM_PROVIDER_DOMAINS, 'my-api.example.com'];
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
exports.DEFAULT_NETWORK_POLICIES = {
|
|
126
|
+
// ============================================
|
|
127
|
+
// Core QE Agents - Permissive with audit logging
|
|
128
|
+
// ============================================
|
|
129
|
+
'qe-test-generator': {
|
|
130
|
+
...PERMISSIVE_POLICY,
|
|
131
|
+
agentType: 'qe-test-generator',
|
|
132
|
+
auditLogging: true,
|
|
133
|
+
},
|
|
134
|
+
'qe-coverage-analyzer': {
|
|
135
|
+
...PERMISSIVE_POLICY,
|
|
136
|
+
agentType: 'qe-coverage-analyzer',
|
|
137
|
+
},
|
|
138
|
+
'qe-security-scanner': {
|
|
139
|
+
...PERMISSIVE_POLICY,
|
|
140
|
+
agentType: 'qe-security-scanner',
|
|
141
|
+
// Security scanner gets higher rate limits for vulnerability DB queries
|
|
142
|
+
rateLimit: {
|
|
143
|
+
requestsPerMinute: 180,
|
|
144
|
+
requestsPerHour: 5000,
|
|
145
|
+
burstSize: 30,
|
|
146
|
+
},
|
|
147
|
+
timeoutMs: 90000, // Longer timeout for security scans
|
|
148
|
+
},
|
|
149
|
+
'qe-performance-tester': {
|
|
150
|
+
...PERMISSIVE_POLICY,
|
|
151
|
+
agentType: 'qe-performance-tester',
|
|
152
|
+
// Performance testing may need high request rates
|
|
153
|
+
rateLimit: {
|
|
154
|
+
requestsPerMinute: 300,
|
|
155
|
+
requestsPerHour: 10000,
|
|
156
|
+
burstSize: 50,
|
|
157
|
+
},
|
|
158
|
+
timeoutMs: 120000, // Longer timeout for perf tests
|
|
159
|
+
},
|
|
160
|
+
'qe-flaky-test-hunter': {
|
|
161
|
+
...PERMISSIVE_POLICY,
|
|
162
|
+
agentType: 'qe-flaky-test-hunter',
|
|
163
|
+
},
|
|
164
|
+
'qe-api-contract-validator': {
|
|
165
|
+
...PERMISSIVE_POLICY,
|
|
166
|
+
agentType: 'qe-api-contract-validator',
|
|
167
|
+
// Contract validation needs to hit various API endpoints
|
|
168
|
+
rateLimit: {
|
|
169
|
+
requestsPerMinute: 120,
|
|
170
|
+
requestsPerHour: 3000,
|
|
171
|
+
burstSize: 25,
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
'qe-visual-tester': {
|
|
175
|
+
...PERMISSIVE_POLICY,
|
|
176
|
+
agentType: 'qe-visual-tester',
|
|
177
|
+
timeoutMs: 90000, // Screenshots take time
|
|
178
|
+
},
|
|
179
|
+
'qe-code-intelligence': {
|
|
180
|
+
...PERMISSIVE_POLICY,
|
|
181
|
+
agentType: 'qe-code-intelligence',
|
|
182
|
+
},
|
|
183
|
+
'qe-quality-analyzer': {
|
|
184
|
+
...PERMISSIVE_POLICY,
|
|
185
|
+
agentType: 'qe-quality-analyzer',
|
|
186
|
+
},
|
|
187
|
+
'qe-a11y-ally': {
|
|
188
|
+
...PERMISSIVE_POLICY,
|
|
189
|
+
agentType: 'qe-a11y-ally',
|
|
190
|
+
// A11y testing needs to fetch web pages
|
|
191
|
+
rateLimit: {
|
|
192
|
+
requestsPerMinute: 60,
|
|
193
|
+
requestsPerHour: 1500,
|
|
194
|
+
burstSize: 15,
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
'qe-chaos-engineer': {
|
|
198
|
+
...PERMISSIVE_POLICY,
|
|
199
|
+
agentType: 'qe-chaos-engineer',
|
|
200
|
+
// Chaos engineering may need to probe many endpoints
|
|
201
|
+
rateLimit: {
|
|
202
|
+
requestsPerMinute: 200,
|
|
203
|
+
requestsPerHour: 5000,
|
|
204
|
+
burstSize: 40,
|
|
205
|
+
},
|
|
206
|
+
timeoutMs: 90000,
|
|
207
|
+
},
|
|
208
|
+
'qe-deployment-readiness': {
|
|
209
|
+
...PERMISSIVE_POLICY,
|
|
210
|
+
agentType: 'qe-deployment-readiness',
|
|
211
|
+
},
|
|
212
|
+
'qe-production-intelligence': {
|
|
213
|
+
...PERMISSIVE_POLICY,
|
|
214
|
+
agentType: 'qe-production-intelligence',
|
|
215
|
+
},
|
|
216
|
+
'qx-partner': {
|
|
217
|
+
...PERMISSIVE_POLICY,
|
|
218
|
+
agentType: 'qx-partner',
|
|
219
|
+
},
|
|
220
|
+
// ============================================
|
|
221
|
+
// n8n Workflow Agents - Permissive
|
|
222
|
+
// ============================================
|
|
223
|
+
'n8n-workflow-executor': {
|
|
224
|
+
...PERMISSIVE_POLICY,
|
|
225
|
+
agentType: 'n8n-workflow-executor',
|
|
226
|
+
// Workflows may call arbitrary APIs
|
|
227
|
+
rateLimit: {
|
|
228
|
+
requestsPerMinute: 120,
|
|
229
|
+
requestsPerHour: 3000,
|
|
230
|
+
burstSize: 20,
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
'n8n-security-auditor': {
|
|
234
|
+
...PERMISSIVE_POLICY,
|
|
235
|
+
agentType: 'n8n-security-auditor',
|
|
236
|
+
},
|
|
237
|
+
'n8n-chaos-tester': {
|
|
238
|
+
...PERMISSIVE_POLICY,
|
|
239
|
+
agentType: 'n8n-chaos-tester',
|
|
240
|
+
rateLimit: {
|
|
241
|
+
requestsPerMinute: 150,
|
|
242
|
+
requestsPerHour: 4000,
|
|
243
|
+
burstSize: 30,
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
// ============================================
|
|
247
|
+
// Default Policy - Applied to unknown agent types
|
|
248
|
+
// ============================================
|
|
249
|
+
default: {
|
|
250
|
+
...PERMISSIVE_POLICY,
|
|
251
|
+
agentType: 'default',
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Get policy for an agent type
|
|
256
|
+
* Falls back to default if not found
|
|
257
|
+
*/
|
|
258
|
+
function getNetworkPolicy(agentType) {
|
|
259
|
+
return exports.DEFAULT_NETWORK_POLICIES[agentType] || exports.DEFAULT_NETWORK_POLICIES['default'];
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* List all agent types with policies
|
|
263
|
+
*/
|
|
264
|
+
function listPolicyAgentTypes() {
|
|
265
|
+
return Object.keys(exports.DEFAULT_NETWORK_POLICIES).filter((k) => k !== 'default');
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Merge custom policy with default
|
|
269
|
+
*/
|
|
270
|
+
function mergePolicy(agentType, customPolicy) {
|
|
271
|
+
const basePolicy = getNetworkPolicy(agentType);
|
|
272
|
+
return {
|
|
273
|
+
...basePolicy,
|
|
274
|
+
...customPolicy,
|
|
275
|
+
rateLimit: {
|
|
276
|
+
...basePolicy.rateLimit,
|
|
277
|
+
...customPolicy.rateLimit,
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Create a restrictive policy for security-sensitive deployments
|
|
283
|
+
*
|
|
284
|
+
* @example
|
|
285
|
+
* ```typescript
|
|
286
|
+
* // Lock down an agent to only access LLM providers and specific APIs
|
|
287
|
+
* const policy = createRestrictivePolicy('qe-test-generator', [
|
|
288
|
+
* 'api.example.com',
|
|
289
|
+
* 'staging.example.com'
|
|
290
|
+
* ]);
|
|
291
|
+
* manager.registerPolicy(policy);
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
294
|
+
function createRestrictivePolicy(agentType, additionalDomains = []) {
|
|
295
|
+
const basePolicy = getNetworkPolicy(agentType);
|
|
296
|
+
return {
|
|
297
|
+
...basePolicy,
|
|
298
|
+
allowedDomains: [...exports.LLM_PROVIDER_DOMAINS, ...exports.DEVELOPMENT_DOMAINS, ...additionalDomains],
|
|
299
|
+
blockUnknownDomains: true,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Enable restrictive mode for all default policies
|
|
304
|
+
* Call this when deploying in a security-sensitive environment
|
|
305
|
+
*/
|
|
306
|
+
function enableRestrictiveModeGlobally() {
|
|
307
|
+
for (const policy of Object.values(exports.DEFAULT_NETWORK_POLICIES)) {
|
|
308
|
+
policy.allowedDomains = [...exports.LLM_PROVIDER_DOMAINS, ...exports.DEVELOPMENT_DOMAINS];
|
|
309
|
+
policy.blockUnknownDomains = true;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=default-policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-policies.js","sourceRoot":"","sources":["../../../../src/infrastructure/network/policies/default-policies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for Network Policy Enforcement
|
|
3
|
+
*
|
|
4
|
+
* Provides type definitions for agent network access control,
|
|
5
|
+
* domain whitelisting, rate limiting, and audit logging.
|
|
6
|
+
*
|
|
7
|
+
* @module infrastructure/network/types
|
|
8
|
+
* @see Issue #146 - Security Hardening: SP-3 Network Policy Enforcement
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Network policy for an agent type
|
|
12
|
+
*/
|
|
13
|
+
export interface NetworkPolicy {
|
|
14
|
+
/** Agent type this policy applies to */
|
|
15
|
+
agentType: string;
|
|
16
|
+
/** Allowed domains for network access */
|
|
17
|
+
allowedDomains: string[];
|
|
18
|
+
/** Rate limiting configuration */
|
|
19
|
+
rateLimit: RateLimitConfig;
|
|
20
|
+
/** Enable audit logging for this agent type */
|
|
21
|
+
auditLogging: boolean;
|
|
22
|
+
/** Block requests to domains not in allowedDomains */
|
|
23
|
+
blockUnknownDomains: boolean;
|
|
24
|
+
/** Custom headers to add to requests */
|
|
25
|
+
customHeaders?: Record<string, string>;
|
|
26
|
+
/** Timeout for requests in ms */
|
|
27
|
+
timeoutMs?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Rate limit configuration
|
|
31
|
+
*/
|
|
32
|
+
export interface RateLimitConfig {
|
|
33
|
+
/** Maximum requests per minute */
|
|
34
|
+
requestsPerMinute: number;
|
|
35
|
+
/** Maximum requests per hour */
|
|
36
|
+
requestsPerHour: number;
|
|
37
|
+
/** Burst size for token bucket */
|
|
38
|
+
burstSize: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Policy check result
|
|
42
|
+
*/
|
|
43
|
+
export interface PolicyCheckResult {
|
|
44
|
+
/** Whether the request is allowed */
|
|
45
|
+
allowed: boolean;
|
|
46
|
+
/** Policy that was applied */
|
|
47
|
+
policy: NetworkPolicy;
|
|
48
|
+
/** Reason if blocked */
|
|
49
|
+
reason?: PolicyBlockReason;
|
|
50
|
+
/** Details about the block */
|
|
51
|
+
details?: string;
|
|
52
|
+
/** Rate limit status */
|
|
53
|
+
rateLimitStatus?: RateLimitStatus;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Reasons for blocking a request
|
|
57
|
+
*/
|
|
58
|
+
export type PolicyBlockReason = 'domain_not_allowed' | 'rate_limit_exceeded' | 'policy_not_found' | 'agent_blocked';
|
|
59
|
+
/**
|
|
60
|
+
* Rate limit status
|
|
61
|
+
*/
|
|
62
|
+
export interface RateLimitStatus {
|
|
63
|
+
/** Whether currently rate limited */
|
|
64
|
+
limited: boolean;
|
|
65
|
+
/** Current request count in window */
|
|
66
|
+
currentRate: number;
|
|
67
|
+
/** Remaining requests in window */
|
|
68
|
+
remaining: number;
|
|
69
|
+
/** Time until rate limit resets (ms) */
|
|
70
|
+
resetIn: number;
|
|
71
|
+
/** Retry after time if limited (ms) */
|
|
72
|
+
retryAfter?: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Audit entry for network requests
|
|
76
|
+
*/
|
|
77
|
+
export interface AuditEntry {
|
|
78
|
+
/** Entry ID */
|
|
79
|
+
id: string;
|
|
80
|
+
/** Timestamp of the request */
|
|
81
|
+
timestamp: Date;
|
|
82
|
+
/** Agent ID making the request */
|
|
83
|
+
agentId: string;
|
|
84
|
+
/** Agent type */
|
|
85
|
+
agentType: string;
|
|
86
|
+
/** Target domain */
|
|
87
|
+
domain: string;
|
|
88
|
+
/** Full URL (optional, may be redacted) */
|
|
89
|
+
url?: string;
|
|
90
|
+
/** Action taken */
|
|
91
|
+
action: AuditAction;
|
|
92
|
+
/** Reason for action */
|
|
93
|
+
reason?: string;
|
|
94
|
+
/** HTTP method */
|
|
95
|
+
requestMethod?: string;
|
|
96
|
+
/** Request path */
|
|
97
|
+
requestPath?: string;
|
|
98
|
+
/** Response status code */
|
|
99
|
+
responseStatus?: number;
|
|
100
|
+
/** Response time in ms */
|
|
101
|
+
responseTimeMs?: number;
|
|
102
|
+
/** Request body size */
|
|
103
|
+
requestSizeBytes?: number;
|
|
104
|
+
/** Response body size */
|
|
105
|
+
responseSizeBytes?: number;
|
|
106
|
+
/** Additional metadata */
|
|
107
|
+
metadata?: Record<string, unknown>;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Audit action types
|
|
111
|
+
*/
|
|
112
|
+
export type AuditAction = 'allowed' | 'blocked' | 'rate_limited';
|
|
113
|
+
/**
|
|
114
|
+
* Query filter for audit entries
|
|
115
|
+
*/
|
|
116
|
+
export interface AuditQueryFilter {
|
|
117
|
+
/** Filter by agent ID */
|
|
118
|
+
agentId?: string;
|
|
119
|
+
/** Filter by agent type */
|
|
120
|
+
agentType?: string;
|
|
121
|
+
/** Filter by domain */
|
|
122
|
+
domain?: string;
|
|
123
|
+
/** Filter by action */
|
|
124
|
+
action?: AuditAction;
|
|
125
|
+
/** Start timestamp */
|
|
126
|
+
since?: Date;
|
|
127
|
+
/** End timestamp */
|
|
128
|
+
until?: Date;
|
|
129
|
+
/** Maximum entries to return */
|
|
130
|
+
limit?: number;
|
|
131
|
+
/** Offset for pagination */
|
|
132
|
+
offset?: number;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Audit statistics
|
|
136
|
+
*/
|
|
137
|
+
export interface AuditStats {
|
|
138
|
+
/** Total requests */
|
|
139
|
+
totalRequests: number;
|
|
140
|
+
/** Allowed requests */
|
|
141
|
+
allowedRequests: number;
|
|
142
|
+
/** Blocked requests */
|
|
143
|
+
blockedRequests: number;
|
|
144
|
+
/** Rate limited requests */
|
|
145
|
+
rateLimitedRequests: number;
|
|
146
|
+
/** Requests by domain */
|
|
147
|
+
byDomain: Record<string, number>;
|
|
148
|
+
/** Requests by agent type */
|
|
149
|
+
byAgentType: Record<string, number>;
|
|
150
|
+
/** Average response time */
|
|
151
|
+
avgResponseTimeMs: number;
|
|
152
|
+
/** Time period for stats */
|
|
153
|
+
since: Date;
|
|
154
|
+
/** Stats collection timestamp */
|
|
155
|
+
timestamp: Date;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Network policy manager configuration
|
|
159
|
+
*/
|
|
160
|
+
export interface NetworkPolicyManagerConfig {
|
|
161
|
+
/** Default policy for unknown agent types */
|
|
162
|
+
defaultPolicy: NetworkPolicy;
|
|
163
|
+
/** Enable audit logging */
|
|
164
|
+
enableAuditLogging: boolean;
|
|
165
|
+
/** Maximum audit entries to keep in memory */
|
|
166
|
+
maxAuditEntries: number;
|
|
167
|
+
/** Persist audit log to file */
|
|
168
|
+
persistAuditLog?: boolean;
|
|
169
|
+
/** Audit log file path */
|
|
170
|
+
auditLogPath?: string;
|
|
171
|
+
/** Enable debug logging */
|
|
172
|
+
debug: boolean;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Network policy error
|
|
176
|
+
*/
|
|
177
|
+
export declare class NetworkPolicyError extends Error {
|
|
178
|
+
readonly reason: PolicyBlockReason;
|
|
179
|
+
readonly details?: Record<string, unknown> | undefined;
|
|
180
|
+
constructor(message: string, reason: PolicyBlockReason, details?: Record<string, unknown> | undefined);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Rate limiter interface
|
|
184
|
+
*/
|
|
185
|
+
export interface IRateLimiter {
|
|
186
|
+
/** Check if request is allowed (doesn't consume) */
|
|
187
|
+
check(agentId: string): RateLimitStatus;
|
|
188
|
+
/** Consume a request (returns status) */
|
|
189
|
+
consume(agentId: string): RateLimitStatus;
|
|
190
|
+
/** Reset rate limit for agent */
|
|
191
|
+
reset(agentId: string): void;
|
|
192
|
+
/** Get current status for agent */
|
|
193
|
+
getStatus(agentId: string): RateLimitStatus;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Event types for network policy events
|
|
197
|
+
*/
|
|
198
|
+
export type NetworkPolicyEventType = 'request_allowed' | 'request_blocked' | 'request_rate_limited' | 'policy_updated' | 'policy_violation';
|
|
199
|
+
/**
|
|
200
|
+
* Network policy event
|
|
201
|
+
*/
|
|
202
|
+
export interface NetworkPolicyEvent {
|
|
203
|
+
type: NetworkPolicyEventType;
|
|
204
|
+
timestamp: Date;
|
|
205
|
+
agentId: string;
|
|
206
|
+
agentType: string;
|
|
207
|
+
domain?: string;
|
|
208
|
+
details?: Record<string, unknown>;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Event handler type
|
|
212
|
+
*/
|
|
213
|
+
export type NetworkPolicyEventHandler = (event: NetworkPolicyEvent) => void | Promise<void>;
|
|
214
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/network/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Types for Network Policy Enforcement
|
|
4
|
+
*
|
|
5
|
+
* Provides type definitions for agent network access control,
|
|
6
|
+
* domain whitelisting, rate limiting, and audit logging.
|
|
7
|
+
*
|
|
8
|
+
* @module infrastructure/network/types
|
|
9
|
+
* @see Issue #146 - Security Hardening: SP-3 Network Policy Enforcement
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.NetworkPolicyError = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* Network policy error
|
|
15
|
+
*/
|
|
16
|
+
class NetworkPolicyError extends Error {
|
|
17
|
+
constructor(message, reason, details) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.reason = reason;
|
|
20
|
+
this.details = details;
|
|
21
|
+
this.name = 'NetworkPolicyError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.NetworkPolicyError = NetworkPolicyError;
|
|
25
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/infrastructure/network/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAsOH;;GAEG;AACH,MAAa,kBAAmB,SAAQ,KAAK;IAC3C,YACE,OAAe,EACC,MAAyB,EACzB,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAmB;QACzB,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AATD,gDASC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Monitor for Docker Containers
|
|
3
|
+
*
|
|
4
|
+
* Monitors CPU, memory, disk, and network usage for sandboxed agent containers.
|
|
5
|
+
* Provides real-time stats and threshold-based alerts.
|
|
6
|
+
*
|
|
7
|
+
* @module infrastructure/sandbox/ResourceMonitor
|
|
8
|
+
* @see Issue #146 - Security Hardening: Docker Sandboxing
|
|
9
|
+
*/
|
|
10
|
+
import type Docker from 'dockerode';
|
|
11
|
+
import type { ResourceStats, SandboxEventHandler } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Resource threshold configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface ResourceThresholds {
|
|
16
|
+
/** CPU usage percentage threshold (0-100) */
|
|
17
|
+
cpuPercent: number;
|
|
18
|
+
/** Memory usage percentage threshold (0-100) */
|
|
19
|
+
memoryPercent: number;
|
|
20
|
+
/** Disk usage percentage threshold (0-100) */
|
|
21
|
+
diskPercent: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default resource thresholds for alerts
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_THRESHOLDS: ResourceThresholds;
|
|
27
|
+
/**
|
|
28
|
+
* Resource monitor configuration
|
|
29
|
+
*/
|
|
30
|
+
export interface ResourceMonitorConfig {
|
|
31
|
+
/** Monitoring interval in milliseconds */
|
|
32
|
+
intervalMs: number;
|
|
33
|
+
/** Resource thresholds for alerts */
|
|
34
|
+
thresholds: ResourceThresholds;
|
|
35
|
+
/** Enable automatic OOM prevention */
|
|
36
|
+
enableOomPrevention: boolean;
|
|
37
|
+
/** Memory threshold for OOM prevention (percentage) */
|
|
38
|
+
oomPreventionThreshold: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Default monitor configuration
|
|
42
|
+
*/
|
|
43
|
+
export declare const DEFAULT_MONITOR_CONFIG: ResourceMonitorConfig;
|
|
44
|
+
/**
|
|
45
|
+
* ResourceMonitor class for tracking container resource usage
|
|
46
|
+
*/
|
|
47
|
+
export declare class ResourceMonitor {
|
|
48
|
+
private docker;
|
|
49
|
+
private config;
|
|
50
|
+
private containers;
|
|
51
|
+
private monitorInterval;
|
|
52
|
+
private eventHandlers;
|
|
53
|
+
private isRunning;
|
|
54
|
+
constructor(docker: Docker, config?: Partial<ResourceMonitorConfig>);
|
|
55
|
+
/**
|
|
56
|
+
* Start monitoring a container
|
|
57
|
+
*/
|
|
58
|
+
addContainer(containerId: string, agentId: string, agentType: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Stop monitoring a container
|
|
61
|
+
*/
|
|
62
|
+
removeContainer(containerId: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Start the monitoring loop
|
|
65
|
+
*/
|
|
66
|
+
start(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Stop the monitoring loop
|
|
69
|
+
*/
|
|
70
|
+
stop(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get stats for a specific container
|
|
73
|
+
*/
|
|
74
|
+
getStats(containerId: string): Promise<ResourceStats | null>;
|
|
75
|
+
/**
|
|
76
|
+
* Get cached stats for a container (no API call)
|
|
77
|
+
*/
|
|
78
|
+
getCachedStats(containerId: string): ResourceStats | null;
|
|
79
|
+
/**
|
|
80
|
+
* Get stats for all monitored containers
|
|
81
|
+
*/
|
|
82
|
+
getAllStats(): Promise<Map<string, ResourceStats>>;
|
|
83
|
+
/**
|
|
84
|
+
* Add event handler
|
|
85
|
+
*/
|
|
86
|
+
on(handler: SandboxEventHandler): void;
|
|
87
|
+
/**
|
|
88
|
+
* Remove event handler
|
|
89
|
+
*/
|
|
90
|
+
off(handler: SandboxEventHandler): void;
|
|
91
|
+
/**
|
|
92
|
+
* Collect stats for all monitored containers
|
|
93
|
+
*/
|
|
94
|
+
private collectAllStats;
|
|
95
|
+
/**
|
|
96
|
+
* Collect stats and check thresholds for a container
|
|
97
|
+
*/
|
|
98
|
+
private collectAndCheckContainer;
|
|
99
|
+
/**
|
|
100
|
+
* Collect resource stats for a container
|
|
101
|
+
*/
|
|
102
|
+
private collectContainerStats;
|
|
103
|
+
/**
|
|
104
|
+
* Parse Docker stats response into ResourceStats
|
|
105
|
+
*/
|
|
106
|
+
private parseDockerStats;
|
|
107
|
+
/**
|
|
108
|
+
* Check resource thresholds and emit events
|
|
109
|
+
*/
|
|
110
|
+
private checkThresholds;
|
|
111
|
+
/**
|
|
112
|
+
* Emit event to all handlers
|
|
113
|
+
*/
|
|
114
|
+
private emitEvent;
|
|
115
|
+
/**
|
|
116
|
+
* Get monitoring status
|
|
117
|
+
*/
|
|
118
|
+
getStatus(): {
|
|
119
|
+
running: boolean;
|
|
120
|
+
containerCount: number;
|
|
121
|
+
intervalMs: number;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=ResourceMonitor.d.ts.map
|