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,331 +0,0 @@
1
- /**
2
- * HTTP/3 (QUIC) Proxy for LLM Streaming
3
- *
4
- * Features:
5
- * - Zero RTT: Faster connection establishment (50-70% faster than HTTP/2)
6
- * - No head-of-line blocking: Independent streams
7
- * - Better mobile: Handles network switches gracefully
8
- * - Built-in encryption: TLS 1.3 mandatory
9
- * - Leverages existing QUIC transport implementation
10
- *
11
- * Performance: 50-70% faster than HTTP/2, 70-80% faster than HTTP/1.1
12
- */
13
- import { QuicTransport } from '../transport/quic.js';
14
- import { logger } from '../utils/logger.js';
15
- export class HTTP3Proxy {
16
- transport;
17
- config;
18
- isRunning = false;
19
- constructor(config) {
20
- this.config = config;
21
- this.transport = new QuicTransport({
22
- host: 'localhost',
23
- port: config.port,
24
- cert: config.cert,
25
- key: config.key,
26
- alpn: ['h3'], // HTTP/3 ALPN identifier
27
- maxConcurrentStreams: config.maxConcurrentStreams || 100
28
- });
29
- logger.info('HTTP/3 proxy created', {
30
- port: config.port,
31
- maxStreams: config.maxConcurrentStreams
32
- });
33
- }
34
- async start() {
35
- try {
36
- await this.transport.listen();
37
- this.isRunning = true;
38
- // Handle incoming QUIC streams
39
- this.transport.on('stream', async (stream) => {
40
- try {
41
- const headers = await this.readHeaders(stream);
42
- const path = headers[':path'];
43
- const method = headers[':method'];
44
- logger.debug('HTTP/3 stream request', { path, method });
45
- if (path === '/v1/messages' && method === 'POST') {
46
- await this.handleMessagesRequest(stream, headers);
47
- }
48
- else if (path === '/health') {
49
- await this.handleHealthCheck(stream);
50
- }
51
- else {
52
- await this.sendErrorResponse(stream, 404, 'Not Found');
53
- }
54
- }
55
- catch (error) {
56
- logger.error('HTTP/3 stream error', { error: error.message });
57
- await this.sendErrorResponse(stream, 500, error.message);
58
- }
59
- });
60
- this.transport.on('error', (error) => {
61
- logger.error('HTTP/3 transport error', { error: error.message });
62
- });
63
- logger.info('HTTP/3 proxy started', {
64
- port: this.config.port,
65
- protocol: 'HTTP/3 (QUIC)',
66
- url: `https://localhost:${this.config.port}`
67
- });
68
- console.log(`\n✅ HTTP/3 (QUIC) Proxy running at https://localhost:${this.config.port}`);
69
- console.log(` Protocol: HTTP/3 over QUIC (50-70% faster than HTTP/2)`);
70
- console.log(` Features: Zero RTT, No HOL blocking, Mobile-optimized\n`);
71
- }
72
- catch (error) {
73
- logger.error('Failed to start HTTP/3 proxy', { error: error.message });
74
- throw error;
75
- }
76
- }
77
- async readHeaders(stream) {
78
- // Read HTTP/3 headers from QUIC stream
79
- // This is a simplified implementation - real HTTP/3 uses QPACK compression
80
- const headerData = await stream.read();
81
- if (!headerData) {
82
- return {};
83
- }
84
- try {
85
- // For simplicity, assume JSON-encoded headers
86
- // Real HTTP/3 would use QPACK binary format
87
- return JSON.parse(headerData.toString());
88
- }
89
- catch {
90
- // Fallback: parse basic HTTP-style headers
91
- const lines = headerData.toString().split('\r\n');
92
- const headers = {};
93
- for (const line of lines) {
94
- const [key, ...valueParts] = line.split(': ');
95
- if (key && valueParts.length > 0) {
96
- headers[key.toLowerCase()] = valueParts.join(': ');
97
- }
98
- }
99
- return headers;
100
- }
101
- }
102
- async handleHealthCheck(stream) {
103
- await stream.writeHeaders({
104
- ':status': '200',
105
- 'content-type': 'application/json'
106
- });
107
- await stream.write(JSON.stringify({
108
- status: 'ok',
109
- service: 'http3-proxy',
110
- protocol: 'HTTP/3',
111
- transport: 'QUIC'
112
- }));
113
- await stream.end();
114
- }
115
- async handleMessagesRequest(stream, headers) {
116
- try {
117
- // Read request body from QUIC stream
118
- const bodyData = await stream.read();
119
- const anthropicReq = JSON.parse(bodyData.toString());
120
- logger.info('HTTP/3 messages request', {
121
- model: anthropicReq.model,
122
- stream: anthropicReq.stream,
123
- messageCount: anthropicReq.messages?.length
124
- });
125
- // Convert Anthropic format to Gemini format
126
- const geminiReq = this.convertAnthropicToGemini(anthropicReq);
127
- // Determine endpoint
128
- const endpoint = anthropicReq.stream ? 'streamGenerateContent' : 'generateContent';
129
- const streamParam = anthropicReq.stream ? '&alt=sse' : '';
130
- const geminiBaseUrl = this.config.geminiBaseUrl || 'https://generativelanguage.googleapis.com/v1beta';
131
- const url = `${geminiBaseUrl}/models/gemini-2.0-flash-exp:${endpoint}?key=${this.config.geminiApiKey}${streamParam}`;
132
- // Forward to Gemini
133
- const response = await fetch(url, {
134
- method: 'POST',
135
- headers: { 'Content-Type': 'application/json' },
136
- body: JSON.stringify(geminiReq)
137
- });
138
- if (!response.ok) {
139
- const error = await response.text();
140
- logger.error('Gemini API error', { status: response.status, error });
141
- await this.sendErrorResponse(stream, response.status, error);
142
- return;
143
- }
144
- // Handle streaming vs non-streaming
145
- if (anthropicReq.stream) {
146
- // Stream response over QUIC
147
- await stream.writeHeaders({
148
- ':status': '200',
149
- 'content-type': 'text/event-stream',
150
- 'cache-control': 'no-cache'
151
- });
152
- const reader = response.body?.getReader();
153
- if (!reader) {
154
- throw new Error('No response body');
155
- }
156
- const decoder = new TextDecoder();
157
- let chunkCount = 0;
158
- while (true) {
159
- const { done, value } = await reader.read();
160
- if (done)
161
- break;
162
- const chunk = decoder.decode(value);
163
- chunkCount++;
164
- const anthropicChunk = this.convertGeminiStreamToAnthropic(chunk);
165
- await stream.write(anthropicChunk);
166
- }
167
- logger.info('HTTP/3 stream complete', { totalChunks: chunkCount });
168
- await stream.end();
169
- }
170
- else {
171
- // Non-streaming response
172
- const geminiRes = await response.json();
173
- const anthropicRes = this.convertGeminiToAnthropic(geminiRes);
174
- await stream.writeHeaders({
175
- ':status': '200',
176
- 'content-type': 'application/json'
177
- });
178
- await stream.write(JSON.stringify(anthropicRes));
179
- await stream.end();
180
- }
181
- }
182
- catch (error) {
183
- logger.error('HTTP/3 request error', { error: error.message });
184
- await this.sendErrorResponse(stream, 500, error.message);
185
- }
186
- }
187
- async sendErrorResponse(stream, status, message) {
188
- try {
189
- await stream.writeHeaders({
190
- ':status': status.toString(),
191
- 'content-type': 'application/json'
192
- });
193
- await stream.write(JSON.stringify({
194
- error: {
195
- type: 'proxy_error',
196
- message
197
- }
198
- }));
199
- await stream.end();
200
- }
201
- catch (error) {
202
- logger.error('Failed to send error response', { error: error.message });
203
- }
204
- }
205
- convertAnthropicToGemini(anthropicReq) {
206
- const contents = [];
207
- let systemPrefix = '';
208
- if (anthropicReq.system) {
209
- systemPrefix = `System: ${anthropicReq.system}\n\n`;
210
- }
211
- for (let i = 0; i < anthropicReq.messages.length; i++) {
212
- const msg = anthropicReq.messages[i];
213
- let text;
214
- if (typeof msg.content === 'string') {
215
- text = msg.content;
216
- }
217
- else if (Array.isArray(msg.content)) {
218
- text = msg.content
219
- .filter((block) => block.type === 'text')
220
- .map((block) => block.text)
221
- .join('\n');
222
- }
223
- else {
224
- text = '';
225
- }
226
- if (i === 0 && msg.role === 'user' && systemPrefix) {
227
- text = systemPrefix + text;
228
- }
229
- contents.push({
230
- role: msg.role === 'assistant' ? 'model' : 'user',
231
- parts: [{ text }]
232
- });
233
- }
234
- const geminiReq = { contents };
235
- if (anthropicReq.temperature !== undefined || anthropicReq.max_tokens !== undefined) {
236
- geminiReq.generationConfig = {};
237
- if (anthropicReq.temperature !== undefined) {
238
- geminiReq.generationConfig.temperature = anthropicReq.temperature;
239
- }
240
- if (anthropicReq.max_tokens !== undefined) {
241
- geminiReq.generationConfig.maxOutputTokens = anthropicReq.max_tokens;
242
- }
243
- }
244
- return geminiReq;
245
- }
246
- convertGeminiStreamToAnthropic(chunk) {
247
- const lines = chunk.split('\n').filter(line => line.trim());
248
- const anthropicChunks = [];
249
- for (const line of lines) {
250
- try {
251
- if (line.startsWith('data: ')) {
252
- const jsonStr = line.substring(6);
253
- const parsed = JSON.parse(jsonStr);
254
- const candidate = parsed.candidates?.[0];
255
- const text = candidate?.content?.parts?.[0]?.text;
256
- if (text) {
257
- anthropicChunks.push(`event: content_block_delta\ndata: ${JSON.stringify({
258
- type: 'content_block_delta',
259
- delta: { type: 'text_delta', text }
260
- })}\n\n`);
261
- }
262
- if (candidate?.finishReason) {
263
- anthropicChunks.push('event: message_stop\ndata: {}\n\n');
264
- }
265
- }
266
- }
267
- catch (e) {
268
- logger.debug('Failed to parse stream chunk', { line });
269
- }
270
- }
271
- return anthropicChunks.join('');
272
- }
273
- convertGeminiToAnthropic(geminiRes) {
274
- const candidate = geminiRes.candidates?.[0];
275
- if (!candidate) {
276
- throw new Error('No candidates in Gemini response');
277
- }
278
- const content = candidate.content;
279
- const parts = content?.parts || [];
280
- let rawText = '';
281
- for (const part of parts) {
282
- if (part.text) {
283
- rawText += part.text;
284
- }
285
- }
286
- return {
287
- id: `msg_${Date.now()}`,
288
- type: 'message',
289
- role: 'assistant',
290
- model: 'gemini-2.0-flash-exp',
291
- content: [
292
- {
293
- type: 'text',
294
- text: rawText
295
- }
296
- ],
297
- stop_reason: 'end_turn',
298
- usage: {
299
- input_tokens: geminiRes.usageMetadata?.promptTokenCount || 0,
300
- output_tokens: geminiRes.usageMetadata?.candidatesTokenCount || 0
301
- }
302
- };
303
- }
304
- async stop() {
305
- if (this.isRunning) {
306
- await this.transport.close();
307
- this.isRunning = false;
308
- logger.info('HTTP/3 proxy stopped');
309
- }
310
- }
311
- }
312
- // CLI entry point
313
- if (import.meta.url === `file://${process.argv[1]}`) {
314
- const port = parseInt(process.env.PORT || '4433');
315
- const geminiApiKey = process.env.GOOGLE_GEMINI_API_KEY;
316
- if (!geminiApiKey) {
317
- console.error('❌ Error: GOOGLE_GEMINI_API_KEY environment variable required');
318
- process.exit(1);
319
- }
320
- const proxy = new HTTP3Proxy({
321
- port,
322
- geminiApiKey,
323
- cert: process.env.TLS_CERT || './certs/cert.pem',
324
- key: process.env.TLS_KEY || './certs/key.pem',
325
- geminiBaseUrl: process.env.GEMINI_BASE_URL
326
- });
327
- proxy.start().catch((error) => {
328
- console.error('❌ Failed to start HTTP/3 proxy:', error);
329
- process.exit(1);
330
- });
331
- }