@vib-rato/ai 0.16.0
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/CHANGELOG.md +3354 -0
- package/README.md +1194 -0
- package/dist/types/adapter-internals/provider-safety-stop.d.ts +45 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth-broker/client.d.ts +80 -0
- package/dist/types/auth-broker/index.d.ts +5 -0
- package/dist/types/auth-broker/redact.d.ts +7 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +153 -0
- package/dist/types/auth-broker/server.d.ts +32 -0
- package/dist/types/auth-broker/types.d.ts +132 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +555 -0
- package/dist/types/auth-gateway/http.d.ts +40 -0
- package/dist/types/auth-gateway/index.d.ts +3 -0
- package/dist/types/auth-gateway/server.d.ts +70 -0
- package/dist/types/auth-gateway/types.d.ts +129 -0
- package/dist/types/auth-storage.d.ts +1074 -0
- package/dist/types/cli.d.ts +2 -0
- package/dist/types/codex-tools.d.ts +4 -0
- package/dist/types/context-cap-policy.d.ts +68 -0
- package/dist/types/core.d.ts +35 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/model-cache.d.ts +24 -0
- package/dist/types/model-manager.d.ts +77 -0
- package/dist/types/model-pricing.d.ts +3 -0
- package/dist/types/model-retirements.d.ts +6 -0
- package/dist/types/model-thinking.d.ts +100 -0
- package/dist/types/models.d.ts +21 -0
- package/dist/types/openai-completions-compat.d.ts +34 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/provider-models/bundled-references.d.ts +4 -0
- package/dist/types/provider-models/descriptors.d.ts +48 -0
- package/dist/types/provider-models/google.d.ts +20 -0
- package/dist/types/provider-models/index.d.ts +5 -0
- package/dist/types/provider-models/ollama.d.ts +7 -0
- package/dist/types/provider-models/openai-compat.d.ts +293 -0
- package/dist/types/provider-models/special.d.ts +29 -0
- package/dist/types/providers/amazon-bedrock.d.ts +60 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +450 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic.d.ts +280 -0
- package/dist/types/providers/aws-credential-config.d.ts +19 -0
- package/dist/types/providers/aws-credentials.d.ts +43 -0
- package/dist/types/providers/aws-eventstream.d.ts +38 -0
- package/dist/types/providers/aws-sigv4.d.ts +55 -0
- package/dist/types/providers/azure-openai-responses.d.ts +22 -0
- package/dist/types/providers/composer-discipline.d.ts +32 -0
- package/dist/types/providers/cursor/client-version.d.ts +10 -0
- package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
- package/dist/types/providers/cursor/gen/agent_pb.d.ts +16769 -0
- package/dist/types/providers/cursor-pi-args.d.ts +119 -0
- package/dist/types/providers/cursor.d.ts +72 -0
- package/dist/types/providers/dashscope-token-plan-headers.d.ts +57 -0
- package/dist/types/providers/error-message.d.ts +27 -0
- package/dist/types/providers/github-copilot-headers.d.ts +40 -0
- package/dist/types/providers/gitlab-duo.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +26 -0
- package/dist/types/providers/google-gemini-cli.d.ts +75 -0
- package/dist/types/providers/google-gemini-headers.d.ts +43 -0
- package/dist/types/providers/google-shared.d.ts +183 -0
- package/dist/types/providers/google-types.d.ts +138 -0
- package/dist/types/providers/google-vertex.d.ts +11 -0
- package/dist/types/providers/google.d.ts +4 -0
- package/dist/types/providers/grammar.d.ts +1 -0
- package/dist/types/providers/kimi.d.ts +27 -0
- package/dist/types/providers/kiro-api-key.d.ts +50 -0
- package/dist/types/providers/kiro-codewhisperer.d.ts +11 -0
- package/dist/types/providers/mock.d.ts +189 -0
- package/dist/types/providers/ollama.d.ts +41 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
- package/dist/types/providers/openai-bounded-rate-limits.d.ts +3 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +1733 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-codex/constants.d.ts +26 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +50 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +18 -0
- package/dist/types/providers/openai-codex-responses.d.ts +71 -0
- package/dist/types/providers/openai-completions-compat.d.ts +6 -0
- package/dist/types/providers/openai-completions.d.ts +35 -0
- package/dist/types/providers/openai-opencodex-responses.d.ts +10 -0
- package/dist/types/providers/openai-request-transform.d.ts +4 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-shared.d.ts +106 -0
- package/dist/types/providers/openai-responses.d.ts +37 -0
- package/dist/types/providers/pi-native-client.d.ts +29 -0
- package/dist/types/providers/pi-native-server.d.ts +60 -0
- package/dist/types/providers/register-builtins.d.ts +59 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +33 -0
- package/dist/types/providers/vision-guard.d.ts +8 -0
- package/dist/types/rate-limit-utils.d.ts +19 -0
- package/dist/types/stream.d.ts +45 -0
- package/dist/types/types.d.ts +1073 -0
- package/dist/types/usage/claude.d.ts +3 -0
- package/dist/types/usage/gemini.d.ts +2 -0
- package/dist/types/usage/github-copilot.d.ts +7 -0
- package/dist/types/usage/google-antigravity.d.ts +2 -0
- package/dist/types/usage/grok-cli.d.ts +17 -0
- package/dist/types/usage/kimi.d.ts +4 -0
- package/dist/types/usage/minimax-code.d.ts +2 -0
- package/dist/types/usage/openai-codex.d.ts +3 -0
- package/dist/types/usage/shared.d.ts +1 -0
- package/dist/types/usage/zai.d.ts +2 -0
- package/dist/types/usage.d.ts +264 -0
- package/dist/types/utils/abort.d.ts +19 -0
- package/dist/types/utils/anthropic-auth.d.ts +39 -0
- package/dist/types/utils/block-symbols.d.ts +6 -0
- package/dist/types/utils/discovery/antigravity.d.ts +67 -0
- package/dist/types/utils/discovery/codex.d.ts +38 -0
- package/dist/types/utils/discovery/cursor.d.ts +49 -0
- package/dist/types/utils/discovery/gemini.d.ts +25 -0
- package/dist/types/utils/discovery/index.d.ts +4 -0
- package/dist/types/utils/discovery/openai-compatible.d.ts +81 -0
- package/dist/types/utils/event-stream.d.ts +41 -0
- package/dist/types/utils/fallback-transport.d.ts +110 -0
- package/dist/types/utils/fireworks-model-id.d.ts +10 -0
- package/dist/types/utils/foundry.d.ts +11 -0
- package/dist/types/utils/h2-fetch.d.ts +22 -0
- package/dist/types/utils/http-inspector.d.ts +59 -0
- package/dist/types/utils/idle-iterator.d.ts +122 -0
- package/dist/types/utils/json-parse.d.ts +98 -0
- package/dist/types/utils/oauth/alibaba-token-plan.d.ts +19 -0
- package/dist/types/utils/oauth/anthropic.d.ts +41 -0
- package/dist/types/utils/oauth/api-key-login.d.ts +38 -0
- package/dist/types/utils/oauth/api-key-validation.d.ts +39 -0
- package/dist/types/utils/oauth/bizrouter.d.ts +1 -0
- package/dist/types/utils/oauth/callback-server.d.ts +80 -0
- package/dist/types/utils/oauth/cerebras.d.ts +1 -0
- package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/commandcode.d.ts +1 -0
- package/dist/types/utils/oauth/cursor.d.ts +15 -0
- package/dist/types/utils/oauth/deepinfra.d.ts +1 -0
- package/dist/types/utils/oauth/deepseek.d.ts +10 -0
- package/dist/types/utils/oauth/firepass.d.ts +1 -0
- package/dist/types/utils/oauth/fireworks.d.ts +1 -0
- package/dist/types/utils/oauth/fugu.d.ts +1 -0
- package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
- package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
- package/dist/types/utils/oauth/glm-zcode.d.ts +71 -0
- package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
- package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
- package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
- package/dist/types/utils/oauth/huggingface.d.ts +19 -0
- package/dist/types/utils/oauth/index.d.ts +39 -0
- package/dist/types/utils/oauth/kagi.d.ts +17 -0
- package/dist/types/utils/oauth/kilo.d.ts +5 -0
- package/dist/types/utils/oauth/kimi.d.ts +17 -0
- package/dist/types/utils/oauth/kiro.d.ts +71 -0
- package/dist/types/utils/oauth/litellm.d.ts +18 -0
- package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
- package/dist/types/utils/oauth/mara.d.ts +1 -0
- package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
- package/dist/types/utils/oauth/moonshot.d.ts +1 -0
- package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
- package/dist/types/utils/oauth/nvidia.d.ts +18 -0
- package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
- package/dist/types/utils/oauth/ollama.d.ts +18 -0
- package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
- package/dist/types/utils/oauth/opencode.d.ts +18 -0
- package/dist/types/utils/oauth/opengateway.d.ts +1 -0
- package/dist/types/utils/oauth/openrouter.d.ts +1 -0
- package/dist/types/utils/oauth/parallel.d.ts +17 -0
- package/dist/types/utils/oauth/perplexity.d.ts +4 -0
- package/dist/types/utils/oauth/pkce.d.ts +8 -0
- package/dist/types/utils/oauth/qianfan.d.ts +17 -0
- package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
- package/dist/types/utils/oauth/sglang.d.ts +16 -0
- package/dist/types/utils/oauth/synthetic.d.ts +1 -0
- package/dist/types/utils/oauth/tavily.d.ts +17 -0
- package/dist/types/utils/oauth/together.d.ts +1 -0
- package/dist/types/utils/oauth/types.d.ts +56 -0
- package/dist/types/utils/oauth/venice.d.ts +18 -0
- package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/vllm.d.ts +16 -0
- package/dist/types/utils/oauth/xai.d.ts +30 -0
- package/dist/types/utils/oauth/xiaomi.d.ts +25 -0
- package/dist/types/utils/oauth/zai.d.ts +18 -0
- package/dist/types/utils/oauth/zenmux.d.ts +1 -0
- package/dist/types/utils/overflow.d.ts +14 -0
- package/dist/types/utils/parse-bind.d.ts +26 -0
- package/dist/types/utils/provider-response.d.ts +6 -0
- package/dist/types/utils/provider-safety-stop.d.ts +8 -0
- package/dist/types/utils/proxy.d.ts +7 -0
- package/dist/types/utils/retry-after.d.ts +3 -0
- package/dist/types/utils/retry-budget.d.ts +1 -0
- package/dist/types/utils/retry.d.ts +29 -0
- package/dist/types/utils/schema/adapt.d.ts +24 -0
- package/dist/types/utils/schema/compatibility.d.ts +30 -0
- package/dist/types/utils/schema/dereference.d.ts +11 -0
- package/dist/types/utils/schema/draft.d.ts +10 -0
- package/dist/types/utils/schema/equality.d.ts +4 -0
- package/dist/types/utils/schema/fields.d.ts +49 -0
- package/dist/types/utils/schema/index.d.ts +14 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
- package/dist/types/utils/schema/meta-validator.d.ts +2 -0
- package/dist/types/utils/schema/normalize.d.ts +93 -0
- package/dist/types/utils/schema/root-combinator.d.ts +12 -0
- package/dist/types/utils/schema/spill.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +25 -0
- package/dist/types/utils/schema/types.d.ts +4 -0
- package/dist/types/utils/schema/wire.d.ts +54 -0
- package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
- package/dist/types/utils/sse-debug.d.ts +10 -0
- package/dist/types/utils/tool-call-healing.d.ts +80 -0
- package/dist/types/utils/tool-choice-capability.d.ts +57 -0
- package/dist/types/utils/tool-choice.d.ts +50 -0
- package/dist/types/utils/validation.d.ts +17 -0
- package/dist/types/utils.d.ts +117 -0
- package/package.json +152 -0
- package/src/adapter-internals/provider-safety-stop.d.ts +45 -0
- package/src/adapter-internals/provider-safety-stop.ts +156 -0
- package/src/api-registry.d.ts +30 -0
- package/src/api-registry.ts +96 -0
- package/src/auth-broker/client.ts +444 -0
- package/src/auth-broker/index.ts +5 -0
- package/src/auth-broker/redact.ts +39 -0
- package/src/auth-broker/refresher.ts +130 -0
- package/src/auth-broker/remote-store.ts +1576 -0
- package/src/auth-broker/server.ts +764 -0
- package/src/auth-broker/types.ts +164 -0
- package/src/auth-broker/wire-schemas.ts +261 -0
- package/src/auth-gateway/http.ts +198 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +1315 -0
- package/src/auth-gateway/types.ts +160 -0
- package/src/auth-storage.ts +7312 -0
- package/src/cli.ts +269 -0
- package/src/codex-tools.d.ts +4 -0
- package/src/codex-tools.ts +24 -0
- package/src/context-cap-policy.d.ts +68 -0
- package/src/context-cap-policy.ts +123 -0
- package/src/core.ts +44 -0
- package/src/index.ts +61 -0
- package/src/model-cache.ts +236 -0
- package/src/model-manager.ts +744 -0
- package/src/model-pricing.d.ts +3 -0
- package/src/model-pricing.ts +68 -0
- package/src/model-retirements.d.ts +6 -0
- package/src/model-retirements.ts +19 -0
- package/src/model-thinking.d.ts +100 -0
- package/src/model-thinking.ts +1054 -0
- package/src/models.d.ts +21 -0
- package/src/models.json +94672 -0
- package/src/models.json.d.ts +9 -0
- package/src/models.ts +126 -0
- package/src/openai-completions-compat.d.ts +34 -0
- package/src/openai-completions-compat.ts +383 -0
- package/src/prompts/composer-bash-policy-recovery.md +1 -0
- package/src/prompts/cursor-composer-bash-policy-recovery.md +1 -0
- package/src/prompts/cursor-composer-edit-discipline.md +7 -0
- package/src/prompts/turn-aborted-guidance.md +4 -0
- package/src/provider-details.ts +90 -0
- package/src/provider-models/bundled-references.ts +38 -0
- package/src/provider-models/descriptors.ts +392 -0
- package/src/provider-models/google.ts +92 -0
- package/src/provider-models/index.ts +5 -0
- package/src/provider-models/ollama.ts +159 -0
- package/src/provider-models/openai-compat.ts +2920 -0
- package/src/provider-models/special.ts +185 -0
- package/src/providers/amazon-bedrock.d.ts +60 -0
- package/src/providers/amazon-bedrock.ts +939 -0
- package/src/providers/anthropic-messages-server-schema.ts +229 -0
- package/src/providers/anthropic-messages-server.ts +839 -0
- package/src/providers/anthropic.d.ts +280 -0
- package/src/providers/anthropic.ts +4421 -0
- package/src/providers/aws-credential-config.d.ts +19 -0
- package/src/providers/aws-credential-config.ts +179 -0
- package/src/providers/aws-credentials.d.ts +43 -0
- package/src/providers/aws-credentials.ts +457 -0
- package/src/providers/aws-eventstream.d.ts +38 -0
- package/src/providers/aws-eventstream.ts +185 -0
- package/src/providers/aws-sigv4.d.ts +55 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.d.ts +22 -0
- package/src/providers/azure-openai-responses.ts +447 -0
- package/src/providers/composer-discipline.d.ts +32 -0
- package/src/providers/composer-discipline.ts +95 -0
- package/src/providers/cursor/client-version.d.ts +10 -0
- package/src/providers/cursor/client-version.ts +10 -0
- package/src/providers/cursor/exec-modern.d.ts +98 -0
- package/src/providers/cursor/exec-modern.ts +497 -0
- package/src/providers/cursor/gen/agent_pb.d.ts +16769 -0
- package/src/providers/cursor/gen/agent_pb.ts +19780 -0
- package/src/providers/cursor/proto/agent.proto +4533 -0
- package/src/providers/cursor/proto/buf.gen.yaml +6 -0
- package/src/providers/cursor/proto/buf.yaml +17 -0
- package/src/providers/cursor-pi-args.d.ts +119 -0
- package/src/providers/cursor-pi-args.ts +187 -0
- package/src/providers/cursor.d.ts +72 -0
- package/src/providers/cursor.ts +3396 -0
- package/src/providers/dashscope-token-plan-headers.d.ts +57 -0
- package/src/providers/dashscope-token-plan-headers.ts +84 -0
- package/src/providers/error-message.d.ts +27 -0
- package/src/providers/error-message.ts +21 -0
- package/src/providers/github-copilot-headers.d.ts +40 -0
- package/src/providers/github-copilot-headers.ts +140 -0
- package/src/providers/gitlab-duo.d.ts +27 -0
- package/src/providers/gitlab-duo.ts +393 -0
- package/src/providers/google-auth.d.ts +26 -0
- package/src/providers/google-auth.ts +262 -0
- package/src/providers/google-gemini-cli.d.ts +75 -0
- package/src/providers/google-gemini-cli.ts +969 -0
- package/src/providers/google-gemini-headers.d.ts +43 -0
- package/src/providers/google-gemini-headers.ts +100 -0
- package/src/providers/google-shared.d.ts +183 -0
- package/src/providers/google-shared.ts +1105 -0
- package/src/providers/google-types.d.ts +138 -0
- package/src/providers/google-types.ts +167 -0
- package/src/providers/google-vertex.d.ts +11 -0
- package/src/providers/google-vertex.ts +124 -0
- package/src/providers/google.d.ts +4 -0
- package/src/providers/google.ts +41 -0
- package/src/providers/grammar.d.ts +1 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.d.ts +27 -0
- package/src/providers/kimi.ts +52 -0
- package/src/providers/kiro-api-key.d.ts +50 -0
- package/src/providers/kiro-api-key.ts +786 -0
- package/src/providers/kiro-codewhisperer.d.ts +11 -0
- package/src/providers/kiro-codewhisperer.ts +600 -0
- package/src/providers/mock.ts +526 -0
- package/src/providers/ollama.d.ts +41 -0
- package/src/providers/ollama.ts +645 -0
- package/src/providers/openai-anthropic-shim.d.ts +31 -0
- package/src/providers/openai-anthropic-shim.ts +156 -0
- package/src/providers/openai-bounded-rate-limits.d.ts +3 -0
- package/src/providers/openai-bounded-rate-limits.ts +57 -0
- package/src/providers/openai-chat-server-schema.ts +254 -0
- package/src/providers/openai-chat-server.ts +724 -0
- package/src/providers/openai-codex/constants.d.ts +26 -0
- package/src/providers/openai-codex/constants.ts +43 -0
- package/src/providers/openai-codex/request-transformer.d.ts +50 -0
- package/src/providers/openai-codex/request-transformer.ts +219 -0
- package/src/providers/openai-codex/response-handler.d.ts +18 -0
- package/src/providers/openai-codex/response-handler.ts +111 -0
- package/src/providers/openai-codex-responses.d.ts +71 -0
- package/src/providers/openai-codex-responses.ts +3288 -0
- package/src/providers/openai-completions-compat.d.ts +6 -0
- package/src/providers/openai-completions-compat.ts +6 -0
- package/src/providers/openai-completions.d.ts +35 -0
- package/src/providers/openai-completions.ts +2294 -0
- package/src/providers/openai-opencodex-responses.ts +174 -0
- package/src/providers/openai-request-transform.d.ts +4 -0
- package/src/providers/openai-request-transform.ts +136 -0
- package/src/providers/openai-responses-server-schema.ts +290 -0
- package/src/providers/openai-responses-server.ts +1268 -0
- package/src/providers/openai-responses-shared.d.ts +106 -0
- package/src/providers/openai-responses-shared.ts +1253 -0
- package/src/providers/openai-responses.d.ts +37 -0
- package/src/providers/openai-responses.ts +989 -0
- package/src/providers/pi-native-client.d.ts +29 -0
- package/src/providers/pi-native-client.ts +243 -0
- package/src/providers/pi-native-server.ts +488 -0
- package/src/providers/register-builtins.d.ts +59 -0
- package/src/providers/register-builtins.ts +544 -0
- package/src/providers/synthetic.d.ts +26 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.d.ts +33 -0
- package/src/providers/transform-messages.ts +408 -0
- package/src/providers/vision-guard.d.ts +8 -0
- package/src/providers/vision-guard.ts +31 -0
- package/src/rate-limit-utils.d.ts +19 -0
- package/src/rate-limit-utils.ts +102 -0
- package/src/stream.d.ts +45 -0
- package/src/stream.ts +1306 -0
- package/src/types.d.ts +1073 -0
- package/src/types.ts +1305 -0
- package/src/usage/claude.ts +449 -0
- package/src/usage/gemini.ts +250 -0
- package/src/usage/github-copilot.ts +421 -0
- package/src/usage/google-antigravity.ts +201 -0
- package/src/usage/grok-cli.ts +259 -0
- package/src/usage/kimi.ts +285 -0
- package/src/usage/minimax-code.ts +31 -0
- package/src/usage/openai-codex.ts +503 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/zai.ts +247 -0
- package/src/usage.ts +190 -0
- package/src/utils/abort.d.ts +19 -0
- package/src/utils/abort.ts +51 -0
- package/src/utils/anthropic-auth.ts +95 -0
- package/src/utils/block-symbols.d.ts +6 -0
- package/src/utils/block-symbols.ts +11 -0
- package/src/utils/discovery/antigravity.ts +275 -0
- package/src/utils/discovery/codex.ts +362 -0
- package/src/utils/discovery/cursor.ts +388 -0
- package/src/utils/discovery/gemini.ts +248 -0
- package/src/utils/discovery/index.ts +4 -0
- package/src/utils/discovery/openai-compatible.ts +379 -0
- package/src/utils/event-stream.d.ts +41 -0
- package/src/utils/event-stream.ts +269 -0
- package/src/utils/fallback-transport.d.ts +110 -0
- package/src/utils/fallback-transport.ts +411 -0
- package/src/utils/fireworks-model-id.d.ts +10 -0
- package/src/utils/fireworks-model-id.ts +30 -0
- package/src/utils/foundry.d.ts +11 -0
- package/src/utils/foundry.ts +18 -0
- package/src/utils/h2-fetch.ts +60 -0
- package/src/utils/http-inspector.d.ts +59 -0
- package/src/utils/http-inspector.ts +380 -0
- package/src/utils/idle-iterator.d.ts +122 -0
- package/src/utils/idle-iterator.ts +410 -0
- package/src/utils/json-parse.d.ts +98 -0
- package/src/utils/json-parse.ts +607 -0
- package/src/utils/oauth/alibaba-token-plan.ts +60 -0
- package/src/utils/oauth/anthropic.ts +233 -0
- package/src/utils/oauth/api-key-login.ts +98 -0
- package/src/utils/oauth/api-key-validation.ts +344 -0
- package/src/utils/oauth/bizrouter.ts +15 -0
- package/src/utils/oauth/callback-server.d.ts +80 -0
- package/src/utils/oauth/callback-server.ts +359 -0
- package/src/utils/oauth/cerebras.ts +16 -0
- package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
- package/src/utils/oauth/commandcode.ts +17 -0
- package/src/utils/oauth/cursor.ts +157 -0
- package/src/utils/oauth/deepinfra.ts +15 -0
- package/src/utils/oauth/deepseek.ts +53 -0
- package/src/utils/oauth/firepass.ts +24 -0
- package/src/utils/oauth/fireworks.ts +15 -0
- package/src/utils/oauth/fugu.ts +15 -0
- package/src/utils/oauth/github-copilot.d.ts +38 -0
- package/src/utils/oauth/github-copilot.ts +362 -0
- package/src/utils/oauth/gitlab-duo.ts +123 -0
- package/src/utils/oauth/glm-zcode.d.ts +71 -0
- package/src/utils/oauth/glm-zcode.ts +433 -0
- package/src/utils/oauth/google-antigravity.ts +200 -0
- package/src/utils/oauth/google-gemini-cli.ts +256 -0
- package/src/utils/oauth/google-oauth-shared.ts +110 -0
- package/src/utils/oauth/huggingface.ts +62 -0
- package/src/utils/oauth/index.ts +558 -0
- package/src/utils/oauth/kagi.ts +47 -0
- package/src/utils/oauth/kilo.ts +87 -0
- package/src/utils/oauth/kimi.d.ts +17 -0
- package/src/utils/oauth/kimi.ts +275 -0
- package/src/utils/oauth/kiro.ts +448 -0
- package/src/utils/oauth/litellm.ts +47 -0
- package/src/utils/oauth/lm-studio.ts +38 -0
- package/src/utils/oauth/mara.ts +16 -0
- package/src/utils/oauth/minimax-code.ts +78 -0
- package/src/utils/oauth/moonshot.ts +16 -0
- package/src/utils/oauth/nanogpt.ts +15 -0
- package/src/utils/oauth/nvidia.ts +70 -0
- package/src/utils/oauth/oauth.html +199 -0
- package/src/utils/oauth/ollama-cloud.ts +28 -0
- package/src/utils/oauth/ollama.ts +47 -0
- package/src/utils/oauth/openai-codex.ts +299 -0
- package/src/utils/oauth/opencode.ts +49 -0
- package/src/utils/oauth/opengateway.ts +15 -0
- package/src/utils/oauth/openrouter.ts +16 -0
- package/src/utils/oauth/parallel.ts +46 -0
- package/src/utils/oauth/perplexity.ts +225 -0
- package/src/utils/oauth/pkce.ts +18 -0
- package/src/utils/oauth/qianfan.ts +58 -0
- package/src/utils/oauth/qwen-portal.ts +60 -0
- package/src/utils/oauth/sglang.ts +42 -0
- package/src/utils/oauth/synthetic.ts +15 -0
- package/src/utils/oauth/tavily.ts +46 -0
- package/src/utils/oauth/together.ts +16 -0
- package/src/utils/oauth/types.d.ts +56 -0
- package/src/utils/oauth/types.ts +122 -0
- package/src/utils/oauth/venice.ts +59 -0
- package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
- package/src/utils/oauth/vllm.ts +42 -0
- package/src/utils/oauth/xai.ts +246 -0
- package/src/utils/oauth/xiaomi.ts +199 -0
- package/src/utils/oauth/zai.ts +60 -0
- package/src/utils/oauth/zenmux.ts +15 -0
- package/src/utils/overflow.ts +275 -0
- package/src/utils/parse-bind.ts +81 -0
- package/src/utils/provider-response.d.ts +6 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/provider-safety-stop.ts +8 -0
- package/src/utils/proxy.d.ts +7 -0
- package/src/utils/proxy.ts +652 -0
- package/src/utils/retry-after.d.ts +3 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry-budget.d.ts +1 -0
- package/src/utils/retry-budget.ts +4 -0
- package/src/utils/retry.d.ts +29 -0
- package/src/utils/retry.ts +67 -0
- package/src/utils/schema/CONSTRAINTS.md +164 -0
- package/src/utils/schema/adapt.d.ts +24 -0
- package/src/utils/schema/adapt.ts +36 -0
- package/src/utils/schema/compatibility.d.ts +30 -0
- package/src/utils/schema/compatibility.ts +435 -0
- package/src/utils/schema/dereference.d.ts +11 -0
- package/src/utils/schema/dereference.ts +98 -0
- package/src/utils/schema/draft.d.ts +10 -0
- package/src/utils/schema/draft.ts +341 -0
- package/src/utils/schema/equality.d.ts +4 -0
- package/src/utils/schema/equality.ts +97 -0
- package/src/utils/schema/fields.d.ts +49 -0
- package/src/utils/schema/fields.ts +190 -0
- package/src/utils/schema/index.d.ts +14 -0
- package/src/utils/schema/index.ts +14 -0
- package/src/utils/schema/json-schema-validator.d.ts +12 -0
- package/src/utils/schema/json-schema-validator.ts +577 -0
- package/src/utils/schema/meta-validator.d.ts +2 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.d.ts +93 -0
- package/src/utils/schema/normalize.ts +1588 -0
- package/src/utils/schema/root-combinator.d.ts +12 -0
- package/src/utils/schema/root-combinator.ts +143 -0
- package/src/utils/schema/spill.d.ts +8 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.d.ts +25 -0
- package/src/utils/schema/stamps.ts +97 -0
- package/src/utils/schema/types.d.ts +4 -0
- package/src/utils/schema/types.ts +11 -0
- package/src/utils/schema/wire.d.ts +54 -0
- package/src/utils/schema/wire.ts +213 -0
- package/src/utils/schema/zod-decontaminate.d.ts +31 -0
- package/src/utils/schema/zod-decontaminate.ts +331 -0
- package/src/utils/sse-debug.d.ts +10 -0
- package/src/utils/sse-debug.ts +289 -0
- package/src/utils/tool-call-healing.d.ts +80 -0
- package/src/utils/tool-call-healing.ts +298 -0
- package/src/utils/tool-choice-capability.d.ts +57 -0
- package/src/utils/tool-choice-capability.ts +633 -0
- package/src/utils/tool-choice.d.ts +50 -0
- package/src/utils/tool-choice.ts +99 -0
- package/src/utils/validation.ts +1080 -0
- package/src/utils.d.ts +117 -0
- package/src/utils.ts +523 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { type DescriptionSpillFormat } from "./spill";
|
|
2
|
+
import { type JsonObject } from "./types";
|
|
3
|
+
export type ResidualSchemaIncompatibility = "type-array" | "type-null" | "nullable" | "combiners";
|
|
4
|
+
export interface NormalizeSchemaOptions {
|
|
5
|
+
unsupportedFields: (key: string) => boolean;
|
|
6
|
+
normalizeFieldNames: boolean;
|
|
7
|
+
collapseNullFields: boolean;
|
|
8
|
+
normalizeTypeArrayToNullable: boolean;
|
|
9
|
+
stripNullableKeyword: boolean;
|
|
10
|
+
autoPropertyOrdering: boolean;
|
|
11
|
+
ensureObjectProperties: boolean;
|
|
12
|
+
liftStrippedToDescription: false | {
|
|
13
|
+
keys?: (key: string) => boolean;
|
|
14
|
+
format?: DescriptionSpillFormat;
|
|
15
|
+
};
|
|
16
|
+
mergeObjectCombiners: boolean;
|
|
17
|
+
collapseSameTypeCombiners: boolean;
|
|
18
|
+
collapseMixedTypeCombiners: boolean;
|
|
19
|
+
stripResidualCombinersFixpoint: boolean;
|
|
20
|
+
extractNullableFromUnions: boolean;
|
|
21
|
+
rejectResidualIncompatibilities?: ReadonlyArray<ResidualSchemaIncompatibility>;
|
|
22
|
+
validateAndFallback?: {
|
|
23
|
+
fallback: unknown;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** Copy all keys from a schema except the specified combiner key. */
|
|
27
|
+
export declare function copySchemaWithout(schema: JsonObject, combiner: string): JsonObject;
|
|
28
|
+
/**
|
|
29
|
+
* Recursively strip any remaining anyOf/oneOf that same-type or mixed-type
|
|
30
|
+
* collapse can handle. This is needed because object-combiner merging can
|
|
31
|
+
* create new anyOf in merged subtrees after child normalization already ran.
|
|
32
|
+
*/
|
|
33
|
+
export declare function stripResidualCombiners(value: unknown, epoch?: number): unknown;
|
|
34
|
+
export declare function normalizeSchema(value: unknown, options: NormalizeSchemaOptions): unknown;
|
|
35
|
+
export declare function normalizeSchemaForGoogle(value: unknown): unknown;
|
|
36
|
+
export declare function normalizeSchemaForCCA(value: unknown): unknown;
|
|
37
|
+
export declare function normalizeSchemaForMCP(value: unknown): unknown;
|
|
38
|
+
/**
|
|
39
|
+
* OpenAI Responses rejects `oneOf` in tool schemas even when strict mode is
|
|
40
|
+
* disabled, and rejects every schema node with `type: "object"` unless it has
|
|
41
|
+
* a `properties` member. Normalize only schema-valued positions so literal
|
|
42
|
+
* payloads under `enum`, `const`, `default`, and `examples` remain unchanged.
|
|
43
|
+
*
|
|
44
|
+
* Identity-preserving: returns the input reference unchanged when no rewrite
|
|
45
|
+
* occurred so callers can dedupe via reference equality (and the strict-mode
|
|
46
|
+
* cache stays warm). If a node has both `oneOf` and `anyOf`, the two are
|
|
47
|
+
* concatenated (the wire payload accepts a single union; preserving both
|
|
48
|
+
* would not survive).
|
|
49
|
+
*/
|
|
50
|
+
export declare function sanitizeSchemaForOpenAIResponses(schema: JsonObject): JsonObject;
|
|
51
|
+
/**
|
|
52
|
+
* Alias for {@link sanitizeSchemaForOpenAIResponses} matching the
|
|
53
|
+
* `normalizeSchemaFor*` dispatcher naming used elsewhere in this module.
|
|
54
|
+
*/
|
|
55
|
+
export declare const normalizeSchemaForOpenAIResponses: (schema: JsonObject) => JsonObject;
|
|
56
|
+
/**
|
|
57
|
+
* First pass of strict-mode preparation.
|
|
58
|
+
*
|
|
59
|
+
* Rewrites everything strict mode forbids into something it accepts:
|
|
60
|
+
* - Drops non-structural keywords (`format`, `pattern`, `examples`, …),
|
|
61
|
+
* `const`, `nullable`, and `additionalProperties` (re-added by
|
|
62
|
+
* `enforceStrictSchema` as `false`).
|
|
63
|
+
* - `type: [a, b]` → `anyOf: [{type: a, …}, {type: b, …}]`, copying only the
|
|
64
|
+
* keywords each variant can use (e.g. `properties` stays only on the
|
|
65
|
+
* object variant).
|
|
66
|
+
* - `const` → single-entry `enum`.
|
|
67
|
+
* - Description carries a `(default: X)` suffix so the model still sees the
|
|
68
|
+
* documented default after the keyword is stripped.
|
|
69
|
+
* - `nullable: true` wraps the whole node in `anyOf:[T,{type:"null"}]`.
|
|
70
|
+
*
|
|
71
|
+
* Recurses into properties, items, prefixItems, combinators, and $defs. The
|
|
72
|
+
* `cache` WeakMap dedupes shared subgraphs; the `epoch` is the cycle guard.
|
|
73
|
+
*/
|
|
74
|
+
export declare function sanitizeSchemaForStrictMode(schema: Record<string, unknown>, epoch?: number, cache?: WeakMap<Record<string, unknown>, Record<string, unknown>>, root?: Record<string, unknown>): Record<string, unknown>;
|
|
75
|
+
/**
|
|
76
|
+
* Recursively enforces JSON Schema constraints required by OpenAI/OpenAI code backend strict mode:
|
|
77
|
+
* - `additionalProperties: false` on every object node
|
|
78
|
+
* - every key in `properties` present in `required`
|
|
79
|
+
*
|
|
80
|
+
* Properties absent from the original `required` array were TypeBox-optional.
|
|
81
|
+
* They are made nullable (`anyOf: [T, { type: "null" }]`) so the model can
|
|
82
|
+
* signal omission by outputting null rather than omitting the key entirely.
|
|
83
|
+
*
|
|
84
|
+
* @throws {Error} When a schema node has no `type`, array-based combinator
|
|
85
|
+
* (`anyOf`/`allOf`/`oneOf`), object-based combinator (`not`), or `$ref` —
|
|
86
|
+
* i.e. the node is not representable in strict mode. Prefer
|
|
87
|
+
* {@link tryEnforceStrictSchema} which catches this and degrades gracefully.
|
|
88
|
+
*/
|
|
89
|
+
export declare function enforceStrictSchema(schema: Record<string, unknown>, cache?: WeakMap<Record<string, unknown>, Record<string, unknown>>): Record<string, unknown>;
|
|
90
|
+
export declare function tryEnforceStrictSchema(schema: Record<string, unknown>): {
|
|
91
|
+
schema: Record<string, unknown>;
|
|
92
|
+
strict: boolean;
|
|
93
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** True when a JSON Schema node describes an object (explicit `type` or `properties`). */
|
|
2
|
+
export declare function isJsonSchemaObjectNode(schema: Record<string, unknown>): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Flatten a provider-emitted tool ROOT whose top level is a `oneOf`/`anyOf`/`allOf`
|
|
5
|
+
* combinator into one `type: "object"` schema: merge object-branch properties,
|
|
6
|
+
* derive the discriminant (`action`) enum, keep the common required set, and demote
|
|
7
|
+
* leftover combinators plus per-branch guidance into the description. Nested
|
|
8
|
+
* combinators (inside individual properties) are left untouched.
|
|
9
|
+
*
|
|
10
|
+
* Idempotent: a root that already lacks top-level combinators is returned unchanged.
|
|
11
|
+
*/
|
|
12
|
+
export declare function flattenToolRootCombinators(schema: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { JsonObject } from "./types";
|
|
2
|
+
export type DescriptionSpillFormat = "spill" | "paren";
|
|
3
|
+
/**
|
|
4
|
+
* Demote stripped JSON Schema keywords into a node's `description` so the model
|
|
5
|
+
* still receives the constraint as natural-language context after the wire
|
|
6
|
+
* schema drops it.
|
|
7
|
+
*/
|
|
8
|
+
export declare function spillToDescription(node: JsonObject, entries: ReadonlyArray<readonly [string, unknown]>, format?: DescriptionSpillFormat): void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symbol-keyed lazy memoization stamped directly onto the host object.
|
|
3
|
+
*
|
|
4
|
+
* Faster than a module-level `WeakMap` in V8/JSC because the symbol slot is
|
|
5
|
+
* resolved through the object's hidden class instead of a side-table hash
|
|
6
|
+
* lookup. The slot is defined as a non-enumerable property so the stamp
|
|
7
|
+
* does not leak through `{...spread}`, `Object.keys`, `JSON.stringify`, or
|
|
8
|
+
* `toEqual`-style deep equality.
|
|
9
|
+
*
|
|
10
|
+
* Caveats: the stamp lives as long as the host object, even after callers
|
|
11
|
+
* release their references to the cached value — only use this for caches
|
|
12
|
+
* whose lifetime should match the host. Frozen hosts will throw on write in
|
|
13
|
+
* strict mode; callers that may receive frozen input must handle that.
|
|
14
|
+
*/
|
|
15
|
+
export declare function stamp<T extends object, V>(target: T, key: symbol, compute: (target: T) => V): V;
|
|
16
|
+
export declare function epochNext(): number;
|
|
17
|
+
/**
|
|
18
|
+
* Marks `target` as visited for this `epoch`. Returns `true` the first time
|
|
19
|
+
* it is called for a given (target, epoch) pair and `false` on every
|
|
20
|
+
* subsequent call within the same epoch.
|
|
21
|
+
*/
|
|
22
|
+
export declare function once<T extends object>(target: T, epoch: number): boolean;
|
|
23
|
+
/** Returns `true` on first entry, `false` if `target` is already on the current path. */
|
|
24
|
+
export declare function enter<T extends object>(target: T): boolean;
|
|
25
|
+
export declare function exit<T extends object>(target: T): void;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type JsonObject = Record<string, unknown>;
|
|
2
|
+
export declare function isJsonObject(value: unknown): value is JsonObject;
|
|
3
|
+
/** True when `value` is a plain JSON object with no own enumerable keys. */
|
|
4
|
+
export declare function isJsonObjectEmpty(value: JsonObject): boolean;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the wire (JSON Schema) representation of a tool's parameters and
|
|
3
|
+
* convert TypeBox-style schemas into Zod for internal validation.
|
|
4
|
+
*
|
|
5
|
+
* Tools may author parameters in two shapes:
|
|
6
|
+
* 1. Zod (canonical going forward) — converted to JSON Schema on demand.
|
|
7
|
+
* 2. TypeBox / plain JSON Schema (legacy + extension compat) — upgraded to
|
|
8
|
+
* draft 2020-12 without converting through Zod.
|
|
9
|
+
*
|
|
10
|
+
* Both are normalized at the boundary so providers and validators see the same
|
|
11
|
+
* JSON Schema dialect.
|
|
12
|
+
*/
|
|
13
|
+
import { type ZodType } from "zod/v4";
|
|
14
|
+
import type { Tool } from "../../types";
|
|
15
|
+
/**
|
|
16
|
+
* True when `value` is a live Zod schema instance.
|
|
17
|
+
*
|
|
18
|
+
* The check is stricter than "has a `_zod` property" because a JSON
|
|
19
|
+
* round-trip preserves the `_zod` key as a plain object and would otherwise
|
|
20
|
+
* fool the predicate — see issue #1101, where MCP servers ship
|
|
21
|
+
* `JSON.stringify(zodSchemaInstance)` as a tool's `inputSchema` and the
|
|
22
|
+
* resulting plain object then explodes `z.toJSONSchema` because the prototype
|
|
23
|
+
* (and every Zod parsing method) is gone.
|
|
24
|
+
*
|
|
25
|
+
* Live Zod instances always carry a `.parse` function on the prototype;
|
|
26
|
+
* impostors do not.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isZodSchema(value: unknown): value is ZodType;
|
|
29
|
+
/**
|
|
30
|
+
* Normalize `{}` (empty JSON Schema = `z.unknown()` / unconstrained value) to
|
|
31
|
+
* boolean `true` in every schema-valued position. JSON Schema draft 2020-12
|
|
32
|
+
* §4.3.1: `{}` and `true` are semantically equivalent ("any JSON value").
|
|
33
|
+
* Grammar-constrained samplers (llama.cpp, etc.) treat the object form as
|
|
34
|
+
* "generate an empty object" rather than "any JSON value", causing open-typed
|
|
35
|
+
* fields like `extra.title` (from `z.record(z.string(), z.unknown())`) to
|
|
36
|
+
* always emit `{}` instead of the intended string/number/etc. (issue #1179).
|
|
37
|
+
*
|
|
38
|
+
* Mutates in place. Provider-agnostic — applied to every tool wire schema so
|
|
39
|
+
* Anthropic, Google, OpenAI, Ollama, Bedrock, and Cursor all see the
|
|
40
|
+
* normalized form, regardless of whether the source was Zod or TypeBox.
|
|
41
|
+
*/
|
|
42
|
+
export declare function normalizeEmptySchemas(node: unknown): void;
|
|
43
|
+
/** Convert a Zod schema into the JSON Schema shape providers consume. */
|
|
44
|
+
export declare function zodToWireSchema(schema: ZodType): Record<string, unknown>;
|
|
45
|
+
/**
|
|
46
|
+
* Resolve a tool's parameters to a JSON Schema object suitable for sending
|
|
47
|
+
* over the wire. Zod schemas are converted (and cached); legacy TypeBox / raw
|
|
48
|
+
* JSON Schema parameters are upgraded to draft 2020-12 (and cached).
|
|
49
|
+
*
|
|
50
|
+
* Both branches finish with `normalizeEmptySchemas` so every provider —
|
|
51
|
+
* OpenAI, Anthropic, Google, Ollama, Bedrock, Cursor — sees `{}` normalized
|
|
52
|
+
* to `true` in schema-valued positions (issue #1179).
|
|
53
|
+
*/
|
|
54
|
+
export declare function toolWireSchema(tool: Tool): Record<string, unknown>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defensive rewrite for nodes that look like `JSON.stringify(zodSchemaInstance)`
|
|
3
|
+
* output rather than JSON Schema. MCP servers using Zod 4 sometimes ship a
|
|
4
|
+
* serialised schema instance directly as a tool's `inputSchema`, because the
|
|
5
|
+
* fields Zod surfaces on its instances (`type`, `enum`, `options`, `def`) shadow
|
|
6
|
+
* (and clash with) JSON Schema keywords. The resulting payload is neither valid
|
|
7
|
+
* Zod nor valid JSON Schema 2020-12 and Anthropic's strict validator rejects
|
|
8
|
+
* the whole tool list.
|
|
9
|
+
*
|
|
10
|
+
* Symptoms we've observed (gitnexus_impact.direction):
|
|
11
|
+
* {
|
|
12
|
+
* def: { type: "enum", entries: { upstream: "upstream", ... } },
|
|
13
|
+
* type: "enum", // <- invalid `type` value
|
|
14
|
+
* enum: { upstream: "upstream", ... }, // <- `enum` MUST be an array
|
|
15
|
+
* options: ["upstream", "downstream"],
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* This module recognises the shape (`def.type === node.type` and `def.type` is
|
|
19
|
+
* a known Zod kind) and rewrites it to clean JSON Schema where deterministic.
|
|
20
|
+
* For Zod kinds we don't fully model, we strip the toxic siblings (`def`,
|
|
21
|
+
* `options`, object-shaped `enum`) and drop an invalid `type` so the remainder
|
|
22
|
+
* passes meta-schema validation as a permissive node.
|
|
23
|
+
*
|
|
24
|
+
* Pure / identity-preserving: returns the input reference when nothing changes.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Walks a JSON value and rewrites every Zod-instance-shaped node into clean
|
|
28
|
+
* JSON Schema 2020-12. Identity-preserving when no rewrite fires. Tolerates
|
|
29
|
+
* self-referential graphs — a revisited node returns as-is.
|
|
30
|
+
*/
|
|
31
|
+
export declare function decontaminateZodInstance(value: unknown): unknown;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ServerSentEvent } from "@vib-rato/utils";
|
|
2
|
+
import type { RawSseEvent } from "../types";
|
|
3
|
+
type FetchFunction = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
4
|
+
type FetchWithPreconnect = FetchFunction & {
|
|
5
|
+
preconnect?: typeof fetch.preconnect;
|
|
6
|
+
};
|
|
7
|
+
type RawSseObserver = (event: RawSseEvent) => void;
|
|
8
|
+
export declare function notifyRawSseEvent(observer: RawSseObserver | undefined, event: ServerSentEvent | RawSseEvent): void;
|
|
9
|
+
export declare function wrapFetchForSseDebug(fetchImpl: FetchWithPreconnect, observer: RawSseObserver | undefined): FetchWithPreconnect;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming-safe filter for the Kimi K2 chat-template "tool-call section"
|
|
3
|
+
* grammar.
|
|
4
|
+
*
|
|
5
|
+
* Some providers hosting Kimi K2 (the native `kimi-code` API, OpenRouter,
|
|
6
|
+
* Fireworks, and others) leak the raw chat-template special tokens into
|
|
7
|
+
* `delta.content` instead of emitting structured `tool_calls`. Visually
|
|
8
|
+
* that looks like:
|
|
9
|
+
*
|
|
10
|
+
* <|tool_calls_section_begin|>
|
|
11
|
+
* <|tool_call_begin|>functions.read:0<|tool_call_argument_begin|>{"path":"foo"}<|tool_call_end|>
|
|
12
|
+
* <|tool_calls_section_end|>
|
|
13
|
+
*
|
|
14
|
+
* Without healing, the user sees the raw markers and the agent loop never
|
|
15
|
+
* sees a tool call. This module reconstructs the embedded calls and strips
|
|
16
|
+
* the markers from visible text. It is stream-aware: any partial token at
|
|
17
|
+
* the end of a chunk is held back until the next chunk arrives.
|
|
18
|
+
*/
|
|
19
|
+
import { type UnicodeEscapeEvidence } from "./json-parse";
|
|
20
|
+
export interface HealedToolCall {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly arguments: string;
|
|
24
|
+
/**
|
|
25
|
+
* Whether the raw leaked payload carried unsafe Unicode argument data.
|
|
26
|
+
* Captured before the normalizing round-trip below, which would otherwise
|
|
27
|
+
* erase malformed escape evidence. Valid `\uXXXX` spellings decode
|
|
28
|
+
* canonically and leave this false.
|
|
29
|
+
*/
|
|
30
|
+
readonly escapedNonAsciiArguments: boolean;
|
|
31
|
+
readonly escapedUnicodeArgumentEvidence?: UnicodeEscapeEvidence;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* State machine that consumes streamed text, emits visible text with all
|
|
35
|
+
* Kimi tool-call markers stripped, and accumulates the embedded tool calls
|
|
36
|
+
* for the caller to drain after each `feed()`.
|
|
37
|
+
*
|
|
38
|
+
* One instance per stream. Feed only the channel that may carry leaked
|
|
39
|
+
* markers (typically `delta.content`); mixing reasoning + content into the
|
|
40
|
+
* same accumulator corrupts the holdback buffer if both channels race in
|
|
41
|
+
* the same chunk.
|
|
42
|
+
*/
|
|
43
|
+
export declare class ToolCallHealer {
|
|
44
|
+
#private;
|
|
45
|
+
/**
|
|
46
|
+
* Feed a chunk of streamed text. Returns the portion safe to emit
|
|
47
|
+
* downstream (with all tokens stripped). Any partial token suffix is
|
|
48
|
+
* held back until the next chunk arrives or {@link flushPending} is
|
|
49
|
+
* called.
|
|
50
|
+
*/
|
|
51
|
+
feed(text: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* Like {@link feed}, but discards any tool calls that the chunk completes.
|
|
54
|
+
* Used when the upstream provider also emits structured `delta.tool_calls`
|
|
55
|
+
* for the same chunk: the healer still strips leaked marker text from the
|
|
56
|
+
* visible output, but the structured payload remains the single source of
|
|
57
|
+
* truth for the call list.
|
|
58
|
+
*/
|
|
59
|
+
consumeWithoutCalls(text: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Drain accumulated tool calls. The internal list is cleared so a
|
|
62
|
+
* subsequent section in the same stream (rare) yields fresh calls.
|
|
63
|
+
*/
|
|
64
|
+
drainCompleted(): HealedToolCall[];
|
|
65
|
+
/**
|
|
66
|
+
* Flush any held-back fragment when the stream ends. If we were mid-call
|
|
67
|
+
* the partial is dropped (emitting raw token bytes would surface markers
|
|
68
|
+
* to the user); otherwise the fragment is returned verbatim so a literal
|
|
69
|
+
* `<|` in prose is not silently lost.
|
|
70
|
+
*/
|
|
71
|
+
flushPending(): string;
|
|
72
|
+
/** True once any tool-call section in this stream has fully closed. */
|
|
73
|
+
get sectionClosed(): boolean;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Cheap test for whether a given model is known to leak Kimi-K2 chat-template
|
|
77
|
+
* tool-call tokens into visible text. Used to gate the per-stream healer so
|
|
78
|
+
* non-Kimi providers do not pay for the scan.
|
|
79
|
+
*/
|
|
80
|
+
export declare function modelMayLeakKimiToolCalls(provider: string, modelId: string): boolean;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Api, Model, ToolChoice, ToolChoiceCompat, ToolChoiceSupport, ToolChoiceSupportSource } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Claude Mythos accepts tools but rejects forced tool use (Anthropic 400:
|
|
4
|
+
* "tool_choice forces tool use is not compatible with this model"). Catalog
|
|
5
|
+
* generation and dynamic discovery use this to default `toolChoiceSupport`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isClaudeForcedToolChoiceIncapableModelId(modelId: string): boolean;
|
|
8
|
+
/** Derives the effective static tool-choice support from compatibility flags. */
|
|
9
|
+
export declare function deriveToolChoiceSupport(compat: ToolChoiceCompat | undefined): {
|
|
10
|
+
support: ToolChoiceSupport;
|
|
11
|
+
source: "static" | "derived";
|
|
12
|
+
};
|
|
13
|
+
/** Returns the registry key used for runtime tool-choice capability overrides. */
|
|
14
|
+
export declare function toolChoiceRegistryKey(model: Model<Api>): string;
|
|
15
|
+
/** Returns the current runtime tool-choice capability override for a model. */
|
|
16
|
+
export declare function getToolChoiceCapabilityOverride(model: Model<Api>): ToolChoiceSupport | undefined;
|
|
17
|
+
/** Clears runtime tool-choice capability overrides for tests. */
|
|
18
|
+
export declare function clearToolChoiceIncapabilityRegistryForTests(): void;
|
|
19
|
+
/** Overrides durable-cache dependencies for isolated tests. */
|
|
20
|
+
export declare function configureToolChoiceCapabilityCacheForTests(options?: {
|
|
21
|
+
path?: string;
|
|
22
|
+
now?: () => number;
|
|
23
|
+
beforeExpiredDelete?: () => void;
|
|
24
|
+
beforeMalformedDelete?: () => void;
|
|
25
|
+
onCacheOpen?: () => void;
|
|
26
|
+
simulateOperationError?: () => Error | undefined;
|
|
27
|
+
beforeCorruptRetire?: () => void;
|
|
28
|
+
beforeLockExactUnlink?: (lockPath: string) => void;
|
|
29
|
+
}): void;
|
|
30
|
+
/** Records a discovered maximum supported tool-choice level for a model. */
|
|
31
|
+
export declare function markToolChoiceIncapability(model: Model<Api>, maxSupport: ToolChoiceSupport, reason?: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Resolves a requested tool_choice against static and runtime capability limits.
|
|
34
|
+
* `compat` overrides `model.compat` for transports that layer URL/provider
|
|
35
|
+
* detection on top of explicit model overrides (e.g. resolveOpenAICompat).
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveToolChoice(model: Model<Api>, requested: ToolChoice | undefined, compat?: ToolChoiceCompat): ResolveToolChoiceResult;
|
|
38
|
+
/** Detects provider errors indicating forced tool_choice is unsupported. */
|
|
39
|
+
export declare function isForcedToolChoiceUnsupportedError(error: unknown, sentForcedToolChoice: boolean): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Detects Codex's statusless SSE rejection for a named function tool choice.
|
|
42
|
+
* This is intentionally separate from the shared HTTP-400 classifier.
|
|
43
|
+
*/
|
|
44
|
+
export declare function isCodexStatuslessNamedToolChoiceNotFoundError(error: unknown, forcedToolName: string | undefined, sentToolNames: readonly string[]): boolean;
|
|
45
|
+
export type { ToolChoiceCompat, ToolChoiceSupport, ToolChoiceSupportSource } from "../types";
|
|
46
|
+
export interface ResolveToolChoiceResult {
|
|
47
|
+
requestedChoice: ToolChoice | undefined;
|
|
48
|
+
requestedLevel: ToolChoiceSupport;
|
|
49
|
+
resolvedChoice: ToolChoice | undefined;
|
|
50
|
+
resolvedLevel: ToolChoiceSupport;
|
|
51
|
+
support: ToolChoiceSupport;
|
|
52
|
+
supportSource: ToolChoiceSupportSource;
|
|
53
|
+
degraded: boolean;
|
|
54
|
+
reason?: string;
|
|
55
|
+
registryKey: string;
|
|
56
|
+
targetToolName?: string;
|
|
57
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for mapping unified ToolChoice to provider-specific formats.
|
|
3
|
+
*/
|
|
4
|
+
import type { ToolChoice } from "../types";
|
|
5
|
+
/** OpenAI Completions API tool choice format */
|
|
6
|
+
export type OpenAICompletionsToolChoice = "auto" | "none" | "required" | {
|
|
7
|
+
type: "function";
|
|
8
|
+
function: {
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
11
|
+
} | undefined;
|
|
12
|
+
/** OpenAI Responses API tool choice format (flat structure) */
|
|
13
|
+
export type OpenAIResponsesToolChoice = "auto" | "none" | "required" | {
|
|
14
|
+
type: "function";
|
|
15
|
+
name: string;
|
|
16
|
+
} | {
|
|
17
|
+
type: "custom";
|
|
18
|
+
name: string;
|
|
19
|
+
} | undefined;
|
|
20
|
+
/** Anthropic-compatible tool choice format */
|
|
21
|
+
export type AnthropicToolChoice = "auto" | "none" | "any" | {
|
|
22
|
+
type: "tool";
|
|
23
|
+
name: string;
|
|
24
|
+
} | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Map unified ToolChoice to OpenAI Completions API format.
|
|
27
|
+
* - "any" → "required"
|
|
28
|
+
* - { type: "tool", name } → { type: "function", function: { name } }
|
|
29
|
+
*/
|
|
30
|
+
export declare function mapToOpenAICompletionsToolChoice(choice?: ToolChoice): OpenAICompletionsToolChoice;
|
|
31
|
+
/**
|
|
32
|
+
* Returns true when an OpenAI-completions `tool_choice` value forces a tool
|
|
33
|
+
* call (`"required"` or a function-name pin), as opposed to leaving it open
|
|
34
|
+
* (`"auto"`, `"none"`, or unset). Accepts `unknown` because the param shape
|
|
35
|
+
* pulled from the OpenAI SDK (`ChatCompletionToolChoiceOption`) widens with
|
|
36
|
+
* each release; this check only needs the open/forced bit.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isForcedToolChoice(choice: unknown): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Map unified ToolChoice to OpenAI Responses API format.
|
|
41
|
+
* - "any" → "required"
|
|
42
|
+
* - { type: "tool", name } → { type: "function", name } (flat structure)
|
|
43
|
+
*/
|
|
44
|
+
export declare function mapToOpenAIResponsesToolChoice(choice?: ToolChoice): OpenAIResponsesToolChoice;
|
|
45
|
+
/**
|
|
46
|
+
* Map unified ToolChoice to Anthropic-compatible format.
|
|
47
|
+
* - "required" → "any"
|
|
48
|
+
* - { type: "function", ... } → { type: "tool", name }
|
|
49
|
+
*/
|
|
50
|
+
export declare function mapToAnthropicToolChoice(choice?: ToolChoice): AnthropicToolChoice;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Tool, ToolCall } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Finds a tool by name and validates the tool call arguments against its schema.
|
|
4
|
+
* @param tools Array of tool definitions
|
|
5
|
+
* @param toolCall The tool call from the LLM
|
|
6
|
+
* @returns The validated arguments
|
|
7
|
+
* @throws Error if tool is not found or validation fails
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateToolCall(tools: Tool[], toolCall: ToolCall): ToolCall["arguments"];
|
|
10
|
+
/**
|
|
11
|
+
* Validates tool call arguments against the tool's schema (Zod or plain JSON
|
|
12
|
+
* Schema). Applies LLM-quirk coercions (numeric strings, JSON-string
|
|
13
|
+
* containers, null-for-optional, null-for-default) before declaring failure.
|
|
14
|
+
*
|
|
15
|
+
* @throws Error with a formatted message when validation cannot be reconciled.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateToolArguments(tool: Tool, toolCall: ToolCall): ToolCall["arguments"];
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { ResponseInput } from "openai/resources/responses/responses";
|
|
2
|
+
import type { CacheRetention, OpenAIResponsesHistoryPayload, ProviderPayload } from "./types";
|
|
3
|
+
export { isRecord } from "@vib-rato/utils";
|
|
4
|
+
export declare function normalizeSystemPrompts(systemPrompt: readonly string[] | string | undefined | null): string[];
|
|
5
|
+
export declare function sanitizeJsonStrings(value: unknown): unknown;
|
|
6
|
+
export declare function toNumber(value: unknown): number | undefined;
|
|
7
|
+
export declare function toPositiveNumber(value: unknown, fallback: number): number;
|
|
8
|
+
export declare function toBoolean(value: unknown): boolean | undefined;
|
|
9
|
+
export declare function normalizeToolCallId(id: string): string;
|
|
10
|
+
type ResponsesToolItemIdPrefix = "fc" | "ctc";
|
|
11
|
+
export declare function normalizeResponsesToolCallId(id: string, itemPrefix?: ResponsesToolItemIdPrefix): {
|
|
12
|
+
callId: string;
|
|
13
|
+
itemId: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Truncate an OpenAI Responses API item ID to 64 characters.
|
|
17
|
+
* IDs exceeding the limit are replaced with a hash-based ID using the given prefix.
|
|
18
|
+
*/
|
|
19
|
+
export declare function truncateResponseItemId(id: string, prefix: string): string;
|
|
20
|
+
export declare function sanitizeOpenAIResponsesHistoryItemsForReplay(items: Array<Record<string, unknown>>): ResponseInput;
|
|
21
|
+
/**
|
|
22
|
+
* Neutralize leaked OpenAI Harmony / control tokens (`<|channel|>`, `<|message|>`,
|
|
23
|
+
* `<|call|>`, `<|constrain|>`, `<|recipient|>`, `<|content|>`, ...) in replayed
|
|
24
|
+
* history text. A subagent whose tool-call channel degenerates can dump raw
|
|
25
|
+
* control-token scaffolding into its reply text; once that poisoned text lands in
|
|
26
|
+
* history the Codex / Responses endpoint rejects every subsequent request with
|
|
27
|
+
* `Request blocked (code=invalid_prompt)`, permanently wedging the session because
|
|
28
|
+
* the offending item is re-sent on each turn. Insert a zero-width space after `<`
|
|
29
|
+
* so the delimiter can no longer be tokenized as a reserved control token while the
|
|
30
|
+
* text stays human-readable.
|
|
31
|
+
*
|
|
32
|
+
* The pattern matches the two control-token shapes only, so ordinary text and pipe
|
|
33
|
+
* syntax is left untouched:
|
|
34
|
+
* - simple form `<|ident|>` — a leading run of identifier chars then `|>`; and
|
|
35
|
+
* - header form `<|role to=recipient|>` — a known Harmony role
|
|
36
|
+
* (`system`/`developer`/`user`/`assistant`/`tool`) followed by a single
|
|
37
|
+
* recipient assignment `to=<recipient>` whose value is an unbounded run of
|
|
38
|
+
* non-delimiter, non-whitespace chars (so long MCP/custom tool recipients like
|
|
39
|
+
* `to=functions.<long.name>` are covered).
|
|
40
|
+
* The header branch is deliberately scoped to the known role + `to=` recipient
|
|
41
|
+
* grammar rather than an arbitrary `key=value`, so request-boundary sanitization
|
|
42
|
+
* never rewrites non-control delimiter text such as `<|foo bar=baz|>`. A single-line
|
|
43
|
+
* body (no `\n`) and the required leading identifier char also leave compact
|
|
44
|
+
* pipe/operator syntax alone — e.g. F# `value <| f |> g` (space after `<|`),
|
|
45
|
+
* `sum<|a+b|>c` (punctuation body), and `<|foo bar|>` (no assignment) never match.
|
|
46
|
+
* The simple branch is a strict superset of the original identifier-only pattern:
|
|
47
|
+
* every marker the old regex caught still matches.
|
|
48
|
+
*/
|
|
49
|
+
export declare function neutralizeReservedControlTokens(text: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Shape-tolerant classifier for the poisoned-history rejection that wedges
|
|
52
|
+
* gpt-5.6 sessions: `Request blocked (code=invalid_prompt)`. Accepts a raw
|
|
53
|
+
* provider error, an assistant message, or any object carrying a
|
|
54
|
+
* `providerCode` / `transportFailure` / `errorMessage` field, and returns true
|
|
55
|
+
* when the failure is the deterministic `invalid_prompt` content fault rather
|
|
56
|
+
* than a transient upstream error. This is the single shared contract the
|
|
57
|
+
* provider transports and the session-level circuit breaker key on so the
|
|
58
|
+
* classification is explicit (not inferred from a catch-all bucket) and
|
|
59
|
+
* uniformly testable across transports.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isInvalidPromptError(input: unknown): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Shape-tolerant classifier for the DeepSeek-family reasoning-content replay
|
|
64
|
+
* rejection: "The `reasoning_content` in the thinking mode must be passed back
|
|
65
|
+
* to the API." DeepSeek V4 (and reasoning-capable siblings reached through any
|
|
66
|
+
* OpenAI-compatible proxy) 400 every follow-up turn once a prior assistant turn
|
|
67
|
+
* carried reasoning the proxy stripped to an empty `encrypted_content` /
|
|
68
|
+
* `reasoning_content`. Resending the identical history re-triggers it, so naive
|
|
69
|
+
* session auto-retry just burns the budget — it needs the same bounded
|
|
70
|
+
* repair-and-resend contract as the `invalid_prompt` poisoned-history breaker.
|
|
71
|
+
*
|
|
72
|
+
* Accepts a raw provider error, an assistant message, or any object carrying an
|
|
73
|
+
* `errorMessage` field (the agent-loop circuit breaker keys on this).
|
|
74
|
+
*/
|
|
75
|
+
export declare function isReasoningContentReplayError(input: unknown): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Remove Responses-API `reasoning` items whose `encrypted_content` is missing or
|
|
78
|
+
* empty from an outgoing history payload. DeepSeek rejects replay of reasoning
|
|
79
|
+
* whose encrypted blob a proxy stripped to `""`; dropping those items lets the
|
|
80
|
+
* model re-reason on the next turn instead of re-triggering a deterministic 400.
|
|
81
|
+
* Non-reasoning items (text, function_call, function_call_output, ...) are kept
|
|
82
|
+
* verbatim so tool-use pairing and message order are preserved. Returns whether
|
|
83
|
+
* any item was actually removed — the circuit breaker uses this to decide
|
|
84
|
+
* between a single repaired resend (removed) and immediate fail-fast (unchanged).
|
|
85
|
+
*/
|
|
86
|
+
export declare function stripUnusableReasoningItems(items: Array<Record<string, unknown>>): {
|
|
87
|
+
result: Array<Record<string, unknown>>;
|
|
88
|
+
removed: number;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Neutralize leaked reserved control tokens across every string in an outgoing
|
|
92
|
+
* Responses `input` array. This is the request-boundary complement to the
|
|
93
|
+
* replay-history sanitizer: leaked Harmony markers (`<|channel|>analysis`, ...)
|
|
94
|
+
* can enter the payload from assistant reasoning summaries, live-converted
|
|
95
|
+
* message/tool-output text, or user-authored content — not just replayed
|
|
96
|
+
* history — and every gpt-5.6 request that carries one is rejected with
|
|
97
|
+
* `Request blocked (code=invalid_prompt)`. Walking every string (rather than an
|
|
98
|
+
* item-type allowlist) guarantees no leak source is missed as item shapes
|
|
99
|
+
* evolve; the zero-width-space insertion is idempotent (`<\u200b|` no longer
|
|
100
|
+
* matches `<|`) and keeps the text human-readable.
|
|
101
|
+
*/
|
|
102
|
+
export declare function neutralizeResponsesInputControlTokens<T>(items: readonly T[]): T[];
|
|
103
|
+
export declare function createOpenAIResponsesHistoryPayload(provider: string, items: Array<Record<string, unknown>>, incremental?: boolean): OpenAIResponsesHistoryPayload;
|
|
104
|
+
export declare function getOpenAIResponsesHistoryPayload(providerPayload: ProviderPayload | undefined, currentProvider: string, fallbackProvider?: string): OpenAIResponsesHistoryPayload | undefined;
|
|
105
|
+
export declare function getOpenAIResponsesHistoryItems(providerPayload: ProviderPayload | undefined, currentProvider: string, fallbackProvider?: string): Array<Record<string, unknown>> | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Resolve cache retention preference.
|
|
108
|
+
*
|
|
109
|
+
* Resolution order: explicit request value → `VIB_CACHE_RETENTION` →
|
|
110
|
+
* legacy `PI_CACHE_RETENTION` → `fallback`. Both env vars act as explicit
|
|
111
|
+
* opt-in (`"long"`) or opt-out (any other value) so a provider-specific
|
|
112
|
+
* `fallback` only applies when nothing else is configured. `fallback`
|
|
113
|
+
* defaults to `"short"` to preserve the historical behaviour for callers
|
|
114
|
+
* that don't pass one.
|
|
115
|
+
*/
|
|
116
|
+
export declare function resolveCacheRetention(cacheRetention?: CacheRetention, fallback?: CacheRetention): CacheRetention;
|
|
117
|
+
export declare function isAnthropicOAuthToken(key: string): boolean;
|