@mastra/core 1.18.0-alpha.3 → 1.18.0-alpha.5

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 (223) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/dist/_types/@internal_core/dist/index.d.ts +1078 -256
  3. package/dist/agent/agent-legacy.d.ts +2 -0
  4. package/dist/agent/agent-legacy.d.ts.map +1 -1
  5. package/dist/agent/agent.d.ts.map +1 -1
  6. package/dist/agent/index.cjs +8 -8
  7. package/dist/agent/index.js +1 -1
  8. package/dist/agent/workflows/prepare-stream/map-results-step.d.ts.map +1 -1
  9. package/dist/{chunk-ZFH5KWHO.js → chunk-27EVOYQC.js} +3 -3
  10. package/dist/{chunk-ZFH5KWHO.js.map → chunk-27EVOYQC.js.map} +1 -1
  11. package/dist/{chunk-32NEFSTI.js → chunk-3CTQJRNS.js} +17 -12
  12. package/dist/chunk-3CTQJRNS.js.map +1 -0
  13. package/dist/{chunk-QXPUTX3W.cjs → chunk-4BZRWJBH.cjs} +33 -32
  14. package/dist/chunk-4BZRWJBH.cjs.map +1 -0
  15. package/dist/{chunk-AHFHYQS6.js → chunk-4FMKWOPC.js} +4 -4
  16. package/dist/{chunk-AHFHYQS6.js.map → chunk-4FMKWOPC.js.map} +1 -1
  17. package/dist/{chunk-BFRUEBG3.js → chunk-5LA5TY63.js} +4 -4
  18. package/dist/{chunk-BFRUEBG3.js.map → chunk-5LA5TY63.js.map} +1 -1
  19. package/dist/{chunk-OKKJRRSS.cjs → chunk-7456ZWIM.cjs} +32 -14
  20. package/dist/chunk-7456ZWIM.cjs.map +1 -0
  21. package/dist/{chunk-D5VCCQ4L.js → chunk-7IKOVR4F.js} +5 -5
  22. package/dist/{chunk-D5VCCQ4L.js.map → chunk-7IKOVR4F.js.map} +1 -1
  23. package/dist/{chunk-K4NN2KQQ.cjs → chunk-AV4YSAZL.cjs} +6 -2
  24. package/dist/chunk-AV4YSAZL.cjs.map +1 -0
  25. package/dist/{chunk-7USX5P3I.js → chunk-AYVJ4EXL.js} +28 -5
  26. package/dist/chunk-AYVJ4EXL.js.map +1 -0
  27. package/dist/{chunk-B6D4D2CY.cjs → chunk-BF7IH4JU.cjs} +297 -68
  28. package/dist/chunk-BF7IH4JU.cjs.map +1 -0
  29. package/dist/{chunk-5IZ346TV.cjs → chunk-BL7DAQXE.cjs} +7 -7
  30. package/dist/{chunk-5IZ346TV.cjs.map → chunk-BL7DAQXE.cjs.map} +1 -1
  31. package/dist/{chunk-ZFZ6HQFT.cjs → chunk-BZUTYPXP.cjs} +210 -187
  32. package/dist/chunk-BZUTYPXP.cjs.map +1 -0
  33. package/dist/{chunk-UORUVXKY.js → chunk-DBHNKGT2.js} +6 -6
  34. package/dist/{chunk-UORUVXKY.js.map → chunk-DBHNKGT2.js.map} +1 -1
  35. package/dist/{chunk-GRMC2OYN.js → chunk-FA4PTEBK.js} +6 -3
  36. package/dist/chunk-FA4PTEBK.js.map +1 -0
  37. package/dist/{chunk-QVVWKMFM.cjs → chunk-GXXNF6NF.cjs} +25 -25
  38. package/dist/{chunk-QVVWKMFM.cjs.map → chunk-GXXNF6NF.cjs.map} +1 -1
  39. package/dist/{chunk-GVHBM6VU.cjs → chunk-H3DHOME4.cjs} +29 -11
  40. package/dist/chunk-H3DHOME4.cjs.map +1 -0
  41. package/dist/{chunk-ABA3KD3X.js → chunk-HRT662B6.js} +3 -3
  42. package/dist/{chunk-ABA3KD3X.js.map → chunk-HRT662B6.js.map} +1 -1
  43. package/dist/chunk-IHVB4C5U.cjs +4 -0
  44. package/dist/{chunk-ROOVGRNA.cjs.map → chunk-IHVB4C5U.cjs.map} +1 -1
  45. package/dist/{chunk-FB6O7FNK.js → chunk-IM6BRUQI.js} +9 -9
  46. package/dist/{chunk-FB6O7FNK.js.map → chunk-IM6BRUQI.js.map} +1 -1
  47. package/dist/{chunk-6LHF5UDX.cjs → chunk-INENOZKZ.cjs} +9 -9
  48. package/dist/{chunk-6LHF5UDX.cjs.map → chunk-INENOZKZ.cjs.map} +1 -1
  49. package/dist/{chunk-PYNUWPGW.cjs → chunk-JVL4ANDA.cjs} +19 -19
  50. package/dist/{chunk-PYNUWPGW.cjs.map → chunk-JVL4ANDA.cjs.map} +1 -1
  51. package/dist/{chunk-OVWOD5GI.cjs → chunk-JWE3L5J2.cjs} +20 -20
  52. package/dist/{chunk-OVWOD5GI.cjs.map → chunk-JWE3L5J2.cjs.map} +1 -1
  53. package/dist/{chunk-HDPQ3LEE.js → chunk-K7AE4BHR.js} +4 -4
  54. package/dist/{chunk-HDPQ3LEE.js.map → chunk-K7AE4BHR.js.map} +1 -1
  55. package/dist/{chunk-4K2NKQGN.cjs → chunk-KCRQQDEF.cjs} +201 -196
  56. package/dist/chunk-KCRQQDEF.cjs.map +1 -0
  57. package/dist/{chunk-CX5I6VS4.js → chunk-KRFGPA2H.js} +280 -69
  58. package/dist/chunk-KRFGPA2H.js.map +1 -0
  59. package/dist/{chunk-OXS5X7PW.cjs → chunk-LKZQG2ZZ.cjs} +13 -13
  60. package/dist/{chunk-OXS5X7PW.cjs.map → chunk-LKZQG2ZZ.cjs.map} +1 -1
  61. package/dist/{chunk-W2QYKEBN.js → chunk-MJF7NZEF.js} +545 -33
  62. package/dist/chunk-MJF7NZEF.js.map +1 -0
  63. package/dist/{chunk-SLHDZJ4B.js → chunk-PMWMEK4T.js} +5 -4
  64. package/dist/chunk-PMWMEK4T.js.map +1 -0
  65. package/dist/chunk-S43VACTO.js +3 -0
  66. package/dist/{chunk-DMX7MC4N.js.map → chunk-S43VACTO.js.map} +1 -1
  67. package/dist/{chunk-X36INADV.cjs → chunk-V2NQOABM.cjs} +563 -51
  68. package/dist/chunk-V2NQOABM.cjs.map +1 -0
  69. package/dist/{chunk-IR4WRS3N.js → chunk-W4I7AX2S.js} +31 -13
  70. package/dist/chunk-W4I7AX2S.js.map +1 -0
  71. package/dist/{chunk-OYAHOEQP.js → chunk-W6QY3O3X.js} +27 -9
  72. package/dist/chunk-W6QY3O3X.js.map +1 -0
  73. package/dist/{chunk-MP2VGF73.js → chunk-WNI6ACXE.js} +3 -3
  74. package/dist/{chunk-MP2VGF73.js.map → chunk-WNI6ACXE.js.map} +1 -1
  75. package/dist/{chunk-VVR3SFKH.cjs → chunk-XC6ZFHUA.cjs} +70 -70
  76. package/dist/{chunk-VVR3SFKH.cjs.map → chunk-XC6ZFHUA.cjs.map} +1 -1
  77. package/dist/{chunk-3UM5VCQ5.cjs → chunk-XNWKYVLQ.cjs} +3 -3
  78. package/dist/{chunk-3UM5VCQ5.cjs.map → chunk-XNWKYVLQ.cjs.map} +1 -1
  79. package/dist/{chunk-64565EZF.cjs → chunk-XQRTJIC7.cjs} +22 -22
  80. package/dist/{chunk-64565EZF.cjs.map → chunk-XQRTJIC7.cjs.map} +1 -1
  81. package/dist/{chunk-T5XU5TAV.cjs → chunk-XRW4AYLH.cjs} +82 -82
  82. package/dist/{chunk-T5XU5TAV.cjs.map → chunk-XRW4AYLH.cjs.map} +1 -1
  83. package/dist/{chunk-YBVRBNRY.js → chunk-YIBYKN6M.js} +7 -7
  84. package/dist/{chunk-YBVRBNRY.js.map → chunk-YIBYKN6M.js.map} +1 -1
  85. package/dist/datasets/dataset.d.ts +1 -0
  86. package/dist/datasets/dataset.d.ts.map +1 -1
  87. package/dist/datasets/experiment/index.d.ts.map +1 -1
  88. package/dist/datasets/index.cjs +17 -17
  89. package/dist/datasets/index.js +2 -2
  90. package/dist/datasets/manager.d.ts +1 -0
  91. package/dist/datasets/manager.d.ts.map +1 -1
  92. package/dist/docs/SKILL.md +1 -1
  93. package/dist/docs/assets/SOURCE_MAP.json +611 -534
  94. package/dist/docs/references/reference-configuration.md +24 -0
  95. package/dist/docs/references/reference-core-mastra-model-gateway.md +2 -0
  96. package/dist/evals/index.cjs +23 -23
  97. package/dist/evals/index.js +3 -3
  98. package/dist/evals/scoreTraces/index.cjs +7 -7
  99. package/dist/evals/scoreTraces/index.js +3 -3
  100. package/dist/harness/index.cjs +17 -17
  101. package/dist/harness/index.js +7 -7
  102. package/dist/index.cjs +2 -2
  103. package/dist/index.js +1 -1
  104. package/dist/integration/index.cjs +2 -2
  105. package/dist/integration/index.js +1 -1
  106. package/dist/llm/index.cjs +16 -16
  107. package/dist/llm/index.js +5 -5
  108. package/dist/llm/model/gateways/models-dev.d.ts.map +1 -1
  109. package/dist/llm/model/provider-types.generated.d.ts +11 -2
  110. package/dist/loop/index.cjs +14 -14
  111. package/dist/loop/index.js +1 -1
  112. package/dist/mastra/index.cjs +2 -2
  113. package/dist/mastra/index.js +1 -1
  114. package/dist/memory/index.cjs +14 -14
  115. package/dist/memory/index.js +1 -1
  116. package/dist/models-dev-5X6CFNIO.cjs +12 -0
  117. package/dist/{models-dev-MIC2CW43.cjs.map → models-dev-5X6CFNIO.cjs.map} +1 -1
  118. package/dist/models-dev-NFYFNV6D.js +3 -0
  119. package/dist/{models-dev-VDZIOMAC.js.map → models-dev-NFYFNV6D.js.map} +1 -1
  120. package/dist/netlify-EYSCS3HJ.js +3 -0
  121. package/dist/{netlify-2CGMKEKT.js.map → netlify-EYSCS3HJ.js.map} +1 -1
  122. package/dist/netlify-MZJ7FN5B.cjs +12 -0
  123. package/dist/{netlify-KZ4HQR5N.cjs.map → netlify-MZJ7FN5B.cjs.map} +1 -1
  124. package/dist/observability/index.cjs +18 -18
  125. package/dist/observability/index.js +1 -1
  126. package/dist/observability/no-op.d.ts +14 -1
  127. package/dist/observability/no-op.d.ts.map +1 -1
  128. package/dist/observability/types/core.d.ts +35 -4
  129. package/dist/observability/types/core.d.ts.map +1 -1
  130. package/dist/observability/types/feedback.d.ts +42 -11
  131. package/dist/observability/types/feedback.d.ts.map +1 -1
  132. package/dist/observability/types/logging.d.ts +6 -9
  133. package/dist/observability/types/logging.d.ts.map +1 -1
  134. package/dist/observability/types/metrics.d.ts +6 -4
  135. package/dist/observability/types/metrics.d.ts.map +1 -1
  136. package/dist/observability/types/scores.d.ts +25 -10
  137. package/dist/observability/types/scores.d.ts.map +1 -1
  138. package/dist/observability/types/tracing.d.ts +14 -5
  139. package/dist/observability/types/tracing.d.ts.map +1 -1
  140. package/dist/processor-provider/index.cjs +10 -10
  141. package/dist/processor-provider/index.js +1 -1
  142. package/dist/processors/index.cjs +44 -44
  143. package/dist/processors/index.js +1 -1
  144. package/dist/processors/runner.d.ts.map +1 -1
  145. package/dist/provider-registry-ODJKK7NU.js +3 -0
  146. package/dist/{provider-registry-QRWUBN5N.js.map → provider-registry-ODJKK7NU.js.map} +1 -1
  147. package/dist/provider-registry-YGVNXVGE.cjs +40 -0
  148. package/dist/{provider-registry-HGWTTWCL.cjs.map → provider-registry-YGVNXVGE.cjs.map} +1 -1
  149. package/dist/provider-registry.json +27 -9
  150. package/dist/relevance/index.cjs +3 -3
  151. package/dist/relevance/index.js +1 -1
  152. package/dist/server/types.d.ts +16 -0
  153. package/dist/server/types.d.ts.map +1 -1
  154. package/dist/storage/constants.cjs +56 -56
  155. package/dist/storage/constants.d.ts.map +1 -1
  156. package/dist/storage/constants.js +1 -1
  157. package/dist/storage/domains/datasets/inmemory.d.ts.map +1 -1
  158. package/dist/storage/domains/observability/base.d.ts +10 -2
  159. package/dist/storage/domains/observability/base.d.ts.map +1 -1
  160. package/dist/storage/domains/observability/feedback.d.ts +1 -1
  161. package/dist/storage/domains/observability/feedback.d.ts.map +1 -1
  162. package/dist/storage/domains/observability/inmemory.d.ts +13 -2
  163. package/dist/storage/domains/observability/inmemory.d.ts.map +1 -1
  164. package/dist/storage/domains/observability/record-builders.d.ts.map +1 -1
  165. package/dist/storage/domains/observability/scores.d.ts +1 -1
  166. package/dist/storage/domains/observability/scores.d.ts.map +1 -1
  167. package/dist/storage/domains/observability/tracing.d.ts +8 -8
  168. package/dist/storage/domains/shared.d.ts +1 -1
  169. package/dist/storage/domains/shared.d.ts.map +1 -1
  170. package/dist/storage/index.cjs +340 -268
  171. package/dist/storage/index.js +3 -3
  172. package/dist/storage/types.d.ts +3 -0
  173. package/dist/storage/types.d.ts.map +1 -1
  174. package/dist/stream/index.cjs +8 -8
  175. package/dist/stream/index.js +1 -1
  176. package/dist/test-utils/llm-mock.cjs +4 -4
  177. package/dist/test-utils/llm-mock.js +1 -1
  178. package/dist/tool-loop-agent/index.cjs +4 -4
  179. package/dist/tool-loop-agent/index.js +1 -1
  180. package/dist/tools/index.cjs +11 -7
  181. package/dist/tools/index.d.ts +1 -1
  182. package/dist/tools/index.d.ts.map +1 -1
  183. package/dist/tools/index.js +1 -1
  184. package/dist/tools/is-vercel-tool.cjs +2 -2
  185. package/dist/tools/is-vercel-tool.js +1 -1
  186. package/dist/tools/validation.d.ts +1 -0
  187. package/dist/tools/validation.d.ts.map +1 -1
  188. package/dist/utils.cjs +23 -23
  189. package/dist/utils.js +1 -1
  190. package/dist/vector/index.cjs +7 -7
  191. package/dist/vector/index.js +1 -1
  192. package/dist/workflows/evented/index.cjs +10 -10
  193. package/dist/workflows/evented/index.js +1 -1
  194. package/dist/workflows/index.cjs +24 -24
  195. package/dist/workflows/index.js +1 -1
  196. package/dist/workspace/index.cjs +68 -68
  197. package/dist/workspace/index.js +1 -1
  198. package/package.json +4 -4
  199. package/src/llm/model/provider-types.generated.d.ts +11 -2
  200. package/dist/chunk-32NEFSTI.js.map +0 -1
  201. package/dist/chunk-4K2NKQGN.cjs.map +0 -1
  202. package/dist/chunk-7USX5P3I.js.map +0 -1
  203. package/dist/chunk-B6D4D2CY.cjs.map +0 -1
  204. package/dist/chunk-CX5I6VS4.js.map +0 -1
  205. package/dist/chunk-DMX7MC4N.js +0 -3
  206. package/dist/chunk-GRMC2OYN.js.map +0 -1
  207. package/dist/chunk-GVHBM6VU.cjs.map +0 -1
  208. package/dist/chunk-IR4WRS3N.js.map +0 -1
  209. package/dist/chunk-K4NN2KQQ.cjs.map +0 -1
  210. package/dist/chunk-OKKJRRSS.cjs.map +0 -1
  211. package/dist/chunk-OYAHOEQP.js.map +0 -1
  212. package/dist/chunk-QXPUTX3W.cjs.map +0 -1
  213. package/dist/chunk-ROOVGRNA.cjs +0 -4
  214. package/dist/chunk-SLHDZJ4B.js.map +0 -1
  215. package/dist/chunk-W2QYKEBN.js.map +0 -1
  216. package/dist/chunk-X36INADV.cjs.map +0 -1
  217. package/dist/chunk-ZFZ6HQFT.cjs.map +0 -1
  218. package/dist/models-dev-MIC2CW43.cjs +0 -12
  219. package/dist/models-dev-VDZIOMAC.js +0 -3
  220. package/dist/netlify-2CGMKEKT.js +0 -3
  221. package/dist/netlify-KZ4HQR5N.cjs +0 -12
  222. package/dist/provider-registry-HGWTTWCL.cjs +0 -40
  223. package/dist/provider-registry-QRWUBN5N.js +0 -3
@@ -19,6 +19,9 @@ function safeValidate(schema, data) {
19
19
  throw err;
20
20
  }
21
21
  }
22
+ function isValidationError(value) {
23
+ return value !== null && typeof value === "object" && "error" in value && value.error === true && "validationErrors" in value;
24
+ }
22
25
  function getPathKey(segment) {
23
26
  if (typeof segment === "object" && segment !== null && "key" in segment) {
24
27
  return String(segment.key);
@@ -593,6 +596,6 @@ function getProviderToolName(providerId) {
593
596
  return providerId.split(".").slice(1).join(".");
594
597
  }
595
598
 
596
- export { MASTRA_TOOL_MARKER, Tool, createTool, getProviderToolName, isMastraTool, isProviderDefinedTool, isProviderTool, isVercelTool, validateToolInput, validateToolOutput, validateToolSuspendData };
597
- //# sourceMappingURL=chunk-GRMC2OYN.js.map
598
- //# sourceMappingURL=chunk-GRMC2OYN.js.map
599
+ export { MASTRA_TOOL_MARKER, Tool, createTool, getProviderToolName, isMastraTool, isProviderDefinedTool, isProviderTool, isValidationError, isVercelTool, validateToolInput, validateToolOutput, validateToolSuspendData };
600
+ //# sourceMappingURL=chunk-FA4PTEBK.js.map
601
+ //# sourceMappingURL=chunk-FA4PTEBK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":["resumeData"],"mappings":";;;;;AAaA,SAAS,YAAA,CACP,QACA,IAAA,EAC2D;AAC3D,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAW,CAAA,CAAE,SAAS,IAAI,CAAA;AAChD,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,MAAM,IAAI,MAAM,yEAAyE,CAAA;AAAA,IAC3F;AACA,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,GAAA,EAAK;AAGZ,IAAA,IAAI,eAAe,SAAA,IAAa,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,qCAAqC,CAAA,EAAG;AAC3F,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,yNAAA,EAEgF,IAAI,OAAO,CAAA;AAAA,OAC7F;AAAA,IACF;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAiBO,SAAS,kBAAkB,KAAA,EAA0C;AAC1E,EAAA,OACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,WAAW,KAAA,IACX,KAAA,CAAM,KAAA,KAAU,IAAA,IAChB,kBAAA,IAAsB,KAAA;AAE1B;AAKA,SAAS,WAAW,OAAA,EAAqD;AACvE,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,IAAA,IAAQ,SAAS,OAAA,EAAS;AACvE,IAAA,OAAO,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,OAAO,OAAO,CAAA;AACvB;AAKA,SAAS,iBAAA,GAA2E;AAClF,EAAA,OAAO,EAAE,MAAA,EAAQ,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAClC;AAQA,SAAS,qBAAwB,MAAA,EAAsE;AACrG,EAAA,MAAM,SAAS,iBAAA,EAAkB;AAEjC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA,EAAG;AAE1C,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAAA,IAClC,CAAA,MAAO;AAEL,MAAA,IAAI,OAAA,GAAU,MAAA;AACd,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AAC1C,QAAA,MAAM,GAAA,GAAM,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,CAAC,CAAE,CAAA;AACrC,QAAA,IAAI,CAAA,KAAM,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAE/B,UAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,EAAG;AACxB,YAAA,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,GAAI,iBAAA,EAAkB;AAAA,UAC1C;AACA,UAAC,QAAQ,MAAA,CAAO,GAAG,EAA4D,MAAA,CAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,QAC1G,CAAA,MAAO;AAEL,UAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,EAAG;AACxB,YAAA,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,GAAI,iBAAA,EAAkB;AAAA,UAC1C;AACA,UAAA,OAAA,GAAU,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAQA,SAAS,kBAAA,CAAmB,IAAA,EAAe,SAAA,GAAoB,GAAA,EAAa;AAC1E,EAAA,IAAI;AACF,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,MAAM,CAAC,CAAA;AAChD,IAAA,IAAI,WAAA,CAAY,UAAU,SAAA,EAAW;AACnC,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,OAAO,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,GAAI,iBAAA;AAAA,EAC3C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,4BAAA;AAAA,EACT;AACF;AAUO,SAAS,uBAAA,CACd,MAAA,EACA,WAAA,EACA,MAAA,EACkF;AAElF,EAAA,IAAI,CAAC,MAAA,IAAU,EAAE,WAAA,IAAe,MAAA,CAAA,EAAS;AACvC,IAAA,OAAO,EAAE,MAAM,WAAA,EAAiB;AAAA,EAClC;AAGA,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,MAAA,EAAQ,WAAW,CAAA;AAEnD,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,CAAW,KAAA,EAAM;AAAA,EAClC;AAGA,EAAA,MAAM,gBAAgB,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA,CAAA,KAAK,CAAA,EAAA,EAAK,EAAE,IAAA,EAAM,IAAA,CAAK,GAAG,CAAA,IAAK,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAE5G,EAAA,MAAM,KAAA,GAA4B;AAAA,IAChC,KAAA,EAAO,IAAA;AAAA,IACP,SAAS,CAAA,sCAAA,EAAyC,MAAA,GAAS,CAAA,KAAA,EAAQ,MAAM,KAAK,EAAE,CAAA;AAAA,EAAqD,aAAa;;AAAA,oBAAA,EAA2B,kBAAA,CAAmB,WAAW,CAAC,CAAA,CAAA;AAAA,IAC5M,gBAAA,EAAkB,oBAAA,CAAwB,UAAA,CAAW,MAAM;AAAA,GAC7D;AAEA,EAAA,OAAO,EAAE,KAAA,EAAM;AACjB;AAWA,SAAS,qBAAA,CAAsB,QAAqC,KAAA,EAAyB;AAC3F,EAAA,IAAI,OAAO,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,IAAA,EAAM;AAClD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAa,0BAAA,CAA2B,MAAA,EAAQ,EAAE,EAAA,EAAI,SAAS,CAAA;AAGrE,EAAA,IAAI,UAAA,CAAW,SAAS,OAAA,EAAS;AAC/B,IAAA,OAAO,EAAC;AAAA,EACV;AAGA,EAAA,IAAI,UAAA,CAAW,SAAS,QAAA,EAAU;AAChC,IAAA,OAAO,EAAC;AAAA,EACV;AAGA,EAAA,OAAO,KAAA;AACT;AASA,SAAS,cAAc,KAAA,EAAkD;AACvE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AACzC,EAAA,OAAO,KAAA,KAAU,MAAA,CAAO,SAAA,IAAa,KAAA,KAAU,IAAA;AACjD;AAeA,SAAS,uBAAuB,KAAA,EAAyB;AACvD,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC/C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,IAAI,sBAAsB,CAAA;AAAA,EACzC;AAIA,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,sBAAA,CAAuB,KAAK,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACT;AAYA,SAAS,mBAAmB,KAAA,EAAyB;AAEnD,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAGxB,IAAA,OAAO,KAAA,CAAM,IAAI,CAAA,IAAA,KAAS,IAAA,KAAS,OAAO,IAAA,GAAO,kBAAA,CAAmB,IAAI,CAAE,CAAA;AAAA,EAC5E;AAGA,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AAEzC,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,kBAAA,CAAmB,KAAK,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,yBAAA,CAA0B,KAAA,EAAgB,KAAA,EAAoB,WAAA,GAAc,EAAA,EAAa;AAChG,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,WAAW,CAAA,GAAI,MAAA,GAAY,KAAA;AAAA,EAC9C;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,GAAA;AAAA,MAAI,CAAC,IAAA,EAAM,CAAA,KACtB,yBAAA,CAA0B,MAAM,KAAA,EAAO,WAAA,GAAc,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,GAAK,MAAA,CAAO,CAAC,CAAC;AAAA,KACxF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,MAAM,YAAY,WAAA,GAAc,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA;AAC1D,IAAA,IAAA,CAAK,UAAU,IAAA,IAAQ,KAAA,KAAU,WAAc,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA,EAAG;AAEnE,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,yBAAA,CAA0B,KAAA,EAAO,OAAO,SAAS,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,MAAA;AACT;AAUA,IAAM,cAAA,0BAAwB,gBAAgB,CAAA;AAC9C,SAAS,cAAA,CAAe,KAAc,YAAA,EAA0E;AAC9G,EAAA,IAAI,OAAA,GAAmB,GAAA;AACvB,EAAA,KAAA,MAAW,WAAW,YAAA,EAAc;AAClC,IAAA,IAAI,YAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,IAAa,OAAO,YAAY,QAAA,EAAU;AAC5E,MAAA,OAAO,cAAA;AAAA,IACT;AACA,IAAA,MAAM,GAAA,GACJ,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,IAAA,IAAQ,KAAA,IAAS,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,GAAI,OAAO,OAAO,CAAA;AAC5G,IAAA,OAAA,GAAW,QAAoC,GAAG,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,OAAA;AACT;AAmBA,SAAS,2BAAA,CAA4B,QAAyC,KAAA,EAAyB;AAErG,EAAA,IAAI,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,cAAc,MAAa,CAAA;AAC7C,EAAA,IAAI,CAAC,WAAA,CAAY,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAS,SAAA,CAAkB,KAAA;AACjC,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,MAAM,MAAA,GAAkC,EAAE,GAAG,KAAA,EAAM;AAEnD,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,MAAM,GAAG,CAAA;AAC7B,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,eAAA,GAAkB,cAAc,WAAW,CAAA;AAIjD,IAAA,IAAI,cAAA,CAAe,eAAe,CAAA,KAAM,WAAA,EAAa;AACnD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,IACG,UAAA,CAAW,eAAe,CAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IACrD,WAAA,CAAY,eAAe,CAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EACvD;AACA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC/B,QAAA,IACG,UAAA,CAAW,eAAe,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IACnD,WAAA,CAAY,eAAe,CAAA,IAAK,aAAA,CAAc,MAAM,CAAA,EACrD;AACA,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA;AACd,UAAA,OAAA,GAAU,IAAA;AAAA,QACZ;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,UAAU,MAAA,GAAS,KAAA;AAC5B;AAUO,SAAS,iBAAA,CACd,MAAA,EACA,KAAA,EACA,MAAA,EACkF;AAGlF,EAAA,IAAI,CAAC,MAAA,IAAU,EAAE,WAAA,IAAe,MAAA,CAAA,EAAS;AACvC,IAAA,OAAO,EAAE,MAAM,KAAA,EAAW;AAAA,EAC5B;AAwBA,EAAA,IAAI,eAAA,GAAkB,qBAAA,CAAsB,MAAA,EAAQ,KAAK,CAAA;AAGzD,EAAA,eAAA,GAAkB,uBAAuB,eAAe,CAAA;AAGxD,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,MAAA,EAAQ,eAAe,CAAA;AAEvD,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,CAAW,KAAA,EAAM;AAAA,EAClC;AAKA,EAAA,MAAM,YAAA,GAAe,2BAAA,CAA4B,MAAA,EAAQ,eAAe,CAAA;AACxE,EAAA,IAAI,iBAAiB,eAAA,EAAiB;AACpC,IAAA,MAAM,iBAAA,GAAoB,YAAA,CAAa,MAAA,EAAQ,YAAY,CAAA;AAC3D,IAAA,IAAI,WAAW,iBAAA,EAAmB;AAChC,MAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,CAAkB,KAAA,EAAM;AAAA,IACzC;AAAA,EACF;AAWA,EAAA,MAAM,mBAAmB,IAAI,GAAA;AAAA,IAC3B,UAAA,CAAW,MAAA,CACR,MAAA,CAAO,CAAA,KAAA,KAAS;AACf,MAAA,IAAI,CAAC,KAAA,CAAM,IAAA,IAAQ,MAAM,IAAA,CAAK,MAAA,KAAW,GAAG,OAAO,KAAA;AACnD,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,eAAA,EAAiB,KAAA,CAAM,IAAI,CAAA;AACxD,MAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;AAAA,IACrC,CAAC,CAAA,CACA,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,CAAM,IAAA,EAAM,GAAA,CAAI,CAAA,CAAA,KAAM,OAAO,CAAA,KAAM,QAAA,IAAY,KAAA,IAAS,IAAI,MAAA,CAAO,CAAA,CAAE,GAAG,CAAA,GAAI,MAAA,CAAO,CAAC,CAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAC9G,MAAA,CAAO,CAAC,CAAA,KAAmB,CAAC,CAAC,CAAC;AAAA,GACnC;AACA,EAAA,MAAM,aAAA,GACJ,iBAAiB,IAAA,GAAO,CAAA,GAAI,0BAA0B,KAAA,EAAO,gBAAgB,CAAA,GAAI,kBAAA,CAAmB,KAAK,CAAA;AAC3G,EAAA,MAAM,kBAAA,GAAqB,qBAAA,CAAsB,MAAA,EAAQ,aAAa,CAAA;AACtE,EAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,MAAA,EAAQ,kBAAkB,CAAA;AAE/D,EAAA,IAAI,WAAW,eAAA,EAAiB;AAC9B,IAAA,OAAO,EAAE,IAAA,EAAM,eAAA,CAAgB,KAAA,EAAM;AAAA,EACvC;AAIA,EAAA,MAAM,gBAAgB,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA,CAAA,KAAK,CAAA,EAAA,EAAK,EAAE,IAAA,EAAM,IAAA,CAAK,GAAG,CAAA,IAAK,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAE5G,EAAA,MAAM,KAAA,GAA4B;AAAA,IAChC,KAAA,EAAO,IAAA;AAAA,IACP,SAAS,CAAA,4BAAA,EAA+B,MAAA,GAAS,CAAA,KAAA,EAAQ,MAAM,KAAK,EAAE,CAAA;AAAA,EAAqD,aAAa;;AAAA,oBAAA,EAA2B,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAAA,IAC5L,gBAAA,EAAkB,oBAAA,CAAwB,UAAA,CAAW,MAAM;AAAA,GAC7D;AAEA,EAAA,OAAO,EAAE,KAAA,EAAM;AACjB;AAUO,SAAS,kBAAA,CACd,MAAA,EACA,MAAA,EACA,MAAA,EACA,aAAA,EACkF;AAElF,EAAA,IAAI,CAAC,MAAA,IAAU,EAAE,WAAA,IAAe,WAAW,aAAA,EAAe;AACxD,IAAA,OAAO,EAAE,MAAM,MAAA,EAAY;AAAA,EAC7B;AAGA,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,MAAA,EAAQ,MAAM,CAAA;AAE9C,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,CAAW,KAAA,EAAM;AAAA,EAClC;AAGA,EAAA,MAAM,gBAAgB,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA,CAAA,KAAK,CAAA,EAAA,EAAK,EAAE,IAAA,EAAM,IAAA,CAAK,GAAG,CAAA,IAAK,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAE5G,EAAA,MAAM,KAAA,GAA4B;AAAA,IAChC,KAAA,EAAO,IAAA;AAAA,IACP,SAAS,CAAA,6BAAA,EAAgC,MAAA,GAAS,CAAA,KAAA,EAAQ,MAAM,KAAK,EAAE,CAAA;AAAA,EAAwC,aAAa;;AAAA,iBAAA,EAAwB,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,IAC9K,gBAAA,EAAkB,oBAAA,CAAwB,UAAA,CAAW,MAAM;AAAA,GAC7D;AAEA,EAAA,OAAO,EAAE,KAAA,EAAM;AACjB;AAKA,IAAM,cAAA,GAAiB,CAAC,UAAA,EAAY,QAAA,EAAU,SAAS,QAAA,EAAU,SAAA,EAAW,QAAQ,YAAY,CAAA;AAOhG,SAAS,oBAAoB,GAAA,EAAuB;AAClD,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA,CAAI,IAAI,mBAAmB,CAAA;AAAA,EACpC;AAEA,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,IAAI,cAAA,CAAe,IAAA,CAAK,CAAA,SAAA,KAAa,GAAA,CAAI,WAAA,EAAY,CAAE,QAAA,CAAS,SAAA,CAAU,WAAA,EAAa,CAAC,CAAA,EAAG;AACzF,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,YAAA;AAAA,IAChB,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,EAAM;AACtD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,mBAAA,CAAoB,KAAK,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAWO,SAAS,sBAAA,CACd,MAAA,EACA,cAAA,EACA,UAAA,EAC+D;AAE/D,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAE,IAAA,EAAO,cAAA,EAAgB,GAAA,IAAO,EAAC,EAAQ;AAAA,EAClD;AAGA,EAAA,MAAM,aAAA,GAAgB,cAAA,EAAgB,GAAA,IAAO,EAAC;AAG9C,EAAA,MAAM,cAAA,GAAiB,iBAAiB,MAAM,CAAA;AAG9C,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,WAAW,CAAA,CAAE,SAAS,aAAa,CAAA;AAErE,EAAA,IAAI,sBAAsB,OAAA,EAAS;AACjC,IAAA,MAAM,IAAI,MAAM,yEAAyE,CAAA;AAAA,EAC3F;AAEA,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,CAAW,KAAA,EAAM;AAAA,EAClC;AAGA,EAAA,MAAM,gBAAgB,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA,CAAA,KAAK,CAAA,EAAA,EAAK,EAAE,IAAA,EAAM,IAAA,CAAK,GAAG,CAAA,IAAK,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAG5G,EAAA,MAAM,eAAA,GAAkB,oBAAoB,aAAa,CAAA;AAEzD,EAAA,MAAM,KAAA,GAA4B;AAAA,IAChC,KAAA,EAAO,IAAA;AAAA,IACP,SAAS,CAAA,iCAAA,EAAoC,UAAA,GAAa,CAAA,KAAA,EAAQ,UAAU,KAAK,EAAE,CAAA;AAAA,EAAqD,aAAa;;AAAA,0BAAA,EAAiC,kBAAA,CAAmB,eAAe,CAAC,CAAA,CAAA;AAAA,IACzN,gBAAA,EAAkB,oBAAA,CAAwB,UAAA,CAAW,MAAM;AAAA,GAC7D;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,aAAA,EAAoB,KAAA,EAAM;AAC3C;;;ACpoBO,IAAM,kBAAA,mBAAqB,MAAA,CAAO,GAAA,CAAI,uBAAuB;AAsD7D,IAAM,OAAN,MAWuG;AAAA;AAAA,EAE5G,EAAA;AAAA;AAAA,EAGA,WAAA;AAAA;AAAA,EAGA,WAAA;AAAA;AAAA,EAGA,YAAA;AAAA;AAAA,EAGA,aAAA;AAAA;AAAA,EAGA,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA;AAAA;AAAA,EAGA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,GAAA;AAAA,EAEA,YAAA;AAAA,EASA,YAAA;AAAA,EASA,gBAAA;AAAA,EASA,QAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,YAAY,IAAA,EAAwG;AAClH,IAAC,IAAA,CAAa,kBAAkB,CAAA,GAAI,IAAA;AACpC,IAAA,IAAA,CAAK,KAAK,IAAA,CAAK,EAAA;AACf,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AACxB,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA,GAAc,gBAAA,CAAiB,IAAA,CAAK,WAAW,CAAA,GAAI,MAAA;AAC3E,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA,GAAe,gBAAA,CAAiB,IAAA,CAAK,YAAY,CAAA,GAAI,MAAA;AAC9E,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,aAAA,GAAgB,gBAAA,CAAiB,IAAA,CAAK,aAAa,CAAA,GAAI,MAAA;AACjF,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA,GAAe,gBAAA,CAAiB,IAAA,CAAK,YAAY,CAAA,GAAI,MAAA;AAC9E,IAAA,IAAA,CAAK,uBAAuB,IAAA,CAAK,oBAAA;AACjC,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAK,eAAA,IAAmB,KAAA;AAC/C,IAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,eAAA;AAC5B,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,aAAA;AAC1B,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK,aAAA;AAC1B,IAAA,IAAA,CAAK,MAAM,IAAA,CAAK,GAAA;AAChB,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AACxB,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,mBAAmB,IAAA,CAAK,gBAAA;AAC7B,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AAKrB,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,MAAM,kBAAkB,IAAA,CAAK,OAAA;AAC7B,MAAA,IAAA,CAAK,OAAA,GAAU,OAAO,SAAA,EAAsB,OAAA,KAAkB;AAE5D,QAAA,MAAM,EAAE,MAAM,KAAA,EAAM,GAAI,kBAAkB,IAAA,CAAK,WAAA,EAAa,SAAA,EAAW,IAAA,CAAK,EAAE,CAAA;AAC9E,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,OAAO,KAAA;AAAA,QACT;AAGA,QAAA,MAAM,EAAE,KAAA,EAAO,mBAAA,EAAoB,GAAI,sBAAA;AAAA,UACrC,IAAA,CAAK,oBAAA;AAAA,UACL,OAAA,EAAS,cAAA;AAAA,UACT,IAAA,CAAK;AAAA,SACP;AACA,QAAA,IAAI,mBAAA,EAAqB;AACvB,UAAA,OAAO,mBAAA;AAAA,QACT;AAEA,QAAA,IAAI,WAAA,GAAc,IAAA;AAElB,QAAA,MAAM,cAAc,OAAA,GAChB;AAAA,UACE,GAAG,OAAA;AAAA,UACH,GAAI,QAAQ,OAAA,GACR;AAAA,YACE,OAAA,EAAS,CAAC,IAAA,EAAW,cAAA,KAAoC;AACvD,cAAA,WAAA,GAAc,IAAA;AACd,cAAA,OAAO,OAAA,CAAQ,OAAA,GAAU,IAAA,EAAM,cAAc,CAAA;AAAA,YAC/C;AAAA,cAEF;AAAC,YAEP,EAAC;AAGL,QAAA,IAAI,gBAAA,GAAmB,WAAA;AACvB,QAAA,IAAI,CAAC,OAAA,EAAS;AAEZ,UAAA,gBAAA,GAAmB;AAAA,YACjB,cAAA,EAAgB,IAAI,cAAA,EAAe;AAAA,YACnC,MAAA,EAAQ;AAAA,WACV;AAAA,QACF,CAAA,MAAO;AAEL,UAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,UAAA,IAAc,WAAA,CAAY,QAAA;AAI/D,UAAA,MAAM,mBAAA,GAAsB,CAAC,gBAAA,KAAqB,WAAA,CAAY,YAAY,WAAA,CAAY,UAAA,CAAA;AAEtF,UAAA,IAAI,gBAAA,IAAoB,CAAC,WAAA,CAAY,KAAA,EAAO;AAE1C,YAAA,MAAM;AAAA,cACJ,OAAA;AAAA,cACA,UAAA;AAAA,cACA,QAAA;AAAA,cACA,OAAA;AAAA,cACA,UAAA,EAAAA,WAAAA;AAAA,cACA,QAAA;AAAA,cACA,UAAA;AAAA,cACA,cAAA;AAAA,cACA,GAAG;AAAA,aACL,GAAI,WAAA;AACJ,YAAA,gBAAA,GAAmB;AAAA,cACjB,GAAG,IAAA;AAAA,cACH,KAAA,EAAO;AAAA,gBACL,SAAS,OAAA,IAAW,EAAA;AAAA,gBACpB,UAAA;AAAA,gBACA,QAAA;AAAA,gBACA,OAAA;AAAA,gBACA,UAAA,EAAAA,WAAAA;AAAA,gBACA,QAAA;AAAA,gBACA,UAAA;AAAA,gBACA;AAAA,eACF;AAAA;AAAA,cAEA,cAAA,EAAgB,IAAA,CAAK,cAAA,IAAkB,IAAI,cAAA;AAAe,aAC5D;AAAA,UACF,CAAA,MAAA,IAAW,mBAAA,IAAuB,CAAC,WAAA,CAAY,QAAA,EAAU;AAEvD,YAAA,MAAM,EAAE,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,SAAS,UAAA,EAAAA,WAAAA,EAAY,GAAG,IAAA,EAAK,GAAI,WAAA;AAC7E,YAAA,gBAAA,GAAmB;AAAA,cACjB,GAAG,IAAA;AAAA,cACH,QAAA,EAAU;AAAA,gBACR,UAAA;AAAA,gBACA,KAAA;AAAA,gBACA,KAAA;AAAA,gBACA,QAAA;AAAA,gBACA,OAAA;AAAA,gBACA,UAAA,EAAAA;AAAA,eACF;AAAA;AAAA,cAEA,cAAA,EAAgB,IAAA,CAAK,cAAA,IAAkB,IAAI,cAAA;AAAe,aAC5D;AAAA,UACF,CAAA,MAAO;AAEL,YAAA,gBAAA,GAAmB;AAAA,cACjB,GAAG,WAAA;AAAA,cACH,KAAA,EAAO,YAAY,KAAA,GACf;AAAA,gBACE,GAAG,WAAA,CAAY,KAAA;AAAA,gBACf,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,OAAA,IAAW,EAAA;AAAA,gBACtC,OAAA,EAAS,CAAC,IAAA,EAAW,cAAA,KAAoC;AACvD,kBAAA,WAAA,GAAc,IAAA;AACd,kBAAA,OAAO,WAAA,CAAY,KAAA,EAAO,OAAA,GAAU,IAAA,EAAM,cAAc,CAAA;AAAA,gBAC1D;AAAA,kBAEF,WAAA,CAAY,KAAA;AAAA,cAChB,QAAA,EAAU,YAAY,QAAA,GAClB;AAAA,gBACE,GAAG,WAAA,CAAY,QAAA;AAAA,gBACf,OAAA,EAAS,CAAC,IAAA,EAAW,cAAA,KAAoC;AACvD,kBAAA,WAAA,GAAc,IAAA;AACd,kBAAA,OAAO,WAAA,CAAY,QAAA,EAAU,OAAA,GAAU,IAAA,EAAM,cAAc,CAAA;AAAA,gBAC7D;AAAA,kBAEF,WAAA,CAAY,QAAA;AAAA,cAChB,cAAA,EAAgB,WAAA,CAAY,cAAA,IAAkB,IAAI,cAAA;AAAe,aACnE;AAAA,UACF;AAAA,QACF;AAEA,QAAA,MAAM,aACJ,gBAAA,CAAiB,KAAA,EAAO,cAAc,gBAAA,CAAiB,QAAA,EAAU,cAAc,gBAAA,EAAkB,UAAA;AAEnG,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,mBAAmB,iBAAA,CAAkB,IAAA,CAAK,YAAA,EAAc,UAAA,EAAY,KAAK,EAAE,CAAA;AACjF,UAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,YAAA,OAAO,gBAAA,CAAiB,KAAA;AAAA,UAC1B;AAAA,QACF;AAGA,QAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAgB,IAAA,EAAa,gBAAgB,CAAA;AAElE,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,MAAM,oBAAoB,uBAAA,CAAwB,IAAA,CAAK,aAAA,EAAe,WAAA,EAAa,KAAK,EAAE,CAAA;AAC1F,UAAA,IAAI,kBAAkB,KAAA,EAAO;AAC3B,YAAA,OAAO,iBAAA,CAAkB,KAAA;AAAA,UAC3B;AAAA,QACF;AAEA,QAAA,MAAM,qBAAA,GAAwB,CAAC,EAAE,OAAO,WAAW,WAAA,IAAe,WAAA,CAAA;AAGlE,QAAA,MAAM,mBAAmB,kBAAA,CAAmB,IAAA,CAAK,cAAc,MAAA,EAAQ,IAAA,CAAK,IAAI,qBAAqB,CAAA;AAErG,QAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,UAAA,OAAO,gBAAA,CAAiB,KAAA;AAAA,QAC1B;AAEA,QAAA,OAAO,gBAAA,CAAiB,IAAA;AAAA,MAC1B,CAAA;AAAA,IACF;AAAA,EACF;AACF;AA0GO,SAAS,WAUd,IAAA,EASA;AACA,EAAA,OAAO,IAAI,KAAK,IAAI,CAAA;AACtB;;;AC9gBO,SAAS,aAAa,IAAA,EAAwB;AACnD,EAAA,OAAO,gBAAgB,IAAA,IAAS,OAAO,SAAS,QAAA,IAAY,IAAA,KAAS,QAAQ,kBAAA,IAAsB,IAAA;AACrG;AAOO,SAAS,aAAa,IAAA,EAA0C;AAKrE,EAAA,OAAO,CAAC,EACN,IAAA,IACA,CAAC,aAAa,IAAI,CAAA,KACjB,YAAA,IAAgB,IAAA,IAAS,aAAa,IAAA,IAAQ,OAAO,IAAA,CAAK,OAAA,KAAY,cAAc,aAAA,IAAiB,IAAA,CAAA,CAAA;AAE1G;AAoBO,SAAS,sBAAsB,IAAA,EAAqC;AACzE,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,MAAM,OAAO,KAAA;AACtD,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,cAAA,GAAiB,CAAA,CAAE,IAAA,KAAS,kBAAA,IAAsB,EAAE,IAAA,KAAS,UAAA;AACnE,EAAA,OAAO,cAAA,IAAkB,OAAO,CAAA,CAAE,EAAA,KAAO,QAAA;AAC3C;AAKO,IAAM,cAAA,GAAiB;AAMvB,SAAS,oBAAoB,UAAA,EAA4B;AAC9D,EAAA,OAAO,UAAA,CAAW,MAAM,GAAG,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAChD","file":"chunk-FA4PTEBK.js","sourcesContent":["import type { RequestContext } from '../request-context';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '../schema';\nimport type { PublicSchema, StandardSchemaWithJSON, StandardSchemaIssue } from '../schema';\nimport { getZodTypeName, isZodArray, isZodObject, unwrapZodType } from '../utils/zod-utils';\n\n/**\n * Safely validates data against a Standard Schema.\n * Catches internal Zod errors (like undefined union options) and provides better error messages.\n *\n * @param schema The Standard Schema to validate against\n * @param data The data to validate\n * @returns The validation result or throws with a descriptive error\n */\nfunction safeValidate<T>(\n schema: StandardSchemaWithJSON<T>,\n data: unknown,\n): { value: T } | { issues: readonly StandardSchemaIssue[] } {\n try {\n const result = schema['~standard'].validate(data);\n if (result instanceof Promise) {\n throw new Error('Your schema is async, which is not supported. Please use a sync schema.');\n }\n return result as { value: T } | { issues: readonly StandardSchemaIssue[] };\n } catch (err) {\n // Catch Zod internal errors like \"Cannot read properties of undefined (reading 'run')\"\n // This happens when a union schema has undefined options\n if (err instanceof TypeError && err.message.includes('Cannot read properties of undefined')) {\n throw new Error(\n `Schema validation failed due to an invalid schema definition. ` +\n `This often happens when a union schema (z.union or z.or) has undefined options. ` +\n `Please check that all schema options are properly defined. Original error: ${err.message}`,\n );\n }\n throw err;\n }\n}\n\n/**\n * Formatted validation errors structure.\n * Contains `errors` array for messages at this level, and `fields` for nested field errors.\n */\nexport type FormattedValidationErrors<T = unknown> = {\n errors: string[];\n fields: T extends object ? { [K in keyof T]?: FormattedValidationErrors<T[K]> } : unknown;\n};\n\nexport interface ValidationError<T = unknown> {\n error: true;\n message: string;\n validationErrors: FormattedValidationErrors<T>;\n}\n\nexport function isValidationError(value: unknown): value is ValidationError {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'error' in value &&\n value.error === true &&\n 'validationErrors' in value\n );\n}\n\n/**\n * Extracts a string key from a path segment (handles both PropertyKey and PathSegment objects).\n */\nfunction getPathKey(segment: PropertyKey | { key: PropertyKey }): string {\n if (typeof segment === 'object' && segment !== null && 'key' in segment) {\n return String(segment.key);\n }\n return String(segment);\n}\n\n/**\n * Creates an empty FormattedValidationErrors object.\n */\nfunction createEmptyErrors(): { errors: string[]; fields: Record<string, unknown> } {\n return { errors: [], fields: {} };\n}\n\n/**\n * Builds a formatted errors object from standard schema validation issues.\n *\n * @param issues Array of validation issues from standard schema validation\n * @returns Formatted errors object with nested structure based on paths\n */\nfunction buildFormattedErrors<T>(issues: readonly StandardSchemaIssue[]): FormattedValidationErrors<T> {\n const result = createEmptyErrors();\n\n for (const issue of issues) {\n if (!issue.path || issue.path.length === 0) {\n // Root-level error\n result.errors.push(issue.message);\n } else {\n // Nested error - build path through fields\n let current = result;\n for (let i = 0; i < issue.path.length; i++) {\n const key = getPathKey(issue.path[i]!);\n if (i === issue.path.length - 1) {\n // Last segment - add the error message\n if (!current.fields[key]) {\n current.fields[key] = createEmptyErrors();\n }\n (current.fields[key] as { errors: string[]; fields: Record<string, unknown> }).errors.push(issue.message);\n } else {\n // Intermediate segment - ensure object exists\n if (!current.fields[key]) {\n current.fields[key] = createEmptyErrors();\n }\n current = current.fields[key] as { errors: string[]; fields: Record<string, unknown> };\n }\n }\n }\n }\n\n return result as FormattedValidationErrors<T>;\n}\n\n/**\n * Safely truncates data for error messages to avoid exposing sensitive information.\n * @param data The data to truncate\n * @param maxLength Maximum length of the truncated string (default: 200)\n * @returns Truncated string representation\n */\nfunction truncateForLogging(data: unknown, maxLength: number = 200): string {\n try {\n const stringified = JSON.stringify(data, null, 2);\n if (stringified.length <= maxLength) {\n return stringified;\n }\n return stringified.slice(0, maxLength) + '... (truncated)';\n } catch {\n return '[Unable to serialize data]';\n }\n}\n\n/**\n * Validates raw suspend data against a schema.\n *\n * @param schema The schema to validate against\n * @param suspendData The raw suspend data to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validated data or a validation error\n */\nexport function validateToolSuspendData<T = unknown>(\n schema: StandardSchemaWithJSON<T> | undefined,\n suspendData: unknown,\n toolId?: string,\n): { data: T; error?: undefined } | { data?: undefined; error: ValidationError<T> } {\n // If no schema, or schema is not a Standard Schema, return suspend data as-is\n if (!schema || !('~standard' in schema)) {\n return { data: suspendData as T };\n }\n\n // Validate the input using standard schema interface\n const validation = safeValidate(schema, suspendData);\n\n if ('value' in validation) {\n return { data: validation.value };\n }\n\n // Validation failed, return error\n const errorMessages = validation.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool suspension data validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${truncateForLogging(suspendData)}`,\n validationErrors: buildFormattedErrors<T>(validation.issues),\n };\n\n return { error };\n}\n\n/**\n * Normalizes undefined/null input to an appropriate default value based on schema type.\n * This handles LLMs (Claude Sonnet 4.5, Gemini 2.4, etc.) that send undefined/null\n * instead of {} or [] when all parameters are optional.\n *\n * @param schema The Zod schema to check\n * @param input The input to normalize\n * @returns The normalized input (original value, {}, or [])\n */\nfunction normalizeNullishInput(schema: StandardSchemaWithJSON<any>, input: unknown): unknown {\n if (typeof input !== 'undefined' && input !== null) {\n return input;\n }\n\n const jsonSchema = standardSchemaToJSONSchema(schema, { io: 'input' });\n\n // Check if schema is an array type (using typeName to avoid dual-package hazard)\n if (jsonSchema.type === 'array') {\n return [];\n }\n\n // Check if schema is an object type (using typeName to avoid dual-package hazard)\n if (jsonSchema.type === 'object') {\n return {};\n }\n\n // For other schema types, return the original input and let Zod validate\n return input;\n}\n\n/**\n * Checks if a value is a plain object (created by {} or new Object()).\n * This excludes class instances, built-in objects like Date/Map/URL, etc.\n *\n * @param value The value to check\n * @returns true if the value is a plain object\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Recursively converts undefined values to null in an object.\n * This is needed for OpenAI compat layers which convert .optional() to .nullable()\n * for strict mode compliance. When fields are omitted (undefined), we convert them\n * to null so the schema validation passes, and the transform then converts null back\n * to undefined. (GitHub #11457)\n *\n * Only recurses into plain objects to preserve class instances and built-in objects\n * like Date, Map, URL, etc. (GitHub #11502)\n *\n * @param input The input to process\n * @returns The processed input with undefined values converted to null\n */\nfunction convertUndefinedToNull(input: unknown): unknown {\n if (input === undefined) {\n return null;\n }\n\n if (input === null || typeof input !== 'object') {\n return input;\n }\n\n if (Array.isArray(input)) {\n return input.map(convertUndefinedToNull);\n }\n\n // Only recurse into plain objects - preserve class instances, built-in objects\n // (Date, Map, Set, URL, etc.) and any other non-plain objects\n if (!isPlainObject(input)) {\n return input;\n }\n\n // It's a plain object - recursively process all properties\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n result[key] = convertUndefinedToNull(value);\n }\n return result;\n}\n\n/**\n * Recursively strips null/undefined values from object properties.\n * This handles LLMs (e.g. Gemini) that send null for .optional() fields,\n * where Zod expects undefined, not null. By stripping nullish values,\n * we let Zod treat them as \"not provided\" which matches .optional() semantics.\n * (GitHub #12362)\n *\n * @param input The input to process\n * @returns The processed input with null/undefined values stripped from objects\n */\nfunction stripNullishValues(input: unknown): unknown {\n // Top-level null/undefined becomes undefined\n if (input === null || input === undefined) {\n return undefined;\n }\n\n if (typeof input !== 'object') {\n return input;\n }\n\n if (Array.isArray(input)) {\n // For arrays, recursively process elements but keep nulls in arrays\n // (array elements with null may be intentional)\n return input.map(item => (item === null ? null : stripNullishValues(item)));\n }\n\n // Only recurse into plain objects - preserve class instances, built-in objects\n if (!isPlainObject(input)) {\n return input;\n }\n\n // It's a plain object - recursively process all properties, omitting null/undefined values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n if (value === null || value === undefined) {\n // Omit null/undefined values - equivalent to \"not provided\" for optional fields\n continue;\n }\n result[key] = stripNullishValues(value);\n }\n return result;\n}\n\n/**\n * Strip null/undefined values only at specific paths that caused validation errors.\n * Preserves null for .nullable() fields that are valid.\n */\nfunction stripNullishValuesAtPaths(input: unknown, paths: Set<string>, currentPath = ''): unknown {\n if (input === null || input === undefined) {\n return paths.has(currentPath) ? undefined : input;\n }\n\n if (typeof input !== 'object') {\n return input;\n }\n\n if (Array.isArray(input)) {\n return input.map((item, i) =>\n stripNullishValuesAtPaths(item, paths, currentPath ? `${currentPath}.${i}` : String(i)),\n );\n }\n\n if (!isPlainObject(input)) {\n return input;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n const fieldPath = currentPath ? `${currentPath}.${key}` : key;\n if ((value === null || value === undefined) && paths.has(fieldPath)) {\n // Only omit null/undefined for fields that caused validation errors\n continue;\n }\n result[key] = stripNullishValuesAtPaths(value, paths, fieldPath);\n }\n return result;\n}\n\n/**\n * Gets the value at a path in a nested object, using the same path segment format\n * as Standard Schema validation issues.\n *\n * @param obj The object to traverse\n * @param pathSegments Array of path segments from a validation issue\n * @returns The value at the path, or a sentinel symbol if the path doesn't exist\n */\nconst PATH_NOT_FOUND = Symbol('PATH_NOT_FOUND');\nfunction getValueAtPath(obj: unknown, pathSegments: ReadonlyArray<PropertyKey | { key: PropertyKey }>): unknown {\n let current: unknown = obj;\n for (const segment of pathSegments) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return PATH_NOT_FOUND;\n }\n const key =\n typeof segment === 'object' && segment !== null && 'key' in segment ? String(segment.key) : String(segment);\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\n/**\n * Coerces stringified JSON values in object properties when the schema expects\n * an array or object but the LLM returned a JSON string.\n *\n * Some LLMs (e.g., GLM4.7) return stringified JSON for array/object parameters:\n * { \"args\": \"[\\\"parse_excel.py\\\"]\" }\n * instead of:\n * { \"args\": [\"parse_excel.py\"] }\n *\n * This function walks the top-level properties of a plain object and attempts\n * to JSON.parse string values when the schema expects a non-string type.\n * (GitHub #12757)\n *\n * @param schema The Zod schema to check field types against\n * @param input The input to process\n * @returns The input with stringified JSON values coerced, or the original input\n */\nfunction coerceStringifiedJsonValues(schema: StandardSchemaWithJSON<unknown>, input: unknown): unknown {\n // Only process plain objects with object schemas\n if (!isPlainObject(input)) {\n return input;\n }\n\n const unwrapped = unwrapZodType(schema as any);\n if (!isZodObject(unwrapped)) {\n return input;\n }\n\n const shape = (unwrapped as any).shape;\n if (!shape || typeof shape !== 'object') {\n return input;\n }\n\n let changed = false;\n const result: Record<string, unknown> = { ...input };\n\n for (const [key, value] of Object.entries(input)) {\n if (typeof value !== 'string') {\n continue;\n }\n\n const fieldSchema = shape[key];\n if (!fieldSchema) {\n continue;\n }\n\n // Unwrap the field schema to find the base type\n const baseFieldSchema = unwrapZodType(fieldSchema);\n\n // Only attempt coercion if the schema expects a non-string type\n // and the string looks like it could be JSON (starts with [ or {)\n if (getZodTypeName(baseFieldSchema) === 'ZodString') {\n continue;\n }\n\n const trimmed = value.trim();\n if (\n (isZodArray(baseFieldSchema) && trimmed.startsWith('[')) ||\n (isZodObject(baseFieldSchema) && trimmed.startsWith('{'))\n ) {\n try {\n const parsed = JSON.parse(value);\n if (\n (isZodArray(baseFieldSchema) && Array.isArray(parsed)) ||\n (isZodObject(baseFieldSchema) && isPlainObject(parsed))\n ) {\n result[key] = parsed;\n changed = true;\n }\n } catch {\n // Not valid JSON, leave as-is\n }\n }\n }\n\n return changed ? result : input;\n}\n\n/**\n * Validates raw input data against a schema.\n *\n * @param schema The schema to validate against (or undefined to skip validation)\n * @param input The raw input data to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validated data or a validation error\n */\nexport function validateToolInput<T = unknown>(\n schema: StandardSchemaWithJSON<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T; error?: undefined } | { data?: undefined; error: ValidationError<T> } {\n // If no schema, or schema is not a Standard Schema (e.g. plain JSON Schema from Vercel tools),\n // return input as-is. Only validate when we have a proper Standard Schema with ~standard.validate.\n if (!schema || !('~standard' in schema)) {\n return { data: input as T };\n }\n\n // Validation pipeline:\n //\n // 1. normalizeNullishInput: Convert top-level null/undefined to {} or [] based on schema type.\n // Handles LLMs that send undefined instead of {} or [] for all-optional parameters.\n //\n // 2. convertUndefinedToNull: Convert undefined values to null in object properties.\n // Needed for OpenAI compat layers that convert .optional() to .nullable() for\n // strict mode compliance. The schema's transform converts null back to undefined.\n // (GitHub #11457)\n //\n // 3. First validation attempt with null values preserved. This handles .nullable()\n // schemas correctly (where null is a valid value).\n //\n // 4. If validation fails, retry with stringified JSON values coerced to their\n // proper types. Some LLMs (e.g. GLM4.7) return JSON arrays/objects as strings.\n // (GitHub #12757)\n //\n // 5. If validation still fails, retry with null values stripped from object properties.\n // This handles LLMs (e.g. Gemini) that send null for .optional() fields, where\n // Zod expects undefined, not null. (GitHub #12362)\n\n // Step 1: Normalize top-level null/undefined to appropriate default\n let normalizedInput = normalizeNullishInput(schema, input);\n\n // Step 2: Convert undefined values to null recursively (GitHub #11457)\n normalizedInput = convertUndefinedToNull(normalizedInput);\n\n // Step 3: Validate the normalized input\n const validation = safeValidate(schema, normalizedInput);\n\n if ('value' in validation) {\n return { data: validation.value };\n }\n\n // Step 4: Retry with stringified JSON values coerced (GitHub #12757)\n // LLMs like GLM4.7 send stringified JSON for array/object parameters, e.g.\n // { \"args\": \"[\\\"file.py\\\"]\" } instead of { \"args\": [\"file.py\"] }.\n const coercedInput = coerceStringifiedJsonValues(schema, normalizedInput);\n if (coercedInput !== normalizedInput) {\n const coercedValidation = safeValidate(schema, coercedInput);\n if ('value' in coercedValidation) {\n return { data: coercedValidation.value };\n }\n }\n\n // Step 5: Retry with null values stripped only for failing fields (GitHub #12362)\n // LLMs like Gemini send null for optional fields, but Zod's .optional() only\n // accepts undefined, not null. We only strip nulls for fields that caused\n // validation errors, preserving null for .nullable() schemas that need it.\n //\n // We detect null-related failures by checking the actual value at the failing\n // path rather than relying on error message string matching (GitHub #14476).\n // This ensures we catch null values regardless of the validator's error message\n // format (e.g., \"must be string\", \"must be object\", etc.).\n const failingNullPaths = new Set(\n validation.issues\n .filter(issue => {\n if (!issue.path || issue.path.length === 0) return false;\n const value = getValueAtPath(normalizedInput, issue.path);\n return value === null || value === undefined;\n })\n .map(issue => issue.path?.map(p => (typeof p === 'object' && 'key' in p ? String(p.key) : String(p))).join('.'))\n .filter((p): p is string => !!p),\n );\n const strippedInput =\n failingNullPaths.size > 0 ? stripNullishValuesAtPaths(input, failingNullPaths) : stripNullishValues(input);\n const normalizedStripped = normalizeNullishInput(schema, strippedInput);\n const retryValidation = safeValidate(schema, normalizedStripped);\n\n if ('value' in retryValidation) {\n return { data: retryValidation.value };\n }\n\n // All attempts failed - return the original (non-stripped) error since it's\n // more informative about what the schema actually expects\n const errorMessages = validation.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool input validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${truncateForLogging(input)}`,\n validationErrors: buildFormattedErrors<T>(validation.issues),\n };\n\n return { error };\n}\n\n/**\n * Validates tool output data against a schema.\n *\n * @param schema The schema to validate against\n * @param output The output data to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validated data or a validation error\n */\nexport function validateToolOutput<T = unknown>(\n schema: StandardSchemaWithJSON<T> | undefined,\n output: unknown,\n toolId?: string,\n suspendCalled?: boolean,\n): { data: T; error?: undefined } | { data?: undefined; error: ValidationError<T> } {\n // If no schema, not a Standard Schema, or suspend was called, return output as-is\n if (!schema || !('~standard' in schema) || suspendCalled) {\n return { data: output as T };\n }\n\n // Validate the output using standard schema interface\n const validation = safeValidate(schema, output);\n\n if ('value' in validation) {\n return { data: validation.value };\n }\n\n // Validation failed, return error\n const errorMessages = validation.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool output validation failed${toolId ? ` for ${toolId}` : ''}. The tool returned invalid output:\\n${errorMessages}\\n\\nReturned output: ${truncateForLogging(output)}`,\n validationErrors: buildFormattedErrors<T>(validation.issues),\n };\n\n return { error };\n}\n\n/**\n * Keys that are considered sensitive and should be redacted in error messages.\n */\nconst SENSITIVE_KEYS = ['password', 'secret', 'token', 'apiKey', 'api_key', 'auth', 'credential'];\n\n/**\n * Redacts sensitive keys from an object for safe logging.\n * @param obj The object to redact\n * @returns A new object with sensitive values replaced with '[REDACTED]'\n */\nfunction redactSensitiveKeys(obj: unknown): unknown {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(redactSensitiveKeys);\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (SENSITIVE_KEYS.some(sensitive => key.toLowerCase().includes(sensitive.toLowerCase()))) {\n result[key] = '[REDACTED]';\n } else if (typeof value === 'object' && value !== null) {\n result[key] = redactSensitiveKeys(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Validates request context data against a schema.\n * This is used to validate the request context before tool execution.\n *\n * @param schema The schema to validate against (PublicSchema which accepts Zod, JSONSchema, etc.)\n * @param requestContext The request context to validate\n * @param identifier Optional identifier (tool/step ID) for better error messages\n * @returns The validated data or a validation error\n */\nexport function validateRequestContext<T = any>(\n schema: PublicSchema<T> | undefined,\n requestContext: RequestContext | undefined,\n identifier?: string,\n): { data: T | Record<string, any>; error?: ValidationError<T> } {\n // If no schema, return request context values as-is\n if (!schema) {\n return { data: (requestContext?.all ?? {}) as T };\n }\n\n // Get the values from request context\n const contextValues = requestContext?.all ?? {};\n\n // Convert PublicSchema to StandardSchemaWithJSON for validation\n const standardSchema = toStandardSchema(schema);\n\n // Validate using standard schema interface\n const validation = standardSchema['~standard'].validate(contextValues);\n\n if (validation instanceof Promise) {\n throw new Error('Your schema is async, which is not supported. Please use a sync schema.');\n }\n\n if ('value' in validation) {\n return { data: validation.value };\n }\n\n // Validation failed, return error\n const errorMessages = validation.issues.map(e => `- ${e.path?.join('.') || 'root'}: ${e.message}`).join('\\n');\n\n // Redact sensitive keys before including in error message\n const redactedContext = redactSensitiveKeys(contextValues);\n\n const error: ValidationError<T> = {\n error: true,\n message: `Request context validation failed${identifier ? ` for ${identifier}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided request context: ${truncateForLogging(redactedContext)}`,\n validationErrors: buildFormattedErrors<T>(validation.issues),\n };\n\n return { data: contextValues as T, error };\n}\n","import type { Mastra } from '../mastra';\nimport { RequestContext } from '../request-context';\nimport { toStandardSchema } from '../schema';\nimport type { PublicSchema, StandardSchemaWithJSON, InferPublicSchema } from '../schema';\nimport type { SuspendOptions } from '../workflows';\nimport type { McpMetadata, MCPToolProperties, ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput, validateToolOutput, validateToolSuspendData, validateRequestContext } from './validation';\n\n/**\n * Marker to identify Mastra tools even when `instanceof` fails.\n * This can happen in environments like Vite SSR where the same module\n * may be loaded multiple times, creating different class instances.\n * Uses Symbol.for() so the same symbol is shared across module copies.\n * Follows the naming convention: <org>.<product>.<category>.<className>\n */\nexport const MASTRA_TOOL_MARKER = Symbol.for('mastra.core.tool.Tool');\n\n/**\n * A type-safe tool that agents and workflows can call to perform specific actions.\n *\n * @template TSchemaIn - Input schema type\n * @template TSchemaOut - Output schema type\n * @template TSuspendSchema - Suspend operation schema type\n * @template TResumeSchema - Resume operation schema type\n * @template TContext - Execution context type\n *\n * @example Basic tool with validation\n * ```typescript\n * const weatherTool = createTool({\n * id: 'get-weather',\n * description: 'Get weather for a location',\n * inputSchema: z.object({\n * location: z.string(),\n * units: z.enum(['celsius', 'fahrenheit']).optional()\n * }),\n * execute: async (inputData) => {\n * return await fetchWeather(inputData.location, inputData.units);\n * }\n * });\n * ```\n *\n * @example Tool requiring approval\n * ```typescript\n * const deleteFileTool = createTool({\n * id: 'delete-file',\n * description: 'Delete a file',\n * requireApproval: true,\n * inputSchema: z.object({ filepath: z.string() }),\n * execute: async (inputData) => {\n * await fs.unlink(inputData.filepath);\n * return { deleted: true };\n * }\n * });\n * ```\n *\n * @example Tool with Mastra integration\n * ```typescript\n * const saveTool = createTool({\n * id: 'save-data',\n * description: 'Save data to storage',\n * inputSchema: z.object({ key: z.string(), value: z.any() }),\n * execute: async (inputData, context) => {\n * const storage = context?.mastra?.getStorage();\n * await storage?.set(inputData.key, inputData.value);\n * return { saved: true };\n * }\n * });\n * ```\n */\nexport class Tool<\n TSchemaIn = unknown,\n TSchemaOut = unknown,\n TSuspendSchema = unknown,\n TResumeSchema = unknown,\n TContext extends ToolExecutionContext<TSuspendSchema, TResumeSchema, any> = ToolExecutionContext<\n TSuspendSchema,\n TResumeSchema\n >,\n TId extends string = string,\n TRequestContext extends Record<string, any> | unknown = unknown,\n> implements ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext, TId, TRequestContext> {\n /** Unique identifier for the tool */\n id: TId;\n\n /** Description of what the tool does */\n description: string;\n\n /** Schema for validating input parameters */\n inputSchema?: StandardSchemaWithJSON<TSchemaIn>;\n\n /** Schema for validating output structure */\n outputSchema?: StandardSchemaWithJSON<TSchemaOut>;\n\n /** Schema for suspend operation data */\n suspendSchema?: StandardSchemaWithJSON<TSuspendSchema>;\n\n /** Schema for resume operation data */\n resumeSchema?: StandardSchemaWithJSON<TResumeSchema>;\n\n /**\n * Schema for validating request context values.\n * When provided, the request context will be validated against this schema before tool execution.\n */\n requestContextSchema?: PublicSchema<TRequestContext>;\n\n /**\n * Tool execution function\n * @param inputData - The raw, validated input data\n * @param context - Optional execution context with metadata\n * @returns Promise resolving to tool output or a ValidationError if input validation fails\n */\n execute?: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext, TId, TRequestContext>['execute'];\n\n /** Parent Mastra instance for accessing shared resources */\n mastra?: Mastra;\n\n /**\n * Whether the tool requires explicit user approval before execution\n * @example\n * ```typescript\n * // For destructive operations\n * requireApproval: true\n * ```\n */\n requireApproval?: boolean;\n\n /**\n * Provider-specific options passed to the model when this tool is used.\n * Keys are provider names (e.g., 'anthropic', 'openai'), values are provider-specific configs.\n * @example\n * ```typescript\n * providerOptions: {\n * anthropic: {\n * cacheControl: { type: 'ephemeral' }\n * }\n * }\n * ```\n */\n providerOptions?: Record<string, Record<string, unknown>>;\n\n /**\n * Optional function to transform the tool's raw output before sending it to the model.\n * The raw result is still available for application logic; only the model sees the transformed version.\n */\n toModelOutput?: (output: TSchemaOut) => unknown;\n\n /**\n * Optional MCP-specific properties including annotations and metadata.\n * Only relevant when the tool is being used in an MCP context.\n * @example\n * ```typescript\n * mcp: {\n * annotations: {\n * title: 'Weather Lookup',\n * readOnlyHint: true,\n * destructiveHint: false\n * },\n * _meta: {\n * version: '1.0.0',\n * author: 'team@example.com'\n * }\n * }\n * ```\n */\n mcp?: MCPToolProperties;\n\n onInputStart?: ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext,\n TId,\n TRequestContext\n >['onInputStart'];\n onInputDelta?: ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext,\n TId,\n TRequestContext\n >['onInputDelta'];\n onInputAvailable?: ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext,\n TId,\n TRequestContext\n >['onInputAvailable'];\n onOutput?: ToolAction<\n TSchemaIn,\n TSchemaOut,\n TSuspendSchema,\n TResumeSchema,\n TContext,\n TId,\n TRequestContext\n >['onOutput'];\n\n /**\n * Examples of valid tool inputs passed through to the AI SDK.\n */\n inputExamples?: Array<{ input: Record<string, unknown> }>;\n\n /**\n * Metadata identifying this tool as originating from an MCP server.\n * Set automatically by the MCP client when creating tools.\n */\n mcpMetadata?: McpMetadata;\n\n /**\n * Creates a new Tool instance with input validation wrapper.\n *\n * @param opts - Tool configuration and execute function\n * @example\n * ```typescript\n * const tool = new Tool({\n * id: 'my-tool',\n * description: 'Does something useful',\n * inputSchema: z.object({ name: z.string() }),\n * execute: async (inputData) => ({ greeting: `Hello ${inputData.name}` })\n * });\n * ```\n */\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TSuspendSchema, TResumeSchema, TContext, TId, TRequestContext>) {\n (this as any)[MASTRA_TOOL_MARKER] = true;\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema ? toStandardSchema(opts.inputSchema) : undefined;\n this.outputSchema = opts.outputSchema ? toStandardSchema(opts.outputSchema) : undefined;\n this.suspendSchema = opts.suspendSchema ? toStandardSchema(opts.suspendSchema) : undefined;\n this.resumeSchema = opts.resumeSchema ? toStandardSchema(opts.resumeSchema) : undefined;\n this.requestContextSchema = opts.requestContextSchema;\n this.mastra = opts.mastra;\n this.requireApproval = opts.requireApproval || false;\n this.providerOptions = opts.providerOptions;\n this.toModelOutput = opts.toModelOutput;\n this.inputExamples = opts.inputExamples;\n this.mcp = opts.mcp;\n this.mcpMetadata = opts.mcpMetadata;\n this.onInputStart = opts.onInputStart;\n this.onInputDelta = opts.onInputDelta;\n this.onInputAvailable = opts.onInputAvailable;\n this.onOutput = opts.onOutput;\n\n // Tools receive two parameters:\n // 1. input - The raw, validated input data\n // 2. context - Execution metadata (mastra, suspend, etc.)\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (inputData: TSchemaIn, context?: any) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, inputData, this.id);\n if (error) {\n return error;\n }\n\n // Validate request context if schema exists\n const { error: requestContextError } = validateRequestContext(\n this.requestContextSchema,\n context?.requestContext,\n this.id,\n );\n if (requestContextError) {\n return requestContextError as any;\n }\n\n let suspendData = null;\n\n const baseContext = context\n ? {\n ...context,\n ...(context.suspend\n ? {\n suspend: (args: any, suspendOptions?: SuspendOptions) => {\n suspendData = args;\n return context.suspend?.(args, suspendOptions);\n },\n }\n : {}),\n }\n : {};\n\n // Organize context based on execution source\n let organizedContext = baseContext;\n if (!context) {\n // No context provided - create a minimal context with requestContext\n organizedContext = {\n requestContext: new RequestContext(),\n mastra: undefined,\n };\n } else {\n // Check if this is agent execution (has toolCallId and messages)\n const isAgentExecution = baseContext.toolCallId && baseContext.messages;\n\n // Check if this is workflow execution (has workflow properties)\n // Agent execution takes precedence - don't treat as workflow if it's an agent call\n const isWorkflowExecution = !isAgentExecution && (baseContext.workflow || baseContext.workflowId);\n\n if (isAgentExecution && !baseContext.agent) {\n // Reorganize agent context - nest agent-specific properties under 'agent' key\n const {\n agentId,\n toolCallId,\n messages,\n suspend,\n resumeData,\n threadId,\n resourceId,\n writableStream,\n ...rest\n } = baseContext;\n organizedContext = {\n ...rest,\n agent: {\n agentId: agentId || '',\n toolCallId,\n messages,\n suspend,\n resumeData,\n threadId,\n resourceId,\n writableStream,\n },\n // Ensure requestContext is always present\n requestContext: rest.requestContext || new RequestContext(),\n };\n } else if (isWorkflowExecution && !baseContext.workflow) {\n // Reorganize workflow context - nest workflow-specific properties under 'workflow' key\n const { workflowId, runId, state, setState, suspend, resumeData, ...rest } = baseContext;\n organizedContext = {\n ...rest,\n workflow: {\n workflowId,\n runId,\n state,\n setState,\n suspend,\n resumeData,\n },\n // Ensure requestContext is always present\n requestContext: rest.requestContext || new RequestContext(),\n };\n } else {\n // Ensure requestContext is always present even for direct execution\n organizedContext = {\n ...baseContext,\n agent: baseContext.agent\n ? {\n ...baseContext.agent,\n agentId: baseContext.agent.agentId ?? '',\n suspend: (args: any, suspendOptions?: SuspendOptions) => {\n suspendData = args;\n return baseContext.agent?.suspend?.(args, suspendOptions);\n },\n }\n : baseContext.agent,\n workflow: baseContext.workflow\n ? {\n ...baseContext.workflow,\n suspend: (args: any, suspendOptions?: SuspendOptions) => {\n suspendData = args;\n return baseContext.workflow?.suspend?.(args, suspendOptions);\n },\n }\n : baseContext.workflow,\n requestContext: baseContext.requestContext || new RequestContext(),\n };\n }\n }\n\n const resumeData =\n organizedContext.agent?.resumeData ?? organizedContext.workflow?.resumeData ?? organizedContext?.resumeData;\n\n if (resumeData) {\n const resumeValidation = validateToolInput(this.resumeSchema, resumeData, this.id);\n if (resumeValidation.error) {\n return resumeValidation.error as any;\n }\n }\n\n // Call the original execute with validated input and organized context\n const output = await originalExecute(data as any, organizedContext);\n\n if (suspendData) {\n const suspendValidation = validateToolSuspendData(this.suspendSchema, suspendData, this.id);\n if (suspendValidation.error) {\n return suspendValidation.error as any;\n }\n }\n\n const skiptOutputValidation = !!(typeof output === 'undefined' && suspendData);\n\n // Validate output if schema exists\n const outputValidation = validateToolOutput(this.outputSchema, output, this.id, skiptOutputValidation);\n\n if (outputValidation.error) {\n return outputValidation.error as any;\n }\n\n return outputValidation.data;\n };\n }\n }\n}\n\n/**\n * Creates a type-safe tool with automatic input validation.\n *\n * @template TSchemaIn - Input schema type\n * @template TSchemaOut - Output schema type\n * @template TSuspendSchema - Suspend operation schema type\n * @template TResumeSchema - Resume operation schema type\n * @template TContext - Execution context type\n * @template TExecute - Execute function type\n *\n * @param opts - Tool configuration including schemas and execute function\n * @returns Type-safe Tool instance with conditional typing based on schemas\n *\n * @example Simple tool\n * ```typescript\n * const greetTool = createTool({\n * id: 'greet',\n * description: 'Say hello',\n * execute: async () => ({ message: 'Hello!' })\n * });\n * ```\n *\n * @example Tool with input validation\n * ```typescript\n * const calculateTool = createTool({\n * id: 'calculate',\n * description: 'Perform calculations',\n * inputSchema: z.object({\n * operation: z.enum(['add', 'subtract']),\n * a: z.number(),\n * b: z.number()\n * }),\n * execute: async (inputData) => {\n * const result = inputData.operation === 'add'\n * ? inputData.a + inputData.b\n * : inputData.a - inputData.b;\n * return { result };\n * }\n * });\n * ```\n *\n * @example Tool with output schema\n * ```typescript\n * const userTool = createTool({\n * id: 'get-user',\n * description: 'Get user data',\n * inputSchema: z.object({ userId: z.string() }),\n * outputSchema: z.object({\n * id: z.string(),\n * name: z.string(),\n * email: z.string()\n * }),\n * execute: async (inputData) => {\n * return await fetchUser(inputData.userId);\n * }\n * });\n * ```\n *\n * @example Tool with external API\n * ```typescript\n * const weatherTool = createTool({\n * id: 'weather',\n * description: 'Get weather data',\n * inputSchema: z.object({\n * city: z.string(),\n * units: z.enum(['metric', 'imperial']).default('metric')\n * }),\n * execute: async (inputData) => {\n * const response = await fetch(\n * `https://api.weather.com/v1/weather?q=${inputData.city}&units=${inputData.units}`\n * );\n * return response.json();\n * }\n * });\n * ```\n */\ntype SchemaLike = PublicSchema<any> | undefined;\ntype InferSchema<T extends SchemaLike> = T extends PublicSchema<any> ? InferPublicSchema<T> : unknown;\n\ntype CreateToolOpts<\n TId extends string,\n TInputSchema extends SchemaLike,\n TOutputSchema extends SchemaLike,\n TSuspendSchema extends SchemaLike,\n TResumeSchema extends SchemaLike,\n TRequestContext,\n TContext extends ToolExecutionContext<InferSchema<TSuspendSchema>, InferSchema<TResumeSchema>, TRequestContext>,\n> = Omit<\n ToolAction<\n InferSchema<TInputSchema>,\n InferSchema<TOutputSchema>,\n InferSchema<TSuspendSchema>,\n InferSchema<TResumeSchema>,\n TContext,\n TId,\n TRequestContext\n >,\n 'inputSchema' | 'outputSchema' | 'suspendSchema' | 'resumeSchema'\n> & {\n inputSchema?: TInputSchema;\n outputSchema?: TOutputSchema;\n suspendSchema?: TSuspendSchema;\n resumeSchema?: TResumeSchema;\n};\nexport function createTool<\n TId extends string = string,\n TInputSchema extends SchemaLike = undefined,\n TOutputSchema extends SchemaLike = undefined,\n TSuspendSchema extends SchemaLike = undefined,\n TResumeSchema extends SchemaLike = undefined,\n TRequestContext extends Record<string, any> | unknown = unknown,\n TContext extends ToolExecutionContext<InferSchema<TSuspendSchema>, InferSchema<TResumeSchema>, TRequestContext> =\n ToolExecutionContext<InferSchema<TSuspendSchema>, InferSchema<TResumeSchema>, TRequestContext>,\n>(\n opts: CreateToolOpts<TId, TInputSchema, TOutputSchema, TSuspendSchema, TResumeSchema, TRequestContext, TContext>,\n): Tool<\n InferSchema<TInputSchema>,\n InferSchema<TOutputSchema>,\n InferSchema<TSuspendSchema>,\n InferSchema<TResumeSchema>,\n TContext,\n TId,\n TRequestContext\n> {\n return new Tool(opts);\n}\n","import { Tool, MASTRA_TOOL_MARKER } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Mastra Tool, using both instanceof and marker.\n * The marker fallback handles environments like Vite SSR where the same\n * module may be loaded multiple times, causing instanceof to fail.\n */\nexport function isMastraTool(tool: unknown): boolean {\n return tool instanceof Tool || (typeof tool === 'object' && tool !== null && MASTRA_TOOL_MARKER in tool);\n}\n\n/**\n * Checks if a tool is a Vercel Tool (AI SDK tool)\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Mastra's Tool class\n // AI SDK tools must have an execute function and either:\n // - 'parameters' (v4) or 'inputSchema' (v5/v6)\n // This prevents plain objects with inputSchema (like client tools) from being treated as VercelTools\n return !!(\n tool &&\n !isMastraTool(tool) &&\n ('parameters' in tool || ('execute' in tool && typeof tool.execute === 'function' && 'inputSchema' in tool))\n );\n}\n\ntype ProviderTool = {\n type: 'provider-defined' | 'provider';\n id: string;\n args?: Record<string, unknown>;\n inputSchema?: unknown;\n outputSchema?: unknown;\n requestContextSchema?: unknown;\n};\n\n/**\n * Checks if a tool is a provider-defined tool from the AI SDK.\n * Provider tools (like google.tools.googleSearch(), openai.tools.webSearch()) have:\n * - type: \"provider-defined\" (AI SDK v5) or \"provider\" (AI SDK v6)\n * - id: in format 'provider.tool_name' (e.g., 'google.google_search')\n *\n * These tools have a lazy `inputSchema` function that returns an AI SDK Schema\n * (not a Zod schema), so they require special handling during serialization.\n */\nexport function isProviderDefinedTool(tool: unknown): tool is ProviderTool {\n if (typeof tool !== 'object' || tool === null) return false;\n const t = tool as Record<string, unknown>;\n const isProviderType = t.type === 'provider-defined' || t.type === 'provider';\n return isProviderType && typeof t.id === 'string';\n}\n\n/**\n * Alias for callers that prefer the shorter provider-tool terminology.\n */\nexport const isProviderTool = isProviderDefinedTool;\n\n/**\n * Extracts the model-facing tool name from a provider tool id.\n * e.g. 'openai.web_search' -> 'web_search'\n */\nexport function getProviderToolName(providerId: string): string {\n return providerId.split('.').slice(1).join('.');\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkK4NN2KQQ_cjs = require('./chunk-K4NN2KQQ.cjs');
3
+ var chunkAV4YSAZL_cjs = require('./chunk-AV4YSAZL.cjs');
4
4
  var chunkRO47SMI7_cjs = require('./chunk-RO47SMI7.cjs');
5
5
  var chunk7XAECHYL_cjs = require('./chunk-7XAECHYL.cjs');
6
6
  var nodePath = require('path');
@@ -1584,7 +1584,7 @@ function isLSPAvailable() {
1584
1584
  return jsonrpcModule !== null;
1585
1585
  }
1586
1586
  try {
1587
- const req = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-QVVWKMFM.cjs', document.baseURI).href)));
1587
+ const req = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-GXXNF6NF.cjs', document.baseURI).href)));
1588
1588
  req.resolve("vscode-jsonrpc/node");
1589
1589
  req.resolve("vscode-languageserver-protocol");
1590
1590
  return true;
@@ -1598,7 +1598,7 @@ async function loadLSPDeps() {
1598
1598
  return { ...jsonrpcModule, ...lspProtocolModule };
1599
1599
  }
1600
1600
  try {
1601
- const req = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-QVVWKMFM.cjs', document.baseURI).href)));
1601
+ const req = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-GXXNF6NF.cjs', document.baseURI).href)));
1602
1602
  const jsonrpc = req("vscode-jsonrpc/node");
1603
1603
  const protocol = req("vscode-languageserver-protocol");
1604
1604
  jsonrpcModule = {
@@ -6069,7 +6069,7 @@ async function resolveSkill(skills, identifier) {
6069
6069
  return { notFound: `Skill "${identifier}" not found. Available skills: ${skillEntries.join(", ")}` };
6070
6070
  }
6071
6071
  function createSkillTool(skills) {
6072
- const tool = chunkK4NN2KQQ_cjs.createTool({
6072
+ const tool = chunkAV4YSAZL_cjs.createTool({
6073
6073
  id: "skill",
6074
6074
  description: "Activate a skill to load its full instructions. You should activate skills proactively when they are relevant to the user's request without asking for permission first.",
6075
6075
  inputSchema: v4.z.object({
@@ -6104,7 +6104,7 @@ ${skill.assets.map((a) => `- assets/${a}`).join("\n")}`);
6104
6104
  return tool;
6105
6105
  }
6106
6106
  function createSkillSearchTool(skills) {
6107
- const tool = chunkK4NN2KQQ_cjs.createTool({
6107
+ const tool = chunkAV4YSAZL_cjs.createTool({
6108
6108
  id: "skill_search",
6109
6109
  description: "Search across skill content to find relevant information. Useful when you need to find specific details within skills.",
6110
6110
  inputSchema: v4.z.object({
@@ -6128,7 +6128,7 @@ ${preview}`;
6128
6128
  return tool;
6129
6129
  }
6130
6130
  function createSkillReadTool(skills) {
6131
- const tool = chunkK4NN2KQQ_cjs.createTool({
6131
+ const tool = chunkAV4YSAZL_cjs.createTool({
6132
6132
  id: "skill_read",
6133
6133
  description: "Read a file from a skill directory (references, scripts, or assets). The path is relative to the skill root.",
6134
6134
  inputSchema: v4.z.object({
@@ -6828,7 +6828,7 @@ function isAstGrepAvailable() {
6828
6828
  return astGrepModule !== null;
6829
6829
  }
6830
6830
  try {
6831
- const req = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-QVVWKMFM.cjs', document.baseURI).href)));
6831
+ const req = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-GXXNF6NF.cjs', document.baseURI).href)));
6832
6832
  req.resolve("@ast-grep/napi");
6833
6833
  return true;
6834
6834
  } catch {
@@ -6998,7 +6998,7 @@ function patternReplace(content, root, pattern, replacement) {
6998
6998
  }
6999
6999
  return { content: modifiedContent, count };
7000
7000
  }
7001
- var astEditTool = chunkK4NN2KQQ_cjs.createTool({
7001
+ var astEditTool = chunkAV4YSAZL_cjs.createTool({
7002
7002
  id: WORKSPACE_TOOLS.FILESYSTEM.AST_EDIT,
7003
7003
  description: `Edit code using AST-based analysis for intelligent transformations.
7004
7004
 
@@ -7117,7 +7117,7 @@ Pattern replace (for everything else):
7117
7117
  return output;
7118
7118
  }
7119
7119
  });
7120
- var deleteFileTool = chunkK4NN2KQQ_cjs.createTool({
7120
+ var deleteFileTool = chunkAV4YSAZL_cjs.createTool({
7121
7121
  id: WORKSPACE_TOOLS.FILESYSTEM.DELETE,
7122
7122
  description: "Delete a file or directory from the workspace filesystem",
7123
7123
  inputSchema: v4.z.object({
@@ -7139,7 +7139,7 @@ var deleteFileTool = chunkK4NN2KQQ_cjs.createTool({
7139
7139
  return `Deleted ${path8}`;
7140
7140
  }
7141
7141
  });
7142
- var editFileTool = chunkK4NN2KQQ_cjs.createTool({
7142
+ var editFileTool = chunkAV4YSAZL_cjs.createTool({
7143
7143
  id: WORKSPACE_TOOLS.FILESYSTEM.EDIT_FILE,
7144
7144
  description: `Edit a file by replacing specific text. The old_string must match exactly and be unique in the file.
7145
7145
 
@@ -7401,14 +7401,14 @@ Usage:
7401
7401
  - Always quote file paths that contain spaces (e.g., cd "/path/with spaces").
7402
7402
  - Use the timeout parameter (in seconds) to limit execution time. Behavior when omitted depends on the sandbox provider.
7403
7403
  - Optionally use cwd to override the working directory. Commands run from the sandbox default if omitted.`;
7404
- var executeCommandTool = chunkK4NN2KQQ_cjs.createTool({
7404
+ var executeCommandTool = chunkAV4YSAZL_cjs.createTool({
7405
7405
  id: WORKSPACE_TOOLS.SANDBOX.EXECUTE_COMMAND,
7406
7406
  description: baseDescription,
7407
7407
  inputSchema: executeCommandInputSchema,
7408
7408
  execute: executeCommand,
7409
7409
  toModelOutput: sandboxToModelOutput
7410
7410
  });
7411
- var executeCommandWithBackgroundTool = chunkK4NN2KQQ_cjs.createTool({
7411
+ var executeCommandWithBackgroundTool = chunkAV4YSAZL_cjs.createTool({
7412
7412
  id: WORKSPACE_TOOLS.SANDBOX.EXECUTE_COMMAND,
7413
7413
  description: `${baseDescription}
7414
7414
 
@@ -7417,7 +7417,7 @@ Set background: true to run long-running commands (dev servers, watchers) withou
7417
7417
  execute: executeCommand,
7418
7418
  toModelOutput: sandboxToModelOutput
7419
7419
  });
7420
- var fileStatTool = chunkK4NN2KQQ_cjs.createTool({
7420
+ var fileStatTool = chunkAV4YSAZL_cjs.createTool({
7421
7421
  id: WORKSPACE_TOOLS.FILESYSTEM.FILE_STAT,
7422
7422
  description: "Get file or directory metadata from the workspace. Returns existence, type, size, and modification time.",
7423
7423
  inputSchema: v4.z.object({
@@ -7441,7 +7441,7 @@ var fileStatTool = chunkK4NN2KQQ_cjs.createTool({
7441
7441
  }
7442
7442
  }
7443
7443
  });
7444
- var getProcessOutputTool = chunkK4NN2KQQ_cjs.createTool({
7444
+ var getProcessOutputTool = chunkAV4YSAZL_cjs.createTool({
7445
7445
  id: WORKSPACE_TOOLS.SANDBOX.GET_PROCESS_OUTPUT,
7446
7446
  description: `Get the current output (stdout, stderr) and status of a background process by its PID.
7447
7447
 
@@ -7539,7 +7539,7 @@ async function loadGitignore(filesystem) {
7539
7539
  }
7540
7540
 
7541
7541
  // src/workspace/tools/grep.ts
7542
- var grepTool = chunkK4NN2KQQ_cjs.createTool({
7542
+ var grepTool = chunkAV4YSAZL_cjs.createTool({
7543
7543
  id: WORKSPACE_TOOLS.FILESYSTEM.GREP,
7544
7544
  description: `Search file contents using a regex pattern. Walks the filesystem and returns matching lines with file paths and line numbers.
7545
7545
 
@@ -7693,7 +7693,7 @@ Usage:
7693
7693
  );
7694
7694
  }
7695
7695
  });
7696
- var indexContentTool = chunkK4NN2KQQ_cjs.createTool({
7696
+ var indexContentTool = chunkAV4YSAZL_cjs.createTool({
7697
7697
  id: WORKSPACE_TOOLS.SEARCH.INDEX,
7698
7698
  description: "Index content for search. The path becomes the document ID in search results.",
7699
7699
  inputSchema: v4.z.object({
@@ -7709,7 +7709,7 @@ var indexContentTool = chunkK4NN2KQQ_cjs.createTool({
7709
7709
  }
7710
7710
  });
7711
7711
  var KILL_TAIL_LINES = 50;
7712
- var killProcessTool = chunkK4NN2KQQ_cjs.createTool({
7712
+ var killProcessTool = chunkAV4YSAZL_cjs.createTool({
7713
7713
  id: WORKSPACE_TOOLS.SANDBOX.KILL_PROCESS,
7714
7714
  description: `Kill a background process by its PID.
7715
7715
 
@@ -7898,7 +7898,7 @@ function joinPath2(base, name) {
7898
7898
  }
7899
7899
 
7900
7900
  // src/workspace/tools/list-files.ts
7901
- var listFilesTool = chunkK4NN2KQQ_cjs.createTool({
7901
+ var listFilesTool = chunkAV4YSAZL_cjs.createTool({
7902
7902
  id: WORKSPACE_TOOLS.FILESYSTEM.LIST_FILES,
7903
7903
  description: `List files and directories in the workspace filesystem.
7904
7904
  Returns a compact tab-indented listing for efficient token usage.
@@ -7986,7 +7986,7 @@ function compressPath(filePath) {
7986
7986
  }
7987
7987
  return filePath;
7988
7988
  }
7989
- var lspInspectTool = chunkK4NN2KQQ_cjs.createTool({
7989
+ var lspInspectTool = chunkAV4YSAZL_cjs.createTool({
7990
7990
  id: WORKSPACE_TOOLS.LSP.LSP_INSPECT,
7991
7991
  description: "Inspect code at a specific symbol position using the Language Server Protocol. Provide an absolute file path, a 1-indexed line number, and the exact line content with <<< marking the cursor position. Exactly one <<< marker is required. Returns hover information, any diagnostics reported on that line, plus definition and implementation locations when available. Use this for type information, symbol navigation, and go-to-definition; use view to read the surrounding implementation.",
7992
7992
  inputSchema: v4.z.object({
@@ -8133,7 +8133,7 @@ var lspInspectTool = chunkK4NN2KQQ_cjs.createTool({
8133
8133
  return result;
8134
8134
  }
8135
8135
  });
8136
- var mkdirTool = chunkK4NN2KQQ_cjs.createTool({
8136
+ var mkdirTool = chunkAV4YSAZL_cjs.createTool({
8137
8137
  id: WORKSPACE_TOOLS.FILESYSTEM.MKDIR,
8138
8138
  description: "Create a directory in the workspace filesystem",
8139
8139
  inputSchema: v4.z.object({
@@ -8150,7 +8150,7 @@ var mkdirTool = chunkK4NN2KQQ_cjs.createTool({
8150
8150
  return `Created directory ${path8}`;
8151
8151
  }
8152
8152
  });
8153
- var readFileTool = chunkK4NN2KQQ_cjs.createTool({
8153
+ var readFileTool = chunkAV4YSAZL_cjs.createTool({
8154
8154
  id: WORKSPACE_TOOLS.FILESYSTEM.READ_FILE,
8155
8155
  description: "Read the contents of a file from the workspace filesystem. Use offset/limit parameters to read specific line ranges for large files.",
8156
8156
  inputSchema: v4.z.object({
@@ -8198,7 +8198,7 @@ ${fullContent.toString("base64")}`,
8198
8198
  ${formattedContent}`, tokenLimit, "end");
8199
8199
  }
8200
8200
  });
8201
- var searchTool = chunkK4NN2KQQ_cjs.createTool({
8201
+ var searchTool = chunkAV4YSAZL_cjs.createTool({
8202
8202
  id: WORKSPACE_TOOLS.SEARCH.SEARCH,
8203
8203
  description: "Search indexed content in the workspace. Supports keyword (BM25), semantic (vector), and hybrid search modes.",
8204
8204
  inputSchema: v4.z.object({
@@ -8225,7 +8225,7 @@ var searchTool = chunkK4NN2KQQ_cjs.createTool({
8225
8225
  return lines.join("\n");
8226
8226
  }
8227
8227
  });
8228
- var writeFileTool = chunkK4NN2KQQ_cjs.createTool({
8228
+ var writeFileTool = chunkAV4YSAZL_cjs.createTool({
8229
8229
  id: WORKSPACE_TOOLS.FILESYSTEM.WRITE_FILE,
8230
8230
  description: "Write content to a file in the workspace filesystem. Creates parent directories if needed.",
8231
8231
  inputSchema: v4.z.object({
@@ -8473,5 +8473,5 @@ exports.requireWorkspace = requireWorkspace;
8473
8473
  exports.resolveToolConfig = resolveToolConfig;
8474
8474
  exports.searchTool = searchTool;
8475
8475
  exports.writeFileTool = writeFileTool;
8476
- //# sourceMappingURL=chunk-QVVWKMFM.cjs.map
8477
- //# sourceMappingURL=chunk-QVVWKMFM.cjs.map
8476
+ //# sourceMappingURL=chunk-GXXNF6NF.cjs.map
8477
+ //# sourceMappingURL=chunk-GXXNF6NF.cjs.map