agentic-flow 1.10.0 → 1.10.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 (580) hide show
  1. package/CHANGELOG.md +25 -1338
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/agentdb/index.d.ts +26 -0
  4. package/dist/agentdb/index.d.ts.map +1 -0
  5. package/dist/agentdb/index.js +1 -0
  6. package/dist/agentdb/index.js.map +1 -0
  7. package/dist/agentdb/validate-frontier.cjs +416 -0
  8. package/dist/agentdb/validate-frontier.cjs.map +1 -0
  9. package/dist/agentdb/validate-frontier.d.cts +2 -0
  10. package/dist/agentdb/validate-frontier.d.cts.map +1 -0
  11. package/dist/agents/claudeAgent.d.ts +6 -0
  12. package/dist/agents/claudeAgent.d.ts.map +1 -0
  13. package/dist/agents/claudeAgent.js +22 -3
  14. package/dist/agents/claudeAgent.js.map +1 -0
  15. package/dist/agents/claudeAgentDirect.d.ts +6 -0
  16. package/dist/agents/claudeAgentDirect.d.ts.map +1 -0
  17. package/dist/agents/claudeAgentDirect.js +1 -0
  18. package/dist/agents/claudeAgentDirect.js.map +1 -0
  19. package/dist/agents/claudeFlowAgent.d.ts +32 -0
  20. package/dist/agents/claudeFlowAgent.d.ts.map +1 -0
  21. package/dist/agents/claudeFlowAgent.js +1 -0
  22. package/dist/agents/claudeFlowAgent.js.map +1 -0
  23. package/dist/agents/codeReviewAgent.d.ts +4 -0
  24. package/dist/agents/codeReviewAgent.d.ts.map +1 -0
  25. package/dist/agents/codeReviewAgent.js +1 -0
  26. package/dist/agents/codeReviewAgent.js.map +1 -0
  27. package/dist/agents/dataAgent.d.ts +4 -0
  28. package/dist/agents/dataAgent.d.ts.map +1 -0
  29. package/dist/agents/dataAgent.js +1 -0
  30. package/dist/agents/dataAgent.js.map +1 -0
  31. package/dist/agents/directApiAgent.d.ts +10 -0
  32. package/dist/agents/directApiAgent.d.ts.map +1 -0
  33. package/dist/agents/directApiAgent.js +1 -0
  34. package/dist/agents/directApiAgent.js.map +1 -0
  35. package/dist/agents/webResearchAgent.d.ts +4 -0
  36. package/dist/agents/webResearchAgent.d.ts.map +1 -0
  37. package/dist/agents/webResearchAgent.js +1 -0
  38. package/dist/agents/webResearchAgent.js.map +1 -0
  39. package/dist/cli/agent-manager.d.ts +57 -0
  40. package/dist/cli/agent-manager.d.ts.map +1 -0
  41. package/dist/cli/agent-manager.js +1 -0
  42. package/dist/cli/agent-manager.js.map +1 -0
  43. package/dist/cli/claude-code-wrapper.d.ts +21 -0
  44. package/dist/cli/claude-code-wrapper.d.ts.map +1 -0
  45. package/dist/cli/claude-code-wrapper.js +1 -0
  46. package/dist/cli/claude-code-wrapper.js.map +1 -0
  47. package/dist/cli/config-wizard.d.ts +21 -0
  48. package/dist/cli/config-wizard.d.ts.map +1 -0
  49. package/dist/cli/config-wizard.js +1 -0
  50. package/dist/cli/config-wizard.js.map +1 -0
  51. package/dist/cli/federation-cli.d.ts +1 -0
  52. package/dist/cli/federation-cli.d.ts.map +1 -0
  53. package/dist/cli/federation-cli.js +1 -0
  54. package/dist/cli/federation-cli.js.map +1 -0
  55. package/dist/cli/mcp-manager.d.ts +12 -0
  56. package/dist/cli/mcp-manager.d.ts.map +1 -0
  57. package/dist/cli/mcp-manager.js +1 -0
  58. package/dist/cli/mcp-manager.js.map +1 -0
  59. package/dist/cli/mcp.d.ts +11 -0
  60. package/dist/cli/mcp.d.ts.map +1 -0
  61. package/dist/cli/mcp.js +1 -0
  62. package/dist/cli/mcp.js.map +1 -0
  63. package/dist/cli-proxy.d.ts +7 -0
  64. package/dist/cli-proxy.d.ts.map +1 -0
  65. package/dist/cli-proxy.js +1 -0
  66. package/dist/cli-proxy.js.map +1 -0
  67. package/dist/cli-standalone-proxy.d.ts +17 -0
  68. package/dist/cli-standalone-proxy.d.ts.map +1 -0
  69. package/dist/cli-standalone-proxy.js +1 -0
  70. package/dist/cli-standalone-proxy.js.map +1 -0
  71. package/dist/config/claudeFlow.d.ts +33 -0
  72. package/dist/config/claudeFlow.d.ts.map +1 -0
  73. package/dist/config/claudeFlow.js +1 -0
  74. package/dist/config/claudeFlow.js.map +1 -0
  75. package/dist/config/quic.d.ts +58 -0
  76. package/dist/config/quic.d.ts.map +1 -0
  77. package/dist/config/quic.js +1 -0
  78. package/dist/config/quic.js.map +1 -0
  79. package/dist/config/tools.d.ts +17 -0
  80. package/dist/config/tools.d.ts.map +1 -0
  81. package/dist/config/tools.js +1 -0
  82. package/dist/config/tools.js.map +1 -0
  83. package/dist/core/long-running-agent.d.ts +92 -0
  84. package/dist/core/long-running-agent.d.ts.map +1 -0
  85. package/dist/core/long-running-agent.js +1 -0
  86. package/dist/core/long-running-agent.js.map +1 -0
  87. package/dist/core/provider-manager.d.ts +145 -0
  88. package/dist/core/provider-manager.d.ts.map +1 -0
  89. package/dist/core/provider-manager.js +1 -0
  90. package/dist/core/provider-manager.js.map +1 -0
  91. package/dist/examples/multi-agent-orchestration.d.ts +3 -0
  92. package/dist/examples/multi-agent-orchestration.d.ts.map +1 -0
  93. package/dist/examples/multi-agent-orchestration.js +1 -0
  94. package/dist/examples/multi-agent-orchestration.js.map +1 -0
  95. package/dist/examples/use-goal-planner.d.ts +3 -0
  96. package/dist/examples/use-goal-planner.d.ts.map +1 -0
  97. package/dist/examples/use-goal-planner.js +1 -0
  98. package/dist/examples/use-goal-planner.js.map +1 -0
  99. package/dist/examples/use-provider-fallback.d.ts +13 -0
  100. package/dist/examples/use-provider-fallback.d.ts.map +1 -0
  101. package/dist/examples/use-provider-fallback.js +1 -0
  102. package/dist/examples/use-provider-fallback.js.map +1 -0
  103. package/dist/federation/EphemeralAgent.d.ts +84 -0
  104. package/dist/federation/EphemeralAgent.d.ts.map +1 -0
  105. package/dist/federation/EphemeralAgent.js +1 -0
  106. package/dist/federation/EphemeralAgent.js.map +1 -0
  107. package/dist/federation/FederationHub.d.ts +89 -0
  108. package/dist/federation/FederationHub.d.ts.map +1 -0
  109. package/dist/federation/FederationHub.js +1 -0
  110. package/dist/federation/FederationHub.js.map +1 -0
  111. package/dist/federation/FederationHubClient.d.ts +70 -0
  112. package/dist/federation/FederationHubClient.d.ts.map +1 -0
  113. package/dist/federation/FederationHubClient.js +1 -0
  114. package/dist/federation/FederationHubClient.js.map +1 -0
  115. package/dist/federation/FederationHubServer.d.ts +100 -0
  116. package/dist/federation/FederationHubServer.d.ts.map +1 -0
  117. package/dist/federation/FederationHubServer.js +1 -0
  118. package/dist/federation/FederationHubServer.js.map +1 -0
  119. package/dist/federation/SecurityManager.d.ts +80 -0
  120. package/dist/federation/SecurityManager.d.ts.map +1 -0
  121. package/dist/federation/SecurityManager.js +1 -0
  122. package/dist/federation/SecurityManager.js.map +1 -0
  123. package/dist/federation/debug/agent-debug-stream.d.ts +171 -0
  124. package/dist/federation/debug/agent-debug-stream.d.ts.map +1 -0
  125. package/dist/federation/debug/agent-debug-stream.js +1 -0
  126. package/dist/federation/debug/agent-debug-stream.js.map +1 -0
  127. package/dist/federation/debug/debug-stream.d.ts +157 -0
  128. package/dist/federation/debug/debug-stream.d.ts.map +1 -0
  129. package/dist/federation/debug/debug-stream.js +1 -0
  130. package/dist/federation/debug/debug-stream.js.map +1 -0
  131. package/dist/federation/index.d.ts +13 -0
  132. package/dist/federation/index.d.ts.map +1 -0
  133. package/dist/federation/index.js +1 -0
  134. package/dist/federation/index.js.map +1 -0
  135. package/dist/federation/integrations/realtime-federation.d.ts +144 -0
  136. package/dist/federation/integrations/realtime-federation.d.ts.map +1 -0
  137. package/dist/federation/integrations/realtime-federation.js +1 -0
  138. package/dist/federation/integrations/realtime-federation.js.map +1 -0
  139. package/dist/federation/integrations/supabase-adapter-debug.d.ts +91 -0
  140. package/dist/federation/integrations/supabase-adapter-debug.d.ts.map +1 -0
  141. package/dist/federation/integrations/supabase-adapter-debug.js +1 -0
  142. package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -0
  143. package/dist/federation/integrations/supabase-adapter.d.ts +89 -0
  144. package/dist/federation/integrations/supabase-adapter.d.ts.map +1 -0
  145. package/dist/federation/integrations/supabase-adapter.js +1 -0
  146. package/dist/federation/integrations/supabase-adapter.js.map +1 -0
  147. package/dist/health.d.ts +28 -0
  148. package/dist/health.d.ts.map +1 -0
  149. package/dist/health.js +1 -0
  150. package/dist/health.js.map +1 -0
  151. package/dist/hooks/parallel-validation.d.ts +51 -0
  152. package/dist/hooks/parallel-validation.d.ts.map +1 -0
  153. package/dist/hooks/parallel-validation.js +1 -0
  154. package/dist/hooks/parallel-validation.js.map +1 -0
  155. package/dist/hooks/swarm-learning-optimizer.d.ts +89 -0
  156. package/dist/hooks/swarm-learning-optimizer.d.ts.map +1 -0
  157. package/dist/hooks/swarm-learning-optimizer.js +1 -0
  158. package/dist/hooks/swarm-learning-optimizer.js.map +1 -0
  159. package/dist/index.d.ts +4 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +15 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/mcp/claudeFlowSdkServer.d.ts +6 -0
  164. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -0
  165. package/dist/mcp/claudeFlowSdkServer.js +1 -0
  166. package/dist/mcp/claudeFlowSdkServer.js.map +1 -0
  167. package/dist/mcp/fastmcp/servers/claude-flow-sdk.d.ts +3 -0
  168. package/dist/mcp/fastmcp/servers/claude-flow-sdk.d.ts.map +1 -0
  169. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js +1 -0
  170. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js.map +1 -0
  171. package/dist/mcp/fastmcp/servers/http-sse.d.ts +3 -0
  172. package/dist/mcp/fastmcp/servers/http-sse.d.ts.map +1 -0
  173. package/dist/mcp/fastmcp/servers/http-sse.js +1 -0
  174. package/dist/mcp/fastmcp/servers/http-sse.js.map +1 -0
  175. package/dist/mcp/fastmcp/servers/http-streaming-updated.d.ts +3 -0
  176. package/dist/mcp/fastmcp/servers/http-streaming-updated.d.ts.map +1 -0
  177. package/dist/mcp/fastmcp/servers/http-streaming-updated.js +1 -0
  178. package/dist/mcp/fastmcp/servers/http-streaming-updated.js.map +1 -0
  179. package/dist/mcp/fastmcp/servers/poc-stdio.d.ts +3 -0
  180. package/dist/mcp/fastmcp/servers/poc-stdio.d.ts.map +1 -0
  181. package/dist/mcp/fastmcp/servers/poc-stdio.js +1 -0
  182. package/dist/mcp/fastmcp/servers/poc-stdio.js.map +1 -0
  183. package/dist/mcp/fastmcp/servers/stdio-full.d.ts +3 -0
  184. package/dist/mcp/fastmcp/servers/stdio-full.d.ts.map +1 -0
  185. package/dist/mcp/fastmcp/servers/stdio-full.js +1 -0
  186. package/dist/mcp/fastmcp/servers/stdio-full.js.map +1 -0
  187. package/dist/mcp/fastmcp/tools/agent/add-agent.d.ts +3 -0
  188. package/dist/mcp/fastmcp/tools/agent/add-agent.d.ts.map +1 -0
  189. package/dist/mcp/fastmcp/tools/agent/add-agent.js +1 -0
  190. package/dist/mcp/fastmcp/tools/agent/add-agent.js.map +1 -0
  191. package/dist/mcp/fastmcp/tools/agent/add-command.d.ts +3 -0
  192. package/dist/mcp/fastmcp/tools/agent/add-command.d.ts.map +1 -0
  193. package/dist/mcp/fastmcp/tools/agent/add-command.js +1 -0
  194. package/dist/mcp/fastmcp/tools/agent/add-command.js.map +1 -0
  195. package/dist/mcp/fastmcp/tools/agent/execute.d.ts +3 -0
  196. package/dist/mcp/fastmcp/tools/agent/execute.d.ts.map +1 -0
  197. package/dist/mcp/fastmcp/tools/agent/execute.js +1 -0
  198. package/dist/mcp/fastmcp/tools/agent/execute.js.map +1 -0
  199. package/dist/mcp/fastmcp/tools/agent/list.d.ts +3 -0
  200. package/dist/mcp/fastmcp/tools/agent/list.d.ts.map +1 -0
  201. package/dist/mcp/fastmcp/tools/agent/list.js +1 -0
  202. package/dist/mcp/fastmcp/tools/agent/list.js.map +1 -0
  203. package/dist/mcp/fastmcp/tools/agent/parallel.d.ts +3 -0
  204. package/dist/mcp/fastmcp/tools/agent/parallel.d.ts.map +1 -0
  205. package/dist/mcp/fastmcp/tools/agent/parallel.js +1 -0
  206. package/dist/mcp/fastmcp/tools/agent/parallel.js.map +1 -0
  207. package/dist/mcp/fastmcp/tools/swarm/init.d.ts +3 -0
  208. package/dist/mcp/fastmcp/tools/swarm/init.d.ts.map +1 -0
  209. package/dist/mcp/fastmcp/tools/swarm/init.js +1 -0
  210. package/dist/mcp/fastmcp/tools/swarm/init.js.map +1 -0
  211. package/dist/mcp/fastmcp/tools/swarm/orchestrate.d.ts +3 -0
  212. package/dist/mcp/fastmcp/tools/swarm/orchestrate.d.ts.map +1 -0
  213. package/dist/mcp/fastmcp/tools/swarm/orchestrate.js +1 -0
  214. package/dist/mcp/fastmcp/tools/swarm/orchestrate.js.map +1 -0
  215. package/dist/mcp/fastmcp/tools/swarm/spawn.d.ts +3 -0
  216. package/dist/mcp/fastmcp/tools/swarm/spawn.d.ts.map +1 -0
  217. package/dist/mcp/fastmcp/tools/swarm/spawn.js +1 -0
  218. package/dist/mcp/fastmcp/tools/swarm/spawn.js.map +1 -0
  219. package/dist/mcp/fastmcp/types/index.d.ts +33 -0
  220. package/dist/mcp/fastmcp/types/index.d.ts.map +1 -0
  221. package/dist/mcp/fastmcp/types/index.js +1 -0
  222. package/dist/mcp/fastmcp/types/index.js.map +1 -0
  223. package/dist/mcp/standalone-stdio.d.ts +3 -0
  224. package/dist/mcp/standalone-stdio.d.ts.map +1 -0
  225. package/dist/mcp/standalone-stdio.js +1 -0
  226. package/dist/mcp/standalone-stdio.js.map +1 -0
  227. package/dist/memory/SharedMemoryPool.d.ts +116 -0
  228. package/dist/memory/SharedMemoryPool.d.ts.map +1 -0
  229. package/dist/memory/SharedMemoryPool.js +1 -0
  230. package/dist/memory/SharedMemoryPool.js.map +1 -0
  231. package/dist/memory/index.d.ts +8 -0
  232. package/dist/memory/index.d.ts.map +1 -0
  233. package/dist/memory/index.js +1 -0
  234. package/dist/memory/index.js.map +1 -0
  235. package/dist/proxy/adaptive-proxy.d.ts +51 -0
  236. package/dist/proxy/adaptive-proxy.d.ts.map +1 -0
  237. package/dist/proxy/adaptive-proxy.js +1 -0
  238. package/dist/proxy/adaptive-proxy.js.map +1 -0
  239. package/dist/proxy/anthropic-to-gemini.d.ts +20 -0
  240. package/dist/proxy/anthropic-to-gemini.d.ts.map +1 -0
  241. package/dist/proxy/anthropic-to-gemini.js +1 -0
  242. package/dist/proxy/anthropic-to-gemini.js.map +1 -0
  243. package/dist/proxy/anthropic-to-onnx.d.ts +17 -0
  244. package/dist/proxy/anthropic-to-onnx.d.ts.map +1 -0
  245. package/dist/proxy/anthropic-to-onnx.js +1 -0
  246. package/dist/proxy/anthropic-to-onnx.js.map +1 -0
  247. package/dist/proxy/anthropic-to-openrouter.d.ts +28 -0
  248. package/dist/proxy/anthropic-to-openrouter.d.ts.map +1 -0
  249. package/dist/proxy/anthropic-to-openrouter.js +1 -0
  250. package/dist/proxy/anthropic-to-openrouter.js.map +1 -0
  251. package/dist/proxy/anthropic-to-requesty.d.ts +33 -0
  252. package/dist/proxy/anthropic-to-requesty.d.ts.map +1 -0
  253. package/dist/proxy/anthropic-to-requesty.js +1 -0
  254. package/dist/proxy/anthropic-to-requesty.js.map +1 -0
  255. package/dist/proxy/http2-proxy-optimized.d.ts +63 -0
  256. package/dist/proxy/http2-proxy-optimized.d.ts.map +1 -0
  257. package/dist/proxy/http2-proxy-optimized.js +1 -0
  258. package/dist/proxy/http2-proxy-optimized.js.map +1 -0
  259. package/dist/proxy/http2-proxy.d.ts +43 -0
  260. package/dist/proxy/http2-proxy.d.ts.map +1 -0
  261. package/dist/proxy/http2-proxy.js +1 -0
  262. package/dist/proxy/http2-proxy.js.map +1 -0
  263. package/dist/proxy/http3-proxy.d.ts +18 -0
  264. package/dist/proxy/http3-proxy.d.ts.map +1 -0
  265. package/dist/proxy/http3-proxy.js +1 -0
  266. package/dist/proxy/http3-proxy.js.map +1 -0
  267. package/dist/proxy/provider-instructions.d.ts +37 -0
  268. package/dist/proxy/provider-instructions.d.ts.map +1 -0
  269. package/dist/proxy/provider-instructions.js +1 -0
  270. package/dist/proxy/provider-instructions.js.map +1 -0
  271. package/dist/proxy/quic-proxy.d.ts +58 -0
  272. package/dist/proxy/quic-proxy.d.ts.map +1 -0
  273. package/dist/proxy/quic-proxy.js +1 -0
  274. package/dist/proxy/quic-proxy.js.map +1 -0
  275. package/dist/proxy/tool-emulation.d.ts +121 -0
  276. package/dist/proxy/tool-emulation.d.ts.map +1 -0
  277. package/dist/proxy/tool-emulation.js +1 -0
  278. package/dist/proxy/tool-emulation.js.map +1 -0
  279. package/dist/proxy/websocket-proxy.d.ts +39 -0
  280. package/dist/proxy/websocket-proxy.d.ts.map +1 -0
  281. package/dist/proxy/websocket-proxy.js +1 -0
  282. package/dist/proxy/websocket-proxy.js.map +1 -0
  283. package/dist/reasoningbank/AdvancedMemory.d.ts +120 -0
  284. package/dist/reasoningbank/AdvancedMemory.d.ts.map +1 -0
  285. package/dist/reasoningbank/AdvancedMemory.js +1 -0
  286. package/dist/reasoningbank/AdvancedMemory.js.map +1 -0
  287. package/dist/reasoningbank/HybridBackend.d.ts +99 -0
  288. package/dist/reasoningbank/HybridBackend.d.ts.map +1 -0
  289. package/dist/reasoningbank/HybridBackend.js +1 -0
  290. package/dist/reasoningbank/HybridBackend.js.map +1 -0
  291. package/dist/reasoningbank/backend-selector.d.ts +79 -0
  292. package/dist/reasoningbank/backend-selector.d.ts.map +1 -0
  293. package/dist/reasoningbank/backend-selector.js +1 -0
  294. package/dist/reasoningbank/backend-selector.js.map +1 -0
  295. package/dist/reasoningbank/benchmark.d.ts +14 -0
  296. package/dist/reasoningbank/benchmark.d.ts.map +1 -0
  297. package/dist/reasoningbank/benchmark.js +1 -0
  298. package/dist/reasoningbank/benchmark.js.map +1 -0
  299. package/dist/reasoningbank/config/reasoningbank-types.d.ts +57 -0
  300. package/dist/reasoningbank/config/reasoningbank-types.d.ts.map +1 -0
  301. package/dist/reasoningbank/config/reasoningbank-types.js +1 -0
  302. package/dist/reasoningbank/config/reasoningbank-types.js.map +1 -0
  303. package/dist/reasoningbank/core/consolidate.d.ts +21 -0
  304. package/dist/reasoningbank/core/consolidate.d.ts.map +1 -0
  305. package/dist/reasoningbank/core/consolidate.js +1 -0
  306. package/dist/reasoningbank/core/consolidate.js.map +1 -0
  307. package/dist/reasoningbank/core/distill.d.ts +22 -0
  308. package/dist/reasoningbank/core/distill.d.ts.map +1 -0
  309. package/dist/reasoningbank/core/distill.js +1 -0
  310. package/dist/reasoningbank/core/distill.js.map +1 -0
  311. package/dist/reasoningbank/core/judge.d.ts +17 -0
  312. package/dist/reasoningbank/core/judge.d.ts.map +1 -0
  313. package/dist/reasoningbank/core/judge.js +1 -0
  314. package/dist/reasoningbank/core/judge.js.map +1 -0
  315. package/dist/reasoningbank/core/matts.d.ts +46 -0
  316. package/dist/reasoningbank/core/matts.d.ts.map +1 -0
  317. package/dist/reasoningbank/core/matts.js +1 -0
  318. package/dist/reasoningbank/core/matts.js.map +1 -0
  319. package/dist/reasoningbank/core/retrieve.d.ts +35 -0
  320. package/dist/reasoningbank/core/retrieve.d.ts.map +1 -0
  321. package/dist/reasoningbank/core/retrieve.js +1 -0
  322. package/dist/reasoningbank/core/retrieve.js.map +1 -0
  323. package/dist/reasoningbank/db/queries.d.ts +88 -0
  324. package/dist/reasoningbank/db/queries.d.ts.map +1 -0
  325. package/dist/reasoningbank/db/queries.js +1 -0
  326. package/dist/reasoningbank/db/queries.js.map +1 -0
  327. package/dist/reasoningbank/db/schema.d.ts +81 -0
  328. package/dist/reasoningbank/db/schema.d.ts.map +1 -0
  329. package/dist/reasoningbank/db/schema.js +1 -0
  330. package/dist/reasoningbank/db/schema.js.map +1 -0
  331. package/dist/reasoningbank/demo-comparison.d.ts +10 -0
  332. package/dist/reasoningbank/demo-comparison.d.ts.map +1 -0
  333. package/dist/reasoningbank/demo-comparison.js +1 -0
  334. package/dist/reasoningbank/demo-comparison.js.map +1 -0
  335. package/dist/reasoningbank/hooks/post-task.d.ts +9 -0
  336. package/dist/reasoningbank/hooks/post-task.d.ts.map +1 -0
  337. package/dist/reasoningbank/hooks/post-task.js +1 -0
  338. package/dist/reasoningbank/hooks/post-task.js.map +1 -0
  339. package/dist/reasoningbank/hooks/pre-task.d.ts +9 -0
  340. package/dist/reasoningbank/hooks/pre-task.d.ts.map +1 -0
  341. package/dist/reasoningbank/hooks/pre-task.js +1 -0
  342. package/dist/reasoningbank/hooks/pre-task.js.map +1 -0
  343. package/dist/reasoningbank/index-new.d.ts +49 -0
  344. package/dist/reasoningbank/index-new.d.ts.map +1 -0
  345. package/dist/reasoningbank/index-new.js +1 -0
  346. package/dist/reasoningbank/index-new.js.map +1 -0
  347. package/dist/reasoningbank/index.d.ts +50 -0
  348. package/dist/reasoningbank/index.d.ts.map +1 -0
  349. package/dist/reasoningbank/index.js +1 -0
  350. package/dist/reasoningbank/index.js.map +1 -0
  351. package/dist/reasoningbank/test-integration.d.ts +7 -0
  352. package/dist/reasoningbank/test-integration.d.ts.map +1 -0
  353. package/dist/reasoningbank/test-integration.js +1 -0
  354. package/dist/reasoningbank/test-integration.js.map +1 -0
  355. package/dist/reasoningbank/test-retrieval.d.ts +6 -0
  356. package/dist/reasoningbank/test-retrieval.d.ts.map +1 -0
  357. package/dist/reasoningbank/test-retrieval.js +1 -0
  358. package/dist/reasoningbank/test-retrieval.js.map +1 -0
  359. package/dist/reasoningbank/test-validation.d.ts +7 -0
  360. package/dist/reasoningbank/test-validation.d.ts.map +1 -0
  361. package/dist/reasoningbank/test-validation.js +1 -0
  362. package/dist/reasoningbank/test-validation.js.map +1 -0
  363. package/dist/reasoningbank/types/index.d.ts +123 -0
  364. package/dist/reasoningbank/types/index.d.ts.map +1 -0
  365. package/dist/reasoningbank/types/index.js +1 -0
  366. package/dist/reasoningbank/types/index.js.map +1 -0
  367. package/dist/reasoningbank/utils/config.d.ts +61 -0
  368. package/dist/reasoningbank/utils/config.d.ts.map +1 -0
  369. package/dist/reasoningbank/utils/config.js +1 -0
  370. package/dist/reasoningbank/utils/config.js.map +1 -0
  371. package/dist/reasoningbank/utils/embeddings.d.ts +21 -0
  372. package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -0
  373. package/dist/reasoningbank/utils/embeddings.js +1 -0
  374. package/dist/reasoningbank/utils/embeddings.js.map +1 -0
  375. package/dist/reasoningbank/utils/mmr.d.ts +23 -0
  376. package/dist/reasoningbank/utils/mmr.d.ts.map +1 -0
  377. package/dist/reasoningbank/utils/mmr.js +1 -0
  378. package/dist/reasoningbank/utils/mmr.js.map +1 -0
  379. package/dist/reasoningbank/utils/pii-scrubber.d.ts +46 -0
  380. package/dist/reasoningbank/utils/pii-scrubber.d.ts.map +1 -0
  381. package/dist/reasoningbank/utils/pii-scrubber.js +1 -0
  382. package/dist/reasoningbank/utils/pii-scrubber.js.map +1 -0
  383. package/dist/reasoningbank/wasm-adapter.d.ts +104 -0
  384. package/dist/reasoningbank/wasm-adapter.d.ts.map +1 -0
  385. package/dist/reasoningbank/wasm-adapter.js +1 -0
  386. package/dist/reasoningbank/wasm-adapter.js.map +1 -0
  387. package/dist/router/model-mapping.d.ts +31 -0
  388. package/dist/router/model-mapping.d.ts.map +1 -0
  389. package/dist/router/model-mapping.js +1 -0
  390. package/dist/router/model-mapping.js.map +1 -0
  391. package/dist/router/providers/anthropic.d.ts +17 -0
  392. package/dist/router/providers/anthropic.d.ts.map +1 -0
  393. package/dist/router/providers/anthropic.js +1 -0
  394. package/dist/router/providers/anthropic.js.map +1 -0
  395. package/dist/router/providers/gemini.d.ts +17 -0
  396. package/dist/router/providers/gemini.d.ts.map +1 -0
  397. package/dist/router/providers/gemini.js +1 -0
  398. package/dist/router/providers/gemini.js.map +1 -0
  399. package/dist/router/providers/onnx-local-optimized.d.ts +71 -0
  400. package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -0
  401. package/dist/router/providers/onnx-local-optimized.js +1 -0
  402. package/dist/router/providers/onnx-local-optimized.js.map +1 -0
  403. package/dist/router/providers/onnx-local.d.ts +75 -0
  404. package/dist/router/providers/onnx-local.d.ts.map +1 -0
  405. package/dist/router/providers/onnx-local.js +1 -0
  406. package/dist/router/providers/onnx-local.js.map +1 -0
  407. package/dist/router/providers/onnx-phi4.d.ts +64 -0
  408. package/dist/router/providers/onnx-phi4.d.ts.map +1 -0
  409. package/dist/router/providers/onnx-phi4.js +1 -0
  410. package/dist/router/providers/onnx-phi4.js.map +1 -0
  411. package/dist/router/providers/onnx.d.ts +65 -0
  412. package/dist/router/providers/onnx.d.ts.map +1 -0
  413. package/dist/router/providers/onnx.js +1 -0
  414. package/dist/router/providers/onnx.js.map +1 -0
  415. package/dist/router/providers/openrouter.d.ts +21 -0
  416. package/dist/router/providers/openrouter.d.ts.map +1 -0
  417. package/dist/router/providers/openrouter.js +1 -0
  418. package/dist/router/providers/openrouter.js.map +1 -0
  419. package/dist/router/router.d.ts +26 -0
  420. package/dist/router/router.d.ts.map +1 -0
  421. package/dist/router/router.js +1 -0
  422. package/dist/router/router.js.map +1 -0
  423. package/dist/router/test-integration.d.ts +13 -0
  424. package/dist/router/test-integration.d.ts.map +1 -0
  425. package/dist/router/test-integration.js +1 -0
  426. package/dist/router/test-integration.js.map +1 -0
  427. package/dist/router/test-onnx-benchmark.d.ts +7 -0
  428. package/dist/router/test-onnx-benchmark.d.ts.map +1 -0
  429. package/dist/router/test-onnx-benchmark.js +1 -0
  430. package/dist/router/test-onnx-benchmark.js.map +1 -0
  431. package/dist/router/test-onnx-integration.d.ts +8 -0
  432. package/dist/router/test-onnx-integration.d.ts.map +1 -0
  433. package/dist/router/test-onnx-integration.js +1 -0
  434. package/dist/router/test-onnx-integration.js.map +1 -0
  435. package/dist/router/test-onnx-local.d.ts +6 -0
  436. package/dist/router/test-onnx-local.d.ts.map +1 -0
  437. package/dist/router/test-onnx-local.js +1 -0
  438. package/dist/router/test-onnx-local.js.map +1 -0
  439. package/dist/router/test-onnx.d.ts +7 -0
  440. package/dist/router/test-onnx.d.ts.map +1 -0
  441. package/dist/router/test-onnx.js +1 -0
  442. package/dist/router/test-onnx.js.map +1 -0
  443. package/dist/router/test-openrouter.d.ts +3 -0
  444. package/dist/router/test-openrouter.d.ts.map +1 -0
  445. package/dist/router/test-openrouter.js +1 -0
  446. package/dist/router/test-openrouter.js.map +1 -0
  447. package/dist/router/test-phi4.d.ts +6 -0
  448. package/dist/router/test-phi4.d.ts.map +1 -0
  449. package/dist/router/test-phi4.js +1 -0
  450. package/dist/router/test-phi4.js.map +1 -0
  451. package/dist/router/types.d.ts +209 -0
  452. package/dist/router/types.d.ts.map +1 -0
  453. package/dist/router/types.js +1 -0
  454. package/dist/router/types.js.map +1 -0
  455. package/dist/swarm/index.d.ts +51 -0
  456. package/dist/swarm/index.d.ts.map +1 -0
  457. package/dist/swarm/index.js +1 -0
  458. package/dist/swarm/index.js.map +1 -0
  459. package/dist/swarm/quic-coordinator.d.ts +149 -0
  460. package/dist/swarm/quic-coordinator.d.ts.map +1 -0
  461. package/dist/swarm/quic-coordinator.js +1 -0
  462. package/dist/swarm/quic-coordinator.js.map +1 -0
  463. package/dist/swarm/transport-router.d.ts +124 -0
  464. package/dist/swarm/transport-router.d.ts.map +1 -0
  465. package/dist/swarm/transport-router.js +1 -0
  466. package/dist/swarm/transport-router.js.map +1 -0
  467. package/dist/transport/index.d.ts +2 -0
  468. package/dist/transport/index.d.ts.map +1 -0
  469. package/dist/transport/index.js +1 -0
  470. package/dist/transport/index.js.map +1 -0
  471. package/dist/transport/quic-handshake.d.ts +66 -0
  472. package/dist/transport/quic-handshake.d.ts.map +1 -0
  473. package/dist/transport/quic-handshake.js +1 -0
  474. package/dist/transport/quic-handshake.js.map +1 -0
  475. package/dist/transport/quic.d.ts +184 -0
  476. package/dist/transport/quic.d.ts.map +1 -0
  477. package/dist/transport/quic.js +1 -0
  478. package/dist/transport/quic.js.map +1 -0
  479. package/dist/utils/adaptive-pool-sizing.js +414 -0
  480. package/dist/utils/agentBoosterPreprocessor.d.ts +72 -0
  481. package/dist/utils/agentBoosterPreprocessor.d.ts.map +1 -0
  482. package/dist/utils/agentBoosterPreprocessor.js +1 -0
  483. package/dist/utils/agentBoosterPreprocessor.js.map +1 -0
  484. package/dist/utils/agentLoader.d.ts +22 -0
  485. package/dist/utils/agentLoader.d.ts.map +1 -0
  486. package/dist/utils/agentLoader.js +1 -0
  487. package/dist/utils/agentLoader.js.map +1 -0
  488. package/dist/utils/agentdb-runtime-patch.d.ts +28 -0
  489. package/dist/utils/agentdb-runtime-patch.d.ts.map +1 -0
  490. package/dist/utils/agentdb-runtime-patch.js +1 -0
  491. package/dist/utils/agentdb-runtime-patch.js.map +1 -0
  492. package/dist/utils/auth.d.ts +13 -0
  493. package/dist/utils/auth.d.ts.map +1 -0
  494. package/dist/utils/auth.js +1 -0
  495. package/dist/utils/auth.js.map +1 -0
  496. package/dist/utils/circular-rate-limiter.js +391 -0
  497. package/dist/utils/cli.d.ts +31 -0
  498. package/dist/utils/cli.d.ts.map +1 -0
  499. package/dist/utils/cli.js +1 -0
  500. package/dist/utils/cli.js.map +1 -0
  501. package/dist/utils/compression-middleware.d.ts +55 -0
  502. package/dist/utils/compression-middleware.d.ts.map +1 -0
  503. package/dist/utils/compression-middleware.js +1 -0
  504. package/dist/utils/compression-middleware.js.map +1 -0
  505. package/dist/utils/connection-pool.d.ts +30 -0
  506. package/dist/utils/connection-pool.d.ts.map +1 -0
  507. package/dist/utils/connection-pool.js +1 -0
  508. package/dist/utils/connection-pool.js.map +1 -0
  509. package/dist/utils/dynamic-compression.js +298 -0
  510. package/dist/utils/http2-multiplexing.js +319 -0
  511. package/dist/utils/lazy-auth.js +311 -0
  512. package/dist/utils/logger.d.ts +19 -0
  513. package/dist/utils/logger.d.ts.map +1 -0
  514. package/dist/utils/logger.js +1 -0
  515. package/dist/utils/logger.js.map +1 -0
  516. package/dist/utils/math.d.ts +12 -0
  517. package/dist/utils/math.d.ts.map +1 -0
  518. package/dist/utils/math.js +1 -0
  519. package/dist/utils/math.js.map +1 -0
  520. package/dist/utils/mcpCommands.d.ts +2 -0
  521. package/dist/utils/mcpCommands.d.ts.map +1 -0
  522. package/dist/utils/mcpCommands.js +1 -0
  523. package/dist/utils/mcpCommands.js.map +1 -0
  524. package/dist/utils/model-downloader.d.ts +63 -0
  525. package/dist/utils/model-downloader.d.ts.map +1 -0
  526. package/dist/utils/model-downloader.js +1 -0
  527. package/dist/utils/model-downloader.js.map +1 -0
  528. package/dist/utils/modelCapabilities.d.ts +30 -0
  529. package/dist/utils/modelCapabilities.d.ts.map +1 -0
  530. package/dist/utils/modelCapabilities.js +1 -0
  531. package/dist/utils/modelCapabilities.js.map +1 -0
  532. package/dist/utils/modelOptimizer.d.ts +207 -0
  533. package/dist/utils/modelOptimizer.d.ts.map +1 -0
  534. package/dist/utils/modelOptimizer.js +1 -0
  535. package/dist/utils/modelOptimizer.js.map +1 -0
  536. package/dist/utils/rate-limiter.d.ts +17 -0
  537. package/dist/utils/rate-limiter.d.ts.map +1 -0
  538. package/dist/utils/rate-limiter.js +1 -0
  539. package/dist/utils/rate-limiter.js.map +1 -0
  540. package/dist/utils/reasoningbankCommands.d.ts +6 -0
  541. package/dist/utils/reasoningbankCommands.d.ts.map +1 -0
  542. package/dist/utils/reasoningbankCommands.js +1 -0
  543. package/dist/utils/reasoningbankCommands.js.map +1 -0
  544. package/dist/utils/response-cache.d.ts +94 -0
  545. package/dist/utils/response-cache.d.ts.map +1 -0
  546. package/dist/utils/response-cache.js +1 -0
  547. package/dist/utils/response-cache.js.map +1 -0
  548. package/dist/utils/retry.d.ts +9 -0
  549. package/dist/utils/retry.d.ts.map +1 -0
  550. package/dist/utils/retry.js +1 -0
  551. package/dist/utils/retry.js.map +1 -0
  552. package/dist/utils/server-push.js +251 -0
  553. package/dist/utils/streaming-optimizer.d.ts +37 -0
  554. package/dist/utils/streaming-optimizer.d.ts.map +1 -0
  555. package/dist/utils/streaming-optimizer.js +1 -0
  556. package/dist/utils/streaming-optimizer.js.map +1 -0
  557. package/dist/utils/zero-copy-buffer.js +286 -0
  558. package/docs/DOCKER-VERIFICATION.md +207 -0
  559. package/docs/ISSUE-55-VALIDATION.md +25 -6
  560. package/docs/NPX_AGENTDB_SETUP.md +175 -0
  561. package/docs/PUBLISH_GUIDE.md +438 -0
  562. package/docs/RELEASE-v1.10.0-COMPLETE.md +382 -0
  563. package/docs/archive/.agentdb-instructions.md +66 -0
  564. package/docs/archive/AGENT-BOOSTER-STATUS.md +292 -0
  565. package/docs/archive/CHANGELOG-v1.3.0.md +120 -0
  566. package/docs/archive/COMPLETION_REPORT_v1.7.1.md +335 -0
  567. package/docs/archive/IMPLEMENTATION_SUMMARY_v1.7.1.md +241 -0
  568. package/docs/archive/SUPABASE-INTEGRATION-COMPLETE.md +357 -0
  569. package/docs/archive/TESTING_QUICK_START.md +223 -0
  570. package/docs/archive/TOOL-EMULATION-INTEGRATION-ISSUE.md +669 -0
  571. package/docs/archive/VALIDATION_v1.7.1.md +234 -0
  572. package/docs/releases/PUBLISH_CHECKLIST_v1.10.0.md +396 -0
  573. package/docs/releases/PUBLISH_SUMMARY_v1.7.1.md +198 -0
  574. package/docs/releases/RELEASE_NOTES_v1.10.0.md +464 -0
  575. package/docs/releases/RELEASE_NOTES_v1.7.0.md +297 -0
  576. package/docs/releases/RELEASE_v1.7.1.md +327 -0
  577. package/package.json +1 -1
  578. package/validation/docker-npm-validation.sh +170 -0
  579. package/validation/simple-npm-validation.sh +131 -0
  580. package/validation/test-gemini-models.ts +200 -0
@@ -0,0 +1,37 @@
1
+ export interface ToolInstructions {
2
+ format: string;
3
+ commands: {
4
+ write: string;
5
+ read: string;
6
+ bash: string;
7
+ };
8
+ examples?: string;
9
+ emphasis?: string;
10
+ }
11
+ export declare const BASE_INSTRUCTIONS: ToolInstructions;
12
+ export declare const ANTHROPIC_INSTRUCTIONS: ToolInstructions;
13
+ export declare const OPENAI_INSTRUCTIONS: ToolInstructions;
14
+ export declare const GOOGLE_INSTRUCTIONS: ToolInstructions;
15
+ export declare const META_INSTRUCTIONS: ToolInstructions;
16
+ export declare const DEEPSEEK_INSTRUCTIONS: ToolInstructions;
17
+ export declare const MISTRAL_INSTRUCTIONS: ToolInstructions;
18
+ export declare const XAI_INSTRUCTIONS: ToolInstructions;
19
+ export declare function getInstructionsForModel(modelId: string, provider?: string): ToolInstructions;
20
+ export declare function taskRequiresFileOps(systemPrompt: string, userMessages: any[]): boolean;
21
+ export declare function formatInstructions(instructions: ToolInstructions, includeXmlInstructions?: boolean): string;
22
+ export declare const PARALLEL_EXECUTION_INSTRUCTIONS = "\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nCRITICAL: Concurrent Execution System\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nThis system supports parallel agent execution via CLI subprocesses and\nReasoningBank coordination. Follow these patterns for optimal performance:\n\n1. SUBPROCESS SPAWNING\n When decomposing tasks, spawn subagents via CLI:\n\n ```typescript\n const results = await Promise.all([\n exec('npx agentic-flow --agent researcher --task \"analyze security\"'),\n exec('npx agentic-flow --agent coder --task \"implement features\"'),\n exec('npx agentic-flow --agent tester --task \"create tests\"')\n ]);\n ```\n\n2. REASONINGBANK COORDINATION\n Each subagent stores results in ReasoningBank:\n\n ```typescript\n // Subagent stores results\n await reasoningBank.storePattern({\n sessionId: 'swarm/task-123/agent-1',\n task: 'Research security patterns',\n output: findings,\n reward: 0.95,\n success: true\n });\n\n // Parent retrieves all results\n const allResults = await reasoningBank.searchPatterns('swarm/task-123');\n ```\n\n3. PERFORMANCE BENEFITS\n - 2.8-4.4x speedup with parallel execution\n - 50-70% time reduction with QUIC transport\n - 32.3% token reduction via batching\n\nSee /agentic-flow/src/prompts/parallel-execution-guide.md for detailed examples.\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n";
23
+ export interface InstructionOptions {
24
+ enableParallel?: boolean;
25
+ batchSize?: number;
26
+ enableReasoningBank?: boolean;
27
+ includeXmlInstructions?: boolean;
28
+ }
29
+ export declare function getMaxTokensForModel(modelId: string, requestedMaxTokens?: number): number;
30
+ export declare function getParallelCapabilities(modelId: string): {
31
+ maxConcurrency: number;
32
+ recommendedBatchSize: number;
33
+ supportsSubprocesses: boolean;
34
+ supportsReasoningBank: boolean;
35
+ };
36
+ export declare function buildInstructions(modelId: string, provider: string | undefined, options?: InstructionOptions): string;
37
+ //# sourceMappingURL=provider-instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-instructions.d.ts","sourceRoot":"","sources":["../../src/proxy/provider-instructions.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAGD,eAAO,MAAM,iBAAiB,EAAE,gBAgB/B,CAAC;AAGF,eAAO,MAAM,sBAAsB,EAAE,gBAQpC,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,gBAgBjC,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,gBAoBjC,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,gBAkB/B,CAAC;AAGF,eAAO,MAAM,qBAAqB,EAAE,gBAkBnC,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,gBAiBlC,CAAC;AAGF,eAAO,MAAM,gBAAgB,EAAE,gBAc9B,CAAC;AAGF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA6C5F;AAGD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,OAAO,CAuBtF;AAID,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,gBAAgB,EAC9B,sBAAsB,GAAE,OAAc,GACrC,MAAM,CAqBR;AAGD,eAAO,MAAM,+BAA+B,i3EA2C3C,CAAC;AAGF,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBzF;AAGD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;CAChC,CA8BA;AAGD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAgCR"}
@@ -344,3 +344,4 @@ REASONINGBANK MEMORY COORDINATION:
344
344
  }
345
345
  return formatted;
346
346
  }
347
+ //# sourceMappingURL=provider-instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-instructions.js","sourceRoot":"","sources":["../../src/proxy/provider-instructions.ts"],"names":[],"mappings":"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","sourcesContent":["// Provider-specific and model-specific tool instructions\n// Optimized for different LLM families to improve tool calling success rate\n\nexport interface ToolInstructions {\n format: string; // The instruction format style\n commands: {\n write: string;\n read: string;\n bash: string;\n };\n examples?: string; // Optional example usage\n emphasis?: string; // Additional emphasis/notes\n}\n\n// Base structured command format (works for most models)\nexport const BASE_INSTRUCTIONS: ToolInstructions = {\n format: 'xml',\n commands: {\n write: '<file_write path=\"filename.ext\">\\ncontent here\\n</file_write>',\n read: '<file_read path=\"filename.ext\"/>',\n bash: '<bash_command>\\ncommand here\\n</bash_command>'\n },\n examples: `\nExample: Create a file\n<file_write path=\"hello.js\">\nfunction hello() {\n console.log(\"Hello!\");\n}\n</file_write>\n`,\n emphasis: 'IMPORTANT: Use these structured commands in your response. The system will automatically execute them.'\n};\n\n// Anthropic models - Native tool calling, minimal instructions needed\nexport const ANTHROPIC_INSTRUCTIONS: ToolInstructions = {\n format: 'native',\n commands: {\n write: 'Use Write tool with file_path and content parameters',\n read: 'Use Read tool with file_path parameter',\n bash: 'Use Bash tool with command parameter'\n },\n emphasis: 'You have native access to file system tools. Use them directly.'\n};\n\n// OpenAI/GPT models - Prefer function calling style\nexport const OPENAI_INSTRUCTIONS: ToolInstructions = {\n format: 'xml',\n commands: {\n write: '<file_write path=\"filename.ext\">\\ncontent here\\n</file_write>',\n read: '<file_read path=\"filename.ext\"/>',\n bash: '<bash_command>\\ncommand here\\n</bash_command>'\n },\n examples: `\nWhen you need to create a file, respond with:\n<file_write path=\"example.txt\">\nFile content here\n</file_write>\n\nThe system will create the file for you.\n`,\n emphasis: 'CRITICAL: You must use these exact XML tag formats. Do not just describe the file - actually use the tags.'\n};\n\n// Google/Gemini models - Detailed, explicit instructions\nexport const GOOGLE_INSTRUCTIONS: ToolInstructions = {\n format: 'xml',\n commands: {\n write: '<file_write path=\"filename.ext\">\\ncontent here\\n</file_write>',\n read: '<file_read path=\"filename.ext\"/>',\n bash: '<bash_command>\\ncommand here\\n</bash_command>'\n },\n examples: `\nStep-by-step file creation:\n1. Determine the filename\n2. Write the content\n3. Use this exact format:\n\n<file_write path=\"your_file.txt\">\nYour content here\n</file_write>\n\nThe file will be automatically created.\n`,\n emphasis: 'IMPORTANT: Always use the XML tags. Just writing code blocks will NOT create files. You MUST use <file_write> tags.'\n};\n\n// Meta/Llama models - Clear, concise instructions\nexport const META_INSTRUCTIONS: ToolInstructions = {\n format: 'xml',\n commands: {\n write: '<file_write path=\"filename.ext\">\\ncontent here\\n</file_write>',\n read: '<file_read path=\"filename.ext\"/>',\n bash: '<bash_command>\\ncommand here\\n</bash_command>'\n },\n examples: `\nTo create files, use:\n<file_write path=\"file.txt\">content</file_write>\n\nTo read files, use:\n<file_read path=\"file.txt\"/>\n\nTo run commands, use:\n<bash_command>ls -la</bash_command>\n`,\n emphasis: 'Use these tags to perform actual file operations. Code blocks alone will not create files.'\n};\n\n// DeepSeek models - Technical, precise instructions\nexport const DEEPSEEK_INSTRUCTIONS: ToolInstructions = {\n format: 'xml',\n commands: {\n write: '<file_write path=\"filename.ext\">\\ncontent here\\n</file_write>',\n read: '<file_read path=\"filename.ext\"/>',\n bash: '<bash_command>\\ncommand here\\n</bash_command>'\n },\n examples: `\nFile system operations use XML-like structured commands:\n\n<file_write path=\"example.py\">\ndef main():\n print(\"Hello\")\n</file_write>\n\nThese commands are parsed and executed by the system.\n`,\n emphasis: 'Use structured commands for file I/O. Standard code blocks are for display only.'\n};\n\n// Mistral models - Direct, action-oriented\nexport const MISTRAL_INSTRUCTIONS: ToolInstructions = {\n format: 'xml',\n commands: {\n write: '<file_write path=\"filename.ext\">\\ncontent here\\n</file_write>',\n read: '<file_read path=\"filename.ext\"/>',\n bash: '<bash_command>\\ncommand here\\n</bash_command>'\n },\n examples: `\nACTION REQUIRED: To create actual files, you must use these tags:\n\n<file_write path=\"file.txt\">\ncontent\n</file_write>\n\nDo not just show code - use the tags to create real files.\n`,\n emphasis: 'CRITICAL: File operations require XML tags. Code blocks alone will not create files on disk.'\n};\n\n// X.AI/Grok models - Balanced, clear instructions\nexport const XAI_INSTRUCTIONS: ToolInstructions = {\n format: 'xml',\n commands: {\n write: '<file_write path=\"filename.ext\">\\ncontent here\\n</file_write>',\n read: '<file_read path=\"filename.ext\"/>',\n bash: '<bash_command>\\ncommand here\\n</bash_command>'\n },\n examples: `\nFile system commands:\n- Create: <file_write path=\"file.txt\">content</file_write>\n- Read: <file_read path=\"file.txt\"/>\n- Execute: <bash_command>command</bash_command>\n`,\n emphasis: 'Use structured commands to interact with the file system.'\n};\n\n// Map provider/model patterns to instruction sets\nexport function getInstructionsForModel(modelId: string, provider?: string): ToolInstructions {\n const normalizedModel = modelId.toLowerCase();\n\n // Anthropic models - native tool calling\n if (normalizedModel.includes('claude') || provider === 'anthropic') {\n return ANTHROPIC_INSTRUCTIONS;\n }\n\n // OpenAI models\n if (normalizedModel.includes('gpt') || normalizedModel.includes('openai') || provider === 'openai') {\n return OPENAI_INSTRUCTIONS;\n }\n\n // Google/Gemini models\n if (normalizedModel.includes('gemini') || normalizedModel.includes('gemma') || provider === 'google') {\n return GOOGLE_INSTRUCTIONS;\n }\n\n // Meta/Llama models\n if (normalizedModel.includes('llama') || provider === 'meta-llama' || provider === 'meta') {\n return META_INSTRUCTIONS;\n }\n\n // DeepSeek models\n if (normalizedModel.includes('deepseek') || provider === 'deepseek') {\n return DEEPSEEK_INSTRUCTIONS;\n }\n\n // Mistral models\n if (normalizedModel.includes('mistral') || provider === 'mistralai') {\n return MISTRAL_INSTRUCTIONS;\n }\n\n // X.AI/Grok models\n if (normalizedModel.includes('grok') || provider === 'x-ai') {\n return XAI_INSTRUCTIONS;\n }\n\n // Qwen models\n if (normalizedModel.includes('qwen')) {\n return DEEPSEEK_INSTRUCTIONS; // Similar to DeepSeek\n }\n\n // Default to base instructions\n return BASE_INSTRUCTIONS;\n}\n\n// Check if task requires file/tool operations based on prompt content\nexport function taskRequiresFileOps(systemPrompt: string, userMessages: any[]): boolean {\n const combined = systemPrompt + ' ' + JSON.stringify(userMessages);\n\n // Regex patterns that suggest file operations are needed\n const filePatterns = [\n /create\\s+.*?file/i, // \"create a file\", \"create file\", \"create the file\"\n /write\\s+.*?file/i, // \"write a file\", \"write to file\"\n /save\\s+.*?file/i, // \"save to file\", \"save as file\"\n /save\\s+.*?to/i, // \"save to disk\", \"save code to\"\n /write\\s+to\\s+disk/i, // \"write to disk\"\n /create\\s+.*?script/i, // \"create a script\", \"create script\"\n /make\\s+.*?file/i, // \"make a file\"\n /generate\\s+.*?file/i, // \"generate a file\"\n /put\\s+.*?in\\s+.*?file/i, // \"put code in a file\"\n /store\\s+.*?in\\s+.*?file/i, // \"store in a file\"\n /run\\s+bash/i, // \"run bash command\"\n /execute\\s+command/i, // \"execute command\"\n /run\\s+command/i, // \"run command\"\n /shell\\s+command/i, // \"shell command\"\n /use\\s+bash/i // \"use bash\"\n ];\n\n return filePatterns.some(pattern => pattern.test(combined));\n}\n\n// Generate formatted instruction string for injection\n// Only include XML instructions if task actually requires file operations\nexport function formatInstructions(\n instructions: ToolInstructions,\n includeXmlInstructions: boolean = true\n): string {\n if (instructions.format === 'native') {\n return `${instructions.emphasis}\\n\\n${instructions.commands.write}\\n${instructions.commands.read}\\n${instructions.commands.bash}`;\n }\n\n // For simple code generation without file ops, skip XML instructions\n if (!includeXmlInstructions) {\n return 'Provide clean, well-formatted code in your response. Use markdown code blocks for code.';\n }\n\n let formatted = `${instructions.emphasis}\\n\\n`;\n formatted += `Available commands:\\n`;\n formatted += `${instructions.commands.write}\\n`;\n formatted += `${instructions.commands.read}\\n`;\n formatted += `${instructions.commands.bash}\\n`;\n\n if (instructions.examples) {\n formatted += `\\n${instructions.examples}`;\n }\n\n return formatted;\n}\n\n// Parallel execution instructions for concurrent agent coordination\nexport const PARALLEL_EXECUTION_INSTRUCTIONS = `\n═══════════════════════════════════════════════════════════════\nCRITICAL: Concurrent Execution System\n═══════════════════════════════════════════════════════════════\n\nThis system supports parallel agent execution via CLI subprocesses and\nReasoningBank coordination. Follow these patterns for optimal performance:\n\n1. SUBPROCESS SPAWNING\n When decomposing tasks, spawn subagents via CLI:\n\n \\`\\`\\`typescript\n const results = await Promise.all([\n exec('npx agentic-flow --agent researcher --task \"analyze security\"'),\n exec('npx agentic-flow --agent coder --task \"implement features\"'),\n exec('npx agentic-flow --agent tester --task \"create tests\"')\n ]);\n \\`\\`\\`\n\n2. REASONINGBANK COORDINATION\n Each subagent stores results in ReasoningBank:\n\n \\`\\`\\`typescript\n // Subagent stores results\n await reasoningBank.storePattern({\n sessionId: 'swarm/task-123/agent-1',\n task: 'Research security patterns',\n output: findings,\n reward: 0.95,\n success: true\n });\n\n // Parent retrieves all results\n const allResults = await reasoningBank.searchPatterns('swarm/task-123');\n \\`\\`\\`\n\n3. PERFORMANCE BENEFITS\n - 2.8-4.4x speedup with parallel execution\n - 50-70% time reduction with QUIC transport\n - 32.3% token reduction via batching\n\nSee /agentic-flow/src/prompts/parallel-execution-guide.md for detailed examples.\n═══════════════════════════════════════════════════════════════\n`;\n\n// Enhanced instruction provider with parallel execution support\nexport interface InstructionOptions {\n enableParallel?: boolean;\n batchSize?: number;\n enableReasoningBank?: boolean;\n includeXmlInstructions?: boolean;\n}\n\n// Get appropriate max_tokens for model\nexport function getMaxTokensForModel(modelId: string, requestedMaxTokens?: number): number {\n const normalizedModel = modelId.toLowerCase();\n\n // If user requested specific max_tokens, use it\n if (requestedMaxTokens) {\n return requestedMaxTokens;\n }\n\n // DeepSeek needs higher max_tokens\n if (normalizedModel.includes('deepseek')) {\n return 8000;\n }\n\n // Llama 3.1/3.3 - moderate\n if (normalizedModel.includes('llama')) {\n return 4096;\n }\n\n // GPT models - standard\n if (normalizedModel.includes('gpt')) {\n return 4096;\n }\n\n // Default\n return 4096;\n}\n\n// Get parallel execution capabilities for model\nexport function getParallelCapabilities(modelId: string): {\n maxConcurrency: number;\n recommendedBatchSize: number;\n supportsSubprocesses: boolean;\n supportsReasoningBank: boolean;\n} {\n const normalized = modelId.toLowerCase();\n\n // High-capability models (Claude, GPT-4)\n if (normalized.includes('claude') || normalized.includes('gpt-4')) {\n return {\n maxConcurrency: 10,\n recommendedBatchSize: 5,\n supportsSubprocesses: true,\n supportsReasoningBank: true\n };\n }\n\n // Mid-tier models (DeepSeek, Llama 3.1)\n if (normalized.includes('deepseek') || normalized.includes('llama-3.1')) {\n return {\n maxConcurrency: 5,\n recommendedBatchSize: 3,\n supportsSubprocesses: true,\n supportsReasoningBank: true\n };\n }\n\n // Lower-tier models\n return {\n maxConcurrency: 3,\n recommendedBatchSize: 2,\n supportsSubprocesses: true,\n supportsReasoningBank: false\n };\n}\n\n// Enhanced instruction builder\nexport function buildInstructions(\n modelId: string,\n provider: string | undefined,\n options: InstructionOptions = {}\n): string {\n const {\n enableParallel = false,\n batchSize,\n enableReasoningBank = false,\n includeXmlInstructions = true\n } = options;\n\n const baseInstructions = getInstructionsForModel(modelId, provider);\n let formatted = formatInstructions(baseInstructions, includeXmlInstructions);\n\n // Add parallel execution instructions if enabled\n if (enableParallel) {\n const capabilities = getParallelCapabilities(modelId);\n const effectiveBatchSize = batchSize || capabilities.recommendedBatchSize;\n\n formatted += '\\n\\n' + PARALLEL_EXECUTION_INSTRUCTIONS;\n formatted += `\\n\\nRECOMMENDED BATCH SIZE: ${effectiveBatchSize} concurrent subagents`;\n formatted += `\\nMAX CONCURRENCY: ${capabilities.maxConcurrency} agents`;\n }\n\n // Add ReasoningBank instructions if enabled\n if (enableReasoningBank) {\n formatted += `\\n\\n\nREASONINGBANK MEMORY COORDINATION:\n- Store: await reasoningBank.storePattern({ sessionId: 'swarm/TASK_ID/AGENT_ID', task, output, reward, success })\n- Retrieve: await reasoningBank.retrieve('swarm/TASK_ID/AGENT_ID')\n- Search: await reasoningBank.searchPatterns('swarm/TASK_ID', { k: 10 })\n `;\n }\n\n return formatted;\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import { Response } from 'express';
2
+ import { QuicConfig } from '../transport/quic.js';
3
+ import { AnthropicToOpenRouterProxy } from './anthropic-to-openrouter.js';
4
+ export interface QuicProxyConfig {
5
+ openrouterApiKey: string;
6
+ openrouterBaseUrl?: string;
7
+ defaultModel?: string;
8
+ transport?: 'quic' | 'http2' | 'auto';
9
+ enableQuic?: boolean;
10
+ quic?: QuicConfig;
11
+ fallbackToHttp2?: boolean;
12
+ fallbackTimeout?: number;
13
+ }
14
+ export declare class QuicEnabledProxy extends AnthropicToOpenRouterProxy {
15
+ private quicClient?;
16
+ private quicPool?;
17
+ private transport;
18
+ private quicEnabled;
19
+ private fallbackToHttp2;
20
+ constructor(config: QuicProxyConfig);
21
+ /**
22
+ * Check if QUIC is enabled via environment variable
23
+ */
24
+ private checkQuicFeatureFlag;
25
+ /**
26
+ * Initialize QUIC client and connection pool
27
+ */
28
+ private initializeQuic;
29
+ /**
30
+ * Select transport protocol based on configuration and availability
31
+ */
32
+ private selectTransport;
33
+ /**
34
+ * Send request using selected transport
35
+ */
36
+ protected sendRequest(url: string, options: RequestInit): Promise<Response>;
37
+ /**
38
+ * Send request over QUIC
39
+ */
40
+ private sendQuicRequest;
41
+ /**
42
+ * Send request over HTTP/2 (standard fetch)
43
+ */
44
+ private sendHttp2Request;
45
+ /**
46
+ * Get transport statistics
47
+ */
48
+ getTransportStats(): any;
49
+ /**
50
+ * Shutdown and cleanup
51
+ */
52
+ shutdown(): Promise<void>;
53
+ }
54
+ /**
55
+ * Create QUIC-enabled proxy with configuration
56
+ */
57
+ export declare function createQuicProxy(config: QuicProxyConfig): QuicEnabledProxy;
58
+ //# sourceMappingURL=quic-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quic-proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/quic-proxy.ts"],"names":[],"mappings":"AAGA,OAAgB,EAAW,QAAQ,EAAgB,MAAM,SAAS,CAAC;AACnE,OAAO,EAAkC,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElF,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,MAAM,WAAW,eAAe;IAE9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAGlB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,gBAAiB,SAAQ,0BAA0B;IAC9D,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,eAAe,CAAU;gBAErB,MAAM,EAAE,eAAe;IAgBnC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;OAEG;YACW,cAAc;IAsB5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;cACa,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgBjF;;OAEG;YACW,eAAe;IA0E7B;;OAEG;YACW,gBAAgB;IAK9B;;OAEG;IACH,iBAAiB,IAAI,GAAG;IAexB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAWhC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAUzE"}
@@ -225,3 +225,4 @@ if (import.meta.url === `file://${process.argv[1]}`) {
225
225
  process.exit(0);
226
226
  });
227
227
  }
228
+ //# sourceMappingURL=quic-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quic-proxy.js","sourceRoot":"","sources":["../../src/proxy/quic-proxy.ts"],"names":[],"mappings":"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","sourcesContent":["// QUIC-enabled Proxy for Anthropic API\n// Optional QUIC transport with automatic HTTP/2 fallback\n\nimport express, { Request, Response, NextFunction } from 'express';\nimport { QuicClient, QuicConnectionPool, QuicConfig } from '../transport/quic.js';\nimport { logger } from '../utils/logger.js';\nimport { AnthropicToOpenRouterProxy } from './anthropic-to-openrouter.js';\n\nexport interface QuicProxyConfig {\n // Base proxy config\n openrouterApiKey: string;\n openrouterBaseUrl?: string;\n defaultModel?: string;\n\n // Transport selection\n transport?: 'quic' | 'http2' | 'auto';\n enableQuic?: boolean;\n\n // QUIC configuration\n quic?: QuicConfig;\n\n // Fallback behavior\n fallbackToHttp2?: boolean;\n fallbackTimeout?: number;\n}\n\nexport class QuicEnabledProxy extends AnthropicToOpenRouterProxy {\n private quicClient?: QuicClient;\n private quicPool?: QuicConnectionPool;\n private transport: 'quic' | 'http2' | 'auto';\n private quicEnabled: boolean;\n private fallbackToHttp2: boolean;\n\n constructor(config: QuicProxyConfig) {\n super({\n openrouterApiKey: config.openrouterApiKey,\n openrouterBaseUrl: config.openrouterBaseUrl,\n defaultModel: config.defaultModel\n });\n\n this.transport = config.transport || 'auto';\n this.quicEnabled = config.enableQuic ?? this.checkQuicFeatureFlag();\n this.fallbackToHttp2 = config.fallbackToHttp2 ?? true;\n\n if (this.quicEnabled) {\n this.initializeQuic(config.quic || {});\n }\n }\n\n /**\n * Check if QUIC is enabled via environment variable\n */\n private checkQuicFeatureFlag(): boolean {\n const flag = process.env.AGENTIC_FLOW_ENABLE_QUIC;\n return flag === 'true' || flag === '1';\n }\n\n /**\n * Initialize QUIC client and connection pool\n */\n private async initializeQuic(quicConfig: QuicConfig): Promise<void> {\n try {\n logger.info('Initializing QUIC transport...', { config: quicConfig });\n\n this.quicClient = new QuicClient(quicConfig);\n await this.quicClient.initialize();\n\n this.quicPool = new QuicConnectionPool(this.quicClient, 20);\n\n logger.info('QUIC transport initialized successfully');\n } catch (error) {\n logger.error('Failed to initialize QUIC transport', { error });\n\n if (this.fallbackToHttp2) {\n logger.warn('Falling back to HTTP/2 transport');\n this.quicEnabled = false;\n } else {\n throw error;\n }\n }\n }\n\n /**\n * Select transport protocol based on configuration and availability\n */\n private selectTransport(): 'quic' | 'http2' {\n if (this.transport === 'quic' && this.quicEnabled) {\n return 'quic';\n }\n\n if (this.transport === 'http2') {\n return 'http2';\n }\n\n // Auto mode: prefer QUIC if available, fallback to HTTP/2\n if (this.transport === 'auto') {\n return this.quicEnabled ? 'quic' : 'http2';\n }\n\n return 'http2';\n }\n\n /**\n * Send request using selected transport\n */\n protected async sendRequest(url: string, options: RequestInit): Promise<Response> {\n const selectedTransport = this.selectTransport();\n\n logger.debug('Sending request', {\n transport: selectedTransport,\n url,\n method: options.method\n });\n\n if (selectedTransport === 'quic') {\n return this.sendQuicRequest(url, options);\n } else {\n return this.sendHttp2Request(url, options);\n }\n }\n\n /**\n * Send request over QUIC\n */\n private async sendQuicRequest(url: string, options: RequestInit): Promise<Response> {\n if (!this.quicClient || !this.quicPool) {\n throw new Error('QUIC client not initialized');\n }\n\n try {\n const urlObj = new URL(url);\n const connection = await this.quicPool.getConnection(\n urlObj.hostname,\n parseInt(urlObj.port) || 443\n );\n\n logger.debug('Using QUIC connection', {\n connectionId: connection.id,\n url\n });\n\n // Prepare headers\n const headers: Record<string, string> = {};\n if (options.headers) {\n const headerEntries = options.headers instanceof Headers\n ? Array.from(options.headers.entries())\n : Object.entries(options.headers);\n\n for (const [key, value] of headerEntries) {\n headers[key] = value;\n }\n }\n\n // Convert body to Uint8Array\n let body: Uint8Array | undefined;\n if (options.body) {\n if (typeof options.body === 'string') {\n body = new TextEncoder().encode(options.body);\n } else if (options.body instanceof Uint8Array) {\n body = options.body;\n } else {\n body = new TextEncoder().encode(JSON.stringify(options.body));\n }\n }\n\n // Send HTTP/3 request over QUIC\n const response = await this.quicClient.sendRequest(\n connection.id,\n options.method || 'GET',\n urlObj.pathname + urlObj.search,\n headers,\n body\n );\n\n logger.info('QUIC request completed', {\n status: response.status,\n bytes: response.body.length\n });\n\n // Convert to fetch Response\n const responseText = new TextDecoder().decode(response.body);\n return new Response(responseText, {\n status: response.status,\n headers: new Headers(response.headers)\n }) as any;\n\n } catch (error) {\n logger.error('QUIC request failed', { error, url });\n\n if (this.fallbackToHttp2) {\n logger.warn('Falling back to HTTP/2 for this request');\n return this.sendHttp2Request(url, options);\n }\n\n throw error;\n }\n }\n\n /**\n * Send request over HTTP/2 (standard fetch)\n */\n private async sendHttp2Request(url: string, options: RequestInit): Promise<Response> {\n logger.debug('Using HTTP/2 transport', { url });\n return fetch(url, options) as any;\n }\n\n /**\n * Get transport statistics\n */\n getTransportStats(): any {\n if (this.quicClient) {\n return {\n transport: this.selectTransport(),\n quicEnabled: this.quicEnabled,\n quicStats: this.quicClient.getStats()\n };\n }\n\n return {\n transport: 'http2',\n quicEnabled: false\n };\n }\n\n /**\n * Shutdown and cleanup\n */\n async shutdown(): Promise<void> {\n if (this.quicPool) {\n await this.quicPool.clear();\n }\n\n if (this.quicClient) {\n await this.quicClient.shutdown();\n }\n\n logger.info('QUIC proxy shutdown complete');\n }\n}\n\n/**\n * Create QUIC-enabled proxy with configuration\n */\nexport function createQuicProxy(config: QuicProxyConfig): QuicEnabledProxy {\n const proxy = new QuicEnabledProxy(config);\n\n logger.info('QUIC proxy created', {\n transport: config.transport || 'auto',\n quicEnabled: config.enableQuic ?? (process.env.AGENTIC_FLOW_ENABLE_QUIC === 'true'),\n fallbackEnabled: config.fallbackToHttp2 ?? true\n });\n\n return proxy;\n}\n\n// CLI entry point for QUIC proxy\nif (import.meta.url === `file://${process.argv[1]}`) {\n const port = parseInt(process.env.PORT || '3000');\n const openrouterApiKey = process.env.OPENROUTER_API_KEY;\n\n if (!openrouterApiKey) {\n console.error('āŒ Error: OPENROUTER_API_KEY environment variable required');\n process.exit(1);\n }\n\n const proxy = createQuicProxy({\n openrouterApiKey,\n openrouterBaseUrl: process.env.ANTHROPIC_PROXY_BASE_URL,\n defaultModel: process.env.COMPLETION_MODEL || process.env.REASONING_MODEL,\n transport: (process.env.TRANSPORT as 'quic' | 'http2' | 'auto') || 'auto',\n enableQuic: process.env.AGENTIC_FLOW_ENABLE_QUIC === 'true',\n quic: {\n port: parseInt(process.env.QUIC_PORT || '4433'),\n serverHost: process.env.QUIC_HOST || 'localhost',\n certPath: process.env.QUIC_CERT_PATH,\n keyPath: process.env.QUIC_KEY_PATH\n }\n });\n\n proxy.start(port);\n\n // Graceful shutdown\n process.on('SIGTERM', async () => {\n logger.info('Received SIGTERM, shutting down gracefully...');\n await proxy.shutdown();\n process.exit(0);\n });\n\n process.on('SIGINT', async () => {\n logger.info('Received SIGINT, shutting down gracefully...');\n await proxy.shutdown();\n process.exit(0);\n });\n}\n"]}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Tool Emulation Layer for Models Without Native Function Calling
3
+ *
4
+ * Implements two strategies:
5
+ * 1. ReAct Pattern - Structured reasoning with tool use
6
+ * 2. Prompt-Based - Direct JSON tool invocation
7
+ *
8
+ * Automatically selected based on model capabilities.
9
+ */
10
+ export interface Tool {
11
+ name: string;
12
+ description?: string;
13
+ input_schema?: {
14
+ type: string;
15
+ properties?: Record<string, any>;
16
+ required?: string[];
17
+ };
18
+ }
19
+ export interface ToolCall {
20
+ name: string;
21
+ arguments: Record<string, any>;
22
+ id?: string;
23
+ }
24
+ export interface EmulationResult {
25
+ toolCalls: ToolCall[];
26
+ reasoning?: string;
27
+ finalAnswer?: string;
28
+ confidence: number;
29
+ }
30
+ /**
31
+ * ReAct Pattern Implementation
32
+ * Best for: Models with 32k+ context, complex multi-step tasks
33
+ */
34
+ export declare class ReActEmulator {
35
+ private tools;
36
+ constructor(tools: Tool[]);
37
+ /**
38
+ * Build ReAct prompt with tool catalog
39
+ */
40
+ buildPrompt(userMessage: string, previousSteps?: string): string;
41
+ /**
42
+ * Parse ReAct response and extract tool calls
43
+ */
44
+ parseResponse(response: string): {
45
+ toolCall?: ToolCall;
46
+ thought?: string;
47
+ finalAnswer?: string;
48
+ };
49
+ /**
50
+ * Build prompt with observation after tool execution
51
+ */
52
+ appendObservation(previousPrompt: string, observation: string): string;
53
+ }
54
+ /**
55
+ * Prompt-Based Tool Emulation
56
+ * Best for: Simple tasks, models with limited context
57
+ */
58
+ export declare class PromptEmulator {
59
+ private tools;
60
+ constructor(tools: Tool[]);
61
+ /**
62
+ * Build simple prompt for tool invocation
63
+ */
64
+ buildPrompt(userMessage: string): string;
65
+ /**
66
+ * Parse response - either tool call JSON or regular text
67
+ */
68
+ parseResponse(response: string): {
69
+ toolCall?: ToolCall;
70
+ textResponse?: string;
71
+ };
72
+ }
73
+ /**
74
+ * Unified Tool Emulation Interface
75
+ */
76
+ export declare class ToolEmulator {
77
+ private tools;
78
+ private strategy;
79
+ private reactEmulator;
80
+ private promptEmulator;
81
+ constructor(tools: Tool[], strategy: 'react' | 'prompt');
82
+ /**
83
+ * Build prompt based on selected strategy
84
+ */
85
+ buildPrompt(userMessage: string, context?: {
86
+ previousSteps?: string;
87
+ }): string;
88
+ /**
89
+ * Parse model response and extract tool calls
90
+ */
91
+ parseResponse(response: string): {
92
+ toolCall?: ToolCall;
93
+ finalAnswer?: string;
94
+ thought?: string;
95
+ textResponse?: string;
96
+ };
97
+ /**
98
+ * Append observation (ReAct only)
99
+ */
100
+ appendObservation(prompt: string, observation: string): string;
101
+ /**
102
+ * Validate tool call against schema
103
+ */
104
+ validateToolCall(toolCall: ToolCall): {
105
+ valid: boolean;
106
+ errors?: string[];
107
+ };
108
+ /**
109
+ * Get confidence score for emulation result
110
+ * Based on: JSON validity, schema compliance, reasoning quality
111
+ */
112
+ getConfidence(parsed: ReturnType<typeof this.parseResponse>): number;
113
+ }
114
+ /**
115
+ * Execute tool emulation loop
116
+ */
117
+ export declare function executeEmulation(emulator: ToolEmulator, userMessage: string, modelCall: (prompt: string) => Promise<string>, toolExecutor: (toolCall: ToolCall) => Promise<any>, options?: {
118
+ maxIterations?: number;
119
+ verbose?: boolean;
120
+ }): Promise<EmulationResult>;
121
+ //# sourceMappingURL=tool-emulation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-emulation.d.ts","sourceRoot":"","sources":["../../src/proxy/tool-emulation.ts"],"names":[],"mappings":"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"}
@@ -363,3 +363,4 @@ export async function executeEmulation(emulator, userMessage, modelCall, toolExe
363
363
  confidence
364
364
  };
365
365
  }
366
+ //# sourceMappingURL=tool-emulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-emulation.js","sourceRoot":"","sources":["../../src/proxy/tool-emulation.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tool Emulation Layer for Models Without Native Function Calling\n *\n * Implements two strategies:\n * 1. ReAct Pattern - Structured reasoning with tool use\n * 2. Prompt-Based - Direct JSON tool invocation\n *\n * Automatically selected based on model capabilities.\n */\n\nexport interface Tool {\n name: string;\n description?: string;\n input_schema?: {\n type: string;\n properties?: Record<string, any>;\n required?: string[];\n };\n}\n\nexport interface ToolCall {\n name: string;\n arguments: Record<string, any>;\n id?: string;\n}\n\nexport interface EmulationResult {\n toolCalls: ToolCall[];\n reasoning?: string;\n finalAnswer?: string;\n confidence: number; // 0-1\n}\n\n/**\n * ReAct Pattern Implementation\n * Best for: Models with 32k+ context, complex multi-step tasks\n */\nexport class ReActEmulator {\n constructor(private tools: Tool[]) {}\n\n /**\n * Build ReAct prompt with tool catalog\n */\n buildPrompt(userMessage: string, previousSteps: string = ''): string {\n const toolCatalog = this.tools.map(tool => {\n const params = tool.input_schema?.properties || {};\n const required = tool.input_schema?.required || [];\n\n const paramDocs = Object.entries(params).map(([name, schema]: [string, any]) => {\n const req = required.includes(name) ? '(required)' : '(optional)';\n const type = schema.type || 'any';\n return ` - ${name} ${req}: ${type} - ${schema.description || ''}`;\n }).join('\\n');\n\n return `• ${tool.name}: ${tool.description || 'No description'}\n${paramDocs}`;\n }).join('\\n\\n');\n\n return `You are solving a task using available tools. Think step-by-step using this format:\n\nThought: [Your reasoning about what to do next]\nAction: [tool_name]\nAction Input: [JSON object with tool parameters]\nObservation: [Tool result will be inserted here by the system]\n... (repeat Thought/Action/Observation as needed)\nFinal Answer: [Your complete answer to the user's question]\n\nAvailable Tools:\n${toolCatalog}\n\nIMPORTANT:\n- Action Input must be valid JSON matching the tool's schema\n- Only use tools from the list above\n- When you have enough information, provide a Final Answer\n- If a tool fails, think about alternative approaches\n\n${previousSteps}\n\nUser Question: ${userMessage}\n\nBegin!`;\n }\n\n /**\n * Parse ReAct response and extract tool calls\n */\n parseResponse(response: string): {\n toolCall?: ToolCall;\n thought?: string;\n finalAnswer?: string;\n } {\n // Extract components ([\\s\\S] instead of /s flag for ES5 compatibility)\n const thoughtMatch = response.match(/Thought:\\s*([\\s\\S]+?)(?=\\n(?:Action:|Final Answer:|$))/);\n const actionMatch = response.match(/Action:\\s*(\\w+)/);\n const inputMatch = response.match(/Action Input:\\s*(\\{[\\s\\S]*?\\})/);\n const finalMatch = response.match(/Final Answer:\\s*([\\s\\S]+?)$/);\n\n\n if (finalMatch) {\n return {\n finalAnswer: finalMatch[1].trim(),\n thought: thoughtMatch?.[1].trim()\n };\n }\n\n if (actionMatch && inputMatch) {\n try {\n const args = JSON.parse(inputMatch[1].trim());\n return {\n toolCall: {\n name: actionMatch[1],\n arguments: args,\n id: `react_${Date.now()}`\n },\n thought: thoughtMatch?.[1].trim()\n };\n } catch (e) {\n console.error('Failed to parse Action Input JSON:', e);\n return { thought: thoughtMatch?.[1].trim() };\n }\n }\n\n return { thought: thoughtMatch?.[1].trim() };\n }\n\n /**\n * Build prompt with observation after tool execution\n */\n appendObservation(previousPrompt: string, observation: string): string {\n return `${previousPrompt}\\nObservation: ${observation}\\n`;\n }\n}\n\n/**\n * Prompt-Based Tool Emulation\n * Best for: Simple tasks, models with limited context\n */\nexport class PromptEmulator {\n constructor(private tools: Tool[]) {}\n\n /**\n * Build simple prompt for tool invocation\n */\n buildPrompt(userMessage: string): string {\n const toolCatalog = this.tools.map(tool => {\n const params = tool.input_schema?.properties || {};\n const paramList = Object.keys(params).join(', ');\n\n return `${tool.name}(${paramList}): ${tool.description || 'No description'}`;\n }).join('\\n');\n\n return `You have access to these tools:\n\n${toolCatalog}\n\nTo use a tool, respond with ONLY this JSON format (no other text):\n{\n \"tool\": \"tool_name\",\n \"arguments\": {\n \"param1\": \"value1\",\n \"param2\": \"value2\"\n }\n}\n\nIf you don't need a tool, respond with your answer normally.\n\nUser: ${userMessage}\n\nResponse:`;\n }\n\n /**\n * Parse response - either tool call JSON or regular text\n */\n parseResponse(response: string): {\n toolCall?: ToolCall;\n textResponse?: string;\n } {\n // Try to extract JSON from response\n const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n\n if (!jsonMatch) {\n return { textResponse: response.trim() };\n }\n\n try {\n const parsed = JSON.parse(jsonMatch[0]);\n\n if (parsed.tool && parsed.arguments) {\n return {\n toolCall: {\n name: parsed.tool,\n arguments: parsed.arguments,\n id: `prompt_${Date.now()}`\n }\n };\n }\n } catch (e) {\n // Not valid JSON, treat as text response\n }\n\n return { textResponse: response.trim() };\n }\n}\n\n/**\n * Unified Tool Emulation Interface\n */\nexport class ToolEmulator {\n private reactEmulator: ReActEmulator;\n private promptEmulator: PromptEmulator;\n\n constructor(\n private tools: Tool[],\n private strategy: 'react' | 'prompt'\n ) {\n this.reactEmulator = new ReActEmulator(tools);\n this.promptEmulator = new PromptEmulator(tools);\n }\n\n /**\n * Build prompt based on selected strategy\n */\n buildPrompt(userMessage: string, context?: { previousSteps?: string }): string {\n if (this.strategy === 'react') {\n return this.reactEmulator.buildPrompt(userMessage, context?.previousSteps);\n } else {\n return this.promptEmulator.buildPrompt(userMessage);\n }\n }\n\n /**\n * Parse model response and extract tool calls\n */\n parseResponse(response: string): {\n toolCall?: ToolCall;\n finalAnswer?: string;\n thought?: string;\n textResponse?: string;\n } {\n if (this.strategy === 'react') {\n return this.reactEmulator.parseResponse(response);\n } else {\n return this.promptEmulator.parseResponse(response);\n }\n }\n\n /**\n * Append observation (ReAct only)\n */\n appendObservation(prompt: string, observation: string): string {\n if (this.strategy === 'react') {\n return this.reactEmulator.appendObservation(prompt, observation);\n }\n return prompt;\n }\n\n /**\n * Validate tool call against schema\n */\n validateToolCall(toolCall: ToolCall): { valid: boolean; errors?: string[] } {\n const tool = this.tools.find(t => t.name === toolCall.name);\n\n if (!tool) {\n return {\n valid: false,\n errors: [`Tool '${toolCall.name}' not found. Available: ${this.tools.map(t => t.name).join(', ')}`]\n };\n }\n\n const errors: string[] = [];\n const schema = tool.input_schema;\n\n if (!schema) {\n return { valid: true }; // No schema to validate against\n }\n\n // Check required parameters\n const required = schema.required || [];\n for (const param of required) {\n if (!(param in toolCall.arguments)) {\n errors.push(`Missing required parameter: ${param}`);\n }\n }\n\n // Type checking (basic)\n const properties = schema.properties || {};\n for (const [key, value] of Object.entries(toolCall.arguments)) {\n if (properties[key]) {\n const expectedType = properties[key].type;\n const actualType = typeof value;\n\n if (expectedType === 'string' && actualType !== 'string') {\n errors.push(`Parameter '${key}' must be string, got ${actualType}`);\n } else if (expectedType === 'number' && actualType !== 'number') {\n errors.push(`Parameter '${key}' must be number, got ${actualType}`);\n } else if (expectedType === 'boolean' && actualType !== 'boolean') {\n errors.push(`Parameter '${key}' must be boolean, got ${actualType}`);\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors: errors.length > 0 ? errors : undefined\n };\n }\n\n /**\n * Get confidence score for emulation result\n * Based on: JSON validity, schema compliance, reasoning quality\n */\n getConfidence(parsed: ReturnType<typeof this.parseResponse>): number {\n let confidence = 0.5; // Base confidence\n\n if (parsed.toolCall) {\n const validation = this.validateToolCall(parsed.toolCall);\n if (validation.valid) {\n confidence += 0.3; // Valid tool call\n } else {\n confidence -= 0.2; // Invalid tool call\n }\n }\n\n if (parsed.thought && parsed.thought.length > 20) {\n confidence += 0.1; // Good reasoning\n }\n\n if (parsed.finalAnswer && parsed.finalAnswer.length > 10) {\n confidence += 0.1; // Complete answer\n }\n\n return Math.max(0, Math.min(1, confidence));\n }\n}\n\n/**\n * Execute tool emulation loop\n */\nexport async function executeEmulation(\n emulator: ToolEmulator,\n userMessage: string,\n modelCall: (prompt: string) => Promise<string>,\n toolExecutor: (toolCall: ToolCall) => Promise<any>,\n options: {\n maxIterations?: number;\n verbose?: boolean;\n } = {}\n): Promise<EmulationResult> {\n const maxIterations = options.maxIterations || 5;\n const verbose = options.verbose || false;\n\n let prompt = emulator.buildPrompt(userMessage);\n const toolCalls: ToolCall[] = [];\n let finalAnswer: string | undefined;\n let lastReasoning: string | undefined;\n\n if (verbose) {\n console.log('\\nšŸ”§ Starting tool emulation...\\n');\n }\n\n for (let i = 0; i < maxIterations; i++) {\n if (verbose) {\n console.log(`\\n━━━ Iteration ${i + 1}/${maxIterations} ━━━`);\n }\n\n // Call model\n const response = await modelCall(prompt);\n\n if (verbose) {\n console.log(`Model response:\\n${response.substring(0, 300)}...\\n`);\n }\n\n // Parse response\n const parsed = emulator.parseResponse(response);\n\n if (parsed.finalAnswer) {\n finalAnswer = parsed.finalAnswer;\n lastReasoning = parsed.thought;\n if (verbose) {\n console.log('āœ… Received final answer, stopping loop.\\n');\n }\n break;\n }\n\n if (parsed.toolCall) {\n // Validate tool call\n const validation = emulator.validateToolCall(parsed.toolCall);\n\n if (!validation.valid) {\n if (verbose) {\n console.log(`āŒ Invalid tool call: ${validation.errors?.join(', ')}\\n`);\n }\n // Append error as observation and retry\n prompt = emulator.appendObservation(\n prompt,\n `ERROR: ${validation.errors?.join('. ')}`\n );\n continue;\n }\n\n if (verbose) {\n console.log(`šŸ”Ø Executing tool: ${parsed.toolCall.name}`);\n console.log(` Arguments: ${JSON.stringify(parsed.toolCall.arguments)}\\n`);\n }\n\n // Execute tool\n try {\n const result = await toolExecutor(parsed.toolCall);\n toolCalls.push(parsed.toolCall);\n\n if (verbose) {\n console.log(`āœ… Tool result: ${JSON.stringify(result).substring(0, 200)}\\n`);\n }\n\n // Append observation\n prompt = emulator.appendObservation(\n prompt,\n JSON.stringify(result)\n );\n } catch (error: any) {\n if (verbose) {\n console.log(`āŒ Tool execution failed: ${error.message}\\n`);\n }\n prompt = emulator.appendObservation(\n prompt,\n `ERROR: ${error.message}`\n );\n }\n\n lastReasoning = parsed.thought;\n } else if (parsed.textResponse) {\n // Model didn't use a tool and gave a direct response\n finalAnswer = parsed.textResponse;\n if (verbose) {\n console.log('šŸ“ Model provided direct text response (no tool use).\\n');\n }\n break;\n }\n }\n\n if (!finalAnswer && verbose) {\n console.log('āš ļø Reached max iterations without final answer.\\n');\n }\n\n const confidence = emulator.getConfidence({\n toolCall: toolCalls[toolCalls.length - 1],\n finalAnswer,\n thought: lastReasoning\n });\n\n return {\n toolCalls,\n reasoning: lastReasoning,\n finalAnswer,\n confidence\n };\n}\n"]}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * WebSocket Proxy for LLM Streaming
3
+ *
4
+ * Features:
5
+ * - Bidirectional: Full-duplex communication
6
+ * - Mobile-friendly: Better for unstable connections
7
+ * - Lower overhead: No HTTP headers per message
8
+ * - Reconnection: Automatic retry on disconnect
9
+ * - Universal support: Works everywhere (browsers, mobile, desktop)
10
+ *
11
+ * Use Case: Fallback for unreliable connections (mobile, poor WiFi)
12
+ */
13
+ export interface WebSocketProxyConfig {
14
+ port: number;
15
+ geminiApiKey?: string;
16
+ geminiBaseUrl?: string;
17
+ pingInterval?: number;
18
+ pingTimeout?: number;
19
+ maxConnections?: number;
20
+ connectionTimeout?: number;
21
+ }
22
+ export declare class WebSocketProxy {
23
+ private wss;
24
+ private server;
25
+ private config;
26
+ private clients;
27
+ private pingInterval?;
28
+ private activeConnections;
29
+ constructor(config: WebSocketProxyConfig);
30
+ private setupHandlers;
31
+ private setupHeartbeat;
32
+ private handleStreamingRequest;
33
+ private handleNonStreamingRequest;
34
+ private convertAnthropicToGemini;
35
+ private convertGeminiToAnthropic;
36
+ start(): Promise<void>;
37
+ stop(): Promise<void>;
38
+ }
39
+ //# sourceMappingURL=websocket-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/websocket-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,iBAAiB,CAAa;gBAE1B,MAAM,EAAE,oBAAoB;IAcxC,OAAO,CAAC,aAAa;IAkHrB,OAAO,CAAC,cAAc;YA8BR,sBAAsB;YAiGtB,yBAAyB;IA8CvC,OAAO,CAAC,wBAAwB;IAgDhC,OAAO,CAAC,wBAAwB;IAmChC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAuBtB"}
@@ -404,3 +404,4 @@ if (import.meta.url === `file://${process.argv[1]}`) {
404
404
  process.exit(0);
405
405
  });
406
406
  }
407
+ //# sourceMappingURL=websocket-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-proxy.js","sourceRoot":"","sources":["../../src/proxy/websocket-proxy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * WebSocket Proxy for LLM Streaming\n *\n * Features:\n * - Bidirectional: Full-duplex communication\n * - Mobile-friendly: Better for unstable connections\n * - Lower overhead: No HTTP headers per message\n * - Reconnection: Automatic retry on disconnect\n * - Universal support: Works everywhere (browsers, mobile, desktop)\n *\n * Use Case: Fallback for unreliable connections (mobile, poor WiFi)\n */\n\nimport { WebSocketServer, WebSocket } from 'ws';\nimport { createServer, IncomingMessage } from 'http';\nimport { logger } from '../utils/logger.js';\n\nexport interface WebSocketProxyConfig {\n port: number;\n geminiApiKey?: string;\n geminiBaseUrl?: string;\n pingInterval?: number; // ms\n pingTimeout?: number; // ms\n maxConnections?: number; // Maximum concurrent connections\n connectionTimeout?: number; // Connection idle timeout (ms)\n}\n\ninterface ClientState {\n ws: WebSocket;\n isAlive: boolean;\n lastPing: Date;\n requests: number;\n}\n\nexport class WebSocketProxy {\n private wss: WebSocketServer;\n private server: any;\n private config: WebSocketProxyConfig;\n private clients: Map<WebSocket, ClientState> = new Map();\n private pingInterval?: NodeJS.Timeout;\n private activeConnections: number = 0;\n\n constructor(config: WebSocketProxyConfig) {\n this.config = config;\n this.server = createServer();\n this.wss = new WebSocketServer({ server: this.server });\n\n this.setupHandlers();\n this.setupHeartbeat();\n\n logger.info('WebSocket proxy created', {\n port: config.port,\n pingInterval: config.pingInterval || 30000\n });\n }\n\n private setupHandlers(): void {\n this.wss.on('connection', (ws: WebSocket, req: IncomingMessage) => {\n const clientIp = req.socket.remoteAddress;\n\n // Check connection limit (DoS protection)\n const maxConnections = this.config.maxConnections || 1000;\n if (this.activeConnections >= maxConnections) {\n logger.warn('Connection limit reached', {\n activeConnections: this.activeConnections,\n maxConnections\n });\n ws.close(1008, 'Server at capacity');\n return;\n }\n\n this.activeConnections++;\n logger.info('WebSocket client connected', {\n clientIp,\n activeConnections: this.activeConnections\n });\n\n // Initialize client state\n this.clients.set(ws, {\n ws,\n isAlive: true,\n lastPing: new Date(),\n requests: 0\n });\n\n // Handle incoming messages\n ws.on('message', async (data: Buffer) => {\n const client = this.clients.get(ws);\n if (!client) return;\n\n client.requests++;\n\n try {\n const message = JSON.parse(data.toString());\n logger.debug('WebSocket message received', { type: message.type });\n\n if (message.type === 'ping') {\n // Respond to ping\n ws.send(JSON.stringify({ type: 'pong', timestamp: Date.now() }));\n client.isAlive = true;\n client.lastPing = new Date();\n\n } else if (message.type === 'streaming_request') {\n // Handle LLM streaming request\n await this.handleStreamingRequest(ws, message.data);\n\n } else if (message.type === 'non_streaming_request') {\n // Handle non-streaming request\n await this.handleNonStreamingRequest(ws, message.data);\n\n } else {\n ws.send(JSON.stringify({\n type: 'error',\n error: `Unknown message type: ${message.type}`\n }));\n }\n\n } catch (error) {\n logger.error('WebSocket message error', { error: (error as Error).message });\n ws.send(JSON.stringify({\n type: 'error',\n error: (error as Error).message\n }));\n }\n });\n\n // Handle pong responses\n ws.on('pong', () => {\n const client = this.clients.get(ws);\n if (client) {\n client.isAlive = true;\n client.lastPing = new Date();\n }\n });\n\n // Set connection timeout\n const connectionTimeout = this.config.connectionTimeout || 300000; // 5 minutes\n const timeoutHandle = setTimeout(() => {\n logger.warn('Connection timeout', { clientIp });\n ws.close(1000, 'Connection timeout');\n }, connectionTimeout);\n\n // Handle close\n ws.on('close', () => {\n logger.info('WebSocket client disconnected', { clientIp });\n this.clients.delete(ws);\n this.activeConnections--;\n clearTimeout(timeoutHandle);\n });\n\n // Handle errors\n ws.on('error', (error) => {\n logger.error('WebSocket error', { clientIp, error: error.message });\n this.clients.delete(ws);\n this.activeConnections--;\n });\n\n // Send initial handshake\n ws.send(JSON.stringify({\n type: 'connected',\n protocols: ['anthropic-messages-v1'],\n features: ['streaming', 'non-streaming', 'ping-pong']\n }));\n });\n\n this.wss.on('error', (error) => {\n logger.error('WebSocket server error', { error: error.message });\n });\n }\n\n private setupHeartbeat(): void {\n const interval = this.config.pingInterval || 30000; // 30 seconds\n const timeout = this.config.pingTimeout || 60000; // 60 seconds\n\n this.pingInterval = setInterval(() => {\n const now = Date.now();\n\n this.clients.forEach((client, ws) => {\n // Check if client responded to last ping\n if (!client.isAlive) {\n const timeSinceLastPing = now - client.lastPing.getTime();\n\n if (timeSinceLastPing > timeout) {\n logger.warn('Client did not respond to ping, terminating', {\n timeSinceLastPing\n });\n ws.terminate();\n this.clients.delete(ws);\n return;\n }\n }\n\n // Send ping\n client.isAlive = false;\n ws.ping();\n });\n\n }, interval);\n }\n\n private async handleStreamingRequest(\n ws: WebSocket,\n anthropicReq: any\n ): Promise<void> {\n try {\n logger.info('WebSocket streaming request', {\n model: anthropicReq.model,\n messageCount: anthropicReq.messages?.length\n });\n\n // Convert to Gemini format\n const geminiReq = this.convertAnthropicToGemini(anthropicReq);\n\n // Send streaming start event\n ws.send(JSON.stringify({\n type: 'message_start',\n message: {\n id: `msg_${Date.now()}`,\n role: 'assistant',\n model: anthropicReq.model || 'gemini-2.0-flash-exp'\n }\n }));\n\n // Forward to Gemini\n const geminiBaseUrl = this.config.geminiBaseUrl || 'https://generativelanguage.googleapis.com/v1beta';\n const url = `${geminiBaseUrl}/models/gemini-2.0-flash-exp:streamGenerateContent?key=${this.config.geminiApiKey}&alt=sse`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(geminiReq)\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Gemini API error: ${error}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n let chunkCount = 0;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value);\n chunkCount++;\n\n // Parse Gemini SSE and send as WebSocket messages\n const lines = chunk.split('\\n').filter(line => line.trim());\n\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n try {\n const jsonStr = line.substring(6);\n const parsed = JSON.parse(jsonStr);\n const candidate = parsed.candidates?.[0];\n const text = candidate?.content?.parts?.[0]?.text;\n\n if (text) {\n // Send text delta\n ws.send(JSON.stringify({\n type: 'content_block_delta',\n delta: { type: 'text_delta', text }\n }));\n }\n\n if (candidate?.finishReason) {\n // Send completion\n ws.send(JSON.stringify({\n type: 'message_stop',\n stop_reason: 'end_turn'\n }));\n }\n } catch (e) {\n logger.debug('Failed to parse stream chunk', { line });\n }\n }\n }\n }\n\n logger.info('WebSocket stream complete', { totalChunks: chunkCount });\n\n } catch (error) {\n logger.error('WebSocket streaming error', { error: (error as Error).message });\n ws.send(JSON.stringify({\n type: 'error',\n error: (error as Error).message\n }));\n }\n }\n\n private async handleNonStreamingRequest(\n ws: WebSocket,\n anthropicReq: any\n ): Promise<void> {\n try {\n logger.info('WebSocket non-streaming request', {\n model: anthropicReq.model,\n messageCount: anthropicReq.messages?.length\n });\n\n // Convert to Gemini format\n const geminiReq = this.convertAnthropicToGemini(anthropicReq);\n\n // Forward to Gemini\n const geminiBaseUrl = this.config.geminiBaseUrl || 'https://generativelanguage.googleapis.com/v1beta';\n const url = `${geminiBaseUrl}/models/gemini-2.0-flash-exp:generateContent?key=${this.config.geminiApiKey}`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(geminiReq)\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Gemini API error: ${error}`);\n }\n\n const geminiRes = await response.json();\n const anthropicRes = this.convertGeminiToAnthropic(geminiRes);\n\n // Send complete response\n ws.send(JSON.stringify({\n type: 'message_complete',\n message: anthropicRes\n }));\n\n } catch (error) {\n logger.error('WebSocket non-streaming error', { error: (error as Error).message });\n ws.send(JSON.stringify({\n type: 'error',\n error: (error as Error).message\n }));\n }\n }\n\n private convertAnthropicToGemini(anthropicReq: any): any {\n const contents = [];\n let systemPrefix = '';\n\n if (anthropicReq.system) {\n systemPrefix = `System: ${anthropicReq.system}\\n\\n`;\n }\n\n for (let i = 0; i < anthropicReq.messages.length; i++) {\n const msg = anthropicReq.messages[i];\n let text: string;\n\n if (typeof msg.content === 'string') {\n text = msg.content;\n } else if (Array.isArray(msg.content)) {\n text = msg.content\n .filter((block: any) => block.type === 'text')\n .map((block: any) => block.text)\n .join('\\n');\n } else {\n text = '';\n }\n\n if (i === 0 && msg.role === 'user' && systemPrefix) {\n text = systemPrefix + text;\n }\n\n contents.push({\n role: msg.role === 'assistant' ? 'model' : 'user',\n parts: [{ text }]\n });\n }\n\n const geminiReq: any = { contents };\n\n if (anthropicReq.temperature !== undefined || anthropicReq.max_tokens !== undefined) {\n geminiReq.generationConfig = {};\n if (anthropicReq.temperature !== undefined) {\n geminiReq.generationConfig.temperature = anthropicReq.temperature;\n }\n if (anthropicReq.max_tokens !== undefined) {\n geminiReq.generationConfig.maxOutputTokens = anthropicReq.max_tokens;\n }\n }\n\n return geminiReq;\n }\n\n private convertGeminiToAnthropic(geminiRes: any): any {\n const candidate = geminiRes.candidates?.[0];\n if (!candidate) {\n throw new Error('No candidates in Gemini response');\n }\n\n const content = candidate.content;\n const parts = content?.parts || [];\n let rawText = '';\n\n for (const part of parts) {\n if (part.text) {\n rawText += part.text;\n }\n }\n\n return {\n id: `msg_${Date.now()}`,\n type: 'message',\n role: 'assistant',\n model: 'gemini-2.0-flash-exp',\n content: [\n {\n type: 'text',\n text: rawText\n }\n ],\n stop_reason: 'end_turn',\n usage: {\n input_tokens: geminiRes.usageMetadata?.promptTokenCount || 0,\n output_tokens: geminiRes.usageMetadata?.candidatesTokenCount || 0\n }\n };\n }\n\n start(): Promise<void> {\n return new Promise((resolve) => {\n this.server.listen(this.config.port, () => {\n logger.info('WebSocket proxy started', {\n port: this.config.port,\n url: `ws://localhost:${this.config.port}`\n });\n\n console.log(`\\nāœ… WebSocket Proxy running at ws://localhost:${this.config.port}`);\n console.log(` Protocol: WebSocket (fallback for unreliable connections)`);\n console.log(` Features: Bidirectional, Mobile-friendly, Auto-reconnect\\n`);\n\n resolve();\n });\n });\n }\n\n stop(): Promise<void> {\n return new Promise((resolve) => {\n // Clear ping interval\n if (this.pingInterval) {\n clearInterval(this.pingInterval);\n }\n\n // Close all client connections\n this.clients.forEach((client, ws) => {\n ws.close(1000, 'Server shutting down');\n });\n this.clients.clear();\n\n // Close WebSocket server\n this.wss.close(() => {\n // Close HTTP server\n this.server.close(() => {\n logger.info('WebSocket proxy stopped');\n resolve();\n });\n });\n });\n }\n}\n\n// CLI entry point\nif (import.meta.url === `file://${process.argv[1]}`) {\n const port = parseInt(process.env.PORT || '8080');\n const geminiApiKey = process.env.GOOGLE_GEMINI_API_KEY;\n\n if (!geminiApiKey) {\n console.error('āŒ Error: GOOGLE_GEMINI_API_KEY environment variable required');\n process.exit(1);\n }\n\n const proxy = new WebSocketProxy({\n port,\n geminiApiKey,\n geminiBaseUrl: process.env.GEMINI_BASE_URL,\n pingInterval: 30000,\n pingTimeout: 60000\n });\n\n proxy.start();\n\n // Graceful shutdown\n process.on('SIGINT', async () => {\n console.log('\\nšŸ›‘ Shutting down WebSocket proxy...');\n await proxy.stop();\n process.exit(0);\n });\n}\n"]}