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.
- package/CHANGELOG.md +43 -0
- package/README.md +1 -1
- package/dist/agents/BaseAgent.d.ts +201 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +401 -0
- package/dist/agents/BaseAgent.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/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/persistence/SupabasePersistenceProvider.d.ts.map +1 -1
- package/dist/persistence/SupabasePersistenceProvider.js +8 -4
- package/dist/persistence/SupabasePersistenceProvider.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Whitelist for Network Policy Enforcement
|
|
3
|
+
*
|
|
4
|
+
* Manages allowed domains with support for wildcards and subdomains.
|
|
5
|
+
* Provides O(1) lookup for exact matches and O(n) for wildcard patterns.
|
|
6
|
+
*
|
|
7
|
+
* @module infrastructure/network/DomainWhitelist
|
|
8
|
+
* @see Issue #146 - Security Hardening: SP-3 Network Policy Enforcement
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Domain whitelist with wildcard support
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Exact domain matching
|
|
15
|
+
* - Wildcard patterns (*.example.com)
|
|
16
|
+
* - Subdomain matching
|
|
17
|
+
* - Case-insensitive matching
|
|
18
|
+
*/
|
|
19
|
+
export declare class DomainWhitelist {
|
|
20
|
+
/** Exact domain matches (normalized to lowercase) */
|
|
21
|
+
private exactDomains;
|
|
22
|
+
/** Wildcard patterns as regex */
|
|
23
|
+
private wildcardPatterns;
|
|
24
|
+
/** Original domain list */
|
|
25
|
+
private domains;
|
|
26
|
+
constructor(domains?: string[]);
|
|
27
|
+
/**
|
|
28
|
+
* Add a domain to the whitelist
|
|
29
|
+
* @param domain Domain or pattern (e.g., "example.com" or "*.example.com")
|
|
30
|
+
*/
|
|
31
|
+
addDomain(domain: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Remove a domain from the whitelist
|
|
34
|
+
* @param domain Domain to remove
|
|
35
|
+
*/
|
|
36
|
+
removeDomain(domain: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Check if a domain is allowed
|
|
39
|
+
* @param domain Domain to check
|
|
40
|
+
* @returns true if allowed
|
|
41
|
+
*/
|
|
42
|
+
isAllowed(domain: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Check if a URL is allowed
|
|
45
|
+
* @param url Full URL to check
|
|
46
|
+
* @returns true if the domain is allowed
|
|
47
|
+
*/
|
|
48
|
+
isUrlAllowed(url: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* List all domains in the whitelist
|
|
51
|
+
*/
|
|
52
|
+
listDomains(): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Get the number of domains
|
|
55
|
+
*/
|
|
56
|
+
size(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Clear all domains
|
|
59
|
+
*/
|
|
60
|
+
clear(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Check if the whitelist is empty
|
|
63
|
+
*/
|
|
64
|
+
isEmpty(): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Merge another whitelist into this one
|
|
67
|
+
*/
|
|
68
|
+
merge(other: DomainWhitelist): void;
|
|
69
|
+
/**
|
|
70
|
+
* Create a copy of this whitelist
|
|
71
|
+
*/
|
|
72
|
+
clone(): DomainWhitelist;
|
|
73
|
+
/**
|
|
74
|
+
* Get matching pattern for a domain (for debugging)
|
|
75
|
+
*/
|
|
76
|
+
getMatchingPattern(domain: string): string | null;
|
|
77
|
+
/**
|
|
78
|
+
* Export to JSON
|
|
79
|
+
*/
|
|
80
|
+
toJSON(): string[];
|
|
81
|
+
/**
|
|
82
|
+
* Create from JSON
|
|
83
|
+
*/
|
|
84
|
+
static fromJSON(domains: string[]): DomainWhitelist;
|
|
85
|
+
/**
|
|
86
|
+
* Escape special regex characters
|
|
87
|
+
*/
|
|
88
|
+
private escapeRegex;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Common domain presets
|
|
92
|
+
*/
|
|
93
|
+
export declare const COMMON_DOMAIN_PRESETS: {
|
|
94
|
+
/** Anthropic API */
|
|
95
|
+
anthropic: string[];
|
|
96
|
+
/** GitHub */
|
|
97
|
+
github: string[];
|
|
98
|
+
/** npm registry */
|
|
99
|
+
npm: string[];
|
|
100
|
+
/** Security databases */
|
|
101
|
+
security: string[];
|
|
102
|
+
/** OpenAI */
|
|
103
|
+
openai: string[];
|
|
104
|
+
/** Localhost */
|
|
105
|
+
localhost: string[];
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Create a whitelist from presets
|
|
109
|
+
*/
|
|
110
|
+
export declare function createWhitelistFromPresets(...presetNames: (keyof typeof COMMON_DOMAIN_PRESETS)[]): DomainWhitelist;
|
|
111
|
+
//# sourceMappingURL=DomainWhitelist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainWhitelist.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/network/DomainWhitelist.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC1B,qDAAqD;IACrD,OAAO,CAAC,YAAY,CAAc;IAElC,iCAAiC;IACjC,OAAO,CAAC,gBAAgB,CAA4C;IAEpE,2BAA2B;IAC3B,OAAO,CAAC,OAAO,CAAW;gBAEd,OAAO,GAAE,MAAM,EAAO;IAUlC;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAuB/B;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBlC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAkBlC;;;;OAIG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASlC;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAMnC;;OAEG;IACH,KAAK,IAAI,eAAe;IAIxB;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgBjD;;OAEG;IACH,MAAM,IAAI,MAAM,EAAE;IAIlB;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe;IAQnD;;OAEG;IACH,OAAO,CAAC,WAAW;CAGpB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB;IAChC,oBAAoB;;IAGpB,aAAa;;IAGb,mBAAmB;;IAGnB,yBAAyB;;IAGzB,aAAa;;IAGb,gBAAgB;;CAEjB,CAAC;AAEF;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,WAAW,EAAE,CAAC,MAAM,OAAO,qBAAqB,CAAC,EAAE,GACrD,eAAe,CAWjB"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Domain Whitelist for Network Policy Enforcement
|
|
4
|
+
*
|
|
5
|
+
* Manages allowed domains with support for wildcards and subdomains.
|
|
6
|
+
* Provides O(1) lookup for exact matches and O(n) for wildcard patterns.
|
|
7
|
+
*
|
|
8
|
+
* @module infrastructure/network/DomainWhitelist
|
|
9
|
+
* @see Issue #146 - Security Hardening: SP-3 Network Policy Enforcement
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.COMMON_DOMAIN_PRESETS = exports.DomainWhitelist = void 0;
|
|
13
|
+
exports.createWhitelistFromPresets = createWhitelistFromPresets;
|
|
14
|
+
/**
|
|
15
|
+
* Domain whitelist with wildcard support
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Exact domain matching
|
|
19
|
+
* - Wildcard patterns (*.example.com)
|
|
20
|
+
* - Subdomain matching
|
|
21
|
+
* - Case-insensitive matching
|
|
22
|
+
*/
|
|
23
|
+
class DomainWhitelist {
|
|
24
|
+
constructor(domains = []) {
|
|
25
|
+
this.exactDomains = new Set();
|
|
26
|
+
this.wildcardPatterns = [];
|
|
27
|
+
this.domains = [];
|
|
28
|
+
for (const domain of domains) {
|
|
29
|
+
this.addDomain(domain);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Add a domain to the whitelist
|
|
34
|
+
* @param domain Domain or pattern (e.g., "example.com" or "*.example.com")
|
|
35
|
+
*/
|
|
36
|
+
addDomain(domain) {
|
|
37
|
+
const normalized = domain.toLowerCase().trim();
|
|
38
|
+
if (this.domains.includes(normalized)) {
|
|
39
|
+
return; // Already added
|
|
40
|
+
}
|
|
41
|
+
this.domains.push(normalized);
|
|
42
|
+
if (normalized.startsWith('*.')) {
|
|
43
|
+
// Wildcard pattern
|
|
44
|
+
const suffix = normalized.slice(2);
|
|
45
|
+
const regexPattern = `^([a-z0-9-]+\\.)*${this.escapeRegex(suffix)}$`;
|
|
46
|
+
this.wildcardPatterns.push({
|
|
47
|
+
pattern: normalized,
|
|
48
|
+
regex: new RegExp(regexPattern, 'i'),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Exact domain
|
|
53
|
+
this.exactDomains.add(normalized);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Remove a domain from the whitelist
|
|
58
|
+
* @param domain Domain to remove
|
|
59
|
+
*/
|
|
60
|
+
removeDomain(domain) {
|
|
61
|
+
const normalized = domain.toLowerCase().trim();
|
|
62
|
+
const index = this.domains.indexOf(normalized);
|
|
63
|
+
if (index === -1)
|
|
64
|
+
return;
|
|
65
|
+
this.domains.splice(index, 1);
|
|
66
|
+
if (normalized.startsWith('*.')) {
|
|
67
|
+
// Remove wildcard pattern
|
|
68
|
+
this.wildcardPatterns = this.wildcardPatterns.filter((p) => p.pattern !== normalized);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Remove exact domain
|
|
72
|
+
this.exactDomains.delete(normalized);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if a domain is allowed
|
|
77
|
+
* @param domain Domain to check
|
|
78
|
+
* @returns true if allowed
|
|
79
|
+
*/
|
|
80
|
+
isAllowed(domain) {
|
|
81
|
+
const normalized = domain.toLowerCase().trim();
|
|
82
|
+
// Check exact match first (O(1))
|
|
83
|
+
if (this.exactDomains.has(normalized)) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
// Check wildcard patterns (O(n))
|
|
87
|
+
for (const { regex } of this.wildcardPatterns) {
|
|
88
|
+
if (regex.test(normalized)) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if a URL is allowed
|
|
96
|
+
* @param url Full URL to check
|
|
97
|
+
* @returns true if the domain is allowed
|
|
98
|
+
*/
|
|
99
|
+
isUrlAllowed(url) {
|
|
100
|
+
try {
|
|
101
|
+
const parsedUrl = new URL(url);
|
|
102
|
+
return this.isAllowed(parsedUrl.hostname);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* List all domains in the whitelist
|
|
110
|
+
*/
|
|
111
|
+
listDomains() {
|
|
112
|
+
return [...this.domains];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get the number of domains
|
|
116
|
+
*/
|
|
117
|
+
size() {
|
|
118
|
+
return this.domains.length;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Clear all domains
|
|
122
|
+
*/
|
|
123
|
+
clear() {
|
|
124
|
+
this.exactDomains.clear();
|
|
125
|
+
this.wildcardPatterns = [];
|
|
126
|
+
this.domains = [];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if the whitelist is empty
|
|
130
|
+
*/
|
|
131
|
+
isEmpty() {
|
|
132
|
+
return this.domains.length === 0;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Merge another whitelist into this one
|
|
136
|
+
*/
|
|
137
|
+
merge(other) {
|
|
138
|
+
for (const domain of other.domains) {
|
|
139
|
+
this.addDomain(domain);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Create a copy of this whitelist
|
|
144
|
+
*/
|
|
145
|
+
clone() {
|
|
146
|
+
return new DomainWhitelist([...this.domains]);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get matching pattern for a domain (for debugging)
|
|
150
|
+
*/
|
|
151
|
+
getMatchingPattern(domain) {
|
|
152
|
+
const normalized = domain.toLowerCase().trim();
|
|
153
|
+
if (this.exactDomains.has(normalized)) {
|
|
154
|
+
return normalized;
|
|
155
|
+
}
|
|
156
|
+
for (const { pattern, regex } of this.wildcardPatterns) {
|
|
157
|
+
if (regex.test(normalized)) {
|
|
158
|
+
return pattern;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Export to JSON
|
|
165
|
+
*/
|
|
166
|
+
toJSON() {
|
|
167
|
+
return [...this.domains];
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Create from JSON
|
|
171
|
+
*/
|
|
172
|
+
static fromJSON(domains) {
|
|
173
|
+
return new DomainWhitelist(domains);
|
|
174
|
+
}
|
|
175
|
+
// ============================================
|
|
176
|
+
// Private Methods
|
|
177
|
+
// ============================================
|
|
178
|
+
/**
|
|
179
|
+
* Escape special regex characters
|
|
180
|
+
*/
|
|
181
|
+
escapeRegex(str) {
|
|
182
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
exports.DomainWhitelist = DomainWhitelist;
|
|
186
|
+
/**
|
|
187
|
+
* Common domain presets
|
|
188
|
+
*/
|
|
189
|
+
exports.COMMON_DOMAIN_PRESETS = {
|
|
190
|
+
/** Anthropic API */
|
|
191
|
+
anthropic: ['api.anthropic.com'],
|
|
192
|
+
/** GitHub */
|
|
193
|
+
github: ['api.github.com', 'github.com', 'raw.githubusercontent.com'],
|
|
194
|
+
/** npm registry */
|
|
195
|
+
npm: ['registry.npmjs.org', 'www.npmjs.com'],
|
|
196
|
+
/** Security databases */
|
|
197
|
+
security: ['nvd.nist.gov', 'cve.mitre.org', 'osv.dev', 'security.snyk.io'],
|
|
198
|
+
/** OpenAI */
|
|
199
|
+
openai: ['api.openai.com'],
|
|
200
|
+
/** Localhost */
|
|
201
|
+
localhost: ['localhost', '127.0.0.1', '::1'],
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Create a whitelist from presets
|
|
205
|
+
*/
|
|
206
|
+
function createWhitelistFromPresets(...presetNames) {
|
|
207
|
+
const domains = [];
|
|
208
|
+
for (const name of presetNames) {
|
|
209
|
+
const preset = exports.COMMON_DOMAIN_PRESETS[name];
|
|
210
|
+
if (preset) {
|
|
211
|
+
domains.push(...preset);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return new DomainWhitelist(domains);
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=DomainWhitelist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DomainWhitelist.js","sourceRoot":"","sources":["../../../src/infrastructure/network/DomainWhitelist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network Policy Manager for Agent Network Access Control
|
|
3
|
+
*
|
|
4
|
+
* Central manager for enforcing network policies, domain whitelisting,
|
|
5
|
+
* rate limiting, and audit logging for all agent types.
|
|
6
|
+
*
|
|
7
|
+
* @module infrastructure/network/NetworkPolicyManager
|
|
8
|
+
* @see Issue #146 - Security Hardening: SP-3 Network Policy Enforcement
|
|
9
|
+
*/
|
|
10
|
+
import type { NetworkPolicy, PolicyCheckResult, NetworkPolicyManagerConfig, NetworkPolicyEventHandler, RateLimitStatus } from './types.js';
|
|
11
|
+
import { AuditLogger } from './AuditLogger.js';
|
|
12
|
+
/**
|
|
13
|
+
* Network Policy Manager
|
|
14
|
+
*
|
|
15
|
+
* Features:
|
|
16
|
+
* - Per-agent-type policies
|
|
17
|
+
* - Domain whitelisting
|
|
18
|
+
* - Rate limiting with token bucket
|
|
19
|
+
* - Comprehensive audit logging
|
|
20
|
+
* - Event emission for monitoring
|
|
21
|
+
*/
|
|
22
|
+
export declare class NetworkPolicyManager {
|
|
23
|
+
private config;
|
|
24
|
+
private policies;
|
|
25
|
+
private whitelists;
|
|
26
|
+
private rateLimiters;
|
|
27
|
+
private auditLogger;
|
|
28
|
+
private eventHandlers;
|
|
29
|
+
private initialized;
|
|
30
|
+
constructor(config?: Partial<NetworkPolicyManagerConfig>);
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the policy manager with default policies
|
|
33
|
+
*/
|
|
34
|
+
initialize(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Shutdown the policy manager
|
|
37
|
+
*/
|
|
38
|
+
shutdown(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Register a network policy
|
|
41
|
+
*/
|
|
42
|
+
registerPolicy(policy: NetworkPolicy): void;
|
|
43
|
+
/**
|
|
44
|
+
* Check if a request is allowed
|
|
45
|
+
*/
|
|
46
|
+
checkRequest(agentId: string, agentType: string, domain: string): Promise<PolicyCheckResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Record a request (consumes rate limit token)
|
|
49
|
+
*/
|
|
50
|
+
recordRequest(agentId: string, agentType: string, domain: string, allowed: boolean, responseTimeMs?: number): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Get policy for an agent type
|
|
53
|
+
*/
|
|
54
|
+
getPolicy(agentType: string): NetworkPolicy;
|
|
55
|
+
/**
|
|
56
|
+
* Update a policy
|
|
57
|
+
*/
|
|
58
|
+
updatePolicy(agentType: string, updates: Partial<NetworkPolicy>): void;
|
|
59
|
+
/**
|
|
60
|
+
* Get rate limit status for an agent
|
|
61
|
+
*/
|
|
62
|
+
getRateLimitStatus(agentId: string, agentType: string): RateLimitStatus;
|
|
63
|
+
/**
|
|
64
|
+
* Reset rate limit for an agent
|
|
65
|
+
*/
|
|
66
|
+
resetRateLimit(agentId: string, agentType: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Get audit logger
|
|
69
|
+
*/
|
|
70
|
+
getAuditLogger(): AuditLogger;
|
|
71
|
+
/**
|
|
72
|
+
* Get audit statistics
|
|
73
|
+
*/
|
|
74
|
+
getAuditStats(since?: Date): Promise<import("./types.js").AuditStats>;
|
|
75
|
+
/**
|
|
76
|
+
* List all registered policy agent types
|
|
77
|
+
*/
|
|
78
|
+
listPolicies(): string[];
|
|
79
|
+
/**
|
|
80
|
+
* Add event handler
|
|
81
|
+
*/
|
|
82
|
+
on(handler: NetworkPolicyEventHandler): void;
|
|
83
|
+
/**
|
|
84
|
+
* Remove event handler
|
|
85
|
+
*/
|
|
86
|
+
off(handler: NetworkPolicyEventHandler): void;
|
|
87
|
+
private getWhitelist;
|
|
88
|
+
private getRateLimiter;
|
|
89
|
+
private logAndEmit;
|
|
90
|
+
private emitEvent;
|
|
91
|
+
private log;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a new NetworkPolicyManager
|
|
95
|
+
*/
|
|
96
|
+
export declare function createNetworkPolicyManager(config?: Partial<NetworkPolicyManagerConfig>): NetworkPolicyManager;
|
|
97
|
+
//# sourceMappingURL=NetworkPolicyManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkPolicyManager.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/network/NetworkPolicyManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,0BAA0B,EAE1B,yBAAyB,EACzB,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAc/C;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,GAAE,OAAO,CAAC,0BAA0B,CAAM;IAc5D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAc3C;;OAEG;IACG,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC;IA6C7B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC;IAqBhB;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa;IAI3C;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAsBtE;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe;IAKvE;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAMxD;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACG,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI;IAIhC;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,EAAE,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAI5C;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAW7C,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,cAAc;YAUR,UAAU;IAqCxB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,GAAG;CAKZ;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAC3C,oBAAoB,CAEtB"}
|