@fgv/ts-extras 5.1.0-3 → 5.1.0-30
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/dist/index.browser.js +4 -2
- package/dist/index.browser.js.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/packlets/ai-assist/apiClient.js +958 -131
- package/dist/packlets/ai-assist/apiClient.js.map +1 -0
- package/dist/packlets/ai-assist/chatRequestBuilders.js +186 -0
- package/dist/packlets/ai-assist/chatRequestBuilders.js.map +1 -0
- package/dist/packlets/ai-assist/converters.js +2 -1
- package/dist/packlets/ai-assist/converters.js.map +1 -0
- package/dist/packlets/ai-assist/endpoint.js +78 -0
- package/dist/packlets/ai-assist/endpoint.js.map +1 -0
- package/dist/packlets/ai-assist/imageOptionsResolver.js +212 -0
- package/dist/packlets/ai-assist/imageOptionsResolver.js.map +1 -0
- package/dist/packlets/ai-assist/index.js +7 -3
- package/dist/packlets/ai-assist/index.js.map +1 -0
- package/dist/packlets/ai-assist/jsonCompletion.js +95 -0
- package/dist/packlets/ai-assist/jsonCompletion.js.map +1 -0
- package/dist/packlets/ai-assist/jsonResponse.js +149 -0
- package/dist/packlets/ai-assist/jsonResponse.js.map +1 -0
- package/dist/packlets/ai-assist/model.js +21 -4
- package/dist/packlets/ai-assist/model.js.map +1 -0
- package/dist/packlets/ai-assist/registry.js +235 -10
- package/dist/packlets/ai-assist/registry.js.map +1 -0
- package/dist/packlets/ai-assist/sseParser.js +123 -0
- package/dist/packlets/ai-assist/sseParser.js.map +1 -0
- package/dist/packlets/ai-assist/streamingAdapters/anthropic.js +197 -0
- package/dist/packlets/ai-assist/streamingAdapters/anthropic.js.map +1 -0
- package/dist/packlets/ai-assist/streamingAdapters/common.js +79 -0
- package/dist/packlets/ai-assist/streamingAdapters/common.js.map +1 -0
- package/dist/packlets/ai-assist/streamingAdapters/gemini.js +172 -0
- package/dist/packlets/ai-assist/streamingAdapters/gemini.js.map +1 -0
- package/dist/packlets/ai-assist/streamingAdapters/openaiChat.js +165 -0
- package/dist/packlets/ai-assist/streamingAdapters/openaiChat.js.map +1 -0
- package/dist/packlets/ai-assist/streamingAdapters/openaiResponses.js +179 -0
- package/dist/packlets/ai-assist/streamingAdapters/openaiResponses.js.map +1 -0
- package/dist/packlets/ai-assist/streamingAdapters/proxy.js +163 -0
- package/dist/packlets/ai-assist/streamingAdapters/proxy.js.map +1 -0
- package/dist/packlets/ai-assist/streamingClient.js +116 -0
- package/dist/packlets/ai-assist/streamingClient.js.map +1 -0
- package/dist/packlets/ai-assist/thinkingOptionsResolver.js +265 -0
- package/dist/packlets/ai-assist/thinkingOptionsResolver.js.map +1 -0
- package/dist/packlets/ai-assist/toolFormats.js.map +1 -0
- package/dist/packlets/conversion/converters.js +35 -1
- package/dist/packlets/conversion/converters.js.map +1 -0
- package/dist/packlets/conversion/index.js.map +1 -0
- package/dist/packlets/crypto-utils/constants.js.map +1 -0
- package/dist/packlets/crypto-utils/converters.js +24 -4
- package/dist/packlets/crypto-utils/converters.js.map +1 -0
- package/dist/packlets/crypto-utils/directEncryptionProvider.js.map +1 -0
- package/dist/packlets/crypto-utils/encryptedFile.js.map +1 -0
- package/dist/packlets/crypto-utils/hpkeProvider.js +333 -0
- package/dist/packlets/crypto-utils/hpkeProvider.js.map +1 -0
- package/dist/packlets/crypto-utils/index.browser.js +7 -0
- package/dist/packlets/crypto-utils/index.browser.js.map +1 -0
- package/dist/packlets/crypto-utils/index.js +6 -0
- package/dist/packlets/crypto-utils/index.js.map +1 -0
- package/dist/packlets/crypto-utils/keyPairAlgorithmParams.js +71 -0
- package/dist/packlets/crypto-utils/keyPairAlgorithmParams.js.map +1 -0
- package/dist/packlets/crypto-utils/keystore/converters.js +103 -11
- package/dist/packlets/crypto-utils/keystore/converters.js.map +1 -0
- package/dist/packlets/crypto-utils/keystore/index.js +1 -0
- package/dist/packlets/crypto-utils/keystore/index.js.map +1 -0
- package/dist/packlets/crypto-utils/keystore/keyStore.js +618 -118
- package/dist/packlets/crypto-utils/keystore/keyStore.js.map +1 -0
- package/dist/packlets/crypto-utils/keystore/model.js +22 -1
- package/dist/packlets/crypto-utils/keystore/model.js.map +1 -0
- package/dist/packlets/crypto-utils/keystore/privateKeyStorage.js +21 -0
- package/dist/packlets/crypto-utils/keystore/privateKeyStorage.js.map +1 -0
- package/dist/packlets/crypto-utils/model.js +32 -0
- package/dist/packlets/crypto-utils/model.js.map +1 -0
- package/dist/packlets/crypto-utils/nodeCryptoProvider.js +270 -1
- package/dist/packlets/crypto-utils/nodeCryptoProvider.js.map +1 -0
- package/dist/packlets/crypto-utils/spkiHelpers.js +130 -0
- package/dist/packlets/crypto-utils/spkiHelpers.js.map +1 -0
- package/dist/packlets/csv/csvFileHelpers.js +0 -14
- package/dist/packlets/csv/csvFileHelpers.js.map +1 -0
- package/dist/packlets/csv/csvHelpers.js +14 -0
- package/dist/packlets/csv/csvHelpers.js.map +1 -0
- package/dist/packlets/csv/index.browser.js +1 -3
- package/dist/packlets/csv/index.browser.js.map +1 -0
- package/dist/packlets/csv/index.js.map +1 -0
- package/dist/packlets/experimental/extendedArray.js.map +1 -0
- package/dist/packlets/experimental/formatter.js.map +1 -0
- package/dist/packlets/experimental/index.js.map +1 -0
- package/dist/packlets/experimental/rangeOf.js.map +1 -0
- package/dist/packlets/hash/index.browser.js.map +1 -0
- package/dist/packlets/hash/index.js.map +1 -0
- package/dist/packlets/hash/index.node.js.map +1 -0
- package/dist/packlets/hash/md5Normalizer.browser.js.map +1 -0
- package/dist/packlets/hash/md5Normalizer.js.map +1 -0
- package/dist/packlets/mustache/index.js.map +1 -0
- package/dist/packlets/mustache/interfaces.js.map +1 -0
- package/dist/packlets/mustache/mustacheTemplate.js +42 -4
- package/dist/packlets/mustache/mustacheTemplate.js.map +1 -0
- package/dist/packlets/record-jar/index.browser.js +1 -3
- package/dist/packlets/record-jar/index.browser.js.map +1 -0
- package/dist/packlets/record-jar/index.js.map +1 -0
- package/dist/packlets/record-jar/recordJarFileHelpers.js +0 -18
- package/dist/packlets/record-jar/recordJarFileHelpers.js.map +1 -0
- package/dist/packlets/record-jar/recordJarHelpers.js +18 -0
- package/dist/packlets/record-jar/recordJarHelpers.js.map +1 -0
- package/dist/packlets/yaml/converters.js.map +1 -0
- package/dist/packlets/yaml/index.js +1 -0
- package/dist/packlets/yaml/index.js.map +1 -0
- package/dist/packlets/yaml/serializers.js +48 -0
- package/dist/packlets/yaml/serializers.js.map +1 -0
- package/dist/packlets/zip-file-tree/index.js.map +1 -0
- package/dist/packlets/zip-file-tree/zipFileTreeAccessors.js +2 -2
- package/dist/packlets/zip-file-tree/zipFileTreeAccessors.js.map +1 -0
- package/dist/packlets/zip-file-tree/zipFileTreeWriter.js.map +1 -0
- package/dist/ts-extras.d.ts +2869 -154
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/index.browser.d.ts +4 -2
- package/lib/index.browser.d.ts.map +1 -0
- package/lib/index.browser.js +8 -3
- package/lib/index.browser.js.map +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js.map +1 -0
- package/lib/packlets/ai-assist/apiClient.d.ts +99 -16
- package/lib/packlets/ai-assist/apiClient.d.ts.map +1 -0
- package/lib/packlets/ai-assist/apiClient.js +961 -130
- package/lib/packlets/ai-assist/apiClient.js.map +1 -0
- package/lib/packlets/ai-assist/chatRequestBuilders.d.ts +89 -0
- package/lib/packlets/ai-assist/chatRequestBuilders.d.ts.map +1 -0
- package/lib/packlets/ai-assist/chatRequestBuilders.js +195 -0
- package/lib/packlets/ai-assist/chatRequestBuilders.js.map +1 -0
- package/lib/packlets/ai-assist/converters.d.ts.map +1 -0
- package/lib/packlets/ai-assist/converters.js +2 -1
- package/lib/packlets/ai-assist/converters.js.map +1 -0
- package/lib/packlets/ai-assist/endpoint.d.ts +28 -0
- package/lib/packlets/ai-assist/endpoint.d.ts.map +1 -0
- package/lib/packlets/ai-assist/endpoint.js +82 -0
- package/lib/packlets/ai-assist/endpoint.js.map +1 -0
- package/lib/packlets/ai-assist/imageOptionsResolver.d.ts +74 -0
- package/lib/packlets/ai-assist/imageOptionsResolver.d.ts.map +1 -0
- package/lib/packlets/ai-assist/imageOptionsResolver.js +216 -0
- package/lib/packlets/ai-assist/imageOptionsResolver.js.map +1 -0
- package/lib/packlets/ai-assist/index.d.ts +7 -3
- package/lib/packlets/ai-assist/index.d.ts.map +1 -0
- package/lib/packlets/ai-assist/index.js +21 -1
- package/lib/packlets/ai-assist/index.js.map +1 -0
- package/lib/packlets/ai-assist/jsonCompletion.d.ts +93 -0
- package/lib/packlets/ai-assist/jsonCompletion.d.ts.map +1 -0
- package/lib/packlets/ai-assist/jsonCompletion.js +99 -0
- package/lib/packlets/ai-assist/jsonCompletion.js.map +1 -0
- package/lib/packlets/ai-assist/jsonResponse.d.ts +91 -0
- package/lib/packlets/ai-assist/jsonResponse.d.ts.map +1 -0
- package/lib/packlets/ai-assist/jsonResponse.js +154 -0
- package/lib/packlets/ai-assist/jsonResponse.js.map +1 -0
- package/lib/packlets/ai-assist/model.d.ts +720 -7
- package/lib/packlets/ai-assist/model.d.ts.map +1 -0
- package/lib/packlets/ai-assist/model.js +22 -4
- package/lib/packlets/ai-assist/model.js.map +1 -0
- package/lib/packlets/ai-assist/registry.d.ts +34 -1
- package/lib/packlets/ai-assist/registry.d.ts.map +1 -0
- package/lib/packlets/ai-assist/registry.js +238 -11
- package/lib/packlets/ai-assist/registry.js.map +1 -0
- package/lib/packlets/ai-assist/sseParser.d.ts +45 -0
- package/lib/packlets/ai-assist/sseParser.d.ts.map +1 -0
- package/lib/packlets/ai-assist/sseParser.js +128 -0
- package/lib/packlets/ai-assist/sseParser.js.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/anthropic.d.ts +19 -0
- package/lib/packlets/ai-assist/streamingAdapters/anthropic.d.ts.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/anthropic.js +200 -0
- package/lib/packlets/ai-assist/streamingAdapters/anthropic.js.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/common.d.ts +83 -0
- package/lib/packlets/ai-assist/streamingAdapters/common.d.ts.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/common.js +83 -0
- package/lib/packlets/ai-assist/streamingAdapters/common.js.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/gemini.d.ts +20 -0
- package/lib/packlets/ai-assist/streamingAdapters/gemini.d.ts.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/gemini.js +175 -0
- package/lib/packlets/ai-assist/streamingAdapters/gemini.js.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/openaiChat.d.ts +19 -0
- package/lib/packlets/ai-assist/streamingAdapters/openaiChat.d.ts.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/openaiChat.js +168 -0
- package/lib/packlets/ai-assist/streamingAdapters/openaiChat.js.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/openaiResponses.d.ts +20 -0
- package/lib/packlets/ai-assist/streamingAdapters/openaiResponses.d.ts.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/openaiResponses.js +182 -0
- package/lib/packlets/ai-assist/streamingAdapters/openaiResponses.js.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/proxy.d.ts +34 -0
- package/lib/packlets/ai-assist/streamingAdapters/proxy.d.ts.map +1 -0
- package/lib/packlets/ai-assist/streamingAdapters/proxy.js +166 -0
- package/lib/packlets/ai-assist/streamingAdapters/proxy.js.map +1 -0
- package/lib/packlets/ai-assist/streamingClient.d.ts +33 -0
- package/lib/packlets/ai-assist/streamingClient.d.ts.map +1 -0
- package/lib/packlets/ai-assist/streamingClient.js +121 -0
- package/lib/packlets/ai-assist/streamingClient.js.map +1 -0
- package/lib/packlets/ai-assist/thinkingOptionsResolver.d.ts +71 -0
- package/lib/packlets/ai-assist/thinkingOptionsResolver.d.ts.map +1 -0
- package/lib/packlets/ai-assist/thinkingOptionsResolver.js +270 -0
- package/lib/packlets/ai-assist/thinkingOptionsResolver.js.map +1 -0
- package/lib/packlets/ai-assist/toolFormats.d.ts.map +1 -0
- package/lib/packlets/ai-assist/toolFormats.js.map +1 -0
- package/lib/packlets/conversion/converters.d.ts +8 -1
- package/lib/packlets/conversion/converters.d.ts.map +1 -0
- package/lib/packlets/conversion/converters.js +36 -2
- package/lib/packlets/conversion/converters.js.map +1 -0
- package/lib/packlets/conversion/index.d.ts.map +1 -0
- package/lib/packlets/conversion/index.js.map +1 -0
- package/lib/packlets/crypto-utils/constants.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/constants.js.map +1 -0
- package/lib/packlets/crypto-utils/converters.d.ts +12 -1
- package/lib/packlets/crypto-utils/converters.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/converters.js +25 -5
- package/lib/packlets/crypto-utils/converters.js.map +1 -0
- package/lib/packlets/crypto-utils/directEncryptionProvider.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/directEncryptionProvider.js.map +1 -0
- package/lib/packlets/crypto-utils/encryptedFile.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/encryptedFile.js.map +1 -0
- package/lib/packlets/crypto-utils/hpkeProvider.d.ts +142 -0
- package/lib/packlets/crypto-utils/hpkeProvider.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/hpkeProvider.js +337 -0
- package/lib/packlets/crypto-utils/hpkeProvider.js.map +1 -0
- package/lib/packlets/crypto-utils/index.browser.d.ts +3 -0
- package/lib/packlets/crypto-utils/index.browser.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/index.browser.js +14 -1
- package/lib/packlets/crypto-utils/index.browser.js.map +1 -0
- package/lib/packlets/crypto-utils/index.d.ts +3 -0
- package/lib/packlets/crypto-utils/index.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/index.js +13 -1
- package/lib/packlets/crypto-utils/index.js.map +1 -0
- package/lib/packlets/crypto-utils/keyPairAlgorithmParams.d.ts +54 -0
- package/lib/packlets/crypto-utils/keyPairAlgorithmParams.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/keyPairAlgorithmParams.js +74 -0
- package/lib/packlets/crypto-utils/keyPairAlgorithmParams.js.map +1 -0
- package/lib/packlets/crypto-utils/keystore/converters.d.ts +68 -6
- package/lib/packlets/crypto-utils/keystore/converters.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/keystore/converters.js +101 -9
- package/lib/packlets/crypto-utils/keystore/converters.js.map +1 -0
- package/lib/packlets/crypto-utils/keystore/index.d.ts +1 -0
- package/lib/packlets/crypto-utils/keystore/index.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/keystore/index.js +1 -0
- package/lib/packlets/crypto-utils/keystore/index.js.map +1 -0
- package/lib/packlets/crypto-utils/keystore/keyStore.d.ts +198 -13
- package/lib/packlets/crypto-utils/keystore/keyStore.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/keystore/keyStore.js +624 -124
- package/lib/packlets/crypto-utils/keystore/keyStore.js.map +1 -0
- package/lib/packlets/crypto-utils/keystore/model.d.ts +268 -19
- package/lib/packlets/crypto-utils/keystore/model.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/keystore/model.js +24 -2
- package/lib/packlets/crypto-utils/keystore/model.js.map +1 -0
- package/lib/packlets/crypto-utils/keystore/privateKeyStorage.d.ts +50 -0
- package/lib/packlets/crypto-utils/keystore/privateKeyStorage.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/keystore/privateKeyStorage.js +22 -0
- package/lib/packlets/crypto-utils/keystore/privateKeyStorage.js.map +1 -0
- package/lib/packlets/crypto-utils/model.d.ts +338 -10
- package/lib/packlets/crypto-utils/model.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/model.js +33 -1
- package/lib/packlets/crypto-utils/model.js.map +1 -0
- package/lib/packlets/crypto-utils/nodeCryptoProvider.d.ts +110 -2
- package/lib/packlets/crypto-utils/nodeCryptoProvider.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/nodeCryptoProvider.js +269 -0
- package/lib/packlets/crypto-utils/nodeCryptoProvider.js.map +1 -0
- package/lib/packlets/crypto-utils/spkiHelpers.d.ts +53 -0
- package/lib/packlets/crypto-utils/spkiHelpers.d.ts.map +1 -0
- package/lib/packlets/crypto-utils/spkiHelpers.js +136 -0
- package/lib/packlets/crypto-utils/spkiHelpers.js.map +1 -0
- package/lib/packlets/csv/csvFileHelpers.d.ts +0 -10
- package/lib/packlets/csv/csvFileHelpers.d.ts.map +1 -0
- package/lib/packlets/csv/csvFileHelpers.js +0 -15
- package/lib/packlets/csv/csvFileHelpers.js.map +1 -0
- package/lib/packlets/csv/csvHelpers.d.ts +10 -0
- package/lib/packlets/csv/csvHelpers.d.ts.map +1 -0
- package/lib/packlets/csv/csvHelpers.js +15 -0
- package/lib/packlets/csv/csvHelpers.js.map +1 -0
- package/lib/packlets/csv/index.browser.d.ts +0 -1
- package/lib/packlets/csv/index.browser.d.ts.map +1 -0
- package/lib/packlets/csv/index.browser.js +1 -5
- package/lib/packlets/csv/index.browser.js.map +1 -0
- package/lib/packlets/csv/index.d.ts.map +1 -0
- package/lib/packlets/csv/index.js.map +1 -0
- package/lib/packlets/experimental/extendedArray.d.ts.map +1 -0
- package/lib/packlets/experimental/extendedArray.js.map +1 -0
- package/lib/packlets/experimental/formatter.d.ts.map +1 -0
- package/lib/packlets/experimental/formatter.js.map +1 -0
- package/lib/packlets/experimental/index.d.ts.map +1 -0
- package/lib/packlets/experimental/index.js.map +1 -0
- package/lib/packlets/experimental/rangeOf.d.ts.map +1 -0
- package/lib/packlets/experimental/rangeOf.js.map +1 -0
- package/lib/packlets/hash/index.browser.d.ts.map +1 -0
- package/lib/packlets/hash/index.browser.js.map +1 -0
- package/lib/packlets/hash/index.d.ts.map +1 -0
- package/lib/packlets/hash/index.js.map +1 -0
- package/lib/packlets/hash/index.node.d.ts.map +1 -0
- package/lib/packlets/hash/index.node.js.map +1 -0
- package/lib/packlets/hash/md5Normalizer.browser.d.ts.map +1 -0
- package/lib/packlets/hash/md5Normalizer.browser.js.map +1 -0
- package/lib/packlets/hash/md5Normalizer.d.ts.map +1 -0
- package/lib/packlets/hash/md5Normalizer.js.map +1 -0
- package/lib/packlets/mustache/index.d.ts +1 -1
- package/lib/packlets/mustache/index.d.ts.map +1 -0
- package/lib/packlets/mustache/index.js.map +1 -0
- package/lib/packlets/mustache/interfaces.d.ts +34 -0
- package/lib/packlets/mustache/interfaces.d.ts.map +1 -0
- package/lib/packlets/mustache/interfaces.js.map +1 -0
- package/lib/packlets/mustache/mustacheTemplate.d.ts +2 -0
- package/lib/packlets/mustache/mustacheTemplate.d.ts.map +1 -0
- package/lib/packlets/mustache/mustacheTemplate.js +42 -4
- package/lib/packlets/mustache/mustacheTemplate.js.map +1 -0
- package/lib/packlets/record-jar/index.browser.d.ts +0 -1
- package/lib/packlets/record-jar/index.browser.d.ts.map +1 -0
- package/lib/packlets/record-jar/index.browser.js +1 -5
- package/lib/packlets/record-jar/index.browser.js.map +1 -0
- package/lib/packlets/record-jar/index.d.ts.map +1 -0
- package/lib/packlets/record-jar/index.js.map +1 -0
- package/lib/packlets/record-jar/recordJarFileHelpers.d.ts +0 -11
- package/lib/packlets/record-jar/recordJarFileHelpers.d.ts.map +1 -0
- package/lib/packlets/record-jar/recordJarFileHelpers.js +0 -19
- package/lib/packlets/record-jar/recordJarFileHelpers.js.map +1 -0
- package/lib/packlets/record-jar/recordJarHelpers.d.ts +11 -0
- package/lib/packlets/record-jar/recordJarHelpers.d.ts.map +1 -0
- package/lib/packlets/record-jar/recordJarHelpers.js +19 -0
- package/lib/packlets/record-jar/recordJarHelpers.js.map +1 -0
- package/lib/packlets/yaml/converters.d.ts.map +1 -0
- package/lib/packlets/yaml/converters.js.map +1 -0
- package/lib/packlets/yaml/index.d.ts +1 -0
- package/lib/packlets/yaml/index.d.ts.map +1 -0
- package/lib/packlets/yaml/index.js +1 -0
- package/lib/packlets/yaml/index.js.map +1 -0
- package/lib/packlets/yaml/serializers.d.ts +45 -0
- package/lib/packlets/yaml/serializers.d.ts.map +1 -0
- package/lib/packlets/yaml/serializers.js +84 -0
- package/lib/packlets/yaml/serializers.js.map +1 -0
- package/lib/packlets/zip-file-tree/index.d.ts.map +1 -0
- package/lib/packlets/zip-file-tree/index.js.map +1 -0
- package/lib/packlets/zip-file-tree/zipFileTreeAccessors.d.ts +2 -2
- package/lib/packlets/zip-file-tree/zipFileTreeAccessors.d.ts.map +1 -0
- package/lib/packlets/zip-file-tree/zipFileTreeAccessors.js +2 -2
- package/lib/packlets/zip-file-tree/zipFileTreeAccessors.js.map +1 -0
- package/lib/packlets/zip-file-tree/zipFileTreeWriter.d.ts.map +1 -0
- package/lib/packlets/zip-file-tree/zipFileTreeWriter.js.map +1 -0
- package/package.json +16 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converters.js","sourceRoot":"","sources":["../../../src/packlets/ai-assist/converters.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Erik Fortune\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Converters for AI assist settings types.\n * @packageDocumentation\n */\n\nimport { type Converter, Converters } from '@fgv/ts-utils';\n\nimport {\n type AiProviderId,\n type AiServerToolConfig,\n type AiServerToolType,\n type IAiAssistProviderConfig,\n type IAiAssistSettings,\n type IAiToolEnablement,\n type IAiWebSearchToolConfig,\n type ModelSpec,\n type ModelSpecKey,\n allModelSpecKeys\n} from './model';\nimport { allProviderIds } from './registry';\n\n// ============================================================================\n// Provider ID\n// ============================================================================\n\n/**\n * Converter for {@link AiProviderId}.\n * @public\n */\nexport const aiProviderId: Converter<AiProviderId> = Converters.enumeratedValue<AiProviderId>(allProviderIds);\n\n// ============================================================================\n// Server-Side Tool Converters\n// ============================================================================\n\n/**\n * All known server-side tool type values.\n * @internal\n */\nconst allServerToolTypes: ReadonlyArray<AiServerToolType> = ['web_search'];\n\n/**\n * Converter for {@link AiServerToolType}.\n * @public\n */\nexport const aiServerToolType: Converter<AiServerToolType> =\n Converters.enumeratedValue<AiServerToolType>(allServerToolTypes);\n\n/**\n * Converter for {@link IAiWebSearchToolConfig}.\n * @public\n */\nexport const aiWebSearchToolConfig: Converter<IAiWebSearchToolConfig> =\n Converters.strictObject<IAiWebSearchToolConfig>({\n type: Converters.enumeratedValue<'web_search'>(['web_search']),\n allowedDomains: Converters.arrayOf(Converters.string).optional(),\n blockedDomains: Converters.arrayOf(Converters.string).optional(),\n maxUses: Converters.number.optional(),\n enableImageUnderstanding: Converters.boolean.optional()\n });\n\n/**\n * Converter for {@link AiServerToolConfig} (discriminated union on `type`).\n * @public\n */\nexport const aiServerToolConfig: Converter<AiServerToolConfig> =\n Converters.discriminatedObject<AiServerToolConfig>('type', {\n web_search: aiWebSearchToolConfig\n });\n\n/**\n * Converter for {@link IAiToolEnablement}.\n * @public\n */\nexport const aiToolEnablement: Converter<IAiToolEnablement> = Converters.strictObject<IAiToolEnablement>({\n type: aiServerToolType,\n enabled: Converters.boolean,\n config: aiServerToolConfig.optional()\n});\n\n// ============================================================================\n// Model Specification\n// ============================================================================\n\n/**\n * Converter for {@link ModelSpecKey}.\n * @public\n */\nexport const modelSpecKey: Converter<ModelSpecKey> =\n Converters.enumeratedValue<ModelSpecKey>(allModelSpecKeys);\n\n/**\n * Recursive converter for {@link ModelSpec}.\n * Accepts a string or an object whose values are themselves ModelSpec values,\n * with keys constrained to known {@link ModelSpecKey} values.\n * Uses the `self` parameter from `Converters.generic` for recursion.\n * @public\n */\nexport const modelSpec: Converter<ModelSpec> = Converters.generic<ModelSpec>(\n (from: unknown, self: Converter<ModelSpec>) => {\n return Converters.oneOf<ModelSpec>([\n Converters.string,\n Converters.recordOf(self, { keyConverter: modelSpecKey })\n ])\n .withFormattedError(() => 'expected model spec (string or object with keys: base, tools, image)')\n .convert(from);\n }\n);\n\n// ============================================================================\n// Provider Config & Settings\n// ============================================================================\n\n/**\n * Converter for {@link IAiAssistProviderConfig}.\n * @public\n */\nexport const aiAssistProviderConfig: Converter<IAiAssistProviderConfig> =\n Converters.strictObject<IAiAssistProviderConfig>({\n provider: aiProviderId,\n secretName: Converters.string.optional(),\n model: modelSpec.optional(),\n tools: Converters.arrayOf(aiToolEnablement).optional(),\n endpoint: Converters.string.optional()\n });\n\n/**\n * Converter for {@link IAiAssistSettings}.\n * @public\n */\nexport const aiAssistSettings: Converter<IAiAssistSettings> = Converters.strictObject<IAiAssistSettings>({\n providers: Converters.arrayOf(aiAssistProviderConfig),\n defaultProvider: aiProviderId.optional(),\n proxyUrl: Converters.string.optional(),\n proxyAllProviders: Converters.boolean.optional()\n});\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper for resolving a request's effective base URL from a provider
|
|
3
|
+
* descriptor and an optional caller-supplied endpoint override.
|
|
4
|
+
*
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
7
|
+
import { Result } from '@fgv/ts-utils';
|
|
8
|
+
import { type IAiProviderDescriptor } from './model';
|
|
9
|
+
/**
|
|
10
|
+
* Builds an OpenAI-style `Authorization: Bearer ${key}` header, or an empty
|
|
11
|
+
* record when the key is empty. Self-hosted/local OpenAI-compatible servers
|
|
12
|
+
* (Ollama, LM Studio, llama.cpp) often reject `Authorization: Bearer ` with
|
|
13
|
+
* an empty key, so we omit the header entirely in that case.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export declare function bearerAuthHeader(apiKey: string): Record<string, string>;
|
|
18
|
+
/**
|
|
19
|
+
* Resolves the effective base URL for a request, validating the optional
|
|
20
|
+
* `endpoint` override when present. Returns the URL with any trailing slash
|
|
21
|
+
* stripped so per-route suffix concatenation (e.g. `/chat/completions`)
|
|
22
|
+
* produces the same shape regardless of whether the caller supplied an
|
|
23
|
+
* override or the descriptor's default is used.
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveEffectiveBaseUrl(descriptor: IAiProviderDescriptor, endpoint?: string): Result<string>;
|
|
28
|
+
//# sourceMappingURL=endpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../../../src/packlets/ai-assist/endpoint.ts"],"names":[],"mappings":"AAoBA;;;;;GAKG;AAEH,OAAO,EAAQ,MAAM,EAAW,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,qBAAqB,EACjC,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,CAAC,CA+BhB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) 2026 Erik Fortune
|
|
3
|
+
//
|
|
4
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
// in the Software without restriction, including without limitation the rights
|
|
7
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
// furnished to do so, subject to the following conditions:
|
|
10
|
+
//
|
|
11
|
+
// The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
// copies or substantial portions of the Software.
|
|
13
|
+
//
|
|
14
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
// SOFTWARE.
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.bearerAuthHeader = bearerAuthHeader;
|
|
23
|
+
exports.resolveEffectiveBaseUrl = resolveEffectiveBaseUrl;
|
|
24
|
+
/**
|
|
25
|
+
* Helper for resolving a request's effective base URL from a provider
|
|
26
|
+
* descriptor and an optional caller-supplied endpoint override.
|
|
27
|
+
*
|
|
28
|
+
* @packageDocumentation
|
|
29
|
+
*/
|
|
30
|
+
const ts_utils_1 = require("@fgv/ts-utils");
|
|
31
|
+
/**
|
|
32
|
+
* Builds an OpenAI-style `Authorization: Bearer ${key}` header, or an empty
|
|
33
|
+
* record when the key is empty. Self-hosted/local OpenAI-compatible servers
|
|
34
|
+
* (Ollama, LM Studio, llama.cpp) often reject `Authorization: Bearer ` with
|
|
35
|
+
* an empty key, so we omit the header entirely in that case.
|
|
36
|
+
*
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
function bearerAuthHeader(apiKey) {
|
|
40
|
+
return apiKey.length > 0 ? { Authorization: `Bearer ${apiKey}` } : {};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolves the effective base URL for a request, validating the optional
|
|
44
|
+
* `endpoint` override when present. Returns the URL with any trailing slash
|
|
45
|
+
* stripped so per-route suffix concatenation (e.g. `/chat/completions`)
|
|
46
|
+
* produces the same shape regardless of whether the caller supplied an
|
|
47
|
+
* override or the descriptor's default is used.
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
function resolveEffectiveBaseUrl(descriptor, endpoint) {
|
|
52
|
+
if (endpoint === undefined) {
|
|
53
|
+
if (!descriptor.baseUrl) {
|
|
54
|
+
return (0, ts_utils_1.fail)(`provider "${descriptor.id}" has no API endpoint configured`);
|
|
55
|
+
}
|
|
56
|
+
return (0, ts_utils_1.succeed)(descriptor.baseUrl.replace(/\/+$/, ''));
|
|
57
|
+
}
|
|
58
|
+
if (typeof endpoint !== 'string' || endpoint.length === 0) {
|
|
59
|
+
return (0, ts_utils_1.fail)(`provider "${descriptor.id}": endpoint must be a non-empty http(s) URL`);
|
|
60
|
+
}
|
|
61
|
+
let parsed;
|
|
62
|
+
try {
|
|
63
|
+
parsed = new URL(endpoint);
|
|
64
|
+
}
|
|
65
|
+
catch (_a) {
|
|
66
|
+
return (0, ts_utils_1.fail)(`provider "${descriptor.id}": endpoint is not a valid URL`);
|
|
67
|
+
}
|
|
68
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
69
|
+
return (0, ts_utils_1.fail)(`provider "${descriptor.id}": endpoint must use http or https (got ${parsed.protocol})`);
|
|
70
|
+
}
|
|
71
|
+
if (parsed.search.length > 0 || parsed.hash.length > 0) {
|
|
72
|
+
return (0, ts_utils_1.fail)(`provider "${descriptor.id}": endpoint must not include a query string or fragment`);
|
|
73
|
+
}
|
|
74
|
+
if (parsed.username.length > 0 || parsed.password.length > 0) {
|
|
75
|
+
return (0, ts_utils_1.fail)(`provider "${descriptor.id}": endpoint must not include userinfo; pass credentials via apiKey instead`);
|
|
76
|
+
}
|
|
77
|
+
// Reconstruct from origin + pathname so the returned URL is normalized
|
|
78
|
+
// (no userinfo, no query, no fragment) and the suffix concat in callers
|
|
79
|
+
// produces a well-formed request URL.
|
|
80
|
+
return (0, ts_utils_1.succeed)(`${parsed.origin}${parsed.pathname}`.replace(/\/+$/, ''));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../../../src/packlets/ai-assist/endpoint.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,4EAA4E;AAC5E,wEAAwE;AACxE,2DAA2D;AAC3D,EAAE;AACF,iFAAiF;AACjF,kDAAkD;AAClD,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,8EAA8E;AAC9E,yEAAyE;AACzE,gFAAgF;AAChF,gFAAgF;AAChF,YAAY;;AAqBZ,4CAEC;AAWD,0DAkCC;AAlED;;;;;GAKG;AAEH,4CAAsD;AAItD;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,uBAAuB,CACrC,UAAiC,EACjC,QAAiB;IAEjB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,IAAA,eAAI,EAAC,aAAa,UAAU,CAAC,EAAE,kCAAkC,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAA,kBAAO,EAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAA,eAAI,EAAC,aAAa,UAAU,CAAC,EAAE,6CAA6C,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAA,eAAI,EAAC,aAAa,UAAU,CAAC,EAAE,gCAAgC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,IAAA,eAAI,EAAC,aAAa,UAAU,CAAC,EAAE,2CAA2C,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,IAAA,eAAI,EAAC,aAAa,UAAU,CAAC,EAAE,yDAAyD,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAA,eAAI,EACT,aAAa,UAAU,CAAC,EAAE,4EAA4E,CACvG,CAAC;IACJ,CAAC;IACD,uEAAuE;IACvE,wEAAwE;IACxE,sCAAsC;IACtC,OAAO,IAAA,kBAAO,EAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3E,CAAC","sourcesContent":["// Copyright (c) 2026 Erik Fortune\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Helper for resolving a request's effective base URL from a provider\n * descriptor and an optional caller-supplied endpoint override.\n *\n * @packageDocumentation\n */\n\nimport { fail, Result, succeed } from '@fgv/ts-utils';\n\nimport { type IAiProviderDescriptor } from './model';\n\n/**\n * Builds an OpenAI-style `Authorization: Bearer ${key}` header, or an empty\n * record when the key is empty. Self-hosted/local OpenAI-compatible servers\n * (Ollama, LM Studio, llama.cpp) often reject `Authorization: Bearer ` with\n * an empty key, so we omit the header entirely in that case.\n *\n * @internal\n */\nexport function bearerAuthHeader(apiKey: string): Record<string, string> {\n return apiKey.length > 0 ? { Authorization: `Bearer ${apiKey}` } : {};\n}\n\n/**\n * Resolves the effective base URL for a request, validating the optional\n * `endpoint` override when present. Returns the URL with any trailing slash\n * stripped so per-route suffix concatenation (e.g. `/chat/completions`)\n * produces the same shape regardless of whether the caller supplied an\n * override or the descriptor's default is used.\n *\n * @internal\n */\nexport function resolveEffectiveBaseUrl(\n descriptor: IAiProviderDescriptor,\n endpoint?: string\n): Result<string> {\n if (endpoint === undefined) {\n if (!descriptor.baseUrl) {\n return fail(`provider \"${descriptor.id}\" has no API endpoint configured`);\n }\n return succeed(descriptor.baseUrl.replace(/\\/+$/, ''));\n }\n if (typeof endpoint !== 'string' || endpoint.length === 0) {\n return fail(`provider \"${descriptor.id}\": endpoint must be a non-empty http(s) URL`);\n }\n let parsed: URL;\n try {\n parsed = new URL(endpoint);\n } catch {\n return fail(`provider \"${descriptor.id}\": endpoint is not a valid URL`);\n }\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n return fail(`provider \"${descriptor.id}\": endpoint must use http or https (got ${parsed.protocol})`);\n }\n if (parsed.search.length > 0 || parsed.hash.length > 0) {\n return fail(`provider \"${descriptor.id}\": endpoint must not include a query string or fragment`);\n }\n if (parsed.username.length > 0 || parsed.password.length > 0) {\n return fail(\n `provider \"${descriptor.id}\": endpoint must not include userinfo; pass credentials via apiKey instead`\n );\n }\n // Reconstruct from origin + pathname so the returned URL is normalized\n // (no userinfo, no query, no fragment) and the suffix concat in callers\n // produces a well-formed request URL.\n return succeed(`${parsed.origin}${parsed.pathname}`.replace(/\\/+$/, ''));\n}\n"]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge logic and runtime validation for image generation options.
|
|
3
|
+
* @packageDocumentation
|
|
4
|
+
*/
|
|
5
|
+
import { type JsonObject } from '@fgv/ts-json-base';
|
|
6
|
+
import { Result } from '@fgv/ts-utils';
|
|
7
|
+
import type { IAiImageModelCapability, IAiImageGenerationOptions } from './model';
|
|
8
|
+
/**
|
|
9
|
+
* The resolved, merged wire parameters for an image generation request.
|
|
10
|
+
* Built from the layered options and ready for provider-specific encoding.
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export interface IResolvedImageOptions {
|
|
14
|
+
/** Number of images to generate. */
|
|
15
|
+
readonly n: number;
|
|
16
|
+
/** Image size (OpenAI-style pixel strings). */
|
|
17
|
+
readonly size?: string;
|
|
18
|
+
/** Quality tier. */
|
|
19
|
+
readonly quality?: string;
|
|
20
|
+
/** Seed for reproducibility. */
|
|
21
|
+
readonly seed?: number;
|
|
22
|
+
readonly style?: string;
|
|
23
|
+
readonly outputFormat?: string;
|
|
24
|
+
readonly outputCompression?: number;
|
|
25
|
+
readonly background?: string;
|
|
26
|
+
readonly moderation?: string;
|
|
27
|
+
readonly aspectRatio?: string;
|
|
28
|
+
readonly resolution?: string;
|
|
29
|
+
readonly imagenAspectRatio?: string;
|
|
30
|
+
readonly imageSize?: string;
|
|
31
|
+
readonly addWatermark?: boolean;
|
|
32
|
+
readonly enhancePrompt?: boolean;
|
|
33
|
+
readonly imagenOutputMimeType?: string;
|
|
34
|
+
readonly imagenOutputCompressionQuality?: number;
|
|
35
|
+
readonly personGeneration?: string;
|
|
36
|
+
readonly geminiAspectRatio?: string;
|
|
37
|
+
readonly otherParams?: JsonObject;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Resolves the merged image options for a given model and capability.
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* **Merge precedence (later wins):**
|
|
44
|
+
* 1. Generic top-level options (size, count, quality, seed)
|
|
45
|
+
* 2. Family-generic blocks (models field omitted, provider matches)
|
|
46
|
+
* 3. Model-specific blocks (models array includes the resolved model name)
|
|
47
|
+
* 4. Other blocks (provider: 'other', models array includes model name)
|
|
48
|
+
*
|
|
49
|
+
* Provider-mismatch blocks are silently skipped.
|
|
50
|
+
*
|
|
51
|
+
* Within each tier, declaration order — later declaration wins.
|
|
52
|
+
*
|
|
53
|
+
* @param modelId - The resolved model string
|
|
54
|
+
* @param capability - The resolved IAiImageModelCapability for this model
|
|
55
|
+
* @param options - Caller-supplied options
|
|
56
|
+
* @returns The merged wire parameters
|
|
57
|
+
* @public
|
|
58
|
+
*/
|
|
59
|
+
export declare function resolveImageOptions(modelId: string, capability: IAiImageModelCapability, options: IAiImageGenerationOptions | undefined): IResolvedImageOptions;
|
|
60
|
+
/**
|
|
61
|
+
* Validates the resolved options against per-model registry constraints.
|
|
62
|
+
*
|
|
63
|
+
* @remarks
|
|
64
|
+
* Fails fast on the first violation. Error format:
|
|
65
|
+
* `model "${model}": ${field} "${value}" is not accepted; accepted values: ${JSON.stringify(accepted)}`
|
|
66
|
+
*
|
|
67
|
+
* @param modelId - The resolved model string
|
|
68
|
+
* @param capability - The resolved capability entry from the registry
|
|
69
|
+
* @param resolved - The merged options from resolveImageOptions
|
|
70
|
+
* @returns The same resolved options on success, or a failure with a contextual message
|
|
71
|
+
* @public
|
|
72
|
+
*/
|
|
73
|
+
export declare function validateResolvedOptions(modelId: string, capability: IAiImageModelCapability, resolved: IResolvedImageOptions): Result<IResolvedImageOptions>;
|
|
74
|
+
//# sourceMappingURL=imageOptionsResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageOptionsResolver.d.ts","sourceRoot":"","sources":["../../../src/packlets/ai-assist/imageOptionsResolver.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAQ,MAAM,EAAW,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAS1B,MAAM,SAAS,CAAC;AAsDjB;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEpC,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;CACnC;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,uBAAuB,EACnC,OAAO,EAAE,yBAAyB,GAAG,SAAS,GAC7C,qBAAqB,CAwCvB;AA2FD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,uBAAuB,EACnC,QAAQ,EAAE,qBAAqB,GAC9B,MAAM,CAAC,qBAAqB,CAAC,CAiC/B"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) 2026 Erik Fortune
|
|
3
|
+
//
|
|
4
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
6
|
+
// in the Software without restriction, including without limitation the rights
|
|
7
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
8
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
9
|
+
// furnished to do so, subject to the following conditions:
|
|
10
|
+
//
|
|
11
|
+
// The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
// copies or substantial portions of the Software.
|
|
13
|
+
//
|
|
14
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
+
// SOFTWARE.
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.resolveImageOptions = resolveImageOptions;
|
|
23
|
+
exports.validateResolvedOptions = validateResolvedOptions;
|
|
24
|
+
const ts_utils_1 = require("@fgv/ts-utils");
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Provider lineage helpers
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/** Maps AiImageApiFormat values to the corresponding IModelFamilyConfig provider discriminator. */
|
|
29
|
+
function providerLineageForFormat(format) {
|
|
30
|
+
switch (format) {
|
|
31
|
+
case 'openai-images':
|
|
32
|
+
return 'openai';
|
|
33
|
+
case 'xai-images':
|
|
34
|
+
case 'xai-images-edits':
|
|
35
|
+
return 'xai';
|
|
36
|
+
case 'gemini-imagen':
|
|
37
|
+
case 'gemini-image-out':
|
|
38
|
+
return 'google';
|
|
39
|
+
default:
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// Type guards
|
|
45
|
+
// ============================================================================
|
|
46
|
+
function isDallEModelOptions(block) {
|
|
47
|
+
return block.provider === 'openai' && block.family === 'dall-e';
|
|
48
|
+
}
|
|
49
|
+
function isGptImageModelOptions(block) {
|
|
50
|
+
return block.provider === 'openai' && block.family === 'gpt-image';
|
|
51
|
+
}
|
|
52
|
+
function isGrokImagineModelOptions(block) {
|
|
53
|
+
return block.provider === 'xai' && block.family === 'grok-imagine';
|
|
54
|
+
}
|
|
55
|
+
function isImagen4ModelOptions(block) {
|
|
56
|
+
return block.provider === 'google' && block.family === 'imagen-4';
|
|
57
|
+
}
|
|
58
|
+
function isGeminiFlashImageModelOptions(block) {
|
|
59
|
+
return block.provider === 'google' && block.family === 'gemini-flash-image';
|
|
60
|
+
}
|
|
61
|
+
function isOtherModelOptions(block) {
|
|
62
|
+
return block.provider === 'other';
|
|
63
|
+
}
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// Merge logic
|
|
66
|
+
// ============================================================================
|
|
67
|
+
/**
|
|
68
|
+
* Resolves the merged image options for a given model and capability.
|
|
69
|
+
*
|
|
70
|
+
* @remarks
|
|
71
|
+
* **Merge precedence (later wins):**
|
|
72
|
+
* 1. Generic top-level options (size, count, quality, seed)
|
|
73
|
+
* 2. Family-generic blocks (models field omitted, provider matches)
|
|
74
|
+
* 3. Model-specific blocks (models array includes the resolved model name)
|
|
75
|
+
* 4. Other blocks (provider: 'other', models array includes model name)
|
|
76
|
+
*
|
|
77
|
+
* Provider-mismatch blocks are silently skipped.
|
|
78
|
+
*
|
|
79
|
+
* Within each tier, declaration order — later declaration wins.
|
|
80
|
+
*
|
|
81
|
+
* @param modelId - The resolved model string
|
|
82
|
+
* @param capability - The resolved IAiImageModelCapability for this model
|
|
83
|
+
* @param options - Caller-supplied options
|
|
84
|
+
* @returns The merged wire parameters
|
|
85
|
+
* @public
|
|
86
|
+
*/
|
|
87
|
+
function resolveImageOptions(modelId, capability, options) {
|
|
88
|
+
var _a, _b;
|
|
89
|
+
const opts = options !== null && options !== void 0 ? options : {};
|
|
90
|
+
const lineage = providerLineageForFormat(capability.format);
|
|
91
|
+
// Start from generic top-level
|
|
92
|
+
let resolved = Object.assign(Object.assign(Object.assign({ n: (_a = opts.count) !== null && _a !== void 0 ? _a : 1 }, (opts.size !== undefined ? { size: opts.size } : {})), (opts.quality !== undefined ? { quality: opts.quality } : {})), (opts.seed !== undefined ? { seed: opts.seed } : {}));
|
|
93
|
+
const modelBlocks = (_b = opts.models) !== null && _b !== void 0 ? _b : [];
|
|
94
|
+
// Tier 2: family-generic blocks (models field omitted, provider matches lineage)
|
|
95
|
+
for (const block of modelBlocks) {
|
|
96
|
+
if (block.provider !== lineage && block.provider !== 'other')
|
|
97
|
+
continue;
|
|
98
|
+
if (block.provider === 'other')
|
|
99
|
+
continue; // other blocks handled in tier 4
|
|
100
|
+
if (!isApplicableBlock(block, modelId))
|
|
101
|
+
continue;
|
|
102
|
+
if (!isFamilyGenericBlock(block))
|
|
103
|
+
continue;
|
|
104
|
+
resolved = applyBlock(resolved, block);
|
|
105
|
+
}
|
|
106
|
+
// Tier 3: model-specific blocks (models array includes this model)
|
|
107
|
+
for (const block of modelBlocks) {
|
|
108
|
+
if (block.provider !== lineage && block.provider !== 'other')
|
|
109
|
+
continue;
|
|
110
|
+
if (block.provider === 'other')
|
|
111
|
+
continue;
|
|
112
|
+
if (!isApplicableBlock(block, modelId))
|
|
113
|
+
continue;
|
|
114
|
+
if (isFamilyGenericBlock(block))
|
|
115
|
+
continue;
|
|
116
|
+
resolved = applyBlock(resolved, block);
|
|
117
|
+
}
|
|
118
|
+
// Tier 4: Other blocks (same precedence as model-specific)
|
|
119
|
+
for (const block of modelBlocks) {
|
|
120
|
+
if (!isOtherModelOptions(block))
|
|
121
|
+
continue;
|
|
122
|
+
if (!block.models.includes(modelId))
|
|
123
|
+
continue;
|
|
124
|
+
resolved = applyOtherBlock(resolved, block);
|
|
125
|
+
}
|
|
126
|
+
return resolved;
|
|
127
|
+
}
|
|
128
|
+
function isApplicableBlock(block, modelId) {
|
|
129
|
+
/* c8 ignore next 3 - defensive coding: other blocks are filtered before isApplicableBlock is called */
|
|
130
|
+
if (isOtherModelOptions(block)) {
|
|
131
|
+
return block.models.includes(modelId);
|
|
132
|
+
}
|
|
133
|
+
// Has models array? Must include this modelId.
|
|
134
|
+
const named = block;
|
|
135
|
+
if (named.models !== undefined && named.models.length > 0) {
|
|
136
|
+
return named.models.includes(modelId);
|
|
137
|
+
}
|
|
138
|
+
// No models array = family-generic = applies to all in this family
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
function isFamilyGenericBlock(block) {
|
|
142
|
+
/* c8 ignore next 1 - defensive coding: other blocks are filtered before isFamilyGenericBlock is called */
|
|
143
|
+
if (isOtherModelOptions(block))
|
|
144
|
+
return false;
|
|
145
|
+
const named = block;
|
|
146
|
+
return named.models === undefined || named.models.length === 0;
|
|
147
|
+
}
|
|
148
|
+
function applyBlock(resolved, block) {
|
|
149
|
+
if (isDallEModelOptions(block)) {
|
|
150
|
+
return Object.assign(Object.assign(Object.assign(Object.assign({}, resolved), (block.config.size !== undefined ? { size: block.config.size } : {})), (block.config.quality !== undefined ? { quality: block.config.quality } : {})), (block.config.style !== undefined ? { style: block.config.style } : {}));
|
|
151
|
+
}
|
|
152
|
+
if (isGptImageModelOptions(block)) {
|
|
153
|
+
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, resolved), (block.config.size !== undefined ? { size: block.config.size } : {})), (block.config.quality !== undefined ? { quality: block.config.quality } : {})), (block.config.outputFormat !== undefined ? { outputFormat: block.config.outputFormat } : {})), (block.config.outputCompression !== undefined
|
|
154
|
+
? { outputCompression: block.config.outputCompression }
|
|
155
|
+
: {})), (block.config.background !== undefined ? { background: block.config.background } : {})), (block.config.moderation !== undefined ? { moderation: block.config.moderation } : {}));
|
|
156
|
+
}
|
|
157
|
+
if (isGrokImagineModelOptions(block)) {
|
|
158
|
+
return Object.assign(Object.assign(Object.assign({}, resolved), (block.config.aspectRatio !== undefined ? { aspectRatio: block.config.aspectRatio } : {})), (block.config.resolution !== undefined ? { resolution: block.config.resolution } : {}));
|
|
159
|
+
}
|
|
160
|
+
if (isImagen4ModelOptions(block)) {
|
|
161
|
+
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, resolved), (block.config.aspectRatio !== undefined ? { imagenAspectRatio: block.config.aspectRatio } : {})), (block.config.imageSize !== undefined ? { imageSize: block.config.imageSize } : {})), (block.config.addWatermark !== undefined ? { addWatermark: block.config.addWatermark } : {})), (block.config.enhancePrompt !== undefined ? { enhancePrompt: block.config.enhancePrompt } : {})), (block.config.outputMimeType !== undefined
|
|
162
|
+
? { imagenOutputMimeType: block.config.outputMimeType }
|
|
163
|
+
: {})), (block.config.outputCompressionQuality !== undefined
|
|
164
|
+
? { imagenOutputCompressionQuality: block.config.outputCompressionQuality }
|
|
165
|
+
: {})), (block.config.personGeneration !== undefined
|
|
166
|
+
? { personGeneration: block.config.personGeneration }
|
|
167
|
+
: {}));
|
|
168
|
+
}
|
|
169
|
+
if (isGeminiFlashImageModelOptions(block)) {
|
|
170
|
+
return Object.assign(Object.assign({}, resolved), (block.config.aspectRatio !== undefined ? { geminiAspectRatio: block.config.aspectRatio } : {}));
|
|
171
|
+
}
|
|
172
|
+
/* c8 ignore next 2 - defensive coding: exhaustive union, all family types handled above */
|
|
173
|
+
return resolved;
|
|
174
|
+
}
|
|
175
|
+
function applyOtherBlock(resolved, block) {
|
|
176
|
+
var _a;
|
|
177
|
+
return Object.assign(Object.assign({}, resolved), { otherParams: Object.assign(Object.assign({}, ((_a = resolved.otherParams) !== null && _a !== void 0 ? _a : {})), block.config) });
|
|
178
|
+
}
|
|
179
|
+
// ============================================================================
|
|
180
|
+
// Runtime validation
|
|
181
|
+
// ============================================================================
|
|
182
|
+
/**
|
|
183
|
+
* Validates the resolved options against per-model registry constraints.
|
|
184
|
+
*
|
|
185
|
+
* @remarks
|
|
186
|
+
* Fails fast on the first violation. Error format:
|
|
187
|
+
* `model "${model}": ${field} "${value}" is not accepted; accepted values: ${JSON.stringify(accepted)}`
|
|
188
|
+
*
|
|
189
|
+
* @param modelId - The resolved model string
|
|
190
|
+
* @param capability - The resolved capability entry from the registry
|
|
191
|
+
* @param resolved - The merged options from resolveImageOptions
|
|
192
|
+
* @returns The same resolved options on success, or a failure with a contextual message
|
|
193
|
+
* @public
|
|
194
|
+
*/
|
|
195
|
+
function validateResolvedOptions(modelId, capability, resolved) {
|
|
196
|
+
// Validate count
|
|
197
|
+
if (capability.maxCount !== undefined && resolved.n > capability.maxCount) {
|
|
198
|
+
return (0, ts_utils_1.fail)(`model "${modelId}": count ${resolved.n} exceeds maximum of ${capability.maxCount}`);
|
|
199
|
+
}
|
|
200
|
+
// Validate size
|
|
201
|
+
if (capability.acceptedSizes !== undefined && resolved.size !== undefined) {
|
|
202
|
+
if (!capability.acceptedSizes.includes(resolved.size)) {
|
|
203
|
+
return (0, ts_utils_1.fail)(`model "${modelId}": size "${resolved.size}" is not accepted; accepted values: ${JSON.stringify(capability.acceptedSizes)}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Validate quality
|
|
207
|
+
if (capability.supportsQualityParam &&
|
|
208
|
+
capability.acceptedQualities !== undefined &&
|
|
209
|
+
resolved.quality !== undefined) {
|
|
210
|
+
if (!capability.acceptedQualities.includes(resolved.quality)) {
|
|
211
|
+
return (0, ts_utils_1.fail)(`model "${modelId}": quality "${resolved.quality}" is not accepted; accepted values: ${JSON.stringify(capability.acceptedQualities)}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return (0, ts_utils_1.succeed)(resolved);
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=imageOptionsResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageOptionsResolver.js","sourceRoot":"","sources":["../../../src/packlets/ai-assist/imageOptionsResolver.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Erik Fortune\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Merge logic and runtime validation for image generation options.\n * @packageDocumentation\n */\n\nimport { type JsonObject } from '@fgv/ts-json-base';\nimport { fail, Result, succeed } from '@fgv/ts-utils';\n\nimport type {\n IAiImageModelCapability,\n IAiImageGenerationOptions,\n IModelFamilyConfig,\n INamedModelFamilyConfig,\n IDallEModelOptions,\n IGptImageModelOptions,\n IGrokImagineModelOptions,\n IImagen4ModelOptions,\n IGeminiFlashImageModelOptions,\n IOtherModelOptions\n} from './model';\n\n// ============================================================================\n// Provider lineage helpers\n// ============================================================================\n\n/** Maps AiImageApiFormat values to the corresponding IModelFamilyConfig provider discriminator. */\nfunction providerLineageForFormat(format: string): 'openai' | 'xai' | 'google' | 'other' | undefined {\n switch (format) {\n case 'openai-images':\n return 'openai';\n case 'xai-images':\n case 'xai-images-edits':\n return 'xai';\n case 'gemini-imagen':\n case 'gemini-image-out':\n return 'google';\n default:\n return undefined;\n }\n}\n\n// ============================================================================\n// Type guards\n// ============================================================================\n\nfunction isDallEModelOptions(block: IModelFamilyConfig): block is IDallEModelOptions {\n return block.provider === 'openai' && block.family === 'dall-e';\n}\n\nfunction isGptImageModelOptions(block: IModelFamilyConfig): block is IGptImageModelOptions {\n return block.provider === 'openai' && block.family === 'gpt-image';\n}\n\nfunction isGrokImagineModelOptions(block: IModelFamilyConfig): block is IGrokImagineModelOptions {\n return block.provider === 'xai' && block.family === 'grok-imagine';\n}\n\nfunction isImagen4ModelOptions(block: IModelFamilyConfig): block is IImagen4ModelOptions {\n return block.provider === 'google' && block.family === 'imagen-4';\n}\n\nfunction isGeminiFlashImageModelOptions(block: IModelFamilyConfig): block is IGeminiFlashImageModelOptions {\n return block.provider === 'google' && block.family === 'gemini-flash-image';\n}\n\nfunction isOtherModelOptions(block: IModelFamilyConfig): block is IOtherModelOptions {\n return block.provider === 'other';\n}\n\n// ============================================================================\n// Resolved wire shape\n// ============================================================================\n\n/**\n * The resolved, merged wire parameters for an image generation request.\n * Built from the layered options and ready for provider-specific encoding.\n * @public\n */\nexport interface IResolvedImageOptions {\n /** Number of images to generate. */\n readonly n: number;\n /** Image size (OpenAI-style pixel strings). */\n readonly size?: string;\n /** Quality tier. */\n readonly quality?: string;\n /** Seed for reproducibility. */\n readonly seed?: number;\n // DallE-specific\n readonly style?: string;\n // GptImage-specific\n readonly outputFormat?: string;\n readonly outputCompression?: number;\n readonly background?: string;\n readonly moderation?: string;\n // xAI-specific\n readonly aspectRatio?: string;\n readonly resolution?: string;\n // Imagen-specific\n readonly imagenAspectRatio?: string;\n readonly imageSize?: string;\n readonly addWatermark?: boolean;\n readonly enhancePrompt?: boolean;\n readonly imagenOutputMimeType?: string;\n readonly imagenOutputCompressionQuality?: number;\n readonly personGeneration?: string;\n // Gemini Flash-specific\n readonly geminiAspectRatio?: string;\n // Other-block passthroughs (merged at model-specific tier)\n readonly otherParams?: JsonObject;\n}\n\n// ============================================================================\n// Merge logic\n// ============================================================================\n\n/**\n * Resolves the merged image options for a given model and capability.\n *\n * @remarks\n * **Merge precedence (later wins):**\n * 1. Generic top-level options (size, count, quality, seed)\n * 2. Family-generic blocks (models field omitted, provider matches)\n * 3. Model-specific blocks (models array includes the resolved model name)\n * 4. Other blocks (provider: 'other', models array includes model name)\n *\n * Provider-mismatch blocks are silently skipped.\n *\n * Within each tier, declaration order — later declaration wins.\n *\n * @param modelId - The resolved model string\n * @param capability - The resolved IAiImageModelCapability for this model\n * @param options - Caller-supplied options\n * @returns The merged wire parameters\n * @public\n */\nexport function resolveImageOptions(\n modelId: string,\n capability: IAiImageModelCapability,\n options: IAiImageGenerationOptions | undefined\n): IResolvedImageOptions {\n const opts = options ?? {};\n const lineage = providerLineageForFormat(capability.format);\n\n // Start from generic top-level\n let resolved: IResolvedImageOptions = {\n n: opts.count ?? 1,\n ...(opts.size !== undefined ? { size: opts.size } : {}),\n ...(opts.quality !== undefined ? { quality: opts.quality } : {}),\n ...(opts.seed !== undefined ? { seed: opts.seed } : {})\n };\n\n const modelBlocks = opts.models ?? [];\n\n // Tier 2: family-generic blocks (models field omitted, provider matches lineage)\n for (const block of modelBlocks) {\n if (block.provider !== lineage && block.provider !== 'other') continue;\n if (block.provider === 'other') continue; // other blocks handled in tier 4\n if (!isApplicableBlock(block, modelId)) continue;\n if (!isFamilyGenericBlock(block)) continue;\n resolved = applyBlock(resolved, block);\n }\n\n // Tier 3: model-specific blocks (models array includes this model)\n for (const block of modelBlocks) {\n if (block.provider !== lineage && block.provider !== 'other') continue;\n if (block.provider === 'other') continue;\n if (!isApplicableBlock(block, modelId)) continue;\n if (isFamilyGenericBlock(block)) continue;\n resolved = applyBlock(resolved, block);\n }\n\n // Tier 4: Other blocks (same precedence as model-specific)\n for (const block of modelBlocks) {\n if (!isOtherModelOptions(block)) continue;\n if (!block.models.includes(modelId)) continue;\n resolved = applyOtherBlock(resolved, block);\n }\n\n return resolved;\n}\n\nfunction isApplicableBlock(block: IModelFamilyConfig, modelId: string): boolean {\n /* c8 ignore next 3 - defensive coding: other blocks are filtered before isApplicableBlock is called */\n if (isOtherModelOptions(block)) {\n return block.models.includes(modelId);\n }\n // Has models array? Must include this modelId.\n const named = block as INamedModelFamilyConfig;\n if (named.models !== undefined && named.models.length > 0) {\n return named.models.includes(modelId);\n }\n // No models array = family-generic = applies to all in this family\n return true;\n}\n\nfunction isFamilyGenericBlock(block: IModelFamilyConfig): boolean {\n /* c8 ignore next 1 - defensive coding: other blocks are filtered before isFamilyGenericBlock is called */\n if (isOtherModelOptions(block)) return false;\n const named = block as INamedModelFamilyConfig;\n return named.models === undefined || named.models.length === 0;\n}\n\nfunction applyBlock(resolved: IResolvedImageOptions, block: IModelFamilyConfig): IResolvedImageOptions {\n if (isDallEModelOptions(block)) {\n return {\n ...resolved,\n ...(block.config.size !== undefined ? { size: block.config.size } : {}),\n ...(block.config.quality !== undefined ? { quality: block.config.quality } : {}),\n ...(block.config.style !== undefined ? { style: block.config.style } : {})\n };\n }\n if (isGptImageModelOptions(block)) {\n return {\n ...resolved,\n ...(block.config.size !== undefined ? { size: block.config.size } : {}),\n ...(block.config.quality !== undefined ? { quality: block.config.quality } : {}),\n ...(block.config.outputFormat !== undefined ? { outputFormat: block.config.outputFormat } : {}),\n ...(block.config.outputCompression !== undefined\n ? { outputCompression: block.config.outputCompression }\n : {}),\n ...(block.config.background !== undefined ? { background: block.config.background } : {}),\n ...(block.config.moderation !== undefined ? { moderation: block.config.moderation } : {})\n };\n }\n if (isGrokImagineModelOptions(block)) {\n return {\n ...resolved,\n ...(block.config.aspectRatio !== undefined ? { aspectRatio: block.config.aspectRatio } : {}),\n ...(block.config.resolution !== undefined ? { resolution: block.config.resolution } : {})\n };\n }\n if (isImagen4ModelOptions(block)) {\n return {\n ...resolved,\n ...(block.config.aspectRatio !== undefined ? { imagenAspectRatio: block.config.aspectRatio } : {}),\n ...(block.config.imageSize !== undefined ? { imageSize: block.config.imageSize } : {}),\n ...(block.config.addWatermark !== undefined ? { addWatermark: block.config.addWatermark } : {}),\n ...(block.config.enhancePrompt !== undefined ? { enhancePrompt: block.config.enhancePrompt } : {}),\n ...(block.config.outputMimeType !== undefined\n ? { imagenOutputMimeType: block.config.outputMimeType }\n : {}),\n ...(block.config.outputCompressionQuality !== undefined\n ? { imagenOutputCompressionQuality: block.config.outputCompressionQuality }\n : {}),\n ...(block.config.personGeneration !== undefined\n ? { personGeneration: block.config.personGeneration }\n : {})\n };\n }\n if (isGeminiFlashImageModelOptions(block)) {\n return {\n ...resolved,\n ...(block.config.aspectRatio !== undefined ? { geminiAspectRatio: block.config.aspectRatio } : {})\n };\n }\n /* c8 ignore next 2 - defensive coding: exhaustive union, all family types handled above */\n return resolved;\n}\n\nfunction applyOtherBlock(resolved: IResolvedImageOptions, block: IOtherModelOptions): IResolvedImageOptions {\n return {\n ...resolved,\n otherParams: { ...(resolved.otherParams ?? {}), ...block.config }\n };\n}\n\n// ============================================================================\n// Runtime validation\n// ============================================================================\n\n/**\n * Validates the resolved options against per-model registry constraints.\n *\n * @remarks\n * Fails fast on the first violation. Error format:\n * `model \"${model}\": ${field} \"${value}\" is not accepted; accepted values: ${JSON.stringify(accepted)}`\n *\n * @param modelId - The resolved model string\n * @param capability - The resolved capability entry from the registry\n * @param resolved - The merged options from resolveImageOptions\n * @returns The same resolved options on success, or a failure with a contextual message\n * @public\n */\nexport function validateResolvedOptions(\n modelId: string,\n capability: IAiImageModelCapability,\n resolved: IResolvedImageOptions\n): Result<IResolvedImageOptions> {\n // Validate count\n if (capability.maxCount !== undefined && resolved.n > capability.maxCount) {\n return fail(`model \"${modelId}\": count ${resolved.n} exceeds maximum of ${capability.maxCount}`);\n }\n\n // Validate size\n if (capability.acceptedSizes !== undefined && resolved.size !== undefined) {\n if (!capability.acceptedSizes.includes(resolved.size)) {\n return fail(\n `model \"${modelId}\": size \"${resolved.size}\" is not accepted; accepted values: ${JSON.stringify(\n capability.acceptedSizes\n )}`\n );\n }\n }\n\n // Validate quality\n if (\n capability.supportsQualityParam &&\n capability.acceptedQualities !== undefined &&\n resolved.quality !== undefined\n ) {\n if (!capability.acceptedQualities.includes(resolved.quality)) {\n return fail(\n `model \"${modelId}\": quality \"${resolved.quality}\" is not accepted; accepted values: ${JSON.stringify(\n capability.acceptedQualities\n )}`\n );\n }\n }\n\n return succeed(resolved);\n}\n"]}
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
* AI assist packlet - provider registry, prompt class, settings, and API client.
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
|
-
export { AiPrompt, type AiProviderId, type AiServerToolType, type AiServerToolConfig, type IAiWebSearchToolConfig, type IAiToolEnablement, type IAiCompletionResponse, type IChatMessage, type AiApiFormat, type IAiProviderDescriptor, type IAiAssistProviderConfig, type IAiAssistSettings, DEFAULT_AI_ASSIST, type IAiAssistKeyStore, type ModelSpec, type ModelSpecKey, type IModelSpecMap, allModelSpecKeys, MODEL_SPEC_BASE_KEY, resolveModel } from './model';
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
5
|
+
export { AiPrompt, type AiModelCapability, type AiProviderId, type AiServerToolType, type AiServerToolConfig, type IAiWebSearchToolConfig, type IAiToolEnablement, type IAiCompletionResponse, type IChatMessage, type AiApiFormat, type AiImageApiFormat, type IAiImageModelCapability, type IAiProviderDescriptor, type IAiAssistProviderConfig, type IAiAssistSettings, DEFAULT_AI_ASSIST, type IAiAssistKeyStore, type IAiImageAttachment, type IAiImageData, type AiImageSize, type AiImageQuality, type DallE2Size, type DallE3Size, type GptImageSize, type DallE3Quality, type GptImageQuality, type DallEModelNames, type GptImageModelNames, type GrokImagineModelNames, type Imagen4ModelNames, type GeminiFlashImageModelNames, type IDallEImageGenerationConfig, type IGptImageGenerationConfig, type IGrokImagineImageGenerationConfig, type IImagen4GenerationConfig, type IGeminiFlashImageGenerationConfig, type IDallEModelOptions, type IGptImageModelOptions, type IGrokImagineModelOptions, type IImagen4ModelOptions, type IGeminiFlashImageModelOptions, type IOtherModelOptions, type IModelFamilyConfig, type IAiImageGenerationOptions, type IAiImageGenerationParams, type IAiGeneratedImage, type IAiImageGenerationResponse, type IAiModelCapabilityRule, type IAiModelCapabilityConfig, type IAiModelInfo, type IAiStreamEvent, type IAiStreamTextDelta, type IAiStreamToolEvent, type IAiStreamDone, type IAiStreamError, type ModelSpec, type ModelSpecKey, type IModelSpecMap, allModelSpecKeys, MODEL_SPEC_BASE_KEY, resolveModel, toDataUrl, type AiThinkingMode, type IThinkingConfig, type IThinkingProviderConfig, type IAnthropicThinkingOptions, type IOpenAiThinkingOptions, type IGeminiThinkingOptions, type IXAiThinkingOptions, type IOtherThinkingOptions, type IAnthropicThinkingConfig, type IOpenAiThinkingConfig, type IGeminiThinkingConfig, type IXAiThinkingConfig, type AnthropicThinkingModelNames, type OpenAiThinkingModelNames, type GeminiThinkingModelNames, type XAiThinkingModelNames } from './model';
|
|
6
|
+
export { type IResolvedImageOptions, resolveImageOptions, validateResolvedOptions } from './imageOptionsResolver';
|
|
7
|
+
export { allProviderIds, getProviderDescriptors, getProviderDescriptor, resolveImageCapability, supportsImageGeneration, DEFAULT_MODEL_CAPABILITY_CONFIG } from './registry';
|
|
8
|
+
export { callProviderCompletion, callProxiedCompletion, callProviderImageGeneration, callProxiedImageGeneration, callProviderListModels, callProxiedListModels, type IProviderCompletionParams, type IProviderImageGenerationParams, type IProviderListModelsParams } from './apiClient';
|
|
9
|
+
export { callProviderCompletionStream, callProxiedCompletionStream, type IProviderCompletionStreamParams } from './streamingClient';
|
|
8
10
|
export { aiProviderId, aiServerToolType, aiWebSearchToolConfig, aiServerToolConfig, aiToolEnablement, aiAssistProviderConfig, aiAssistSettings, modelSpecKey, modelSpec } from './converters';
|
|
9
11
|
export { resolveEffectiveTools } from './toolFormats';
|
|
12
|
+
export { extractJsonText, fencedStringifiedJson, type IFencedStringifiedJsonExtractorOptions, type IFencedStringifiedJsonOptions, type JsonTextExtractor } from './jsonResponse';
|
|
13
|
+
export { generateJsonCompletion, SMART_JSON_PROMPT_HINT, type IGenerateJsonCompletionParams, type IGenerateJsonCompletionResult, type JsonPromptHint } from './jsonCompletion';
|
|
10
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/packlets/ai-assist/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,20 +4,34 @@
|
|
|
4
4
|
* @packageDocumentation
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.resolveEffectiveTools = exports.modelSpec = exports.modelSpecKey = exports.aiAssistSettings = exports.aiAssistProviderConfig = exports.aiToolEnablement = exports.aiServerToolConfig = exports.aiWebSearchToolConfig = exports.aiServerToolType = exports.aiProviderId = exports.callProxiedCompletion = exports.callProviderCompletion = exports.getProviderDescriptor = exports.getProviderDescriptors = exports.allProviderIds = exports.resolveModel = exports.MODEL_SPEC_BASE_KEY = exports.allModelSpecKeys = exports.DEFAULT_AI_ASSIST = exports.AiPrompt = void 0;
|
|
7
|
+
exports.SMART_JSON_PROMPT_HINT = exports.generateJsonCompletion = exports.fencedStringifiedJson = exports.extractJsonText = exports.resolveEffectiveTools = exports.modelSpec = exports.modelSpecKey = exports.aiAssistSettings = exports.aiAssistProviderConfig = exports.aiToolEnablement = exports.aiServerToolConfig = exports.aiWebSearchToolConfig = exports.aiServerToolType = exports.aiProviderId = exports.callProxiedCompletionStream = exports.callProviderCompletionStream = exports.callProxiedListModels = exports.callProviderListModels = exports.callProxiedImageGeneration = exports.callProviderImageGeneration = exports.callProxiedCompletion = exports.callProviderCompletion = exports.DEFAULT_MODEL_CAPABILITY_CONFIG = exports.supportsImageGeneration = exports.resolveImageCapability = exports.getProviderDescriptor = exports.getProviderDescriptors = exports.allProviderIds = exports.validateResolvedOptions = exports.resolveImageOptions = exports.toDataUrl = exports.resolveModel = exports.MODEL_SPEC_BASE_KEY = exports.allModelSpecKeys = exports.DEFAULT_AI_ASSIST = exports.AiPrompt = void 0;
|
|
8
8
|
var model_1 = require("./model");
|
|
9
9
|
Object.defineProperty(exports, "AiPrompt", { enumerable: true, get: function () { return model_1.AiPrompt; } });
|
|
10
10
|
Object.defineProperty(exports, "DEFAULT_AI_ASSIST", { enumerable: true, get: function () { return model_1.DEFAULT_AI_ASSIST; } });
|
|
11
11
|
Object.defineProperty(exports, "allModelSpecKeys", { enumerable: true, get: function () { return model_1.allModelSpecKeys; } });
|
|
12
12
|
Object.defineProperty(exports, "MODEL_SPEC_BASE_KEY", { enumerable: true, get: function () { return model_1.MODEL_SPEC_BASE_KEY; } });
|
|
13
13
|
Object.defineProperty(exports, "resolveModel", { enumerable: true, get: function () { return model_1.resolveModel; } });
|
|
14
|
+
Object.defineProperty(exports, "toDataUrl", { enumerable: true, get: function () { return model_1.toDataUrl; } });
|
|
15
|
+
var imageOptionsResolver_1 = require("./imageOptionsResolver");
|
|
16
|
+
Object.defineProperty(exports, "resolveImageOptions", { enumerable: true, get: function () { return imageOptionsResolver_1.resolveImageOptions; } });
|
|
17
|
+
Object.defineProperty(exports, "validateResolvedOptions", { enumerable: true, get: function () { return imageOptionsResolver_1.validateResolvedOptions; } });
|
|
14
18
|
var registry_1 = require("./registry");
|
|
15
19
|
Object.defineProperty(exports, "allProviderIds", { enumerable: true, get: function () { return registry_1.allProviderIds; } });
|
|
16
20
|
Object.defineProperty(exports, "getProviderDescriptors", { enumerable: true, get: function () { return registry_1.getProviderDescriptors; } });
|
|
17
21
|
Object.defineProperty(exports, "getProviderDescriptor", { enumerable: true, get: function () { return registry_1.getProviderDescriptor; } });
|
|
22
|
+
Object.defineProperty(exports, "resolveImageCapability", { enumerable: true, get: function () { return registry_1.resolveImageCapability; } });
|
|
23
|
+
Object.defineProperty(exports, "supportsImageGeneration", { enumerable: true, get: function () { return registry_1.supportsImageGeneration; } });
|
|
24
|
+
Object.defineProperty(exports, "DEFAULT_MODEL_CAPABILITY_CONFIG", { enumerable: true, get: function () { return registry_1.DEFAULT_MODEL_CAPABILITY_CONFIG; } });
|
|
18
25
|
var apiClient_1 = require("./apiClient");
|
|
19
26
|
Object.defineProperty(exports, "callProviderCompletion", { enumerable: true, get: function () { return apiClient_1.callProviderCompletion; } });
|
|
20
27
|
Object.defineProperty(exports, "callProxiedCompletion", { enumerable: true, get: function () { return apiClient_1.callProxiedCompletion; } });
|
|
28
|
+
Object.defineProperty(exports, "callProviderImageGeneration", { enumerable: true, get: function () { return apiClient_1.callProviderImageGeneration; } });
|
|
29
|
+
Object.defineProperty(exports, "callProxiedImageGeneration", { enumerable: true, get: function () { return apiClient_1.callProxiedImageGeneration; } });
|
|
30
|
+
Object.defineProperty(exports, "callProviderListModels", { enumerable: true, get: function () { return apiClient_1.callProviderListModels; } });
|
|
31
|
+
Object.defineProperty(exports, "callProxiedListModels", { enumerable: true, get: function () { return apiClient_1.callProxiedListModels; } });
|
|
32
|
+
var streamingClient_1 = require("./streamingClient");
|
|
33
|
+
Object.defineProperty(exports, "callProviderCompletionStream", { enumerable: true, get: function () { return streamingClient_1.callProviderCompletionStream; } });
|
|
34
|
+
Object.defineProperty(exports, "callProxiedCompletionStream", { enumerable: true, get: function () { return streamingClient_1.callProxiedCompletionStream; } });
|
|
21
35
|
var converters_1 = require("./converters");
|
|
22
36
|
Object.defineProperty(exports, "aiProviderId", { enumerable: true, get: function () { return converters_1.aiProviderId; } });
|
|
23
37
|
Object.defineProperty(exports, "aiServerToolType", { enumerable: true, get: function () { return converters_1.aiServerToolType; } });
|
|
@@ -30,4 +44,10 @@ Object.defineProperty(exports, "modelSpecKey", { enumerable: true, get: function
|
|
|
30
44
|
Object.defineProperty(exports, "modelSpec", { enumerable: true, get: function () { return converters_1.modelSpec; } });
|
|
31
45
|
var toolFormats_1 = require("./toolFormats");
|
|
32
46
|
Object.defineProperty(exports, "resolveEffectiveTools", { enumerable: true, get: function () { return toolFormats_1.resolveEffectiveTools; } });
|
|
47
|
+
var jsonResponse_1 = require("./jsonResponse");
|
|
48
|
+
Object.defineProperty(exports, "extractJsonText", { enumerable: true, get: function () { return jsonResponse_1.extractJsonText; } });
|
|
49
|
+
Object.defineProperty(exports, "fencedStringifiedJson", { enumerable: true, get: function () { return jsonResponse_1.fencedStringifiedJson; } });
|
|
50
|
+
var jsonCompletion_1 = require("./jsonCompletion");
|
|
51
|
+
Object.defineProperty(exports, "generateJsonCompletion", { enumerable: true, get: function () { return jsonCompletion_1.generateJsonCompletion; } });
|
|
52
|
+
Object.defineProperty(exports, "SMART_JSON_PROMPT_HINT", { enumerable: true, get: function () { return jsonCompletion_1.SMART_JSON_PROMPT_HINT; } });
|
|
33
53
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/packlets/ai-assist/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iCA+EiB;AA9Ef,iGAAA,QAAQ,OAAA;AAeR,0GAAA,iBAAiB,OAAA;AA2CjB,yGAAA,gBAAgB,OAAA;AAChB,4GAAA,mBAAmB,OAAA;AACnB,qGAAA,YAAY,OAAA;AACZ,kGAAA,SAAS,OAAA;AAmBX,+DAIgC;AAF9B,2HAAA,mBAAmB,OAAA;AACnB,+HAAA,uBAAuB,OAAA;AAGzB,uCAOoB;AANlB,0GAAA,cAAc,OAAA;AACd,kHAAA,sBAAsB,OAAA;AACtB,iHAAA,qBAAqB,OAAA;AACrB,kHAAA,sBAAsB,OAAA;AACtB,mHAAA,uBAAuB,OAAA;AACvB,2HAAA,+BAA+B,OAAA;AAGjC,yCAUqB;AATnB,mHAAA,sBAAsB,OAAA;AACtB,kHAAA,qBAAqB,OAAA;AACrB,wHAAA,2BAA2B,OAAA;AAC3B,uHAAA,0BAA0B,OAAA;AAC1B,mHAAA,sBAAsB,OAAA;AACtB,kHAAA,qBAAqB,OAAA;AAMvB,qDAI2B;AAHzB,+HAAA,4BAA4B,OAAA;AAC5B,8HAAA,2BAA2B,OAAA;AAI7B,2CAUsB;AATpB,0GAAA,YAAY,OAAA;AACZ,8GAAA,gBAAgB,OAAA;AAChB,mHAAA,qBAAqB,OAAA;AACrB,gHAAA,kBAAkB,OAAA;AAClB,8GAAA,gBAAgB,OAAA;AAChB,oHAAA,sBAAsB,OAAA;AACtB,8GAAA,gBAAgB,OAAA;AAChB,0GAAA,YAAY,OAAA;AACZ,uGAAA,SAAS,OAAA;AAGX,6CAAsD;AAA7C,oHAAA,qBAAqB,OAAA;AAE9B,+CAMwB;AALtB,+GAAA,eAAe,OAAA;AACf,qHAAA,qBAAqB,OAAA;AAMvB,mDAM0B;AALxB,wHAAA,sBAAsB,OAAA;AACtB,wHAAA,sBAAsB,OAAA","sourcesContent":["/**\n * AI assist packlet - provider registry, prompt class, settings, and API client.\n * @packageDocumentation\n */\n\nexport {\n AiPrompt,\n type AiModelCapability,\n type AiProviderId,\n type AiServerToolType,\n type AiServerToolConfig,\n type IAiWebSearchToolConfig,\n type IAiToolEnablement,\n type IAiCompletionResponse,\n type IChatMessage,\n type AiApiFormat,\n type AiImageApiFormat,\n type IAiImageModelCapability,\n type IAiProviderDescriptor,\n type IAiAssistProviderConfig,\n type IAiAssistSettings,\n DEFAULT_AI_ASSIST,\n type IAiAssistKeyStore,\n type IAiImageAttachment,\n type IAiImageData,\n type AiImageSize,\n type AiImageQuality,\n type DallE2Size,\n type DallE3Size,\n type GptImageSize,\n type DallE3Quality,\n type GptImageQuality,\n type DallEModelNames,\n type GptImageModelNames,\n type GrokImagineModelNames,\n type Imagen4ModelNames,\n type GeminiFlashImageModelNames,\n type IDallEImageGenerationConfig,\n type IGptImageGenerationConfig,\n type IGrokImagineImageGenerationConfig,\n type IImagen4GenerationConfig,\n type IGeminiFlashImageGenerationConfig,\n type IDallEModelOptions,\n type IGptImageModelOptions,\n type IGrokImagineModelOptions,\n type IImagen4ModelOptions,\n type IGeminiFlashImageModelOptions,\n type IOtherModelOptions,\n type IModelFamilyConfig,\n type IAiImageGenerationOptions,\n type IAiImageGenerationParams,\n type IAiGeneratedImage,\n type IAiImageGenerationResponse,\n type IAiModelCapabilityRule,\n type IAiModelCapabilityConfig,\n type IAiModelInfo,\n type IAiStreamEvent,\n type IAiStreamTextDelta,\n type IAiStreamToolEvent,\n type IAiStreamDone,\n type IAiStreamError,\n type ModelSpec,\n type ModelSpecKey,\n type IModelSpecMap,\n allModelSpecKeys,\n MODEL_SPEC_BASE_KEY,\n resolveModel,\n toDataUrl,\n type AiThinkingMode,\n type IThinkingConfig,\n type IThinkingProviderConfig,\n type IAnthropicThinkingOptions,\n type IOpenAiThinkingOptions,\n type IGeminiThinkingOptions,\n type IXAiThinkingOptions,\n type IOtherThinkingOptions,\n type IAnthropicThinkingConfig,\n type IOpenAiThinkingConfig,\n type IGeminiThinkingConfig,\n type IXAiThinkingConfig,\n type AnthropicThinkingModelNames,\n type OpenAiThinkingModelNames,\n type GeminiThinkingModelNames,\n type XAiThinkingModelNames\n} from './model';\n\nexport {\n type IResolvedImageOptions,\n resolveImageOptions,\n validateResolvedOptions\n} from './imageOptionsResolver';\n\nexport {\n allProviderIds,\n getProviderDescriptors,\n getProviderDescriptor,\n resolveImageCapability,\n supportsImageGeneration,\n DEFAULT_MODEL_CAPABILITY_CONFIG\n} from './registry';\n\nexport {\n callProviderCompletion,\n callProxiedCompletion,\n callProviderImageGeneration,\n callProxiedImageGeneration,\n callProviderListModels,\n callProxiedListModels,\n type IProviderCompletionParams,\n type IProviderImageGenerationParams,\n type IProviderListModelsParams\n} from './apiClient';\n\nexport {\n callProviderCompletionStream,\n callProxiedCompletionStream,\n type IProviderCompletionStreamParams\n} from './streamingClient';\n\nexport {\n aiProviderId,\n aiServerToolType,\n aiWebSearchToolConfig,\n aiServerToolConfig,\n aiToolEnablement,\n aiAssistProviderConfig,\n aiAssistSettings,\n modelSpecKey,\n modelSpec\n} from './converters';\n\nexport { resolveEffectiveTools } from './toolFormats';\n\nexport {\n extractJsonText,\n fencedStringifiedJson,\n type IFencedStringifiedJsonExtractorOptions,\n type IFencedStringifiedJsonOptions,\n type JsonTextExtractor\n} from './jsonResponse';\n\nexport {\n generateJsonCompletion,\n SMART_JSON_PROMPT_HINT,\n type IGenerateJsonCompletionParams,\n type IGenerateJsonCompletionResult,\n type JsonPromptHint\n} from './jsonCompletion';\n"]}
|