jeopi-ai 16.2.13
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 +4347 -0
- package/README.md +1193 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth-broker/client.d.ts +73 -0
- package/dist/types/auth-broker/discover.d.ts +35 -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 +102 -0
- package/dist/types/auth-broker/server.d.ts +43 -0
- package/dist/types/auth-broker/snapshot-cache.d.ts +17 -0
- package/dist/types/auth-broker/types.d.ts +107 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +411 -0
- package/dist/types/auth-gateway/http.d.ts +39 -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 +123 -0
- package/dist/types/auth-retry.d.ts +124 -0
- package/dist/types/auth-storage.d.ts +1026 -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 +23 -0
- package/dist/types/dialect/examples.d.ts +2 -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 +12 -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 +45 -0
- package/dist/types/dialect/thinking.d.ts +6 -0
- package/dist/types/dialect/types.d.ts +69 -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 +16 -0
- package/dist/types/error/auth.d.ts +27 -0
- package/dist/types/error/aws.d.ts +23 -0
- package/dist/types/error/classes.d.ts +102 -0
- package/dist/types/error/finalize.d.ts +39 -0
- package/dist/types/error/flags.d.ts +79 -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 +13 -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 +59 -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 +49 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/providers/__tests__/google-auth.test.d.ts +1 -0
- package/dist/types/providers/__tests__/kimi-code-thinking.test.d.ts +1 -0
- package/dist/types/providers/__tests__/openai-codex-error.test.d.ts +1 -0
- package/dist/types/providers/amazon-bedrock.d.ts +39 -0
- package/dist/types/providers/anthropic-client.d.ts +94 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +497 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic-wire.d.ts +318 -0
- package/dist/types/providers/anthropic.d.ts +248 -0
- package/dist/types/providers/aws-credentials.d.ts +53 -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/cursor.d.ts +91 -0
- package/dist/types/providers/devin.d.ts +12 -0
- package/dist/types/providers/error-message.d.ts +27 -0
- package/dist/types/providers/github-copilot-headers.d.ts +40 -0
- package/dist/types/providers/gitlab-duo-workflow.d.ts +254 -0
- package/dist/types/providers/gitlab-duo.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +32 -0
- package/dist/types/providers/google-gemini-cli.d.ts +118 -0
- package/dist/types/providers/google-interactions.d.ts +65 -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 +178 -0
- package/dist/types/providers/ollama.d.ts +7 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +695 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-chat-wire.d.ts +644 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +54 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +26 -0
- package/dist/types/providers/openai-codex-responses.d.ts +108 -0
- package/dist/types/providers/openai-completions.d.ts +45 -0
- package/dist/types/providers/openai-reasoning-fallback.d.ts +25 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +349 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-wire.d.ts +6065 -0
- package/dist/types/providers/openai-responses.d.ts +126 -0
- package/dist/types/providers/openai-shared.d.ts +506 -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 +32 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +11 -0
- package/dist/types/providers/vision-guard.d.ts +20 -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/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/azure.d.ts +4 -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/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/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/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/nvidia.d.ts +7 -0
- package/dist/types/registry/oauth/__tests__/xai-oauth.test.d.ts +1 -0
- package/dist/types/registry/oauth/anthropic.d.ts +23 -0
- package/dist/types/registry/oauth/callback-server.d.ts +72 -0
- package/dist/types/registry/oauth/cursor.d.ts +15 -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 +10 -0
- package/dist/types/registry/oauth/google-oauth-shared.d.ts +22 -0
- package/dist/types/registry/oauth/index.d.ts +64 -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 +56 -0
- package/dist/types/registry/oauth/wafer.d.ts +1 -0
- package/dist/types/registry/oauth/xai-oauth.d.ts +52 -0
- package/dist/types/registry/oauth/xiaomi.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 +303 -0
- package/dist/types/registry/sakana.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 +51 -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 +4 -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 +7 -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 +44 -0
- package/dist/types/types.d.ts +715 -0
- package/dist/types/usage/claude.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 +2 -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 +79 -0
- package/dist/types/usage/openai-codex.d.ts +3 -0
- package/dist/types/usage/opencode-go.d.ts +2 -0
- package/dist/types/usage/shared.d.ts +1 -0
- package/dist/types/usage/zai.d.ts +2 -0
- package/dist/types/usage.d.ts +346 -0
- package/dist/types/utils/abort.d.ts +25 -0
- package/dist/types/utils/anthropic-auth.d.ts +35 -0
- package/dist/types/utils/block-symbols.d.ts +20 -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 +30 -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 +118 -0
- package/dist/types/utils/http-inspector.d.ts +30 -0
- package/dist/types/utils/idle-iterator.d.ts +137 -0
- package/dist/types/utils/leaked-thinking-stream.d.ts +29 -0
- package/dist/types/utils/openai-http.d.ts +54 -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 +29 -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 +15 -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 +124 -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 +18 -0
- package/dist/types/utils/schema/wire.d.ts +92 -0
- package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -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 +50 -0
- package/dist/types/utils/validation.d.ts +42 -0
- package/dist/types/utils.d.ts +24 -0
- package/package.json +139 -0
- package/src/api-registry.ts +109 -0
- package/src/auth-broker/client.ts +359 -0
- package/src/auth-broker/discover.ts +222 -0
- package/src/auth-broker/index.ts +7 -0
- package/src/auth-broker/refresher.ts +117 -0
- package/src/auth-broker/remote-store.ts +657 -0
- package/src/auth-broker/server.ts +646 -0
- package/src/auth-broker/snapshot-cache.ts +191 -0
- package/src/auth-broker/types.ts +130 -0
- package/src/auth-broker/wire-schemas.ts +249 -0
- package/src/auth-gateway/http.ts +194 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +802 -0
- package/src/auth-gateway/types.ts +151 -0
- package/src/auth-retry.ts +250 -0
- package/src/auth-storage.ts +5576 -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 +36 -0
- package/src/dialect/examples.ts +33 -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 +597 -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 +456 -0
- package/src/dialect/harmony.md +31 -0
- package/src/dialect/harmony.ts +346 -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 +73 -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 +470 -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 +249 -0
- package/src/dialect/thinking.ts +122 -0
- package/src/dialect/types.ts +57 -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 +30 -0
- package/src/error/auth.ts +48 -0
- package/src/error/aws.ts +31 -0
- package/src/error/classes.ts +186 -0
- package/src/error/finalize.ts +69 -0
- package/src/error/flags.ts +506 -0
- package/src/error/format.ts +45 -0
- package/src/error/gateway.ts +96 -0
- package/src/error/index.ts +13 -0
- package/src/error/oauth.ts +58 -0
- package/src/error/provider.ts +62 -0
- package/src/error/rate-limit.ts +161 -0
- package/src/error/retryable.ts +70 -0
- package/src/error/validation.ts +44 -0
- package/src/index.ts +49 -0
- package/src/provider-details.ts +90 -0
- package/src/providers/__tests__/google-auth.test.ts +144 -0
- package/src/providers/__tests__/kimi-code-thinking.test.ts +112 -0
- package/src/providers/__tests__/openai-codex-error.test.ts +84 -0
- package/src/providers/amazon-bedrock.ts +1042 -0
- package/src/providers/anthropic-client.ts +295 -0
- package/src/providers/anthropic-messages-server-schema.ts +252 -0
- package/src/providers/anthropic-messages-server.ts +756 -0
- package/src/providers/anthropic-wire.ts +318 -0
- package/src/providers/anthropic.ts +4078 -0
- package/src/providers/aws-credentials.ts +586 -0
- package/src/providers/aws-eventstream.ts +181 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.ts +382 -0
- package/src/providers/cursor/proto/agent.proto +3526 -0
- package/src/providers/cursor/proto/buf.gen.yaml +6 -0
- package/src/providers/cursor/proto/buf.yaml +17 -0
- package/src/providers/cursor.ts +2695 -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 +577 -0
- package/src/providers/error-message.ts +21 -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 +3058 -0
- package/src/providers/gitlab-duo.ts +395 -0
- package/src/providers/google-auth.ts +350 -0
- package/src/providers/google-gemini-cli.ts +1362 -0
- package/src/providers/google-interactions.ts +753 -0
- package/src/providers/google-shared.ts +1103 -0
- package/src/providers/google-types.ts +180 -0
- package/src/providers/google-vertex.ts +183 -0
- package/src/providers/google.ts +87 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.ts +52 -0
- package/src/providers/mock.ts +507 -0
- package/src/providers/ollama.ts +773 -0
- package/src/providers/openai-anthropic-shim.ts +152 -0
- package/src/providers/openai-chat-server-schema.ts +242 -0
- package/src/providers/openai-chat-server.ts +715 -0
- package/src/providers/openai-chat-wire.ts +847 -0
- package/src/providers/openai-codex/request-transformer.ts +295 -0
- package/src/providers/openai-codex/response-handler.ts +102 -0
- package/src/providers/openai-codex-responses.ts +3468 -0
- package/src/providers/openai-completions.ts +2173 -0
- package/src/providers/openai-reasoning-fallback.ts +269 -0
- package/src/providers/openai-responses-reasoning-suppression.md +1 -0
- package/src/providers/openai-responses-server-schema.ts +282 -0
- package/src/providers/openai-responses-server.ts +1280 -0
- package/src/providers/openai-responses-wire.ts +6391 -0
- package/src/providers/openai-responses.ts +1022 -0
- package/src/providers/openai-shared.ts +2648 -0
- package/src/providers/pi-native-client.ts +266 -0
- package/src/providers/pi-native-server.ts +242 -0
- package/src/providers/register-builtins.ts +475 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.ts +787 -0
- package/src/providers/vision-guard.ts +54 -0
- package/src/registry/aimlapi.ts +6 -0
- package/src/registry/alibaba-coding-plan.ts +95 -0
- package/src/registry/amazon-bedrock.ts +22 -0
- package/src/registry/anthropic.ts +26 -0
- package/src/registry/api-key-login.ts +112 -0
- package/src/registry/api-key-validation.ts +161 -0
- package/src/registry/azure.ts +6 -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/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/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/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 +22 -0
- package/src/registry/nanogpt.ts +22 -0
- package/src/registry/nvidia.ts +61 -0
- package/src/registry/oauth/__tests__/xai-oauth.test.ts +104 -0
- package/src/registry/oauth/anthropic.ts +311 -0
- package/src/registry/oauth/callback-server.ts +315 -0
- package/src/registry/oauth/cursor.ts +171 -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 +209 -0
- package/src/registry/oauth/google-gemini-cli.ts +273 -0
- package/src/registry/oauth/google-oauth-shared.ts +125 -0
- package/src/registry/oauth/index.ts +269 -0
- package/src/registry/oauth/kimi.ts +289 -0
- package/src/registry/oauth/minimax-code.ts +53 -0
- package/src/registry/oauth/oauth.html +311 -0
- package/src/registry/oauth/openai-codex.ts +364 -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 +65 -0
- package/src/registry/oauth/wafer.ts +24 -0
- package/src/registry/oauth/xai-oauth.ts +394 -0
- package/src/registry/oauth/xiaomi.ts +211 -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 +161 -0
- package/src/registry/sakana.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 +56 -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 +6 -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 +27 -0
- package/src/registry/zenmux.ts +22 -0
- package/src/registry/zhipu-coding-plan.ts +27 -0
- package/src/stream.ts +1778 -0
- package/src/types.ts +856 -0
- package/src/usage/claude.ts +485 -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 +271 -0
- package/src/usage/minimax-code.ts +30 -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 +174 -0
- package/src/usage/openai-codex.ts +535 -0
- package/src/usage/opencode-go.ts +89 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/zai.ts +321 -0
- package/src/usage.ts +333 -0
- package/src/utils/abort.ts +67 -0
- package/src/utils/anthropic-auth.ts +93 -0
- package/src/utils/block-symbols.ts +32 -0
- package/src/utils/deterministic-id.ts +20 -0
- package/src/utils/empty-completion-retry.ts +159 -0
- package/src/utils/event-stream.ts +171 -0
- package/src/utils/foundry.ts +8 -0
- package/src/utils/google-validation.ts +25 -0
- package/src/utils/harmony-leak.ts +456 -0
- package/src/utils/http-inspector.ts +168 -0
- package/src/utils/idle-iterator.ts +473 -0
- package/src/utils/leaked-thinking-stream.ts +294 -0
- package/src/utils/openai-http.ts +122 -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 +240 -0
- package/src/utils/request-debug.ts +351 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry.ts +59 -0
- package/src/utils/schema/CONSTRAINTS.md +166 -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 +207 -0
- package/src/utils/schema/index.ts +15 -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 +1901 -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 +198 -0
- package/src/utils/schema/wire.ts +789 -0
- package/src/utils/schema/zod-decontaminate.ts +331 -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 +99 -0
- package/src/utils/validation.ts +1507 -0
- package/src/utils.ts +171 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthController, OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const OLLAMA_CLOUD_KEYS_URL = "https://ollama.com/settings/keys";
|
|
6
|
+
|
|
7
|
+
export async function loginOllamaCloud(options: OAuthController): Promise<string> {
|
|
8
|
+
if (options.signal?.aborted) {
|
|
9
|
+
throw new AIError.LoginCancelledError();
|
|
10
|
+
}
|
|
11
|
+
if (!options.onPrompt) {
|
|
12
|
+
throw new AIError.ConfigurationError("Interactive prompt is required for Ollama Cloud login");
|
|
13
|
+
}
|
|
14
|
+
options.onAuth?.({
|
|
15
|
+
url: OLLAMA_CLOUD_KEYS_URL,
|
|
16
|
+
instructions: "Create an Ollama Cloud API key, then paste it here.",
|
|
17
|
+
});
|
|
18
|
+
const apiKey = await options.onPrompt({
|
|
19
|
+
message: "Paste your Ollama Cloud API key",
|
|
20
|
+
placeholder: "ollama-cloud-api-key",
|
|
21
|
+
});
|
|
22
|
+
if (options.signal?.aborted) {
|
|
23
|
+
throw new AIError.LoginCancelledError();
|
|
24
|
+
}
|
|
25
|
+
const trimmed = apiKey.trim();
|
|
26
|
+
if (!trimmed) {
|
|
27
|
+
throw new AIError.ApiKeyRequiredError("Ollama Cloud API key is required");
|
|
28
|
+
}
|
|
29
|
+
return trimmed;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const ollamaCloudProvider = {
|
|
33
|
+
id: "ollama-cloud",
|
|
34
|
+
name: "Ollama Cloud",
|
|
35
|
+
login: (cb: OAuthLoginCallbacks) => loginOllamaCloud(cb),
|
|
36
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthController } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const OLLAMA_DOCS_URL = "https://github.com/ollama/ollama/blob/main/docs/api.md";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Login to Ollama.
|
|
9
|
+
*
|
|
10
|
+
* Returns a trimmed API key/token string. Empty string means local no-auth mode.
|
|
11
|
+
*/
|
|
12
|
+
export async function loginOllama(options: OAuthController): Promise<string> {
|
|
13
|
+
if (options.signal?.aborted) {
|
|
14
|
+
throw new AIError.LoginCancelledError();
|
|
15
|
+
}
|
|
16
|
+
if (!options.onPrompt) {
|
|
17
|
+
return "";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
options.onAuth?.({
|
|
21
|
+
url: OLLAMA_DOCS_URL,
|
|
22
|
+
instructions:
|
|
23
|
+
"Optional: paste an Ollama API key/token for authenticated hosts. Leave empty for local no-auth mode.",
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const apiKey = await options.onPrompt({
|
|
27
|
+
message: "Paste your Ollama API key/token (optional)",
|
|
28
|
+
placeholder: "ollama-local",
|
|
29
|
+
allowEmpty: true,
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
if (options.signal?.aborted) {
|
|
33
|
+
throw new AIError.LoginCancelledError();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return apiKey.trim();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const ollamaProvider = {
|
|
40
|
+
id: "ollama",
|
|
41
|
+
name: "Ollama (Local OpenAI-compatible)",
|
|
42
|
+
login: loginOllama,
|
|
43
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./oauth/types";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const openaiCodexDeviceProvider = {
|
|
5
|
+
id: "openai-codex-device",
|
|
6
|
+
name: "ChatGPT Plus/Pro (Codex, headless/device)",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginOpenAICodexDevice } = await import("./oauth/openai-codex");
|
|
10
|
+
return loginOpenAICodexDevice(cb);
|
|
11
|
+
},
|
|
12
|
+
refreshToken: async (credentials: OAuthCredentials) => {
|
|
13
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
14
|
+
const { refreshOpenAICodexToken } = await import("./oauth/openai-codex");
|
|
15
|
+
return refreshOpenAICodexToken(credentials.refresh);
|
|
16
|
+
},
|
|
17
|
+
storeCredentialsAs: "openai-codex",
|
|
18
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./oauth/types";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const openaiCodexProvider = {
|
|
5
|
+
id: "openai-codex",
|
|
6
|
+
name: "ChatGPT Plus/Pro (Codex Subscription)",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginOpenAICodex } = await import("./oauth/openai-codex");
|
|
10
|
+
return loginOpenAICodex(cb);
|
|
11
|
+
},
|
|
12
|
+
refreshToken: async (credentials: OAuthCredentials) => {
|
|
13
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
14
|
+
const { refreshOpenAICodexToken } = await import("./oauth/openai-codex");
|
|
15
|
+
return refreshOpenAICodexToken(credentials.refresh);
|
|
16
|
+
},
|
|
17
|
+
callbackPort: 1455,
|
|
18
|
+
pasteCodeFlow: true,
|
|
19
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const opencodeGoProvider = {
|
|
5
|
+
id: "opencode-go",
|
|
6
|
+
name: "OpenCode Go",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginOpenCode } = await import("./oauth/opencode");
|
|
10
|
+
return loginOpenCode(cb);
|
|
11
|
+
},
|
|
12
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const opencodeZenProvider = {
|
|
5
|
+
id: "opencode-zen",
|
|
6
|
+
name: "OpenCode Zen",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginOpenCode } = await import("./oauth/opencode");
|
|
10
|
+
return loginOpenCode(cb);
|
|
11
|
+
},
|
|
12
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
/** OpenRouter login flow (API key paste, validated via /auth/key).
|
|
6
|
+
*
|
|
7
|
+
* `/api/v1/models` is public and returns 200 for any bearer (including bogus),
|
|
8
|
+
* so it cannot validate auth. `/api/v1/auth/key` is the canonical "who am I"
|
|
9
|
+
* endpoint — 200 for valid keys, 401 otherwise.
|
|
10
|
+
*/
|
|
11
|
+
export const loginOpenRouter = createApiKeyLogin({
|
|
12
|
+
providerLabel: "OpenRouter",
|
|
13
|
+
authUrl: "https://openrouter.ai/keys",
|
|
14
|
+
instructions: "Create or copy your OpenRouter API key",
|
|
15
|
+
promptMessage: "Paste your OpenRouter API key",
|
|
16
|
+
placeholder: "sk-or-...",
|
|
17
|
+
validation: {
|
|
18
|
+
kind: "models-endpoint",
|
|
19
|
+
provider: "OpenRouter",
|
|
20
|
+
modelsUrl: "https://openrouter.ai/api/v1/auth/key",
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const openrouterProvider = {
|
|
25
|
+
id: "openrouter",
|
|
26
|
+
name: "OpenRouter",
|
|
27
|
+
login: (cb: OAuthLoginCallbacks) => loginOpenRouter(cb),
|
|
28
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -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,161 @@
|
|
|
1
|
+
import type { KnownProvider } from "jeopi-catalog";
|
|
2
|
+
import { aimlApiProvider } from "./aimlapi";
|
|
3
|
+
import { alibabaCodingPlanProvider } from "./alibaba-coding-plan";
|
|
4
|
+
import { amazonBedrockProvider } from "./amazon-bedrock";
|
|
5
|
+
import { anthropicProvider } from "./anthropic";
|
|
6
|
+
import { azureProvider } from "./azure";
|
|
7
|
+
import { cerebrasProvider } from "./cerebras";
|
|
8
|
+
import { cloudflareAiGatewayProvider } from "./cloudflare-ai-gateway";
|
|
9
|
+
import { coreWeaveProvider } from "./coreweave";
|
|
10
|
+
import { cursorProvider } from "./cursor";
|
|
11
|
+
import { deepseekProvider } from "./deepseek";
|
|
12
|
+
import { devinProvider } from "./devin";
|
|
13
|
+
import { firepassProvider } from "./firepass";
|
|
14
|
+
import { fireworksProvider } from "./fireworks";
|
|
15
|
+
import { githubCopilotProvider } from "./github-copilot";
|
|
16
|
+
import { gitlabDuoProvider } from "./gitlab-duo";
|
|
17
|
+
import { gitLabDuoWorkflowProvider } from "./gitlab-duo-workflow";
|
|
18
|
+
import { googleProvider } from "./google";
|
|
19
|
+
import { googleAntigravityProvider } from "./google-antigravity";
|
|
20
|
+
import { googleGeminiCliProvider } from "./google-gemini-cli";
|
|
21
|
+
import { googleVertexProvider } from "./google-vertex";
|
|
22
|
+
import { groqProvider } from "./groq";
|
|
23
|
+
import { huggingfaceProvider } from "./huggingface";
|
|
24
|
+
import { kagiProvider } from "./kagi";
|
|
25
|
+
import { kiloProvider } from "./kilo";
|
|
26
|
+
import { kimiCodeProvider } from "./kimi-code";
|
|
27
|
+
import { litellmProvider } from "./litellm";
|
|
28
|
+
import { llamaCppProvider } from "./llama-cpp";
|
|
29
|
+
import { lmStudioProvider } from "./lm-studio";
|
|
30
|
+
import { minimaxProvider } from "./minimax";
|
|
31
|
+
import { minimaxCodeProvider } from "./minimax-code";
|
|
32
|
+
import { minimaxCodeCnProvider } from "./minimax-code-cn";
|
|
33
|
+
import { mistralProvider } from "./mistral";
|
|
34
|
+
import { moonshotProvider } from "./moonshot";
|
|
35
|
+
import { nanogptProvider } from "./nanogpt";
|
|
36
|
+
import { nvidiaProvider } from "./nvidia";
|
|
37
|
+
import { ollamaProvider } from "./ollama";
|
|
38
|
+
import { ollamaCloudProvider } from "./ollama-cloud";
|
|
39
|
+
import { openaiProvider } from "./openai";
|
|
40
|
+
import { openaiCodexProvider } from "./openai-codex";
|
|
41
|
+
import { openaiCodexDeviceProvider } from "./openai-codex-device";
|
|
42
|
+
import { opencodeGoProvider } from "./opencode-go";
|
|
43
|
+
import { opencodeZenProvider } from "./opencode-zen";
|
|
44
|
+
import { openrouterProvider } from "./openrouter";
|
|
45
|
+
import { parallelProvider } from "./parallel";
|
|
46
|
+
import { perplexityProvider } from "./perplexity";
|
|
47
|
+
import { qianfanProvider } from "./qianfan";
|
|
48
|
+
import { qwenPortalProvider } from "./qwen-portal";
|
|
49
|
+
import { sakanaProvider } from "./sakana";
|
|
50
|
+
import { syntheticProvider } from "./synthetic";
|
|
51
|
+
import { tavilyProvider } from "./tavily";
|
|
52
|
+
import { togetherProvider } from "./together";
|
|
53
|
+
import type { ProviderDefinition } from "./types";
|
|
54
|
+
import { umansProvider } from "./umans";
|
|
55
|
+
import { veniceProvider } from "./venice";
|
|
56
|
+
import { vercelAiGatewayProvider } from "./vercel-ai-gateway";
|
|
57
|
+
import { vllmProvider } from "./vllm";
|
|
58
|
+
import { waferServerlessProvider } from "./wafer-serverless";
|
|
59
|
+
import { xaiProvider } from "./xai";
|
|
60
|
+
import { xaiOauthProvider } from "./xai-oauth";
|
|
61
|
+
import { xiaomiProvider } from "./xiaomi";
|
|
62
|
+
import { xiaomiTokenPlanAmsProvider } from "./xiaomi-token-plan-ams";
|
|
63
|
+
import { xiaomiTokenPlanCnProvider } from "./xiaomi-token-plan-cn";
|
|
64
|
+
import { xiaomiTokenPlanSgpProvider } from "./xiaomi-token-plan-sgp";
|
|
65
|
+
import { zaiProvider } from "./zai";
|
|
66
|
+
import { zenmuxProvider } from "./zenmux";
|
|
67
|
+
import { zhipuCodingPlanProvider } from "./zhipu-coding-plan";
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The single per-provider list. Adding a provider = create `./providers/<id>.ts`
|
|
71
|
+
* and add its export here. Every legacy structure (`KnownProvider`/`OAuthProvider`
|
|
72
|
+
* unions, descriptors, env map, login list, refresh/login dispatch, CLI callback
|
|
73
|
+
* maps) is derived from this registry. Order matches the interactive `/login`
|
|
74
|
+
* list for the loginable providers; non-login model providers are appended.
|
|
75
|
+
*/
|
|
76
|
+
const ALL = [
|
|
77
|
+
azureProvider,
|
|
78
|
+
openaiCodexProvider,
|
|
79
|
+
anthropicProvider,
|
|
80
|
+
zaiProvider,
|
|
81
|
+
kimiCodeProvider,
|
|
82
|
+
openrouterProvider,
|
|
83
|
+
githubCopilotProvider,
|
|
84
|
+
cursorProvider,
|
|
85
|
+
devinProvider,
|
|
86
|
+
googleAntigravityProvider,
|
|
87
|
+
googleGeminiCliProvider,
|
|
88
|
+
openaiCodexDeviceProvider,
|
|
89
|
+
xaiOauthProvider,
|
|
90
|
+
gitlabDuoProvider,
|
|
91
|
+
gitLabDuoWorkflowProvider,
|
|
92
|
+
alibabaCodingPlanProvider,
|
|
93
|
+
aimlApiProvider,
|
|
94
|
+
zhipuCodingPlanProvider,
|
|
95
|
+
umansProvider,
|
|
96
|
+
qwenPortalProvider,
|
|
97
|
+
sakanaProvider,
|
|
98
|
+
minimaxCodeProvider,
|
|
99
|
+
minimaxCodeCnProvider,
|
|
100
|
+
xiaomiProvider,
|
|
101
|
+
xiaomiTokenPlanSgpProvider,
|
|
102
|
+
xiaomiTokenPlanAmsProvider,
|
|
103
|
+
xiaomiTokenPlanCnProvider,
|
|
104
|
+
firepassProvider,
|
|
105
|
+
deepseekProvider,
|
|
106
|
+
moonshotProvider,
|
|
107
|
+
cerebrasProvider,
|
|
108
|
+
fireworksProvider,
|
|
109
|
+
togetherProvider,
|
|
110
|
+
nvidiaProvider,
|
|
111
|
+
huggingfaceProvider,
|
|
112
|
+
perplexityProvider,
|
|
113
|
+
qianfanProvider,
|
|
114
|
+
veniceProvider,
|
|
115
|
+
syntheticProvider,
|
|
116
|
+
nanogptProvider,
|
|
117
|
+
waferServerlessProvider,
|
|
118
|
+
coreWeaveProvider,
|
|
119
|
+
vercelAiGatewayProvider,
|
|
120
|
+
cloudflareAiGatewayProvider,
|
|
121
|
+
litellmProvider,
|
|
122
|
+
kiloProvider,
|
|
123
|
+
zenmuxProvider,
|
|
124
|
+
opencodeZenProvider,
|
|
125
|
+
opencodeGoProvider,
|
|
126
|
+
tavilyProvider,
|
|
127
|
+
kagiProvider,
|
|
128
|
+
parallelProvider,
|
|
129
|
+
ollamaProvider,
|
|
130
|
+
ollamaCloudProvider,
|
|
131
|
+
lmStudioProvider,
|
|
132
|
+
llamaCppProvider,
|
|
133
|
+
vllmProvider,
|
|
134
|
+
openaiProvider,
|
|
135
|
+
googleProvider,
|
|
136
|
+
googleVertexProvider,
|
|
137
|
+
xaiProvider,
|
|
138
|
+
groqProvider,
|
|
139
|
+
mistralProvider,
|
|
140
|
+
minimaxProvider,
|
|
141
|
+
amazonBedrockProvider,
|
|
142
|
+
];
|
|
143
|
+
|
|
144
|
+
export type RegistryDef = (typeof ALL)[number];
|
|
145
|
+
export const PROVIDER_REGISTRY: readonly ProviderDefinition[] = ALL;
|
|
146
|
+
|
|
147
|
+
const BY_ID = new Map<string, ProviderDefinition>(ALL.map(p => [p.id, p] as [string, ProviderDefinition]));
|
|
148
|
+
|
|
149
|
+
export function getProviderDefinition(id: string): ProviderDefinition | undefined {
|
|
150
|
+
return BY_ID.get(id);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Compile-time completeness: every catalog chat-model provider must have a registry definition. */
|
|
154
|
+
type _MissingCatalogProviders = Exclude<KnownProvider, RegistryDef["id"]>;
|
|
155
|
+
type _CheckRegistryComplete = _MissingCatalogProviders extends never
|
|
156
|
+
? true
|
|
157
|
+
: ["registry is missing catalog providers", _MissingCatalogProviders];
|
|
158
|
+
true satisfies _CheckRegistryComplete;
|
|
159
|
+
|
|
160
|
+
/** Loginable providers (those carrying a `login` flow). */
|
|
161
|
+
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,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,56 @@
|
|
|
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
|
+
* `jeopi-catalog`'s descriptor table.
|
|
11
|
+
*/
|
|
12
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./oauth/types";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* API-key environment fallback: either a single env var name (e.g.
|
|
16
|
+
* `"OPENAI_API_KEY"`) or a resolver that inspects several env vars / probes
|
|
17
|
+
* the host (Vertex ADC, Bedrock credential chains, …).
|
|
18
|
+
*/
|
|
19
|
+
export type KeyResolver = string | (() => string | undefined);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Declarative description of a single provider's auth/login wiring. All
|
|
23
|
+
* fields are optional except `id`/`name`; presence of a field opts the
|
|
24
|
+
* provider into a derived structure:
|
|
25
|
+
*
|
|
26
|
+
* - `envKeys` present ⇒ env-var fallback in `getEnvApiKey`, overriding the
|
|
27
|
+
* catalog table's `envVars` for that provider.
|
|
28
|
+
* - `login` present ⇒ member of `OAuthProvider`, shown in the `/login` list
|
|
29
|
+
* (unless `showInLoginList === false`) and dispatchable via `AuthStorage.login`.
|
|
30
|
+
* - `callbackPort` present ⇒ entry in the auth-broker `CALLBACK_PORTS` map.
|
|
31
|
+
* - `pasteCodeFlow` ⇒ member of `PASTE_CODE_LOGIN_PROVIDERS`.
|
|
32
|
+
*
|
|
33
|
+
* Heavy OAuth flow modules MUST be reached through dynamic-import thunks in
|
|
34
|
+
* `login`/`refreshToken` so they stay out of the eager startup graph.
|
|
35
|
+
*/
|
|
36
|
+
export interface ProviderDefinition {
|
|
37
|
+
readonly id: string;
|
|
38
|
+
readonly name: string;
|
|
39
|
+
/** Login-list availability flag. Defaults to true when shown. */
|
|
40
|
+
readonly available?: boolean;
|
|
41
|
+
/** Whether to surface in the interactive login list. Defaults to true when `login` is present. */
|
|
42
|
+
readonly showInLoginList?: boolean;
|
|
43
|
+
// --- env-var fallback (the catalog table's `envVars` supplies plain names; set this only for computed resolvers) ---
|
|
44
|
+
readonly envKeys?: KeyResolver;
|
|
45
|
+
// --- interactive login (OAuthProviderInterface-compatible) ---
|
|
46
|
+
readonly login?: (callbacks: OAuthLoginCallbacks) => Promise<OAuthCredentials | string>;
|
|
47
|
+
readonly refreshToken?: (credentials: OAuthCredentials) => Promise<OAuthCredentials>;
|
|
48
|
+
readonly getApiKey?: (credentials: OAuthCredentials) => string;
|
|
49
|
+
/** Store OAuth credentials under a different provider id (e.g. `openai-codex-device` ⇒ `openai-codex`). */
|
|
50
|
+
readonly storeCredentialsAs?: string;
|
|
51
|
+
// --- coding-agent login UX ---
|
|
52
|
+
/** Auth-broker local callback-server port. Presence ⇒ entry in `CALLBACK_PORTS`. */
|
|
53
|
+
readonly callbackPort?: number;
|
|
54
|
+
/** OAuth flow needs a pasted code/redirect URL rather than a callback server. */
|
|
55
|
+
readonly pasteCodeFlow?: boolean;
|
|
56
|
+
}
|