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,186 @@
1
+ "use strict";
2
+ /**
3
+ * Agent Rate Limiter for Network Policy Enforcement
4
+ *
5
+ * Token bucket rate limiter with per-agent tracking.
6
+ * Supports both per-minute and per-hour limits.
7
+ *
8
+ * @module infrastructure/network/AgentRateLimiter
9
+ * @see Issue #146 - Security Hardening: SP-3 Network Policy Enforcement
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AgentRateLimiter = void 0;
13
+ exports.createDefaultRateLimiter = createDefaultRateLimiter;
14
+ /**
15
+ * Agent rate limiter using token bucket algorithm
16
+ *
17
+ * Features:
18
+ * - Per-agent rate limiting
19
+ * - Burst allowance via token bucket
20
+ * - Per-minute and per-hour limits
21
+ * - Automatic token refill
22
+ */
23
+ class AgentRateLimiter {
24
+ constructor(config) {
25
+ this.cleanupInterval = null;
26
+ this.config = config;
27
+ this.buckets = new Map();
28
+ // Cleanup stale buckets every 10 minutes
29
+ this.cleanupInterval = setInterval(() => this.cleanup(), 10 * 60 * 1000);
30
+ }
31
+ /**
32
+ * Check if request is allowed without consuming
33
+ */
34
+ check(agentId) {
35
+ const bucket = this.getOrCreateBucket(agentId);
36
+ this.refillBucket(bucket);
37
+ this.updateWindows(bucket);
38
+ return this.calculateStatus(bucket, false);
39
+ }
40
+ /**
41
+ * Consume a request token
42
+ */
43
+ consume(agentId) {
44
+ const bucket = this.getOrCreateBucket(agentId);
45
+ this.refillBucket(bucket);
46
+ this.updateWindows(bucket);
47
+ const status = this.calculateStatus(bucket, true);
48
+ if (!status.limited) {
49
+ // Consume token
50
+ bucket.tokens -= 1;
51
+ bucket.minuteCount += 1;
52
+ bucket.hourCount += 1;
53
+ }
54
+ return status;
55
+ }
56
+ /**
57
+ * Reset rate limit for an agent
58
+ */
59
+ reset(agentId) {
60
+ this.buckets.delete(agentId);
61
+ }
62
+ /**
63
+ * Get current status for agent
64
+ */
65
+ getStatus(agentId) {
66
+ return this.check(agentId);
67
+ }
68
+ /**
69
+ * Get all agent IDs being tracked
70
+ */
71
+ getTrackedAgents() {
72
+ return Array.from(this.buckets.keys());
73
+ }
74
+ /**
75
+ * Stop the cleanup interval
76
+ */
77
+ close() {
78
+ if (this.cleanupInterval) {
79
+ clearInterval(this.cleanupInterval);
80
+ this.cleanupInterval = null;
81
+ }
82
+ }
83
+ // ============================================
84
+ // Private Methods
85
+ // ============================================
86
+ getOrCreateBucket(agentId) {
87
+ let bucket = this.buckets.get(agentId);
88
+ if (!bucket) {
89
+ const now = Date.now();
90
+ bucket = {
91
+ tokens: this.config.burstSize,
92
+ lastRefill: now,
93
+ minuteCount: 0,
94
+ minuteWindowStart: now,
95
+ hourCount: 0,
96
+ hourWindowStart: now,
97
+ };
98
+ this.buckets.set(agentId, bucket);
99
+ }
100
+ return bucket;
101
+ }
102
+ refillBucket(bucket) {
103
+ const now = Date.now();
104
+ const elapsed = now - bucket.lastRefill;
105
+ // Refill rate: requests per minute / 60 seconds
106
+ const refillRate = this.config.requestsPerMinute / 60;
107
+ const refillAmount = (elapsed / 1000) * refillRate;
108
+ bucket.tokens = Math.min(this.config.burstSize, bucket.tokens + refillAmount);
109
+ bucket.lastRefill = now;
110
+ }
111
+ updateWindows(bucket) {
112
+ const now = Date.now();
113
+ // Reset minute window
114
+ if (now - bucket.minuteWindowStart >= 60000) {
115
+ bucket.minuteCount = 0;
116
+ bucket.minuteWindowStart = now;
117
+ }
118
+ // Reset hour window
119
+ if (now - bucket.hourWindowStart >= 3600000) {
120
+ bucket.hourCount = 0;
121
+ bucket.hourWindowStart = now;
122
+ }
123
+ }
124
+ calculateStatus(bucket, forConsume) {
125
+ const now = Date.now();
126
+ // Check per-minute limit
127
+ const minuteRemaining = this.config.requestsPerMinute - bucket.minuteCount;
128
+ const minuteResetIn = 60000 - (now - bucket.minuteWindowStart);
129
+ // Check per-hour limit
130
+ const hourRemaining = this.config.requestsPerHour - bucket.hourCount;
131
+ const hourResetIn = 3600000 - (now - bucket.hourWindowStart);
132
+ // Check token bucket
133
+ const tokensAvailable = bucket.tokens >= 1;
134
+ // Determine if limited
135
+ // For check(): report if we're AT the limit (next request would fail)
136
+ // For consume(): report if we're OVER the limit (this request fails)
137
+ let limited = false;
138
+ let retryAfter = 0;
139
+ // Check minute limit
140
+ if (bucket.minuteCount >= this.config.requestsPerMinute) {
141
+ limited = true;
142
+ retryAfter = Math.max(retryAfter, minuteResetIn);
143
+ }
144
+ // Check hour limit
145
+ if (bucket.hourCount >= this.config.requestsPerHour) {
146
+ limited = true;
147
+ retryAfter = Math.max(retryAfter, hourResetIn);
148
+ }
149
+ // Check token bucket (only for consume to allow burst)
150
+ if (forConsume && !tokensAvailable) {
151
+ limited = true;
152
+ // Estimate time to refill one token
153
+ const refillRate = this.config.requestsPerMinute / 60;
154
+ retryAfter = Math.max(retryAfter, Math.ceil(1000 / refillRate));
155
+ }
156
+ return {
157
+ limited,
158
+ currentRate: bucket.minuteCount,
159
+ remaining: Math.min(minuteRemaining, hourRemaining, Math.floor(bucket.tokens)),
160
+ resetIn: Math.min(minuteResetIn, hourResetIn),
161
+ retryAfter: limited ? retryAfter : undefined,
162
+ };
163
+ }
164
+ cleanup() {
165
+ const now = Date.now();
166
+ const staleThreshold = 3600000; // 1 hour
167
+ for (const [agentId, bucket] of this.buckets) {
168
+ // Remove buckets that haven't been used in an hour
169
+ if (now - bucket.lastRefill > staleThreshold) {
170
+ this.buckets.delete(agentId);
171
+ }
172
+ }
173
+ }
174
+ }
175
+ exports.AgentRateLimiter = AgentRateLimiter;
176
+ /**
177
+ * Create a rate limiter with default configuration
178
+ */
179
+ function createDefaultRateLimiter() {
180
+ return new AgentRateLimiter({
181
+ requestsPerMinute: 60,
182
+ requestsPerHour: 1000,
183
+ burstSize: 10,
184
+ });
185
+ }
186
+ //# sourceMappingURL=AgentRateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentRateLimiter.js","sourceRoot":"","sources":["../../../src/infrastructure/network/AgentRateLimiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Audit Logger for Network Policy Enforcement
3
+ *
4
+ * Logs all network requests with configurable retention and querying.
5
+ * Supports both in-memory and persistent storage.
6
+ *
7
+ * @module infrastructure/network/AuditLogger
8
+ * @see Issue #146 - Security Hardening: SP-3 Network Policy Enforcement
9
+ */
10
+ import type { AuditEntry, AuditQueryFilter, AuditStats } from './types.js';
11
+ /**
12
+ * Audit logger configuration
13
+ */
14
+ export interface AuditLoggerConfig {
15
+ /** Maximum entries to keep in memory */
16
+ maxEntries: number;
17
+ /** Persist to file */
18
+ persistToFile: boolean;
19
+ /** File path for persistence */
20
+ filePath?: string;
21
+ /** Auto-save interval in ms (0 to disable) */
22
+ autoSaveIntervalMs: number;
23
+ /** Enable debug logging */
24
+ debug: boolean;
25
+ }
26
+ /**
27
+ * Audit logger for network requests
28
+ *
29
+ * Features:
30
+ * - In-memory circular buffer
31
+ * - Query by agent, domain, action, time range
32
+ * - Statistics aggregation
33
+ * - JSON export
34
+ * - Optional file persistence
35
+ */
36
+ export declare class AuditLogger {
37
+ private entries;
38
+ private config;
39
+ private saveInterval;
40
+ private dirty;
41
+ constructor(config?: Partial<AuditLoggerConfig>);
42
+ /**
43
+ * Log a network request
44
+ */
45
+ log(entry: Omit<AuditEntry, 'id' | 'timestamp'>): Promise<AuditEntry>;
46
+ /**
47
+ * Log an allowed request
48
+ */
49
+ logAllowed(agentId: string, agentType: string, domain: string, options?: Partial<AuditEntry>): Promise<AuditEntry>;
50
+ /**
51
+ * Log a blocked request
52
+ */
53
+ logBlocked(agentId: string, agentType: string, domain: string, reason: string, options?: Partial<AuditEntry>): Promise<AuditEntry>;
54
+ /**
55
+ * Log a rate-limited request
56
+ */
57
+ logRateLimited(agentId: string, agentType: string, domain: string, options?: Partial<AuditEntry>): Promise<AuditEntry>;
58
+ /**
59
+ * Query audit entries
60
+ */
61
+ query(filter: AuditQueryFilter): Promise<AuditEntry[]>;
62
+ /**
63
+ * Get audit statistics
64
+ */
65
+ getStats(since?: Date): Promise<AuditStats>;
66
+ /**
67
+ * Export entries to JSON file
68
+ */
69
+ exportToJson(filepath: string): Promise<void>;
70
+ /**
71
+ * Import entries from JSON file
72
+ */
73
+ importFromJson(filepath: string): Promise<number>;
74
+ /**
75
+ * Save to configured file
76
+ */
77
+ save(): Promise<void>;
78
+ /**
79
+ * Load from configured file
80
+ */
81
+ load(): Promise<void>;
82
+ /**
83
+ * Clear all entries
84
+ */
85
+ clear(): void;
86
+ /**
87
+ * Get entry count
88
+ */
89
+ size(): number;
90
+ /**
91
+ * Get recent entries
92
+ */
93
+ getRecent(count?: number): AuditEntry[];
94
+ /**
95
+ * Close and cleanup
96
+ */
97
+ close(): Promise<void>;
98
+ private startAutoSave;
99
+ private stopAutoSave;
100
+ private debug;
101
+ }
102
+ //# sourceMappingURL=AuditLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditLogger.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/network/AuditLogger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAe,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IAEnB,sBAAsB;IACtB,aAAa,EAAE,OAAO,CAAC;IAEvB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8CAA8C;IAC9C,kBAAkB,EAAE,MAAM,CAAC;IAE3B,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB;AAYD;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,KAAK,CAAkB;gBAEnB,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IASnD;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAoB3E;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAChC,OAAO,CAAC,UAAU,CAAC;IAUtB;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAChC,OAAO,CAAC,UAAU,CAAC;IAWtB;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAChC,OAAO,CAAC,UAAU,CAAC;IAWtB;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwC5D;;OAEG;IACG,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;IAqDjD;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBvD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAI3C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,KAAK;CAKd"}
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ /**
3
+ * Audit Logger for Network Policy Enforcement
4
+ *
5
+ * Logs all network requests with configurable retention and querying.
6
+ * Supports both in-memory and persistent storage.
7
+ *
8
+ * @module infrastructure/network/AuditLogger
9
+ * @see Issue #146 - Security Hardening: SP-3 Network Policy Enforcement
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AuditLogger = void 0;
13
+ const crypto_1 = require("crypto");
14
+ const promises_1 = require("fs/promises");
15
+ const path_1 = require("path");
16
+ /**
17
+ * Default audit logger configuration
18
+ */
19
+ const DEFAULT_CONFIG = {
20
+ maxEntries: 10000,
21
+ persistToFile: false,
22
+ autoSaveIntervalMs: 0,
23
+ debug: false,
24
+ };
25
+ /**
26
+ * Audit logger for network requests
27
+ *
28
+ * Features:
29
+ * - In-memory circular buffer
30
+ * - Query by agent, domain, action, time range
31
+ * - Statistics aggregation
32
+ * - JSON export
33
+ * - Optional file persistence
34
+ */
35
+ class AuditLogger {
36
+ constructor(config = {}) {
37
+ this.saveInterval = null;
38
+ this.dirty = false;
39
+ this.config = { ...DEFAULT_CONFIG, ...config };
40
+ this.entries = [];
41
+ if (this.config.persistToFile && this.config.autoSaveIntervalMs > 0) {
42
+ this.startAutoSave();
43
+ }
44
+ }
45
+ /**
46
+ * Log a network request
47
+ */
48
+ async log(entry) {
49
+ const fullEntry = {
50
+ id: (0, crypto_1.randomUUID)(),
51
+ timestamp: new Date(),
52
+ ...entry,
53
+ };
54
+ this.entries.push(fullEntry);
55
+ this.dirty = true;
56
+ // Evict oldest if over limit
57
+ if (this.entries.length > this.config.maxEntries) {
58
+ this.entries.shift();
59
+ }
60
+ this.debug(`Logged: ${entry.action} ${entry.domain} for ${entry.agentType}`);
61
+ return fullEntry;
62
+ }
63
+ /**
64
+ * Log an allowed request
65
+ */
66
+ async logAllowed(agentId, agentType, domain, options = {}) {
67
+ return this.log({
68
+ agentId,
69
+ agentType,
70
+ domain,
71
+ action: 'allowed',
72
+ ...options,
73
+ });
74
+ }
75
+ /**
76
+ * Log a blocked request
77
+ */
78
+ async logBlocked(agentId, agentType, domain, reason, options = {}) {
79
+ return this.log({
80
+ agentId,
81
+ agentType,
82
+ domain,
83
+ action: 'blocked',
84
+ reason,
85
+ ...options,
86
+ });
87
+ }
88
+ /**
89
+ * Log a rate-limited request
90
+ */
91
+ async logRateLimited(agentId, agentType, domain, options = {}) {
92
+ return this.log({
93
+ agentId,
94
+ agentType,
95
+ domain,
96
+ action: 'rate_limited',
97
+ reason: 'Rate limit exceeded',
98
+ ...options,
99
+ });
100
+ }
101
+ /**
102
+ * Query audit entries
103
+ */
104
+ async query(filter) {
105
+ let results = [...this.entries];
106
+ // Apply filters
107
+ if (filter.agentId) {
108
+ results = results.filter((e) => e.agentId === filter.agentId);
109
+ }
110
+ if (filter.agentType) {
111
+ results = results.filter((e) => e.agentType === filter.agentType);
112
+ }
113
+ if (filter.domain) {
114
+ results = results.filter((e) => e.domain === filter.domain);
115
+ }
116
+ if (filter.action) {
117
+ results = results.filter((e) => e.action === filter.action);
118
+ }
119
+ if (filter.since) {
120
+ results = results.filter((e) => e.timestamp >= filter.since);
121
+ }
122
+ if (filter.until) {
123
+ results = results.filter((e) => e.timestamp <= filter.until);
124
+ }
125
+ // Apply pagination
126
+ if (filter.offset) {
127
+ results = results.slice(filter.offset);
128
+ }
129
+ if (filter.limit) {
130
+ results = results.slice(0, filter.limit);
131
+ }
132
+ return results;
133
+ }
134
+ /**
135
+ * Get audit statistics
136
+ */
137
+ async getStats(since) {
138
+ const sinceDate = since || new Date(Date.now() - 24 * 60 * 60 * 1000); // Default: last 24h
139
+ const filtered = this.entries.filter((e) => e.timestamp >= sinceDate);
140
+ const byDomain = {};
141
+ const byAgentType = {};
142
+ let totalResponseTime = 0;
143
+ let responseTimeCount = 0;
144
+ let allowedRequests = 0;
145
+ let blockedRequests = 0;
146
+ let rateLimitedRequests = 0;
147
+ for (const entry of filtered) {
148
+ // Count by domain
149
+ byDomain[entry.domain] = (byDomain[entry.domain] || 0) + 1;
150
+ // Count by agent type
151
+ byAgentType[entry.agentType] = (byAgentType[entry.agentType] || 0) + 1;
152
+ // Count by action
153
+ switch (entry.action) {
154
+ case 'allowed':
155
+ allowedRequests++;
156
+ break;
157
+ case 'blocked':
158
+ blockedRequests++;
159
+ break;
160
+ case 'rate_limited':
161
+ rateLimitedRequests++;
162
+ break;
163
+ }
164
+ // Sum response times
165
+ if (entry.responseTimeMs !== undefined) {
166
+ totalResponseTime += entry.responseTimeMs;
167
+ responseTimeCount++;
168
+ }
169
+ }
170
+ return {
171
+ totalRequests: filtered.length,
172
+ allowedRequests,
173
+ blockedRequests,
174
+ rateLimitedRequests,
175
+ byDomain,
176
+ byAgentType,
177
+ avgResponseTimeMs: responseTimeCount > 0 ? totalResponseTime / responseTimeCount : 0,
178
+ since: sinceDate,
179
+ timestamp: new Date(),
180
+ };
181
+ }
182
+ /**
183
+ * Export entries to JSON file
184
+ */
185
+ async exportToJson(filepath) {
186
+ const data = JSON.stringify(this.entries, null, 2);
187
+ await (0, promises_1.mkdir)((0, path_1.dirname)(filepath), { recursive: true });
188
+ await (0, promises_1.writeFile)(filepath, data, 'utf-8');
189
+ this.debug(`Exported ${this.entries.length} entries to ${filepath}`);
190
+ }
191
+ /**
192
+ * Import entries from JSON file
193
+ */
194
+ async importFromJson(filepath) {
195
+ try {
196
+ const data = await (0, promises_1.readFile)(filepath, 'utf-8');
197
+ const entries = JSON.parse(data);
198
+ // Convert timestamp strings to Date objects
199
+ for (const entry of entries) {
200
+ entry.timestamp = new Date(entry.timestamp);
201
+ }
202
+ this.entries = entries;
203
+ this.dirty = false;
204
+ this.debug(`Imported ${entries.length} entries from ${filepath}`);
205
+ return entries.length;
206
+ }
207
+ catch (error) {
208
+ this.debug(`Failed to import: ${error.message}`);
209
+ return 0;
210
+ }
211
+ }
212
+ /**
213
+ * Save to configured file
214
+ */
215
+ async save() {
216
+ if (!this.config.persistToFile || !this.config.filePath) {
217
+ return;
218
+ }
219
+ if (!this.dirty) {
220
+ return;
221
+ }
222
+ await this.exportToJson(this.config.filePath);
223
+ this.dirty = false;
224
+ }
225
+ /**
226
+ * Load from configured file
227
+ */
228
+ async load() {
229
+ if (!this.config.persistToFile || !this.config.filePath) {
230
+ return;
231
+ }
232
+ await this.importFromJson(this.config.filePath);
233
+ }
234
+ /**
235
+ * Clear all entries
236
+ */
237
+ clear() {
238
+ this.entries = [];
239
+ this.dirty = true;
240
+ this.debug('Cleared all entries');
241
+ }
242
+ /**
243
+ * Get entry count
244
+ */
245
+ size() {
246
+ return this.entries.length;
247
+ }
248
+ /**
249
+ * Get recent entries
250
+ */
251
+ getRecent(count = 10) {
252
+ return this.entries.slice(-count);
253
+ }
254
+ /**
255
+ * Close and cleanup
256
+ */
257
+ async close() {
258
+ this.stopAutoSave();
259
+ await this.save();
260
+ }
261
+ // ============================================
262
+ // Private Methods
263
+ // ============================================
264
+ startAutoSave() {
265
+ if (this.saveInterval)
266
+ return;
267
+ this.saveInterval = setInterval(async () => {
268
+ await this.save();
269
+ }, this.config.autoSaveIntervalMs);
270
+ }
271
+ stopAutoSave() {
272
+ if (this.saveInterval) {
273
+ clearInterval(this.saveInterval);
274
+ this.saveInterval = null;
275
+ }
276
+ }
277
+ debug(message) {
278
+ if (this.config.debug) {
279
+ console.log(`[AuditLogger] ${message}`);
280
+ }
281
+ }
282
+ }
283
+ exports.AuditLogger = AuditLogger;
284
+ //# sourceMappingURL=AuditLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditLogger.js","sourceRoot":"","sources":["../../../src/infrastructure/network/AuditLogger.ts"],"names":[],"mappings":"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"}