@psnext/slingcli 2.5.20260724-1 → 2.5.20260727-1

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 (391) hide show
  1. package/bin/sling.js +1 -1
  2. package/node_modules/@aws-sdk/core/dist-cjs/submodules/httpAuthSchemes/index.js +66 -28
  3. package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +133 -15
  4. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.js +7 -2
  5. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.js +28 -14
  6. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.js +1 -0
  7. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.js +3 -0
  8. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.js +8 -0
  9. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/index.js +1 -1
  10. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.js +3 -3
  11. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/index.browser.js +9 -0
  12. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/index.js +5 -1
  13. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getDateHeader.js +1 -0
  14. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.js +12 -6
  15. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/index.js +2 -1
  16. package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/isClockSkewed.js +1 -1
  17. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeDeserializer.js +10 -1
  18. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeSerializer.js +10 -0
  19. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/detectBufferParsing.js +18 -0
  20. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/BufferJsonShapeDeserializer.js +13 -15
  21. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/ByteJsonShapeSerializer.js +27 -17
  22. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/jsonReviver.js +22 -3
  23. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/needsReviver.js +41 -0
  24. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/parseJsonBody.js +33 -13
  25. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/writeKey.js +3 -0
  26. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeDeserializer.js +4 -0
  27. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.d.ts +2 -1
  28. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.d.ts +6 -0
  29. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.d.ts +7 -0
  30. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.d.ts +13 -0
  31. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/index.d.ts +1 -1
  32. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.d.ts +22 -6
  33. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/index.browser.d.ts +11 -0
  34. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/index.d.ts +7 -1
  35. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/getDateHeader.d.ts +4 -0
  36. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.d.ts +22 -6
  37. package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/index.d.ts +2 -1
  38. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/detectBufferParsing.d.ts +1 -0
  39. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/experimental/ByteJsonShapeSerializer.d.ts +0 -2
  40. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/needsReviver.d.ts +11 -0
  41. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/parseJsonBody.d.ts +7 -2
  42. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/writeKey.d.ts +4 -0
  43. package/node_modules/@aws-sdk/core/dist-types/ts3.4/api-extractor-type-index.d.ts +7 -4
  44. package/node_modules/@aws-sdk/core/dist-types/ts3.4/index.d.ts +21 -61
  45. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.d.ts +27 -13
  46. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConstants.d.ts +16 -4
  47. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/NodeAccountIdEndpointModeConfigOptions.d.ts +14 -5
  48. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/index.d.ts +5 -16
  49. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/emitWarningIfUnsupportedVersion.d.ts +11 -4
  50. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.browser.d.ts +47 -107
  51. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.d.ts +39 -112
  52. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.native.d.ts +48 -107
  53. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/longPollMiddleware.d.ts +14 -13
  54. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-host-header/hostHeaderMiddleware.d.ts +35 -25
  55. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-logger/loggerMiddleware.d.ts +4 -14
  56. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/configuration.d.ts +6 -2
  57. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.browser.d.ts +5 -2
  58. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.d.ts +5 -2
  59. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.browser.d.ts +6 -2
  60. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.d.ts +10 -2
  61. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.native.d.ts +6 -2
  62. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/check-features.d.ts +20 -16
  63. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/configurations.d.ts +44 -21
  64. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/constants.d.ts +7 -7
  65. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/encode-features.d.ts +5 -2
  66. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/user-agent-middleware.d.ts +18 -18
  67. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/awsRegionConfig.d.ts +11 -8
  68. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/extensions.d.ts +16 -14
  69. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.browser.d.ts +4 -1
  70. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.d.ts +14 -7
  71. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.native.d.ts +4 -1
  72. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setCredentialFeature.d.ts +7 -6
  73. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setFeature.d.ts +12 -6
  74. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setTokenFeature.d.ts +7 -6
  75. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/aws.d.ts +2 -2
  76. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/isVirtualHostableS3Bucket.d.ts +5 -4
  77. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/parseArn.d.ts +7 -2
  78. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partition.d.ts +38 -28
  79. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partitions.d.ts +638 -647
  80. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/isIpAddress.d.ts +1 -1
  81. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveDefaultAwsRegionalEndpointsConfig.d.ts +56 -29
  82. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveEndpoint.d.ts +1 -1
  83. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointError.d.ts +1 -1
  84. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointRuleObject.d.ts +1 -6
  85. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/ErrorRuleObject.d.ts +1 -1
  86. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/RuleSetObject.d.ts +1 -1
  87. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/TreeRuleObject.d.ts +1 -1
  88. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/shared.d.ts +1 -12
  89. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/configurations.d.ts +7 -4
  90. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/createUserAgentStringParsingProvider.d.ts +14 -7
  91. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.browser.d.ts +2 -7
  92. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.d.ts +27 -18
  93. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.native.d.ts +18 -13
  94. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/crt-availability.d.ts +8 -3
  95. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/defaultUserAgent.d.ts +28 -17
  96. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/getRuntimeUserAgentPair.d.ts +6 -2
  97. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/is-crt-available.d.ts +5 -2
  98. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/nodeAppIdConfigOptions.d.ts +13 -4
  99. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.d.ts +10 -9
  100. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.d.ts +44 -37
  101. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/NODE_AUTH_SCHEME_PREFERENCE_OPTIONS.d.ts +5 -2
  102. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.d.ts +6 -0
  103. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.d.ts +7 -0
  104. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.d.ts +13 -0
  105. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/index.d.ts +7 -23
  106. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.d.ts +38 -13
  107. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.d.ts +133 -56
  108. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.browser.d.ts +11 -0
  109. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.d.ts +9 -24
  110. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getArrayForCommaSeparatedString.d.ts +8 -1
  111. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getBearerTokenEnvKey.d.ts +6 -1
  112. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getDateHeader.d.ts +8 -1
  113. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.d.ts +8 -1
  114. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.d.ts +26 -4
  115. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/index.d.ts +4 -3
  116. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/isClockSkewed.d.ts +9 -1
  117. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ConfigurableSerdeContext.d.ts +8 -5
  118. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ProtocolLib.d.ts +74 -40
  119. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/UnionSerde.d.ts +24 -9
  120. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.d.ts +25 -36
  121. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/coercing-serializers.d.ts +18 -3
  122. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/common.d.ts +2 -5
  123. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/index.d.ts +22 -27
  124. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_0Protocol.d.ts +22 -21
  125. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_1Protocol.d.ts +22 -21
  126. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJsonRpcProtocol.d.ts +29 -49
  127. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsRestJsonProtocol.d.ts +36 -49
  128. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonCodec.d.ts +19 -13
  129. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeDeserializer.d.ts +13 -13
  130. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeSerializer.d.ts +28 -18
  131. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/awsExpectUnion.d.ts +7 -1
  132. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/detectBufferParsing.d.ts +1 -0
  133. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/BufferJsonShapeDeserializer.d.ts +29 -14
  134. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/ByteJsonShapeSerializer.d.ts +57 -30
  135. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReplacer.d.ts +21 -7
  136. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReviver.d.ts +15 -7
  137. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/needsReviver.d.ts +11 -0
  138. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/parseJsonBody.d.ts +22 -9
  139. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsEc2QueryProtocol.d.ts +27 -18
  140. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsQueryProtocol.d.ts +49 -57
  141. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QuerySerializerSettings.d.ts +13 -7
  142. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QueryShapeSerializer.d.ts +16 -21
  143. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/writeKey.d.ts +4 -0
  144. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/AwsRestXmlProtocol.d.ts +31 -47
  145. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlCodec.d.ts +14 -17
  146. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeDeserializer.d.ts +20 -15
  147. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeSerializer.d.ts +21 -21
  148. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/parseXmlBody.d.ts +13 -4
  149. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/simpleFormatXml.d.ts +6 -1
  150. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/index.d.ts +3 -3
  151. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-arn-parser/arn.d.ts +32 -14
  152. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-format-url/format-url.d.ts +2 -4
  153. package/node_modules/@aws-sdk/core/package.json +10 -6
  154. package/node_modules/@aws-sdk/credential-provider-env/package.json +3 -3
  155. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/package.json +2 -2
  156. package/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
  157. package/node_modules/@aws-sdk/credential-provider-ini/package.json +11 -11
  158. package/node_modules/@aws-sdk/credential-provider-login/package.json +4 -4
  159. package/node_modules/@aws-sdk/credential-provider-node/package.json +9 -9
  160. package/node_modules/@aws-sdk/credential-provider-process/package.json +3 -3
  161. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +4 -4
  162. package/node_modules/@aws-sdk/credential-provider-sso/package.json +5 -5
  163. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +4 -4
  164. package/node_modules/@aws-sdk/eventstream-handler-node/package.json +2 -2
  165. package/node_modules/@aws-sdk/middleware-eventstream/package.json +2 -2
  166. package/node_modules/@aws-sdk/middleware-websocket/package.json +5 -5
  167. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  168. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  169. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  170. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  171. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  172. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.browser.d.ts +2 -0
  173. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.d.ts +2 -0
  174. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.native.d.ts +2 -0
  175. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.browser.d.ts +2 -0
  176. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.d.ts +2 -0
  177. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.native.d.ts +2 -0
  178. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.browser.d.ts +2 -0
  179. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.d.ts +2 -0
  180. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.native.d.ts +2 -0
  181. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.browser.d.ts +2 -0
  182. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.d.ts +2 -0
  183. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.native.d.ts +2 -0
  184. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.browser.d.ts +2 -0
  185. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.d.ts +2 -0
  186. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.native.d.ts +2 -0
  187. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.browser.d.ts +2 -0
  188. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.d.ts +2 -0
  189. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.native.d.ts +2 -0
  190. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.browser.d.ts +2 -0
  191. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.d.ts +2 -0
  192. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.native.d.ts +2 -0
  193. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.browser.d.ts +2 -0
  194. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.d.ts +2 -0
  195. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.native.d.ts +2 -0
  196. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.browser.d.ts +2 -0
  197. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.d.ts +2 -0
  198. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.native.d.ts +2 -0
  199. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.browser.d.ts +2 -0
  200. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.d.ts +2 -0
  201. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.native.d.ts +2 -0
  202. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/package.json +2 -2
  203. package/node_modules/@aws-sdk/nested-clients/package.json +6 -6
  204. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +2 -2
  205. package/node_modules/@aws-sdk/xml-builder/dist-cjs/index.js +14 -4
  206. package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +14 -4
  207. package/node_modules/@aws-sdk/xml-builder/package.json +1 -1
  208. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +17 -4
  209. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +8 -2
  210. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +118 -11
  211. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js +132 -0
  212. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js +386 -0
  213. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +95 -0
  214. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js +46 -0
  215. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js +106 -0
  216. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js +5 -0
  217. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js +26 -0
  218. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +110 -0
  219. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js +2 -0
  220. package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +31 -0
  221. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +90 -35
  222. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js +10 -4
  223. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +1 -0
  224. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -2
  225. package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +26 -10
  226. package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +21 -8
  227. package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +25 -13
  228. package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +100 -0
  229. package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +7 -11
  230. package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js +17 -3
  231. package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +7 -11
  232. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +13 -9
  233. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +68 -27
  234. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +131 -34
  235. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +173 -66
  236. package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +29 -7
  237. package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js +8 -3
  238. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +5 -0
  239. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js +222 -0
  240. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.js +37 -35
  241. package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +11 -1
  242. package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +2 -0
  243. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +9 -3
  244. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +15 -0
  245. package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js +4 -0
  246. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +5 -3
  247. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +2 -1
  248. package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +2 -1
  249. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +30 -3
  250. package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +2 -1
  251. package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +2 -1
  252. package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +2 -1
  253. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +2 -1
  254. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +2 -1
  255. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  256. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  257. package/node_modules/@earendil-works/pi-ai/dist/providers/data/ant-ling.json +1 -1
  258. package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
  259. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  260. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
  261. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  262. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  263. package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
  264. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  265. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  266. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +1 -1
  267. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
  268. package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
  269. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  270. package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
  271. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
  272. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
  273. package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
  274. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
  275. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -1
  276. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  277. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  278. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  279. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  280. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  281. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  282. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
  283. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
  284. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  285. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  286. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
  287. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
  288. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
  289. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
  290. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +1 -1
  291. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
  292. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
  293. package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +2 -1
  294. package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +2 -1
  295. package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +2 -1
  296. package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +2 -1
  297. package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +2 -1
  298. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +2 -1
  299. package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +2 -1
  300. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +2 -1
  301. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +2 -1
  302. package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +2 -1
  303. package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +2 -1
  304. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +2 -1
  305. package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +2 -1
  306. package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +2 -1
  307. package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +2 -1
  308. package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +2 -1
  309. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +2 -1
  310. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +2 -1
  311. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js +10 -2
  312. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js +10 -2
  313. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +2 -1
  314. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +2 -1
  315. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +2 -1
  316. package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +2 -1
  317. package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +2 -1
  318. package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +2 -1
  319. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +2 -1
  320. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +2 -1
  321. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +2 -1
  322. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +2 -1
  323. package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +2 -1
  324. package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +2 -1
  325. package/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js +8 -3
  326. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +94 -0
  327. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +3 -0
  328. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  329. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +1 -0
  330. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.js +1 -1
  331. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js +1 -1
  332. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +7 -8
  333. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +11 -3
  334. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +4 -0
  335. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-config.js +6 -0
  336. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +2 -2
  337. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +20 -3
  338. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-runtime.js +3 -5
  339. package/node_modules/@earendil-works/pi-coding-agent/dist/core/remote-catalog-provider.js +24 -11
  340. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js +3 -0
  341. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +1 -1
  342. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +34 -5
  343. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.js +3 -1
  344. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.js +7 -2
  345. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.js +10 -2
  346. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.js +16 -46
  347. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js +22 -13
  348. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/external-editor.js +37 -0
  349. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +67 -74
  350. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -0
  351. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard.js +19 -8
  352. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/version-check.js +3 -1
  353. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +16 -15
  354. package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -4
  355. package/node_modules/@earendil-works/pi-server/package.json +2 -2
  356. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +15 -12
  357. package/node_modules/@earendil-works/pi-tui/dist/tui.js +6 -3
  358. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  359. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +1 -0
  360. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +1 -0
  361. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.browser.js +2 -2
  362. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.js +2 -2
  363. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.native.js +2 -2
  364. package/node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/constants.js +1 -0
  365. package/node_modules/@smithy/core/dist-es/submodules/serde/value/NumericValue.js +2 -2
  366. package/node_modules/@smithy/core/dist-types/submodules/retry/service-error-classification/constants.d.ts +1 -0
  367. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/retry/service-error-classification/constants.d.ts +1 -0
  368. package/node_modules/@smithy/core/package.json +1 -1
  369. package/node_modules/@smithy/credential-provider-imds/package.json +2 -2
  370. package/node_modules/@smithy/fetch-http-handler/package.json +2 -2
  371. package/node_modules/@smithy/signature-v4/package.json +2 -2
  372. package/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  373. package/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  374. package/node_modules/gaxios/package.json +1 -1
  375. package/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  376. package/node_modules/google-auth-library/package.json +1 -1
  377. package/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  378. package/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  379. package/node_modules/undici/lib/core/request.js +12 -1
  380. package/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
  381. package/node_modules/undici/lib/handler/cache-handler.js +246 -64
  382. package/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
  383. package/node_modules/undici/lib/handler/retry-handler.js +24 -0
  384. package/node_modules/undici/lib/interceptor/cache.js +159 -52
  385. package/node_modules/undici/lib/util/cache.js +324 -62
  386. package/node_modules/undici/lib/util/date.js +23 -6
  387. package/node_modules/undici/lib/web/cookies/util.js +79 -9
  388. package/node_modules/undici/package.json +1 -1
  389. package/package.json +7 -7
  390. package/sling-default-packages.json +2 -1
  391. package/slingshot/index.js +337 -339
@@ -16,6 +16,7 @@ import { AssistantMessageEventStream } from "../utils/event-stream.js";
16
16
  import { headersToRecord } from "../utils/headers.js";
17
17
  import { resolveHttpProxyUrlForTarget } from "../utils/node-http-proxy.js";
18
18
  import { uuidv7 } from "../utils/uuid.js";
19
+ import { createGrammarToolInputProperties } from "./constrained-sampling.js";
19
20
  import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js";
20
21
  import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from "./openai-responses-shared.js";
21
22
  import { buildBaseOptions } from "./simple-options.js";
@@ -34,6 +35,7 @@ const REQUEST_COMPRESSION_ZSTD_LEVEL = 3;
34
35
  const CODEX_TOOL_CALL_PROVIDERS = new Set(["openai", "openai-codex", "opencode"]);
35
36
  const WEBSOCKET_MESSAGE_TOO_BIG_CLOSE_CODE = 1009;
36
37
  const WEBSOCKET_CONNECTION_LIMIT_REACHED_CODE = "websocket_connection_limit_reached";
38
+ const PREVIOUS_RESPONSE_NOT_FOUND_CODE = "previous_response_not_found";
37
39
  const CODEX_RESPONSE_STATUSES = new Set([
38
40
  "completed",
39
41
  "incomplete",
@@ -79,9 +81,14 @@ function getRetryAfterDelayMs(headers) {
79
81
  }
80
82
  return undefined;
81
83
  }
82
- function capRetryDelayMs(delayMs, options) {
84
+ class RetryDelayExceededError extends Error {
85
+ }
86
+ function validateRetryDelayMs(delayMs, options) {
83
87
  const maxRetryDelayMs = options?.maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS;
84
- return maxRetryDelayMs > 0 ? Math.min(delayMs, maxRetryDelayMs) : delayMs;
88
+ if (maxRetryDelayMs > 0 && delayMs > maxRetryDelayMs) {
89
+ throw new RetryDelayExceededError(`Server requested ${Math.ceil(delayMs / 1000)}s retry delay (max: ${Math.ceil(maxRetryDelayMs / 1000)}s)`);
90
+ }
91
+ return delayMs;
85
92
  }
86
93
  function sleep(ms, signal) {
87
94
  return new Promise((resolve, reject) => {
@@ -157,12 +164,14 @@ export const stream = (model, context, options) => {
157
164
  throw new Error(`No API key for provider: ${model.provider}`);
158
165
  }
159
166
  const accountId = extractAccountId(apiKey);
160
- let body = buildRequestBody(model, context, options);
167
+ const grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false);
168
+ const cacheSessionId = options?.cacheRetention === "none" ? undefined : options?.sessionId;
169
+ const codexSessionId = clampOpenAIPromptCacheKey(cacheSessionId);
170
+ let body = buildRequestBody(model, context, options, codexSessionId, grammarToolInputProperties);
161
171
  const nextBody = await options?.onPayload?.(body, model);
162
172
  if (nextBody !== undefined) {
163
173
  body = nextBody;
164
174
  }
165
- const codexSessionId = clampOpenAIPromptCacheKey(options?.sessionId);
166
175
  const websocketRequestId = codexSessionId || uuidv7();
167
176
  const sseHeaders = buildSSEHeaders(model.headers, options?.headers, accountId, apiKey, codexSessionId);
168
177
  const websocketHeaders = buildWebSocketHeaders(model.headers, options?.headers, accountId, apiKey, websocketRequestId);
@@ -170,19 +179,25 @@ export const stream = (model, context, options) => {
170
179
  const httpTimeoutMs = normalizeTimeoutMs(options?.timeoutMs);
171
180
  const websocketConnectTimeoutMs = normalizeTimeoutMs(options?.websocketConnectTimeoutMs);
172
181
  const transport = options?.transport || "auto";
173
- const websocketDisabledForSession = transport !== "sse" && isWebSocketSseFallbackActive(options?.sessionId);
182
+ let startEmitted = false;
183
+ const websocketDisabledForSession = transport !== "sse" && isWebSocketSseFallbackActive(cacheSessionId);
174
184
  if (websocketDisabledForSession) {
175
- recordWebSocketSseFallback(options?.sessionId);
185
+ recordWebSocketSseFallback(cacheSessionId);
176
186
  }
177
187
  if (transport !== "sse" && !websocketDisabledForSession) {
178
188
  let websocketStarted = false;
179
189
  let retriedWebSocketConnectionLimit = false;
190
+ let retriedMissingWebSocketContinuation = false;
180
191
  while (true) {
181
192
  websocketStarted = false;
182
193
  try {
183
194
  await processWebSocketStream(resolveCodexWebSocketUrl(model.baseUrl), body, websocketHeaders, output, stream, model, () => {
184
195
  websocketStarted = true;
185
- }, httpTimeoutMs, websocketConnectTimeoutMs, options);
196
+ if (!startEmitted) {
197
+ startEmitted = true;
198
+ stream.push({ type: "start", partial: output });
199
+ }
200
+ }, httpTimeoutMs, websocketConnectTimeoutMs, cacheSessionId, grammarToolInputProperties, options);
186
201
  if (options?.signal?.aborted) {
187
202
  throw new Error("Request was aborted");
188
203
  }
@@ -197,6 +212,11 @@ export const stream = (model, context, options) => {
197
212
  catch (error) {
198
213
  const aborted = options?.signal?.aborted;
199
214
  const connectionLimitBeforeStart = !websocketStarted && isWebSocketConnectionLimitReachedError(error);
215
+ const previousResponseNotFound = isPreviousResponseNotFoundError(error);
216
+ if (!aborted && previousResponseNotFound && !retriedMissingWebSocketContinuation) {
217
+ retriedMissingWebSocketContinuation = true;
218
+ continue;
219
+ }
200
220
  if (!aborted && connectionLimitBeforeStart && !retriedWebSocketConnectionLimit) {
201
221
  retriedWebSocketConnectionLimit = true;
202
222
  continue;
@@ -211,11 +231,11 @@ export const stream = (model, context, options) => {
211
231
  phase: websocketStarted ? "after_message_stream_start" : "before_message_stream_start",
212
232
  requestBytes: new TextEncoder().encode(bodyJson).byteLength,
213
233
  }));
214
- recordWebSocketFailure(options?.sessionId, error);
234
+ recordWebSocketFailure(cacheSessionId, error);
215
235
  if (websocketStarted) {
216
236
  throw error;
217
237
  }
218
- recordWebSocketSseFallback(options?.sessionId);
238
+ recordWebSocketSseFallback(cacheSessionId);
219
239
  break;
220
240
  }
221
241
  }
@@ -265,9 +285,7 @@ export const stream = (model, context, options) => {
265
285
  const retryAfterDelayMs = getRetryAfterDelayMs(response.headers);
266
286
  const delayMs = retryAfterDelayMs === undefined
267
287
  ? BASE_DELAY_MS * 2 ** attempt
268
- : response.status === 429
269
- ? capRetryDelayMs(retryAfterDelayMs, options)
270
- : retryAfterDelayMs;
288
+ : validateRetryDelayMs(retryAfterDelayMs, options);
271
289
  await sleep(delayMs, options?.signal);
272
290
  continue;
273
291
  }
@@ -287,7 +305,9 @@ export const stream = (model, context, options) => {
287
305
  }
288
306
  lastError = error instanceof Error ? error : new Error(String(error));
289
307
  // Network errors are retryable
290
- if (attempt < maxRetries && !lastError.message.includes("usage limit")) {
308
+ if (attempt < maxRetries &&
309
+ !(lastError instanceof RetryDelayExceededError) &&
310
+ !lastError.message.includes("usage limit")) {
291
311
  const delayMs = BASE_DELAY_MS * 2 ** attempt;
292
312
  await sleep(delayMs, options?.signal);
293
313
  continue;
@@ -301,8 +321,11 @@ export const stream = (model, context, options) => {
301
321
  if (!response.body) {
302
322
  throw new Error("No response body");
303
323
  }
304
- stream.push({ type: "start", partial: output });
305
- await processStream(response, output, stream, model, options);
324
+ if (!startEmitted) {
325
+ startEmitted = true;
326
+ stream.push({ type: "start", partial: output });
327
+ }
328
+ await processStream(response, output, stream, model, grammarToolInputProperties, options);
306
329
  if (options?.signal?.aborted) {
307
330
  throw new Error("Request was aborted");
308
331
  }
@@ -311,8 +334,9 @@ export const stream = (model, context, options) => {
311
334
  }
312
335
  catch (error) {
313
336
  for (const block of output.content) {
314
- // partialJson is only a streaming scratch buffer; never persist it.
337
+ // Streaming scratch buffers are only used during parsing; never persist them.
315
338
  delete block.partialJson;
339
+ delete block.customInput;
316
340
  }
317
341
  output.stopReason = options?.signal?.aborted ? "aborted" : "error";
318
342
  output.errorMessage = formatProviderError(normalizeProviderError(error));
@@ -338,11 +362,19 @@ export const streamSimple = (model, context, options) => {
338
362
  // ============================================================================
339
363
  // Request Building
340
364
  // ============================================================================
341
- function buildRequestBody(model, context, options) {
365
+ function buildRequestBody(model, context, options, cacheSessionId, grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false)) {
366
+ const supportsStrictMode = model.compat?.supportsStrictMode ?? true;
367
+ const supportsOpenAIGrammarTools = model.compat?.supportsOpenAIGrammarTools ?? false;
342
368
  const toolPlacement = splitDeferredTools(context, model.compat?.supportsToolSearch ?? false);
343
369
  const messages = convertResponsesMessages(model, context, CODEX_TOOL_CALL_PROVIDERS, {
344
370
  includeSystemPrompt: false,
371
+ grammarToolInputProperties,
345
372
  deferredTools: toolPlacement.deferred,
373
+ toolOptions: {
374
+ strict: null,
375
+ supportsStrictMode,
376
+ supportsOpenAIGrammarTools,
377
+ },
346
378
  });
347
379
  const body = {
348
380
  model: model.id,
@@ -352,7 +384,7 @@ function buildRequestBody(model, context, options) {
352
384
  input: messages,
353
385
  text: { verbosity: options?.textVerbosity || "low" },
354
386
  include: ["reasoning.encrypted_content"],
355
- prompt_cache_key: clampOpenAIPromptCacheKey(options?.sessionId),
387
+ prompt_cache_key: cacheSessionId,
356
388
  tool_choice: options?.toolChoice ?? "auto",
357
389
  parallel_tool_calls: true,
358
390
  };
@@ -363,7 +395,11 @@ function buildRequestBody(model, context, options) {
363
395
  body.service_tier = options.serviceTier;
364
396
  }
365
397
  if (toolPlacement.immediate.length > 0) {
366
- body.tools = convertResponsesTools(toolPlacement.immediate, { strict: null });
398
+ body.tools = convertResponsesTools(toolPlacement.immediate, {
399
+ strict: null,
400
+ supportsStrictMode,
401
+ supportsOpenAIGrammarTools,
402
+ });
367
403
  }
368
404
  if (options?.reasoningEffort !== undefined) {
369
405
  const effort = options.reasoningEffort === "none"
@@ -424,9 +460,10 @@ function resolveCodexWebSocketUrl(baseUrl) {
424
460
  // ============================================================================
425
461
  // Response Processing
426
462
  // ============================================================================
427
- async function processStream(response, output, stream, model, options) {
463
+ async function processStream(response, output, stream, model, grammarToolInputProperties, options) {
428
464
  await processResponsesStream(mapCodexEvents(parseSSE(response, options?.signal)), output, stream, model, {
429
465
  serviceTier: options?.serviceTier,
466
+ grammarToolInputProperties,
430
467
  resolveServiceTier: resolveCodexServiceTier,
431
468
  applyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model),
432
469
  });
@@ -457,6 +494,9 @@ function isCodexNonTransportError(error) {
457
494
  function isWebSocketConnectionLimitReachedError(error) {
458
495
  return error instanceof CodexApiError && error.code === WEBSOCKET_CONNECTION_LIMIT_REACHED_CODE;
459
496
  }
497
+ function isPreviousResponseNotFoundError(error) {
498
+ return error instanceof CodexApiError && error.code === PREVIOUS_RESPONSE_NOT_FOUND_CODE;
499
+ }
460
500
  function extractCodexEventError(event) {
461
501
  const nested = event.error && typeof event.error === "object" ? event.error : undefined;
462
502
  return {
@@ -1062,26 +1102,25 @@ function buildCachedWebSocketRequestBody(entry, body) {
1062
1102
  input: delta,
1063
1103
  };
1064
1104
  }
1065
- async function* startWebSocketOutputOnFirstEvent(events, output, stream, onStart) {
1105
+ async function* startWebSocketOutputOnFirstEvent(events, onStart) {
1066
1106
  let started = false;
1067
1107
  for await (const event of events) {
1068
1108
  if (!started) {
1069
1109
  started = true;
1070
1110
  onStart();
1071
- stream.push({ type: "start", partial: output });
1072
1111
  }
1073
1112
  yield event;
1074
1113
  }
1075
1114
  }
1076
- async function processWebSocketStream(url, body, headers, output, stream, model, onStart, idleTimeoutMs, websocketConnectTimeoutMs, options) {
1077
- const { socket, entry, reused, release } = await acquireWebSocket(url, headers, options?.sessionId, options?.signal, websocketConnectTimeoutMs, options?.env);
1115
+ async function processWebSocketStream(url, body, headers, output, stream, model, onStart, idleTimeoutMs, websocketConnectTimeoutMs, cacheSessionId, grammarToolInputProperties, options) {
1116
+ const { socket, entry, reused, release } = await acquireWebSocket(url, headers, cacheSessionId, options?.signal, websocketConnectTimeoutMs, options?.env);
1078
1117
  let keepConnection = true;
1079
1118
  const useCachedContext = options?.transport === "websocket-cached" || options?.transport === "auto";
1080
1119
  // ChatGPT Codex Responses rejects `store: true` ("Store must be set to false").
1081
1120
  // WebSocket continuation still works via connection-scoped previous_response_id state.
1082
1121
  const fullBody = body;
1083
1122
  const requestBody = useCachedContext && entry ? buildCachedWebSocketRequestBody(entry, fullBody) : fullBody;
1084
- const stats = options?.sessionId ? getOrCreateWebSocketDebugStats(options.sessionId) : undefined;
1123
+ const stats = cacheSessionId ? getOrCreateWebSocketDebugStats(cacheSessionId) : undefined;
1085
1124
  if (stats) {
1086
1125
  stats.requests++;
1087
1126
  if (reused)
@@ -1106,8 +1145,9 @@ async function processWebSocketStream(url, body, headers, output, stream, model,
1106
1145
  }
1107
1146
  try {
1108
1147
  socket.send(JSON.stringify({ type: "response.create", ...requestBody }));
1109
- await processResponsesStream(startWebSocketOutputOnFirstEvent(mapCodexEvents(parseWebSocket(socket, options?.signal, idleTimeoutMs)), output, stream, onStart), output, stream, model, {
1148
+ await processResponsesStream(startWebSocketOutputOnFirstEvent(mapCodexEvents(parseWebSocket(socket, options?.signal, idleTimeoutMs)), onStart), output, stream, model, {
1110
1149
  serviceTier: options?.serviceTier,
1150
+ grammarToolInputProperties,
1111
1151
  resolveServiceTier: resolveCodexServiceTier,
1112
1152
  applyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model),
1113
1153
  });
@@ -1117,7 +1157,8 @@ async function processWebSocketStream(url, body, headers, output, stream, model,
1117
1157
  else if (useCachedContext && entry && output.responseId) {
1118
1158
  const responseItems = convertResponsesMessages(model, { messages: [output] }, CODEX_TOOL_CALL_PROVIDERS, {
1119
1159
  includeSystemPrompt: false,
1120
- }).filter((item) => item.type !== "function_call_output");
1160
+ grammarToolInputProperties,
1161
+ }).filter((item) => item.type !== "function_call_output" && item.type !== "custom_tool_call_output");
1121
1162
  entry.continuation = {
1122
1163
  lastRequestBody: fullBody,
1123
1164
  lastResponseId: output.responseId,
@@ -6,7 +6,9 @@ import { shortHash } from "../utils/hash.js";
6
6
  import { headersToRecord } from "../utils/headers.js";
7
7
  import { parseStreamingJson } from "../utils/json-parse.js";
8
8
  import { getProviderEnvValue } from "../utils/provider-env.js";
9
+ import { retryProviderRequest } from "../utils/provider-retry.js";
9
10
  import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
11
+ import { appendGrammarToolInputJsonDelta, createGrammarToolInputProperties, getGrammarToolInput, resolveGrammarConstrainedSampling, resolveJsonSchemaStrictSampling, } from "./constrained-sampling.js";
10
12
  import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.js";
11
13
  import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js";
12
14
  import { buildBaseOptions } from "./simple-options.js";
@@ -120,10 +122,11 @@ export const stream = (model, context, options) => {
120
122
  try {
121
123
  const apiKey = getClientApiKey(model.provider, options?.apiKey, options?.headers);
122
124
  const compat = getCompat(model);
125
+ const grammarToolInputProperties = createGrammarToolInputProperties(context.tools, compat.supportsOpenAIGrammarTools);
123
126
  const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env);
124
127
  const cacheSessionId = cacheRetention === "none" ? undefined : options?.sessionId;
125
128
  const client = createClient(model, context, apiKey, options?.headers, cacheSessionId, compat);
126
- let params = buildParams(model, context, options, compat, cacheRetention);
129
+ let params = buildParams(model, context, options, compat, cacheRetention, grammarToolInputProperties);
127
130
  const nextParams = await options?.onPayload?.(params, model);
128
131
  if (nextParams !== undefined) {
129
132
  params = nextParams;
@@ -131,11 +134,13 @@ export const stream = (model, context, options) => {
131
134
  const requestOptions = {
132
135
  ...(options?.signal ? { signal: options.signal } : {}),
133
136
  ...(options?.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),
134
- maxRetries: options?.maxRetries ?? 0,
137
+ maxRetries: 0,
135
138
  };
136
- const { data: openaiStream, response } = await client.chat.completions
137
- .create(params, requestOptions)
138
- .withResponse();
139
+ const { data: openaiStream, response } = await retryProviderRequest(() => client.chat.completions.create(params, requestOptions).withResponse(), {
140
+ maxRetries: options?.maxRetries,
141
+ maxRetryDelayMs: options?.maxRetryDelayMs,
142
+ signal: options?.signal,
143
+ });
139
144
  await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);
140
145
  stream.push({ type: "start", partial: output });
141
146
  let textBlock = null;
@@ -146,6 +151,21 @@ export const stream = (model, context, options) => {
146
151
  const pendingReasoningDetailsByToolCallId = new Map();
147
152
  const blocks = output.content;
148
153
  const getContentIndex = (block) => blocks.indexOf(block);
154
+ const getCustomToolCallInput = (block) => {
155
+ const property = block.customInput?.property;
156
+ if (property === undefined)
157
+ return "";
158
+ const value = block.arguments[property];
159
+ return typeof value === "string" ? value : "";
160
+ };
161
+ const appendCustomToolCallInput = (block, nextInput, close) => {
162
+ const customInput = block.customInput;
163
+ if (!customInput)
164
+ return undefined;
165
+ const delta = appendGrammarToolInputJsonDelta(customInput.jsonBuffer, customInput.property, nextInput, close);
166
+ block.arguments = { [customInput.property]: nextInput };
167
+ return delta;
168
+ };
149
169
  const finishBlock = (block) => {
150
170
  const contentIndex = getContentIndex(block);
151
171
  if (contentIndex === -1) {
@@ -168,10 +188,24 @@ export const stream = (model, context, options) => {
168
188
  });
169
189
  }
170
190
  else if (block.type === "toolCall") {
171
- block.arguments = parseStreamingJson(block.partialArgs);
191
+ if (block.customInput) {
192
+ const delta = appendCustomToolCallInput(block, getCustomToolCallInput(block), true);
193
+ if (delta !== undefined) {
194
+ stream.push({
195
+ type: "toolcall_delta",
196
+ contentIndex,
197
+ delta,
198
+ partial: output,
199
+ });
200
+ }
201
+ }
202
+ else {
203
+ block.arguments = parseStreamingJson(block.partialArgs);
204
+ }
172
205
  // Finalize in-place and strip the scratch buffers so replay only
173
206
  // carries parsed arguments.
174
207
  delete block.partialArgs;
208
+ delete block.customInput;
175
209
  delete block.streamIndex;
176
210
  stream.push({
177
211
  type: "toolcall_end",
@@ -213,17 +247,27 @@ export const stream = (model, context, options) => {
213
247
  };
214
248
  const ensureToolCallBlock = (toolCall) => {
215
249
  const streamIndex = typeof toolCall.index === "number" ? toolCall.index : undefined;
250
+ const name = toolCall.function?.name ?? toolCall.custom?.name ?? "";
216
251
  let block = streamIndex !== undefined ? toolCallBlocksByIndex.get(streamIndex) : undefined;
217
252
  if (!block && toolCall.id) {
218
253
  block = toolCallBlocksById.get(toolCall.id);
219
254
  }
220
255
  if (!block) {
256
+ // Note: the "input" fallback here should/must not be taken. in case the LLM makes up
257
+ // a tool we don't knwo about, we at least have a place to stash our stuff.
258
+ const customInputProperty = toolCall.custom
259
+ ? (grammarToolInputProperties.get(name) ?? "input")
260
+ : undefined;
261
+ const hasCustomInput = customInputProperty !== undefined;
221
262
  block = {
222
263
  type: "toolCall",
223
264
  id: toolCall.id || "",
224
- name: toolCall.function?.name || "",
225
- arguments: {},
226
- partialArgs: "",
265
+ name,
266
+ arguments: hasCustomInput ? { [customInputProperty]: "" } : {},
267
+ partialArgs: hasCustomInput ? undefined : "",
268
+ customInput: hasCustomInput
269
+ ? { property: customInputProperty, jsonBuffer: { input: "", started: false, closed: false } }
270
+ : undefined,
227
271
  streamIndex,
228
272
  };
229
273
  if (streamIndex !== undefined) {
@@ -246,6 +290,18 @@ export const stream = (model, context, options) => {
246
290
  if (toolCall.id) {
247
291
  toolCallBlocksById.set(toolCall.id, block);
248
292
  }
293
+ if (!block.name && name) {
294
+ block.name = name;
295
+ }
296
+ if (toolCall.custom && !block.customInput) {
297
+ const customInputProperty = grammarToolInputProperties.get(block.name) ?? "input";
298
+ block.arguments = { [customInputProperty]: "" };
299
+ block.customInput = {
300
+ property: customInputProperty,
301
+ jsonBuffer: { input: "", started: false, closed: false },
302
+ };
303
+ delete block.partialArgs;
304
+ }
249
305
  applyPendingReasoningDetail(block);
250
306
  return block;
251
307
  };
@@ -327,8 +383,9 @@ export const stream = (model, context, options) => {
327
383
  block.id = toolCall.id;
328
384
  toolCallBlocksById.set(toolCall.id, block);
329
385
  }
330
- if (!block.name && toolCall.function?.name) {
331
- block.name = toolCall.function.name;
386
+ const name = toolCall.function?.name ?? toolCall.custom?.name;
387
+ if (!block.name && name) {
388
+ block.name = name;
332
389
  }
333
390
  let delta = "";
334
391
  if (toolCall.function?.arguments) {
@@ -336,6 +393,10 @@ export const stream = (model, context, options) => {
336
393
  block.partialArgs = (block.partialArgs ?? "") + toolCall.function.arguments;
337
394
  block.arguments = parseStreamingJson(block.partialArgs);
338
395
  }
396
+ else if (toolCall.custom?.input) {
397
+ const nextInput = getCustomToolCallInput(block) + toolCall.custom.input;
398
+ delta = appendCustomToolCallInput(block, nextInput, false) ?? "";
399
+ }
339
400
  stream.push({
340
401
  type: "toolcall_delta",
341
402
  contentIndex: getContentIndex(block),
@@ -384,6 +445,7 @@ export const stream = (model, context, options) => {
384
445
  delete block.index;
385
446
  // Streaming scratch buffers are only used during parsing; never persist them.
386
447
  delete block.partialArgs;
448
+ delete block.customInput;
387
449
  delete block.streamIndex;
388
450
  }
389
451
  output.stopReason = options?.signal?.aborted ? "aborted" : "error";
@@ -447,8 +509,8 @@ function createClient(model, context, apiKey, optionsHeaders, sessionId, compat
447
509
  defaultHeaders: headers,
448
510
  });
449
511
  }
450
- function buildParams(model, context, options, compat = getCompat(model), cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env)) {
451
- const messages = convertMessages(model, context, compat);
512
+ function buildParams(model, context, options, compat = getCompat(model), cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env), grammarToolInputProperties = createGrammarToolInputProperties(context.tools, compat.supportsOpenAIGrammarTools)) {
513
+ const messages = convertMessages(model, context, compat, { grammarToolInputProperties });
452
514
  const cacheControl = getCompatCacheControl(compat, cacheRetention);
453
515
  const params = {
454
516
  model: model.id,
@@ -642,7 +704,7 @@ function addCacheControlToSystemPrompt(messages, cacheControl) {
642
704
  function addCacheControlToLastConversationMessage(messages, cacheControl) {
643
705
  for (let i = messages.length - 1; i >= 0; i--) {
644
706
  const message = messages[i];
645
- if (message.role === "user" || message.role === "assistant") {
707
+ if (message.role === "user" || message.role === "assistant" || message.role === "tool") {
646
708
  if (addCacheControlToMessage(message, cacheControl)) {
647
709
  return;
648
710
  }
@@ -660,7 +722,7 @@ function addCacheControlToInstructionMessage(message, cacheControl) {
660
722
  return addCacheControlToTextContent(message, cacheControl);
661
723
  }
662
724
  function addCacheControlToMessage(message, cacheControl) {
663
- if (message.role === "user" || message.role === "assistant") {
725
+ if (message.role === "user" || message.role === "assistant" || message.role === "tool") {
664
726
  return addCacheControlToTextContent(message, cacheControl);
665
727
  }
666
728
  return false;
@@ -693,7 +755,7 @@ function addCacheControlToTextContent(message, cacheControl) {
693
755
  }
694
756
  return false;
695
757
  }
696
- export function convertMessages(model, context, compat) {
758
+ export function convertMessages(model, context, compat, options) {
697
759
  const params = [];
698
760
  const normalizeToolCallId = (id) => {
699
761
  // Handle pipe-separated IDs from OpenAI Responses API
@@ -823,14 +885,27 @@ export function convertMessages(model, context, compat) {
823
885
  }
824
886
  const toolCalls = msg.content.filter(isToolCallBlock);
825
887
  if (toolCalls.length > 0) {
826
- assistantMsg.tool_calls = toolCalls.map((tc) => ({
827
- id: tc.id,
828
- type: "function",
829
- function: {
830
- name: tc.name,
831
- arguments: JSON.stringify(tc.arguments),
832
- },
833
- }));
888
+ assistantMsg.tool_calls = toolCalls.map((tc) => {
889
+ const customInputProperty = options?.grammarToolInputProperties?.get(tc.name);
890
+ if (customInputProperty !== undefined) {
891
+ return {
892
+ id: tc.id,
893
+ type: "custom",
894
+ custom: {
895
+ name: tc.name,
896
+ input: sanitizeSurrogates(getGrammarToolInput(tc.name, tc.arguments, customInputProperty)),
897
+ },
898
+ };
899
+ }
900
+ return {
901
+ id: tc.id,
902
+ type: "function",
903
+ function: {
904
+ name: tc.name,
905
+ arguments: JSON.stringify(tc.arguments),
906
+ },
907
+ };
908
+ });
834
909
  const reasoningDetails = toolCalls
835
910
  .filter((tc) => tc.thoughtSignature)
836
911
  .map((tc) => {
@@ -948,16 +1023,36 @@ export function convertMessages(model, context, compat) {
948
1023
  return params;
949
1024
  }
950
1025
  function convertTools(tools, compat) {
951
- return tools.map((tool) => ({
952
- type: "function",
953
- function: {
954
- name: tool.name,
955
- description: tool.description,
956
- parameters: tool.parameters, // TypeBox already generates JSON Schema
957
- // Only include strict if provider supports it. Some reject unknown fields.
958
- ...(compat.supportsStrictMode !== false && { strict: false }),
959
- },
960
- }));
1026
+ return tools.map((tool) => {
1027
+ const grammar = resolveGrammarConstrainedSampling(tool, compat.supportsOpenAIGrammarTools);
1028
+ if (grammar) {
1029
+ return {
1030
+ type: "custom",
1031
+ custom: {
1032
+ name: tool.name,
1033
+ description: tool.description,
1034
+ format: {
1035
+ type: "grammar",
1036
+ grammar: {
1037
+ syntax: grammar.format,
1038
+ definition: grammar.definition,
1039
+ },
1040
+ },
1041
+ },
1042
+ };
1043
+ }
1044
+ const strict = resolveJsonSchemaStrictSampling(tool, compat.supportsStrictMode !== false);
1045
+ return {
1046
+ type: "function",
1047
+ function: {
1048
+ name: tool.name,
1049
+ description: tool.description,
1050
+ parameters: tool.parameters, // TypeBox already generates JSON Schema
1051
+ // Only include strict if provider supports it. Some reject unknown fields.
1052
+ ...(compat.supportsStrictMode !== false && { strict: strict ?? false }),
1053
+ },
1054
+ };
1055
+ });
961
1056
  }
962
1057
  function parseChunkUsage(rawUsage, model) {
963
1058
  const promptTokens = rawUsage.prompt_tokens || 0;
@@ -1074,6 +1169,7 @@ function detectCompat(model) {
1074
1169
  chatTemplateKwargs: {},
1075
1170
  zaiToolStream: false,
1076
1171
  supportsStrictMode: !isMoonshot && !isTogether && !isCloudflareAiGateway && !isNvidia,
1172
+ supportsOpenAIGrammarTools: false,
1077
1173
  cacheControlFormat,
1078
1174
  sendSessionAffinityHeaders: false,
1079
1175
  deferredToolsMode: undefined,
@@ -1110,6 +1206,7 @@ function getCompat(model) {
1110
1206
  chatTemplateKwargs: model.compat.chatTemplateKwargs ?? detected.chatTemplateKwargs,
1111
1207
  zaiToolStream: model.compat.zaiToolStream ?? detected.zaiToolStream,
1112
1208
  supportsStrictMode: model.compat.supportsStrictMode ?? detected.supportsStrictMode,
1209
+ supportsOpenAIGrammarTools: model.compat.supportsOpenAIGrammarTools ?? detected.supportsOpenAIGrammarTools,
1113
1210
  cacheControlFormat: model.compat.cacheControlFormat ?? detected.cacheControlFormat,
1114
1211
  sendSessionAffinityHeaders: model.compat.sendSessionAffinityHeaders ?? detected.sendSessionAffinityHeaders,
1115
1212
  deferredToolsMode: model.compat.deferredToolsMode ?? detected.deferredToolsMode,