@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,45 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthController, OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const AUTH_URL = "https://platform.parallel.ai/settings?tab=api-keys";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Login to Parallel.
|
|
9
|
+
*
|
|
10
|
+
* Opens browser to the API keys page, prompts the user to paste their API key,
|
|
11
|
+
* and returns the API key directly.
|
|
12
|
+
*/
|
|
13
|
+
export async function loginParallel(options: OAuthController): Promise<string> {
|
|
14
|
+
if (!options.onPrompt) {
|
|
15
|
+
throw new AIError.OnPromptRequiredError("Parallel");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
options.onAuth?.({
|
|
19
|
+
url: AUTH_URL,
|
|
20
|
+
instructions: "Copy your Parallel API key from the Parallel settings page.",
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const apiKey = await options.onPrompt({
|
|
24
|
+
message: "Paste your Parallel API key",
|
|
25
|
+
placeholder: "sk_...",
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
if (options.signal?.aborted) {
|
|
29
|
+
throw new AIError.LoginCancelledError();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const trimmed = apiKey.trim();
|
|
33
|
+
if (!trimmed) {
|
|
34
|
+
throw new AIError.ApiKeyRequiredError();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return trimmed;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const parallelProvider = {
|
|
41
|
+
id: "parallel",
|
|
42
|
+
name: "Parallel",
|
|
43
|
+
envKeys: "PARALLEL_API_KEY",
|
|
44
|
+
login: (cb: OAuthLoginCallbacks) => loginParallel(cb),
|
|
45
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const perplexityProvider = {
|
|
5
|
+
id: "perplexity",
|
|
6
|
+
name: "Perplexity (Pro/Max)",
|
|
7
|
+
envKeys: "PERPLEXITY_API_KEY",
|
|
8
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
9
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
10
|
+
const { loginPerplexity } = await import("./oauth/perplexity");
|
|
11
|
+
return loginPerplexity(cb);
|
|
12
|
+
},
|
|
13
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const AUTH_URL = "https://console.bce.baidu.com/qianfan/ais/console/apiKey";
|
|
6
|
+
const API_BASE_URL = "https://qianfan.baidubce.com/v2";
|
|
7
|
+
const VALIDATION_MODEL = "deepseek-v3.2";
|
|
8
|
+
|
|
9
|
+
export const loginQianfan = createApiKeyLogin({
|
|
10
|
+
providerLabel: "Qianfan",
|
|
11
|
+
authUrl: AUTH_URL,
|
|
12
|
+
instructions: "Copy your Qianfan API key from the console",
|
|
13
|
+
promptMessage: "Paste your Qianfan API key",
|
|
14
|
+
placeholder: "bce-v3/ALTAK-...",
|
|
15
|
+
validation: {
|
|
16
|
+
kind: "chat-completions",
|
|
17
|
+
provider: "qianfan",
|
|
18
|
+
baseUrl: API_BASE_URL,
|
|
19
|
+
model: VALIDATION_MODEL,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export const qianfanProvider = {
|
|
24
|
+
id: "qianfan",
|
|
25
|
+
name: "Qianfan",
|
|
26
|
+
login: (cb: OAuthLoginCallbacks) => loginQianfan(cb),
|
|
27
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import { validateOpenAICompatibleApiKey } from "./api-key-validation";
|
|
3
|
+
import type { OAuthController, OAuthLoginCallbacks } from "./oauth/types";
|
|
4
|
+
import type { ProviderDefinition } from "./types";
|
|
5
|
+
|
|
6
|
+
const AUTH_URL = "https://chat.qwen.ai";
|
|
7
|
+
const API_BASE_URL = "https://portal.qwen.ai/v1";
|
|
8
|
+
const VALIDATION_MODEL = "coder-model";
|
|
9
|
+
|
|
10
|
+
export async function loginQwenPortal(options: OAuthController): Promise<string> {
|
|
11
|
+
if (!options.onPrompt) {
|
|
12
|
+
throw new AIError.OnPromptRequiredError("Qwen Portal");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
options.onAuth?.({
|
|
16
|
+
url: AUTH_URL,
|
|
17
|
+
instructions: "Copy your Qwen OAuth token or API key",
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const token = await options.onPrompt({
|
|
21
|
+
message: "Paste your Qwen OAuth token or API key",
|
|
22
|
+
placeholder: "sk-...",
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
if (options.signal?.aborted) {
|
|
26
|
+
throw new AIError.LoginCancelledError();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const trimmed = token.trim();
|
|
30
|
+
if (!trimmed) {
|
|
31
|
+
throw new AIError.ApiKeyRequiredError("Qwen token/API key is required");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
options.onProgress?.("Validating credentials...");
|
|
35
|
+
await validateOpenAICompatibleApiKey({
|
|
36
|
+
provider: "qwen-portal",
|
|
37
|
+
apiKey: trimmed,
|
|
38
|
+
baseUrl: API_BASE_URL,
|
|
39
|
+
model: VALIDATION_MODEL,
|
|
40
|
+
signal: options.signal,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return trimmed;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export const qwenPortalProvider = {
|
|
47
|
+
id: "qwen-portal",
|
|
48
|
+
name: "Qwen Portal",
|
|
49
|
+
login: (cb: OAuthLoginCallbacks) => loginQwenPortal(cb),
|
|
50
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { KnownProvider } from "@linxiraos/pi-catalog";
|
|
2
|
+
import { aiandProvider } from "./aiand";
|
|
3
|
+
import { aimlApiProvider } from "./aimlapi";
|
|
4
|
+
import { alibabaCodingPlanProvider } from "./alibaba-coding-plan";
|
|
5
|
+
import { alibabaTokenPlanProvider } from "./alibaba-token-plan";
|
|
6
|
+
import { amazonBedrockProvider } from "./amazon-bedrock";
|
|
7
|
+
import { anthropicProvider } from "./anthropic";
|
|
8
|
+
import { azureProvider } from "./azure";
|
|
9
|
+
import { basetenProvider } from "./baseten";
|
|
10
|
+
import { bedrockMantleProvider } from "./bedrock-mantle";
|
|
11
|
+
import { cerebrasProvider } from "./cerebras";
|
|
12
|
+
import { cloudflareAiGatewayProvider } from "./cloudflare-ai-gateway";
|
|
13
|
+
import { coreWeaveProvider } from "./coreweave";
|
|
14
|
+
import { cursorProvider } from "./cursor";
|
|
15
|
+
import { deepseekProvider } from "./deepseek";
|
|
16
|
+
import { devinProvider } from "./devin";
|
|
17
|
+
import { exaProvider } from "./exa";
|
|
18
|
+
import { firepassProvider } from "./firepass";
|
|
19
|
+
import { fireworksProvider } from "./fireworks";
|
|
20
|
+
import { githubCopilotProvider } from "./github-copilot";
|
|
21
|
+
import { gitlabDuoProvider } from "./gitlab-duo";
|
|
22
|
+
import { gitLabDuoWorkflowProvider } from "./gitlab-duo-workflow";
|
|
23
|
+
import { gmiCloudProvider } from "./gmi-cloud";
|
|
24
|
+
import { googleProvider } from "./google";
|
|
25
|
+
import { googleAntigravityProvider } from "./google-antigravity";
|
|
26
|
+
import { googleGeminiCliProvider } from "./google-gemini-cli";
|
|
27
|
+
import { googleVertexProvider } from "./google-vertex";
|
|
28
|
+
import { groqProvider } from "./groq";
|
|
29
|
+
import { huggingfaceProvider } from "./huggingface";
|
|
30
|
+
import { kagiProvider } from "./kagi";
|
|
31
|
+
import { kiloProvider } from "./kilo";
|
|
32
|
+
import { kimiCodeProvider } from "./kimi-code";
|
|
33
|
+
import { litellmProvider } from "./litellm";
|
|
34
|
+
import { llamaCppProvider } from "./llama-cpp";
|
|
35
|
+
import { lmStudioProvider } from "./lm-studio";
|
|
36
|
+
import { metaProvider } from "./meta";
|
|
37
|
+
import { minimaxProvider } from "./minimax";
|
|
38
|
+
import { minimaxCodeProvider } from "./minimax-code";
|
|
39
|
+
import { minimaxCodeCnProvider } from "./minimax-code-cn";
|
|
40
|
+
import { mistralProvider } from "./mistral";
|
|
41
|
+
import { moonshotProvider } from "./moonshot";
|
|
42
|
+
import { nanogptProvider } from "./nanogpt";
|
|
43
|
+
import { novitaProvider } from "./novita";
|
|
44
|
+
import { nvidiaProvider } from "./nvidia";
|
|
45
|
+
import { ollamaProvider } from "./ollama";
|
|
46
|
+
import { ollamaCloudProvider } from "./ollama-cloud";
|
|
47
|
+
import { openaiProvider } from "./openai";
|
|
48
|
+
import { openaiCodexProvider } from "./openai-codex";
|
|
49
|
+
import { openaiCodexDeviceProvider } from "./openai-codex-device";
|
|
50
|
+
import { opencodeGoProvider } from "./opencode-go";
|
|
51
|
+
import { opencodeZenProvider } from "./opencode-zen";
|
|
52
|
+
import { openrouterProvider } from "./openrouter";
|
|
53
|
+
import { parallelProvider } from "./parallel";
|
|
54
|
+
import { perplexityProvider } from "./perplexity";
|
|
55
|
+
import { qianfanProvider } from "./qianfan";
|
|
56
|
+
import { qwenPortalProvider } from "./qwen-portal";
|
|
57
|
+
import { sakanaProvider } from "./sakana";
|
|
58
|
+
import { siliconflowProvider } from "./siliconflow";
|
|
59
|
+
import { siliconflowCnProvider } from "./siliconflow-cn";
|
|
60
|
+
import { syntheticProvider } from "./synthetic";
|
|
61
|
+
import { tavilyProvider } from "./tavily";
|
|
62
|
+
import { togetherProvider } from "./together";
|
|
63
|
+
import type { ProviderDefinition } from "./types";
|
|
64
|
+
import { umansProvider } from "./umans";
|
|
65
|
+
import { veniceProvider } from "./venice";
|
|
66
|
+
import { vercelAiGatewayProvider } from "./vercel-ai-gateway";
|
|
67
|
+
import { vllmProvider } from "./vllm";
|
|
68
|
+
import { waferServerlessProvider } from "./wafer-serverless";
|
|
69
|
+
import { xaiProvider } from "./xai";
|
|
70
|
+
import { xaiOauthProvider } from "./xai-oauth";
|
|
71
|
+
import { xiaomiProvider } from "./xiaomi";
|
|
72
|
+
import { xiaomiTokenPlanAmsProvider } from "./xiaomi-token-plan-ams";
|
|
73
|
+
import { xiaomiTokenPlanCnProvider } from "./xiaomi-token-plan-cn";
|
|
74
|
+
import { xiaomiTokenPlanSgpProvider } from "./xiaomi-token-plan-sgp";
|
|
75
|
+
import { zaiCodingPlanProvider, zaiProvider } from "./zai";
|
|
76
|
+
import { zenmuxProvider } from "./zenmux";
|
|
77
|
+
import { zhipuCodingPlanProvider } from "./zhipu-coding-plan";
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The single per-provider list. Adding a provider = create `./providers/<id>.ts`
|
|
81
|
+
* and add its export here. Every legacy structure (`KnownProvider`/`OAuthProvider`
|
|
82
|
+
* unions, descriptors, env map, login list, refresh/login dispatch, CLI callback
|
|
83
|
+
* maps) is derived from this registry. Order matches the interactive `/login`
|
|
84
|
+
* list for the loginable providers; non-login model providers are appended.
|
|
85
|
+
*/
|
|
86
|
+
const ALL = [
|
|
87
|
+
azureProvider,
|
|
88
|
+
openaiCodexProvider,
|
|
89
|
+
anthropicProvider,
|
|
90
|
+
zaiProvider,
|
|
91
|
+
zaiCodingPlanProvider,
|
|
92
|
+
kimiCodeProvider,
|
|
93
|
+
openrouterProvider,
|
|
94
|
+
githubCopilotProvider,
|
|
95
|
+
cursorProvider,
|
|
96
|
+
devinProvider,
|
|
97
|
+
googleAntigravityProvider,
|
|
98
|
+
googleGeminiCliProvider,
|
|
99
|
+
openaiCodexDeviceProvider,
|
|
100
|
+
xaiProvider,
|
|
101
|
+
xaiOauthProvider,
|
|
102
|
+
gitlabDuoProvider,
|
|
103
|
+
gitLabDuoWorkflowProvider,
|
|
104
|
+
alibabaCodingPlanProvider,
|
|
105
|
+
alibabaTokenPlanProvider,
|
|
106
|
+
aiandProvider,
|
|
107
|
+
aimlApiProvider,
|
|
108
|
+
zhipuCodingPlanProvider,
|
|
109
|
+
umansProvider,
|
|
110
|
+
qwenPortalProvider,
|
|
111
|
+
sakanaProvider,
|
|
112
|
+
minimaxCodeProvider,
|
|
113
|
+
minimaxCodeCnProvider,
|
|
114
|
+
xiaomiProvider,
|
|
115
|
+
xiaomiTokenPlanSgpProvider,
|
|
116
|
+
xiaomiTokenPlanAmsProvider,
|
|
117
|
+
xiaomiTokenPlanCnProvider,
|
|
118
|
+
firepassProvider,
|
|
119
|
+
deepseekProvider,
|
|
120
|
+
metaProvider,
|
|
121
|
+
moonshotProvider,
|
|
122
|
+
cerebrasProvider,
|
|
123
|
+
basetenProvider,
|
|
124
|
+
fireworksProvider,
|
|
125
|
+
togetherProvider,
|
|
126
|
+
nvidiaProvider,
|
|
127
|
+
novitaProvider,
|
|
128
|
+
huggingfaceProvider,
|
|
129
|
+
perplexityProvider,
|
|
130
|
+
qianfanProvider,
|
|
131
|
+
veniceProvider,
|
|
132
|
+
siliconflowProvider,
|
|
133
|
+
siliconflowCnProvider,
|
|
134
|
+
syntheticProvider,
|
|
135
|
+
nanogptProvider,
|
|
136
|
+
waferServerlessProvider,
|
|
137
|
+
coreWeaveProvider,
|
|
138
|
+
vercelAiGatewayProvider,
|
|
139
|
+
cloudflareAiGatewayProvider,
|
|
140
|
+
litellmProvider,
|
|
141
|
+
kiloProvider,
|
|
142
|
+
zenmuxProvider,
|
|
143
|
+
opencodeZenProvider,
|
|
144
|
+
opencodeGoProvider,
|
|
145
|
+
tavilyProvider,
|
|
146
|
+
kagiProvider,
|
|
147
|
+
exaProvider,
|
|
148
|
+
parallelProvider,
|
|
149
|
+
ollamaProvider,
|
|
150
|
+
ollamaCloudProvider,
|
|
151
|
+
lmStudioProvider,
|
|
152
|
+
llamaCppProvider,
|
|
153
|
+
vllmProvider,
|
|
154
|
+
openaiProvider,
|
|
155
|
+
googleProvider,
|
|
156
|
+
googleVertexProvider,
|
|
157
|
+
groqProvider,
|
|
158
|
+
mistralProvider,
|
|
159
|
+
minimaxProvider,
|
|
160
|
+
amazonBedrockProvider,
|
|
161
|
+
bedrockMantleProvider,
|
|
162
|
+
gmiCloudProvider,
|
|
163
|
+
];
|
|
164
|
+
|
|
165
|
+
export type RegistryDef = (typeof ALL)[number];
|
|
166
|
+
export const PROVIDER_REGISTRY: readonly ProviderDefinition[] = ALL;
|
|
167
|
+
|
|
168
|
+
const BY_ID = new Map<string, ProviderDefinition>(ALL.map(p => [p.id, p] as [string, ProviderDefinition]));
|
|
169
|
+
|
|
170
|
+
export function getProviderDefinition(id: string): ProviderDefinition | undefined {
|
|
171
|
+
return BY_ID.get(id);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** Compile-time completeness: every catalog chat-model provider must have a registry definition. */
|
|
175
|
+
type _MissingCatalogProviders = Exclude<KnownProvider, RegistryDef["id"]>;
|
|
176
|
+
type _CheckRegistryComplete = _MissingCatalogProviders extends never
|
|
177
|
+
? true
|
|
178
|
+
: ["registry is missing catalog providers", _MissingCatalogProviders];
|
|
179
|
+
true satisfies _CheckRegistryComplete;
|
|
180
|
+
|
|
181
|
+
/** Loginable providers (those carrying a `login` flow). */
|
|
182
|
+
export type OAuthProviderUnion = Extract<RegistryDef, { login: object }>["id"];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
export const loginSakana = createApiKeyLogin({
|
|
6
|
+
providerLabel: "Sakana AI",
|
|
7
|
+
authUrl: "https://console.sakana.ai/api-keys",
|
|
8
|
+
instructions: "Copy your API key from the Sakana AI console",
|
|
9
|
+
promptMessage: "Paste your Sakana AI API key",
|
|
10
|
+
placeholder: "sk-...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "models-endpoint",
|
|
13
|
+
provider: "Sakana AI",
|
|
14
|
+
modelsUrl: "https://api.sakana.ai/v1/models",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const sakanaProvider = {
|
|
19
|
+
id: "sakana",
|
|
20
|
+
name: "Sakana AI",
|
|
21
|
+
login: (cb: OAuthLoginCallbacks) => loginSakana(cb),
|
|
22
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
export const loginSiliconFlowCn = createApiKeyLogin({
|
|
6
|
+
providerLabel: "SiliconFlow (China)",
|
|
7
|
+
authUrl: "https://cloud.siliconflow.cn/account/ak",
|
|
8
|
+
instructions: "Create or copy your API key from the SiliconFlow console",
|
|
9
|
+
promptMessage: "Paste your SiliconFlow API key",
|
|
10
|
+
placeholder: "sk-...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "models-endpoint",
|
|
13
|
+
provider: "siliconflow-cn",
|
|
14
|
+
modelsUrl: "https://api.siliconflow.cn/v1/models",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const siliconflowCnProvider = {
|
|
19
|
+
id: "siliconflow-cn",
|
|
20
|
+
name: "SiliconFlow (China)",
|
|
21
|
+
login: (cb: OAuthLoginCallbacks) => loginSiliconFlowCn(cb),
|
|
22
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
export const loginSiliconFlow = createApiKeyLogin({
|
|
6
|
+
providerLabel: "SiliconFlow",
|
|
7
|
+
authUrl: "https://cloud.siliconflow.com/account/ak",
|
|
8
|
+
instructions: "Create or copy your API key from the SiliconFlow console",
|
|
9
|
+
promptMessage: "Paste your SiliconFlow API key",
|
|
10
|
+
placeholder: "sk-...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "models-endpoint",
|
|
13
|
+
provider: "siliconflow",
|
|
14
|
+
modelsUrl: "https://api.siliconflow.com/v1/models",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const siliconflowProvider = {
|
|
19
|
+
id: "siliconflow",
|
|
20
|
+
name: "SiliconFlow",
|
|
21
|
+
login: (cb: OAuthLoginCallbacks) => loginSiliconFlow(cb),
|
|
22
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const loginSynthetic = createApiKeyLogin({
|
|
5
|
+
providerLabel: "Synthetic",
|
|
6
|
+
authUrl: "https://dev.synthetic.new/docs/api/overview",
|
|
7
|
+
instructions: "Copy your API key from the Synthetic dashboard",
|
|
8
|
+
promptMessage: "Paste your Synthetic API key",
|
|
9
|
+
placeholder: "sk-...",
|
|
10
|
+
validation: {
|
|
11
|
+
kind: "models-endpoint",
|
|
12
|
+
provider: "Synthetic",
|
|
13
|
+
modelsUrl: "https://api.synthetic.new/openai/v1/models",
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export const syntheticProvider = {
|
|
18
|
+
id: "synthetic",
|
|
19
|
+
name: "Synthetic",
|
|
20
|
+
login: loginSynthetic,
|
|
21
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const AUTH_URL = "https://app.tavily.com/home";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Login to Tavily.
|
|
9
|
+
*
|
|
10
|
+
* Opens browser to API keys page and prompts user to paste their API key.
|
|
11
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
12
|
+
*/
|
|
13
|
+
export async function loginTavily(options: OAuthLoginCallbacks): Promise<string> {
|
|
14
|
+
if (!options.onPrompt) {
|
|
15
|
+
throw new AIError.OnPromptRequiredError("Tavily");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
options.onAuth?.({
|
|
19
|
+
url: AUTH_URL,
|
|
20
|
+
instructions: "Copy your Tavily API key from the API Keys page.",
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const apiKey = await options.onPrompt({
|
|
24
|
+
message: "Paste your Tavily API key",
|
|
25
|
+
placeholder: "tvly-...",
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
if (options.signal?.aborted) {
|
|
29
|
+
throw new AIError.LoginCancelledError();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const trimmed = apiKey.trim();
|
|
33
|
+
if (!trimmed) {
|
|
34
|
+
throw new AIError.ApiKeyRequiredError();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return trimmed;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const tavilyProvider = {
|
|
41
|
+
id: "tavily",
|
|
42
|
+
name: "Tavily",
|
|
43
|
+
envKeys: "TAVILY_API_KEY",
|
|
44
|
+
login: (cb: OAuthLoginCallbacks) => loginTavily(cb),
|
|
45
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const loginTogether = createApiKeyLogin({
|
|
5
|
+
providerLabel: "Together",
|
|
6
|
+
authUrl: "https://api.together.xyz/settings/api-keys",
|
|
7
|
+
instructions: "Copy your API key from the Together dashboard",
|
|
8
|
+
promptMessage: "Paste your Together API key",
|
|
9
|
+
placeholder: "sk-...",
|
|
10
|
+
validation: {
|
|
11
|
+
kind: "chat-completions",
|
|
12
|
+
provider: "together",
|
|
13
|
+
baseUrl: "https://api.together.xyz/v1",
|
|
14
|
+
model: "moonshotai/Kimi-K2.5",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const togetherProvider = {
|
|
19
|
+
id: "together",
|
|
20
|
+
name: "Together",
|
|
21
|
+
login: (cb: Parameters<typeof loginTogether>[0]) => loginTogether(cb),
|
|
22
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-source provider auth model. Every provider — model providers,
|
|
3
|
+
* gateways, search/tool credentials, and login-only flows — is described by
|
|
4
|
+
* one {@link ProviderDefinition}. The legacy scattered structures (the
|
|
5
|
+
* `OAuthProvider` union, `serviceProviderMap`, `builtInOAuthProviders`, the
|
|
6
|
+
* refresh/login switches, and the CLI callback maps) are all *derived* from
|
|
7
|
+
* the registry of these definitions. Adding a provider is one new file in
|
|
8
|
+
* `./providers/` plus one line in `./registry.ts`. Model-catalog metadata
|
|
9
|
+
* (default model, model-manager factory, catalog discovery) lives in
|
|
10
|
+
* `@linxiraos/pi-catalog`'s descriptor table.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { Api, FetchImpl, Model, SimpleStreamOptions, StreamOptions } from "../types";
|
|
14
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./oauth/types";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* API-key environment fallback: either a single env var name (e.g.
|
|
18
|
+
* `"OPENAI_API_KEY"`) or a resolver that inspects several env vars / probes
|
|
19
|
+
* the host (Vertex ADC, Bedrock credential chains, …).
|
|
20
|
+
*/
|
|
21
|
+
export type KeyResolver = string | (() => string | undefined);
|
|
22
|
+
|
|
23
|
+
/** Credentials are resolved by the provider transport rather than used as a bearer string. */
|
|
24
|
+
export const AUTHENTICATED_SENTINEL = "<authenticated>";
|
|
25
|
+
|
|
26
|
+
export interface PreparedProviderRequest {
|
|
27
|
+
readonly model: Model<Api>;
|
|
28
|
+
readonly options: StreamOptions;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type ProviderRequestPreparer = (model: Model<Api>, options: StreamOptions) => PreparedProviderRequest;
|
|
32
|
+
export type ProviderSimpleOptionsMapper = (options: SimpleStreamOptions) => Readonly<Record<string, unknown>>;
|
|
33
|
+
|
|
34
|
+
export interface ProviderModelDiscoveryConfig {
|
|
35
|
+
readonly apiKey?: string;
|
|
36
|
+
readonly baseUrl?: string;
|
|
37
|
+
readonly fetch?: FetchImpl;
|
|
38
|
+
readonly authenticated?: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type ProviderModelDiscoveryPreparer = (config: ProviderModelDiscoveryConfig) => ProviderModelDiscoveryConfig;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Declarative description of a single provider's auth/login wiring. All
|
|
45
|
+
* fields are optional except `id`/`name`; presence of a field opts the
|
|
46
|
+
* provider into a derived structure:
|
|
47
|
+
*
|
|
48
|
+
* - `envKeys` present ⇒ env-var fallback in `getEnvApiKey`, overriding the
|
|
49
|
+
* catalog table's `envVars` for that provider.
|
|
50
|
+
* - `login` present ⇒ member of `OAuthProvider`, shown in the `/login` list
|
|
51
|
+
* (unless `showInLoginList === false`) and dispatchable via `AuthStorage.login`.
|
|
52
|
+
* - `callbackPort` present ⇒ entry in the auth-broker `CALLBACK_PORTS` map.
|
|
53
|
+
* - `pasteCodeFlow` ⇒ member of `PASTE_CODE_LOGIN_PROVIDERS`.
|
|
54
|
+
*
|
|
55
|
+
* Heavy OAuth flow modules MUST be reached through dynamic-import thunks in
|
|
56
|
+
* `login`/`refreshToken` so they stay out of the eager startup graph.
|
|
57
|
+
*/
|
|
58
|
+
export interface ProviderDefinition {
|
|
59
|
+
readonly id: string;
|
|
60
|
+
readonly name: string;
|
|
61
|
+
/** Login-list availability flag. Defaults to true when shown. */
|
|
62
|
+
readonly available?: boolean;
|
|
63
|
+
/** Whether to surface in the interactive login list. Defaults to true when `login` is present. */
|
|
64
|
+
readonly showInLoginList?: boolean;
|
|
65
|
+
// --- env-var fallback (the catalog table's `envVars` supplies plain names; set this only for computed resolvers) ---
|
|
66
|
+
readonly envKeys?: KeyResolver;
|
|
67
|
+
/** Provider transport can authenticate without a resolved API-key string. */
|
|
68
|
+
readonly allowsMissingApiKey?: boolean;
|
|
69
|
+
/** Provider-owned request shaping applied before generic API dispatch. */
|
|
70
|
+
readonly prepareRequest?: ProviderRequestPreparer;
|
|
71
|
+
/** Provider-owned projection from the generic simple-stream option bag. */
|
|
72
|
+
readonly mapSimpleOptions?: ProviderSimpleOptionsMapper;
|
|
73
|
+
/** Provider-owned authentication and endpoint setup for model discovery. */
|
|
74
|
+
readonly prepareModelDiscovery?: ProviderModelDiscoveryPreparer;
|
|
75
|
+
// --- interactive login (OAuthProviderInterface-compatible) ---
|
|
76
|
+
readonly login?: (callbacks: OAuthLoginCallbacks) => Promise<OAuthCredentials | string>;
|
|
77
|
+
readonly refreshToken?: (credentials: OAuthCredentials) => Promise<OAuthCredentials>;
|
|
78
|
+
readonly getApiKey?: (credentials: OAuthCredentials) => string;
|
|
79
|
+
/** Store OAuth credentials under a different provider id (e.g. `openai-codex-device` ⇒ `openai-codex`). */
|
|
80
|
+
readonly storeCredentialsAs?: string;
|
|
81
|
+
// --- coding-agent login UX ---
|
|
82
|
+
/** Auth-broker local callback-server port. Presence ⇒ entry in `CALLBACK_PORTS`. */
|
|
83
|
+
readonly callbackPort?: number;
|
|
84
|
+
/** OAuth flow needs a pasted code/redirect URL rather than a callback server. */
|
|
85
|
+
readonly pasteCodeFlow?: boolean;
|
|
86
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
export const loginUmans = createApiKeyLogin({
|
|
6
|
+
providerLabel: "Umans AI Coding Plan",
|
|
7
|
+
authUrl: "https://app.umans.ai/billing",
|
|
8
|
+
instructions: "Create or copy your Umans API key from Dashboard → API Keys.",
|
|
9
|
+
promptMessage: "Paste your Umans API key",
|
|
10
|
+
placeholder: "sk-...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "anthropic-messages",
|
|
13
|
+
provider: "Umans AI Coding Plan",
|
|
14
|
+
baseUrl: "https://api.code.umans.ai",
|
|
15
|
+
model: "umans-coder",
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export const umansProvider = {
|
|
20
|
+
id: "umans",
|
|
21
|
+
name: "Umans AI Coding Plan",
|
|
22
|
+
login: (cb: OAuthLoginCallbacks) => loginUmans(cb),
|
|
23
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const AUTH_URL = "https://venice.ai/settings/api";
|
|
6
|
+
const API_BASE_URL = "https://api.venice.ai/api/v1";
|
|
7
|
+
const VALIDATION_MODEL = "qwen3-4b";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Login to Venice.
|
|
11
|
+
*
|
|
12
|
+
* Opens browser to API keys page, prompts user to paste their API key.
|
|
13
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
14
|
+
*/
|
|
15
|
+
export const loginVenice = createApiKeyLogin({
|
|
16
|
+
providerLabel: "Venice",
|
|
17
|
+
authUrl: AUTH_URL,
|
|
18
|
+
instructions: "Copy your API key from the Venice dashboard",
|
|
19
|
+
promptMessage: "Paste your Venice API key",
|
|
20
|
+
placeholder: "vapi_...",
|
|
21
|
+
validation: {
|
|
22
|
+
kind: "chat-completions",
|
|
23
|
+
provider: "Venice",
|
|
24
|
+
baseUrl: API_BASE_URL,
|
|
25
|
+
model: VALIDATION_MODEL,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export const veniceProvider = {
|
|
30
|
+
id: "venice",
|
|
31
|
+
name: "Venice",
|
|
32
|
+
login: (cb: OAuthLoginCallbacks) => loginVenice(cb),
|
|
33
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthController, OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const AUTH_URL = "https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai-gateway%2Fapi-keys&title=AI+Gateway+API+Keys";
|
|
6
|
+
|
|
7
|
+
export async function loginVercelAiGateway(options: OAuthController): Promise<string> {
|
|
8
|
+
if (!options.onPrompt) {
|
|
9
|
+
throw new AIError.OnPromptRequiredError("Vercel AI Gateway");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
options.onAuth?.({
|
|
13
|
+
url: AUTH_URL,
|
|
14
|
+
instructions: "Copy your Vercel AI Gateway API key from the Vercel dashboard",
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const apiKey = await options.onPrompt({
|
|
18
|
+
message: "Paste your Vercel AI Gateway API key",
|
|
19
|
+
placeholder: "vck_...",
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
if (options.signal?.aborted) {
|
|
23
|
+
throw new AIError.LoginCancelledError();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const trimmed = apiKey.trim();
|
|
27
|
+
if (!trimmed) {
|
|
28
|
+
throw new AIError.ApiKeyRequiredError();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return trimmed;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const vercelAiGatewayProvider = {
|
|
35
|
+
id: "vercel-ai-gateway",
|
|
36
|
+
name: "Vercel AI Gateway",
|
|
37
|
+
login: (cb: OAuthLoginCallbacks) => loginVercelAiGateway(cb),
|
|
38
|
+
} as const satisfies ProviderDefinition;
|