@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.
- package/bin/sling.js +1 -1
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/httpAuthSchemes/index.js +66 -28
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +133 -15
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.js +7 -2
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.js +28 -14
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.js +1 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.js +3 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.js +8 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/index.js +1 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.js +3 -3
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/index.browser.js +9 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/index.js +5 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getDateHeader.js +1 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.js +12 -6
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/index.js +2 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/httpAuthSchemes/utils/isClockSkewed.js +1 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeDeserializer.js +10 -1
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonShapeSerializer.js +10 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/detectBufferParsing.js +18 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/BufferJsonShapeDeserializer.js +13 -15
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/experimental/ByteJsonShapeSerializer.js +27 -17
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/jsonReviver.js +22 -3
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/needsReviver.js +41 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/parseJsonBody.js +33 -13
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/writeKey.js +3 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/xml/XmlShapeDeserializer.js +4 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.d.ts +2 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.d.ts +6 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.d.ts +7 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.d.ts +13 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/index.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.d.ts +22 -6
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/index.browser.d.ts +11 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/index.d.ts +7 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/getDateHeader.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.d.ts +22 -6
- package/node_modules/@aws-sdk/core/dist-types/submodules/httpAuthSchemes/utils/index.d.ts +2 -1
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/detectBufferParsing.d.ts +1 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/experimental/ByteJsonShapeSerializer.d.ts +0 -2
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/needsReviver.d.ts +11 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/parseJsonBody.d.ts +7 -2
- package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/writeKey.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/api-extractor-type-index.d.ts +7 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/index.d.ts +21 -61
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.d.ts +27 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConstants.d.ts +16 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/NodeAccountIdEndpointModeConfigOptions.d.ts +14 -5
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/index.d.ts +5 -16
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/emitWarningIfUnsupportedVersion.d.ts +11 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.browser.d.ts +47 -107
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.d.ts +39 -112
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.native.d.ts +48 -107
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/longPollMiddleware.d.ts +14 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-host-header/hostHeaderMiddleware.d.ts +35 -25
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-logger/loggerMiddleware.d.ts +4 -14
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/configuration.d.ts +6 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.browser.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.browser.d.ts +6 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.d.ts +10 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.native.d.ts +6 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/check-features.d.ts +20 -16
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/configurations.d.ts +44 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/constants.d.ts +7 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/encode-features.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/user-agent-middleware.d.ts +18 -18
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/awsRegionConfig.d.ts +11 -8
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/extensions.d.ts +16 -14
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.browser.d.ts +4 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.d.ts +14 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.native.d.ts +4 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setCredentialFeature.d.ts +7 -6
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setFeature.d.ts +12 -6
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setTokenFeature.d.ts +7 -6
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/aws.d.ts +2 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/isVirtualHostableS3Bucket.d.ts +5 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/parseArn.d.ts +7 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partition.d.ts +38 -28
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partitions.d.ts +638 -647
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/isIpAddress.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveDefaultAwsRegionalEndpointsConfig.d.ts +56 -29
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveEndpoint.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointError.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointRuleObject.d.ts +1 -6
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/ErrorRuleObject.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/RuleSetObject.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/TreeRuleObject.d.ts +1 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/shared.d.ts +1 -12
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/configurations.d.ts +7 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/createUserAgentStringParsingProvider.d.ts +14 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.browser.d.ts +2 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.d.ts +27 -18
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.native.d.ts +18 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/crt-availability.d.ts +8 -3
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/defaultUserAgent.d.ts +28 -17
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/getRuntimeUserAgentPair.d.ts +6 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/is-crt-available.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/nodeAppIdConfigOptions.d.ts +13 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.d.ts +10 -9
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.d.ts +44 -37
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/NODE_AUTH_SCHEME_PREFERENCE_OPTIONS.d.ts +5 -2
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.d.ts +6 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.d.ts +7 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.d.ts +13 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/index.d.ts +7 -23
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.d.ts +38 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.d.ts +133 -56
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.browser.d.ts +11 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.d.ts +9 -24
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getArrayForCommaSeparatedString.d.ts +8 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getBearerTokenEnvKey.d.ts +6 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getDateHeader.d.ts +8 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.d.ts +8 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.d.ts +26 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/index.d.ts +4 -3
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/isClockSkewed.d.ts +9 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ConfigurableSerdeContext.d.ts +8 -5
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ProtocolLib.d.ts +74 -40
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/UnionSerde.d.ts +24 -9
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.d.ts +25 -36
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/coercing-serializers.d.ts +18 -3
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/common.d.ts +2 -5
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/index.d.ts +22 -27
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_0Protocol.d.ts +22 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_1Protocol.d.ts +22 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJsonRpcProtocol.d.ts +29 -49
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsRestJsonProtocol.d.ts +36 -49
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonCodec.d.ts +19 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeDeserializer.d.ts +13 -13
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeSerializer.d.ts +28 -18
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/awsExpectUnion.d.ts +7 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/detectBufferParsing.d.ts +1 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/BufferJsonShapeDeserializer.d.ts +29 -14
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/ByteJsonShapeSerializer.d.ts +57 -30
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReplacer.d.ts +21 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReviver.d.ts +15 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/needsReviver.d.ts +11 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/parseJsonBody.d.ts +22 -9
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsEc2QueryProtocol.d.ts +27 -18
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsQueryProtocol.d.ts +49 -57
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QuerySerializerSettings.d.ts +13 -7
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QueryShapeSerializer.d.ts +16 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/writeKey.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/AwsRestXmlProtocol.d.ts +31 -47
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlCodec.d.ts +14 -17
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeDeserializer.d.ts +20 -15
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeSerializer.d.ts +21 -21
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/parseXmlBody.d.ts +13 -4
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/simpleFormatXml.d.ts +6 -1
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/index.d.ts +3 -3
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-arn-parser/arn.d.ts +32 -14
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-format-url/format-url.d.ts +2 -4
- package/node_modules/@aws-sdk/core/package.json +10 -6
- package/node_modules/@aws-sdk/credential-provider-env/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +11 -11
- package/node_modules/@aws-sdk/credential-provider-login/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-node/package.json +9 -9
- package/node_modules/@aws-sdk/credential-provider-process/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +4 -4
- package/node_modules/@aws-sdk/eventstream-handler-node/package.json +2 -2
- package/node_modules/@aws-sdk/middleware-eventstream/package.json +2 -2
- package/node_modules/@aws-sdk/middleware-websocket/package.json +5 -5
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.browser.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.native.d.ts +2 -0
- package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/package.json +2 -2
- package/node_modules/@aws-sdk/nested-clients/package.json +6 -6
- package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +2 -2
- package/node_modules/@aws-sdk/xml-builder/dist-cjs/index.js +14 -4
- package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +14 -4
- package/node_modules/@aws-sdk/xml-builder/package.json +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +17 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +8 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +118 -11
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/bash.js +132 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit-diff.js +386 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/edit.js +95 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/file-mutation-queue.js +46 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/image.js +106 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/index.js +5 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/path-utils.js +26 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +110 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/tool-context.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/write.js +31 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +90 -35
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/truncate.js +10 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js +1 -0
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +26 -10
- package/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js +21 -8
- package/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.js +25 -13
- package/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +100 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.js +7 -11
- package/node_modules/@earendil-works/pi-ai/dist/api/google-shared.js +17 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.js +7 -11
- package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +13 -9
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +68 -27
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +131 -34
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js +173 -66
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +29 -7
- package/node_modules/@earendil-works/pi-ai/dist/api/openrouter-images.js +8 -3
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openrouter.js +222 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/radius.js +37 -35
- package/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js +11 -1
- package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +9 -3
- package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/model-catalog.js +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +5 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +30 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/ant-ling.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter-images.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.js +10 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js +8 -3
- package/node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +94 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +3 -0
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/config-selector.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +7 -8
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +11 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +4 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-config.js +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +20 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-runtime.js +3 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/remote-catalog-provider.js +24 -11
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +34 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/tool-definition-wrapper.js +3 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.js +7 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/custom-message.js +10 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/extension-editor.js +16 -46
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js +22 -13
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/external-editor.js +37 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +67 -74
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard.js +19 -8
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/version-check.js +3 -1
- package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +16 -15
- package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -4
- package/node_modules/@earendil-works/pi-server/package.json +2 -2
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +15 -12
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +6 -3
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +1 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +1 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.browser.js +2 -2
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.js +2 -2
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.native.js +2 -2
- package/node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/constants.js +1 -0
- package/node_modules/@smithy/core/dist-es/submodules/serde/value/NumericValue.js +2 -2
- package/node_modules/@smithy/core/dist-types/submodules/retry/service-error-classification/constants.d.ts +1 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/retry/service-error-classification/constants.d.ts +1 -0
- package/node_modules/@smithy/core/package.json +1 -1
- package/node_modules/@smithy/credential-provider-imds/package.json +2 -2
- package/node_modules/@smithy/fetch-http-handler/package.json +2 -2
- package/node_modules/@smithy/signature-v4/package.json +2 -2
- package/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
- package/node_modules/gaxios/package.json +1 -1
- package/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
- package/node_modules/google-auth-library/package.json +1 -1
- package/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
- package/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
- package/node_modules/undici/lib/core/request.js +12 -1
- package/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
- package/node_modules/undici/lib/handler/cache-handler.js +246 -64
- package/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
- package/node_modules/undici/lib/handler/retry-handler.js +24 -0
- package/node_modules/undici/lib/interceptor/cache.js +159 -52
- package/node_modules/undici/lib/util/cache.js +324 -62
- package/node_modules/undici/lib/util/date.js +23 -6
- package/node_modules/undici/lib/web/cookies/util.js +79 -9
- package/node_modules/undici/package.json +1 -1
- package/package.json +7 -7
- package/sling-default-packages.json +2 -1
- 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
|
-
|
|
84
|
+
class RetryDelayExceededError extends Error {
|
|
85
|
+
}
|
|
86
|
+
function validateRetryDelayMs(delayMs, options) {
|
|
83
87
|
const maxRetryDelayMs = options?.maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS;
|
|
84
|
-
|
|
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
|
-
|
|
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
|
-
|
|
182
|
+
let startEmitted = false;
|
|
183
|
+
const websocketDisabledForSession = transport !== "sse" && isWebSocketSseFallbackActive(cacheSessionId);
|
|
174
184
|
if (websocketDisabledForSession) {
|
|
175
|
-
recordWebSocketSseFallback(
|
|
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
|
-
|
|
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(
|
|
234
|
+
recordWebSocketFailure(cacheSessionId, error);
|
|
215
235
|
if (websocketStarted) {
|
|
216
236
|
throw error;
|
|
217
237
|
}
|
|
218
|
-
recordWebSocketSseFallback(
|
|
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
|
-
:
|
|
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 &&
|
|
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
|
-
|
|
305
|
-
|
|
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
|
-
//
|
|
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:
|
|
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, {
|
|
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,
|
|
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,
|
|
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 =
|
|
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)),
|
|
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
|
-
|
|
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:
|
|
137
|
+
maxRetries: 0,
|
|
135
138
|
};
|
|
136
|
-
const { data: openaiStream, response } = await client.chat.completions
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
331
|
-
|
|
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
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
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
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
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,
|