@code-yeongyu/senpi-ai 2026.7.25-2
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/README.md +1663 -0
- package/dist/api/anthropic-messages.d.ts +71 -0
- package/dist/api/anthropic-messages.d.ts.map +1 -0
- package/dist/api/anthropic-messages.js +1626 -0
- package/dist/api/anthropic-messages.js.map +1 -0
- package/dist/api/anthropic-messages.lazy.d.ts +3 -0
- package/dist/api/anthropic-messages.lazy.d.ts.map +1 -0
- package/dist/api/anthropic-messages.lazy.js +3 -0
- package/dist/api/anthropic-messages.lazy.js.map +1 -0
- package/dist/api/azure-openai-responses.d.ts +15 -0
- package/dist/api/azure-openai-responses.d.ts.map +1 -0
- package/dist/api/azure-openai-responses.js +242 -0
- package/dist/api/azure-openai-responses.js.map +1 -0
- package/dist/api/azure-openai-responses.lazy.d.ts +3 -0
- package/dist/api/azure-openai-responses.lazy.d.ts.map +1 -0
- package/dist/api/azure-openai-responses.lazy.js +3 -0
- package/dist/api/azure-openai-responses.lazy.js.map +1 -0
- package/dist/api/bedrock-converse-stream.d.ts +38 -0
- package/dist/api/bedrock-converse-stream.d.ts.map +1 -0
- package/dist/api/bedrock-converse-stream.js +939 -0
- package/dist/api/bedrock-converse-stream.js.map +1 -0
- package/dist/api/bedrock-converse-stream.lazy.d.ts +9 -0
- package/dist/api/bedrock-converse-stream.lazy.d.ts.map +1 -0
- package/dist/api/bedrock-converse-stream.lazy.js +30 -0
- package/dist/api/bedrock-converse-stream.lazy.js.map +1 -0
- package/dist/api/cloudflare.d.ts +12 -0
- package/dist/api/cloudflare.d.ts.map +1 -0
- package/dist/api/cloudflare.js +22 -0
- package/dist/api/cloudflare.js.map +1 -0
- package/dist/api/constrained-sampling.d.ts +17 -0
- package/dist/api/constrained-sampling.d.ts.map +1 -0
- package/dist/api/constrained-sampling.js +104 -0
- package/dist/api/constrained-sampling.js.map +1 -0
- package/dist/api/github-copilot-headers.d.ts +8 -0
- package/dist/api/github-copilot-headers.d.ts.map +1 -0
- package/dist/api/github-copilot-headers.js +29 -0
- package/dist/api/github-copilot-headers.js.map +1 -0
- package/dist/api/google-generative-ai.d.ts +13 -0
- package/dist/api/google-generative-ai.d.ts.map +1 -0
- package/dist/api/google-generative-ai.js +440 -0
- package/dist/api/google-generative-ai.js.map +1 -0
- package/dist/api/google-generative-ai.lazy.d.ts +3 -0
- package/dist/api/google-generative-ai.lazy.d.ts.map +1 -0
- package/dist/api/google-generative-ai.lazy.js +3 -0
- package/dist/api/google-generative-ai.lazy.js.map +1 -0
- package/dist/api/google-shared.d.ts +70 -0
- package/dist/api/google-shared.d.ts.map +1 -0
- package/dist/api/google-shared.js +360 -0
- package/dist/api/google-shared.js.map +1 -0
- package/dist/api/google-vertex.d.ts +15 -0
- package/dist/api/google-vertex.d.ts.map +1 -0
- package/dist/api/google-vertex.js +485 -0
- package/dist/api/google-vertex.js.map +1 -0
- package/dist/api/google-vertex.lazy.d.ts +3 -0
- package/dist/api/google-vertex.lazy.d.ts.map +1 -0
- package/dist/api/google-vertex.lazy.js +3 -0
- package/dist/api/google-vertex.lazy.js.map +1 -0
- package/dist/api/lazy.d.ts +15 -0
- package/dist/api/lazy.d.ts.map +1 -0
- package/dist/api/lazy.js +85 -0
- package/dist/api/lazy.js.map +1 -0
- package/dist/api/mistral-conversations.d.ts +25 -0
- package/dist/api/mistral-conversations.d.ts.map +1 -0
- package/dist/api/mistral-conversations.js +566 -0
- package/dist/api/mistral-conversations.js.map +1 -0
- package/dist/api/mistral-conversations.lazy.d.ts +3 -0
- package/dist/api/mistral-conversations.lazy.d.ts.map +1 -0
- package/dist/api/mistral-conversations.lazy.js +3 -0
- package/dist/api/mistral-conversations.lazy.js.map +1 -0
- package/dist/api/openai-codex-responses.d.ts +31 -0
- package/dist/api/openai-codex-responses.d.ts.map +1 -0
- package/dist/api/openai-codex-responses.js +1326 -0
- package/dist/api/openai-codex-responses.js.map +1 -0
- package/dist/api/openai-codex-responses.lazy.d.ts +3 -0
- package/dist/api/openai-codex-responses.lazy.d.ts.map +1 -0
- package/dist/api/openai-codex-responses.lazy.js +3 -0
- package/dist/api/openai-codex-responses.lazy.js.map +1 -0
- package/dist/api/openai-completions.d.ts +22 -0
- package/dist/api/openai-completions.d.ts.map +1 -0
- package/dist/api/openai-completions.js +1384 -0
- package/dist/api/openai-completions.js.map +1 -0
- package/dist/api/openai-completions.lazy.d.ts +3 -0
- package/dist/api/openai-completions.lazy.d.ts.map +1 -0
- package/dist/api/openai-completions.lazy.js +3 -0
- package/dist/api/openai-completions.lazy.js.map +1 -0
- package/dist/api/openai-prompt-cache.d.ts +3 -0
- package/dist/api/openai-prompt-cache.d.ts.map +1 -0
- package/dist/api/openai-prompt-cache.js +10 -0
- package/dist/api/openai-prompt-cache.js.map +1 -0
- package/dist/api/openai-responses-shared.d.ts +29 -0
- package/dist/api/openai-responses-shared.d.ts.map +1 -0
- package/dist/api/openai-responses-shared.js +730 -0
- package/dist/api/openai-responses-shared.js.map +1 -0
- package/dist/api/openai-responses.d.ts +14 -0
- package/dist/api/openai-responses.d.ts.map +1 -0
- package/dist/api/openai-responses.js +696 -0
- package/dist/api/openai-responses.js.map +1 -0
- package/dist/api/openai-responses.lazy.d.ts +3 -0
- package/dist/api/openai-responses.lazy.d.ts.map +1 -0
- package/dist/api/openai-responses.lazy.js +3 -0
- package/dist/api/openai-responses.lazy.js.map +1 -0
- package/dist/api/openrouter-images.d.ts +3 -0
- package/dist/api/openrouter-images.d.ts.map +1 -0
- package/dist/api/openrouter-images.js +131 -0
- package/dist/api/openrouter-images.js.map +1 -0
- package/dist/api/openrouter-images.lazy.d.ts +3 -0
- package/dist/api/openrouter-images.lazy.d.ts.map +1 -0
- package/dist/api/openrouter-images.lazy.js +4 -0
- package/dist/api/openrouter-images.lazy.js.map +1 -0
- package/dist/api/pi-messages.d.ts +97 -0
- package/dist/api/pi-messages.d.ts.map +1 -0
- package/dist/api/pi-messages.js +305 -0
- package/dist/api/pi-messages.js.map +1 -0
- package/dist/api/pi-messages.lazy.d.ts +3 -0
- package/dist/api/pi-messages.lazy.d.ts.map +1 -0
- package/dist/api/pi-messages.lazy.js +3 -0
- package/dist/api/pi-messages.lazy.js.map +1 -0
- package/dist/api/simple-options.d.ts +33 -0
- package/dist/api/simple-options.d.ts.map +1 -0
- package/dist/api/simple-options.js +177 -0
- package/dist/api/simple-options.js.map +1 -0
- package/dist/api/transform-messages.d.ts +23 -0
- package/dist/api/transform-messages.d.ts.map +1 -0
- package/dist/api/transform-messages.js +255 -0
- package/dist/api/transform-messages.js.map +1 -0
- package/dist/api-registry.d.ts +34 -0
- package/dist/api-registry.d.ts.map +1 -0
- package/dist/api-registry.js +96 -0
- package/dist/api-registry.js.map +1 -0
- package/dist/auth/context.d.ts +7 -0
- package/dist/auth/context.d.ts.map +1 -0
- package/dist/auth/context.js +42 -0
- package/dist/auth/context.js.map +1 -0
- package/dist/auth/credential-store.d.ts +17 -0
- package/dist/auth/credential-store.d.ts.map +1 -0
- package/dist/auth/credential-store.js +42 -0
- package/dist/auth/credential-store.js.map +1 -0
- package/dist/auth/helpers.d.ts +21 -0
- package/dist/auth/helpers.d.ts.map +1 -0
- package/dist/auth/helpers.js +48 -0
- package/dist/auth/helpers.js.map +1 -0
- package/dist/auth/oauth/anthropic.d.ts +9 -0
- package/dist/auth/oauth/anthropic.d.ts.map +1 -0
- package/dist/auth/oauth/anthropic.js +302 -0
- package/dist/auth/oauth/anthropic.js.map +1 -0
- package/dist/auth/oauth/device-code.d.ts +23 -0
- package/dist/auth/oauth/device-code.d.ts.map +1 -0
- package/dist/auth/oauth/device-code.js +69 -0
- package/dist/auth/oauth/device-code.js.map +1 -0
- package/dist/auth/oauth/github-copilot.d.ts +6 -0
- package/dist/auth/oauth/github-copilot.d.ts.map +1 -0
- package/dist/auth/oauth/github-copilot.js +312 -0
- package/dist/auth/oauth/github-copilot.js.map +1 -0
- package/dist/auth/oauth/kimi-coding.d.ts +10 -0
- package/dist/auth/oauth/kimi-coding.d.ts.map +1 -0
- package/dist/auth/oauth/kimi-coding.js +249 -0
- package/dist/auth/oauth/kimi-coding.js.map +1 -0
- package/dist/auth/oauth/load.d.ts +27 -0
- package/dist/auth/oauth/load.d.ts.map +1 -0
- package/dist/auth/oauth/load.js +59 -0
- package/dist/auth/oauth/load.js.map +1 -0
- package/dist/auth/oauth/oauth-page.d.ts +3 -0
- package/dist/auth/oauth/oauth-page.d.ts.map +1 -0
- package/dist/auth/oauth/oauth-page.js +105 -0
- package/dist/auth/oauth/oauth-page.js.map +1 -0
- package/dist/auth/oauth/openai-codex.d.ts +9 -0
- package/dist/auth/oauth/openai-codex.d.ts.map +1 -0
- package/dist/auth/oauth/openai-codex.js +427 -0
- package/dist/auth/oauth/openai-codex.js.map +1 -0
- package/dist/auth/oauth/openrouter.d.ts +13 -0
- package/dist/auth/oauth/openrouter.d.ts.map +1 -0
- package/dist/auth/oauth/openrouter.js +222 -0
- package/dist/auth/oauth/openrouter.js.map +1 -0
- package/dist/auth/oauth/pkce.d.ts +13 -0
- package/dist/auth/oauth/pkce.d.ts.map +1 -0
- package/dist/auth/oauth/pkce.js +31 -0
- package/dist/auth/oauth/pkce.js.map +1 -0
- package/dist/auth/oauth/radius.d.ts +17 -0
- package/dist/auth/oauth/radius.d.ts.map +1 -0
- package/dist/auth/oauth/radius.js +318 -0
- package/dist/auth/oauth/radius.js.map +1 -0
- package/dist/auth/oauth/xai.d.ts +6 -0
- package/dist/auth/oauth/xai.d.ts.map +1 -0
- package/dist/auth/oauth/xai.js +189 -0
- package/dist/auth/oauth/xai.js.map +1 -0
- package/dist/auth/resolve.d.ts +24 -0
- package/dist/auth/resolve.d.ts.map +1 -0
- package/dist/auth/resolve.js +112 -0
- package/dist/auth/resolve.js.map +1 -0
- package/dist/auth/types.d.ts +219 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/bedrock-provider.d.ts +5 -0
- package/dist/bedrock-provider.d.ts.map +1 -0
- package/dist/bedrock-provider.js +6 -0
- package/dist/bedrock-provider.js.map +1 -0
- package/dist/bun-oauth.d.ts +3 -0
- package/dist/bun-oauth.d.ts.map +1 -0
- package/dist/bun-oauth.js +21 -0
- package/dist/bun-oauth.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +112 -0
- package/dist/cli.js.map +1 -0
- package/dist/compat/extension-oauth-types.d.ts +42 -0
- package/dist/compat/extension-oauth-types.d.ts.map +1 -0
- package/dist/compat/extension-oauth-types.js +2 -0
- package/dist/compat/extension-oauth-types.js.map +1 -0
- package/dist/compat.d.ts +53 -0
- package/dist/compat.d.ts.map +1 -0
- package/dist/compat.js +176 -0
- package/dist/compat.js.map +1 -0
- package/dist/context-provenance.d.ts +16 -0
- package/dist/context-provenance.d.ts.map +1 -0
- package/dist/context-provenance.js +32 -0
- package/dist/context-provenance.js.map +1 -0
- package/dist/env-api-keys.d.ts +21 -0
- package/dist/env-api-keys.d.ts.map +1 -0
- package/dist/env-api-keys.js +155 -0
- package/dist/env-api-keys.js.map +1 -0
- package/dist/image-models.d.ts +10 -0
- package/dist/image-models.d.ts.map +1 -0
- package/dist/image-models.generated.d.ts +605 -0
- package/dist/image-models.generated.d.ts.map +1 -0
- package/dist/image-models.generated.js +607 -0
- package/dist/image-models.generated.js.map +1 -0
- package/dist/image-models.js +23 -0
- package/dist/image-models.js.map +1 -0
- package/dist/images-api-registry.d.ts +31 -0
- package/dist/images-api-registry.d.ts.map +1 -0
- package/dist/images-api-registry.js +87 -0
- package/dist/images-api-registry.js.map +1 -0
- package/dist/images-models.d.ts +95 -0
- package/dist/images-models.d.ts.map +1 -0
- package/dist/images-models.js +140 -0
- package/dist/images-models.js.map +1 -0
- package/dist/images.d.ts +4 -0
- package/dist/images.d.ts.map +1 -0
- package/dist/images.js +14 -0
- package/dist/images.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy-api-aliases.d.ts +42 -0
- package/dist/legacy-api-aliases.d.ts.map +1 -0
- package/dist/legacy-api-aliases.js +49 -0
- package/dist/legacy-api-aliases.js.map +1 -0
- package/dist/model-catalog.d.ts +17 -0
- package/dist/model-catalog.d.ts.map +1 -0
- package/dist/model-catalog.js +4 -0
- package/dist/model-catalog.js.map +1 -0
- package/dist/model.d.ts +27 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +2 -0
- package/dist/model.js.map +1 -0
- package/dist/models-store.d.ts +32 -0
- package/dist/models-store.d.ts.map +1 -0
- package/dist/models-store.js +16 -0
- package/dist/models-store.js.map +1 -0
- package/dist/models.d.ts +179 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.generated.d.ts +79 -0
- package/dist/models.generated.d.ts.map +1 -0
- package/dist/models.generated.js +81 -0
- package/dist/models.generated.js.map +1 -0
- package/dist/models.js +449 -0
- package/dist/models.js.map +1 -0
- package/dist/node/provider-scope.d.ts +12 -0
- package/dist/node/provider-scope.d.ts.map +1 -0
- package/dist/node/provider-scope.js +34 -0
- package/dist/node/provider-scope.js.map +1 -0
- package/dist/oauth.d.ts +3 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +2 -0
- package/dist/oauth.js.map +1 -0
- package/dist/providers/alibaba-token-plan.d.ts +3 -0
- package/dist/providers/alibaba-token-plan.d.ts.map +1 -0
- package/dist/providers/alibaba-token-plan.js +15 -0
- package/dist/providers/alibaba-token-plan.js.map +1 -0
- package/dist/providers/alibaba-token-plan.models.d.ts +4 -0
- package/dist/providers/alibaba-token-plan.models.d.ts.map +1 -0
- package/dist/providers/alibaba-token-plan.models.js +6 -0
- package/dist/providers/alibaba-token-plan.models.js.map +1 -0
- package/dist/providers/all.d.ts +28 -0
- package/dist/providers/all.d.ts.map +1 -0
- package/dist/providers/all.js +162 -0
- package/dist/providers/all.js.map +1 -0
- package/dist/providers/amazon-bedrock.d.ts +3 -0
- package/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.js +85 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/amazon-bedrock.models.d.ts +4 -0
- package/dist/providers/amazon-bedrock.models.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.models.js +6 -0
- package/dist/providers/amazon-bedrock.models.js.map +1 -0
- package/dist/providers/ant-ling.d.ts +3 -0
- package/dist/providers/ant-ling.d.ts.map +1 -0
- package/dist/providers/ant-ling.js +15 -0
- package/dist/providers/ant-ling.js.map +1 -0
- package/dist/providers/ant-ling.models.d.ts +4 -0
- package/dist/providers/ant-ling.models.d.ts.map +1 -0
- package/dist/providers/ant-ling.models.js +6 -0
- package/dist/providers/ant-ling.models.js.map +1 -0
- package/dist/providers/anthropic.d.ts +7 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +50 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/anthropic.models.d.ts +4 -0
- package/dist/providers/anthropic.models.d.ts.map +1 -0
- package/dist/providers/anthropic.models.js +6 -0
- package/dist/providers/anthropic.models.js.map +1 -0
- package/dist/providers/azure-openai-responses.d.ts +3 -0
- package/dist/providers/azure-openai-responses.d.ts.map +1 -0
- package/dist/providers/azure-openai-responses.js +14 -0
- package/dist/providers/azure-openai-responses.js.map +1 -0
- package/dist/providers/azure-openai-responses.models.d.ts +4 -0
- package/dist/providers/azure-openai-responses.models.d.ts.map +1 -0
- package/dist/providers/azure-openai-responses.models.js +6 -0
- package/dist/providers/azure-openai-responses.models.js.map +1 -0
- package/dist/providers/cerebras.d.ts +3 -0
- package/dist/providers/cerebras.d.ts.map +1 -0
- package/dist/providers/cerebras.js +15 -0
- package/dist/providers/cerebras.js.map +1 -0
- package/dist/providers/cerebras.models.d.ts +4 -0
- package/dist/providers/cerebras.models.d.ts.map +1 -0
- package/dist/providers/cerebras.models.js +6 -0
- package/dist/providers/cerebras.models.js.map +1 -0
- package/dist/providers/cloudflare-ai-gateway.d.ts +3 -0
- package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -0
- package/dist/providers/cloudflare-ai-gateway.js +21 -0
- package/dist/providers/cloudflare-ai-gateway.js.map +1 -0
- package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -0
- package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -0
- package/dist/providers/cloudflare-ai-gateway.models.js +6 -0
- package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -0
- package/dist/providers/cloudflare-auth.d.ts +4 -0
- package/dist/providers/cloudflare-auth.d.ts.map +1 -0
- package/dist/providers/cloudflare-auth.js +81 -0
- package/dist/providers/cloudflare-auth.js.map +1 -0
- package/dist/providers/cloudflare-stream.d.ts +8 -0
- package/dist/providers/cloudflare-stream.d.ts.map +1 -0
- package/dist/providers/cloudflare-stream.js +21 -0
- package/dist/providers/cloudflare-stream.js.map +1 -0
- package/dist/providers/cloudflare-workers-ai.d.ts +3 -0
- package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -0
- package/dist/providers/cloudflare-workers-ai.js +15 -0
- package/dist/providers/cloudflare-workers-ai.js.map +1 -0
- package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -0
- package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -0
- package/dist/providers/cloudflare-workers-ai.models.js +6 -0
- package/dist/providers/cloudflare-workers-ai.models.js.map +1 -0
- package/dist/providers/data/.manifest.json +1 -0
- package/dist/providers/data/alibaba-token-plan.json +1 -0
- package/dist/providers/data/amazon-bedrock.json +1 -0
- package/dist/providers/data/ant-ling.json +1 -0
- package/dist/providers/data/anthropic.json +1 -0
- package/dist/providers/data/azure-openai-responses.json +1 -0
- package/dist/providers/data/cerebras.json +1 -0
- package/dist/providers/data/cloudflare-ai-gateway.json +1 -0
- package/dist/providers/data/cloudflare-workers-ai.json +1 -0
- package/dist/providers/data/deepseek.json +1 -0
- package/dist/providers/data/fireworks.json +1 -0
- package/dist/providers/data/github-copilot.json +1 -0
- package/dist/providers/data/google-vertex.json +1 -0
- package/dist/providers/data/google.json +1 -0
- package/dist/providers/data/groq.json +1 -0
- package/dist/providers/data/huggingface.json +1 -0
- package/dist/providers/data/kimi-coding.json +1 -0
- package/dist/providers/data/minimax-cn.json +1 -0
- package/dist/providers/data/minimax.json +1 -0
- package/dist/providers/data/mistral.json +1 -0
- package/dist/providers/data/moonshotai-cn.json +1 -0
- package/dist/providers/data/moonshotai.json +1 -0
- package/dist/providers/data/nvidia.json +1 -0
- package/dist/providers/data/openai-codex.json +1 -0
- package/dist/providers/data/openai.json +1 -0
- package/dist/providers/data/opencode-go.json +1 -0
- package/dist/providers/data/opencode.json +1 -0
- package/dist/providers/data/openrouter.json +1 -0
- package/dist/providers/data/qwen-token-plan-cn.json +1 -0
- package/dist/providers/data/qwen-token-plan.json +1 -0
- package/dist/providers/data/together.json +1 -0
- package/dist/providers/data/vercel-ai-gateway.json +1 -0
- package/dist/providers/data/xai.json +1 -0
- package/dist/providers/data/xiaomi-token-plan-ams.json +1 -0
- package/dist/providers/data/xiaomi-token-plan-cn.json +1 -0
- package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -0
- package/dist/providers/data/xiaomi.json +1 -0
- package/dist/providers/data/zai-coding-cn.json +1 -0
- package/dist/providers/data/zai.json +1 -0
- package/dist/providers/deepseek.d.ts +3 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +15 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/deepseek.models.d.ts +4 -0
- package/dist/providers/deepseek.models.d.ts.map +1 -0
- package/dist/providers/deepseek.models.js +6 -0
- package/dist/providers/deepseek.models.js.map +1 -0
- package/dist/providers/faux.d.ts +116 -0
- package/dist/providers/faux.d.ts.map +1 -0
- package/dist/providers/faux.js +466 -0
- package/dist/providers/faux.js.map +1 -0
- package/dist/providers/fireworks.d.ts +3 -0
- package/dist/providers/fireworks.d.ts.map +1 -0
- package/dist/providers/fireworks.js +19 -0
- package/dist/providers/fireworks.js.map +1 -0
- package/dist/providers/fireworks.models.d.ts +4 -0
- package/dist/providers/fireworks.models.d.ts.map +1 -0
- package/dist/providers/fireworks.models.js +6 -0
- package/dist/providers/fireworks.models.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +3 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +35 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/github-copilot.models.d.ts +4 -0
- package/dist/providers/github-copilot.models.d.ts.map +1 -0
- package/dist/providers/github-copilot.models.js +6 -0
- package/dist/providers/github-copilot.models.js.map +1 -0
- package/dist/providers/google-shared.d.ts +2 -0
- package/dist/providers/google-shared.d.ts.map +1 -0
- package/dist/providers/google-shared.js +2 -0
- package/dist/providers/google-shared.js.map +1 -0
- package/dist/providers/google-vertex.d.ts +7 -0
- package/dist/providers/google-vertex.d.ts.map +1 -0
- package/dist/providers/google-vertex.js +89 -0
- package/dist/providers/google-vertex.js.map +1 -0
- package/dist/providers/google-vertex.models.d.ts +4 -0
- package/dist/providers/google-vertex.models.d.ts.map +1 -0
- package/dist/providers/google-vertex.models.js +6 -0
- package/dist/providers/google-vertex.models.js.map +1 -0
- package/dist/providers/google.d.ts +7 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +18 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/google.models.d.ts +4 -0
- package/dist/providers/google.models.d.ts.map +1 -0
- package/dist/providers/google.models.js +6 -0
- package/dist/providers/google.models.js.map +1 -0
- package/dist/providers/groq.d.ts +3 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +15 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/groq.models.d.ts +4 -0
- package/dist/providers/groq.models.d.ts.map +1 -0
- package/dist/providers/groq.models.js +6 -0
- package/dist/providers/groq.models.js.map +1 -0
- package/dist/providers/huggingface.d.ts +3 -0
- package/dist/providers/huggingface.d.ts.map +1 -0
- package/dist/providers/huggingface.js +15 -0
- package/dist/providers/huggingface.js.map +1 -0
- package/dist/providers/huggingface.models.d.ts +4 -0
- package/dist/providers/huggingface.models.d.ts.map +1 -0
- package/dist/providers/huggingface.models.js +6 -0
- package/dist/providers/huggingface.models.js.map +1 -0
- package/dist/providers/images/register-builtins.d.ts +4 -0
- package/dist/providers/images/register-builtins.d.ts.map +1 -0
- package/dist/providers/images/register-builtins.js +34 -0
- package/dist/providers/images/register-builtins.js.map +1 -0
- package/dist/providers/kimi-coding.d.ts +3 -0
- package/dist/providers/kimi-coding.d.ts.map +1 -0
- package/dist/providers/kimi-coding.js +23 -0
- package/dist/providers/kimi-coding.js.map +1 -0
- package/dist/providers/kimi-coding.models.d.ts +4 -0
- package/dist/providers/kimi-coding.models.d.ts.map +1 -0
- package/dist/providers/kimi-coding.models.js +6 -0
- package/dist/providers/kimi-coding.models.js.map +1 -0
- package/dist/providers/minimax-cn.d.ts +3 -0
- package/dist/providers/minimax-cn.d.ts.map +1 -0
- package/dist/providers/minimax-cn.js +15 -0
- package/dist/providers/minimax-cn.js.map +1 -0
- package/dist/providers/minimax-cn.models.d.ts +4 -0
- package/dist/providers/minimax-cn.models.d.ts.map +1 -0
- package/dist/providers/minimax-cn.models.js +6 -0
- package/dist/providers/minimax-cn.models.js.map +1 -0
- package/dist/providers/minimax.d.ts +3 -0
- package/dist/providers/minimax.d.ts.map +1 -0
- package/dist/providers/minimax.js +15 -0
- package/dist/providers/minimax.js.map +1 -0
- package/dist/providers/minimax.models.d.ts +4 -0
- package/dist/providers/minimax.models.d.ts.map +1 -0
- package/dist/providers/minimax.models.js +6 -0
- package/dist/providers/minimax.models.js.map +1 -0
- package/dist/providers/mistral.d.ts +3 -0
- package/dist/providers/mistral.d.ts.map +1 -0
- package/dist/providers/mistral.js +15 -0
- package/dist/providers/mistral.js.map +1 -0
- package/dist/providers/mistral.models.d.ts +4 -0
- package/dist/providers/mistral.models.d.ts.map +1 -0
- package/dist/providers/mistral.models.js +6 -0
- package/dist/providers/mistral.models.js.map +1 -0
- package/dist/providers/moonshotai-cn.d.ts +3 -0
- package/dist/providers/moonshotai-cn.d.ts.map +1 -0
- package/dist/providers/moonshotai-cn.js +15 -0
- package/dist/providers/moonshotai-cn.js.map +1 -0
- package/dist/providers/moonshotai-cn.models.d.ts +4 -0
- package/dist/providers/moonshotai-cn.models.d.ts.map +1 -0
- package/dist/providers/moonshotai-cn.models.js +6 -0
- package/dist/providers/moonshotai-cn.models.js.map +1 -0
- package/dist/providers/moonshotai.d.ts +3 -0
- package/dist/providers/moonshotai.d.ts.map +1 -0
- package/dist/providers/moonshotai.js +15 -0
- package/dist/providers/moonshotai.js.map +1 -0
- package/dist/providers/moonshotai.models.d.ts +4 -0
- package/dist/providers/moonshotai.models.d.ts.map +1 -0
- package/dist/providers/moonshotai.models.js +6 -0
- package/dist/providers/moonshotai.models.js.map +1 -0
- package/dist/providers/nvidia.d.ts +3 -0
- package/dist/providers/nvidia.d.ts.map +1 -0
- package/dist/providers/nvidia.js +15 -0
- package/dist/providers/nvidia.js.map +1 -0
- package/dist/providers/nvidia.models.d.ts +4 -0
- package/dist/providers/nvidia.models.d.ts.map +1 -0
- package/dist/providers/nvidia.models.js +6 -0
- package/dist/providers/nvidia.models.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +3 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +18 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/providers/openai-codex.models.d.ts +4 -0
- package/dist/providers/openai-codex.models.d.ts.map +1 -0
- package/dist/providers/openai-codex.models.js +6 -0
- package/dist/providers/openai-codex.models.js.map +1 -0
- package/dist/providers/openai-completions.d.ts +3 -0
- package/dist/providers/openai-completions.d.ts.map +1 -0
- package/dist/providers/openai-completions.js +2 -0
- package/dist/providers/openai-completions.js.map +1 -0
- package/dist/providers/openai-responses-shared.d.ts +2 -0
- package/dist/providers/openai-responses-shared.d.ts.map +1 -0
- package/dist/providers/openai-responses-shared.js +2 -0
- package/dist/providers/openai-responses-shared.js.map +1 -0
- package/dist/providers/openai-responses.d.ts +3 -0
- package/dist/providers/openai-responses.d.ts.map +1 -0
- package/dist/providers/openai-responses.js +2 -0
- package/dist/providers/openai-responses.js.map +1 -0
- package/dist/providers/openai.d.ts +3 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +15 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openai.models.d.ts +4 -0
- package/dist/providers/openai.models.d.ts.map +1 -0
- package/dist/providers/openai.models.js +6 -0
- package/dist/providers/openai.models.js.map +1 -0
- package/dist/providers/opencode-go.d.ts +3 -0
- package/dist/providers/opencode-go.d.ts.map +1 -0
- package/dist/providers/opencode-go.js +20 -0
- package/dist/providers/opencode-go.js.map +1 -0
- package/dist/providers/opencode-go.models.d.ts +4 -0
- package/dist/providers/opencode-go.models.d.ts.map +1 -0
- package/dist/providers/opencode-go.models.js +6 -0
- package/dist/providers/opencode-go.models.js.map +1 -0
- package/dist/providers/opencode.d.ts +3 -0
- package/dist/providers/opencode.d.ts.map +1 -0
- package/dist/providers/opencode.js +22 -0
- package/dist/providers/opencode.js.map +1 -0
- package/dist/providers/opencode.models.d.ts +4 -0
- package/dist/providers/opencode.models.d.ts.map +1 -0
- package/dist/providers/opencode.models.js +6 -0
- package/dist/providers/opencode.models.js.map +1 -0
- package/dist/providers/openrouter-images.d.ts +3 -0
- package/dist/providers/openrouter-images.d.ts.map +1 -0
- package/dist/providers/openrouter-images.js +22 -0
- package/dist/providers/openrouter-images.js.map +1 -0
- package/dist/providers/openrouter.d.ts +3 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +23 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/openrouter.models.d.ts +4 -0
- package/dist/providers/openrouter.models.d.ts.map +1 -0
- package/dist/providers/openrouter.models.js +6 -0
- package/dist/providers/openrouter.models.js.map +1 -0
- package/dist/providers/qwen-token-plan-cn.d.ts +3 -0
- package/dist/providers/qwen-token-plan-cn.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan-cn.js +15 -0
- package/dist/providers/qwen-token-plan-cn.js.map +1 -0
- package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -0
- package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan-cn.models.js +6 -0
- package/dist/providers/qwen-token-plan-cn.models.js.map +1 -0
- package/dist/providers/qwen-token-plan.d.ts +3 -0
- package/dist/providers/qwen-token-plan.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan.js +15 -0
- package/dist/providers/qwen-token-plan.js.map +1 -0
- package/dist/providers/qwen-token-plan.models.d.ts +4 -0
- package/dist/providers/qwen-token-plan.models.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan.models.js +6 -0
- package/dist/providers/qwen-token-plan.models.js.map +1 -0
- package/dist/providers/radius-config.d.ts +26 -0
- package/dist/providers/radius-config.d.ts.map +1 -0
- package/dist/providers/radius-config.js +63 -0
- package/dist/providers/radius-config.js.map +1 -0
- package/dist/providers/radius.d.ts +9 -0
- package/dist/providers/radius.d.ts.map +1 -0
- package/dist/providers/radius.js +54 -0
- package/dist/providers/radius.js.map +1 -0
- package/dist/providers/register-builtins.d.ts +2 -0
- package/dist/providers/register-builtins.d.ts.map +1 -0
- package/dist/providers/register-builtins.js +2 -0
- package/dist/providers/register-builtins.js.map +1 -0
- package/dist/providers/together.d.ts +3 -0
- package/dist/providers/together.d.ts.map +1 -0
- package/dist/providers/together.js +15 -0
- package/dist/providers/together.js.map +1 -0
- package/dist/providers/together.models.d.ts +4 -0
- package/dist/providers/together.models.d.ts.map +1 -0
- package/dist/providers/together.models.js +6 -0
- package/dist/providers/together.models.js.map +1 -0
- package/dist/providers/vercel-ai-gateway.d.ts +3 -0
- package/dist/providers/vercel-ai-gateway.d.ts.map +1 -0
- package/dist/providers/vercel-ai-gateway.js +15 -0
- package/dist/providers/vercel-ai-gateway.js.map +1 -0
- package/dist/providers/vercel-ai-gateway.models.d.ts +4 -0
- package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -0
- package/dist/providers/vercel-ai-gateway.models.js +6 -0
- package/dist/providers/vercel-ai-gateway.models.js.map +1 -0
- package/dist/providers/xai.d.ts +3 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +27 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/providers/xai.models.d.ts +4 -0
- package/dist/providers/xai.models.d.ts.map +1 -0
- package/dist/providers/xai.models.js +6 -0
- package/dist/providers/xai.models.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-ams.d.ts +3 -0
- package/dist/providers/xiaomi-token-plan-ams.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-ams.js +15 -0
- package/dist/providers/xiaomi-token-plan-ams.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -0
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-ams.models.js +6 -0
- package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-cn.d.ts +3 -0
- package/dist/providers/xiaomi-token-plan-cn.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-cn.js +15 -0
- package/dist/providers/xiaomi-token-plan-cn.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -0
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-cn.models.js +6 -0
- package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-sgp.d.ts +3 -0
- package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-sgp.js +15 -0
- package/dist/providers/xiaomi-token-plan-sgp.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -0
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-sgp.models.js +6 -0
- package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -0
- package/dist/providers/xiaomi.d.ts +3 -0
- package/dist/providers/xiaomi.d.ts.map +1 -0
- package/dist/providers/xiaomi.js +15 -0
- package/dist/providers/xiaomi.js.map +1 -0
- package/dist/providers/xiaomi.models.d.ts +4 -0
- package/dist/providers/xiaomi.models.d.ts.map +1 -0
- package/dist/providers/xiaomi.models.js +6 -0
- package/dist/providers/xiaomi.models.js.map +1 -0
- package/dist/providers/zai-coding-cn.d.ts +3 -0
- package/dist/providers/zai-coding-cn.d.ts.map +1 -0
- package/dist/providers/zai-coding-cn.js +15 -0
- package/dist/providers/zai-coding-cn.js.map +1 -0
- package/dist/providers/zai-coding-cn.models.d.ts +4 -0
- package/dist/providers/zai-coding-cn.models.d.ts.map +1 -0
- package/dist/providers/zai-coding-cn.models.js +6 -0
- package/dist/providers/zai-coding-cn.models.js.map +1 -0
- package/dist/providers/zai.d.ts +3 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +15 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/providers/zai.models.d.ts +4 -0
- package/dist/providers/zai.models.d.ts.map +1 -0
- package/dist/providers/zai.models.js +6 -0
- package/dist/providers/zai.models.js.map +1 -0
- package/dist/session-resources.d.ts +4 -0
- package/dist/session-resources.d.ts.map +1 -0
- package/dist/session-resources.js +22 -0
- package/dist/session-resources.js.map +1 -0
- package/dist/stream.d.ts +2 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +2 -0
- package/dist/stream.js.map +1 -0
- package/dist/tool-call-middleware/context-transformer.d.ts +22 -0
- package/dist/tool-call-middleware/context-transformer.d.ts.map +1 -0
- package/dist/tool-call-middleware/context-transformer.js +182 -0
- package/dist/tool-call-middleware/context-transformer.js.map +1 -0
- package/dist/tool-call-middleware/index.d.ts +14 -0
- package/dist/tool-call-middleware/index.d.ts.map +1 -0
- package/dist/tool-call-middleware/index.js +37 -0
- package/dist/tool-call-middleware/index.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.d.ts +9 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.js +92 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/format.d.ts +7 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/format.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/format.js +54 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/format.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/index.d.ts +4 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/index.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/index.js +4 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/index.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.d.ts +7 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.js +16 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.d.ts +19 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.js +8 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.d.ts +20 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.js +79 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.d.ts +14 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.js +42 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.d.ts +38 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.js +210 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/parse.d.ts +6 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/parse.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/parse.js +49 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/parse.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.d.ts +9 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.js +231 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.d.ts +38 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.js +84 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.d.ts +13 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.js +107 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream.d.ts +7 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream.js +214 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.d.ts +4 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.js +17 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.d.ts +5 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.js +34 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/coerce-parameters.d.ts +15 -0
- package/dist/tool-call-middleware/protocols/antml/coerce-parameters.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/coerce-parameters.js +198 -0
- package/dist/tool-call-middleware/protocols/antml/coerce-parameters.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/config.d.ts +3 -0
- package/dist/tool-call-middleware/protocols/antml/config.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/config.js +8 -0
- package/dist/tool-call-middleware/protocols/antml/config.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/format.d.ts +6 -0
- package/dist/tool-call-middleware/protocols/antml/format.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/format.js +33 -0
- package/dist/tool-call-middleware/protocols/antml/format.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/index.d.ts +7 -0
- package/dist/tool-call-middleware/protocols/antml/index.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/index.js +7 -0
- package/dist/tool-call-middleware/protocols/antml/index.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/parse.d.ts +4 -0
- package/dist/tool-call-middleware/protocols/antml/parse.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/parse.js +6 -0
- package/dist/tool-call-middleware/protocols/antml/parse.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/recovery-stream.d.ts +5 -0
- package/dist/tool-call-middleware/protocols/antml/recovery-stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/recovery-stream.js +6 -0
- package/dist/tool-call-middleware/protocols/antml/recovery-stream.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/repair.d.ts +12 -0
- package/dist/tool-call-middleware/protocols/antml/repair.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/repair.js +46 -0
- package/dist/tool-call-middleware/protocols/antml/repair.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/stream.d.ts +4 -0
- package/dist/tool-call-middleware/protocols/antml/stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/stream.js +6 -0
- package/dist/tool-call-middleware/protocols/antml/stream.js.map +1 -0
- package/dist/tool-call-middleware/protocols/gemma4.d.ts +28 -0
- package/dist/tool-call-middleware/protocols/gemma4.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/gemma4.js +663 -0
- package/dist/tool-call-middleware/protocols/gemma4.js.map +1 -0
- package/dist/tool-call-middleware/protocols/hermes.d.ts +21 -0
- package/dist/tool-call-middleware/protocols/hermes.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/hermes.js +69 -0
- package/dist/tool-call-middleware/protocols/hermes.js.map +1 -0
- package/dist/tool-call-middleware/protocols/json-mix.d.ts +12 -0
- package/dist/tool-call-middleware/protocols/json-mix.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/json-mix.js +704 -0
- package/dist/tool-call-middleware/protocols/json-mix.js.map +1 -0
- package/dist/tool-call-middleware/protocols/morph-xml.d.ts +15 -0
- package/dist/tool-call-middleware/protocols/morph-xml.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/morph-xml.js +957 -0
- package/dist/tool-call-middleware/protocols/morph-xml.js.map +1 -0
- package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.d.ts +14 -0
- package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.js +54 -0
- package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.js.map +1 -0
- package/dist/tool-call-middleware/protocols/yaml-xml.d.ts +8 -0
- package/dist/tool-call-middleware/protocols/yaml-xml.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/yaml-xml.js +328 -0
- package/dist/tool-call-middleware/protocols/yaml-xml.js.map +1 -0
- package/dist/tool-call-middleware/recovery-code-mask.d.ts +19 -0
- package/dist/tool-call-middleware/recovery-code-mask.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-code-mask.js +185 -0
- package/dist/tool-call-middleware/recovery-code-mask.js.map +1 -0
- package/dist/tool-call-middleware/recovery-content-lifecycle.d.ts +11 -0
- package/dist/tool-call-middleware/recovery-content-lifecycle.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-content-lifecycle.js +24 -0
- package/dist/tool-call-middleware/recovery-content-lifecycle.js.map +1 -0
- package/dist/tool-call-middleware/recovery-diagnostics.d.ts +4 -0
- package/dist/tool-call-middleware/recovery-diagnostics.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-diagnostics.js +13 -0
- package/dist/tool-call-middleware/recovery-diagnostics.js.map +1 -0
- package/dist/tool-call-middleware/recovery-event-stream.d.ts +15 -0
- package/dist/tool-call-middleware/recovery-event-stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-event-stream.js +37 -0
- package/dist/tool-call-middleware/recovery-event-stream.js.map +1 -0
- package/dist/tool-call-middleware/recovery-message-snapshot.d.ts +4 -0
- package/dist/tool-call-middleware/recovery-message-snapshot.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-message-snapshot.js +61 -0
- package/dist/tool-call-middleware/recovery-message-snapshot.js.map +1 -0
- package/dist/tool-call-middleware/recovery-native-projection.d.ts +29 -0
- package/dist/tool-call-middleware/recovery-native-projection.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-native-projection.js +148 -0
- package/dist/tool-call-middleware/recovery-native-projection.js.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-failure.d.ts +5 -0
- package/dist/tool-call-middleware/recovery-stream-failure.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-failure.js +36 -0
- package/dist/tool-call-middleware/recovery-stream-failure.js.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-terminal.d.ts +15 -0
- package/dist/tool-call-middleware/recovery-stream-terminal.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-terminal.js +88 -0
- package/dist/tool-call-middleware/recovery-stream-terminal.js.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-wrapper.d.ts +3 -0
- package/dist/tool-call-middleware/recovery-stream-wrapper.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-wrapper.js +233 -0
- package/dist/tool-call-middleware/recovery-stream-wrapper.js.map +1 -0
- package/dist/tool-call-middleware/recovery-text-projection.d.ts +23 -0
- package/dist/tool-call-middleware/recovery-text-projection.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-text-projection.js +77 -0
- package/dist/tool-call-middleware/recovery-text-projection.js.map +1 -0
- package/dist/tool-call-middleware/stream-message-metadata.d.ts +5 -0
- package/dist/tool-call-middleware/stream-message-metadata.d.ts.map +1 -0
- package/dist/tool-call-middleware/stream-message-metadata.js +63 -0
- package/dist/tool-call-middleware/stream-message-metadata.js.map +1 -0
- package/dist/tool-call-middleware/stream-thinking-projection.d.ts +13 -0
- package/dist/tool-call-middleware/stream-thinking-projection.d.ts.map +1 -0
- package/dist/tool-call-middleware/stream-thinking-projection.js +52 -0
- package/dist/tool-call-middleware/stream-thinking-projection.js.map +1 -0
- package/dist/tool-call-middleware/stream-wrapper-shared.d.ts +41 -0
- package/dist/tool-call-middleware/stream-wrapper-shared.d.ts.map +1 -0
- package/dist/tool-call-middleware/stream-wrapper-shared.js +209 -0
- package/dist/tool-call-middleware/stream-wrapper-shared.js.map +1 -0
- package/dist/tool-call-middleware/stream-wrapper.d.ts +4 -0
- package/dist/tool-call-middleware/stream-wrapper.d.ts.map +1 -0
- package/dist/tool-call-middleware/stream-wrapper.js +121 -0
- package/dist/tool-call-middleware/stream-wrapper.js.map +1 -0
- package/dist/tool-call-middleware/types.d.ts +109 -0
- package/dist/tool-call-middleware/types.d.ts.map +1 -0
- package/dist/tool-call-middleware/types.js +2 -0
- package/dist/tool-call-middleware/types.js.map +1 -0
- package/dist/types.d.ts +762 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/abort-signals.d.ts +6 -0
- package/dist/utils/abort-signals.d.ts.map +1 -0
- package/dist/utils/abort-signals.js +34 -0
- package/dist/utils/abort-signals.js.map +1 -0
- package/dist/utils/deferred-tools.d.ts +9 -0
- package/dist/utils/deferred-tools.d.ts.map +1 -0
- package/dist/utils/deferred-tools.js +36 -0
- package/dist/utils/deferred-tools.js.map +1 -0
- package/dist/utils/diagnostics.d.ts +19 -0
- package/dist/utils/diagnostics.d.ts.map +1 -0
- package/dist/utils/diagnostics.js +25 -0
- package/dist/utils/diagnostics.js.map +1 -0
- package/dist/utils/error-body.d.ts +25 -0
- package/dist/utils/error-body.d.ts.map +1 -0
- package/dist/utils/error-body.js +114 -0
- package/dist/utils/error-body.js.map +1 -0
- package/dist/utils/estimate.d.ts +17 -0
- package/dist/utils/estimate.d.ts.map +1 -0
- package/dist/utils/estimate.js +119 -0
- package/dist/utils/estimate.js.map +1 -0
- package/dist/utils/event-stream.d.ts +24 -0
- package/dist/utils/event-stream.d.ts.map +1 -0
- package/dist/utils/event-stream.js +117 -0
- package/dist/utils/event-stream.js.map +1 -0
- package/dist/utils/hash.d.ts +3 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +14 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/headers.d.ts +4 -0
- package/dist/utils/headers.d.ts.map +1 -0
- package/dist/utils/headers.js +18 -0
- package/dist/utils/headers.js.map +1 -0
- package/dist/utils/json-parse.d.ts +16 -0
- package/dist/utils/json-parse.d.ts.map +1 -0
- package/dist/utils/json-parse.js +113 -0
- package/dist/utils/json-parse.js.map +1 -0
- package/dist/utils/node-http-proxy.d.ts +4 -0
- package/dist/utils/node-http-proxy.d.ts.map +1 -0
- package/dist/utils/node-http-proxy.js +92 -0
- package/dist/utils/node-http-proxy.js.map +1 -0
- package/dist/utils/openai-codex-auth.d.ts +11 -0
- package/dist/utils/openai-codex-auth.d.ts.map +1 -0
- package/dist/utils/openai-codex-auth.js +30 -0
- package/dist/utils/openai-codex-auth.js.map +1 -0
- package/dist/utils/overflow.d.ts +55 -0
- package/dist/utils/overflow.d.ts.map +1 -0
- package/dist/utils/overflow.js +155 -0
- package/dist/utils/overflow.js.map +1 -0
- package/dist/utils/provider-env.d.ts +7 -0
- package/dist/utils/provider-env.d.ts.map +1 -0
- package/dist/utils/provider-env.js +44 -0
- package/dist/utils/provider-env.js.map +1 -0
- package/dist/utils/provider-retry.d.ts +16 -0
- package/dist/utils/provider-retry.d.ts.map +1 -0
- package/dist/utils/provider-retry.js +94 -0
- package/dist/utils/provider-retry.js.map +1 -0
- package/dist/utils/retry.d.ts +53 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +177 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/sanitize-unicode.d.ts +22 -0
- package/dist/utils/sanitize-unicode.d.ts.map +1 -0
- package/dist/utils/sanitize-unicode.js +26 -0
- package/dist/utils/sanitize-unicode.js.map +1 -0
- package/dist/utils/server-fallback-receipt.d.ts +30 -0
- package/dist/utils/server-fallback-receipt.d.ts.map +1 -0
- package/dist/utils/server-fallback-receipt.js +70 -0
- package/dist/utils/server-fallback-receipt.js.map +1 -0
- package/dist/utils/stop-details.d.ts +4 -0
- package/dist/utils/stop-details.d.ts.map +1 -0
- package/dist/utils/stop-details.js +6 -0
- package/dist/utils/stop-details.js.map +1 -0
- package/dist/utils/text.d.ts +6 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +10 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/tool-choice-fallback.d.ts +5 -0
- package/dist/utils/tool-choice-fallback.d.ts.map +1 -0
- package/dist/utils/tool-choice-fallback.js +41 -0
- package/dist/utils/tool-choice-fallback.js.map +1 -0
- package/dist/utils/tool-pair-repair.d.ts +5 -0
- package/dist/utils/tool-pair-repair.d.ts.map +1 -0
- package/dist/utils/tool-pair-repair.js +70 -0
- package/dist/utils/tool-pair-repair.js.map +1 -0
- package/dist/utils/tool-schema-compat.d.ts +19 -0
- package/dist/utils/tool-schema-compat.d.ts.map +1 -0
- package/dist/utils/tool-schema-compat.js +215 -0
- package/dist/utils/tool-schema-compat.js.map +1 -0
- package/dist/utils/typebox-helpers.d.ts +17 -0
- package/dist/utils/typebox-helpers.d.ts.map +1 -0
- package/dist/utils/typebox-helpers.js +21 -0
- package/dist/utils/typebox-helpers.js.map +1 -0
- package/dist/utils/uuid.d.ts +3 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +50 -0
- package/dist/utils/uuid.js.map +1 -0
- package/dist/utils/validation.d.ts +18 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +269 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { isVideoMimeType } from "../types.js";
|
|
2
|
+
const NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)";
|
|
3
|
+
const NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)";
|
|
4
|
+
const NO_VIDEO_USER_PLACEHOLDER = "(video omitted: model does not support video input)";
|
|
5
|
+
const NO_VIDEO_TOOL_PLACEHOLDER = "(tool video omitted: model does not support video input)";
|
|
6
|
+
function replaceMediaWithPlaceholder(content, placeholder, matches) {
|
|
7
|
+
if (!content.some((block) => block.type === "image" && matches(block))) {
|
|
8
|
+
return content;
|
|
9
|
+
}
|
|
10
|
+
const result = [];
|
|
11
|
+
let previousWasPlaceholder = false;
|
|
12
|
+
for (const block of content) {
|
|
13
|
+
if (block.type === "image" && matches(block)) {
|
|
14
|
+
if (!previousWasPlaceholder) {
|
|
15
|
+
result.push({ type: "text", text: placeholder });
|
|
16
|
+
}
|
|
17
|
+
previousWasPlaceholder = true;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
result.push(block);
|
|
21
|
+
previousWasPlaceholder = block.type === "text" && block.text === placeholder;
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
function replaceImagesWithPlaceholder(content, placeholder) {
|
|
26
|
+
const result = [];
|
|
27
|
+
let previousWasPlaceholder = false;
|
|
28
|
+
for (const block of content) {
|
|
29
|
+
if (block.type === "image") {
|
|
30
|
+
if (!previousWasPlaceholder) {
|
|
31
|
+
result.push({ type: "text", text: placeholder });
|
|
32
|
+
}
|
|
33
|
+
previousWasPlaceholder = true;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
result.push(block);
|
|
37
|
+
previousWasPlaceholder = block.text === placeholder;
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
function downgradeUnsupportedImages(messages, model) {
|
|
42
|
+
const supportsImages = model.input.includes("image");
|
|
43
|
+
const supportsVideo = model.input.includes("video");
|
|
44
|
+
if (supportsImages && supportsVideo) {
|
|
45
|
+
return messages;
|
|
46
|
+
}
|
|
47
|
+
return messages.map((msg) => {
|
|
48
|
+
if (msg.role === "user" && Array.isArray(msg.content)) {
|
|
49
|
+
let content = msg.content;
|
|
50
|
+
// Video payloads ride ImageContent blocks; strip them first for models
|
|
51
|
+
// without the "video" modality so they never hit an incompatible wire.
|
|
52
|
+
if (!supportsVideo) {
|
|
53
|
+
content = replaceMediaWithPlaceholder(content, NO_VIDEO_USER_PLACEHOLDER, (b) => isVideoMimeType(b.mimeType));
|
|
54
|
+
}
|
|
55
|
+
if (!supportsImages) {
|
|
56
|
+
content = replaceImagesWithPlaceholder(content, NON_VISION_USER_IMAGE_PLACEHOLDER);
|
|
57
|
+
}
|
|
58
|
+
return { ...msg, content };
|
|
59
|
+
}
|
|
60
|
+
if (msg.role === "toolResult") {
|
|
61
|
+
let content = msg.content;
|
|
62
|
+
if (!supportsVideo) {
|
|
63
|
+
content = replaceMediaWithPlaceholder(content, NO_VIDEO_TOOL_PLACEHOLDER, (b) => isVideoMimeType(b.mimeType));
|
|
64
|
+
}
|
|
65
|
+
if (!supportsImages) {
|
|
66
|
+
content = replaceImagesWithPlaceholder(content, NON_VISION_TOOL_IMAGE_PLACEHOLDER);
|
|
67
|
+
}
|
|
68
|
+
return { ...msg, content };
|
|
69
|
+
}
|
|
70
|
+
return msg;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Normalize tool call ID for cross-provider compatibility.
|
|
75
|
+
* OpenAI Responses API generates IDs that are 450+ chars with special characters like `|`.
|
|
76
|
+
* Anthropic APIs require IDs matching ^[a-zA-Z0-9_-]+$ (max 64 chars).
|
|
77
|
+
*/
|
|
78
|
+
export function transformMessages(messages, model, normalizeToolCallId, options = {}) {
|
|
79
|
+
// Build a map of original tool call IDs to normalized IDs
|
|
80
|
+
const toolCallIdMap = new Map();
|
|
81
|
+
// Normalize null/undefined content from untyped callers (custom tools, hand-built
|
|
82
|
+
// histories, old session files) so downstream code can rely on the type contract.
|
|
83
|
+
const normalizedMessages = messages.map((msg) => (msg.content == null ? { ...msg, content: [] } : msg));
|
|
84
|
+
const imageAwareMessages = downgradeUnsupportedImages(normalizedMessages, model);
|
|
85
|
+
const preserveThinking = options.preserveThinking ?? true;
|
|
86
|
+
const preserveTextSignatures = options.preserveTextSignatures ?? false;
|
|
87
|
+
const preserveUnsignedThinking = options.preserveUnsignedThinking ?? false;
|
|
88
|
+
// First pass: transform messages (unsupported image downgrade, thinking blocks, tool call ID normalization)
|
|
89
|
+
const transformed = imageAwareMessages.map((msg) => {
|
|
90
|
+
// User messages pass through unchanged
|
|
91
|
+
if (msg.role === "user") {
|
|
92
|
+
return msg;
|
|
93
|
+
}
|
|
94
|
+
// Handle toolResult messages - normalize toolCallId if we have a mapping
|
|
95
|
+
if (msg.role === "toolResult") {
|
|
96
|
+
const normalizedId = toolCallIdMap.get(msg.toolCallId);
|
|
97
|
+
if (normalizedId && normalizedId !== msg.toolCallId) {
|
|
98
|
+
return { ...msg, toolCallId: normalizedId };
|
|
99
|
+
}
|
|
100
|
+
return msg;
|
|
101
|
+
}
|
|
102
|
+
// Assistant messages need transformation check
|
|
103
|
+
if (msg.role === "assistant") {
|
|
104
|
+
const assistantMsg = msg;
|
|
105
|
+
const isSameModel = assistantMsg.provider === model.provider &&
|
|
106
|
+
assistantMsg.api === model.api &&
|
|
107
|
+
assistantMsg.model === model.id;
|
|
108
|
+
const hasToolCalls = assistantMsg.content.some((block) => block.type === "toolCall");
|
|
109
|
+
const preserveProviderState = preserveThinking || hasToolCalls;
|
|
110
|
+
const transformedContent = assistantMsg.content.flatMap((block) => {
|
|
111
|
+
if (block.type === "thinking") {
|
|
112
|
+
// Redacted thinking is opaque encrypted content, only valid for the same model.
|
|
113
|
+
// Drop it for cross-model to avoid API errors.
|
|
114
|
+
if (block.redacted) {
|
|
115
|
+
return isSameModel && preserveProviderState ? { ...block } : [];
|
|
116
|
+
}
|
|
117
|
+
const hasUsableSignature = typeof block.thinkingSignature === "string" && block.thinkingSignature.trim().length > 0;
|
|
118
|
+
// For same model: keep signed thinking only while replaying provider state.
|
|
119
|
+
// Empty signed blocks are opaque compatibility state, not visible reasoning.
|
|
120
|
+
if (isSameModel && hasUsableSignature && (preserveProviderState || block.thinking.trim() === "")) {
|
|
121
|
+
return { ...block };
|
|
122
|
+
}
|
|
123
|
+
// Skip empty thinking blocks, convert others to plain text
|
|
124
|
+
if (!block.thinking || block.thinking.trim() === "")
|
|
125
|
+
return [];
|
|
126
|
+
if (isSameModel) {
|
|
127
|
+
return preserveProviderState || (preserveUnsignedThinking && !hasUsableSignature) ? { ...block } : [];
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
type: "text",
|
|
131
|
+
text: block.thinking,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (block.type === "text") {
|
|
135
|
+
if (isSameModel && (preserveProviderState || preserveTextSignatures))
|
|
136
|
+
return { ...block };
|
|
137
|
+
return {
|
|
138
|
+
type: "text",
|
|
139
|
+
text: block.text,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
if (block.type === "toolCall") {
|
|
143
|
+
const toolCall = block;
|
|
144
|
+
let normalizedToolCall = { ...toolCall };
|
|
145
|
+
if ((!isSameModel || !preserveProviderState) && toolCall.thoughtSignature) {
|
|
146
|
+
delete normalizedToolCall.thoughtSignature;
|
|
147
|
+
}
|
|
148
|
+
if (!isSameModel && normalizeToolCallId) {
|
|
149
|
+
const normalizedId = normalizeToolCallId(toolCall.id, model, assistantMsg);
|
|
150
|
+
if (normalizedId !== toolCall.id) {
|
|
151
|
+
toolCallIdMap.set(toolCall.id, normalizedId);
|
|
152
|
+
normalizedToolCall = { ...normalizedToolCall, id: normalizedId };
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return normalizedToolCall;
|
|
156
|
+
}
|
|
157
|
+
return block;
|
|
158
|
+
});
|
|
159
|
+
return {
|
|
160
|
+
...assistantMsg,
|
|
161
|
+
content: transformedContent,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
return msg;
|
|
165
|
+
});
|
|
166
|
+
// Second pass: pair every replayable tool call with the earliest unconsumed
|
|
167
|
+
// result after its declaring assistant. Results are emitted adjacent to their
|
|
168
|
+
// calls because Anthropic requires that ordering. A reused ID starts a new
|
|
169
|
+
// pairing window, so a later result cannot repair an earlier call.
|
|
170
|
+
const result = [];
|
|
171
|
+
const toolResultsById = new Map();
|
|
172
|
+
const nextToolCallIndexById = new Map();
|
|
173
|
+
// Tool calls declared only by assistants the emit loop drops (errored/aborted).
|
|
174
|
+
// Their results must not be emitted either: a strict provider rejects a tool
|
|
175
|
+
// message whose tool_call_id no assistant in the request declares.
|
|
176
|
+
const droppedCallIds = new Set();
|
|
177
|
+
for (let sourceIndex = 0; sourceIndex < transformed.length; sourceIndex++) {
|
|
178
|
+
const message = transformed[sourceIndex];
|
|
179
|
+
if (message.role === "toolResult") {
|
|
180
|
+
const entries = toolResultsById.get(message.toolCallId) ?? [];
|
|
181
|
+
entries.push({ message, sourceIndex, consumed: false });
|
|
182
|
+
toolResultsById.set(message.toolCallId, entries);
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (message.role !== "assistant") {
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
if (message.stopReason === "error" || message.stopReason === "aborted") {
|
|
189
|
+
for (const block of message.content) {
|
|
190
|
+
if (block.type === "toolCall")
|
|
191
|
+
droppedCallIds.add(block.id);
|
|
192
|
+
}
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
for (const block of message.content) {
|
|
196
|
+
if (block.type !== "toolCall")
|
|
197
|
+
continue;
|
|
198
|
+
const indexes = nextToolCallIndexById.get(block.id) ?? [];
|
|
199
|
+
indexes.push(sourceIndex);
|
|
200
|
+
nextToolCallIndexById.set(block.id, indexes);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
for (let sourceIndex = 0; sourceIndex < transformed.length; sourceIndex++) {
|
|
204
|
+
const message = transformed[sourceIndex];
|
|
205
|
+
if (message.role === "toolResult") {
|
|
206
|
+
const entry = toolResultsById
|
|
207
|
+
.get(message.toolCallId)
|
|
208
|
+
?.find((candidate) => candidate.sourceIndex === sourceIndex);
|
|
209
|
+
if (!entry?.consumed) {
|
|
210
|
+
// Skip results whose call was declared only by a dropped
|
|
211
|
+
// (errored/aborted) assistant. An id re-declared by a kept assistant
|
|
212
|
+
// still pairs through the normal windows, so keep those results.
|
|
213
|
+
if (!droppedCallIds.has(message.toolCallId) || nextToolCallIndexById.has(message.toolCallId)) {
|
|
214
|
+
result.push(message);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (message.role !== "assistant") {
|
|
220
|
+
result.push(message);
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
// Skip errored/aborted assistant messages entirely. These incomplete turns
|
|
224
|
+
// must not be revived merely because a matching result appears later.
|
|
225
|
+
if (message.stopReason === "error" || message.stopReason === "aborted")
|
|
226
|
+
continue;
|
|
227
|
+
result.push(message);
|
|
228
|
+
for (const block of message.content) {
|
|
229
|
+
if (block.type !== "toolCall")
|
|
230
|
+
continue;
|
|
231
|
+
const laterDeclarations = nextToolCallIndexById.get(block.id) ?? [];
|
|
232
|
+
const nextDeclarationIndex = laterDeclarations.find((index) => index > sourceIndex) ?? Infinity;
|
|
233
|
+
const matchedResult = toolResultsById
|
|
234
|
+
.get(block.id)
|
|
235
|
+
?.find((candidate) => !candidate.consumed &&
|
|
236
|
+
candidate.sourceIndex > sourceIndex &&
|
|
237
|
+
candidate.sourceIndex < nextDeclarationIndex);
|
|
238
|
+
if (matchedResult) {
|
|
239
|
+
matchedResult.consumed = true;
|
|
240
|
+
result.push(matchedResult.message);
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
result.push({
|
|
244
|
+
role: "toolResult",
|
|
245
|
+
toolCallId: block.id,
|
|
246
|
+
toolName: block.name,
|
|
247
|
+
content: [{ type: "text", text: "No result provided" }],
|
|
248
|
+
isError: true,
|
|
249
|
+
timestamp: Date.now(),
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=transform-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-messages.js","sourceRoot":"","sources":["../../src/api/transform-messages.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tMessage,\n\tModel,\n\tTextContent,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.ts\";\nimport { isVideoMimeType } from \"../types.ts\";\n\nconst NON_VISION_USER_IMAGE_PLACEHOLDER = \"(image omitted: model does not support images)\";\nconst NON_VISION_TOOL_IMAGE_PLACEHOLDER = \"(tool image omitted: model does not support images)\";\nconst NO_VIDEO_USER_PLACEHOLDER = \"(video omitted: model does not support video input)\";\nconst NO_VIDEO_TOOL_PLACEHOLDER = \"(tool video omitted: model does not support video input)\";\n\nfunction replaceMediaWithPlaceholder(\n\tcontent: (TextContent | ImageContent)[],\n\tplaceholder: string,\n\tmatches: (block: ImageContent) => boolean,\n): (TextContent | ImageContent)[] {\n\tif (!content.some((block) => block.type === \"image\" && matches(block))) {\n\t\treturn content;\n\t}\n\tconst result: (TextContent | ImageContent)[] = [];\n\tlet previousWasPlaceholder = false;\n\n\tfor (const block of content) {\n\t\tif (block.type === \"image\" && matches(block)) {\n\t\t\tif (!previousWasPlaceholder) {\n\t\t\t\tresult.push({ type: \"text\", text: placeholder });\n\t\t\t}\n\t\t\tpreviousWasPlaceholder = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult.push(block);\n\t\tpreviousWasPlaceholder = block.type === \"text\" && block.text === placeholder;\n\t}\n\n\treturn result;\n}\n\nfunction replaceImagesWithPlaceholder(content: (TextContent | ImageContent)[], placeholder: string): TextContent[] {\n\tconst result: TextContent[] = [];\n\tlet previousWasPlaceholder = false;\n\n\tfor (const block of content) {\n\t\tif (block.type === \"image\") {\n\t\t\tif (!previousWasPlaceholder) {\n\t\t\t\tresult.push({ type: \"text\", text: placeholder });\n\t\t\t}\n\t\t\tpreviousWasPlaceholder = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult.push(block);\n\t\tpreviousWasPlaceholder = block.text === placeholder;\n\t}\n\n\treturn result;\n}\n\nfunction downgradeUnsupportedImages<TApi extends Api>(messages: Message[], model: Model<TApi>): Message[] {\n\tconst supportsImages = model.input.includes(\"image\");\n\tconst supportsVideo = model.input.includes(\"video\");\n\tif (supportsImages && supportsVideo) {\n\t\treturn messages;\n\t}\n\n\treturn messages.map((msg) => {\n\t\tif (msg.role === \"user\" && Array.isArray(msg.content)) {\n\t\t\tlet content = msg.content;\n\t\t\t// Video payloads ride ImageContent blocks; strip them first for models\n\t\t\t// without the \"video\" modality so they never hit an incompatible wire.\n\t\t\tif (!supportsVideo) {\n\t\t\t\tcontent = replaceMediaWithPlaceholder(content, NO_VIDEO_USER_PLACEHOLDER, (b) =>\n\t\t\t\t\tisVideoMimeType(b.mimeType),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!supportsImages) {\n\t\t\t\tcontent = replaceImagesWithPlaceholder(content, NON_VISION_USER_IMAGE_PLACEHOLDER);\n\t\t\t}\n\t\t\treturn { ...msg, content };\n\t\t}\n\n\t\tif (msg.role === \"toolResult\") {\n\t\t\tlet content = msg.content;\n\t\t\tif (!supportsVideo) {\n\t\t\t\tcontent = replaceMediaWithPlaceholder(content, NO_VIDEO_TOOL_PLACEHOLDER, (b) =>\n\t\t\t\t\tisVideoMimeType(b.mimeType),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!supportsImages) {\n\t\t\t\tcontent = replaceImagesWithPlaceholder(content, NON_VISION_TOOL_IMAGE_PLACEHOLDER);\n\t\t\t}\n\t\t\treturn { ...msg, content };\n\t\t}\n\n\t\treturn msg;\n\t});\n}\n\nexport interface TransformMessagesOptions {\n\t/**\n\t * Preserve provider-native thinking/reasoning replay state for the current\n\t * model. When false, standalone same-model thinking is omitted, while\n\t * thinking attached to tool calls is preserved for provider validation.\n\t */\n\tpreserveThinking?: boolean;\n\tpreserveTextSignatures?: boolean;\n\t/**\n\t * Preserve same-model thinking blocks that do not carry a usable signature\n\t * so provider adapters can downgrade them to plain text or provider-specific\n\t * compatibility payloads.\n\t */\n\tpreserveUnsignedThinking?: boolean;\n}\n\n/**\n * Normalize tool call ID for cross-provider compatibility.\n * OpenAI Responses API generates IDs that are 450+ chars with special characters like `|`.\n * Anthropic APIs require IDs matching ^[a-zA-Z0-9_-]+$ (max 64 chars).\n */\nexport function transformMessages<TApi extends Api>(\n\tmessages: Message[],\n\tmodel: Model<TApi>,\n\tnormalizeToolCallId?: (id: string, model: Model<TApi>, source: AssistantMessage) => string,\n\toptions: TransformMessagesOptions = {},\n): Message[] {\n\t// Build a map of original tool call IDs to normalized IDs\n\tconst toolCallIdMap = new Map<string, string>();\n\t// Normalize null/undefined content from untyped callers (custom tools, hand-built\n\t// histories, old session files) so downstream code can rely on the type contract.\n\tconst normalizedMessages = messages.map((msg) => (msg.content == null ? { ...msg, content: [] } : msg));\n\tconst imageAwareMessages = downgradeUnsupportedImages(normalizedMessages, model);\n\tconst preserveThinking = options.preserveThinking ?? true;\n\tconst preserveTextSignatures = options.preserveTextSignatures ?? false;\n\tconst preserveUnsignedThinking = options.preserveUnsignedThinking ?? false;\n\n\t// First pass: transform messages (unsupported image downgrade, thinking blocks, tool call ID normalization)\n\tconst transformed = imageAwareMessages.map((msg) => {\n\t\t// User messages pass through unchanged\n\t\tif (msg.role === \"user\") {\n\t\t\treturn msg;\n\t\t}\n\n\t\t// Handle toolResult messages - normalize toolCallId if we have a mapping\n\t\tif (msg.role === \"toolResult\") {\n\t\t\tconst normalizedId = toolCallIdMap.get(msg.toolCallId);\n\t\t\tif (normalizedId && normalizedId !== msg.toolCallId) {\n\t\t\t\treturn { ...msg, toolCallId: normalizedId };\n\t\t\t}\n\t\t\treturn msg;\n\t\t}\n\n\t\t// Assistant messages need transformation check\n\t\tif (msg.role === \"assistant\") {\n\t\t\tconst assistantMsg = msg as AssistantMessage;\n\t\t\tconst isSameModel =\n\t\t\t\tassistantMsg.provider === model.provider &&\n\t\t\t\tassistantMsg.api === model.api &&\n\t\t\t\tassistantMsg.model === model.id;\n\t\t\tconst hasToolCalls = assistantMsg.content.some((block) => block.type === \"toolCall\");\n\t\t\tconst preserveProviderState = preserveThinking || hasToolCalls;\n\n\t\t\tconst transformedContent = assistantMsg.content.flatMap((block) => {\n\t\t\t\tif (block.type === \"thinking\") {\n\t\t\t\t\t// Redacted thinking is opaque encrypted content, only valid for the same model.\n\t\t\t\t\t// Drop it for cross-model to avoid API errors.\n\t\t\t\t\tif (block.redacted) {\n\t\t\t\t\t\treturn isSameModel && preserveProviderState ? { ...block } : [];\n\t\t\t\t\t}\n\t\t\t\t\tconst hasUsableSignature =\n\t\t\t\t\t\ttypeof block.thinkingSignature === \"string\" && block.thinkingSignature.trim().length > 0;\n\t\t\t\t\t// For same model: keep signed thinking only while replaying provider state.\n\t\t\t\t\t// Empty signed blocks are opaque compatibility state, not visible reasoning.\n\t\t\t\t\tif (isSameModel && hasUsableSignature && (preserveProviderState || block.thinking.trim() === \"\")) {\n\t\t\t\t\t\treturn { ...block };\n\t\t\t\t\t}\n\t\t\t\t\t// Skip empty thinking blocks, convert others to plain text\n\t\t\t\t\tif (!block.thinking || block.thinking.trim() === \"\") return [];\n\t\t\t\t\tif (isSameModel) {\n\t\t\t\t\t\treturn preserveProviderState || (preserveUnsignedThinking && !hasUsableSignature) ? { ...block } : [];\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\ttext: block.thinking,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (block.type === \"text\") {\n\t\t\t\t\tif (isSameModel && (preserveProviderState || preserveTextSignatures)) return { ...block };\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\ttext: block.text,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (block.type === \"toolCall\") {\n\t\t\t\t\tconst toolCall = block as ToolCall;\n\t\t\t\t\tlet normalizedToolCall: ToolCall = { ...toolCall };\n\n\t\t\t\t\tif ((!isSameModel || !preserveProviderState) && toolCall.thoughtSignature) {\n\t\t\t\t\t\tdelete (normalizedToolCall as { thoughtSignature?: string }).thoughtSignature;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!isSameModel && normalizeToolCallId) {\n\t\t\t\t\t\tconst normalizedId = normalizeToolCallId(toolCall.id, model, assistantMsg);\n\t\t\t\t\t\tif (normalizedId !== toolCall.id) {\n\t\t\t\t\t\t\ttoolCallIdMap.set(toolCall.id, normalizedId);\n\t\t\t\t\t\t\tnormalizedToolCall = { ...normalizedToolCall, id: normalizedId };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn normalizedToolCall;\n\t\t\t\t}\n\n\t\t\t\treturn block;\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\t...assistantMsg,\n\t\t\t\tcontent: transformedContent,\n\t\t\t};\n\t\t}\n\t\treturn msg;\n\t});\n\n\t// Second pass: pair every replayable tool call with the earliest unconsumed\n\t// result after its declaring assistant. Results are emitted adjacent to their\n\t// calls because Anthropic requires that ordering. A reused ID starts a new\n\t// pairing window, so a later result cannot repair an earlier call.\n\tconst result: Message[] = [];\n\tconst toolResultsById = new Map<string, { message: ToolResultMessage; sourceIndex: number; consumed: boolean }[]>();\n\tconst nextToolCallIndexById = new Map<string, number[]>();\n\t// Tool calls declared only by assistants the emit loop drops (errored/aborted).\n\t// Their results must not be emitted either: a strict provider rejects a tool\n\t// message whose tool_call_id no assistant in the request declares.\n\tconst droppedCallIds = new Set<string>();\n\n\tfor (let sourceIndex = 0; sourceIndex < transformed.length; sourceIndex++) {\n\t\tconst message = transformed[sourceIndex];\n\t\tif (message.role === \"toolResult\") {\n\t\t\tconst entries = toolResultsById.get(message.toolCallId) ?? [];\n\t\t\tentries.push({ message, sourceIndex, consumed: false });\n\t\t\ttoolResultsById.set(message.toolCallId, entries);\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"assistant\") {\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type === \"toolCall\") droppedCallIds.add(block.id);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const block of message.content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\tconst indexes = nextToolCallIndexById.get(block.id) ?? [];\n\t\t\tindexes.push(sourceIndex);\n\t\t\tnextToolCallIndexById.set(block.id, indexes);\n\t\t}\n\t}\n\n\tfor (let sourceIndex = 0; sourceIndex < transformed.length; sourceIndex++) {\n\t\tconst message = transformed[sourceIndex];\n\t\tif (message.role === \"toolResult\") {\n\t\t\tconst entry = toolResultsById\n\t\t\t\t.get(message.toolCallId)\n\t\t\t\t?.find((candidate) => candidate.sourceIndex === sourceIndex);\n\t\t\tif (!entry?.consumed) {\n\t\t\t\t// Skip results whose call was declared only by a dropped\n\t\t\t\t// (errored/aborted) assistant. An id re-declared by a kept assistant\n\t\t\t\t// still pairs through the normal windows, so keep those results.\n\t\t\t\tif (!droppedCallIds.has(message.toolCallId) || nextToolCallIndexById.has(message.toolCallId)) {\n\t\t\t\t\tresult.push(message);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"assistant\") {\n\t\t\tresult.push(message);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Skip errored/aborted assistant messages entirely. These incomplete turns\n\t\t// must not be revived merely because a matching result appears later.\n\t\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") continue;\n\n\t\tresult.push(message);\n\t\tfor (const block of message.content) {\n\t\t\tif (block.type !== \"toolCall\") continue;\n\t\t\tconst laterDeclarations = nextToolCallIndexById.get(block.id) ?? [];\n\t\t\tconst nextDeclarationIndex = laterDeclarations.find((index) => index > sourceIndex) ?? Infinity;\n\t\t\tconst matchedResult = toolResultsById\n\t\t\t\t.get(block.id)\n\t\t\t\t?.find(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\t!candidate.consumed &&\n\t\t\t\t\t\tcandidate.sourceIndex > sourceIndex &&\n\t\t\t\t\t\tcandidate.sourceIndex < nextDeclarationIndex,\n\t\t\t\t);\n\n\t\t\tif (matchedResult) {\n\t\t\t\tmatchedResult.consumed = true;\n\t\t\t\tresult.push(matchedResult.message);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult.push({\n\t\t\t\trole: \"toolResult\",\n\t\t\t\ttoolCallId: block.id,\n\t\t\t\ttoolName: block.name,\n\t\t\t\tcontent: [{ type: \"text\", text: \"No result provided\" }],\n\t\t\t\tisError: true,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t} as ToolResultMessage);\n\t\t}\n\t}\n\n\treturn result;\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Api, AssistantMessageEventStream, Context, Model, SimpleStreamOptions, StreamFunction, StreamOptions } from "./types.ts";
|
|
2
|
+
export type ApiStreamFunction = (model: Model<Api>, context: Context, options?: StreamOptions) => AssistantMessageEventStream;
|
|
3
|
+
export type ApiStreamSimpleFunction = (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
|
|
4
|
+
export interface ApiProvider<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> {
|
|
5
|
+
api: TApi;
|
|
6
|
+
stream: StreamFunction<TApi, TOptions>;
|
|
7
|
+
streamSimple: StreamFunction<TApi, SimpleStreamOptions>;
|
|
8
|
+
}
|
|
9
|
+
export interface ApiProviderInternal {
|
|
10
|
+
api: Api;
|
|
11
|
+
stream: ApiStreamFunction;
|
|
12
|
+
streamSimple: ApiStreamSimpleFunction;
|
|
13
|
+
}
|
|
14
|
+
export type RegisteredApiProvider = {
|
|
15
|
+
provider: ApiProviderInternal;
|
|
16
|
+
sourceId?: string;
|
|
17
|
+
};
|
|
18
|
+
/** Browser-neutral shape installed by the node-only provider-scope subpath. */
|
|
19
|
+
export interface ProviderScopeAccess {
|
|
20
|
+
state: "active" | "closed";
|
|
21
|
+
overlay: Map<string, RegisteredApiProvider>;
|
|
22
|
+
}
|
|
23
|
+
/** Installs the optional node-only scope lookup without importing node APIs here. */
|
|
24
|
+
export declare function installProviderScopeAccessor(accessor: () => ProviderScopeAccess | undefined): void;
|
|
25
|
+
export declare function setProviderScopeStrictMode(enabled: boolean): void;
|
|
26
|
+
export declare function registerApiProvider<TApi extends Api, TOptions extends StreamOptions>(provider: ApiProvider<TApi, TOptions>, sourceId?: string): void;
|
|
27
|
+
/** Registers a builtin once, retaining its immutable identity for active scopes. */
|
|
28
|
+
export declare function registerBuiltinApiProvider<TApi extends Api, TOptions extends StreamOptions>(provider: ApiProvider<TApi, TOptions>): void;
|
|
29
|
+
export declare function getBuiltinApiProvider(api: Api): ApiProviderInternal | undefined;
|
|
30
|
+
export declare function getApiProvider(api: Api): ApiProviderInternal | undefined;
|
|
31
|
+
export declare function getApiProviders(): ApiProviderInternal[];
|
|
32
|
+
export declare function unregisterApiProviders(sourceId: string): void;
|
|
33
|
+
export declare function clearApiProviders(): void;
|
|
34
|
+
//# sourceMappingURL=api-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-registry.d.ts","sourceRoot":"","sources":["../src/api-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,GAAG,EACH,2BAA2B,EAC3B,OAAO,EACP,KAAK,EACL,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,iBAAiB,GAAG,CAC/B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,aAAa,KACnB,2BAA2B,CAAC;AAEjC,MAAM,MAAM,uBAAuB,GAAG,CACrC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,mBAAmB,KACzB,2BAA2B,CAAC;AAEjC,MAAM,WAAW,WAAW,CAAC,IAAI,SAAS,GAAG,GAAG,GAAG,EAAE,QAAQ,SAAS,aAAa,GAAG,aAAa;IAClG,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,YAAY,EAAE,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,iBAAiB,CAAC;IAC1B,YAAY,EAAE,uBAAuB,CAAC;CACtC;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,+EAA+E;AAC/E,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CAC5C;AAOD,qFAAqF;AACrF,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAElG;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjE;AA2CD,wBAAgB,mBAAmB,CAAC,IAAI,SAAS,GAAG,EAAE,QAAQ,SAAS,aAAa,EACnF,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,GACf,IAAI,CAIN;AAED,oFAAoF;AACpF,wBAAgB,0BAA0B,CAAC,IAAI,SAAS,GAAG,EAAE,QAAQ,SAAS,aAAa,EAC1F,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,GACnC,IAAI,CAIN;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB,GAAG,SAAS,CAE/E;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB,GAAG,SAAS,CAaxE;AAED,wBAAgB,eAAe,IAAI,mBAAmB,EAAE,CAQvD;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { getRegisteredFauxProvider } from "./providers/faux.js";
|
|
2
|
+
const apiProviderRegistry = new Map();
|
|
3
|
+
const builtinApiProviderRegistry = new Map();
|
|
4
|
+
let getProviderScope = () => undefined;
|
|
5
|
+
let providerScopeStrictMode = false;
|
|
6
|
+
/** Installs the optional node-only scope lookup without importing node APIs here. */
|
|
7
|
+
export function installProviderScopeAccessor(accessor) {
|
|
8
|
+
getProviderScope = accessor;
|
|
9
|
+
}
|
|
10
|
+
export function setProviderScopeStrictMode(enabled) {
|
|
11
|
+
providerScopeStrictMode = enabled;
|
|
12
|
+
}
|
|
13
|
+
function getActiveProviderScope() {
|
|
14
|
+
const scope = getProviderScope();
|
|
15
|
+
if (scope?.state === "closed")
|
|
16
|
+
throw new Error("Provider scope is closed");
|
|
17
|
+
if (!scope && providerScopeStrictMode)
|
|
18
|
+
throw new Error("Provider scope is required in strict mode");
|
|
19
|
+
return scope;
|
|
20
|
+
}
|
|
21
|
+
function wrapStream(api, stream) {
|
|
22
|
+
return (model, context, options) => {
|
|
23
|
+
if (model.api !== api)
|
|
24
|
+
throw new Error(`Mismatched api: ${model.api} expected ${api}`);
|
|
25
|
+
return stream(model, context, options);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function wrapStreamSimple(api, streamSimple) {
|
|
29
|
+
return (model, context, options) => {
|
|
30
|
+
if (model.api !== api)
|
|
31
|
+
throw new Error(`Mismatched api: ${model.api} expected ${api}`);
|
|
32
|
+
return streamSimple(model, context, options);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function createRegisteredProvider(provider, sourceId) {
|
|
36
|
+
return {
|
|
37
|
+
provider: {
|
|
38
|
+
api: provider.api,
|
|
39
|
+
stream: wrapStream(provider.api, provider.stream),
|
|
40
|
+
streamSimple: wrapStreamSimple(provider.api, provider.streamSimple),
|
|
41
|
+
},
|
|
42
|
+
sourceId,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function registerApiProvider(provider, sourceId) {
|
|
46
|
+
const scope = getActiveProviderScope();
|
|
47
|
+
const registry = scope ? scope.overlay : apiProviderRegistry;
|
|
48
|
+
registry.set(provider.api, createRegisteredProvider(provider, sourceId));
|
|
49
|
+
}
|
|
50
|
+
/** Registers a builtin once, retaining its immutable identity for active scopes. */
|
|
51
|
+
export function registerBuiltinApiProvider(provider) {
|
|
52
|
+
const registered = builtinApiProviderRegistry.get(provider.api) ?? createRegisteredProvider(provider);
|
|
53
|
+
builtinApiProviderRegistry.set(provider.api, registered);
|
|
54
|
+
if (!apiProviderRegistry.has(provider.api))
|
|
55
|
+
apiProviderRegistry.set(provider.api, registered);
|
|
56
|
+
}
|
|
57
|
+
export function getBuiltinApiProvider(api) {
|
|
58
|
+
return builtinApiProviderRegistry.get(api)?.provider;
|
|
59
|
+
}
|
|
60
|
+
export function getApiProvider(api) {
|
|
61
|
+
const scope = getActiveProviderScope();
|
|
62
|
+
if (scope)
|
|
63
|
+
return scope.overlay.get(api)?.provider ?? builtinApiProviderRegistry.get(api)?.provider;
|
|
64
|
+
const faux = getRegisteredFauxProvider(api);
|
|
65
|
+
if (faux) {
|
|
66
|
+
return {
|
|
67
|
+
api: faux.api,
|
|
68
|
+
stream: wrapStream(faux.api, faux.stream),
|
|
69
|
+
streamSimple: wrapStreamSimple(faux.api, faux.streamSimple),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return apiProviderRegistry.get(api)?.provider;
|
|
73
|
+
}
|
|
74
|
+
export function getApiProviders() {
|
|
75
|
+
const scope = getActiveProviderScope();
|
|
76
|
+
if (scope) {
|
|
77
|
+
const providers = new Map(builtinApiProviderRegistry);
|
|
78
|
+
for (const [api, entry] of scope.overlay)
|
|
79
|
+
providers.set(api, entry);
|
|
80
|
+
return Array.from(providers.values(), (entry) => entry.provider);
|
|
81
|
+
}
|
|
82
|
+
return Array.from(apiProviderRegistry.values(), (entry) => entry.provider);
|
|
83
|
+
}
|
|
84
|
+
export function unregisterApiProviders(sourceId) {
|
|
85
|
+
const scope = getActiveProviderScope();
|
|
86
|
+
const registry = scope ? scope.overlay : apiProviderRegistry;
|
|
87
|
+
for (const [api, entry] of registry.entries()) {
|
|
88
|
+
if (entry.sourceId === sourceId)
|
|
89
|
+
registry.delete(api);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export function clearApiProviders() {
|
|
93
|
+
const scope = getActiveProviderScope();
|
|
94
|
+
(scope ? scope.overlay : apiProviderRegistry).clear();
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=api-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-registry.js","sourceRoot":"","sources":["../src/api-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA8ChE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAiC,CAAC;AACrE,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAiC,CAAC;AAC5E,IAAI,gBAAgB,GAA0C,GAAG,EAAE,CAAC,SAAS,CAAC;AAC9E,IAAI,uBAAuB,GAAG,KAAK,CAAC;AAEpC,qFAAqF;AACrF,MAAM,UAAU,4BAA4B,CAAC,QAA+C;IAC3F,gBAAgB,GAAG,QAAQ,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IAC1D,uBAAuB,GAAG,OAAO,CAAC;AACnC,CAAC;AAED,SAAS,sBAAsB;IAC9B,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,IAAI,KAAK,EAAE,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC3E,IAAI,CAAC,KAAK,IAAI,uBAAuB;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACpG,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAClB,GAAS,EACT,MAAsC;IAEtC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAClC,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,GAAG,aAAa,GAAG,EAAE,CAAC,CAAC;QACvF,OAAO,MAAM,CAAC,KAAoB,EAAE,OAAO,EAAE,OAAmB,CAAC,CAAC;IACnE,CAAC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACxB,GAAS,EACT,YAAuD;IAEvD,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAClC,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,GAAG,aAAa,GAAG,EAAE,CAAC,CAAC;QACvF,OAAO,YAAY,CAAC,KAAoB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAChC,QAAqC,EACrC,QAAiB;IAEjB,OAAO;QACN,QAAQ,EAAE;YACT,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;YACjD,YAAY,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC;SACnE;QACD,QAAQ;KACR,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,QAAqC,EACrC,QAAiB;IAEjB,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC7D,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,0BAA0B,CACzC,QAAqC;IAErC,MAAM,UAAU,GAAG,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACtG,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAQ;IAC7C,OAAO,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAQ;IACtC,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;IACvC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,IAAI,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;IAEpG,MAAM,IAAI,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,IAAI,EAAE,CAAC;QACV,OAAO;YACN,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;YACzC,YAAY,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC;SAC3D,CAAC;IACH,CAAC;IACD,OAAO,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,eAAe;IAC9B,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;IACvC,IAAI,KAAK,EAAE,CAAC;QACX,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACtD,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;YAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;AACF,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;IACvC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;AACvD,CAAC","sourcesContent":["import { getRegisteredFauxProvider } from \"./providers/faux.ts\";\nimport type {\n\tApi,\n\tAssistantMessageEventStream,\n\tContext,\n\tModel,\n\tSimpleStreamOptions,\n\tStreamFunction,\n\tStreamOptions,\n} from \"./types.ts\";\n\nexport type ApiStreamFunction = (\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions?: StreamOptions,\n) => AssistantMessageEventStream;\n\nexport type ApiStreamSimpleFunction = (\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions?: SimpleStreamOptions,\n) => AssistantMessageEventStream;\n\nexport interface ApiProvider<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> {\n\tapi: TApi;\n\tstream: StreamFunction<TApi, TOptions>;\n\tstreamSimple: StreamFunction<TApi, SimpleStreamOptions>;\n}\n\nexport interface ApiProviderInternal {\n\tapi: Api;\n\tstream: ApiStreamFunction;\n\tstreamSimple: ApiStreamSimpleFunction;\n}\n\nexport type RegisteredApiProvider = {\n\tprovider: ApiProviderInternal;\n\tsourceId?: string;\n};\n\n/** Browser-neutral shape installed by the node-only provider-scope subpath. */\nexport interface ProviderScopeAccess {\n\tstate: \"active\" | \"closed\";\n\toverlay: Map<string, RegisteredApiProvider>;\n}\n\nconst apiProviderRegistry = new Map<string, RegisteredApiProvider>();\nconst builtinApiProviderRegistry = new Map<string, RegisteredApiProvider>();\nlet getProviderScope: () => ProviderScopeAccess | undefined = () => undefined;\nlet providerScopeStrictMode = false;\n\n/** Installs the optional node-only scope lookup without importing node APIs here. */\nexport function installProviderScopeAccessor(accessor: () => ProviderScopeAccess | undefined): void {\n\tgetProviderScope = accessor;\n}\n\nexport function setProviderScopeStrictMode(enabled: boolean): void {\n\tproviderScopeStrictMode = enabled;\n}\n\nfunction getActiveProviderScope(): ProviderScopeAccess | undefined {\n\tconst scope = getProviderScope();\n\tif (scope?.state === \"closed\") throw new Error(\"Provider scope is closed\");\n\tif (!scope && providerScopeStrictMode) throw new Error(\"Provider scope is required in strict mode\");\n\treturn scope;\n}\n\nfunction wrapStream<TApi extends Api, TOptions extends StreamOptions>(\n\tapi: TApi,\n\tstream: StreamFunction<TApi, TOptions>,\n): ApiStreamFunction {\n\treturn (model, context, options) => {\n\t\tif (model.api !== api) throw new Error(`Mismatched api: ${model.api} expected ${api}`);\n\t\treturn stream(model as Model<TApi>, context, options as TOptions);\n\t};\n}\n\nfunction wrapStreamSimple<TApi extends Api>(\n\tapi: TApi,\n\tstreamSimple: StreamFunction<TApi, SimpleStreamOptions>,\n): ApiStreamSimpleFunction {\n\treturn (model, context, options) => {\n\t\tif (model.api !== api) throw new Error(`Mismatched api: ${model.api} expected ${api}`);\n\t\treturn streamSimple(model as Model<TApi>, context, options);\n\t};\n}\n\nfunction createRegisteredProvider<TApi extends Api, TOptions extends StreamOptions>(\n\tprovider: ApiProvider<TApi, TOptions>,\n\tsourceId?: string,\n): RegisteredApiProvider {\n\treturn {\n\t\tprovider: {\n\t\t\tapi: provider.api,\n\t\t\tstream: wrapStream(provider.api, provider.stream),\n\t\t\tstreamSimple: wrapStreamSimple(provider.api, provider.streamSimple),\n\t\t},\n\t\tsourceId,\n\t};\n}\n\nexport function registerApiProvider<TApi extends Api, TOptions extends StreamOptions>(\n\tprovider: ApiProvider<TApi, TOptions>,\n\tsourceId?: string,\n): void {\n\tconst scope = getActiveProviderScope();\n\tconst registry = scope ? scope.overlay : apiProviderRegistry;\n\tregistry.set(provider.api, createRegisteredProvider(provider, sourceId));\n}\n\n/** Registers a builtin once, retaining its immutable identity for active scopes. */\nexport function registerBuiltinApiProvider<TApi extends Api, TOptions extends StreamOptions>(\n\tprovider: ApiProvider<TApi, TOptions>,\n): void {\n\tconst registered = builtinApiProviderRegistry.get(provider.api) ?? createRegisteredProvider(provider);\n\tbuiltinApiProviderRegistry.set(provider.api, registered);\n\tif (!apiProviderRegistry.has(provider.api)) apiProviderRegistry.set(provider.api, registered);\n}\n\nexport function getBuiltinApiProvider(api: Api): ApiProviderInternal | undefined {\n\treturn builtinApiProviderRegistry.get(api)?.provider;\n}\n\nexport function getApiProvider(api: Api): ApiProviderInternal | undefined {\n\tconst scope = getActiveProviderScope();\n\tif (scope) return scope.overlay.get(api)?.provider ?? builtinApiProviderRegistry.get(api)?.provider;\n\n\tconst faux = getRegisteredFauxProvider(api);\n\tif (faux) {\n\t\treturn {\n\t\t\tapi: faux.api,\n\t\t\tstream: wrapStream(faux.api, faux.stream),\n\t\t\tstreamSimple: wrapStreamSimple(faux.api, faux.streamSimple),\n\t\t};\n\t}\n\treturn apiProviderRegistry.get(api)?.provider;\n}\n\nexport function getApiProviders(): ApiProviderInternal[] {\n\tconst scope = getActiveProviderScope();\n\tif (scope) {\n\t\tconst providers = new Map(builtinApiProviderRegistry);\n\t\tfor (const [api, entry] of scope.overlay) providers.set(api, entry);\n\t\treturn Array.from(providers.values(), (entry) => entry.provider);\n\t}\n\treturn Array.from(apiProviderRegistry.values(), (entry) => entry.provider);\n}\n\nexport function unregisterApiProviders(sourceId: string): void {\n\tconst scope = getActiveProviderScope();\n\tconst registry = scope ? scope.overlay : apiProviderRegistry;\n\tfor (const [api, entry] of registry.entries()) {\n\t\tif (entry.sourceId === sourceId) registry.delete(api);\n\t}\n}\n\nexport function clearApiProviders(): void {\n\tconst scope = getActiveProviderScope();\n\t(scope ? scope.overlay : apiProviderRegistry).clear();\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AuthContext } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Default auth context: env vars from `process.env` (undefined in browsers),
|
|
4
|
+
* file existence via node:fs (always false in browsers).
|
|
5
|
+
*/
|
|
6
|
+
export declare function defaultProviderAuthContext(): AuthContext;
|
|
7
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/auth/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAkB9C;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,WAAW,CAsBxD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
// Variable specifier so browser bundlers do not try to resolve node builtins.
|
|
10
|
+
const importNodeModule = (specifier) => import(__rewriteRelativeImportExtension(specifier));
|
|
11
|
+
function getProcessEnv() {
|
|
12
|
+
const proc = globalThis.process;
|
|
13
|
+
return proc?.env;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Default auth context: env vars from `process.env` (undefined in browsers),
|
|
17
|
+
* file existence via node:fs (always false in browsers).
|
|
18
|
+
*/
|
|
19
|
+
export function defaultProviderAuthContext() {
|
|
20
|
+
return {
|
|
21
|
+
async env(name) {
|
|
22
|
+
const value = getProcessEnv()?.[name];
|
|
23
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
24
|
+
},
|
|
25
|
+
async fileExists(path) {
|
|
26
|
+
try {
|
|
27
|
+
const fs = (await importNodeModule("node:fs/promises"));
|
|
28
|
+
let resolved = path;
|
|
29
|
+
if (resolved.startsWith("~")) {
|
|
30
|
+
const os = (await importNodeModule("node:os"));
|
|
31
|
+
resolved = os.homedir() + resolved.slice(1);
|
|
32
|
+
}
|
|
33
|
+
await fs.access(resolved);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/auth/context.ts"],"names":[],"mappings":";;;;;;;;AAUA,8EAA8E;AAC9E,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAoB,EAAE,CAAC,MAAM,kCAAC,SAAS,EAAC,CAAC;AAEpF,SAAS,aAAa;IACrB,MAAM,IAAI,GAAI,UAAyE,CAAC,OAAO,CAAC;IAChG,OAAO,IAAI,EAAE,GAAG,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACzC,OAAO;QACN,KAAK,CAAC,GAAG,CAAC,IAAY;YACrB,MAAM,KAAK,GAAG,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAY;YAC5B,IAAI,CAAC;gBACJ,MAAM,EAAE,GAAG,CAAC,MAAM,gBAAgB,CAAC,kBAAkB,CAAC,CAAiB,CAAC;gBACxE,IAAI,QAAQ,GAAG,IAAI,CAAC;gBACpB,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAiB,CAAC;oBAC/D,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACb,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC","sourcesContent":["import type { AuthContext } from \"./types.ts\";\n\ninterface NodeFsModule {\n\taccess(path: string): Promise<void>;\n}\n\ninterface NodeOsModule {\n\thomedir(): string;\n}\n\n// Variable specifier so browser bundlers do not try to resolve node builtins.\nconst importNodeModule = (specifier: string): Promise<unknown> => import(specifier);\n\nfunction getProcessEnv(): Record<string, string | undefined> | undefined {\n\tconst proc = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process;\n\treturn proc?.env;\n}\n\n/**\n * Default auth context: env vars from `process.env` (undefined in browsers),\n * file existence via node:fs (always false in browsers).\n */\nexport function defaultProviderAuthContext(): AuthContext {\n\treturn {\n\t\tasync env(name: string): Promise<string | undefined> {\n\t\t\tconst value = getProcessEnv()?.[name];\n\t\t\treturn typeof value === \"string\" && value.trim().length > 0 ? value : undefined;\n\t\t},\n\n\t\tasync fileExists(path: string): Promise<boolean> {\n\t\t\ttry {\n\t\t\t\tconst fs = (await importNodeModule(\"node:fs/promises\")) as NodeFsModule;\n\t\t\t\tlet resolved = path;\n\t\t\t\tif (resolved.startsWith(\"~\")) {\n\t\t\t\t\tconst os = (await importNodeModule(\"node:os\")) as NodeOsModule;\n\t\t\t\t\tresolved = os.homedir() + resolved.slice(1);\n\t\t\t\t}\n\t\t\t\tawait fs.access(resolved);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t};\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Credential, CredentialInfo, CredentialStore } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Default in-memory credential store. Apps inject persistent stores.
|
|
4
|
+
* Keyed by `Provider.id`, one credential per provider; see `CredentialStore`.
|
|
5
|
+
* Writes are serialized per provider through a promise chain.
|
|
6
|
+
*/
|
|
7
|
+
export declare class InMemoryCredentialStore implements CredentialStore {
|
|
8
|
+
private credentials;
|
|
9
|
+
private chains;
|
|
10
|
+
/** Serialize tasks per provider id. */
|
|
11
|
+
private enqueue;
|
|
12
|
+
read(providerId: string): Promise<Credential | undefined>;
|
|
13
|
+
list(): Promise<readonly CredentialInfo[]>;
|
|
14
|
+
modify(providerId: string, fn: (current: Credential | undefined) => Promise<Credential | undefined>): Promise<Credential | undefined>;
|
|
15
|
+
delete(providerId: string): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=credential-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../src/auth/credential-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAC9D,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,MAAM,CAAuC;IAErD,uCAAuC;IACvC,OAAO,CAAC,OAAO;IAaT,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAE9D;IAEK,IAAI,IAAI,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAE/C;IAED,MAAM,CACL,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,GACtE,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAOjC;IAED,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxC;CACD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default in-memory credential store. Apps inject persistent stores.
|
|
3
|
+
* Keyed by `Provider.id`, one credential per provider; see `CredentialStore`.
|
|
4
|
+
* Writes are serialized per provider through a promise chain.
|
|
5
|
+
*/
|
|
6
|
+
export class InMemoryCredentialStore {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.credentials = new Map();
|
|
9
|
+
this.chains = new Map();
|
|
10
|
+
}
|
|
11
|
+
/** Serialize tasks per provider id. */
|
|
12
|
+
enqueue(providerId, task) {
|
|
13
|
+
const previous = this.chains.get(providerId) ?? Promise.resolve();
|
|
14
|
+
const next = (async () => {
|
|
15
|
+
await previous.catch(() => { });
|
|
16
|
+
return task();
|
|
17
|
+
})();
|
|
18
|
+
this.chains.set(providerId, next.catch(() => { }));
|
|
19
|
+
return next;
|
|
20
|
+
}
|
|
21
|
+
async read(providerId) {
|
|
22
|
+
return this.credentials.get(providerId);
|
|
23
|
+
}
|
|
24
|
+
async list() {
|
|
25
|
+
return [...this.credentials].map(([providerId, credential]) => ({ providerId, type: credential.type }));
|
|
26
|
+
}
|
|
27
|
+
modify(providerId, fn) {
|
|
28
|
+
return this.enqueue(providerId, async () => {
|
|
29
|
+
const current = this.credentials.get(providerId);
|
|
30
|
+
const next = await fn(current);
|
|
31
|
+
if (next !== undefined)
|
|
32
|
+
this.credentials.set(providerId, next);
|
|
33
|
+
return next ?? current;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
delete(providerId) {
|
|
37
|
+
return this.enqueue(providerId, async () => {
|
|
38
|
+
this.credentials.delete(providerId);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=credential-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../../src/auth/credential-store.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAApC;QACS,gBAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC5C,WAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IAyCtD,CAAC;IAvCA,uCAAuC;IAC/B,OAAO,CAAI,UAAkB,EAAE,IAAsB;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;YACxB,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC/B,OAAO,IAAI,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,CAAC;QACL,IAAI,CAAC,MAAM,CAAC,GAAG,CACd,UAAU,EACV,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACpB,CAAC;QACF,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,CACL,UAAkB,EAClB,EAAwE;QAExE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC/D,OAAO,IAAI,IAAI,OAAO,CAAC;QACxB,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAkB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACJ,CAAC;CACD","sourcesContent":["import type { Credential, CredentialInfo, CredentialStore } from \"./types.ts\";\n\n/**\n * Default in-memory credential store. Apps inject persistent stores.\n * Keyed by `Provider.id`, one credential per provider; see `CredentialStore`.\n * Writes are serialized per provider through a promise chain.\n */\nexport class InMemoryCredentialStore implements CredentialStore {\n\tprivate credentials = new Map<string, Credential>();\n\tprivate chains = new Map<string, Promise<unknown>>();\n\n\t/** Serialize tasks per provider id. */\n\tprivate enqueue<T>(providerId: string, task: () => Promise<T>): Promise<T> {\n\t\tconst previous = this.chains.get(providerId) ?? Promise.resolve();\n\t\tconst next = (async () => {\n\t\t\tawait previous.catch(() => {});\n\t\t\treturn task();\n\t\t})();\n\t\tthis.chains.set(\n\t\t\tproviderId,\n\t\t\tnext.catch(() => {}),\n\t\t);\n\t\treturn next;\n\t}\n\n\tasync read(providerId: string): Promise<Credential | undefined> {\n\t\treturn this.credentials.get(providerId);\n\t}\n\n\tasync list(): Promise<readonly CredentialInfo[]> {\n\t\treturn [...this.credentials].map(([providerId, credential]) => ({ providerId, type: credential.type }));\n\t}\n\n\tmodify(\n\t\tproviderId: string,\n\t\tfn: (current: Credential | undefined) => Promise<Credential | undefined>,\n\t): Promise<Credential | undefined> {\n\t\treturn this.enqueue(providerId, async () => {\n\t\t\tconst current = this.credentials.get(providerId);\n\t\t\tconst next = await fn(current);\n\t\t\tif (next !== undefined) this.credentials.set(providerId, next);\n\t\t\treturn next ?? current;\n\t\t});\n\t}\n\n\tdelete(providerId: string): Promise<void> {\n\t\treturn this.enqueue(providerId, async () => {\n\t\t\tthis.credentials.delete(providerId);\n\t\t});\n\t}\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ApiKeyAuth, OAuthAuth } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Standard api-key auth: a stored credential key wins, otherwise the first
|
|
4
|
+
* set env var resolves. Includes a `login` that prompts for the key.
|
|
5
|
+
* Providers with non-standard resolution (provider env, ambient files, IAM)
|
|
6
|
+
* write their own `ApiKeyAuth`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function envApiKeyAuth(name: string, envVars: readonly string[]): ApiKeyAuth;
|
|
9
|
+
/**
|
|
10
|
+
* Wraps a dynamically imported `OAuthAuth` so provider definitions can
|
|
11
|
+
* advertise OAuth without importing the implementation. The flow loads on
|
|
12
|
+
* first `login`/`refresh`/`toAuth` call; callers keep Node-only flow code out
|
|
13
|
+
* of bundles by loading through a bundler-opaque dynamic import (variable
|
|
14
|
+
* specifier, see the bedrock lazy wrapper).
|
|
15
|
+
*/
|
|
16
|
+
export declare function lazyOAuth(input: {
|
|
17
|
+
name: string;
|
|
18
|
+
loginLabel?: string;
|
|
19
|
+
load: () => Promise<OAuthAuth>;
|
|
20
|
+
}): OAuthAuth;
|
|
21
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/auth/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAkBlF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAA;CAAE,GAAG,SAAS,CAajH"}
|