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.
Files changed (226) hide show
  1. package/CHANGELOG.md +148 -0
  2. package/README.md +1 -1
  3. package/dist/agents/BaseAgent.d.ts +329 -0
  4. package/dist/agents/BaseAgent.d.ts.map +1 -1
  5. package/dist/agents/BaseAgent.js +657 -0
  6. package/dist/agents/BaseAgent.js.map +1 -1
  7. package/dist/cli/commands/supabase/index.d.ts +20 -0
  8. package/dist/cli/commands/supabase/index.d.ts.map +1 -0
  9. package/dist/cli/commands/supabase/index.js +632 -0
  10. package/dist/cli/commands/supabase/index.js.map +1 -0
  11. package/dist/cli/index.js +3 -0
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.d.ts +135 -0
  14. package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.d.ts.map +1 -0
  15. package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.js +301 -0
  16. package/dist/code-intelligence/embeddings/EmbeddingCacheFactory.js.map +1 -0
  17. package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts +78 -6
  18. package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts.map +1 -1
  19. package/dist/code-intelligence/embeddings/NomicEmbedder.js +162 -21
  20. package/dist/code-intelligence/embeddings/NomicEmbedder.js.map +1 -1
  21. package/dist/code-intelligence/embeddings/backends/MemoryBackend.d.ts +59 -0
  22. package/dist/code-intelligence/embeddings/backends/MemoryBackend.d.ts.map +1 -0
  23. package/dist/code-intelligence/embeddings/backends/MemoryBackend.js +173 -0
  24. package/dist/code-intelligence/embeddings/backends/MemoryBackend.js.map +1 -0
  25. package/dist/code-intelligence/embeddings/backends/RedisBackend.d.ts +50 -0
  26. package/dist/code-intelligence/embeddings/backends/RedisBackend.d.ts.map +1 -0
  27. package/dist/code-intelligence/embeddings/backends/RedisBackend.js +279 -0
  28. package/dist/code-intelligence/embeddings/backends/RedisBackend.js.map +1 -0
  29. package/dist/code-intelligence/embeddings/backends/SQLiteBackend.d.ts +64 -0
  30. package/dist/code-intelligence/embeddings/backends/SQLiteBackend.d.ts.map +1 -0
  31. package/dist/code-intelligence/embeddings/backends/SQLiteBackend.js +314 -0
  32. package/dist/code-intelligence/embeddings/backends/SQLiteBackend.js.map +1 -0
  33. package/dist/code-intelligence/embeddings/backends/index.d.ts +16 -0
  34. package/dist/code-intelligence/embeddings/backends/index.d.ts.map +1 -0
  35. package/dist/code-intelligence/embeddings/backends/index.js +28 -0
  36. package/dist/code-intelligence/embeddings/backends/index.js.map +1 -0
  37. package/dist/code-intelligence/embeddings/backends/types.d.ts +177 -0
  38. package/dist/code-intelligence/embeddings/backends/types.d.ts.map +1 -0
  39. package/dist/code-intelligence/embeddings/backends/types.js +30 -0
  40. package/dist/code-intelligence/embeddings/backends/types.js.map +1 -0
  41. package/dist/code-intelligence/embeddings/index.d.ts +7 -0
  42. package/dist/code-intelligence/embeddings/index.d.ts.map +1 -1
  43. package/dist/code-intelligence/embeddings/index.js +16 -1
  44. package/dist/code-intelligence/embeddings/index.js.map +1 -1
  45. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  46. package/dist/infrastructure/index.d.ts +15 -0
  47. package/dist/infrastructure/index.d.ts.map +1 -0
  48. package/dist/infrastructure/index.js +44 -0
  49. package/dist/infrastructure/index.js.map +1 -0
  50. package/dist/infrastructure/network/AgentRateLimiter.d.ts +59 -0
  51. package/dist/infrastructure/network/AgentRateLimiter.d.ts.map +1 -0
  52. package/dist/infrastructure/network/AgentRateLimiter.js +186 -0
  53. package/dist/infrastructure/network/AgentRateLimiter.js.map +1 -0
  54. package/dist/infrastructure/network/AuditLogger.d.ts +102 -0
  55. package/dist/infrastructure/network/AuditLogger.d.ts.map +1 -0
  56. package/dist/infrastructure/network/AuditLogger.js +284 -0
  57. package/dist/infrastructure/network/AuditLogger.js.map +1 -0
  58. package/dist/infrastructure/network/DomainWhitelist.d.ts +111 -0
  59. package/dist/infrastructure/network/DomainWhitelist.d.ts.map +1 -0
  60. package/dist/infrastructure/network/DomainWhitelist.js +216 -0
  61. package/dist/infrastructure/network/DomainWhitelist.js.map +1 -0
  62. package/dist/infrastructure/network/NetworkPolicyManager.d.ts +97 -0
  63. package/dist/infrastructure/network/NetworkPolicyManager.d.ts.map +1 -0
  64. package/dist/infrastructure/network/NetworkPolicyManager.js +309 -0
  65. package/dist/infrastructure/network/NetworkPolicyManager.js.map +1 -0
  66. package/dist/infrastructure/network/index.d.ts +19 -0
  67. package/dist/infrastructure/network/index.d.ts.map +1 -0
  68. package/dist/infrastructure/network/index.js +46 -0
  69. package/dist/infrastructure/network/index.js.map +1 -0
  70. package/dist/infrastructure/network/policies/default-policies.d.ts +78 -0
  71. package/dist/infrastructure/network/policies/default-policies.d.ts.map +1 -0
  72. package/dist/infrastructure/network/policies/default-policies.js +312 -0
  73. package/dist/infrastructure/network/policies/default-policies.js.map +1 -0
  74. package/dist/infrastructure/network/types.d.ts +214 -0
  75. package/dist/infrastructure/network/types.d.ts.map +1 -0
  76. package/dist/infrastructure/network/types.js +25 -0
  77. package/dist/infrastructure/network/types.js.map +1 -0
  78. package/dist/infrastructure/sandbox/ResourceMonitor.d.ts +124 -0
  79. package/dist/infrastructure/sandbox/ResourceMonitor.d.ts.map +1 -0
  80. package/dist/infrastructure/sandbox/ResourceMonitor.js +305 -0
  81. package/dist/infrastructure/sandbox/ResourceMonitor.js.map +1 -0
  82. package/dist/infrastructure/sandbox/SandboxManager.d.ts +122 -0
  83. package/dist/infrastructure/sandbox/SandboxManager.d.ts.map +1 -0
  84. package/dist/infrastructure/sandbox/SandboxManager.js +527 -0
  85. package/dist/infrastructure/sandbox/SandboxManager.js.map +1 -0
  86. package/dist/infrastructure/sandbox/index.d.ts +18 -0
  87. package/dist/infrastructure/sandbox/index.d.ts.map +1 -0
  88. package/dist/infrastructure/sandbox/index.js +38 -0
  89. package/dist/infrastructure/sandbox/index.js.map +1 -0
  90. package/dist/infrastructure/sandbox/profiles/agent-profiles.d.ts +53 -0
  91. package/dist/infrastructure/sandbox/profiles/agent-profiles.d.ts.map +1 -0
  92. package/dist/infrastructure/sandbox/profiles/agent-profiles.js +433 -0
  93. package/dist/infrastructure/sandbox/profiles/agent-profiles.js.map +1 -0
  94. package/dist/infrastructure/sandbox/types.d.ts +227 -0
  95. package/dist/infrastructure/sandbox/types.d.ts.map +1 -0
  96. package/dist/infrastructure/sandbox/types.js +63 -0
  97. package/dist/infrastructure/sandbox/types.js.map +1 -0
  98. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +8 -8
  99. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -1
  100. package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -1
  101. package/dist/mcp/handlers/ruvector/RuVectorHandler.d.ts +54 -0
  102. package/dist/mcp/handlers/ruvector/RuVectorHandler.d.ts.map +1 -0
  103. package/dist/mcp/handlers/ruvector/RuVectorHandler.js +325 -0
  104. package/dist/mcp/handlers/ruvector/RuVectorHandler.js.map +1 -0
  105. package/dist/mcp/handlers/ruvector/index.d.ts +5 -0
  106. package/dist/mcp/handlers/ruvector/index.d.ts.map +1 -0
  107. package/dist/mcp/handlers/ruvector/index.js +9 -0
  108. package/dist/mcp/handlers/ruvector/index.js.map +1 -0
  109. package/dist/mcp/server-instructions.d.ts +1 -1
  110. package/dist/mcp/server-instructions.js +1 -1
  111. package/dist/mcp/server.d.ts.map +1 -1
  112. package/dist/mcp/server.js +100 -22
  113. package/dist/mcp/server.js.map +1 -1
  114. package/dist/nervous-system/adapters/BTSPAdapter.d.ts +342 -0
  115. package/dist/nervous-system/adapters/BTSPAdapter.d.ts.map +1 -0
  116. package/dist/nervous-system/adapters/BTSPAdapter.js +494 -0
  117. package/dist/nervous-system/adapters/BTSPAdapter.js.map +1 -0
  118. package/dist/nervous-system/adapters/CircadianController.d.ts +560 -0
  119. package/dist/nervous-system/adapters/CircadianController.d.ts.map +1 -0
  120. package/dist/nervous-system/adapters/CircadianController.js +882 -0
  121. package/dist/nervous-system/adapters/CircadianController.js.map +1 -0
  122. package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.d.ts +337 -0
  123. package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.d.ts.map +1 -0
  124. package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.js +532 -0
  125. package/dist/nervous-system/adapters/GlobalWorkspaceAdapter.js.map +1 -0
  126. package/dist/nervous-system/adapters/HdcMemoryAdapter.d.ts +444 -0
  127. package/dist/nervous-system/adapters/HdcMemoryAdapter.d.ts.map +1 -0
  128. package/dist/nervous-system/adapters/HdcMemoryAdapter.js +715 -0
  129. package/dist/nervous-system/adapters/HdcMemoryAdapter.js.map +1 -0
  130. package/dist/nervous-system/adapters/ReflexLayer.d.ts +231 -0
  131. package/dist/nervous-system/adapters/ReflexLayer.d.ts.map +1 -0
  132. package/dist/nervous-system/adapters/ReflexLayer.js +309 -0
  133. package/dist/nervous-system/adapters/ReflexLayer.js.map +1 -0
  134. package/dist/nervous-system/index.d.ts +25 -0
  135. package/dist/nervous-system/index.d.ts.map +1 -0
  136. package/dist/nervous-system/index.js +80 -0
  137. package/dist/nervous-system/index.js.map +1 -0
  138. package/dist/nervous-system/integration/BTSPLearningEngine.d.ts +266 -0
  139. package/dist/nervous-system/integration/BTSPLearningEngine.d.ts.map +1 -0
  140. package/dist/nervous-system/integration/BTSPLearningEngine.js +587 -0
  141. package/dist/nervous-system/integration/BTSPLearningEngine.js.map +1 -0
  142. package/dist/nervous-system/integration/CircadianAgent.d.ts +389 -0
  143. package/dist/nervous-system/integration/CircadianAgent.d.ts.map +1 -0
  144. package/dist/nervous-system/integration/CircadianAgent.js +696 -0
  145. package/dist/nervous-system/integration/CircadianAgent.js.map +1 -0
  146. package/dist/nervous-system/integration/HybridPatternStore.d.ts +244 -0
  147. package/dist/nervous-system/integration/HybridPatternStore.d.ts.map +1 -0
  148. package/dist/nervous-system/integration/HybridPatternStore.js +622 -0
  149. package/dist/nervous-system/integration/HybridPatternStore.js.map +1 -0
  150. package/dist/nervous-system/integration/NervousSystemEnhancement.d.ts +459 -0
  151. package/dist/nervous-system/integration/NervousSystemEnhancement.d.ts.map +1 -0
  152. package/dist/nervous-system/integration/NervousSystemEnhancement.js +921 -0
  153. package/dist/nervous-system/integration/NervousSystemEnhancement.js.map +1 -0
  154. package/dist/nervous-system/integration/WorkspaceAgent.d.ts +398 -0
  155. package/dist/nervous-system/integration/WorkspaceAgent.d.ts.map +1 -0
  156. package/dist/nervous-system/integration/WorkspaceAgent.js +722 -0
  157. package/dist/nervous-system/integration/WorkspaceAgent.js.map +1 -0
  158. package/dist/nervous-system/integration/index.d.ts +22 -0
  159. package/dist/nervous-system/integration/index.d.ts.map +1 -0
  160. package/dist/nervous-system/integration/index.js +44 -0
  161. package/dist/nervous-system/integration/index.js.map +1 -0
  162. package/dist/nervous-system/persistence/BTSPSerializer.d.ts +96 -0
  163. package/dist/nervous-system/persistence/BTSPSerializer.d.ts.map +1 -0
  164. package/dist/nervous-system/persistence/BTSPSerializer.js +223 -0
  165. package/dist/nervous-system/persistence/BTSPSerializer.js.map +1 -0
  166. package/dist/nervous-system/persistence/CircadianSerializer.d.ts +90 -0
  167. package/dist/nervous-system/persistence/CircadianSerializer.d.ts.map +1 -0
  168. package/dist/nervous-system/persistence/CircadianSerializer.js +239 -0
  169. package/dist/nervous-system/persistence/CircadianSerializer.js.map +1 -0
  170. package/dist/nervous-system/persistence/HdcSerializer.d.ts +100 -0
  171. package/dist/nervous-system/persistence/HdcSerializer.d.ts.map +1 -0
  172. package/dist/nervous-system/persistence/HdcSerializer.js +259 -0
  173. package/dist/nervous-system/persistence/HdcSerializer.js.map +1 -0
  174. package/dist/nervous-system/persistence/INervousSystemStore.d.ts +208 -0
  175. package/dist/nervous-system/persistence/INervousSystemStore.d.ts.map +1 -0
  176. package/dist/nervous-system/persistence/INervousSystemStore.js +11 -0
  177. package/dist/nervous-system/persistence/INervousSystemStore.js.map +1 -0
  178. package/dist/nervous-system/persistence/NervousSystemPersistenceManager.d.ts +187 -0
  179. package/dist/nervous-system/persistence/NervousSystemPersistenceManager.d.ts.map +1 -0
  180. package/dist/nervous-system/persistence/NervousSystemPersistenceManager.js +411 -0
  181. package/dist/nervous-system/persistence/NervousSystemPersistenceManager.js.map +1 -0
  182. package/dist/nervous-system/persistence/SQLiteNervousSystemStore.d.ts +98 -0
  183. package/dist/nervous-system/persistence/SQLiteNervousSystemStore.d.ts.map +1 -0
  184. package/dist/nervous-system/persistence/SQLiteNervousSystemStore.js +510 -0
  185. package/dist/nervous-system/persistence/SQLiteNervousSystemStore.js.map +1 -0
  186. package/dist/nervous-system/persistence/index.d.ts +22 -0
  187. package/dist/nervous-system/persistence/index.d.ts.map +1 -0
  188. package/dist/nervous-system/persistence/index.js +45 -0
  189. package/dist/nervous-system/persistence/index.js.map +1 -0
  190. package/dist/nervous-system/wasm-loader.d.ts +52 -0
  191. package/dist/nervous-system/wasm-loader.d.ts.map +1 -0
  192. package/dist/nervous-system/wasm-loader.js +188 -0
  193. package/dist/nervous-system/wasm-loader.js.map +1 -0
  194. package/dist/persistence/HybridPersistenceProvider.d.ts +184 -0
  195. package/dist/persistence/HybridPersistenceProvider.d.ts.map +1 -0
  196. package/dist/persistence/HybridPersistenceProvider.js +1086 -0
  197. package/dist/persistence/HybridPersistenceProvider.js.map +1 -0
  198. package/dist/persistence/IPersistenceProvider.d.ts +657 -0
  199. package/dist/persistence/IPersistenceProvider.d.ts.map +1 -0
  200. package/dist/persistence/IPersistenceProvider.js +11 -0
  201. package/dist/persistence/IPersistenceProvider.js.map +1 -0
  202. package/dist/persistence/SupabaseConfig.d.ts +176 -0
  203. package/dist/persistence/SupabaseConfig.d.ts.map +1 -0
  204. package/dist/persistence/SupabaseConfig.js +277 -0
  205. package/dist/persistence/SupabaseConfig.js.map +1 -0
  206. package/dist/persistence/SupabasePersistenceProvider.d.ts +143 -0
  207. package/dist/persistence/SupabasePersistenceProvider.d.ts.map +1 -0
  208. package/dist/persistence/SupabasePersistenceProvider.js +959 -0
  209. package/dist/persistence/SupabasePersistenceProvider.js.map +1 -0
  210. package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.d.ts +213 -0
  211. package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.d.ts.map +1 -0
  212. package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.js +468 -0
  213. package/dist/persistence/adapters/CodeIntelligenceSyncAdapter.js.map +1 -0
  214. package/dist/persistence/adapters/MemorySyncAdapter.d.ts +115 -0
  215. package/dist/persistence/adapters/MemorySyncAdapter.d.ts.map +1 -0
  216. package/dist/persistence/adapters/MemorySyncAdapter.js +291 -0
  217. package/dist/persistence/adapters/MemorySyncAdapter.js.map +1 -0
  218. package/dist/persistence/adapters/index.d.ts +11 -0
  219. package/dist/persistence/adapters/index.d.ts.map +1 -0
  220. package/dist/persistence/adapters/index.js +20 -0
  221. package/dist/persistence/adapters/index.js.map +1 -0
  222. package/dist/persistence/index.d.ts +14 -0
  223. package/dist/persistence/index.d.ts.map +1 -1
  224. package/dist/persistence/index.js +36 -1
  225. package/dist/persistence/index.js.map +1 -1
  226. package/package.json +7 -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"}