@linxiraos/pi-ai 1.0.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 +5066 -0
- package/README.md +1195 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth/sqlite-credential-store.d.ts +117 -0
- package/dist/types/auth-broker/client.d.ts +93 -0
- package/dist/types/auth-broker/discover.d.ts +39 -0
- package/dist/types/auth-broker/index.d.ts +7 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +136 -0
- package/dist/types/auth-broker/server.d.ts +48 -0
- package/dist/types/auth-broker/snapshot-cache.d.ts +17 -0
- package/dist/types/auth-broker/types.d.ts +152 -0
- package/dist/types/auth-broker/wire-schema-resource.d.ts +53 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +5 -0
- package/dist/types/auth-gateway/http.d.ts +56 -0
- package/dist/types/auth-gateway/index.d.ts +3 -0
- package/dist/types/auth-gateway/server.d.ts +36 -0
- package/dist/types/auth-gateway/types.d.ts +127 -0
- package/dist/types/auth-retry.d.ts +150 -0
- package/dist/types/auth-storage.d.ts +1258 -0
- package/dist/types/dialect/anthropic.d.ts +15 -0
- package/dist/types/dialect/catalog.d.ts +3 -0
- package/dist/types/dialect/coercion.d.ts +23 -0
- package/dist/types/dialect/deepseek.d.ts +14 -0
- package/dist/types/dialect/demotion.d.ts +30 -0
- package/dist/types/dialect/examples.d.ts +18 -0
- package/dist/types/dialect/factory.d.ts +3 -0
- package/dist/types/dialect/fenced-thinking.d.ts +53 -0
- package/dist/types/dialect/gemini.d.ts +17 -0
- package/dist/types/dialect/gemma.d.ts +15 -0
- package/dist/types/dialect/glm.d.ts +9 -0
- package/dist/types/dialect/harmony.d.ts +8 -0
- package/dist/types/dialect/hermes.d.ts +9 -0
- package/dist/types/dialect/history.d.ts +3 -0
- package/dist/types/dialect/index.d.ts +11 -0
- package/dist/types/dialect/inventory.d.ts +9 -0
- package/dist/types/dialect/kimi.d.ts +14 -0
- package/dist/types/dialect/minimax.d.ts +3 -0
- package/dist/types/dialect/owned-stream.d.ts +4 -0
- package/dist/types/dialect/qwen3.d.ts +9 -0
- package/dist/types/dialect/rendering.d.ts +54 -0
- package/dist/types/dialect/thinking.d.ts +6 -0
- package/dist/types/dialect/types.d.ts +68 -0
- package/dist/types/dialect/xml.d.ts +9 -0
- package/dist/types/error/abort.d.ts +14 -0
- package/dist/types/error/auth-classify.d.ts +20 -0
- package/dist/types/error/auth.d.ts +27 -0
- package/dist/types/error/aws.d.ts +27 -0
- package/dist/types/error/classes.d.ts +106 -0
- package/dist/types/error/finalize.d.ts +39 -0
- package/dist/types/error/flags.d.ts +94 -0
- package/dist/types/error/format.d.ts +20 -0
- package/dist/types/error/gateway.d.ts +20 -0
- package/dist/types/error/index.d.ts +14 -0
- package/dist/types/error/oauth.d.ts +43 -0
- package/dist/types/error/provider.d.ts +42 -0
- package/dist/types/error/rate-limit.d.ts +80 -0
- package/dist/types/error/retryable.d.ts +27 -0
- package/dist/types/error/validation.d.ts +32 -0
- package/dist/types/index.d.ts +51 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/providers/amazon-bedrock.d.ts +39 -0
- package/dist/types/providers/anthropic-client.d.ts +106 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +937 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic-wire.d.ts +345 -0
- package/dist/types/providers/anthropic.d.ts +261 -0
- package/dist/types/providers/aws-credentials.d.ts +48 -0
- package/dist/types/providers/aws-eventstream.d.ts +39 -0
- package/dist/types/providers/aws-sigv4.d.ts +55 -0
- package/dist/types/providers/azure-openai-responses.d.ts +16 -0
- package/dist/types/providers/bedrock-mantle.d.ts +13 -0
- package/dist/types/providers/claude-code-fingerprint.d.ts +19 -0
- package/dist/types/providers/cowork-fetch.d.ts +3 -0
- package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
- package/dist/types/providers/cursor-pi-args.d.ts +105 -0
- package/dist/types/providers/cursor.d.ts +221 -0
- package/dist/types/providers/devin.d.ts +12 -0
- package/dist/types/providers/error-message.d.ts +25 -0
- package/dist/types/providers/github-copilot-headers.d.ts +40 -0
- package/dist/types/providers/gitlab-duo-workflow.d.ts +254 -0
- package/dist/types/providers/gitlab-duo.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +24 -0
- package/dist/types/providers/google-gemini-cli.d.ts +120 -0
- package/dist/types/providers/google-shared.d.ts +203 -0
- package/dist/types/providers/google-types.d.ts +155 -0
- package/dist/types/providers/google-vertex.d.ts +7 -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/mock.d.ts +179 -0
- package/dist/types/providers/ollama.d.ts +8 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +35 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +1311 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-chat-wire.d.ts +669 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +109 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +26 -0
- package/dist/types/providers/openai-codex-responses.d.ts +238 -0
- package/dist/types/providers/openai-completions.d.ts +48 -0
- package/dist/types/providers/openai-reasoning-fallback.d.ts +25 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +1314 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-wire.d.ts +6099 -0
- package/dist/types/providers/openai-responses.d.ts +131 -0
- package/dist/types/providers/openai-shared.d.ts +624 -0
- package/dist/types/providers/pi-native-client.d.ts +13 -0
- package/dist/types/providers/pi-native-server.d.ts +69 -0
- package/dist/types/providers/register-builtins.d.ts +37 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +32 -0
- package/dist/types/providers/vision-guard.d.ts +20 -0
- package/dist/types/registry/aiand.d.ts +7 -0
- package/dist/types/registry/aimlapi.d.ts +4 -0
- package/dist/types/registry/alibaba-coding-plan.d.ts +8 -0
- package/dist/types/registry/alibaba-token-plan.d.ts +18 -0
- package/dist/types/registry/amazon-bedrock.d.ts +5 -0
- package/dist/types/registry/anthropic.d.ts +10 -0
- package/dist/types/registry/api-key-login.d.ts +42 -0
- package/dist/types/registry/api-key-validation.d.ts +43 -0
- package/dist/types/registry/aws.d.ts +13 -0
- package/dist/types/registry/azure.d.ts +4 -0
- package/dist/types/registry/baseten.d.ts +7 -0
- package/dist/types/registry/bedrock-mantle.d.ts +22 -0
- package/dist/types/registry/cerebras.d.ts +7 -0
- package/dist/types/registry/cloudflare-ai-gateway.d.ts +13 -0
- package/dist/types/registry/coreweave.d.ts +7 -0
- package/dist/types/registry/cursor.d.ts +7 -0
- package/dist/types/registry/deepseek.d.ts +8 -0
- package/dist/types/registry/derived.d.ts +5 -0
- package/dist/types/registry/devin.d.ts +8 -0
- package/dist/types/registry/exa.d.ts +8 -0
- package/dist/types/registry/firepass.d.ts +16 -0
- package/dist/types/registry/fireworks.d.ts +7 -0
- package/dist/types/registry/github-copilot.d.ts +7 -0
- package/dist/types/registry/gitlab-duo-workflow.d.ts +10 -0
- package/dist/types/registry/gitlab-duo.d.ts +9 -0
- package/dist/types/registry/gmi-cloud.d.ts +7 -0
- package/dist/types/registry/google-antigravity.d.ts +9 -0
- package/dist/types/registry/google-gemini-cli.d.ts +9 -0
- package/dist/types/registry/google-vertex.d.ts +5 -0
- package/dist/types/registry/google.d.ts +4 -0
- package/dist/types/registry/groq.d.ts +4 -0
- package/dist/types/registry/huggingface.d.ts +7 -0
- package/dist/types/registry/index.d.ts +4 -0
- package/dist/types/registry/kagi.d.ts +14 -0
- package/dist/types/registry/kilo.d.ts +7 -0
- package/dist/types/registry/kimi-code.d.ts +7 -0
- package/dist/types/registry/litellm.d.ts +13 -0
- package/dist/types/registry/llama-cpp.d.ts +8 -0
- package/dist/types/registry/lm-studio.d.ts +8 -0
- package/dist/types/registry/meta.d.ts +7 -0
- package/dist/types/registry/minimax-code-cn.d.ts +6 -0
- package/dist/types/registry/minimax-code.d.ts +6 -0
- package/dist/types/registry/minimax.d.ts +4 -0
- package/dist/types/registry/mistral.d.ts +4 -0
- package/dist/types/registry/moonshot.d.ts +7 -0
- package/dist/types/registry/nanogpt.d.ts +7 -0
- package/dist/types/registry/novita.d.ts +6 -0
- package/dist/types/registry/nvidia.d.ts +7 -0
- package/dist/types/registry/oauth/anthropic-constants.d.ts +12 -0
- package/dist/types/registry/oauth/anthropic.d.ts +24 -0
- package/dist/types/registry/oauth/callback-server.d.ts +74 -0
- package/dist/types/registry/oauth/cursor.d.ts +16 -0
- package/dist/types/registry/oauth/device-code.d.ts +25 -0
- package/dist/types/registry/oauth/devin.d.ts +5 -0
- package/dist/types/registry/oauth/github-copilot.d.ts +30 -0
- package/dist/types/registry/oauth/gitlab-duo-workflow.d.ts +6 -0
- package/dist/types/registry/oauth/gitlab-duo.d.ts +3 -0
- package/dist/types/registry/oauth/google-antigravity.d.ts +11 -0
- package/dist/types/registry/oauth/google-gemini-cli.d.ts +22 -0
- package/dist/types/registry/oauth/google-oauth-shared.d.ts +56 -0
- package/dist/types/registry/oauth/index.d.ts +45 -0
- package/dist/types/registry/oauth/kimi.d.ts +21 -0
- package/dist/types/registry/oauth/minimax-code.d.ts +27 -0
- package/dist/types/registry/oauth/openai-codex.d.ts +33 -0
- package/dist/types/registry/oauth/opencode.d.ts +18 -0
- package/dist/types/registry/oauth/perplexity.d.ts +9 -0
- package/dist/types/registry/oauth/pkce.d.ts +8 -0
- package/dist/types/registry/oauth/types.d.ts +87 -0
- package/dist/types/registry/oauth/wafer.d.ts +1 -0
- package/dist/types/registry/oauth/xai-oauth.d.ts +46 -0
- package/dist/types/registry/oauth/xiaomi.d.ts +25 -0
- package/dist/types/registry/oauth/zai.d.ts +25 -0
- package/dist/types/registry/ollama-cloud.d.ts +7 -0
- package/dist/types/registry/ollama.d.ts +12 -0
- package/dist/types/registry/openai-codex-device.d.ts +8 -0
- package/dist/types/registry/openai-codex.d.ts +9 -0
- package/dist/types/registry/openai.d.ts +4 -0
- package/dist/types/registry/opencode-go.d.ts +6 -0
- package/dist/types/registry/opencode-zen.d.ts +6 -0
- package/dist/types/registry/openrouter.d.ts +13 -0
- package/dist/types/registry/parallel.d.ts +14 -0
- package/dist/types/registry/perplexity.d.ts +7 -0
- package/dist/types/registry/qianfan.d.ts +7 -0
- package/dist/types/registry/qwen-portal.d.ts +7 -0
- package/dist/types/registry/registry.d.ts +367 -0
- package/dist/types/registry/sakana.d.ts +7 -0
- package/dist/types/registry/siliconflow-cn.d.ts +7 -0
- package/dist/types/registry/siliconflow.d.ts +7 -0
- package/dist/types/registry/synthetic.d.ts +6 -0
- package/dist/types/registry/tavily.d.ts +14 -0
- package/dist/types/registry/together.d.ts +6 -0
- package/dist/types/registry/types.d.ts +75 -0
- package/dist/types/registry/umans.d.ts +7 -0
- package/dist/types/registry/venice.d.ts +13 -0
- package/dist/types/registry/vercel-ai-gateway.d.ts +7 -0
- package/dist/types/registry/vllm.d.ts +7 -0
- package/dist/types/registry/wafer-serverless.d.ts +6 -0
- package/dist/types/registry/xai-oauth.d.ts +7 -0
- package/dist/types/registry/xai.d.ts +7 -0
- package/dist/types/registry/xiaomi-token-plan-ams.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-cn.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-sgp.d.ts +6 -0
- package/dist/types/registry/xiaomi.d.ts +6 -0
- package/dist/types/registry/zai.d.ts +15 -0
- package/dist/types/registry/zenmux.d.ts +7 -0
- package/dist/types/registry/zhipu-coding-plan.d.ts +7 -0
- package/dist/types/stream.d.ts +46 -0
- package/dist/types/types.d.ts +1064 -0
- package/dist/types/usage/alibaba-token-plan.d.ts +3 -0
- package/dist/types/usage/claude.d.ts +4 -0
- package/dist/types/usage/cursor.d.ts +4 -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 +15 -0
- package/dist/types/usage/kimi.d.ts +2 -0
- package/dist/types/usage/minimax-code.d.ts +3 -0
- package/dist/types/usage/ollama.d.ts +5 -0
- package/dist/types/usage/openai-codex-base-url.d.ts +18 -0
- package/dist/types/usage/openai-codex-reset.d.ts +88 -0
- package/dist/types/usage/openai-codex.d.ts +10 -0
- package/dist/types/usage/opencode-go.d.ts +2 -0
- package/dist/types/usage/shared.d.ts +1 -0
- package/dist/types/usage/synthetic.d.ts +2 -0
- package/dist/types/usage/umans.d.ts +2 -0
- package/dist/types/usage/xai-oauth.d.ts +12 -0
- package/dist/types/usage/zai.d.ts +3 -0
- package/dist/types/usage.d.ts +527 -0
- package/dist/types/utils/abort.d.ts +25 -0
- package/dist/types/utils/anthropic-auth.d.ts +35 -0
- package/dist/types/utils/aws-profile.d.ts +17 -0
- package/dist/types/utils/block-symbols.d.ts +62 -0
- package/dist/types/utils/deterministic-id.d.ts +16 -0
- package/dist/types/utils/empty-completion-retry.d.ts +21 -0
- package/dist/types/utils/event-stream.d.ts +39 -0
- package/dist/types/utils/foundry.d.ts +1 -0
- package/dist/types/utils/google-validation.d.ts +2 -0
- package/dist/types/utils/harmony-leak.d.ts +135 -0
- package/dist/types/utils/http-inspector.d.ts +49 -0
- package/dist/types/utils/idle-iterator.d.ts +149 -0
- package/dist/types/utils/leaked-thinking-stream.d.ts +33 -0
- package/dist/types/utils/openai-http.d.ts +48 -0
- package/dist/types/utils/openrouter-headers.d.ts +1 -0
- package/dist/types/utils/parse-bind.d.ts +23 -0
- package/dist/types/utils/provider-response.d.ts +3 -0
- package/dist/types/utils/proxy.d.ts +39 -0
- package/dist/types/utils/request-debug.d.ts +29 -0
- package/dist/types/utils/retry-after.d.ts +4 -0
- package/dist/types/utils/retry.d.ts +14 -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 +54 -0
- package/dist/types/utils/schema/index.d.ts +14 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +20 -0
- package/dist/types/utils/schema/meta-validator.d.ts +2 -0
- package/dist/types/utils/schema/normalize.d.ts +153 -0
- package/dist/types/utils/schema/spill.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +17 -0
- package/dist/types/utils/schema/strict-tool-validation.d.ts +16 -0
- package/dist/types/utils/schema/types.d.ts +4 -0
- package/dist/types/utils/schema/typescript.d.ts +24 -0
- package/dist/types/utils/schema/wire.d.ts +52 -0
- package/dist/types/utils/sdk-stream-timeout.d.ts +33 -0
- package/dist/types/utils/sse-debug.d.ts +5 -0
- package/dist/types/utils/stream-markup-healing.d.ts +87 -0
- package/dist/types/utils/thinking-loop.d.ts +102 -0
- package/dist/types/utils/tool-call-loop-guard.d.ts +26 -0
- package/dist/types/utils/tool-choice.d.ts +52 -0
- package/dist/types/utils/validation.d.ts +28 -0
- package/dist/types/utils.d.ts +57 -0
- package/package.json +138 -0
- package/src/api-registry.ts +109 -0
- package/src/auth/sqlite-credential-store.ts +2066 -0
- package/src/auth-broker/client.ts +471 -0
- package/src/auth-broker/discover.ts +310 -0
- package/src/auth-broker/index.ts +7 -0
- package/src/auth-broker/refresher.ts +117 -0
- package/src/auth-broker/remote-store.ts +1332 -0
- package/src/auth-broker/server.ts +898 -0
- package/src/auth-broker/snapshot-cache.ts +200 -0
- package/src/auth-broker/types.ts +193 -0
- package/src/auth-broker/wire-schema-resource.ts +487 -0
- package/src/auth-broker/wire-schemas.ts +43 -0
- package/src/auth-gateway/http.ts +227 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +836 -0
- package/src/auth-gateway/types.ts +153 -0
- package/src/auth-retry.ts +401 -0
- package/src/auth-storage.ts +6540 -0
- package/src/dialect/anthropic.md +31 -0
- package/src/dialect/anthropic.ts +608 -0
- package/src/dialect/catalog.ts +29 -0
- package/src/dialect/coercion.ts +136 -0
- package/src/dialect/deepseek.md +24 -0
- package/src/dialect/deepseek.ts +609 -0
- package/src/dialect/demotion.ts +40 -0
- package/src/dialect/examples.ts +71 -0
- package/src/dialect/factory.ts +34 -0
- package/src/dialect/fenced-thinking.ts +184 -0
- package/src/dialect/gemini.md +44 -0
- package/src/dialect/gemini.ts +583 -0
- package/src/dialect/gemma.md +33 -0
- package/src/dialect/gemma.ts +387 -0
- package/src/dialect/glm.md +32 -0
- package/src/dialect/glm.ts +579 -0
- package/src/dialect/harmony.md +31 -0
- package/src/dialect/harmony.ts +345 -0
- package/src/dialect/hermes.md +25 -0
- package/src/dialect/hermes.ts +206 -0
- package/src/dialect/history.ts +81 -0
- package/src/dialect/index.ts +15 -0
- package/src/dialect/inventory.ts +30 -0
- package/src/dialect/kimi.md +24 -0
- package/src/dialect/kimi.ts +340 -0
- package/src/dialect/minimax.md +31 -0
- package/src/dialect/minimax.ts +95 -0
- package/src/dialect/owned-stream.ts +481 -0
- package/src/dialect/prompt-template.md +12 -0
- package/src/dialect/qwen3.md +28 -0
- package/src/dialect/qwen3.ts +240 -0
- package/src/dialect/rendering.ts +304 -0
- package/src/dialect/thinking.ts +292 -0
- package/src/dialect/types.ts +56 -0
- package/src/dialect/xml.md +22 -0
- package/src/dialect/xml.ts +90 -0
- package/src/error/abort.ts +18 -0
- package/src/error/auth-classify.ts +47 -0
- package/src/error/auth.ts +48 -0
- package/src/error/aws.ts +35 -0
- package/src/error/classes.ts +281 -0
- package/src/error/finalize.ts +69 -0
- package/src/error/flags.ts +602 -0
- package/src/error/format.ts +45 -0
- package/src/error/gateway.ts +96 -0
- package/src/error/index.ts +14 -0
- package/src/error/oauth.ts +58 -0
- package/src/error/provider.ts +63 -0
- package/src/error/rate-limit.ts +303 -0
- package/src/error/retryable.ts +70 -0
- package/src/error/validation.ts +44 -0
- package/src/index.ts +51 -0
- package/src/provider-details.ts +90 -0
- package/src/providers/amazon-bedrock.ts +1064 -0
- package/src/providers/anthropic-client.ts +317 -0
- package/src/providers/anthropic-messages-server-schema.ts +252 -0
- package/src/providers/anthropic-messages-server.ts +818 -0
- package/src/providers/anthropic-wire.ts +359 -0
- package/src/providers/anthropic.ts +4539 -0
- package/src/providers/aws-credentials.ts +772 -0
- package/src/providers/aws-eventstream.ts +181 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.ts +438 -0
- package/src/providers/bedrock-mantle.ts +110 -0
- package/src/providers/claude-code-fingerprint.ts +20 -0
- package/src/providers/cowork-fetch.ts +201 -0
- package/src/providers/cursor/exec-modern.ts +496 -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.ts +165 -0
- package/src/providers/cursor.ts +4689 -0
- package/src/providers/devin/proto/buf/validate/validate.proto +468 -0
- package/src/providers/devin/proto/buf.gen.yaml +33 -0
- package/src/providers/devin/proto/buf.yaml +17 -0
- package/src/providers/devin/proto/cel/expr/checked.proto +103 -0
- package/src/providers/devin/proto/cel/expr/eval.proto +38 -0
- package/src/providers/devin/proto/cel/expr/explain.proto +15 -0
- package/src/providers/devin/proto/cel/expr/syntax.proto +113 -0
- package/src/providers/devin/proto/cel/expr/value.proto +41 -0
- package/src/providers/devin/proto/connectext/grpc/status/v1/status.proto +11 -0
- package/src/providers/devin/proto/errorspb/errors.proto +56 -0
- package/src/providers/devin/proto/errorspb/hintdetail.proto +7 -0
- package/src/providers/devin/proto/errorspb/markers.proto +10 -0
- package/src/providers/devin/proto/errorspb/tags.proto +12 -0
- package/src/providers/devin/proto/errorspb/testing.proto +6 -0
- package/src/providers/devin/proto/exa/analytics_pb/analytics.proto +188 -0
- package/src/providers/devin/proto/exa/api_server_pb/api_server.proto +2461 -0
- package/src/providers/devin/proto/exa/auth_pb/auth.proto +19 -0
- package/src/providers/devin/proto/exa/auto_cascade_common_pb/auto_cascade_common.proto +79 -0
- package/src/providers/devin/proto/exa/browser_preview_pb/browser_preview.proto +32 -0
- package/src/providers/devin/proto/exa/bug_checker_pb/bug_checker.proto +22 -0
- package/src/providers/devin/proto/exa/cascade_plugins_pb/cascade_plugins.proto +262 -0
- package/src/providers/devin/proto/exa/chat_client_server_pb/chat_client_server.proto +57 -0
- package/src/providers/devin/proto/exa/chat_pb/chat.proto +449 -0
- package/src/providers/devin/proto/exa/code_edit/code_edit_pb/code_edit.proto +186 -0
- package/src/providers/devin/proto/exa/codeium_common_pb/codeium_common.proto +4157 -0
- package/src/providers/devin/proto/exa/context_module_pb/context_module.proto +175 -0
- package/src/providers/devin/proto/exa/cortex_pb/cortex.proto +3268 -0
- package/src/providers/devin/proto/exa/dev_pb/dev.proto +26 -0
- package/src/providers/devin/proto/exa/diff_action_pb/diff_action.proto +75 -0
- package/src/providers/devin/proto/exa/eval/pr_eval/datasets_pb/datasets.proto +103 -0
- package/src/providers/devin/proto/exa/eval_pb/eval.proto +1315 -0
- package/src/providers/devin/proto/exa/extension_server_pb/extension_server.proto +556 -0
- package/src/providers/devin/proto/exa/file_system_provider_pb/file_system_provider.proto +75 -0
- package/src/providers/devin/proto/exa/index_pb/index.proto +461 -0
- package/src/providers/devin/proto/exa/knowledge_base_pb/knowledge_base.proto +144 -0
- package/src/providers/devin/proto/exa/language_server_pb/language_server.proto +2385 -0
- package/src/providers/devin/proto/exa/model_management_pb/model_management.proto +186 -0
- package/src/providers/devin/proto/exa/opensearch_clients_pb/opensearch_clients.proto +503 -0
- package/src/providers/devin/proto/exa/product_analytics_pb/product_analytics.proto +37 -0
- package/src/providers/devin/proto/exa/prompt_pb/prompt.proto +92 -0
- package/src/providers/devin/proto/exa/reactive_component_pb/reactive_component.proto +96 -0
- package/src/providers/devin/proto/exa/seat_management_pb/seat_management.proto +2680 -0
- package/src/providers/devin/proto/exa/tokenizer_pb/tokenizer.proto +37 -0
- package/src/providers/devin/proto/exa/trainer_pb/config.proto +647 -0
- package/src/providers/devin/proto/exa/tree_sitter/language_data_pb/language_data.proto +14 -0
- package/src/providers/devin/proto/exa/trust_pb/trust.proto +157 -0
- package/src/providers/devin/proto/exa/user_analytics_pb/user_analytics.proto +519 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/base/api_base.proto +28 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/datastore/datastore_v3.proto +484 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/log/log_service.proto +136 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/remote_api/remote_api.proto +42 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +61 -0
- package/src/providers/devin/proto/grpc/binlog/v1/binarylog.proto +84 -0
- package/src/providers/devin/proto/io/prometheus/client/metrics.proto +98 -0
- package/src/providers/devin.ts +679 -0
- package/src/providers/error-message.ts +23 -0
- package/src/providers/github-copilot-headers.ts +141 -0
- package/src/providers/gitlab-duo-workflow-chatml-note.md +1 -0
- package/src/providers/gitlab-duo-workflow.ts +3135 -0
- package/src/providers/gitlab-duo.ts +399 -0
- package/src/providers/google-auth.ts +330 -0
- package/src/providers/google-gemini-cli.ts +1370 -0
- package/src/providers/google-shared.ts +1122 -0
- package/src/providers/google-types.ts +180 -0
- package/src/providers/google-vertex.ts +135 -0
- package/src/providers/google.ts +47 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.ts +51 -0
- package/src/providers/mock.ts +514 -0
- package/src/providers/ollama.ts +776 -0
- package/src/providers/openai-anthropic-shim.ts +166 -0
- package/src/providers/openai-chat-server-schema.ts +243 -0
- package/src/providers/openai-chat-server.ts +752 -0
- package/src/providers/openai-chat-wire.ts +859 -0
- package/src/providers/openai-codex/request-transformer.ts +491 -0
- package/src/providers/openai-codex/response-handler.ts +102 -0
- package/src/providers/openai-codex-responses.ts +4716 -0
- package/src/providers/openai-completions.ts +2389 -0
- package/src/providers/openai-reasoning-fallback.ts +269 -0
- package/src/providers/openai-responses-server-schema.ts +397 -0
- package/src/providers/openai-responses-server.ts +1466 -0
- package/src/providers/openai-responses-wire.ts +6416 -0
- package/src/providers/openai-responses.ts +1393 -0
- package/src/providers/openai-shared.ts +3500 -0
- package/src/providers/pi-native-client.ts +275 -0
- package/src/providers/pi-native-server.ts +245 -0
- package/src/providers/register-builtins.ts +503 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.ts +1083 -0
- package/src/providers/vision-guard.ts +54 -0
- package/src/registry/aiand.ts +22 -0
- package/src/registry/aimlapi.ts +6 -0
- package/src/registry/alibaba-coding-plan.ts +104 -0
- package/src/registry/alibaba-token-plan.ts +125 -0
- package/src/registry/amazon-bedrock.ts +22 -0
- package/src/registry/anthropic.ts +26 -0
- package/src/registry/api-key-login.ts +115 -0
- package/src/registry/api-key-validation.ts +145 -0
- package/src/registry/aws.ts +57 -0
- package/src/registry/azure.ts +6 -0
- package/src/registry/baseten.ts +22 -0
- package/src/registry/bedrock-mantle.ts +34 -0
- package/src/registry/cerebras.ts +23 -0
- package/src/registry/cloudflare-ai-gateway.ts +45 -0
- package/src/registry/coreweave.ts +40 -0
- package/src/registry/cursor.ts +20 -0
- package/src/registry/deepseek.ts +46 -0
- package/src/registry/derived.ts +9 -0
- package/src/registry/devin.ts +15 -0
- package/src/registry/exa.ts +19 -0
- package/src/registry/firepass.ts +32 -0
- package/src/registry/fireworks.ts +28 -0
- package/src/registry/github-copilot.ts +22 -0
- package/src/registry/gitlab-duo-workflow.ts +20 -0
- package/src/registry/gitlab-duo.ts +19 -0
- package/src/registry/gmi-cloud.ts +22 -0
- package/src/registry/google-antigravity.ts +22 -0
- package/src/registry/google-gemini-cli.ts +22 -0
- package/src/registry/google-vertex.ts +38 -0
- package/src/registry/google.ts +6 -0
- package/src/registry/groq.ts +6 -0
- package/src/registry/huggingface.ts +29 -0
- package/src/registry/index.ts +4 -0
- package/src/registry/kagi.ts +46 -0
- package/src/registry/kilo.ts +114 -0
- package/src/registry/kimi-code.ts +17 -0
- package/src/registry/litellm.ts +45 -0
- package/src/registry/llama-cpp.ts +35 -0
- package/src/registry/lm-studio.ts +31 -0
- package/src/registry/meta.ts +22 -0
- package/src/registry/minimax-code-cn.ts +12 -0
- package/src/registry/minimax-code.ts +12 -0
- package/src/registry/minimax.ts +6 -0
- package/src/registry/mistral.ts +6 -0
- package/src/registry/moonshot.ts +28 -0
- package/src/registry/nanogpt.ts +22 -0
- package/src/registry/novita.ts +25 -0
- package/src/registry/nvidia.ts +61 -0
- package/src/registry/oauth/anthropic-constants.ts +12 -0
- package/src/registry/oauth/anthropic.ts +346 -0
- package/src/registry/oauth/callback-server.ts +438 -0
- package/src/registry/oauth/cursor.ts +187 -0
- package/src/registry/oauth/device-code.ts +92 -0
- package/src/registry/oauth/devin.ts +124 -0
- package/src/registry/oauth/github-copilot.ts +369 -0
- package/src/registry/oauth/gitlab-duo-workflow.ts +146 -0
- package/src/registry/oauth/gitlab-duo.ts +222 -0
- package/src/registry/oauth/google-antigravity.ts +225 -0
- package/src/registry/oauth/google-gemini-cli.ts +297 -0
- package/src/registry/oauth/google-oauth-shared.ts +211 -0
- package/src/registry/oauth/index.ts +187 -0
- package/src/registry/oauth/kimi.ts +297 -0
- package/src/registry/oauth/minimax-code.ts +53 -0
- package/src/registry/oauth/oauth.html +317 -0
- package/src/registry/oauth/openai-codex.ts +384 -0
- package/src/registry/oauth/opencode.ts +50 -0
- package/src/registry/oauth/perplexity.ts +228 -0
- package/src/registry/oauth/pkce.ts +18 -0
- package/src/registry/oauth/types.ts +96 -0
- package/src/registry/oauth/wafer.ts +24 -0
- package/src/registry/oauth/xai-oauth.ts +559 -0
- package/src/registry/oauth/xiaomi.ts +211 -0
- package/src/registry/oauth/zai.ts +285 -0
- package/src/registry/ollama-cloud.ts +36 -0
- package/src/registry/ollama.ts +43 -0
- package/src/registry/openai-codex-device.ts +18 -0
- package/src/registry/openai-codex.ts +19 -0
- package/src/registry/openai.ts +6 -0
- package/src/registry/opencode-go.ts +12 -0
- package/src/registry/opencode-zen.ts +12 -0
- package/src/registry/openrouter.ts +28 -0
- package/src/registry/parallel.ts +45 -0
- package/src/registry/perplexity.ts +13 -0
- package/src/registry/qianfan.ts +27 -0
- package/src/registry/qwen-portal.ts +50 -0
- package/src/registry/registry.ts +182 -0
- package/src/registry/sakana.ts +22 -0
- package/src/registry/siliconflow-cn.ts +22 -0
- package/src/registry/siliconflow.ts +22 -0
- package/src/registry/synthetic.ts +21 -0
- package/src/registry/tavily.ts +45 -0
- package/src/registry/together.ts +22 -0
- package/src/registry/types.ts +86 -0
- package/src/registry/umans.ts +23 -0
- package/src/registry/venice.ts +33 -0
- package/src/registry/vercel-ai-gateway.ts +38 -0
- package/src/registry/vllm.ts +34 -0
- package/src/registry/wafer-serverless.ts +12 -0
- package/src/registry/xai-oauth.ts +17 -0
- package/src/registry/xai.ts +22 -0
- package/src/registry/xiaomi-token-plan-ams.ts +12 -0
- package/src/registry/xiaomi-token-plan-cn.ts +12 -0
- package/src/registry/xiaomi-token-plan-sgp.ts +12 -0
- package/src/registry/xiaomi.ts +12 -0
- package/src/registry/zai.ts +41 -0
- package/src/registry/zenmux.ts +22 -0
- package/src/registry/zhipu-coding-plan.ts +27 -0
- package/src/stream.ts +1944 -0
- package/src/types.ts +1243 -0
- package/src/usage/alibaba-token-plan.ts +230 -0
- package/src/usage/claude.ts +830 -0
- package/src/usage/cursor.ts +335 -0
- package/src/usage/gemini.ts +258 -0
- package/src/usage/github-copilot.ts +424 -0
- package/src/usage/google-antigravity.ts +497 -0
- package/src/usage/kimi.ts +277 -0
- package/src/usage/minimax-code.ts +291 -0
- package/src/usage/ollama.ts +41 -0
- package/src/usage/openai-codex-base-url.ts +35 -0
- package/src/usage/openai-codex-reset.ts +205 -0
- package/src/usage/openai-codex.ts +627 -0
- package/src/usage/opencode-go.ts +89 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/synthetic.ts +180 -0
- package/src/usage/umans.ts +192 -0
- package/src/usage/xai-oauth.ts +414 -0
- package/src/usage/zai.ts +370 -0
- package/src/usage.ts +411 -0
- package/src/utils/abort.ts +67 -0
- package/src/utils/anthropic-auth.ts +93 -0
- package/src/utils/aws-profile.ts +88 -0
- package/src/utils/block-symbols.ts +78 -0
- package/src/utils/deterministic-id.ts +20 -0
- package/src/utils/empty-completion-retry.ts +161 -0
- package/src/utils/event-stream.ts +202 -0
- package/src/utils/foundry.ts +8 -0
- package/src/utils/google-validation.ts +25 -0
- package/src/utils/harmony-leak.ts +500 -0
- package/src/utils/http-inspector.ts +196 -0
- package/src/utils/idle-iterator.ts +531 -0
- package/src/utils/leaked-thinking-stream.ts +483 -0
- package/src/utils/openai-http.ts +119 -0
- package/src/utils/openrouter-headers.ts +12 -0
- package/src/utils/parse-bind.ts +56 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/proxy.ts +314 -0
- package/src/utils/request-debug.ts +351 -0
- package/src/utils/retry-after.ts +121 -0
- package/src/utils/retry.ts +77 -0
- package/src/utils/schema/CONSTRAINTS.md +168 -0
- package/src/utils/schema/adapt.ts +36 -0
- package/src/utils/schema/compatibility.ts +435 -0
- package/src/utils/schema/dereference.ts +98 -0
- package/src/utils/schema/draft.ts +341 -0
- package/src/utils/schema/equality.ts +97 -0
- package/src/utils/schema/fields.ts +210 -0
- package/src/utils/schema/index.ts +14 -0
- package/src/utils/schema/json-schema-validator.ts +595 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.ts +2314 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.ts +109 -0
- package/src/utils/schema/strict-tool-validation.ts +117 -0
- package/src/utils/schema/types.ts +10 -0
- package/src/utils/schema/typescript.ts +212 -0
- package/src/utils/schema/wire.ts +662 -0
- package/src/utils/sdk-stream-timeout.ts +43 -0
- package/src/utils/sse-debug.ts +18 -0
- package/src/utils/stream-markup-healing.ts +247 -0
- package/src/utils/thinking-loop.ts +552 -0
- package/src/utils/tool-call-loop-guard.ts +107 -0
- package/src/utils/tool-choice.ts +101 -0
- package/src/utils/validation.ts +1932 -0
- package/src/utils.ts +492 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema compatibility audits.
|
|
3
|
+
*
|
|
4
|
+
* Each provider has a different idea of what JSON Schema features it accepts
|
|
5
|
+
* for tool definitions. The normalizers in `normalize.ts`, `strict-mode`,
|
|
6
|
+
* and `adapt.ts` rewrite incoming schemas to fit. This module is the
|
|
7
|
+
* *audit* counterpart: it walks a (presumably already-sanitized) schema and
|
|
8
|
+
* reports any feature the target provider would reject. Tests use it to lock
|
|
9
|
+
* down the contract; the runtime uses it to fail-open with diagnostic logs
|
|
10
|
+
* rather than silently shipping a broken tool definition.
|
|
11
|
+
*/
|
|
12
|
+
export type SchemaCompatibilityProvider = "openai-strict" | "google" | "cloud-code-assist-claude";
|
|
13
|
+
export interface SchemaCompatibilityViolation {
|
|
14
|
+
path: string;
|
|
15
|
+
rule: string;
|
|
16
|
+
message: string;
|
|
17
|
+
key?: string;
|
|
18
|
+
value?: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface SchemaCompatibilityResult {
|
|
21
|
+
provider: SchemaCompatibilityProvider;
|
|
22
|
+
compatible: boolean;
|
|
23
|
+
violations: SchemaCompatibilityViolation[];
|
|
24
|
+
}
|
|
25
|
+
export interface StrictSchemaEnforcementResult {
|
|
26
|
+
schema: Record<string, unknown>;
|
|
27
|
+
strict: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare function validateSchemaCompatibility(schema: unknown, provider: SchemaCompatibilityProvider): SchemaCompatibilityResult;
|
|
30
|
+
export declare function validateStrictSchemaEnforcement(originalSchema: Record<string, unknown>, result: StrictSchemaEnforcementResult): SchemaCompatibilityResult;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dereference all local `$ref` pointers in a JSON Schema, inlining definitions
|
|
3
|
+
* from `$defs` / `definitions`. The `$defs` block is stripped from the output.
|
|
4
|
+
*
|
|
5
|
+
* Non-local refs (e.g. `http://...`) are left untouched.
|
|
6
|
+
* Circular references are broken with `{}`.
|
|
7
|
+
*
|
|
8
|
+
* @returns A new schema object with all local refs inlined, or the input unchanged
|
|
9
|
+
* if it's not an object or has no `$defs`/`definitions`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function dereferenceJsonSchema(schema: unknown): unknown;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const JSON_SCHEMA_DRAFT_2020_12_URI = "https://json-schema.org/draft/2020-12/schema";
|
|
2
|
+
/** Pre-check entrypoint. Exposed so callers can decide whether to take the upgrade path at all. */
|
|
3
|
+
export declare function schemaNeedsDraft202012Upgrade(schema: unknown): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Upgrade legacy JSON Schema shapes to the draft 2020-12 form emitted by Zod.
|
|
6
|
+
*
|
|
7
|
+
* This keeps extension/MCP/TypeBox schemas compatible with providers whose tool
|
|
8
|
+
* validators reject draft-07 tuple and dependency keywords.
|
|
9
|
+
*/
|
|
10
|
+
export declare function upgradeJsonSchemaTo202012(schema: unknown): unknown;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { JsonObject } from "./types.js";
|
|
2
|
+
export declare function areJsonValuesEqual(left: unknown, right: unknown): boolean;
|
|
3
|
+
export declare function mergeCompatibleEnumSchemas(existing: unknown, incoming: unknown): JsonObject | null;
|
|
4
|
+
export declare function mergePropertySchemas(existing: unknown, incoming: unknown): unknown;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field classification sets for JSON Schema sanitization across providers.
|
|
3
|
+
*
|
|
4
|
+
* Each set serves a different provider need. They overlap intentionally —
|
|
5
|
+
* co-locating them makes the overlap visible and maintainable.
|
|
6
|
+
*
|
|
7
|
+
* All keysets here are static and small (≤ ~40 entries) so they live as
|
|
8
|
+
* `Record<string, true>` literals — `k in REC` resolves through hidden
|
|
9
|
+
* class inline caches without the per-call hashtable cost of `Set.has`.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Google Generative AI unsupported schema fields.
|
|
13
|
+
* Stripped during normalizeSchemaForGoogle / normalizeSchemaForCCA.
|
|
14
|
+
*/
|
|
15
|
+
export declare const UNSUPPORTED_SCHEMA_FIELDS: Record<string, true>;
|
|
16
|
+
/**
|
|
17
|
+
* Human-meaningful validation/decorative keywords that can be preserved in a
|
|
18
|
+
* sibling description when a provider-specific normalizer strips them from the
|
|
19
|
+
* wire schema.
|
|
20
|
+
*/
|
|
21
|
+
export declare const LIFTABLE_TO_DESCRIPTION_FIELDS: Record<string, true>;
|
|
22
|
+
/**
|
|
23
|
+
* Non-structural schema keys stripped during OpenAI strict mode sanitization.
|
|
24
|
+
* These are decorative/validation-only keywords that don't affect the structural
|
|
25
|
+
* shape OpenAI's strict mode enforces.
|
|
26
|
+
*/
|
|
27
|
+
export declare const NON_STRUCTURAL_SCHEMA_KEYS: Record<string, true>;
|
|
28
|
+
/**
|
|
29
|
+
* Cloud Code Assist type-specific allowed keys per JSON Schema type.
|
|
30
|
+
* Used when collapsing mixed-type combiner variants for CCA Claude.
|
|
31
|
+
*/
|
|
32
|
+
export declare const CLOUD_CODE_ASSIST_TYPE_SPECIFIC_KEYS: Record<string, Record<string, true>>;
|
|
33
|
+
/**
|
|
34
|
+
* Flat set of every type-specific key across all CCA types.
|
|
35
|
+
* Used to identify sibling keys that need filtering during mixed-type collapse.
|
|
36
|
+
*/
|
|
37
|
+
export declare const ALL_CCA_TYPE_SPECIFIC_KEYS: Record<string, true>;
|
|
38
|
+
/**
|
|
39
|
+
* Cloud Code Assist shared schema keys allowed on any type.
|
|
40
|
+
* Used alongside CLOUD_CODE_ASSIST_TYPE_SPECIFIC_KEYS for CCA combiner collapsing.
|
|
41
|
+
*/
|
|
42
|
+
export declare const CLOUD_CODE_ASSIST_SHARED_SCHEMA_KEYS: Record<string, true>;
|
|
43
|
+
/**
|
|
44
|
+
* Combinator keys used across schema sanitization modules.
|
|
45
|
+
* Defined once to avoid duplication in strict-mode.ts and normalize.ts.
|
|
46
|
+
*/
|
|
47
|
+
export declare const COMBINATOR_KEYS: readonly ["anyOf", "allOf", "oneOf"];
|
|
48
|
+
/**
|
|
49
|
+
* Cloud Code Assist Claude unsupported schema fields.
|
|
50
|
+
* Much smaller than UNSUPPORTED_SCHEMA_FIELDS (Google) because CCA supports
|
|
51
|
+
* validation keywords like additionalProperties, minLength, pattern, etc.
|
|
52
|
+
* Meta/reference keywords plus object-key validators that CCA cannot resolve are stripped.
|
|
53
|
+
*/
|
|
54
|
+
export declare const CCA_UNSUPPORTED_SCHEMA_FIELDS: Record<string, true>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./adapt.js";
|
|
2
|
+
export * from "./compatibility.js";
|
|
3
|
+
export * from "./dereference.js";
|
|
4
|
+
export * from "./draft.js";
|
|
5
|
+
export * from "./equality.js";
|
|
6
|
+
export * from "./fields.js";
|
|
7
|
+
export * from "./json-schema-validator.js";
|
|
8
|
+
export * from "./meta-validator.js";
|
|
9
|
+
export * from "./normalize.js";
|
|
10
|
+
export * from "./spill.js";
|
|
11
|
+
export * from "./strict-tool-validation.js";
|
|
12
|
+
export * from "./types.js";
|
|
13
|
+
export * from "./typescript.js";
|
|
14
|
+
export * from "./wire.js";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface JsonSchemaValidationIssue {
|
|
2
|
+
path: PropertyKey[];
|
|
3
|
+
message: string;
|
|
4
|
+
expectedTypes?: string[];
|
|
5
|
+
keyword?: string;
|
|
6
|
+
/**
|
|
7
|
+
* Marks issues that originate inside a failed `anyOf` / `oneOf` branch.
|
|
8
|
+
* Consumers such as the tool-argument coercion layer use this to avoid
|
|
9
|
+
* applying type repairs (e.g. singleton-array wrapping) that would be
|
|
10
|
+
* authoritative outside of a combinator but are only one candidate
|
|
11
|
+
* branch's expectation here.
|
|
12
|
+
*/
|
|
13
|
+
fromUnionBranch?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface JsonSchemaValidationResult {
|
|
16
|
+
success: boolean;
|
|
17
|
+
issues: JsonSchemaValidationIssue[];
|
|
18
|
+
}
|
|
19
|
+
export declare function validateJsonSchemaValue(schema: unknown, value: unknown): JsonSchemaValidationResult;
|
|
20
|
+
export declare function isJsonSchemaValueValid(schema: unknown, value: unknown): boolean;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { type DescriptionSpillFormat } from "./spill.js";
|
|
2
|
+
import { type JsonObject } from "./types.js";
|
|
3
|
+
export type ResidualSchemaIncompatibility = "type-array" | "type-null" | "nullable" | "combiners" | "not";
|
|
4
|
+
export interface NormalizeSchemaOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Coerce boolean subschemas to object forms. `standard` preserves `false`
|
|
7
|
+
* with `not`; `permissive` uses `{}` when the provider cannot express it.
|
|
8
|
+
*/
|
|
9
|
+
coerceBooleanSubschemas?: "standard" | "permissive";
|
|
10
|
+
unsupportedFields: (key: string) => boolean;
|
|
11
|
+
normalizeFieldNames: boolean;
|
|
12
|
+
collapseNullFields: boolean;
|
|
13
|
+
normalizeTypeArrayToNullable: boolean;
|
|
14
|
+
stripNullableKeyword: boolean;
|
|
15
|
+
autoPropertyOrdering: boolean;
|
|
16
|
+
ensureObjectProperties: boolean;
|
|
17
|
+
liftStrippedToDescription: false | {
|
|
18
|
+
keys?: (key: string) => boolean;
|
|
19
|
+
format?: DescriptionSpillFormat;
|
|
20
|
+
};
|
|
21
|
+
mergeObjectCombiners: boolean;
|
|
22
|
+
collapseSameTypeCombiners: boolean;
|
|
23
|
+
collapseMixedTypeCombiners: boolean;
|
|
24
|
+
stripResidualCombinersFixpoint: boolean;
|
|
25
|
+
extractNullableFromUnions: boolean;
|
|
26
|
+
inferTypeForBareEnum: boolean;
|
|
27
|
+
foldOneOfIntoAnyOf: boolean;
|
|
28
|
+
dropNonScalarEnum: boolean;
|
|
29
|
+
stringEnumsOnly?: boolean;
|
|
30
|
+
rejectResidualIncompatibilities?: ReadonlyArray<ResidualSchemaIncompatibility>;
|
|
31
|
+
validateAndFallback?: {
|
|
32
|
+
fallback: unknown;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** Copy all keys from a schema except the specified combiner key. */
|
|
36
|
+
export declare function copySchemaWithout(schema: JsonObject, combiner: string): JsonObject;
|
|
37
|
+
/**
|
|
38
|
+
* Recursively strip any remaining anyOf/oneOf that same-type or mixed-type
|
|
39
|
+
* collapse can handle. This is needed because object-combiner merging can
|
|
40
|
+
* create new anyOf in merged subtrees after child normalization already ran.
|
|
41
|
+
*/
|
|
42
|
+
export declare function stripResidualCombiners(value: unknown, epoch?: number): unknown;
|
|
43
|
+
export declare function normalizeSchema(value: unknown, options: NormalizeSchemaOptions): unknown;
|
|
44
|
+
export declare function normalizeSchemaForGoogle(value: unknown): unknown;
|
|
45
|
+
export declare function normalizeSchemaForCCA(value: unknown): unknown;
|
|
46
|
+
export declare function normalizeSchemaForMCP(value: unknown): unknown;
|
|
47
|
+
/**
|
|
48
|
+
* Moonshot Flavored JSON Schema (MFJS) — the stricter subset Moonshot/Kimi
|
|
49
|
+
* native hosts (api.moonshot.ai, api.kimi.com) validate
|
|
50
|
+
* `tools.function.parameters` against. It rejects standard JSON Schema
|
|
51
|
+
* constructs that OpenAI-compatible hosts accept, returning HTTP 400
|
|
52
|
+
* `tools.function.parameters is not a valid moonshot flavored json schema`.
|
|
53
|
+
* Differences this normalizer reconciles:
|
|
54
|
+
*
|
|
55
|
+
* - `const` (incl. `anyOf`/`oneOf` whose every branch is a bare `const`) is
|
|
56
|
+
* rejected; collapse to `enum` with an inferred scalar `type`.
|
|
57
|
+
* - `oneOf` is not an MFJS combinator (only `anyOf` is); residual `oneOf` is
|
|
58
|
+
* folded into `anyOf`.
|
|
59
|
+
* - `type` must be a scalar string; `type: [...]` arrays are reduced to a
|
|
60
|
+
* single scalar (the `null` branch is dropped — `nullable` is unsupported).
|
|
61
|
+
* - Enum-bearing nodes get an inferred `type` (the idiomatic MFJS form; a bare
|
|
62
|
+
* `enum` is valid too) so `anyOf` branches always carry a `type`.
|
|
63
|
+
* - Validation/decorative keywords (`minItems`, `maxItems`, `maxLength`,
|
|
64
|
+
* `pattern`, `format`, `title`, …) and tuple `prefixItems` are rejected and
|
|
65
|
+
* stripped, spilling human-meaningful ones into the sibling `description`.
|
|
66
|
+
* `default` and `description` are MFJS Meta Data fields and are preserved.
|
|
67
|
+
* - `additionalProperties` (boolean or schema) and `type: "null"` (incl.
|
|
68
|
+
* inside `anyOf`) are kept.
|
|
69
|
+
* - Boolean subschemas are object-coerced; MFJS has no exact `false` schema,
|
|
70
|
+
* so both values become the permissive empty schema while local tool
|
|
71
|
+
* validation remains authoritative.
|
|
72
|
+
*
|
|
73
|
+
* Out of scope (absent from the built-in tool surface, spec-ambiguous to
|
|
74
|
+
* rewrite blindly): `allOf` intersection merging, external/recursive `$ref`,
|
|
75
|
+
* and the depth-10 limit.
|
|
76
|
+
*/
|
|
77
|
+
export declare function normalizeSchemaForMoonshot(value: unknown): unknown;
|
|
78
|
+
/**
|
|
79
|
+
* Rewrites standard JSON Schema forms that Ollama's Go `/api/chat` tool parser
|
|
80
|
+
* cannot unmarshal into its object-shaped `Schema` struct.
|
|
81
|
+
*/
|
|
82
|
+
export declare function sanitizeSchemaForOllama(schema: JsonObject): JsonObject;
|
|
83
|
+
/**
|
|
84
|
+
* Rewrites the one JSON Schema form that grammar-constrained OpenAI-compatible
|
|
85
|
+
* backends (llama.cpp, LM Studio, vLLM) cannot compile to GBNF: a bare boolean
|
|
86
|
+
* subschema. `toolWireSchema` normalizes `{}` open subschemas to boolean `true`
|
|
87
|
+
* (issue #1179); llama.cpp's `json-schema-to-grammar.cpp` `visit()` has no case
|
|
88
|
+
* for a boolean schema and throws `Unrecognized schema: true` → HTTP 400 before
|
|
89
|
+
* the model is consulted (issue #5914).
|
|
90
|
+
*
|
|
91
|
+
* Narrower than {@link sanitizeSchemaForOllama}: only genuine subschema slots
|
|
92
|
+
* are widened. Boolean `additionalProperties`/`unevaluatedProperties` stay
|
|
93
|
+
* intact because the converter reads those as closed/open-object grammar
|
|
94
|
+
* semantics, and dropping `additionalProperties: false` would silently reopen
|
|
95
|
+
* every declared object.
|
|
96
|
+
*/
|
|
97
|
+
export declare function sanitizeSchemaForGrammar(schema: JsonObject): JsonObject;
|
|
98
|
+
/**
|
|
99
|
+
* OpenAI Responses rejects `oneOf` in tool schemas even when strict mode is
|
|
100
|
+
* disabled, and rejects every schema node with `type: "object"` unless it has
|
|
101
|
+
* a `properties` member. Normalize only schema-valued positions so literal
|
|
102
|
+
* payloads under `enum`, `const`, `default`, and `examples` remain unchanged.
|
|
103
|
+
*
|
|
104
|
+
* Identity-preserving: returns the input reference unchanged when no rewrite
|
|
105
|
+
* occurred so callers can dedupe via reference equality (and the strict-mode
|
|
106
|
+
* cache stays warm). If a node has both `oneOf` and `anyOf`, the two are
|
|
107
|
+
* concatenated (the wire payload accepts a single union; preserving both
|
|
108
|
+
* would not survive).
|
|
109
|
+
*/
|
|
110
|
+
export declare function sanitizeSchemaForOpenAIResponses(schema: JsonObject): JsonObject;
|
|
111
|
+
/**
|
|
112
|
+
* Alias for {@link sanitizeSchemaForOpenAIResponses} matching the
|
|
113
|
+
* `normalizeSchemaFor*` dispatcher naming used elsewhere in this module.
|
|
114
|
+
*/
|
|
115
|
+
export declare const normalizeSchemaForOpenAIResponses: (schema: JsonObject) => JsonObject;
|
|
116
|
+
/**
|
|
117
|
+
* First pass of strict-mode preparation.
|
|
118
|
+
*
|
|
119
|
+
* Rewrites everything strict mode forbids into something it accepts:
|
|
120
|
+
* - Drops non-structural keywords (`format`, `pattern`, `examples`, …),
|
|
121
|
+
* `const`, `nullable`, and `additionalProperties` (re-added by
|
|
122
|
+
* `enforceStrictSchema` as `false`).
|
|
123
|
+
* - `type: [a, b]` → `anyOf: [{type: a, …}, {type: b, …}]`, copying only the
|
|
124
|
+
* keywords each variant can use (e.g. `properties` stays only on the
|
|
125
|
+
* object variant).
|
|
126
|
+
* - `const` → single-entry `enum`.
|
|
127
|
+
* - Description carries a `(default: X)` suffix so the model still sees the
|
|
128
|
+
* documented default after the keyword is stripped.
|
|
129
|
+
* - `nullable: true` wraps the whole node in `anyOf:[T,{type:"null"}]`.
|
|
130
|
+
*
|
|
131
|
+
* Recurses into properties, items, prefixItems, combinators, and $defs. The
|
|
132
|
+
* `cache` WeakMap dedupes shared subgraphs; the `epoch` is the cycle guard.
|
|
133
|
+
*/
|
|
134
|
+
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>;
|
|
135
|
+
/**
|
|
136
|
+
* Recursively enforces JSON Schema constraints required by OpenAI/Codex strict mode:
|
|
137
|
+
* - `additionalProperties: false` on every object node
|
|
138
|
+
* - every key in `properties` present in `required`
|
|
139
|
+
*
|
|
140
|
+
* Properties absent from the original `required` array were TypeBox-optional.
|
|
141
|
+
* They are made nullable (`anyOf: [T, { type: "null" }]`) so the model can
|
|
142
|
+
* signal omission by outputting null rather than omitting the key entirely.
|
|
143
|
+
*
|
|
144
|
+
* @throws {Error} When a schema node has no `type`, array-based combinator
|
|
145
|
+
* (`anyOf`/`allOf`/`oneOf`), object-based combinator (`not`), or `$ref` —
|
|
146
|
+
* i.e. the node is not representable in strict mode. Prefer
|
|
147
|
+
* {@link tryEnforceStrictSchema} which catches this and degrades gracefully.
|
|
148
|
+
*/
|
|
149
|
+
export declare function enforceStrictSchema(schema: Record<string, unknown>, cache?: WeakMap<Record<string, unknown>, Record<string, unknown>>): Record<string, unknown>;
|
|
150
|
+
export declare function tryEnforceStrictSchema(schema: Record<string, unknown>): {
|
|
151
|
+
schema: Record<string, unknown>;
|
|
152
|
+
strict: boolean;
|
|
153
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { JsonObject } from "./types.js";
|
|
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,17 @@
|
|
|
1
|
+
export declare function stamp<T extends object, V>(target: T, key: symbol, compute: (target: T) => V): V;
|
|
2
|
+
export declare function epochNext(): number;
|
|
3
|
+
/**
|
|
4
|
+
* Marks `target` as visited for this `epoch`. Returns `true` the first time
|
|
5
|
+
* it is called for a given (target, epoch) pair and `false` on every
|
|
6
|
+
* subsequent call within the same epoch.
|
|
7
|
+
*/
|
|
8
|
+
export declare function once<T extends object>(target: T, epoch: number): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Returns `true` on first entry, `false` if `target` is already on the
|
|
11
|
+
* current path. A `false` return does NOT deepen the counter — callers pair
|
|
12
|
+
* `exit` only with successful enters (`if (!enter(n)) bail; try {…} finally
|
|
13
|
+
* { exit(n); }`), so incrementing on the cycle branch would leak depth and
|
|
14
|
+
* make every later top-level walk of the same object misreport a cycle.
|
|
15
|
+
*/
|
|
16
|
+
export declare function enter<T extends object>(target: T): boolean;
|
|
17
|
+
export declare function exit<T extends object>(target: T): void;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects tool-parameter schemas that pass structural JSON-Schema validation
|
|
3
|
+
* (so {@link isValidJsonSchema} accepts them) yet make OpenAI-style providers
|
|
4
|
+
* reject the whole request with HTTP 400 — namely an `enum`/`const` whose
|
|
5
|
+
* value(s) cannot satisfy the node's declared `type`. MCP servers emit these
|
|
6
|
+
* when a nullable/array branch is built incorrectly (e.g. a non-null `enum`
|
|
7
|
+
* copied onto a `type: "null"` branch, or an `enum` placed on an `array`
|
|
8
|
+
* schema instead of its `items`). One such tool 400s the entire turn, so
|
|
9
|
+
* callers quarantine just the offending tool. See issue #2652.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Walk a tool parameter schema for OpenAI-strict `enum`/`const`-vs-`type`
|
|
13
|
+
* contradictions. Returns a JSON-pointer-ish path to the first offending node,
|
|
14
|
+
* or `null` when the schema is safe to emit.
|
|
15
|
+
*/
|
|
16
|
+
export declare function findStrictToolSchemaViolation(schema: unknown, path?: string): string | null;
|
|
@@ -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,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render a JSON Schema as a simplified, human-readable TypeScript type.
|
|
3
|
+
*
|
|
4
|
+
* This is a *display* conversion, not a faithful TS codegen: it surfaces the
|
|
5
|
+
* shape (objects, arrays, unions, enums, records) and property descriptions so
|
|
6
|
+
* a model — or a human reading `/dump` — can grasp a tool's parameters at a
|
|
7
|
+
* glance, far more legibly than raw JSON Schema. Refinement keywords
|
|
8
|
+
* (min/max/pattern/format) are intentionally dropped; only type structure,
|
|
9
|
+
* literal enums/consts, and descriptions survive.
|
|
10
|
+
*/
|
|
11
|
+
export interface JsonSchemaToTsOptions {
|
|
12
|
+
/** Indentation unit for nested object bodies. Default two spaces (none in `harmony` style). */
|
|
13
|
+
readonly indent?: string;
|
|
14
|
+
/** Emit `description` keywords as comments on object properties. Default true. */
|
|
15
|
+
readonly comments?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Output flavor. `default` renders JSDoc comments, `;` delimiters, and
|
|
18
|
+
* indented bodies; `harmony` renders the flat OpenAI-Harmony convention —
|
|
19
|
+
* `//` line comments, `,` delimiters, no indentation.
|
|
20
|
+
*/
|
|
21
|
+
readonly style?: "default" | "harmony";
|
|
22
|
+
}
|
|
23
|
+
/** Convert a JSON Schema object into a simplified TypeScript type string. */
|
|
24
|
+
export declare function jsonSchemaToTypeScript(schema: unknown, options?: JsonSchemaToTsOptions): string;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the wire (JSON Schema) representation of a tool's parameters.
|
|
3
|
+
*
|
|
4
|
+
* Tools may author parameters as ArkType schemas or legacy TypeBox / plain JSON
|
|
5
|
+
* Schema documents. Both are normalized at the boundary so providers and
|
|
6
|
+
* validators see the same JSON Schema dialect.
|
|
7
|
+
*/
|
|
8
|
+
import type { Type } from "@linxiraos/pi-omptype";
|
|
9
|
+
import type { Tool } from "../../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* True when `value` is a live ArkType schema instance.
|
|
12
|
+
*
|
|
13
|
+
* ArkType schemas are callable functions carrying `toJsonSchema`/`assert`
|
|
14
|
+
* methods, while raw JSON Schema is a plain object.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isArkSchema(value: unknown): value is Type;
|
|
17
|
+
/**
|
|
18
|
+
* Normalize `{}` (an unconstrained schema) to boolean `true` in every
|
|
19
|
+
* schema-valued position. JSON Schema draft 2020-12 §4.3.1 defines them as
|
|
20
|
+
* semantically equivalent. Grammar-constrained samplers often treat the object
|
|
21
|
+
* form as "generate an empty object" rather than "any JSON value".
|
|
22
|
+
*
|
|
23
|
+
* Mutates in place and applies to every tool wire schema.
|
|
24
|
+
*/
|
|
25
|
+
export declare function normalizeEmptySchemas(node: unknown): void;
|
|
26
|
+
/**
|
|
27
|
+
* Convert an ArkType schema into the JSON Schema shape providers consume.
|
|
28
|
+
*/
|
|
29
|
+
export declare function arkToWireSchema(schema: Type): Record<string, unknown>;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve a tool's parameters to a JSON Schema object suitable for sending
|
|
32
|
+
* over the wire. ArkType schemas are converted and cached; legacy TypeBox /
|
|
33
|
+
* raw JSON Schema parameters are upgraded to draft 2020-12 and cached.
|
|
34
|
+
*/
|
|
35
|
+
export declare function toolWireSchema(tool: Tool): Record<string, unknown>;
|
|
36
|
+
/**
|
|
37
|
+
* Return a deep clone of `schema` with every `description` annotation removed.
|
|
38
|
+
* The result is memoized on the input via a non-enumerable symbol (`stamp`) so
|
|
39
|
+
* repeated provider requests reuse the same stripped object; the input is never
|
|
40
|
+
* mutated, so the stamped `toolWireSchema` cache stays intact for
|
|
41
|
+
* system-prompt/UI rendering.
|
|
42
|
+
*/
|
|
43
|
+
export declare function stripSchemaDescriptions(schema: Record<string, unknown>): Record<string, unknown>;
|
|
44
|
+
/**
|
|
45
|
+
* Strip a tool's human-readable text from its provider-bound spec: empties the
|
|
46
|
+
* top-level `description` and removes nested schema `description` annotations.
|
|
47
|
+
* Used when the full tool catalog is rendered into the system prompt instead, so
|
|
48
|
+
* the descriptions ride the wire once (in the prompt) rather than duplicated on
|
|
49
|
+
* every tool definition. Parameters are resolved to wire JSON Schema and cloned,
|
|
50
|
+
* leaving the original tool objects and the stamped schema cache untouched.
|
|
51
|
+
*/
|
|
52
|
+
export declare function stripToolDescriptions(tools: readonly Tool[]): Tool[];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for mapping `StreamOptions.streamFirstEventTimeoutMs` onto
|
|
3
|
+
* underlying SDK request-timeout options.
|
|
4
|
+
*
|
|
5
|
+
* The hint is intentionally not a watchdog — it just narrows the SDK's
|
|
6
|
+
* "transport timeout" window so a stuck pre-stream request fails fast
|
|
7
|
+
* instead of hanging on the default (often multi-minute) SDK timeout. Once
|
|
8
|
+
* the stream actually starts, silence is not failure; callers must abort
|
|
9
|
+
* to interrupt a quiet stream.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Coerce a caller-supplied `streamFirstEventTimeoutMs` into a positive integer suitable
|
|
13
|
+
* for the SDK's `timeout` option. Returns `undefined` when the caller passed nothing,
|
|
14
|
+
* a non-finite value, or a non-positive value (preserving the SDK's default).
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveSdkTimeoutMs(streamFirstEventTimeoutMs: number | undefined): number | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Build per-request SDK options that combine an abort signal with the optional
|
|
19
|
+
* `streamFirstEventTimeoutMs` request-timeout hint.
|
|
20
|
+
*
|
|
21
|
+
* The returned `{ signal, timeout?, maxRetries? }` shape is compatible with both
|
|
22
|
+
* OpenAI's and Anthropic's `RequestOptions` (and any other SDK that follows the
|
|
23
|
+
* Stainless conventions), so callers from any of those providers can spread the
|
|
24
|
+
* result directly into `client.X.create(params, requestOptions)`.
|
|
25
|
+
*
|
|
26
|
+
* When the hint is set, retries are forced to zero so the SDK does not silently
|
|
27
|
+
* extend the caller's explicit deadline by re-attempting after a timeout.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createSdkStreamRequestOptions(signal: AbortSignal, streamFirstEventTimeoutMs: number | undefined): {
|
|
30
|
+
signal: AbortSignal;
|
|
31
|
+
timeout?: number;
|
|
32
|
+
maxRetries?: number;
|
|
33
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ServerSentEvent } from "@linxiraos/pi-utils";
|
|
2
|
+
import type { RawSseEvent } from "../types.js";
|
|
3
|
+
type RawSseObserver = (event: RawSseEvent) => void;
|
|
4
|
+
export declare function notifyRawSseEvent(observer: RawSseObserver | undefined, event: ServerSentEvent | RawSseEvent): void;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming-safe filters for leaked chat-template tool-call and thinking markup.
|
|
3
|
+
*
|
|
4
|
+
* Hosted models sometimes leak raw template markup into visible `content` instead
|
|
5
|
+
* of returning structured events. Tool-call healing delegates to the same
|
|
6
|
+
* dialect scanners used by owned in-band tool calling; this file keeps the
|
|
7
|
+
* provider-facing compatibility wrapper and model/provider gating.
|
|
8
|
+
*/
|
|
9
|
+
export interface HealedToolCall {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly arguments: string;
|
|
13
|
+
}
|
|
14
|
+
export type StreamMarkupHealingPattern = "kimi" | "dsml" | "thinking";
|
|
15
|
+
export interface StreamMarkupHealingOptions {
|
|
16
|
+
readonly pattern: StreamMarkupHealingPattern;
|
|
17
|
+
}
|
|
18
|
+
export type StreamMarkupHealingEvent = {
|
|
19
|
+
readonly type: "text";
|
|
20
|
+
readonly text: string;
|
|
21
|
+
} | {
|
|
22
|
+
readonly type: "thinking";
|
|
23
|
+
readonly thinking: string;
|
|
24
|
+
} | {
|
|
25
|
+
readonly type: "toolCall";
|
|
26
|
+
readonly call: HealedToolCall;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* State machine that consumes streamed visible text and emits cleaned text,
|
|
30
|
+
* thinking deltas, and reconstructed tool calls.
|
|
31
|
+
*
|
|
32
|
+
* A {@link ThinkingInbandScanner} always heals leaked reasoning idioms
|
|
33
|
+
* (`<think>`, `<thinking>`, ` ```thinking `, Gemma/Harmony channels, …) out of
|
|
34
|
+
* the visible channel. For Kimi / DeepSeek-DSML the provider tool-call grammar
|
|
35
|
+
* runs first and its cleaned text is piped through that thinking healer, so a
|
|
36
|
+
* model can leak tool-call markup and reasoning in the same stream.
|
|
37
|
+
*
|
|
38
|
+
* Feed only one stream channel (usually `delta.content` / `message.content`).
|
|
39
|
+
* Mixing reasoning and visible text into the same instance can corrupt held-back
|
|
40
|
+
* partial tag buffers.
|
|
41
|
+
*/
|
|
42
|
+
export declare class StreamMarkupHealing {
|
|
43
|
+
#private;
|
|
44
|
+
constructor(options: StreamMarkupHealingOptions);
|
|
45
|
+
get pattern(): StreamMarkupHealingPattern;
|
|
46
|
+
/**
|
|
47
|
+
* Feed a chunk and return visible text only. Reconstructed tool calls are
|
|
48
|
+
* stored for {@link drainCompleted}; thinking blocks are intentionally not
|
|
49
|
+
* returned by this compatibility helper. Use {@link feedEvents} when the caller
|
|
50
|
+
* needs ordered text/thinking/tool-call events.
|
|
51
|
+
*/
|
|
52
|
+
feed(text: string): string;
|
|
53
|
+
/** Feed a chunk and return cleaned text/thinking/tool-call events in stream order. */
|
|
54
|
+
feedEvents(text: string): StreamMarkupHealingEvent[];
|
|
55
|
+
/**
|
|
56
|
+
* Feed a chunk and return cleaned events, excluding synthesized tool calls.
|
|
57
|
+
* Used when the upstream chunk also carries structured `tool_calls`, keeping
|
|
58
|
+
* that structured payload as the single source of truth while preserving
|
|
59
|
+
* adjacent text and thinking events.
|
|
60
|
+
*/
|
|
61
|
+
feedEventsWithoutCalls(text: string): StreamMarkupHealingEvent[];
|
|
62
|
+
/** Drain accumulated tool calls from calls to {@link feed}. */
|
|
63
|
+
drainCompleted(): HealedToolCall[];
|
|
64
|
+
/**
|
|
65
|
+
* Flush held-back stream-end fragments as ordered events. Partial tool-call
|
|
66
|
+
* sections/envelopes are dropped by the delegated scanners; unterminated
|
|
67
|
+
* thinking blocks are emitted as thinking, matching the previous MiniMax parser
|
|
68
|
+
* behavior.
|
|
69
|
+
*/
|
|
70
|
+
flushEvents(): StreamMarkupHealingEvent[];
|
|
71
|
+
/** Flush held-back text only. Reconstructed calls are retained for {@link drainCompleted}. */
|
|
72
|
+
flushPending(): string;
|
|
73
|
+
/** True once any configured tool-call section/envelope has fully closed. */
|
|
74
|
+
get sectionClosed(): boolean;
|
|
75
|
+
}
|
|
76
|
+
/** Cheap model/provider gate for Kimi-K2 chat-template token leaks. */
|
|
77
|
+
export declare function modelMayLeakKimiToolCalls(provider: string, modelId: string): boolean;
|
|
78
|
+
/** Cheap model/provider gate for DeepSeek DSML envelope leaks. */
|
|
79
|
+
export declare function modelMayLeakDsmlToolCalls(provider: string, modelId: string): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Pick the leaked-markup healer for an OpenAI-compatible / Ollama visible-text
|
|
82
|
+
* stream. Kimi chat-template tokens and DeepSeek DSML envelopes need their
|
|
83
|
+
* dedicated tool-call grammars; every other model uses `"thinking"`. All three
|
|
84
|
+
* patterns run the generic {@link ThinkingInbandScanner}, so leaked reasoning
|
|
85
|
+
* idioms (e.g. a Gemini ` ```thinking ` fence on OpenRouter) are always healed.
|
|
86
|
+
*/
|
|
87
|
+
export declare function getStreamMarkupHealingPattern(provider: string, modelId: string): StreamMarkupHealingPattern;
|