agentic-flow 2.0.2 → 2.0.4

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 (324) hide show
  1. package/.claude/agents/test-neural.md +14 -0
  2. package/.claude/settings.json +9 -133
  3. package/README.md +622 -1862
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/billing/mcp/tools.js +0 -1
  6. package/dist/billing/mcp/tools.js.map +1 -1
  7. package/dist/cli/commands/hooks.d.ts.map +1 -1
  8. package/dist/cli/commands/hooks.js +4 -79
  9. package/dist/cli/commands/hooks.js.map +1 -1
  10. package/dist/cli-proxy.js +1 -89
  11. package/dist/cli-proxy.js.map +1 -1
  12. package/dist/core/agentdb-fast.js +3 -3
  13. package/dist/core/agentdb-fast.js.map +1 -1
  14. package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
  15. package/dist/core/agentdb-wrapper-enhanced.js +4 -20
  16. package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
  17. package/dist/core/agentdb-wrapper.d.ts +2 -3
  18. package/dist/core/agentdb-wrapper.d.ts.map +1 -1
  19. package/dist/core/agentdb-wrapper.js +1 -15
  20. package/dist/core/agentdb-wrapper.js.map +1 -1
  21. package/dist/core/attention-native.d.ts +0 -4
  22. package/dist/core/attention-native.d.ts.map +1 -1
  23. package/dist/core/attention-native.js +2 -14
  24. package/dist/core/attention-native.js.map +1 -1
  25. package/dist/federation/SecurityManager.d.ts +2 -11
  26. package/dist/federation/SecurityManager.d.ts.map +1 -1
  27. package/dist/federation/SecurityManager.js +17 -50
  28. package/dist/federation/SecurityManager.js.map +1 -1
  29. package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
  30. package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
  31. package/dist/hooks/swarm-learning-optimizer.js +5 -5
  32. package/dist/hooks/swarm-learning-optimizer.js.map +1 -1
  33. package/dist/intelligence/IntelligenceStore.d.ts +26 -35
  34. package/dist/intelligence/IntelligenceStore.d.ts.map +1 -1
  35. package/dist/intelligence/IntelligenceStore.js +123 -308
  36. package/dist/intelligence/IntelligenceStore.js.map +1 -1
  37. package/dist/intelligence/RuVectorIntelligence.d.ts +1 -26
  38. package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -1
  39. package/dist/intelligence/RuVectorIntelligence.js +10 -49
  40. package/dist/intelligence/RuVectorIntelligence.js.map +1 -1
  41. package/dist/intelligence/agent-booster-enhanced.d.ts +0 -1
  42. package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
  43. package/dist/intelligence/agent-booster-enhanced.js +3 -24
  44. package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
  45. package/dist/intelligence/index.d.ts +3 -29
  46. package/dist/intelligence/index.d.ts.map +1 -1
  47. package/dist/intelligence/index.js +3 -13
  48. package/dist/intelligence/index.js.map +1 -1
  49. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  50. package/dist/mcp/claudeFlowSdkServer.js +3 -9
  51. package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  52. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +5 -5
  53. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -1
  54. package/dist/mcp/fastmcp/tools/swarm/init.d.ts.map +1 -1
  55. package/dist/mcp/fastmcp/tools/swarm/init.js +7 -36
  56. package/dist/mcp/fastmcp/tools/swarm/init.js.map +1 -1
  57. package/dist/mcp/fastmcp/tools/swarm/spawn.d.ts.map +1 -1
  58. package/dist/mcp/fastmcp/tools/swarm/spawn.js +8 -47
  59. package/dist/mcp/fastmcp/tools/swarm/spawn.js.map +1 -1
  60. package/dist/mcp/tools/agent-booster-tools.d.ts +1 -1
  61. package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
  62. package/dist/mcp/tools/agent-booster-tools.js +4 -10
  63. package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
  64. package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
  65. package/dist/mcp/tools/sona-tools.js +0 -6
  66. package/dist/mcp/tools/sona-tools.js.map +1 -1
  67. package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
  68. package/dist/optimizations/agent-booster-migration.js +2 -5
  69. package/dist/optimizations/agent-booster-migration.js.map +1 -1
  70. package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
  71. package/dist/proxy/anthropic-to-requesty.js.map +1 -1
  72. package/dist/proxy/quic-proxy.d.ts +1 -0
  73. package/dist/proxy/quic-proxy.d.ts.map +1 -1
  74. package/dist/proxy/quic-proxy.js +2 -2
  75. package/dist/proxy/quic-proxy.js.map +1 -1
  76. package/dist/reasoningbank/AdvancedMemory.js +1 -1
  77. package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
  78. package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
  79. package/dist/reasoningbank/HybridBackend.js +5 -2
  80. package/dist/reasoningbank/HybridBackend.js.map +1 -1
  81. package/dist/reasoningbank/backend-selector.d.ts +1 -11
  82. package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
  83. package/dist/reasoningbank/backend-selector.js +5 -45
  84. package/dist/reasoningbank/backend-selector.js.map +1 -1
  85. package/dist/reasoningbank/core/consolidate.d.ts.map +1 -1
  86. package/dist/reasoningbank/core/consolidate.js +45 -113
  87. package/dist/reasoningbank/core/consolidate.js.map +1 -1
  88. package/dist/reasoningbank/index-new.d.ts +6 -1
  89. package/dist/reasoningbank/index-new.d.ts.map +1 -1
  90. package/dist/reasoningbank/index-new.js +6 -1
  91. package/dist/reasoningbank/index-new.js.map +1 -1
  92. package/dist/reasoningbank/index.d.ts +6 -2
  93. package/dist/reasoningbank/index.d.ts.map +1 -1
  94. package/dist/reasoningbank/index.js +6 -2
  95. package/dist/reasoningbank/index.js.map +1 -1
  96. package/dist/reasoningbank/utils/embeddings.d.ts +0 -1
  97. package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
  98. package/dist/reasoningbank/utils/embeddings.js +26 -53
  99. package/dist/reasoningbank/utils/embeddings.js.map +1 -1
  100. package/dist/router/index.d.ts +17 -0
  101. package/dist/router/index.d.ts.map +1 -0
  102. package/dist/router/index.js +19 -0
  103. package/dist/router/index.js.map +1 -0
  104. package/dist/router/providers/onnx-local-optimized.d.ts +0 -2
  105. package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
  106. package/dist/router/providers/onnx-local-optimized.js +0 -10
  107. package/dist/router/providers/onnx-local-optimized.js.map +1 -1
  108. package/dist/router/providers/onnx-local.d.ts +0 -1
  109. package/dist/router/providers/onnx-local.d.ts.map +1 -1
  110. package/dist/router/providers/onnx-local.js +5 -22
  111. package/dist/router/providers/onnx-local.js.map +1 -1
  112. package/dist/services/embedding-service.js.map +1 -1
  113. package/dist/services/sona-agent-training.d.ts +0 -1
  114. package/dist/services/sona-agent-training.d.ts.map +1 -1
  115. package/dist/services/sona-agent-training.js.map +1 -1
  116. package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
  117. package/dist/services/sona-agentdb-integration.js +6 -9
  118. package/dist/services/sona-agentdb-integration.js.map +1 -1
  119. package/dist/services/sona-service.d.ts.map +1 -1
  120. package/dist/services/sona-service.js +5 -6
  121. package/dist/services/sona-service.js.map +1 -1
  122. package/dist/utils/cli.d.ts +1 -1
  123. package/dist/utils/cli.d.ts.map +1 -1
  124. package/dist/utils/cli.js +0 -21
  125. package/dist/utils/cli.js.map +1 -1
  126. package/package.json +7 -19
  127. package/scripts/postinstall.js +4 -45
  128. package/wasm/reasoningbank/reasoningbank_wasm_bg.js +2 -2
  129. package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
  130. package/.claude/agents/.claude-flow/metrics/agent-metrics.json +0 -1
  131. package/.claude/agents/.claude-flow/metrics/performance.json +0 -87
  132. package/.claude/agents/.claude-flow/metrics/task-metrics.json +0 -10
  133. package/.claude/skills/.claude-flow/metrics/agent-metrics.json +0 -1
  134. package/.claude/skills/.claude-flow/metrics/performance.json +0 -87
  135. package/.claude/skills/.claude-flow/metrics/task-metrics.json +0 -10
  136. package/.claude/skills/agentic-flow-quickstart/skill.md +0 -69
  137. package/.claude/skills/hooks-automation/skill.md +0 -155
  138. package/.claude/skills/memory-patterns/skill.md +0 -110
  139. package/.claude/skills/skill-builder/.claude-flow/metrics/agent-metrics.json +0 -1
  140. package/.claude/skills/skill-builder/.claude-flow/metrics/performance.json +0 -87
  141. package/.claude/skills/skill-builder/.claude-flow/metrics/task-metrics.json +0 -10
  142. package/.claude/skills/sparc-methodology/skill.md +0 -137
  143. package/.claude/skills/swarm-coordination/skill.md +0 -94
  144. package/.claude/skills/worker-benchmarks/skill.md +0 -135
  145. package/.claude/skills/worker-integration/skill.md +0 -154
  146. package/.claude/statusline.mjs +0 -109
  147. package/.claude/statusline.sh +0 -71
  148. package/dist/agentdb/benchmarks/comprehensive-benchmark.js +0 -664
  149. package/dist/agentdb/benchmarks/frontier-benchmark.js +0 -419
  150. package/dist/agentdb/benchmarks/reflexion-benchmark.js +0 -370
  151. package/dist/agentdb/cli/agentdb-cli.js +0 -717
  152. package/dist/agentdb/controllers/CausalMemoryGraph.js +0 -322
  153. package/dist/agentdb/controllers/CausalRecall.js +0 -281
  154. package/dist/agentdb/controllers/EmbeddingService.d.ts +0 -37
  155. package/dist/agentdb/controllers/EmbeddingService.d.ts.map +0 -1
  156. package/dist/agentdb/controllers/EmbeddingService.js +0 -119
  157. package/dist/agentdb/controllers/EmbeddingService.js.map +0 -1
  158. package/dist/agentdb/controllers/ExplainableRecall.js +0 -387
  159. package/dist/agentdb/controllers/NightlyLearner.js +0 -382
  160. package/dist/agentdb/controllers/ReflexionMemory.js +0 -239
  161. package/dist/agentdb/controllers/SkillLibrary.js +0 -276
  162. package/dist/agentdb/controllers/frontier-index.js +0 -9
  163. package/dist/agentdb/controllers/index.js +0 -8
  164. package/dist/agentdb/optimizations/BatchOperations.js +0 -198
  165. package/dist/agentdb/optimizations/QueryOptimizer.js +0 -225
  166. package/dist/agentdb/optimizations/index.js +0 -7
  167. package/dist/agentdb/tests/frontier-features.test.js +0 -665
  168. package/dist/benchmarks/embeddings-benchmark.d.ts +0 -38
  169. package/dist/benchmarks/embeddings-benchmark.d.ts.map +0 -1
  170. package/dist/benchmarks/embeddings-benchmark.js +0 -282
  171. package/dist/benchmarks/embeddings-benchmark.js.map +0 -1
  172. package/dist/cli/commands/embeddings.d.ts +0 -12
  173. package/dist/cli/commands/embeddings.d.ts.map +0 -1
  174. package/dist/cli/commands/embeddings.js +0 -386
  175. package/dist/cli/commands/embeddings.js.map +0 -1
  176. package/dist/cli/commands/init.d.ts +0 -8
  177. package/dist/cli/commands/init.d.ts.map +0 -1
  178. package/dist/cli/commands/init.js +0 -514
  179. package/dist/cli/commands/init.js.map +0 -1
  180. package/dist/cli/commands/workers.d.ts +0 -9
  181. package/dist/cli/commands/workers.d.ts.map +0 -1
  182. package/dist/cli/commands/workers.js +0 -991
  183. package/dist/cli/commands/workers.js.map +0 -1
  184. package/dist/cli/skills-manager.js +0 -1297
  185. package/dist/cli/update-message.js +0 -175
  186. package/dist/embeddings/index.d.ts +0 -17
  187. package/dist/embeddings/index.d.ts.map +0 -1
  188. package/dist/embeddings/index.js +0 -17
  189. package/dist/embeddings/index.js.map +0 -1
  190. package/dist/embeddings/neural-substrate.d.ts +0 -206
  191. package/dist/embeddings/neural-substrate.d.ts.map +0 -1
  192. package/dist/embeddings/neural-substrate.js +0 -629
  193. package/dist/embeddings/neural-substrate.js.map +0 -1
  194. package/dist/embeddings/optimized-embedder.d.ts +0 -103
  195. package/dist/embeddings/optimized-embedder.d.ts.map +0 -1
  196. package/dist/embeddings/optimized-embedder.js +0 -730
  197. package/dist/embeddings/optimized-embedder.js.map +0 -1
  198. package/dist/examples/embedding-geometry.d.ts +0 -105
  199. package/dist/examples/embedding-geometry.d.ts.map +0 -1
  200. package/dist/examples/embedding-geometry.js +0 -528
  201. package/dist/examples/embedding-geometry.js.map +0 -1
  202. package/dist/memory/SharedMemoryPool.d.ts +0 -129
  203. package/dist/memory/SharedMemoryPool.d.ts.map +0 -1
  204. package/dist/memory/SharedMemoryPool.js +0 -243
  205. package/dist/memory/SharedMemoryPool.js.map +0 -1
  206. package/dist/memory/index.d.ts +0 -8
  207. package/dist/memory/index.d.ts.map +0 -1
  208. package/dist/memory/index.js +0 -7
  209. package/dist/memory/index.js.map +0 -1
  210. package/dist/proxy/http3-proxy-old.js +0 -331
  211. package/dist/proxy/proxy/anthropic-to-gemini.js +0 -439
  212. package/dist/proxy/utils/logger.js +0 -59
  213. package/dist/reasoningbank/agentdb-adapter.js +0 -125
  214. package/dist/reasoningbank/core/database.js +0 -250
  215. package/dist/reasoningbank/core/memory-engine.js +0 -335
  216. package/dist/swarm/ipfs-swarm.d.ts +0 -265
  217. package/dist/swarm/ipfs-swarm.d.ts.map +0 -1
  218. package/dist/swarm/ipfs-swarm.js +0 -508
  219. package/dist/swarm/ipfs-swarm.js.map +0 -1
  220. package/dist/swarm/p2p-free-swarm.d.ts +0 -344
  221. package/dist/swarm/p2p-free-swarm.d.ts.map +0 -1
  222. package/dist/swarm/p2p-free-swarm.js +0 -603
  223. package/dist/swarm/p2p-free-swarm.js.map +0 -1
  224. package/dist/swarm/real-p2p-swarm.d.ts +0 -183
  225. package/dist/swarm/real-p2p-swarm.d.ts.map +0 -1
  226. package/dist/swarm/real-p2p-swarm.js +0 -469
  227. package/dist/swarm/real-p2p-swarm.js.map +0 -1
  228. package/dist/utils/adaptive-pool-sizing.js +0 -414
  229. package/dist/utils/agentdbCommands.js +0 -175
  230. package/dist/utils/circular-rate-limiter.js +0 -391
  231. package/dist/utils/dynamic-compression.js +0 -298
  232. package/dist/utils/http2-multiplexing.js +0 -319
  233. package/dist/utils/index.d.ts +0 -6
  234. package/dist/utils/index.d.ts.map +0 -1
  235. package/dist/utils/index.js +0 -6
  236. package/dist/utils/index.js.map +0 -1
  237. package/dist/utils/lazy-auth.js +0 -311
  238. package/dist/utils/model-cache.d.ts +0 -61
  239. package/dist/utils/model-cache.d.ts.map +0 -1
  240. package/dist/utils/model-cache.js +0 -176
  241. package/dist/utils/model-cache.js.map +0 -1
  242. package/dist/utils/server-push.js +0 -251
  243. package/dist/utils/suppress-warnings.d.ts +0 -19
  244. package/dist/utils/suppress-warnings.d.ts.map +0 -1
  245. package/dist/utils/suppress-warnings.js +0 -59
  246. package/dist/utils/suppress-warnings.js.map +0 -1
  247. package/dist/utils/zero-copy-buffer.js +0 -286
  248. package/dist/workers/consolidated-phases.d.ts +0 -40
  249. package/dist/workers/consolidated-phases.d.ts.map +0 -1
  250. package/dist/workers/consolidated-phases.js +0 -497
  251. package/dist/workers/consolidated-phases.js.map +0 -1
  252. package/dist/workers/custom-worker-config.d.ts +0 -133
  253. package/dist/workers/custom-worker-config.d.ts.map +0 -1
  254. package/dist/workers/custom-worker-config.js +0 -215
  255. package/dist/workers/custom-worker-config.js.map +0 -1
  256. package/dist/workers/custom-worker-factory.d.ts +0 -89
  257. package/dist/workers/custom-worker-factory.d.ts.map +0 -1
  258. package/dist/workers/custom-worker-factory.js +0 -404
  259. package/dist/workers/custom-worker-factory.js.map +0 -1
  260. package/dist/workers/dispatch-service.d.ts +0 -123
  261. package/dist/workers/dispatch-service.d.ts.map +0 -1
  262. package/dist/workers/dispatch-service.js +0 -1024
  263. package/dist/workers/dispatch-service.js.map +0 -1
  264. package/dist/workers/hooks-integration.d.ts +0 -79
  265. package/dist/workers/hooks-integration.d.ts.map +0 -1
  266. package/dist/workers/hooks-integration.js +0 -286
  267. package/dist/workers/hooks-integration.js.map +0 -1
  268. package/dist/workers/index.d.ts +0 -42
  269. package/dist/workers/index.d.ts.map +0 -1
  270. package/dist/workers/index.js +0 -52
  271. package/dist/workers/index.js.map +0 -1
  272. package/dist/workers/mcp-tools.d.ts +0 -56
  273. package/dist/workers/mcp-tools.d.ts.map +0 -1
  274. package/dist/workers/mcp-tools.js +0 -359
  275. package/dist/workers/mcp-tools.js.map +0 -1
  276. package/dist/workers/phase-executors.d.ts +0 -22
  277. package/dist/workers/phase-executors.d.ts.map +0 -1
  278. package/dist/workers/phase-executors.js +0 -445
  279. package/dist/workers/phase-executors.js.map +0 -1
  280. package/dist/workers/resource-governor.d.ts +0 -75
  281. package/dist/workers/resource-governor.d.ts.map +0 -1
  282. package/dist/workers/resource-governor.js +0 -187
  283. package/dist/workers/resource-governor.js.map +0 -1
  284. package/dist/workers/ruvector-integration.d.ts +0 -163
  285. package/dist/workers/ruvector-integration.d.ts.map +0 -1
  286. package/dist/workers/ruvector-integration.js +0 -543
  287. package/dist/workers/ruvector-integration.js.map +0 -1
  288. package/dist/workers/ruvector-native-integration.d.ts +0 -91
  289. package/dist/workers/ruvector-native-integration.d.ts.map +0 -1
  290. package/dist/workers/ruvector-native-integration.js +0 -254
  291. package/dist/workers/ruvector-native-integration.js.map +0 -1
  292. package/dist/workers/trigger-detector.d.ts +0 -68
  293. package/dist/workers/trigger-detector.d.ts.map +0 -1
  294. package/dist/workers/trigger-detector.js +0 -281
  295. package/dist/workers/trigger-detector.js.map +0 -1
  296. package/dist/workers/types.d.ts +0 -145
  297. package/dist/workers/types.d.ts.map +0 -1
  298. package/dist/workers/types.js +0 -6
  299. package/dist/workers/types.js.map +0 -1
  300. package/dist/workers/worker-agent-integration.d.ts +0 -140
  301. package/dist/workers/worker-agent-integration.d.ts.map +0 -1
  302. package/dist/workers/worker-agent-integration.js +0 -471
  303. package/dist/workers/worker-agent-integration.js.map +0 -1
  304. package/dist/workers/worker-benchmarks.d.ts +0 -88
  305. package/dist/workers/worker-benchmarks.d.ts.map +0 -1
  306. package/dist/workers/worker-benchmarks.js +0 -452
  307. package/dist/workers/worker-benchmarks.js.map +0 -1
  308. package/dist/workers/worker-registry.d.ts +0 -85
  309. package/dist/workers/worker-registry.d.ts.map +0 -1
  310. package/dist/workers/worker-registry.js +0 -547
  311. package/dist/workers/worker-registry.js.map +0 -1
  312. package/docs/.claude-flow/metrics/agent-metrics.json +0 -1
  313. package/docs/.claude-flow/metrics/performance.json +0 -87
  314. package/docs/.claude-flow/metrics/task-metrics.json +0 -10
  315. package/docs/embeddings/EMBEDDING_GEOMETRY.md +0 -935
  316. /package/.claude/agents/analysis/{analyze-code-quality.md → code-review/analyze-code-quality.md} +0 -0
  317. /package/.claude/agents/architecture/{arch-system-design.md → system-design/arch-system-design.md} +0 -0
  318. /package/.claude/agents/data/{data-ml-model.md → ml/data-ml-model.md} +0 -0
  319. /package/.claude/agents/development/{dev-backend-api.md → backend/dev-backend-api.md} +0 -0
  320. /package/.claude/agents/devops/{ops-cicd-github.md → ci-cd/ops-cicd-github.md} +0 -0
  321. /package/.claude/agents/documentation/{docs-api-openapi.md → api-docs/docs-api-openapi.md} +0 -0
  322. /package/.claude/agents/specialized/{spec-mobile-react-native.md → mobile/spec-mobile-react-native.md} +0 -0
  323. /package/.claude/agents/testing/{tdd-london-swarm.md → unit/tdd-london-swarm.md} +0 -0
  324. /package/.claude/agents/testing/{production-validator.md → validation/production-validator.md} +0 -0
@@ -1,391 +0,0 @@
1
- /**
2
- * Optimized Rate Limiter with Circular Buffers
3
- * 2-5% CPU reduction through efficient circular buffer implementation
4
- * Phase 3 Optimization
5
- */
6
- /**
7
- * Circular Buffer for efficient timestamp storage
8
- * Avoids array shifts and allocations
9
- */
10
- class CircularBuffer {
11
- buffer;
12
- head = 0;
13
- tail = 0;
14
- count = 0;
15
- size;
16
- constructor(size) {
17
- this.size = size;
18
- this.buffer = new Array(size);
19
- }
20
- /**
21
- * Add timestamp to buffer
22
- */
23
- add(timestamp) {
24
- this.buffer[this.tail] = timestamp;
25
- this.tail = (this.tail + 1) % this.size;
26
- if (this.count < this.size) {
27
- this.count++;
28
- }
29
- else {
30
- // Buffer is full, move head forward
31
- this.head = (this.head + 1) % this.size;
32
- }
33
- }
34
- /**
35
- * Remove timestamps older than cutoff
36
- */
37
- removeOlderThan(cutoff) {
38
- let removed = 0;
39
- while (this.count > 0) {
40
- const timestamp = this.buffer[this.head];
41
- if (timestamp >= cutoff) {
42
- break;
43
- }
44
- this.head = (this.head + 1) % this.size;
45
- this.count--;
46
- removed++;
47
- }
48
- return removed;
49
- }
50
- /**
51
- * Get current count
52
- */
53
- getCount() {
54
- return this.count;
55
- }
56
- /**
57
- * Get oldest timestamp
58
- */
59
- getOldest() {
60
- return this.count > 0 ? this.buffer[this.head] : null;
61
- }
62
- /**
63
- * Clear buffer
64
- */
65
- clear() {
66
- this.head = 0;
67
- this.tail = 0;
68
- this.count = 0;
69
- }
70
- /**
71
- * Check if buffer is full
72
- */
73
- isFull() {
74
- return this.count === this.size;
75
- }
76
- /**
77
- * Get buffer utilization
78
- */
79
- getUtilization() {
80
- return (this.count / this.size) * 100;
81
- }
82
- }
83
- /**
84
- * Circular Rate Limiter
85
- * Uses circular buffers for efficient rate limiting with minimal CPU overhead
86
- */
87
- export class CircularRateLimiter {
88
- config;
89
- clients = new Map();
90
- stats;
91
- constructor(config) {
92
- this.config = {
93
- enabled: config.enabled,
94
- windowMs: config.windowMs || 60000, // 1 minute default
95
- maxRequests: config.maxRequests || 100,
96
- bufferSize: config.bufferSize || 200 // 2x maxRequests for safety
97
- };
98
- this.stats = {
99
- totalRequests: 0,
100
- allowedRequests: 0,
101
- blockedRequests: 0,
102
- uniqueClients: 0,
103
- avgCheckTime: 0
104
- };
105
- }
106
- /**
107
- * Check if request is allowed
108
- */
109
- checkLimit(clientId) {
110
- if (!this.config.enabled) {
111
- return {
112
- allowed: true,
113
- remaining: this.config.maxRequests,
114
- resetAt: Date.now() + this.config.windowMs
115
- };
116
- }
117
- const startTime = performance.now();
118
- const now = Date.now();
119
- const windowStart = now - this.config.windowMs;
120
- // Get or create buffer for client
121
- let buffer = this.clients.get(clientId);
122
- if (!buffer) {
123
- buffer = new CircularBuffer(this.config.bufferSize);
124
- this.clients.set(clientId, buffer);
125
- this.stats.uniqueClients = this.clients.size;
126
- }
127
- // Remove expired timestamps
128
- buffer.removeOlderThan(windowStart);
129
- const currentCount = buffer.getCount();
130
- const allowed = currentCount < this.config.maxRequests;
131
- if (allowed) {
132
- buffer.add(now);
133
- this.stats.allowedRequests++;
134
- }
135
- else {
136
- this.stats.blockedRequests++;
137
- }
138
- this.stats.totalRequests++;
139
- // Update average check time
140
- const checkTime = performance.now() - startTime;
141
- this.updateAvgCheckTime(checkTime);
142
- const oldest = buffer.getOldest();
143
- const resetAt = oldest ? oldest + this.config.windowMs : now + this.config.windowMs;
144
- const retryAfter = allowed ? undefined : resetAt - now;
145
- return {
146
- allowed,
147
- remaining: Math.max(0, this.config.maxRequests - currentCount - (allowed ? 1 : 0)),
148
- resetAt,
149
- retryAfter
150
- };
151
- }
152
- /**
153
- * Update average check time
154
- */
155
- updateAvgCheckTime(newTime) {
156
- const total = this.stats.totalRequests;
157
- const currentAvg = this.stats.avgCheckTime;
158
- this.stats.avgCheckTime = (currentAvg * (total - 1) + newTime) / total;
159
- }
160
- /**
161
- * Reset limit for a client
162
- */
163
- reset(clientId) {
164
- const buffer = this.clients.get(clientId);
165
- if (buffer) {
166
- buffer.clear();
167
- return true;
168
- }
169
- return false;
170
- }
171
- /**
172
- * Remove a client
173
- */
174
- removeClient(clientId) {
175
- const removed = this.clients.delete(clientId);
176
- if (removed) {
177
- this.stats.uniqueClients = this.clients.size;
178
- }
179
- return removed;
180
- }
181
- /**
182
- * Clean up expired clients
183
- */
184
- cleanup() {
185
- const now = Date.now();
186
- const windowStart = now - this.config.windowMs;
187
- let cleaned = 0;
188
- for (const [clientId, buffer] of this.clients) {
189
- buffer.removeOlderThan(windowStart);
190
- // Remove clients with no recent activity
191
- if (buffer.getCount() === 0) {
192
- this.clients.delete(clientId);
193
- cleaned++;
194
- }
195
- }
196
- this.stats.uniqueClients = this.clients.size;
197
- return cleaned;
198
- }
199
- /**
200
- * Get statistics
201
- */
202
- getStats() {
203
- return { ...this.stats };
204
- }
205
- /**
206
- * Get block rate
207
- */
208
- getBlockRate() {
209
- return this.stats.totalRequests > 0
210
- ? (this.stats.blockedRequests / this.stats.totalRequests) * 100
211
- : 0;
212
- }
213
- /**
214
- * Get client info
215
- */
216
- getClientInfo(clientId) {
217
- const buffer = this.clients.get(clientId);
218
- if (!buffer) {
219
- return null;
220
- }
221
- return {
222
- count: buffer.getCount(),
223
- utilization: buffer.getUtilization(),
224
- oldest: buffer.getOldest()
225
- };
226
- }
227
- /**
228
- * Reset statistics
229
- */
230
- resetStats() {
231
- this.stats = {
232
- totalRequests: 0,
233
- allowedRequests: 0,
234
- blockedRequests: 0,
235
- uniqueClients: this.clients.size,
236
- avgCheckTime: 0
237
- };
238
- }
239
- /**
240
- * Clear all clients
241
- */
242
- clear() {
243
- this.clients.clear();
244
- this.stats.uniqueClients = 0;
245
- }
246
- /**
247
- * Get configuration (for subclasses)
248
- */
249
- getConfig() {
250
- return this.config;
251
- }
252
- }
253
- /**
254
- * Sliding Window Rate Limiter
255
- * More accurate than fixed window, uses circular buffers
256
- */
257
- export class SlidingWindowRateLimiter extends CircularRateLimiter {
258
- /**
259
- * Check with sliding window algorithm
260
- */
261
- checkLimitSliding(clientId) {
262
- const result = this.checkLimit(clientId);
263
- // Sliding window provides more accurate rate limiting
264
- // by continuously cleaning up old timestamps
265
- const clientInfo = this.getClientInfo(clientId);
266
- if (clientInfo && clientInfo.oldest) {
267
- const now = Date.now();
268
- const config = this.getConfig();
269
- const windowStart = now - config.windowMs;
270
- // More accurate remaining calculation
271
- const timeInWindow = now - Math.max(clientInfo.oldest, windowStart);
272
- const weightedCount = (clientInfo.count * timeInWindow) / config.windowMs;
273
- result.remaining = Math.max(0, Math.floor(config.maxRequests - weightedCount));
274
- }
275
- return result;
276
- }
277
- }
278
- /**
279
- * Token Bucket Rate Limiter
280
- * Allows burst traffic while maintaining average rate
281
- */
282
- export class TokenBucketRateLimiter {
283
- config;
284
- buckets = new Map();
285
- stats;
286
- constructor(config) {
287
- this.config = {
288
- capacity: config.capacity,
289
- refillRate: config.refillRate,
290
- refillInterval: config.refillInterval || 1000
291
- };
292
- this.stats = {
293
- totalRequests: 0,
294
- allowedRequests: 0,
295
- blockedRequests: 0,
296
- uniqueClients: 0,
297
- avgCheckTime: 0
298
- };
299
- }
300
- /**
301
- * Check if tokens available
302
- */
303
- checkLimit(clientId, tokens = 1) {
304
- let bucket = this.buckets.get(clientId);
305
- if (!bucket) {
306
- bucket = new TokenBucket(this.config.capacity, this.config.refillRate, this.config.refillInterval);
307
- this.buckets.set(clientId, bucket);
308
- this.stats.uniqueClients = this.buckets.size;
309
- }
310
- const allowed = bucket.consume(tokens);
311
- this.stats.totalRequests++;
312
- if (allowed) {
313
- this.stats.allowedRequests++;
314
- }
315
- else {
316
- this.stats.blockedRequests++;
317
- }
318
- return {
319
- allowed,
320
- remaining: Math.floor(bucket.getTokens()),
321
- resetAt: Date.now() + this.config.refillInterval
322
- };
323
- }
324
- /**
325
- * Get statistics
326
- */
327
- getStats() {
328
- return { ...this.stats };
329
- }
330
- }
331
- /**
332
- * Token Bucket implementation
333
- */
334
- class TokenBucket {
335
- tokens;
336
- capacity;
337
- refillRate;
338
- lastRefill;
339
- refillInterval;
340
- constructor(capacity, refillRate, refillInterval) {
341
- this.capacity = capacity;
342
- this.tokens = capacity;
343
- this.refillRate = refillRate;
344
- this.refillInterval = refillInterval;
345
- this.lastRefill = Date.now();
346
- }
347
- /**
348
- * Consume tokens
349
- */
350
- consume(tokens) {
351
- this.refill();
352
- if (this.tokens >= tokens) {
353
- this.tokens -= tokens;
354
- return true;
355
- }
356
- return false;
357
- }
358
- /**
359
- * Refill tokens
360
- */
361
- refill() {
362
- const now = Date.now();
363
- const elapsed = now - this.lastRefill;
364
- const intervals = Math.floor(elapsed / this.refillInterval);
365
- if (intervals > 0) {
366
- this.tokens = Math.min(this.capacity, this.tokens + intervals * this.refillRate);
367
- this.lastRefill = now;
368
- }
369
- }
370
- /**
371
- * Get current tokens
372
- */
373
- getTokens() {
374
- this.refill();
375
- return this.tokens;
376
- }
377
- }
378
- /**
379
- * Calculate CPU savings from circular buffer optimization
380
- */
381
- export function calculateRateLimiterSavings(oldAvgTime, newAvgTime, totalRequests) {
382
- const savings = oldAvgTime - newAvgTime;
383
- const savingsPercentage = (savings / oldAvgTime) * 100;
384
- const totalTimeSaved = savings * totalRequests;
385
- const cpuReduction = savingsPercentage;
386
- return {
387
- savingsPercentage,
388
- totalTimeSaved,
389
- cpuReduction
390
- };
391
- }
@@ -1,298 +0,0 @@
1
- /**
2
- * Dynamic Compression based on CPU
3
- * Adaptive compression levels based on CPU availability
4
- * Phase 3 Optimization
5
- */
6
- import * as zlib from 'zlib';
7
- import { performance } from 'perf_hooks';
8
- /**
9
- * Compression levels with CPU costs
10
- */
11
- export const COMPRESSION_LEVELS = {
12
- gzip: [
13
- { level: 1, name: 'fastest', cpuCost: 1, compressionRatio: 3 },
14
- { level: 3, name: 'fast', cpuCost: 3, compressionRatio: 5 },
15
- { level: 6, name: 'default', cpuCost: 6, compressionRatio: 7 },
16
- { level: 9, name: 'best', cpuCost: 10, compressionRatio: 9 }
17
- ],
18
- brotli: [
19
- { level: 1, name: 'fastest', cpuCost: 2, compressionRatio: 4 },
20
- { level: 4, name: 'fast', cpuCost: 4, compressionRatio: 6 },
21
- { level: 6, name: 'default', cpuCost: 7, compressionRatio: 8 },
22
- { level: 11, name: 'best', cpuCost: 10, compressionRatio: 10 }
23
- ]
24
- };
25
- /**
26
- * Dynamic Compression Manager
27
- * Adjusts compression levels based on CPU load
28
- */
29
- export class DynamicCompressionManager {
30
- config;
31
- stats;
32
- currentLevelIndex = 1; // Start with 'fast'
33
- cpuSamples = [];
34
- monitorInterval;
35
- constructor(config) {
36
- this.config = {
37
- enabled: config.enabled,
38
- minSize: config.minSize || 1024,
39
- algorithm: config.algorithm || 'gzip',
40
- adaptive: config.adaptive !== false,
41
- cpuThresholdHigh: config.cpuThresholdHigh || 70,
42
- cpuThresholdLow: config.cpuThresholdLow || 30,
43
- checkInterval: config.checkInterval || 5000
44
- };
45
- this.stats = {
46
- totalBytes: 0,
47
- compressedBytes: 0,
48
- compressionRatio: 1,
49
- avgCompressionTime: 0,
50
- currentLevel: this.getCurrentLevel().level,
51
- levelChanges: 0,
52
- cpuAdjustments: 0
53
- };
54
- if (this.config.adaptive) {
55
- this.startCPUMonitoring();
56
- }
57
- }
58
- /**
59
- * Compress data with adaptive level
60
- */
61
- async compress(data) {
62
- if (!this.config.enabled || data.length < this.config.minSize) {
63
- return data;
64
- }
65
- const startTime = performance.now();
66
- const level = this.getCurrentLevel();
67
- let compressed;
68
- try {
69
- if (this.config.algorithm === 'brotli') {
70
- compressed = await this.compressBrotli(data, level.level);
71
- }
72
- else if (this.config.algorithm === 'deflate') {
73
- compressed = await this.compressDeflate(data, level.level);
74
- }
75
- else {
76
- compressed = await this.compressGzip(data, level.level);
77
- }
78
- // Update statistics
79
- const compressionTime = performance.now() - startTime;
80
- this.updateStats(data.length, compressed.length, compressionTime);
81
- return compressed;
82
- }
83
- catch (error) {
84
- // Fallback to uncompressed
85
- return data;
86
- }
87
- }
88
- /**
89
- * Compress with gzip
90
- */
91
- compressGzip(data, level) {
92
- return new Promise((resolve, reject) => {
93
- zlib.gzip(data, { level }, (err, result) => {
94
- if (err)
95
- reject(err);
96
- else
97
- resolve(result);
98
- });
99
- });
100
- }
101
- /**
102
- * Compress with brotli
103
- */
104
- compressBrotli(data, level) {
105
- return new Promise((resolve, reject) => {
106
- zlib.brotliCompress(data, {
107
- params: {
108
- [zlib.constants.BROTLI_PARAM_QUALITY]: level
109
- }
110
- }, (err, result) => {
111
- if (err)
112
- reject(err);
113
- else
114
- resolve(result);
115
- });
116
- });
117
- }
118
- /**
119
- * Compress with deflate
120
- */
121
- compressDeflate(data, level) {
122
- return new Promise((resolve, reject) => {
123
- zlib.deflate(data, { level }, (err, result) => {
124
- if (err)
125
- reject(err);
126
- else
127
- resolve(result);
128
- });
129
- });
130
- }
131
- /**
132
- * Get current compression level
133
- */
134
- getCurrentLevel() {
135
- const levels = COMPRESSION_LEVELS[this.config.algorithm];
136
- return levels[this.currentLevelIndex] || levels[1];
137
- }
138
- /**
139
- * Adjust compression level based on CPU
140
- */
141
- adjustLevel(cpuUsage) {
142
- const levels = COMPRESSION_LEVELS[this.config.algorithm];
143
- const oldIndex = this.currentLevelIndex;
144
- if (cpuUsage > this.config.cpuThresholdHigh && this.currentLevelIndex > 0) {
145
- // CPU high, reduce compression level
146
- this.currentLevelIndex--;
147
- this.stats.cpuAdjustments++;
148
- }
149
- else if (cpuUsage < this.config.cpuThresholdLow && this.currentLevelIndex < levels.length - 1) {
150
- // CPU low, increase compression level
151
- this.currentLevelIndex++;
152
- this.stats.cpuAdjustments++;
153
- }
154
- if (oldIndex !== this.currentLevelIndex) {
155
- this.stats.levelChanges++;
156
- this.stats.currentLevel = this.getCurrentLevel().level;
157
- }
158
- }
159
- /**
160
- * Start CPU monitoring
161
- */
162
- startCPUMonitoring() {
163
- this.monitorInterval = setInterval(() => {
164
- const cpuUsage = this.getCPUUsage();
165
- this.cpuSamples.push(cpuUsage);
166
- // Keep last 10 samples
167
- if (this.cpuSamples.length > 10) {
168
- this.cpuSamples.shift();
169
- }
170
- // Calculate average CPU
171
- const avgCPU = this.cpuSamples.reduce((a, b) => a + b, 0) / this.cpuSamples.length;
172
- // Adjust compression level
173
- this.adjustLevel(avgCPU);
174
- }, this.config.checkInterval);
175
- }
176
- /**
177
- * Get CPU usage percentage
178
- */
179
- getCPUUsage() {
180
- const cpus = require('os').cpus();
181
- let totalIdle = 0;
182
- let totalTick = 0;
183
- for (const cpu of cpus) {
184
- for (const type in cpu.times) {
185
- totalTick += cpu.times[type];
186
- }
187
- totalIdle += cpu.times.idle;
188
- }
189
- const idle = totalIdle / cpus.length;
190
- const total = totalTick / cpus.length;
191
- const usage = 100 - ~~(100 * idle / total);
192
- return Math.max(0, Math.min(100, usage));
193
- }
194
- /**
195
- * Update statistics
196
- */
197
- updateStats(originalSize, compressedSize, time) {
198
- this.stats.totalBytes += originalSize;
199
- this.stats.compressedBytes += compressedSize;
200
- this.stats.compressionRatio = this.stats.totalBytes / this.stats.compressedBytes;
201
- // Update average compression time
202
- const totalCompressions = this.stats.totalBytes / (originalSize || 1);
203
- this.stats.avgCompressionTime =
204
- (this.stats.avgCompressionTime * (totalCompressions - 1) + time) / totalCompressions;
205
- }
206
- /**
207
- * Get statistics
208
- */
209
- getStats() {
210
- const level = this.getCurrentLevel();
211
- const avgCPU = this.cpuSamples.length > 0
212
- ? this.cpuSamples.reduce((a, b) => a + b, 0) / this.cpuSamples.length
213
- : 0;
214
- return {
215
- ...this.stats,
216
- currentLevelName: level.name,
217
- cpuUsage: avgCPU
218
- };
219
- }
220
- /**
221
- * Get compression savings
222
- */
223
- getSavings() {
224
- const byteSavings = this.stats.totalBytes - this.stats.compressedBytes;
225
- const percentSavings = (byteSavings / this.stats.totalBytes) * 100;
226
- const mbSaved = byteSavings / (1024 * 1024);
227
- return {
228
- byteSavings,
229
- percentSavings,
230
- mbSaved
231
- };
232
- }
233
- /**
234
- * Manually set compression level
235
- */
236
- setLevel(levelName) {
237
- const levels = COMPRESSION_LEVELS[this.config.algorithm];
238
- const index = levels.findIndex(l => l.name === levelName);
239
- if (index !== -1) {
240
- this.currentLevelIndex = index;
241
- this.stats.currentLevel = levels[index].level;
242
- this.stats.levelChanges++;
243
- return true;
244
- }
245
- return false;
246
- }
247
- /**
248
- * Reset statistics
249
- */
250
- resetStats() {
251
- this.stats = {
252
- totalBytes: 0,
253
- compressedBytes: 0,
254
- compressionRatio: 1,
255
- avgCompressionTime: 0,
256
- currentLevel: this.getCurrentLevel().level,
257
- levelChanges: 0,
258
- cpuAdjustments: 0
259
- };
260
- }
261
- /**
262
- * Stop CPU monitoring
263
- */
264
- destroy() {
265
- if (this.monitorInterval) {
266
- clearInterval(this.monitorInterval);
267
- }
268
- }
269
- }
270
- /**
271
- * Content-type aware compression
272
- */
273
- export function shouldCompress(contentType, size, minSize = 1024) {
274
- if (size < minSize) {
275
- return false;
276
- }
277
- const compressibleTypes = [
278
- 'text/',
279
- 'application/json',
280
- 'application/javascript',
281
- 'application/xml',
282
- 'application/x-www-form-urlencoded'
283
- ];
284
- return compressibleTypes.some(type => contentType.startsWith(type));
285
- }
286
- /**
287
- * Calculate compression efficiency
288
- */
289
- export function calculateCompressionEfficiency(stats) {
290
- const timePerMB = stats.avgCompressionTime / ((stats.totalBytes / (1024 * 1024)) || 1);
291
- const ratioScore = Math.min(100, (stats.compressionRatio - 1) * 10);
292
- const efficiency = (ratioScore * 0.7) + ((100 - Math.min(100, timePerMB)) * 0.3);
293
- return {
294
- efficiency,
295
- timePerMB,
296
- ratioScore
297
- };
298
- }