promptfoo 0.121.3 → 0.121.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/README.md +1 -1
  2. package/dist/src/{ListApp-Du7YVwj5.js → ListApp-DQkFNqE9.js} +1 -1
  3. package/dist/src/{accounts-Xatc0RYb.js → accounts-DdJ2pHMI.js} +5 -5
  4. package/dist/src/{accounts-B2XmGjty.js → accounts-DhMYUUbu.js} +5 -5
  5. package/dist/src/{accounts-BPyfpSeU.cjs → accounts-Dy17bs4D.cjs} +5 -5
  6. package/dist/src/{accounts-CFLK3mnD.js → accounts-F9d_5sMC.js} +6 -6
  7. package/dist/src/{agentic-utils-DAVsChuB.cjs → agentic-utils-BpX5b23w.cjs} +3 -3
  8. package/dist/src/{agentic-utils-DIYAAYE7.js → agentic-utils-P172hM8B.js} +3 -3
  9. package/dist/src/{agentic-utils-D8yXo5Lm.js → agentic-utils-qFlm6zes.js} +4 -4
  10. package/dist/src/{agentic-utils-36epdqwB.js → agentic-utils-w68v6_Dz.js} +3 -3
  11. package/dist/src/{agents-CLQ-P15P.js → agents-8FDnTriG.js} +6 -7
  12. package/dist/src/{agents-CAYbM7qD.cjs → agents-BahDpe5G.cjs} +34 -12
  13. package/dist/src/{agents-DSSTV4bv.js → agents-C-R_jfzI.js} +35 -13
  14. package/dist/src/{agents-wg3ohknq.js → agents-CgaMXvLM.js} +5 -7
  15. package/dist/src/{agents-BBWxKSM0.cjs → agents-D7-HGxUj.cjs} +5 -7
  16. package/dist/src/{agents-BBVJCIYr.js → agents-DJ35I3Nt.js} +35 -13
  17. package/dist/src/{agents-CgBniSlI.js → agents-aYPQLf8W.js} +5 -9
  18. package/dist/src/{agents-Bqgfdokm.js → agents-pQeBEXMm.js} +35 -14
  19. package/dist/src/{aimlapi-BwGC1TtS.js → aimlapi-BCq3MHeL.js} +8 -14
  20. package/dist/src/{aimlapi-MgSLdvy7.js → aimlapi-BD6J9oKt.js} +7 -14
  21. package/dist/src/{aimlapi-Bv8Fmc-b.cjs → aimlapi-qcK4OT55.cjs} +8 -15
  22. package/dist/src/{aimlapi-DaC3qZ-o.js → aimlapi-sgYnkE54.js} +7 -16
  23. package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -0
  24. package/dist/src/app/assets/Report-CQYFezYu.js +1 -0
  25. package/dist/src/app/assets/index-BXGkeMwh.css +1 -0
  26. package/dist/src/app/assets/index-BzJt18Jz.js +385 -0
  27. package/dist/src/app/assets/rolldown-runtime-COnpUsM8.js +1 -0
  28. package/dist/src/app/assets/scroll-timeline-D9IT_e8Z.js +1 -0
  29. package/dist/src/app/assets/sync-IjzpWrOE.js +4 -0
  30. package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +36 -0
  31. package/dist/src/app/assets/vendor-markdown-Ch00wnNI.js +29 -0
  32. package/dist/src/app/assets/vendor-react-CVvmk1UB.js +9 -0
  33. package/dist/src/app/assets/vendor-utils-BnEYbx2Q.js +37 -0
  34. package/dist/src/app/index.html +7 -7
  35. package/dist/src/{audio-DjU9GswO.js → audio-B7izf48x.js} +4 -5
  36. package/dist/src/{audio-DVFjQ67_.cjs → audio-BQtNuYBj.cjs} +4 -4
  37. package/dist/src/{audio-Bn44pQxv.js → audio-COrn8rM6.js} +4 -4
  38. package/dist/src/{audio-DDA5WHdx.js → audio-DcVKoInv.js} +4 -4
  39. package/dist/src/{base-BboXIF_0.cjs → base-D-670DX8.cjs} +3 -3
  40. package/dist/src/{base-CqzQ4K8j.js → base-PYJvBE1i.js} +3 -3
  41. package/dist/src/{base-CKjwebIH.js → base-fZ9wgg50.js} +3 -3
  42. package/dist/src/{base-Cz2ZC_iA.js → base-yrI1Yal4.js} +3 -3
  43. package/dist/src/{blobs-BUWmKWzo.js → blobs-BCZavS8s.js} +4 -4
  44. package/dist/src/{blobs-B1JriOyi.js → blobs-BQWqnnvL.js} +4 -4
  45. package/dist/src/{blobs-DXTl6J3H.js → blobs-C-F78Kfn.js} +3 -3
  46. package/dist/src/{blobs-C6j0bvFz.cjs → blobs-D2FAd1Q5.cjs} +3 -3
  47. package/dist/src/cache-BIyPcp5v.cjs +376 -0
  48. package/dist/src/cache-C4Xb-hNb.js +310 -0
  49. package/dist/src/cache-Cr9oLMUa.js +3 -0
  50. package/dist/src/cache-D5NZmMiT.js +310 -0
  51. package/dist/src/cache-DbLsVWB2.cjs +3 -0
  52. package/dist/src/cache-mb7c8hbp.js +280 -0
  53. package/dist/src/{chat-DK1U-eZ-.js → chat-0bwXjVP0.js} +3 -13
  54. package/dist/src/{chat-BtIKkLKx.cjs → chat-BPXSW8Bv.cjs} +3 -13
  55. package/dist/src/{chat-B0iaWhoh.js → chat-BfPaS15_.js} +63 -37
  56. package/dist/src/{chat-CM8qWR3_.cjs → chat-CclRbxGf.cjs} +63 -37
  57. package/dist/src/{chat-BEwdgGEg.js → chat-Dr3DUQ0D.js} +63 -37
  58. package/dist/src/{chat-pxmiVpWe.js → chat-I9izLm49.js} +62 -36
  59. package/dist/src/{chat-B-52XYI1.js → chat-MKxMnZJZ.js} +3 -13
  60. package/dist/src/{chat-BE0qTA8e.js → chat-mW0ORo8G.js} +3 -14
  61. package/dist/src/{chatkit-Cx174XI3.cjs → chatkit-BoWoSgXl.cjs} +4 -4
  62. package/dist/src/{chatkit-BYGQlHlV.js → chatkit-CJnHRRMM.js} +4 -4
  63. package/dist/src/{chatkit-a2D6mY6s.js → chatkit-Cv6AhukM.js} +4 -4
  64. package/dist/src/{chatkit-_8eJqKcD.js → chatkit-zUIVoDos.js} +4 -4
  65. package/dist/src/{claude-agent-sdk-CMjh4LFH.js → claude-agent-sdk-BQNuLaAK.js} +19 -14
  66. package/dist/src/{claude-agent-sdk-8ddRp1L2.cjs → claude-agent-sdk-CPJo3dBQ.cjs} +21 -16
  67. package/dist/src/{claude-agent-sdk-HgbFioFw.js → claude-agent-sdk-Dtq_L-Sc.js} +20 -15
  68. package/dist/src/{claude-agent-sdk-Bq5EArsX.js → claude-agent-sdk-nfAIcxNf.js} +21 -17
  69. package/dist/src/{cloud-z8KZpUoa.js → cloud-DQZ5sVjW.js} +25 -13
  70. package/dist/src/cloud-Hphvo8kr.js +3 -0
  71. package/dist/src/{cloudflare-ai-Bbp26N0L.js → cloudflare-ai-BIB567w6.js} +5 -14
  72. package/dist/src/{cloudflare-ai-BGyXlpXJ.js → cloudflare-ai-DGLte7Py.js} +5 -14
  73. package/dist/src/{cloudflare-ai-C62x6MQG.cjs → cloudflare-ai-Dl3N9OVD.cjs} +6 -15
  74. package/dist/src/{cloudflare-ai-DdKP9TKT.js → cloudflare-ai-DlKr0rY7.js} +5 -15
  75. package/dist/src/{cloudflare-gateway-D-e9i1Sn.js → cloudflare-gateway-BDZrYydE.js} +4 -16
  76. package/dist/src/{cloudflare-gateway-Dx36ftqF.cjs → cloudflare-gateway-BYDp495F.cjs} +4 -15
  77. package/dist/src/{cloudflare-gateway-DXhtXDRb.js → cloudflare-gateway-CiIZHU0Q.js} +4 -15
  78. package/dist/src/{cloudflare-gateway-BwAaUgeW.js → cloudflare-gateway-DI1HNP5F.js} +4 -15
  79. package/dist/src/codex-sdk-BAmYE7qy.js +3 -0
  80. package/dist/src/codex-sdk-C2_M2pl_.cjs +1172 -0
  81. package/dist/src/codex-sdk-CErXn7qh.js +1165 -0
  82. package/dist/src/codex-sdk-CWEnH70W.cjs +2 -0
  83. package/dist/src/codex-sdk-CpqiOqDO.js +1164 -0
  84. package/dist/src/codex-sdk-Rtky3M4I.js +1165 -0
  85. package/dist/src/{cometapi-BDyV-NNm.js → cometapi-BUlt_ELa.js} +8 -15
  86. package/dist/src/{cometapi-hhL4TAh3.js → cometapi-CtJ-mS8R.js} +9 -15
  87. package/dist/src/{cometapi-sp7sJpBD.js → cometapi-DT-jlVCB.js} +8 -17
  88. package/dist/src/{cometapi-C3hOlM7-.cjs → cometapi-UVOryo4W.cjs} +9 -16
  89. package/dist/src/{completion-DlXUhj5c.cjs → completion-BozdoXba.cjs} +7 -62
  90. package/dist/src/{completion-BCimtq-h.js → completion-Dnxn7E-j.js} +8 -57
  91. package/dist/src/{completion-DCjv7RZ3.js → completion-HUe8wDhZ.js} +8 -57
  92. package/dist/src/{completion-DoYy49ti.js → completion-x0a_c2y1.js} +8 -57
  93. package/dist/src/{createHash-CTQmL3G2.js → createHash-4gFQpDDv.js} +3 -3
  94. package/dist/src/{createHash-BYwImsYv.cjs → createHash-B7KvgoOD.cjs} +4 -4
  95. package/dist/src/{createHash-Da8fMwqB.js → createHash-ChI45QR1.js} +3 -3
  96. package/dist/src/{createHash-DmPQkvBh.js → createHash-CwDVU5xr.js} +3 -3
  97. package/dist/src/{docker-FeBni2dw.js → docker-CQmlA2NU.js} +7 -14
  98. package/dist/src/{docker-CxCkwMzc.js → docker-ClnmCf1Z.js} +6 -14
  99. package/dist/src/{docker-DpguQj-w.js → docker-DCgsveLD.js} +6 -16
  100. package/dist/src/{docker-Cqj2-QVi.cjs → docker-DS4_Osau.cjs} +7 -15
  101. package/dist/src/embedding-D3xTseo7.js +59 -0
  102. package/dist/src/embedding-DD9wa3ae.js +58 -0
  103. package/dist/src/embedding-I45KG3o7.cjs +63 -0
  104. package/dist/src/embedding-nFbumxcv.js +58 -0
  105. package/dist/src/entrypoint.js +69 -6
  106. package/dist/src/{errors-P6ll7XSJ.js → errors-Cw810C93.js} +1 -1
  107. package/dist/src/{esm-SUNIX1x3.js → esm-C7PnfdF8.js} +15 -6
  108. package/dist/src/{esm-CipptfDu.cjs → esm-CtEPLdAj.cjs} +15 -6
  109. package/dist/src/{esm-CKWP3u_P.js → esm-Dh4dOLlt.js} +16 -7
  110. package/dist/src/{esm-7UIl0pPM.js → esm-tVgYPY-f.js} +27 -18
  111. package/dist/src/eval-CzJFfFO9.js +3 -0
  112. package/dist/src/{eval-BTqTn7lb.js → eval-u4UVafl6.js} +49 -20
  113. package/dist/src/{evalResult-BkIhRdTe.js → evalResult-Bgm9ZH31.js} +7 -7
  114. package/dist/src/{evalResult-DUDShQrm.js → evalResult-D3hVYFis.js} +7 -7
  115. package/dist/src/evalResult-D8MT9p0s.js +3 -0
  116. package/dist/src/evalResult-DElBuddX.js +2 -0
  117. package/dist/src/evalResult-Dvc-iucu.cjs +2 -0
  118. package/dist/src/{evalResult-DpARzUCb.cjs → evalResult-KZqXl4XP.cjs} +7 -7
  119. package/dist/src/evaluator-CVessDWe.js +3 -0
  120. package/dist/src/{evaluator-BcvOGaam.js → evaluator-IvuDYSvQ.js} +3178 -2102
  121. package/dist/src/{extractor-C8XwivI9.js → extractor-CAfTSraf.js} +6 -6
  122. package/dist/src/{extractor-CAZ2G3Kh.js → extractor-DNSeBVOJ.js} +6 -6
  123. package/dist/src/{extractor-D_wd8jxt.js → extractor-Dk6bRWkv.js} +6 -6
  124. package/dist/src/{extractor-DG3sSfXE.cjs → extractor-WVPOrH43.cjs} +6 -6
  125. package/dist/src/{fetch-BiYv2BZc.js → fetch-B0Z3Oe4k.js} +218 -55
  126. package/dist/src/{fetch-DoVRJZhJ.js → fetch-BEWnXrrG.js} +195 -45
  127. package/dist/src/fetch-C7bGKDlQ.js +3 -0
  128. package/dist/src/{fetch-BnR9wSnm.cjs → fetch-CJU5ELPa.cjs} +223 -48
  129. package/dist/src/{fetch-CVAtKnI3.js → fetch-Di00EQrc.js} +218 -55
  130. package/dist/src/{fileExtensions-Ds-foDzt.js → fileExtensions-AWa2ZML4.js} +1 -1
  131. package/dist/src/{fileExtensions-LcDYkU4v.js → fileExtensions-BArZuxsI.js} +1 -1
  132. package/dist/src/{formatDuration-DgBVMN65.js → formatDuration-DZzPsexs.js} +1 -1
  133. package/dist/src/{genaiTracer-70Z8BIuV.js → genaiTracer-COYDi-tC.js} +6 -2
  134. package/dist/src/{genaiTracer-C1rxGO8Q.js → genaiTracer-DWdZ28hY.js} +6 -2
  135. package/dist/src/{genaiTracer-D3fD9dNV.js → genaiTracer-XnrcgDCe.js} +6 -2
  136. package/dist/src/{genaiTracer-BfxrvSUb.cjs → genaiTracer-yRuxj9-L.cjs} +7 -3
  137. package/dist/src/golang/wrapper.go +1 -1
  138. package/dist/src/{graders-BElhu9ZY.cjs → graders--zknU_uk.cjs} +3772 -1302
  139. package/dist/src/graders-BOAzQEUe.cjs +2 -0
  140. package/dist/src/graders-D4BTsZdG2.js +3 -0
  141. package/dist/src/graders-DOJK1XpV.js +2 -0
  142. package/dist/src/graders-NAv9LcBn.js +2 -0
  143. package/dist/src/{graders-DG7mhg-b.js → graders-Zy3x0zqX.js} +5691 -3247
  144. package/dist/src/{graders-RjHF8VfG.js → graders-eIHhRqoC.js} +5683 -3239
  145. package/dist/src/{graders-BXAJ0sbS.js → graders-pvbReLLn.js} +5692 -3248
  146. package/dist/src/{image-6WQXK8m8.js → image-9302QVqR.js} +4 -4
  147. package/dist/src/{image-B8b6f36E.js → image-B5Mv-Z3h.js} +8 -8
  148. package/dist/src/{image-PoF6DN3x.js → image-DVz2RiMF.js} +8 -8
  149. package/dist/src/{image-fza3zuKs.cjs → image-De2FBmYV.cjs} +4 -4
  150. package/dist/src/{image-DO0RYnjH.js → image-dnoUgPrC.js} +4 -5
  151. package/dist/src/{image-CoxZp9PZ.js → image-qUpPvmNZ.js} +8 -8
  152. package/dist/src/{image-xNbw5ph2.js → image-u7-rKnYU.js} +4 -4
  153. package/dist/src/{image--F58eEIn.cjs → image-x6KqLQl4.cjs} +8 -8
  154. package/dist/src/index.cjs +3641 -2144
  155. package/dist/src/index.d.cts +2660 -20
  156. package/dist/src/index.d.ts +2660 -20
  157. package/dist/src/index.js +3649 -2152
  158. package/dist/src/{interactiveCheck-BnMYOjMu.js → interactiveCheck-CLERUB0c.js} +2 -2
  159. package/dist/src/{knowledgeBase-DqrLX8fy.cjs → knowledgeBase-Bpoe_nLu.cjs} +6 -8
  160. package/dist/src/{knowledgeBase-Bi7CmDbx.js → knowledgeBase-Dgc7CBWF.js} +6 -8
  161. package/dist/src/{knowledgeBase-DFRXPZl_.js → knowledgeBase-RhFPGWDc.js} +6 -8
  162. package/dist/src/{knowledgeBase-Ce3ofVan.js → knowledgeBase-lm9RXSAm.js} +6 -9
  163. package/dist/src/{litellm-CKiAxnoM.js → litellm-C2kqjxqp.js} +6 -14
  164. package/dist/src/{litellm-CnHI69aj.cjs → litellm-CoyI4IAl.cjs} +6 -15
  165. package/dist/src/{litellm-Tc294Jhj.js → litellm-DRjpcSa7.js} +5 -14
  166. package/dist/src/{litellm-Bo2gQXpo.js → litellm-p37R1dzQ.js} +5 -16
  167. package/dist/src/{logger-BnkjG2jt.js → logger-B88EkIn6.js} +40 -11
  168. package/dist/src/{logger-D5iKBpu_.cjs → logger-COuQb2xB.cjs} +51 -10
  169. package/dist/src/{logger-DO8_zM18.js → logger-Ct2S6Yx-.js} +40 -11
  170. package/dist/src/{logger-BcJBzSSA.js → logger-DksKw1Qc.js} +40 -11
  171. package/dist/src/{luma-ray-C9q8rdQe.js → luma-ray-B863CmuZ.js} +6 -10
  172. package/dist/src/{luma-ray-DP0QA9qn.js → luma-ray-BTTLtqQ8.js} +7 -10
  173. package/dist/src/{luma-ray-m9Ku2meV.cjs → luma-ray-BxVKaW2a.cjs} +6 -10
  174. package/dist/src/{luma-ray-0ehMPt5N.js → luma-ray-KgTCXrZC.js} +6 -12
  175. package/dist/src/main.d.ts +1 -26
  176. package/dist/src/main.js +985 -520
  177. package/dist/src/{messages-HJsyEh4o.cjs → messages-811uVVW5.cjs} +69 -19
  178. package/dist/src/{messages-Dy9QecMs.js → messages-BTQz42fn.js} +69 -19
  179. package/dist/src/{messages-biC_ex-p.js → messages-MYTQ2TWp.js} +69 -19
  180. package/dist/src/{messages-DJNo37Ko.js → messages-zWbkLLHz.js} +69 -19
  181. package/dist/src/{meteor-D-SotUw9.js → meteor-CU5UAE-H.js} +1 -1
  182. package/dist/src/{meteor-DLZZ3osF.cjs → meteor-Co1VQ1u5.cjs} +1 -1
  183. package/dist/src/{meteor-44VjEACX.js → meteor-DHdzY1Ss.js} +1 -1
  184. package/dist/src/{meteor-DUiCJRC-.js → meteor-DuAFv6gF.js} +1 -1
  185. package/dist/src/{modelslab-B5J-ZM5c.js → modelslab-D0erNWKe.js} +7 -10
  186. package/dist/src/{modelslab-BTOT8FUO.js → modelslab-DIq-6y7x.js} +7 -10
  187. package/dist/src/{modelslab-IQbNg-r7.cjs → modelslab-Dk1JAtVo.cjs} +7 -10
  188. package/dist/src/{modelslab-BI458moT.js → modelslab-wu9yi5GE.js} +7 -11
  189. package/dist/src/{nova-reel-BZ9y-Y5s.js → nova-reel-CCFRfeRb.js} +7 -10
  190. package/dist/src/{nova-reel-CE5etkv9.cjs → nova-reel-CrLXVKQf.cjs} +6 -10
  191. package/dist/src/{nova-reel-Xw1SXLpg.js → nova-reel-DQrm74ng.js} +6 -10
  192. package/dist/src/{nova-reel-DEeQlnOJ.js → nova-reel-gr11WG7f.js} +6 -12
  193. package/dist/src/{nova-sonic-Ogqf-csn.js → nova-sonic-BYdp-QLs.js} +5 -7
  194. package/dist/src/{nova-sonic-DXTLpi-r.js → nova-sonic-B_ZXcUJB.js} +4 -7
  195. package/dist/src/{nova-sonic-DWswpN1E.js → nova-sonic-TDgrlTk7.js} +4 -9
  196. package/dist/src/{nova-sonic-N0yCm0vb.cjs → nova-sonic-i5tUvXKn.cjs} +4 -7
  197. package/dist/src/{openai-BcB5KlTk.js → openai-DhVEmgeZ.js} +6 -3
  198. package/dist/src/{openai-BMcwgD5C.js → openai-Qsvz25mV.js} +6 -3
  199. package/dist/src/{openai-CoxGAQwn.cjs → openai-URNyItar.cjs} +6 -3
  200. package/dist/src/{openai-D6wITiVn.js → openai-iYtrXzOX.js} +6 -3
  201. package/dist/src/openclaw-CLWrW03k.js +1200 -0
  202. package/dist/src/openclaw-CnQ363Wi.js +1199 -0
  203. package/dist/src/openclaw-CwzlQSQX.js +1199 -0
  204. package/dist/src/openclaw-wX9rtfke.cjs +1205 -0
  205. package/dist/src/{opencode-sdk-CHCs7dEb.js → opencode-sdk-BUu5Nevv.js} +6 -8
  206. package/dist/src/{opencode-sdk-WWJhnbKr.cjs → opencode-sdk-BZ2idgYA.cjs} +6 -8
  207. package/dist/src/{opencode-sdk-DDxj4QqH.js → opencode-sdk-BxD8vXp_.js} +7 -8
  208. package/dist/src/{opencode-sdk-C71Z0ehR.js → opencode-sdk-GI2KaAXq.js} +6 -10
  209. package/dist/src/{otlpReceiver-CZL48YfC.js → otlpReceiver-B2z58l4e.js} +154 -98
  210. package/dist/src/{otlpReceiver-DHKqJlsz.cjs → otlpReceiver-BfcVq2Nq.cjs} +154 -98
  211. package/dist/src/{otlpReceiver-CavGAA6k.js → otlpReceiver-BntK801g.js} +154 -98
  212. package/dist/src/{otlpReceiver-C9KlUtxh.js → otlpReceiver-DmVulbhC.js} +154 -98
  213. package/dist/src/{providerRegistry-BkzVH5Ba.js → providerRegistry-Bvh8mv85.js} +2 -2
  214. package/dist/src/{providerRegistry-CUWki5mQ.js → providerRegistry-CPQ_CmVO.js} +2 -2
  215. package/dist/src/{providerRegistry-BTDgfV5h.cjs → providerRegistry-CQMdTmHP.cjs} +2 -2
  216. package/dist/src/{providerRegistry-B9lh-_tx.js → providerRegistry-CWoPjKFZ.js} +2 -2
  217. package/dist/src/{providers-CScd1wN6.cjs → providers-1eKkXBKp.cjs} +792 -556
  218. package/dist/src/{providers-Ch6Mr0gn.js → providers-BV_KMZje.js} +699 -493
  219. package/dist/src/providers-Bp4S-FvO.js +2 -0
  220. package/dist/src/providers-DV3ax9e_.cjs +3 -0
  221. package/dist/src/{providers-DvddrgxL.js → providers-Domz_llv.js} +707 -501
  222. package/dist/src/{providers-Cn73d5sr.js → providers-DruaQfwu.js} +704 -498
  223. package/dist/src/providers-iUt5fbAN.js +3 -0
  224. package/dist/src/providers-u9Enmfok.js +2 -0
  225. package/dist/src/python/persistent_wrapper.py +0 -5
  226. package/dist/src/{pythonUtils-Cpo0Ez1p.js → pythonUtils-C2UQ30Rz.js} +3 -3
  227. package/dist/src/{pythonUtils-Bzwbgpbg.js → pythonUtils-Cldx7huE.js} +3 -3
  228. package/dist/src/{pythonUtils-wIqk7zAf.js → pythonUtils-CnndUbW-.js} +3 -3
  229. package/dist/src/{pythonUtils-dAVigVK-.cjs → pythonUtils-tAJvvpS-.cjs} +3 -3
  230. package/dist/src/{quiverai-BeofbLVc.js → quiverai-CtWi6x_g.js} +4 -4
  231. package/dist/src/{quiverai-CcUhPIBg.cjs → quiverai-DFotyafY.cjs} +4 -4
  232. package/dist/src/{quiverai-DVSEqJiq.js → quiverai-DR0SnIQV.js} +4 -4
  233. package/dist/src/{quiverai-CCQn73lq.js → quiverai-aPPvXOgn.js} +4 -5
  234. package/dist/src/render-CH-62LbA.js +135 -0
  235. package/dist/src/render-CMEpfLaO.js +136 -0
  236. package/dist/src/{render-BHl6QVq9.js → render-CgVDrJmM.js} +2 -3
  237. package/dist/src/render-DHIZ6_k8.js +135 -0
  238. package/dist/src/render-DfQSFxGE.cjs +165 -0
  239. package/dist/src/{responses-CQb1Tj69.js → responses--OsX2aYW.js} +17 -12
  240. package/dist/src/{responses-mo0KQDbu.cjs → responses-Bi9vBuW_.cjs} +18 -13
  241. package/dist/src/{responses-CgNyTPsY.js → responses-C-flexAY.js} +18 -13
  242. package/dist/src/{responses-BKP_WYis.js → responses-DL9m8CyY.js} +18 -13
  243. package/dist/src/{rubyUtils-CGeUtCfW.cjs → rubyUtils-B6eljPuh.cjs} +3 -3
  244. package/dist/src/{rubyUtils-DECSbsfY.js → rubyUtils-CYSQEG4a.js} +3 -3
  245. package/dist/src/rubyUtils-D1L2d3jb.js +3 -0
  246. package/dist/src/rubyUtils-DUbq4tff.cjs +2 -0
  247. package/dist/src/{rubyUtils-PgU-gHmx.js → rubyUtils-DVLeA2jg.js} +3 -3
  248. package/dist/src/{rubyUtils-CiVfln3g.js → rubyUtils-DsGrTx8R.js} +3 -3
  249. package/dist/src/{sagemaker-CqeASYE5.js → sagemaker-BVkaG2-l.js} +14 -18
  250. package/dist/src/{sagemaker-CVv8W7so.js → sagemaker-BveBvuxm.js} +14 -18
  251. package/dist/src/{sagemaker-MUbD5V3v.js → sagemaker-D67yzMzs.js} +14 -19
  252. package/dist/src/{sagemaker-jiw1wQa-.cjs → sagemaker-XnfhheQv.cjs} +14 -18
  253. package/dist/src/{scanner-DVDeUz1r.js → scanner-1DqWi1Ej.js} +130 -35
  254. package/dist/src/server/golang/wrapper.go +1 -1
  255. package/dist/src/server/index.js +3596 -2098
  256. package/dist/src/server/python/persistent_wrapper.py +0 -5
  257. package/dist/src/{server-DZ9MtCn0.js → server-BNYztJkh.js} +128 -9
  258. package/dist/src/{server-Cns05F1j.js → server-BSB45Nt9.js} +127 -8
  259. package/dist/src/{server-CP9qKM40.js → server-D6Il2Sob.js} +126 -7
  260. package/dist/src/server-DCtHUqlp.js +3 -0
  261. package/dist/src/server-DaA2eR26.cjs +2 -0
  262. package/dist/src/{server-BtoCXeXI.cjs → server-Dx2TyCH2.cjs} +140 -6
  263. package/dist/src/{signal-C3ZTsUgi.js → signal-CE5G3a7x.js} +3 -3
  264. package/dist/src/{slack-94iG3T0s.cjs → slack-1Rhq0EoV.cjs} +2 -2
  265. package/dist/src/{slack-BR0HtO3K.js → slack-D5Wpy8LM.js} +2 -2
  266. package/dist/src/{slack-DCEV-vWP.js → slack-DDUe-5MC.js} +2 -2
  267. package/dist/src/{slack-2sdpGzbt.js → slack-acRb0IqQ.js} +2 -2
  268. package/dist/src/store-CWOSz6D_.cjs +2 -0
  269. package/dist/src/{store-P8OKm19S.js → store-CYEy5J2D.js} +3 -3
  270. package/dist/src/{store-CLyU7AtI.cjs → store-DAAyxcy6.cjs} +3 -3
  271. package/dist/src/store-DCDBhv7B.js +3 -0
  272. package/dist/src/{store-VB0GP46K.js → store-Dn9HUkdW.js} +3 -3
  273. package/dist/src/{store-Cj258DgL.js → store-M0b1WfYb.js} +3 -3
  274. package/dist/src/{tables-DmzvLbeZ.js → tables-C4CH3zRr.js} +3 -3
  275. package/dist/src/{tables-BEIFz2tM.js → tables-CsWou1Bx.js} +3 -3
  276. package/dist/src/{tables-kC7R5kiK.js → tables-DQ4WU5tX.js} +3 -3
  277. package/dist/src/{tables-BdZQEpRz.cjs → tables-DUfh1F7Z.cjs} +3 -3
  278. package/dist/src/telemetry-C1IqxcdW.js +3 -0
  279. package/dist/src/telemetry-C4ZEa_es.cjs +2 -0
  280. package/dist/src/{telemetry-BnH5VJAU.js → telemetry-CQPez_Jp.js} +4 -4
  281. package/dist/src/{telemetry-re627Lre.cjs → telemetry-Dsw_faFj.cjs} +4 -4
  282. package/dist/src/{telemetry-BugWqKiu.js → telemetry-Dvqxv3YC.js} +4 -4
  283. package/dist/src/{telemetry-DPXLd7UE.js → telemetry-dbaJ0E98.js} +4 -4
  284. package/dist/src/{text-CW1cyrwj.cjs → text-BVi-cLPJ.cjs} +1 -1
  285. package/dist/src/{text-B_UCRPp2.js → text-CZr46tp_.js} +1 -1
  286. package/dist/src/{text-TIv0QYnd.js → text-DHxdyQqT.js} +1 -1
  287. package/dist/src/{text-Db-Wt2u2.js → text-KvuD2Iko.js} +1 -1
  288. package/dist/src/{tokenUsageUtils-bVa1ga6f.cjs → tokenUsageUtils-Bb7DkZPz.cjs} +7 -3
  289. package/dist/src/{tokenUsageUtils-BDGe-iyI.js → tokenUsageUtils-C-bmyHoE.js} +7 -3
  290. package/dist/src/{tokenUsageUtils-DflFMjS0.js → tokenUsageUtils-CXrvO-wA.js} +7 -3
  291. package/dist/src/{transcription-BvtsrzRG.cjs → transcription-BvjmiYB1.cjs} +9 -13
  292. package/dist/src/{transcription-Hb3VnC4M.js → transcription-CJspiD2c.js} +8 -11
  293. package/dist/src/{transcription-CaMivnjG.js → transcription-DuWDupG7.js} +7 -11
  294. package/dist/src/{transcription-DOMMTu01.js → transcription-V2HaAmy2.js} +7 -13
  295. package/dist/src/{transform-BqPkNPYm.js → transform-Bbg6A8Jk.js} +4 -4
  296. package/dist/src/{transform-DrleutM3.js → transform-CG0ehZNG.js} +9 -8
  297. package/dist/src/{transform-0BwoBsvO.cjs → transform-CTeuTR3S.cjs} +16 -8
  298. package/dist/src/{transform-ZrG2dvlo.cjs → transform-CUnzlsbn.cjs} +4 -4
  299. package/dist/src/{transform-BzK09Q_9.js → transform-DYX1_Xnh.js} +5 -5
  300. package/dist/src/transform-DgKlRr73.cjs +2 -0
  301. package/dist/src/transform-M6ITAESf.js +3 -0
  302. package/dist/src/{transform-ljLYHEPh.js → transform-UN5UGu8U.js} +5 -5
  303. package/dist/src/{transform-B2-jIv68.js → transform-lQrDE1BQ.js} +8 -6
  304. package/dist/src/{transform-DyDAwEpE.js → transform-zDhMmzwX.js} +10 -7
  305. package/dist/src/{transformersAvailability-BGkzavwb.js → transformersAvailability-CcHusyhw.js} +1 -1
  306. package/dist/src/{transformersAvailability-DKoRtQLy.cjs → transformersAvailability-Cju9mHgR.cjs} +1 -1
  307. package/dist/src/{transformersAvailability-D6c6ROpT.js → transformersAvailability-DLlROWhg.js} +1 -1
  308. package/dist/src/{types-q8GXGF65.js → types-BGQDAP8i.js} +351 -22
  309. package/dist/src/{types-Cd3ygw8W.js → types-Bgh5SOn6.js} +352 -24
  310. package/dist/src/{types-D8cGDZbL.cjs → types-CeaeaZdP.cjs} +387 -22
  311. package/dist/src/{types-CIhFeUC4.js → types-Dm9JM6Vb.js} +362 -23
  312. package/dist/src/{util-vNmDL5DT.js → util-BYvQUPp7.js} +138 -36
  313. package/dist/src/{util-CuLo2pMR.cjs → util-Bxn8emtE.cjs} +14 -167
  314. package/dist/src/{util-BLvy9qfE.js → util-C8e5uydV.js} +18 -141
  315. package/dist/src/{util-DM2rTn_6.js → util-C9J8ahRn.js} +4 -4
  316. package/dist/src/{util-CFj4YKIn.cjs → util-CN3SrLT4.cjs} +4 -4
  317. package/dist/src/{util-BtoGs5Cb.js → util-D3q0WQ-0.js} +4 -4
  318. package/dist/src/{util-CgDCK4KI.js → util-D9TisOyk.js} +4 -4
  319. package/dist/src/{util-DMFeUvLz.js → util-DDs-7g6-.js} +138 -36
  320. package/dist/src/{util-DbVG-yZU.js → util-DvU2Pw8c.js} +138 -36
  321. package/dist/src/{util-Bm3E9jpK.js → util-DxWpWjhc.js} +12 -135
  322. package/dist/src/{util-CMMkIxfU.js → util-oGMLA7vc.js} +16 -139
  323. package/dist/src/{util--9u9UVCt.cjs → util-olYL5C6N.cjs} +143 -35
  324. package/dist/src/{utils-DKw8mrgr.cjs → utils-B05gLxER.cjs} +6 -4
  325. package/dist/src/{utils-DEuL4VNB.js → utils-BLJKfv0y.js} +6 -4
  326. package/dist/src/{utils-DOjD4dTC.js → utils-DJfvjyMj.js} +6 -4
  327. package/dist/src/{utils-CFxO9KGo.js → utils-hXtCYanr.js} +6 -4
  328. package/dist/tsconfig.tsbuildinfo +1 -1
  329. package/package.json +51 -42
  330. package/dist/src/app/assets/index-B6l9CVVb.js +0 -439
  331. package/dist/src/app/assets/index-DyZ0Ep37.css +0 -1
  332. package/dist/src/app/assets/scroll-timeline-BdJZVXlz.js +0 -1
  333. package/dist/src/app/assets/sync-CStkzc6u.js +0 -4
  334. package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +0 -36
  335. package/dist/src/app/assets/vendor-markdown-Bz7N-ca6.js +0 -29
  336. package/dist/src/app/assets/vendor-react-AtKqiNEf.js +0 -4
  337. package/dist/src/app/assets/vendor-syntax-D06x6TQF.js +0 -2
  338. package/dist/src/app/assets/vendor-utils-BvMHZmO7.js +0 -37
  339. package/dist/src/cache-C5yFZ4gC.cjs +0 -816
  340. package/dist/src/cache-CaT5tPgo.js +0 -756
  341. package/dist/src/cache-CyCanoMu.js +0 -6
  342. package/dist/src/cache-DSqR6ezl.js +0 -726
  343. package/dist/src/cache-Df_QFDNu.cjs +0 -5
  344. package/dist/src/cache-HP0NP4k3.js +0 -756
  345. package/dist/src/cloud-DE3t1-ZI.js +0 -4
  346. package/dist/src/codex-sdk-BQEw16R_.js +0 -834
  347. package/dist/src/codex-sdk-C_07GuVS.js +0 -834
  348. package/dist/src/codex-sdk-DE5G18dx.js +0 -835
  349. package/dist/src/codex-sdk-ZLKfDjqP.cjs +0 -838
  350. package/dist/src/eval-7aEqoMs3.js +0 -15
  351. package/dist/src/evalResult-CYNHkk5A.js +0 -12
  352. package/dist/src/evalResult-CuvJeNiM.js +0 -10
  353. package/dist/src/evalResult-tGdilrWt.cjs +0 -10
  354. package/dist/src/evaluator-BBUqRhz1.js +0 -36
  355. package/dist/src/fetch-UWU706qb.js +0 -5
  356. package/dist/src/graders-BxfEguVY.js +0 -32
  357. package/dist/src/graders-CzVMbEnv.js +0 -34
  358. package/dist/src/graders-DjCXfj0l.cjs +0 -32
  359. package/dist/src/graders-kHzIWOKu.js +0 -32
  360. package/dist/src/openclaw-0Sv7AK3O.js +0 -580
  361. package/dist/src/openclaw-CXxbKgDH.cjs +0 -586
  362. package/dist/src/openclaw-D1FSCps-.js +0 -580
  363. package/dist/src/openclaw-D2ENvu7a.js +0 -582
  364. package/dist/src/providers-BSLEaIQG.js +0 -32
  365. package/dist/src/providers-D-FnDg8k.cjs +0 -31
  366. package/dist/src/providers-DEYiFVAo.js +0 -30
  367. package/dist/src/providers-sS2WI8YD.js +0 -30
  368. package/dist/src/rubyUtils-B1HXG4ej.cjs +0 -4
  369. package/dist/src/rubyUtils-Rt6pKA96.js +0 -5
  370. package/dist/src/server-B0Xh1Gx-.js +0 -7
  371. package/dist/src/server-DJTKu9IR.cjs +0 -5
  372. package/dist/src/store-C5u6MgC8.js +0 -6
  373. package/dist/src/store-CNHk-De4.cjs +0 -5
  374. package/dist/src/telemetry-Yig0Tino.js +0 -7
  375. package/dist/src/telemetry-p8Pwqm1i.cjs +0 -5
  376. package/dist/src/tokenUsageUtils-NYT-WKS6.js +0 -138
  377. package/dist/src/transform-ChNIpHz7.js +0 -6
  378. package/dist/src/transform-PtQ6rAE3.cjs +0 -5
@@ -1,13 +1,14 @@
1
- import { C as getEnvString, D as state, S as getEnvInt, a as logger, b as getEnvBool, x as getEnvFloat } from "./logger-BnkjG2jt.js";
2
- import { C as transformTools, S as transformToolChoice, b as parseChatPrompt, p as REQUEST_TIMEOUT_MS } from "./fetch-BiYv2BZc.js";
3
- import { r as importModule } from "./esm-CKWP3u_P.js";
4
- import { i as isJavascriptFile } from "./fileExtensions-LcDYkU4v.js";
5
- import { r as fetchWithCache } from "./cache-HP0NP4k3.js";
6
- import { n as withGenAISpan } from "./genaiTracer-70Z8BIuV.js";
7
- import { D as maybeLoadResponseFormatFromExternalFile, E as maybeLoadFromExternalFileWithVars, N as renderVarsInObject, O as maybeLoadToolsFromExternalFile } from "./util-BLvy9qfE.js";
8
- import { D as getAuthQueryParams, E as getAuthHeaders, O as getOAuthTokenWithExpiry, T as applyQueryParams, i as transformMCPToolsToOpenAi, k as renderAuthVars } from "./transform-B2-jIv68.js";
9
- import { t as OpenAiGenericProvider } from "./openai-D6wITiVn.js";
10
- import { a as calculateOpenAICost, c as getTokenUsage, t as OPENAI_CHAT_MODELS } from "./util-BtoGs5Cb.js";
1
+ import { C as getEnvFloat, S as getEnvBool, T as getEnvString, a as logger, k as state, w as getEnvInt } from "./logger-B88EkIn6.js";
2
+ import { S as parseChatPrompt, T as transformTools, h as REQUEST_TIMEOUT_MS, w as transformToolChoice } from "./fetch-B0Z3Oe4k.js";
3
+ import { r as importModule } from "./esm-Dh4dOLlt.js";
4
+ import { n as withGenAISpan } from "./genaiTracer-COYDi-tC.js";
5
+ import { n as renderVarsInObject } from "./render-DHIZ6_k8.js";
6
+ import { i as isJavascriptFile } from "./fileExtensions-BArZuxsI.js";
7
+ import { r as fetchWithCache } from "./cache-C4Xb-hNb.js";
8
+ import { D as maybeLoadResponseFormatFromExternalFile, E as maybeLoadFromExternalFileWithVars, O as maybeLoadToolsFromExternalFile } from "./util-C8e5uydV.js";
9
+ import { A as renderAuthVars, D as getAuthHeaders, E as applyQueryParams, O as getAuthQueryParams, i as transformMCPToolsToOpenAi, k as getOAuthTokenWithExpiry } from "./transform-lQrDE1BQ.js";
10
+ import { t as OpenAiGenericProvider } from "./openai-DhVEmgeZ.js";
11
+ import { a as calculateOpenAICost, c as getTokenUsage, t as OPENAI_CHAT_MODELS } from "./util-D3q0WQ-0.js";
11
12
  import path from "path";
12
13
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
13
14
  //#region src/util/finishReason.ts
@@ -24,13 +25,14 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
24
25
  *
25
26
  * **Provider Mappings:**
26
27
  * - OpenAI: `function_call` (legacy) → `tool_calls` (current)
27
- * - Anthropic: `end_turn` → `stop`, `stop_sequence` → `stop`, `max_tokens` → `length`, `tool_use` → `tool_calls`
28
+ * - Anthropic: `end_turn` → `stop`, `stop_sequence` → `stop`, `max_tokens` → `length`, `tool_use` → `tool_calls`, `refusal` → `content_filter`, `pause_turn` → `pause_turn`
28
29
  *
29
30
  * @example
30
31
  * ```typescript
31
32
  * normalizeFinishReason('end_turn') // Returns: 'stop'
32
33
  * normalizeFinishReason('max_tokens') // Returns: 'length'
33
34
  * normalizeFinishReason('tool_use') // Returns: 'tool_calls'
35
+ * normalizeFinishReason('refusal') // Returns: 'content_filter'
34
36
  * normalizeFinishReason('function_call') // Returns: 'tool_calls'
35
37
  * normalizeFinishReason('unknown') // Returns: 'unknown' (passthrough)
36
38
  * ```
@@ -44,7 +46,9 @@ const FINISH_REASON_MAP = {
44
46
  end_turn: "stop",
45
47
  stop_sequence: "stop",
46
48
  max_tokens: "length",
47
- tool_use: "tool_calls"
49
+ tool_use: "tool_calls",
50
+ refusal: "content_filter",
51
+ pause_turn: "pause_turn"
48
52
  };
49
53
  /**
50
54
  * Normalize a provider-specific finish or stop reason to a standard OpenAI-compatible value.
@@ -100,7 +104,7 @@ var MCPClient = class {
100
104
  transports = /* @__PURE__ */ new Map();
101
105
  oauthConfigs = /* @__PURE__ */ new Map();
102
106
  tokenExpiresAt = /* @__PURE__ */ new Map();
103
- tokenRefreshPromise = /* @__PURE__ */ new Map();
107
+ tokenRefreshLocks = /* @__PURE__ */ new Map();
104
108
  get hasInitialized() {
105
109
  return this.clients.size > 0;
106
110
  }
@@ -232,31 +236,36 @@ var MCPClient = class {
232
236
  async refreshOAuthTokenIfNeeded(serverKey) {
233
237
  const oauthConfig = this.oauthConfigs.get(serverKey);
234
238
  if (!oauthConfig) return;
235
- const now = Date.now();
239
+ await this.refreshOAuthToken(serverKey, oauthConfig, false);
240
+ }
241
+ hasValidToken(serverKey) {
236
242
  const expiresAt = this.tokenExpiresAt.get(serverKey);
237
- if (expiresAt && now + 6e4 < expiresAt) {
238
- logger.debug(`[MCP] Token for ${serverKey} still valid, no refresh needed`);
239
- return;
240
- }
241
- const existingRefresh = this.tokenRefreshPromise.get(serverKey);
242
- if (existingRefresh) {
243
+ return expiresAt != null && this.clients.has(serverKey) && Date.now() + 6e4 < expiresAt;
244
+ }
245
+ async refreshOAuthToken(serverKey, oauthConfig, forceRefresh) {
246
+ while (true) {
247
+ const existingRefreshPromise = this.tokenRefreshLocks.get(serverKey)?.promise;
248
+ if (!existingRefreshPromise) break;
243
249
  logger.debug(`[MCP] Token refresh already in progress for ${serverKey}, waiting...`);
244
250
  try {
245
- await existingRefresh;
246
- const newExpiresAt = this.tokenExpiresAt.get(serverKey);
247
- if (newExpiresAt && Date.now() + 6e4 < newExpiresAt) return;
248
- logger.debug(`[MCP] Token expired while waiting for ${serverKey}, refreshing again...`);
251
+ await existingRefreshPromise;
252
+ if (this.hasValidToken(serverKey)) return;
253
+ logger.debug(`[MCP] Token still needs refresh for ${serverKey}, refreshing again...`);
249
254
  } catch {
250
255
  logger.debug(`[MCP] Previous token refresh failed for ${serverKey}, retrying...`);
251
256
  }
252
257
  }
253
- logger.debug(`[MCP] Proactively refreshing OAuth token for server ${serverKey}`);
254
- const refreshPromise = this.performTokenRefresh(serverKey, oauthConfig);
255
- this.tokenRefreshPromise.set(serverKey, refreshPromise);
258
+ if (!forceRefresh && this.hasValidToken(serverKey)) {
259
+ logger.debug(`[MCP] Token for ${serverKey} still valid, no refresh needed`);
260
+ return;
261
+ }
262
+ logger.debug(`[MCP] Refreshing OAuth token for server ${serverKey}`);
263
+ const refreshLock = { promise: this.performTokenRefresh(serverKey, oauthConfig) };
264
+ this.tokenRefreshLocks.set(serverKey, refreshLock);
256
265
  try {
257
- await refreshPromise;
266
+ await refreshLock.promise;
258
267
  } finally {
259
- if (this.tokenRefreshPromise.get(serverKey) === refreshPromise) this.tokenRefreshPromise.delete(serverKey);
268
+ if (this.tokenRefreshLocks.get(serverKey) === refreshLock) this.tokenRefreshLocks.delete(serverKey);
260
269
  }
261
270
  }
262
271
  /**
@@ -274,9 +283,21 @@ var MCPClient = class {
274
283
  }
275
284
  async callTool(name, args) {
276
285
  const requestOptions = getEffectiveRequestOptions(this.config);
277
- for (const [serverKey, client] of this.clients.entries()) if ((this.tools.get(serverKey) || []).some((tool) => tool.name === name)) {
278
- await this.refreshOAuthTokenIfNeeded(serverKey);
279
- let currentClient = this.clients.get(serverKey) || client;
286
+ const disconnectedServers = [];
287
+ for (const [serverKey, serverTools] of this.tools.entries()) if (serverTools.some((tool) => tool.name === name)) {
288
+ try {
289
+ await this.refreshOAuthTokenIfNeeded(serverKey);
290
+ } catch (error) {
291
+ const errorMessage = error instanceof Error ? error.message : String(error);
292
+ logger.debug(`[MCP] Failed to refresh OAuth token for ${serverKey}, trying the next matching server: ${errorMessage}`);
293
+ }
294
+ const client = this.clients.get(serverKey);
295
+ if (!client) {
296
+ logger.debug(`[MCP] Server ${serverKey} is not connected, trying the next matching server`);
297
+ disconnectedServers.push(serverKey);
298
+ continue;
299
+ }
300
+ let currentClient = client;
280
301
  let retried = false;
281
302
  while (true) try {
282
303
  const result = await currentClient.callTool({
@@ -301,7 +322,7 @@ var MCPClient = class {
301
322
  logger.debug(`[MCP] Auth error for ${serverKey}, attempting reactive token refresh`);
302
323
  retried = true;
303
324
  try {
304
- await this.performTokenRefresh(serverKey, oauthConfig);
325
+ await this.refreshOAuthToken(serverKey, oauthConfig, true);
305
326
  const newClient = this.clients.get(serverKey);
306
327
  if (newClient) {
307
328
  currentClient = newClient;
@@ -319,6 +340,10 @@ var MCPClient = class {
319
340
  };
320
341
  }
321
342
  }
343
+ if (disconnectedServers.length > 0) {
344
+ const plural = disconnectedServers.length > 1 ? "s are" : " is";
345
+ throw new Error(`Tool ${name} is known but MCP server${plural} disconnected: ${disconnectedServers.join(", ")}`);
346
+ }
322
347
  throw new Error(`Tool ${name} not found in any connected MCP server`);
323
348
  }
324
349
  async cleanup() {
@@ -334,7 +359,7 @@ var MCPClient = class {
334
359
  this.tools.clear();
335
360
  this.oauthConfigs.clear();
336
361
  this.tokenExpiresAt.clear();
337
- this.tokenRefreshPromise.clear();
362
+ this.tokenRefreshLocks.clear();
338
363
  }
339
364
  };
340
365
  //#endregion
@@ -349,7 +374,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends Op
349
374
  constructor(modelName, options = {}) {
350
375
  if (!OpenAiChatCompletionProvider.OPENAI_CHAT_MODEL_NAMES.includes(modelName)) logger.debug(`Using unknown chat model: ${modelName}`);
351
376
  super(modelName, options);
352
- this.config = options.config || {};
377
+ this.config = options.config ? { ...options.config } : {};
353
378
  if (this.config.mcp?.enabled) this.initializationPromise = this.initializeMCP();
354
379
  }
355
380
  async initializeMCP() {
@@ -487,6 +512,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends Op
487
512
  if (config.user) body.user = config.user;
488
513
  if (config.metadata) body.metadata = config.metadata;
489
514
  if (config.store !== void 0) body.store = config.store;
515
+ if ((isReasoningModel || isGPT5Model) && "max_tokens" in body) delete body.max_tokens;
490
516
  return {
491
517
  body,
492
518
  config
@@ -494,7 +520,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends Op
494
520
  }
495
521
  async callApi(prompt, context, callApiOptions) {
496
522
  if (this.initializationPromise != null) await this.initializationPromise;
497
- if (this.requiresApiKey() && !this.getApiKey()) throw new Error(`API key is not set. Set the ${this.config.apiKeyEnvar || "OPENAI_API_KEY"} environment variable or add \`apiKey\` to the provider config.`);
523
+ if (this.requiresApiKey() && !this.getApiKey()) throw new Error(this.getMissingApiKeyErrorMessage());
498
524
  const spanContext = {
499
525
  system: "openai",
500
526
  operationName: "chat",
@@ -763,4 +789,4 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends Op
763
789
  //#endregion
764
790
  export { normalizeFinishReason as i, MCPClient as n, FINISH_REASON_MAP as r, OpenAiChatCompletionProvider as t };
765
791
 
766
- //# sourceMappingURL=chat-B0iaWhoh.js.map
792
+ //# sourceMappingURL=chat-BfPaS15_.js.map
@@ -1,13 +1,14 @@
1
- const require_logger = require("./logger-D5iKBpu_.cjs");
2
- const require_esm = require("./esm-CipptfDu.cjs");
1
+ const require_logger = require("./logger-COuQb2xB.cjs");
2
+ const require_esm = require("./esm-CtEPLdAj.cjs");
3
3
  const require_fileExtensions = require("./fileExtensions-bYh77CN8.cjs");
4
- const require_util = require("./util-CuLo2pMR.cjs");
5
- const require_fetch = require("./fetch-BnR9wSnm.cjs");
6
- const require_cache = require("./cache-C5yFZ4gC.cjs");
7
- const require_genaiTracer = require("./genaiTracer-BfxrvSUb.cjs");
8
- const require_transform = require("./transform-0BwoBsvO.cjs");
9
- const require_openai = require("./openai-CoxGAQwn.cjs");
10
- const require_util$1 = require("./util-CFj4YKIn.cjs");
4
+ const require_util = require("./util-Bxn8emtE.cjs");
5
+ const require_render = require("./render-DfQSFxGE.cjs");
6
+ const require_fetch = require("./fetch-CJU5ELPa.cjs");
7
+ const require_cache = require("./cache-BIyPcp5v.cjs");
8
+ const require_genaiTracer = require("./genaiTracer-yRuxj9-L.cjs");
9
+ const require_transform = require("./transform-CTeuTR3S.cjs");
10
+ const require_openai = require("./openai-URNyItar.cjs");
11
+ const require_util$1 = require("./util-CN3SrLT4.cjs");
11
12
  let path = require("path");
12
13
  path = require_logger.__toESM(path);
13
14
  let _modelcontextprotocol_sdk_client_index_js = require("@modelcontextprotocol/sdk/client/index.js");
@@ -25,13 +26,14 @@ let _modelcontextprotocol_sdk_client_index_js = require("@modelcontextprotocol/s
25
26
  *
26
27
  * **Provider Mappings:**
27
28
  * - OpenAI: `function_call` (legacy) → `tool_calls` (current)
28
- * - Anthropic: `end_turn` → `stop`, `stop_sequence` → `stop`, `max_tokens` → `length`, `tool_use` → `tool_calls`
29
+ * - Anthropic: `end_turn` → `stop`, `stop_sequence` → `stop`, `max_tokens` → `length`, `tool_use` → `tool_calls`, `refusal` → `content_filter`, `pause_turn` → `pause_turn`
29
30
  *
30
31
  * @example
31
32
  * ```typescript
32
33
  * normalizeFinishReason('end_turn') // Returns: 'stop'
33
34
  * normalizeFinishReason('max_tokens') // Returns: 'length'
34
35
  * normalizeFinishReason('tool_use') // Returns: 'tool_calls'
36
+ * normalizeFinishReason('refusal') // Returns: 'content_filter'
35
37
  * normalizeFinishReason('function_call') // Returns: 'tool_calls'
36
38
  * normalizeFinishReason('unknown') // Returns: 'unknown' (passthrough)
37
39
  * ```
@@ -45,7 +47,9 @@ const FINISH_REASON_MAP = {
45
47
  end_turn: "stop",
46
48
  stop_sequence: "stop",
47
49
  max_tokens: "length",
48
- tool_use: "tool_calls"
50
+ tool_use: "tool_calls",
51
+ refusal: "content_filter",
52
+ pause_turn: "pause_turn"
49
53
  };
50
54
  /**
51
55
  * Normalize a provider-specific finish or stop reason to a standard OpenAI-compatible value.
@@ -101,7 +105,7 @@ var MCPClient = class {
101
105
  transports = /* @__PURE__ */ new Map();
102
106
  oauthConfigs = /* @__PURE__ */ new Map();
103
107
  tokenExpiresAt = /* @__PURE__ */ new Map();
104
- tokenRefreshPromise = /* @__PURE__ */ new Map();
108
+ tokenRefreshLocks = /* @__PURE__ */ new Map();
105
109
  get hasInitialized() {
106
110
  return this.clients.size > 0;
107
111
  }
@@ -233,31 +237,36 @@ var MCPClient = class {
233
237
  async refreshOAuthTokenIfNeeded(serverKey) {
234
238
  const oauthConfig = this.oauthConfigs.get(serverKey);
235
239
  if (!oauthConfig) return;
236
- const now = Date.now();
240
+ await this.refreshOAuthToken(serverKey, oauthConfig, false);
241
+ }
242
+ hasValidToken(serverKey) {
237
243
  const expiresAt = this.tokenExpiresAt.get(serverKey);
238
- if (expiresAt && now + 6e4 < expiresAt) {
239
- require_logger.logger.debug(`[MCP] Token for ${serverKey} still valid, no refresh needed`);
240
- return;
241
- }
242
- const existingRefresh = this.tokenRefreshPromise.get(serverKey);
243
- if (existingRefresh) {
244
+ return expiresAt != null && this.clients.has(serverKey) && Date.now() + 6e4 < expiresAt;
245
+ }
246
+ async refreshOAuthToken(serverKey, oauthConfig, forceRefresh) {
247
+ while (true) {
248
+ const existingRefreshPromise = this.tokenRefreshLocks.get(serverKey)?.promise;
249
+ if (!existingRefreshPromise) break;
244
250
  require_logger.logger.debug(`[MCP] Token refresh already in progress for ${serverKey}, waiting...`);
245
251
  try {
246
- await existingRefresh;
247
- const newExpiresAt = this.tokenExpiresAt.get(serverKey);
248
- if (newExpiresAt && Date.now() + 6e4 < newExpiresAt) return;
249
- require_logger.logger.debug(`[MCP] Token expired while waiting for ${serverKey}, refreshing again...`);
252
+ await existingRefreshPromise;
253
+ if (this.hasValidToken(serverKey)) return;
254
+ require_logger.logger.debug(`[MCP] Token still needs refresh for ${serverKey}, refreshing again...`);
250
255
  } catch {
251
256
  require_logger.logger.debug(`[MCP] Previous token refresh failed for ${serverKey}, retrying...`);
252
257
  }
253
258
  }
254
- require_logger.logger.debug(`[MCP] Proactively refreshing OAuth token for server ${serverKey}`);
255
- const refreshPromise = this.performTokenRefresh(serverKey, oauthConfig);
256
- this.tokenRefreshPromise.set(serverKey, refreshPromise);
259
+ if (!forceRefresh && this.hasValidToken(serverKey)) {
260
+ require_logger.logger.debug(`[MCP] Token for ${serverKey} still valid, no refresh needed`);
261
+ return;
262
+ }
263
+ require_logger.logger.debug(`[MCP] Refreshing OAuth token for server ${serverKey}`);
264
+ const refreshLock = { promise: this.performTokenRefresh(serverKey, oauthConfig) };
265
+ this.tokenRefreshLocks.set(serverKey, refreshLock);
257
266
  try {
258
- await refreshPromise;
267
+ await refreshLock.promise;
259
268
  } finally {
260
- if (this.tokenRefreshPromise.get(serverKey) === refreshPromise) this.tokenRefreshPromise.delete(serverKey);
269
+ if (this.tokenRefreshLocks.get(serverKey) === refreshLock) this.tokenRefreshLocks.delete(serverKey);
261
270
  }
262
271
  }
263
272
  /**
@@ -275,9 +284,21 @@ var MCPClient = class {
275
284
  }
276
285
  async callTool(name, args) {
277
286
  const requestOptions = getEffectiveRequestOptions(this.config);
278
- for (const [serverKey, client] of this.clients.entries()) if ((this.tools.get(serverKey) || []).some((tool) => tool.name === name)) {
279
- await this.refreshOAuthTokenIfNeeded(serverKey);
280
- let currentClient = this.clients.get(serverKey) || client;
287
+ const disconnectedServers = [];
288
+ for (const [serverKey, serverTools] of this.tools.entries()) if (serverTools.some((tool) => tool.name === name)) {
289
+ try {
290
+ await this.refreshOAuthTokenIfNeeded(serverKey);
291
+ } catch (error) {
292
+ const errorMessage = error instanceof Error ? error.message : String(error);
293
+ require_logger.logger.debug(`[MCP] Failed to refresh OAuth token for ${serverKey}, trying the next matching server: ${errorMessage}`);
294
+ }
295
+ const client = this.clients.get(serverKey);
296
+ if (!client) {
297
+ require_logger.logger.debug(`[MCP] Server ${serverKey} is not connected, trying the next matching server`);
298
+ disconnectedServers.push(serverKey);
299
+ continue;
300
+ }
301
+ let currentClient = client;
281
302
  let retried = false;
282
303
  while (true) try {
283
304
  const result = await currentClient.callTool({
@@ -302,7 +323,7 @@ var MCPClient = class {
302
323
  require_logger.logger.debug(`[MCP] Auth error for ${serverKey}, attempting reactive token refresh`);
303
324
  retried = true;
304
325
  try {
305
- await this.performTokenRefresh(serverKey, oauthConfig);
326
+ await this.refreshOAuthToken(serverKey, oauthConfig, true);
306
327
  const newClient = this.clients.get(serverKey);
307
328
  if (newClient) {
308
329
  currentClient = newClient;
@@ -320,6 +341,10 @@ var MCPClient = class {
320
341
  };
321
342
  }
322
343
  }
344
+ if (disconnectedServers.length > 0) {
345
+ const plural = disconnectedServers.length > 1 ? "s are" : " is";
346
+ throw new Error(`Tool ${name} is known but MCP server${plural} disconnected: ${disconnectedServers.join(", ")}`);
347
+ }
323
348
  throw new Error(`Tool ${name} not found in any connected MCP server`);
324
349
  }
325
350
  async cleanup() {
@@ -335,7 +360,7 @@ var MCPClient = class {
335
360
  this.tools.clear();
336
361
  this.oauthConfigs.clear();
337
362
  this.tokenExpiresAt.clear();
338
- this.tokenRefreshPromise.clear();
363
+ this.tokenRefreshLocks.clear();
339
364
  }
340
365
  };
341
366
  //#endregion
@@ -350,7 +375,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends re
350
375
  constructor(modelName, options = {}) {
351
376
  if (!OpenAiChatCompletionProvider.OPENAI_CHAT_MODEL_NAMES.includes(modelName)) require_logger.logger.debug(`Using unknown chat model: ${modelName}`);
352
377
  super(modelName, options);
353
- this.config = options.config || {};
378
+ this.config = options.config ? { ...options.config } : {};
354
379
  if (this.config.mcp?.enabled) this.initializationPromise = this.initializeMCP();
355
380
  }
356
381
  async initializeMCP() {
@@ -449,7 +474,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends re
449
474
  const maxTokens = isReasoningModel || isGPT5Model ? void 0 : config.max_tokens ?? maxTokensDefault;
450
475
  const temperatureDefault = config.omitDefaults ? require_logger.getEnvString("OPENAI_TEMPERATURE") === void 0 ? void 0 : require_logger.getEnvFloat("OPENAI_TEMPERATURE") : require_logger.getEnvFloat("OPENAI_TEMPERATURE", 0);
451
476
  const temperature = this.supportsTemperature() ? config.temperature ?? temperatureDefault : void 0;
452
- const reasoningEffort = isReasoningModel ? require_util.renderVarsInObject(config.reasoning_effort, context?.vars) : void 0;
477
+ const reasoningEffort = isReasoningModel ? require_render.renderVarsInObject(config.reasoning_effort, context?.vars) : void 0;
453
478
  const mcpTools = this.mcpClient ? require_transform.transformMCPToolsToOpenAi(this.mcpClient.getAllTools()) : [];
454
479
  const fileTools = require_fetch.transformTools(config.tools ? await require_util.maybeLoadToolsFromExternalFile(config.tools, context?.vars) || [] : [], "openai");
455
480
  const allTools = [...mcpTools, ...fileTools];
@@ -488,6 +513,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends re
488
513
  if (config.user) body.user = config.user;
489
514
  if (config.metadata) body.metadata = config.metadata;
490
515
  if (config.store !== void 0) body.store = config.store;
516
+ if ((isReasoningModel || isGPT5Model) && "max_tokens" in body) delete body.max_tokens;
491
517
  return {
492
518
  body,
493
519
  config
@@ -495,7 +521,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends re
495
521
  }
496
522
  async callApi(prompt, context, callApiOptions) {
497
523
  if (this.initializationPromise != null) await this.initializationPromise;
498
- if (this.requiresApiKey() && !this.getApiKey()) throw new Error(`API key is not set. Set the ${this.config.apiKeyEnvar || "OPENAI_API_KEY"} environment variable or add \`apiKey\` to the provider config.`);
524
+ if (this.requiresApiKey() && !this.getApiKey()) throw new Error(this.getMissingApiKeyErrorMessage());
499
525
  const spanContext = {
500
526
  system: "openai",
501
527
  operationName: "chat",
@@ -787,4 +813,4 @@ Object.defineProperty(exports, "normalizeFinishReason", {
787
813
  }
788
814
  });
789
815
 
790
- //# sourceMappingURL=chat-CM8qWR3_.cjs.map
816
+ //# sourceMappingURL=chat-CclRbxGf.cjs.map
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import { C as getEnvBool, E as getEnvString, T as getEnvInt, j as state, s as logger, w as getEnvFloat } from "./logger-BcJBzSSA.js";
3
- import { S as transformTools, f as REQUEST_TIMEOUT_MS, x as transformToolChoice, y as parseChatPrompt } from "./fetch-DoVRJZhJ.js";
4
- import { a as fetchWithCache } from "./cache-DSqR6ezl.js";
5
- import { i as isJavascriptFile } from "./fileExtensions-Ds-foDzt.js";
6
- import { g as maybeLoadToolsFromExternalFile, h as maybeLoadResponseFormatFromExternalFile, m as maybeLoadFromExternalFileWithVars, x as renderVarsInObject } from "./util-Bm3E9jpK.js";
7
- import { r as importModule } from "./esm-7UIl0pPM.js";
8
- import { n as withGenAISpan } from "./genaiTracer-C1rxGO8Q.js";
9
- import { D as getAuthQueryParams, E as getAuthHeaders, O as getOAuthTokenWithExpiry, T as applyQueryParams, i as transformMCPToolsToOpenAi, k as renderAuthVars } from "./transform-DrleutM3.js";
10
- import { t as OpenAiGenericProvider } from "./openai-BMcwgD5C.js";
11
- import { a as calculateOpenAICost, c as getTokenUsage, t as OPENAI_CHAT_MODELS } from "./util-DM2rTn_6.js";
2
+ import { D as getEnvInt, E as getEnvFloat, N as state, O as getEnvString, T as getEnvBool, s as logger } from "./logger-DksKw1Qc.js";
3
+ import { C as transformToolChoice, m as REQUEST_TIMEOUT_MS, w as transformTools, x as parseChatPrompt } from "./fetch-BEWnXrrG.js";
4
+ import { r as importModule } from "./esm-tVgYPY-f.js";
5
+ import { n as withGenAISpan } from "./genaiTracer-DWdZ28hY.js";
6
+ import { n as renderVarsInObject } from "./render-CMEpfLaO.js";
7
+ import { a as fetchWithCache } from "./cache-mb7c8hbp.js";
8
+ import { i as isJavascriptFile } from "./fileExtensions-AWa2ZML4.js";
9
+ import { g as maybeLoadToolsFromExternalFile, h as maybeLoadResponseFormatFromExternalFile, m as maybeLoadFromExternalFileWithVars } from "./util-DxWpWjhc.js";
10
+ import { A as renderAuthVars, D as getAuthHeaders, E as applyQueryParams, O as getAuthQueryParams, i as transformMCPToolsToOpenAi, k as getOAuthTokenWithExpiry } from "./transform-zDhMmzwX.js";
11
+ import { t as OpenAiGenericProvider } from "./openai-Qsvz25mV.js";
12
+ import { a as calculateOpenAICost, c as getTokenUsage, t as OPENAI_CHAT_MODELS } from "./util-C9J8ahRn.js";
12
13
  import path from "path";
13
14
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
14
15
  //#region src/util/finishReason.ts
@@ -25,13 +26,14 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
25
26
  *
26
27
  * **Provider Mappings:**
27
28
  * - OpenAI: `function_call` (legacy) → `tool_calls` (current)
28
- * - Anthropic: `end_turn` → `stop`, `stop_sequence` → `stop`, `max_tokens` → `length`, `tool_use` → `tool_calls`
29
+ * - Anthropic: `end_turn` → `stop`, `stop_sequence` → `stop`, `max_tokens` → `length`, `tool_use` → `tool_calls`, `refusal` → `content_filter`, `pause_turn` → `pause_turn`
29
30
  *
30
31
  * @example
31
32
  * ```typescript
32
33
  * normalizeFinishReason('end_turn') // Returns: 'stop'
33
34
  * normalizeFinishReason('max_tokens') // Returns: 'length'
34
35
  * normalizeFinishReason('tool_use') // Returns: 'tool_calls'
36
+ * normalizeFinishReason('refusal') // Returns: 'content_filter'
35
37
  * normalizeFinishReason('function_call') // Returns: 'tool_calls'
36
38
  * normalizeFinishReason('unknown') // Returns: 'unknown' (passthrough)
37
39
  * ```
@@ -45,7 +47,9 @@ const FINISH_REASON_MAP = {
45
47
  end_turn: "stop",
46
48
  stop_sequence: "stop",
47
49
  max_tokens: "length",
48
- tool_use: "tool_calls"
50
+ tool_use: "tool_calls",
51
+ refusal: "content_filter",
52
+ pause_turn: "pause_turn"
49
53
  };
50
54
  /**
51
55
  * Normalize a provider-specific finish or stop reason to a standard OpenAI-compatible value.
@@ -101,7 +105,7 @@ var MCPClient = class {
101
105
  transports = /* @__PURE__ */ new Map();
102
106
  oauthConfigs = /* @__PURE__ */ new Map();
103
107
  tokenExpiresAt = /* @__PURE__ */ new Map();
104
- tokenRefreshPromise = /* @__PURE__ */ new Map();
108
+ tokenRefreshLocks = /* @__PURE__ */ new Map();
105
109
  get hasInitialized() {
106
110
  return this.clients.size > 0;
107
111
  }
@@ -233,31 +237,36 @@ var MCPClient = class {
233
237
  async refreshOAuthTokenIfNeeded(serverKey) {
234
238
  const oauthConfig = this.oauthConfigs.get(serverKey);
235
239
  if (!oauthConfig) return;
236
- const now = Date.now();
240
+ await this.refreshOAuthToken(serverKey, oauthConfig, false);
241
+ }
242
+ hasValidToken(serverKey) {
237
243
  const expiresAt = this.tokenExpiresAt.get(serverKey);
238
- if (expiresAt && now + 6e4 < expiresAt) {
239
- logger.debug(`[MCP] Token for ${serverKey} still valid, no refresh needed`);
240
- return;
241
- }
242
- const existingRefresh = this.tokenRefreshPromise.get(serverKey);
243
- if (existingRefresh) {
244
+ return expiresAt != null && this.clients.has(serverKey) && Date.now() + 6e4 < expiresAt;
245
+ }
246
+ async refreshOAuthToken(serverKey, oauthConfig, forceRefresh) {
247
+ while (true) {
248
+ const existingRefreshPromise = this.tokenRefreshLocks.get(serverKey)?.promise;
249
+ if (!existingRefreshPromise) break;
244
250
  logger.debug(`[MCP] Token refresh already in progress for ${serverKey}, waiting...`);
245
251
  try {
246
- await existingRefresh;
247
- const newExpiresAt = this.tokenExpiresAt.get(serverKey);
248
- if (newExpiresAt && Date.now() + 6e4 < newExpiresAt) return;
249
- logger.debug(`[MCP] Token expired while waiting for ${serverKey}, refreshing again...`);
252
+ await existingRefreshPromise;
253
+ if (this.hasValidToken(serverKey)) return;
254
+ logger.debug(`[MCP] Token still needs refresh for ${serverKey}, refreshing again...`);
250
255
  } catch {
251
256
  logger.debug(`[MCP] Previous token refresh failed for ${serverKey}, retrying...`);
252
257
  }
253
258
  }
254
- logger.debug(`[MCP] Proactively refreshing OAuth token for server ${serverKey}`);
255
- const refreshPromise = this.performTokenRefresh(serverKey, oauthConfig);
256
- this.tokenRefreshPromise.set(serverKey, refreshPromise);
259
+ if (!forceRefresh && this.hasValidToken(serverKey)) {
260
+ logger.debug(`[MCP] Token for ${serverKey} still valid, no refresh needed`);
261
+ return;
262
+ }
263
+ logger.debug(`[MCP] Refreshing OAuth token for server ${serverKey}`);
264
+ const refreshLock = { promise: this.performTokenRefresh(serverKey, oauthConfig) };
265
+ this.tokenRefreshLocks.set(serverKey, refreshLock);
257
266
  try {
258
- await refreshPromise;
267
+ await refreshLock.promise;
259
268
  } finally {
260
- if (this.tokenRefreshPromise.get(serverKey) === refreshPromise) this.tokenRefreshPromise.delete(serverKey);
269
+ if (this.tokenRefreshLocks.get(serverKey) === refreshLock) this.tokenRefreshLocks.delete(serverKey);
261
270
  }
262
271
  }
263
272
  /**
@@ -275,9 +284,21 @@ var MCPClient = class {
275
284
  }
276
285
  async callTool(name, args) {
277
286
  const requestOptions = getEffectiveRequestOptions(this.config);
278
- for (const [serverKey, client] of this.clients.entries()) if ((this.tools.get(serverKey) || []).some((tool) => tool.name === name)) {
279
- await this.refreshOAuthTokenIfNeeded(serverKey);
280
- let currentClient = this.clients.get(serverKey) || client;
287
+ const disconnectedServers = [];
288
+ for (const [serverKey, serverTools] of this.tools.entries()) if (serverTools.some((tool) => tool.name === name)) {
289
+ try {
290
+ await this.refreshOAuthTokenIfNeeded(serverKey);
291
+ } catch (error) {
292
+ const errorMessage = error instanceof Error ? error.message : String(error);
293
+ logger.debug(`[MCP] Failed to refresh OAuth token for ${serverKey}, trying the next matching server: ${errorMessage}`);
294
+ }
295
+ const client = this.clients.get(serverKey);
296
+ if (!client) {
297
+ logger.debug(`[MCP] Server ${serverKey} is not connected, trying the next matching server`);
298
+ disconnectedServers.push(serverKey);
299
+ continue;
300
+ }
301
+ let currentClient = client;
281
302
  let retried = false;
282
303
  while (true) try {
283
304
  const result = await currentClient.callTool({
@@ -302,7 +323,7 @@ var MCPClient = class {
302
323
  logger.debug(`[MCP] Auth error for ${serverKey}, attempting reactive token refresh`);
303
324
  retried = true;
304
325
  try {
305
- await this.performTokenRefresh(serverKey, oauthConfig);
326
+ await this.refreshOAuthToken(serverKey, oauthConfig, true);
306
327
  const newClient = this.clients.get(serverKey);
307
328
  if (newClient) {
308
329
  currentClient = newClient;
@@ -320,6 +341,10 @@ var MCPClient = class {
320
341
  };
321
342
  }
322
343
  }
344
+ if (disconnectedServers.length > 0) {
345
+ const plural = disconnectedServers.length > 1 ? "s are" : " is";
346
+ throw new Error(`Tool ${name} is known but MCP server${plural} disconnected: ${disconnectedServers.join(", ")}`);
347
+ }
323
348
  throw new Error(`Tool ${name} not found in any connected MCP server`);
324
349
  }
325
350
  async cleanup() {
@@ -335,7 +360,7 @@ var MCPClient = class {
335
360
  this.tools.clear();
336
361
  this.oauthConfigs.clear();
337
362
  this.tokenExpiresAt.clear();
338
- this.tokenRefreshPromise.clear();
363
+ this.tokenRefreshLocks.clear();
339
364
  }
340
365
  };
341
366
  //#endregion
@@ -350,7 +375,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends Op
350
375
  constructor(modelName, options = {}) {
351
376
  if (!OpenAiChatCompletionProvider.OPENAI_CHAT_MODEL_NAMES.includes(modelName)) logger.debug(`Using unknown chat model: ${modelName}`);
352
377
  super(modelName, options);
353
- this.config = options.config || {};
378
+ this.config = options.config ? { ...options.config } : {};
354
379
  if (this.config.mcp?.enabled) this.initializationPromise = this.initializeMCP();
355
380
  }
356
381
  async initializeMCP() {
@@ -488,6 +513,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends Op
488
513
  if (config.user) body.user = config.user;
489
514
  if (config.metadata) body.metadata = config.metadata;
490
515
  if (config.store !== void 0) body.store = config.store;
516
+ if ((isReasoningModel || isGPT5Model) && "max_tokens" in body) delete body.max_tokens;
491
517
  return {
492
518
  body,
493
519
  config
@@ -495,7 +521,7 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends Op
495
521
  }
496
522
  async callApi(prompt, context, callApiOptions) {
497
523
  if (this.initializationPromise != null) await this.initializationPromise;
498
- if (this.requiresApiKey() && !this.getApiKey()) throw new Error(`API key is not set. Set the ${this.config.apiKeyEnvar || "OPENAI_API_KEY"} environment variable or add \`apiKey\` to the provider config.`);
524
+ if (this.requiresApiKey() && !this.getApiKey()) throw new Error(this.getMissingApiKeyErrorMessage());
499
525
  const spanContext = {
500
526
  system: "openai",
501
527
  operationName: "chat",
@@ -764,4 +790,4 @@ var OpenAiChatCompletionProvider = class OpenAiChatCompletionProvider extends Op
764
790
  //#endregion
765
791
  export { normalizeFinishReason as i, MCPClient as n, FINISH_REASON_MAP as r, OpenAiChatCompletionProvider as t };
766
792
 
767
- //# sourceMappingURL=chat-BEwdgGEg.js.map
793
+ //# sourceMappingURL=chat-Dr3DUQ0D.js.map