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,15 @@
|
|
|
1
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const devinProvider = {
|
|
5
|
+
id: "devin",
|
|
6
|
+
name: "Devin",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginDevin } = await import("./oauth/devin");
|
|
10
|
+
const credentials = await loginDevin(cb);
|
|
11
|
+
return credentials.access;
|
|
12
|
+
},
|
|
13
|
+
callbackPort: 59653,
|
|
14
|
+
pasteCodeFlow: true,
|
|
15
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Fire Pass login flow.
|
|
7
|
+
*
|
|
8
|
+
* Fire Pass is a Fireworks subscription product whose dedicated `fpk_…` API
|
|
9
|
+
* keys are scoped to the `accounts/fireworks/routers/kimi-k2p6-turbo` router
|
|
10
|
+
* (Kimi K2.6 Turbo). The key does NOT authorize `/v1/models`, so validation
|
|
11
|
+
* pings the chat completions endpoint with the router id directly.
|
|
12
|
+
* See https://docs.fireworks.ai/firepass.
|
|
13
|
+
*/
|
|
14
|
+
export const loginFirepass = createApiKeyLogin({
|
|
15
|
+
providerLabel: "Fire Pass",
|
|
16
|
+
authUrl: "https://app.fireworks.ai/settings/users/api-keys",
|
|
17
|
+
instructions: "Create a dedicated Fire Pass API key in the Fireworks dashboard",
|
|
18
|
+
promptMessage: "Paste your Fire Pass API key",
|
|
19
|
+
placeholder: "fpk_...",
|
|
20
|
+
validation: {
|
|
21
|
+
kind: "chat-completions",
|
|
22
|
+
provider: "Fire Pass",
|
|
23
|
+
baseUrl: "https://api.fireworks.ai/inference/v1",
|
|
24
|
+
model: "accounts/fireworks/routers/kimi-k2p6-turbo",
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export const firepassProvider = {
|
|
29
|
+
id: "firepass",
|
|
30
|
+
name: "Fire Pass (Fireworks Kimi K2.6 Turbo subscription)",
|
|
31
|
+
login: (cb: OAuthLoginCallbacks) => loginFirepass(cb),
|
|
32
|
+
} 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
|
+
export const loginFireworks = createApiKeyLogin({
|
|
6
|
+
providerLabel: "Fireworks",
|
|
7
|
+
authUrl: "https://app.fireworks.ai/settings/users/api-keys",
|
|
8
|
+
instructions: "Create or copy your Fireworks API key",
|
|
9
|
+
promptMessage: "Paste your Fireworks API key",
|
|
10
|
+
placeholder: "fw_...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "models-endpoint",
|
|
13
|
+
provider: "Fireworks",
|
|
14
|
+
// The OpenAI-compatible inference listing (`/inference/v1/models`) enumerates
|
|
15
|
+
// the caller's *deployed* models and returns `500 Error listing deployed models`
|
|
16
|
+
// for accounts without active deployments, which rejected valid `fw_…` keys
|
|
17
|
+
// during `/login`. The control-plane `List Models` API hits the static
|
|
18
|
+
// `fireworks` serverless catalog (same endpoint discovery uses) and only
|
|
19
|
+
// requires the key to authenticate, not to own any deployments.
|
|
20
|
+
modelsUrl: "https://api.fireworks.ai/v1/accounts/fireworks/models?filter=supports_serverless%3Dtrue&pageSize=1",
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const fireworksProvider = {
|
|
25
|
+
id: "fireworks",
|
|
26
|
+
name: "Fireworks",
|
|
27
|
+
login: (cb: OAuthLoginCallbacks) => loginFireworks(cb),
|
|
28
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./oauth/types";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const githubCopilotProvider = {
|
|
5
|
+
id: "github-copilot",
|
|
6
|
+
name: "GitHub Copilot",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginGitHubCopilot } = await import("./oauth/github-copilot");
|
|
10
|
+
return loginGitHubCopilot({
|
|
11
|
+
onAuth: (url, instructions) => cb.onAuth({ url, instructions }),
|
|
12
|
+
onPrompt: cb.onPrompt,
|
|
13
|
+
onProgress: cb.onProgress,
|
|
14
|
+
signal: cb.signal,
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
refreshToken: async (credentials: OAuthCredentials) => {
|
|
18
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
19
|
+
const { refreshGitHubCopilotToken } = await import("./oauth/github-copilot");
|
|
20
|
+
return refreshGitHubCopilotToken(credentials.refresh, credentials.enterpriseUrl, credentials.apiEndpoint);
|
|
21
|
+
},
|
|
22
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./oauth/types";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const gitLabDuoWorkflowProvider = {
|
|
5
|
+
id: "gitlab-duo-agent",
|
|
6
|
+
name: "GitLab Duo Agent",
|
|
7
|
+
envKeys: "GITLAB_TOKEN",
|
|
8
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
9
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
10
|
+
const { loginGitLabDuoWorkflow } = await import("./oauth/gitlab-duo-workflow");
|
|
11
|
+
return loginGitLabDuoWorkflow(cb);
|
|
12
|
+
},
|
|
13
|
+
refreshToken: async (credentials: OAuthCredentials) => {
|
|
14
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
15
|
+
const { refreshGitLabDuoWorkflowToken } = await import("./oauth/gitlab-duo-workflow");
|
|
16
|
+
return refreshGitLabDuoWorkflowToken(credentials);
|
|
17
|
+
},
|
|
18
|
+
callbackPort: 8080,
|
|
19
|
+
pasteCodeFlow: true,
|
|
20
|
+
} 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 gitlabDuoProvider = {
|
|
5
|
+
id: "gitlab-duo",
|
|
6
|
+
name: "GitLab Duo Non-Agentic",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginGitLabDuo } = await import("./oauth/gitlab-duo");
|
|
10
|
+
return loginGitLabDuo(cb);
|
|
11
|
+
},
|
|
12
|
+
refreshToken: async (credentials: OAuthCredentials) => {
|
|
13
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
14
|
+
const { refreshGitLabDuoToken } = await import("./oauth/gitlab-duo");
|
|
15
|
+
return refreshGitLabDuoToken(credentials);
|
|
16
|
+
},
|
|
17
|
+
callbackPort: 8080,
|
|
18
|
+
pasteCodeFlow: true,
|
|
19
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
export const googleAntigravityProvider = {
|
|
6
|
+
id: "google-antigravity",
|
|
7
|
+
name: "Antigravity (Gemini 3, Claude, GPT-OSS)",
|
|
8
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
9
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
10
|
+
const { loginAntigravity } = await import("./oauth/google-antigravity");
|
|
11
|
+
return loginAntigravity(cb);
|
|
12
|
+
},
|
|
13
|
+
refreshToken: async (credentials: OAuthCredentials) => {
|
|
14
|
+
if (!credentials.projectId) {
|
|
15
|
+
throw new AIError.ConfigurationError("Antigravity credentials missing projectId");
|
|
16
|
+
}
|
|
17
|
+
const { refreshAntigravityToken } = await import("./oauth/google-antigravity");
|
|
18
|
+
return refreshAntigravityToken(credentials.refresh, credentials.projectId);
|
|
19
|
+
},
|
|
20
|
+
callbackPort: 51121,
|
|
21
|
+
pasteCodeFlow: true,
|
|
22
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
export const googleGeminiCliProvider = {
|
|
6
|
+
id: "google-gemini-cli",
|
|
7
|
+
name: "Google Cloud Code Assist (Gemini CLI)",
|
|
8
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
9
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
10
|
+
const { loginGeminiCli } = await import("./oauth/google-gemini-cli");
|
|
11
|
+
return loginGeminiCli(cb);
|
|
12
|
+
},
|
|
13
|
+
refreshToken: async (credentials: OAuthCredentials) => {
|
|
14
|
+
if (!credentials.projectId) {
|
|
15
|
+
throw new AIError.ConfigurationError("Google Cloud credentials missing projectId");
|
|
16
|
+
}
|
|
17
|
+
const { refreshGoogleCloudToken } = await import("./oauth/google-gemini-cli");
|
|
18
|
+
return refreshGoogleCloudToken(credentials.refresh, credentials.projectId);
|
|
19
|
+
},
|
|
20
|
+
callbackPort: 8085,
|
|
21
|
+
pasteCodeFlow: true,
|
|
22
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as os from "node:os";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { $env } from "jeopi-utils";
|
|
5
|
+
import type { ProviderDefinition } from "./types";
|
|
6
|
+
|
|
7
|
+
let cachedVertexAdcCredentialsExists: boolean | null = null;
|
|
8
|
+
|
|
9
|
+
function hasVertexAdcCredentials(): boolean {
|
|
10
|
+
if (cachedVertexAdcCredentialsExists === null) {
|
|
11
|
+
const gacPath = $env.GOOGLE_APPLICATION_CREDENTIALS;
|
|
12
|
+
if (gacPath) {
|
|
13
|
+
cachedVertexAdcCredentialsExists = fs.existsSync(gacPath);
|
|
14
|
+
} else {
|
|
15
|
+
cachedVertexAdcCredentialsExists = fs.existsSync(
|
|
16
|
+
path.join(os.homedir(), ".config", "gcloud", "application_default_credentials.json"),
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return cachedVertexAdcCredentialsExists;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const googleVertexProvider = {
|
|
24
|
+
id: "google-vertex",
|
|
25
|
+
name: "Google Vertex AI",
|
|
26
|
+
// Vertex AI supports either GOOGLE_CLOUD_API_KEY or Application Default Credentials.
|
|
27
|
+
envKeys: () => {
|
|
28
|
+
if ($env.GOOGLE_CLOUD_API_KEY) {
|
|
29
|
+
return $env.GOOGLE_CLOUD_API_KEY;
|
|
30
|
+
}
|
|
31
|
+
const hasCredentials = hasVertexAdcCredentials();
|
|
32
|
+
const hasProject = !!($env.GOOGLE_CLOUD_PROJECT || $env.GCP_PROJECT || $env.GCLOUD_PROJECT);
|
|
33
|
+
const hasLocation = !!($env.GOOGLE_VERTEX_LOCATION || $env.GOOGLE_CLOUD_LOCATION || $env.VERTEX_LOCATION);
|
|
34
|
+
if (hasCredentials && hasProject && hasLocation) {
|
|
35
|
+
return "<authenticated>";
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,29 @@
|
|
|
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 =
|
|
6
|
+
"https://huggingface.co/settings/tokens/new?ownUserPermissions=inference.serverless.write&tokenType=fineGrained";
|
|
7
|
+
const API_BASE_URL = "https://router.huggingface.co/v1";
|
|
8
|
+
const VALIDATION_MODEL = "openai/gpt-oss-120b";
|
|
9
|
+
|
|
10
|
+
export const loginHuggingface = createApiKeyLogin({
|
|
11
|
+
providerLabel: "Hugging Face",
|
|
12
|
+
authUrl: AUTH_URL,
|
|
13
|
+
instructions:
|
|
14
|
+
"Create/copy a token with Make calls to Inference Providers permission (usable as HUGGINGFACE_HUB_TOKEN or HF_TOKEN)",
|
|
15
|
+
promptMessage: "Paste your Hugging Face token (HUGGINGFACE_HUB_TOKEN / HF_TOKEN)",
|
|
16
|
+
placeholder: "hf_...",
|
|
17
|
+
validation: {
|
|
18
|
+
kind: "chat-completions",
|
|
19
|
+
provider: "Hugging Face",
|
|
20
|
+
baseUrl: API_BASE_URL,
|
|
21
|
+
model: VALIDATION_MODEL,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export const huggingfaceProvider = {
|
|
26
|
+
id: "huggingface",
|
|
27
|
+
name: "Hugging Face Inference",
|
|
28
|
+
login: (cb: OAuthLoginCallbacks) => loginHuggingface(cb),
|
|
29
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,46 @@
|
|
|
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://kagi.com/settings/api";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Login to Kagi.
|
|
9
|
+
*
|
|
10
|
+
* Opens browser to API settings 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 loginKagi(options: OAuthController): Promise<string> {
|
|
14
|
+
if (!options.onPrompt) {
|
|
15
|
+
throw new AIError.OnPromptRequiredError("Kagi");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
options.onAuth?.({
|
|
19
|
+
url: AUTH_URL,
|
|
20
|
+
instructions:
|
|
21
|
+
"Copy your Kagi Search API key from Kagi API settings. Search API access is beta-only; if unavailable, email support@kagi.com.",
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const apiKey = await options.onPrompt({
|
|
25
|
+
message: "Paste your Kagi API key",
|
|
26
|
+
placeholder: "KG_...",
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
if (options.signal?.aborted) {
|
|
30
|
+
throw new AIError.LoginCancelledError();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const trimmed = apiKey.trim();
|
|
34
|
+
if (!trimmed) {
|
|
35
|
+
throw new AIError.ApiKeyRequiredError();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return trimmed;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const kagiProvider = {
|
|
42
|
+
id: "kagi",
|
|
43
|
+
name: "Kagi",
|
|
44
|
+
envKeys: "KAGI_API_KEY",
|
|
45
|
+
login: (cb: OAuthLoginCallbacks) => loginKagi(cb),
|
|
46
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthController, OAuthCredentials } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const KILO_DEVICE_AUTH_BASE_URL = "https://api.kilo.ai/api/device-auth";
|
|
6
|
+
const POLL_INTERVAL_MS = 5000;
|
|
7
|
+
const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000;
|
|
8
|
+
|
|
9
|
+
interface KiloDeviceAuthCodeResponse {
|
|
10
|
+
code?: string;
|
|
11
|
+
verificationUrl?: string;
|
|
12
|
+
expiresIn?: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface KiloDeviceAuthPollResponse {
|
|
16
|
+
status?: string;
|
|
17
|
+
token?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export async function loginKilo(callbacks: OAuthController): Promise<OAuthCredentials> {
|
|
21
|
+
const fetchImpl = callbacks.fetch ?? fetch;
|
|
22
|
+
const initiateResponse = await fetchImpl(`${KILO_DEVICE_AUTH_BASE_URL}/codes`, {
|
|
23
|
+
method: "POST",
|
|
24
|
+
headers: { "Content-Type": "application/json" },
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
if (!initiateResponse.ok) {
|
|
28
|
+
if (initiateResponse.status === 429) {
|
|
29
|
+
throw new AIError.OAuthError("Too many pending authorization requests. Please try again later.", {
|
|
30
|
+
kind: "polling",
|
|
31
|
+
provider: "kilo",
|
|
32
|
+
status: initiateResponse.status,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
throw new AIError.OAuthError(`Failed to initiate device authorization: ${initiateResponse.status}`, {
|
|
36
|
+
kind: "device-auth",
|
|
37
|
+
provider: "kilo",
|
|
38
|
+
status: initiateResponse.status,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const initiateData = (await initiateResponse.json()) as KiloDeviceAuthCodeResponse;
|
|
43
|
+
const userCode = initiateData.code;
|
|
44
|
+
const verificationUrl = initiateData.verificationUrl;
|
|
45
|
+
const expiresInSeconds = initiateData.expiresIn;
|
|
46
|
+
if (!userCode || !verificationUrl || typeof expiresInSeconds !== "number" || expiresInSeconds <= 0) {
|
|
47
|
+
throw new AIError.OAuthError("Kilo device authorization response missing required fields", {
|
|
48
|
+
kind: "validation",
|
|
49
|
+
provider: "kilo",
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
callbacks.onAuth?.({
|
|
54
|
+
url: verificationUrl,
|
|
55
|
+
instructions: `Enter code: ${userCode}`,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const deadline = Date.now() + expiresInSeconds * 1000;
|
|
59
|
+
while (Date.now() < deadline) {
|
|
60
|
+
if (callbacks.signal?.aborted) {
|
|
61
|
+
throw new AIError.LoginCancelledError();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const pollResponse = await fetchImpl(`${KILO_DEVICE_AUTH_BASE_URL}/codes/${encodeURIComponent(userCode)}`);
|
|
65
|
+
if (pollResponse.status === 202) {
|
|
66
|
+
await Bun.sleep(POLL_INTERVAL_MS);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (pollResponse.status === 403) {
|
|
70
|
+
throw new AIError.OAuthError("Authorization was denied", { kind: "device-auth", provider: "kilo" });
|
|
71
|
+
}
|
|
72
|
+
if (pollResponse.status === 410) {
|
|
73
|
+
throw new AIError.OAuthError("Authorization code expired. Please try again.", {
|
|
74
|
+
kind: "device-auth",
|
|
75
|
+
provider: "kilo",
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (!pollResponse.ok) {
|
|
79
|
+
throw new AIError.OAuthError(`Failed to poll device authorization: ${pollResponse.status}`, {
|
|
80
|
+
kind: "polling",
|
|
81
|
+
provider: "kilo",
|
|
82
|
+
status: pollResponse.status,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const pollData = (await pollResponse.json()) as KiloDeviceAuthPollResponse;
|
|
87
|
+
if (pollData.status === "approved" && pollData.token) {
|
|
88
|
+
return {
|
|
89
|
+
refresh: "",
|
|
90
|
+
access: pollData.token,
|
|
91
|
+
expires: Date.now() + ONE_YEAR_MS,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (pollData.status === "denied") {
|
|
95
|
+
throw new AIError.OAuthError("Authorization was denied", { kind: "device-auth", provider: "kilo" });
|
|
96
|
+
}
|
|
97
|
+
if (pollData.status === "expired") {
|
|
98
|
+
throw new AIError.OAuthError("Authorization code expired. Please try again.", {
|
|
99
|
+
kind: "device-auth",
|
|
100
|
+
provider: "kilo",
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
await Bun.sleep(POLL_INTERVAL_MS);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
throw new AIError.OAuthError("Authentication timed out. Please try again.", { kind: "timeout", provider: "kilo" });
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export const kiloProvider = {
|
|
111
|
+
id: "kilo",
|
|
112
|
+
name: "Kilo Gateway",
|
|
113
|
+
login: loginKilo,
|
|
114
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./oauth/types";
|
|
2
|
+
import type { ProviderDefinition } from "./types";
|
|
3
|
+
|
|
4
|
+
export const kimiCodeProvider = {
|
|
5
|
+
id: "kimi-code",
|
|
6
|
+
name: "Kimi Code",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginKimi } = await import("./oauth/kimi");
|
|
10
|
+
return loginKimi(cb);
|
|
11
|
+
},
|
|
12
|
+
refreshToken: async (credentials: OAuthCredentials) => {
|
|
13
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
14
|
+
const { refreshKimiToken } = await import("./oauth/kimi");
|
|
15
|
+
return refreshKimiToken(credentials.refresh);
|
|
16
|
+
},
|
|
17
|
+
} 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://docs.litellm.ai/docs/proxy/deploy";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Login to LiteLLM.
|
|
9
|
+
*
|
|
10
|
+
* Opens browser to LiteLLM setup docs, prompts user to paste their API key.
|
|
11
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
12
|
+
*/
|
|
13
|
+
export async function loginLiteLLM(options: OAuthController): Promise<string> {
|
|
14
|
+
if (!options.onPrompt) {
|
|
15
|
+
throw new AIError.OnPromptRequiredError("LiteLLM");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
options.onAuth?.({
|
|
19
|
+
url: AUTH_URL,
|
|
20
|
+
instructions:
|
|
21
|
+
"Run LiteLLM proxy (default http://localhost:4000/v1; set LITELLM_BASE_URL to customize it), then copy your master key or virtual key",
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const apiKey = await options.onPrompt({
|
|
25
|
+
message: "Paste your LiteLLM API key (master key or virtual key)",
|
|
26
|
+
placeholder: "sk-...",
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
if (options.signal?.aborted) {
|
|
30
|
+
throw new AIError.LoginCancelledError();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const trimmed = apiKey.trim();
|
|
34
|
+
if (!trimmed) {
|
|
35
|
+
throw new AIError.ApiKeyRequiredError();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return trimmed;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const litellmProvider = {
|
|
42
|
+
id: "litellm",
|
|
43
|
+
name: "LiteLLM",
|
|
44
|
+
login: (cb: OAuthLoginCallbacks) => loginLiteLLM(cb),
|
|
45
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthController, OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const PROVIDER_ID = "llama.cpp";
|
|
6
|
+
const AUTH_URL = "https://github.com/ggml-org/llama.cpp#quick-start";
|
|
7
|
+
const DEFAULT_LOCAL_BASE_URL = "http://127.0.0.1:8080";
|
|
8
|
+
const DEFAULT_LOCAL_TOKEN = "llama-cpp-local";
|
|
9
|
+
|
|
10
|
+
export async function loginLlamaCpp(options: OAuthController): Promise<string> {
|
|
11
|
+
if (!options.onPrompt) {
|
|
12
|
+
throw new AIError.OnPromptRequiredError(PROVIDER_ID);
|
|
13
|
+
}
|
|
14
|
+
options.onAuth?.({
|
|
15
|
+
url: AUTH_URL,
|
|
16
|
+
instructions: `Paste your llama.cpp API key if your server requires auth. Leave empty for local no-auth mode (default base URL: ${DEFAULT_LOCAL_BASE_URL}; set LLAMA_CPP_BASE_URL to customize).`,
|
|
17
|
+
});
|
|
18
|
+
const apiKey = await options.onPrompt({
|
|
19
|
+
message: "Paste your llama.cpp API key (optional for local no-auth)",
|
|
20
|
+
placeholder: DEFAULT_LOCAL_TOKEN,
|
|
21
|
+
allowEmpty: true,
|
|
22
|
+
});
|
|
23
|
+
if (options.signal?.aborted) {
|
|
24
|
+
throw new AIError.LoginCancelledError();
|
|
25
|
+
}
|
|
26
|
+
const trimmed = apiKey.trim();
|
|
27
|
+
return trimmed || DEFAULT_LOCAL_TOKEN;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const llamaCppProvider = {
|
|
31
|
+
id: PROVIDER_ID,
|
|
32
|
+
name: "llama.cpp (Local OpenAI-compatible)",
|
|
33
|
+
envKeys: "LLAMA_CPP_API_KEY",
|
|
34
|
+
login: (cb: OAuthLoginCallbacks) => loginLlamaCpp(cb),
|
|
35
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import type { OAuthController, OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
const PROVIDER_ID = "lm-studio";
|
|
6
|
+
export const DEFAULT_LOCAL_TOKEN = "lm-studio-local";
|
|
7
|
+
|
|
8
|
+
export async function loginLmStudio(options: OAuthController): Promise<string> {
|
|
9
|
+
if (!options.onPrompt) {
|
|
10
|
+
throw new AIError.OnPromptRequiredError(PROVIDER_ID);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const apiKey = await options.onPrompt({
|
|
14
|
+
message: "Optional: Paste LM Studio API key (to customize endpoint URL, set LM_STUDIO_BASE_URL env var)",
|
|
15
|
+
placeholder: DEFAULT_LOCAL_TOKEN,
|
|
16
|
+
allowEmpty: true,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
if (options.signal?.aborted) {
|
|
20
|
+
throw new AIError.LoginCancelledError();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const trimmed = apiKey.trim();
|
|
24
|
+
return trimmed || DEFAULT_LOCAL_TOKEN;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const lmStudioProvider = {
|
|
28
|
+
id: "lm-studio",
|
|
29
|
+
name: "LM Studio (Local OpenAI-compatible)",
|
|
30
|
+
login: (cb: OAuthLoginCallbacks) => loginLmStudio(cb),
|
|
31
|
+
} 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 minimaxCodeCnProvider = {
|
|
5
|
+
id: "minimax-code-cn",
|
|
6
|
+
name: "MiniMax Token Plan (China)",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginMiniMaxCodeCn } = await import("./oauth/minimax-code");
|
|
10
|
+
return loginMiniMaxCodeCn(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 minimaxCodeProvider = {
|
|
5
|
+
id: "minimax-code",
|
|
6
|
+
name: "MiniMax Token Plan (International)",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginMiniMaxCode } = await import("./oauth/minimax-code");
|
|
10
|
+
return loginMiniMaxCode(cb);
|
|
11
|
+
},
|
|
12
|
+
} 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 loginMoonshot = createApiKeyLogin({
|
|
6
|
+
providerLabel: "Moonshot",
|
|
7
|
+
authUrl: "https://platform.moonshot.ai/console/api-keys",
|
|
8
|
+
instructions: "Copy your API key from the Moonshot dashboard",
|
|
9
|
+
promptMessage: "Paste your Moonshot API key",
|
|
10
|
+
placeholder: "sk-...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "models-endpoint",
|
|
13
|
+
provider: "moonshot",
|
|
14
|
+
modelsUrl: "https://api.moonshot.ai/v1/models",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const moonshotProvider = {
|
|
19
|
+
id: "moonshot",
|
|
20
|
+
name: "Moonshot (Kimi API)",
|
|
21
|
+
login: (cb: OAuthLoginCallbacks) => loginMoonshot(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 loginNanoGPT = createApiKeyLogin({
|
|
6
|
+
providerLabel: "NanoGPT",
|
|
7
|
+
authUrl: "https://nano-gpt.com/api",
|
|
8
|
+
instructions: "Create or copy your NanoGPT API key",
|
|
9
|
+
promptMessage: "Paste your NanoGPT API key",
|
|
10
|
+
placeholder: "sk-...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "models-endpoint",
|
|
13
|
+
provider: "NanoGPT",
|
|
14
|
+
modelsUrl: "https://nano-gpt.com/api/v1/models",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const nanogptProvider = {
|
|
19
|
+
id: "nanogpt",
|
|
20
|
+
name: "NanoGPT",
|
|
21
|
+
login: (cb: OAuthLoginCallbacks) => loginNanoGPT(cb),
|
|
22
|
+
} as const satisfies ProviderDefinition;
|