@linxiraos/pi-ai 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5066 -0
- package/README.md +1195 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth/sqlite-credential-store.d.ts +117 -0
- package/dist/types/auth-broker/client.d.ts +93 -0
- package/dist/types/auth-broker/discover.d.ts +39 -0
- package/dist/types/auth-broker/index.d.ts +7 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +136 -0
- package/dist/types/auth-broker/server.d.ts +48 -0
- package/dist/types/auth-broker/snapshot-cache.d.ts +17 -0
- package/dist/types/auth-broker/types.d.ts +152 -0
- package/dist/types/auth-broker/wire-schema-resource.d.ts +53 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +5 -0
- package/dist/types/auth-gateway/http.d.ts +56 -0
- package/dist/types/auth-gateway/index.d.ts +3 -0
- package/dist/types/auth-gateway/server.d.ts +36 -0
- package/dist/types/auth-gateway/types.d.ts +127 -0
- package/dist/types/auth-retry.d.ts +150 -0
- package/dist/types/auth-storage.d.ts +1258 -0
- package/dist/types/dialect/anthropic.d.ts +15 -0
- package/dist/types/dialect/catalog.d.ts +3 -0
- package/dist/types/dialect/coercion.d.ts +23 -0
- package/dist/types/dialect/deepseek.d.ts +14 -0
- package/dist/types/dialect/demotion.d.ts +30 -0
- package/dist/types/dialect/examples.d.ts +18 -0
- package/dist/types/dialect/factory.d.ts +3 -0
- package/dist/types/dialect/fenced-thinking.d.ts +53 -0
- package/dist/types/dialect/gemini.d.ts +17 -0
- package/dist/types/dialect/gemma.d.ts +15 -0
- package/dist/types/dialect/glm.d.ts +9 -0
- package/dist/types/dialect/harmony.d.ts +8 -0
- package/dist/types/dialect/hermes.d.ts +9 -0
- package/dist/types/dialect/history.d.ts +3 -0
- package/dist/types/dialect/index.d.ts +11 -0
- package/dist/types/dialect/inventory.d.ts +9 -0
- package/dist/types/dialect/kimi.d.ts +14 -0
- package/dist/types/dialect/minimax.d.ts +3 -0
- package/dist/types/dialect/owned-stream.d.ts +4 -0
- package/dist/types/dialect/qwen3.d.ts +9 -0
- package/dist/types/dialect/rendering.d.ts +54 -0
- package/dist/types/dialect/thinking.d.ts +6 -0
- package/dist/types/dialect/types.d.ts +68 -0
- package/dist/types/dialect/xml.d.ts +9 -0
- package/dist/types/error/abort.d.ts +14 -0
- package/dist/types/error/auth-classify.d.ts +20 -0
- package/dist/types/error/auth.d.ts +27 -0
- package/dist/types/error/aws.d.ts +27 -0
- package/dist/types/error/classes.d.ts +106 -0
- package/dist/types/error/finalize.d.ts +39 -0
- package/dist/types/error/flags.d.ts +94 -0
- package/dist/types/error/format.d.ts +20 -0
- package/dist/types/error/gateway.d.ts +20 -0
- package/dist/types/error/index.d.ts +14 -0
- package/dist/types/error/oauth.d.ts +43 -0
- package/dist/types/error/provider.d.ts +42 -0
- package/dist/types/error/rate-limit.d.ts +80 -0
- package/dist/types/error/retryable.d.ts +27 -0
- package/dist/types/error/validation.d.ts +32 -0
- package/dist/types/index.d.ts +51 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/providers/amazon-bedrock.d.ts +39 -0
- package/dist/types/providers/anthropic-client.d.ts +106 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +937 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic-wire.d.ts +345 -0
- package/dist/types/providers/anthropic.d.ts +261 -0
- package/dist/types/providers/aws-credentials.d.ts +48 -0
- package/dist/types/providers/aws-eventstream.d.ts +39 -0
- package/dist/types/providers/aws-sigv4.d.ts +55 -0
- package/dist/types/providers/azure-openai-responses.d.ts +16 -0
- package/dist/types/providers/bedrock-mantle.d.ts +13 -0
- package/dist/types/providers/claude-code-fingerprint.d.ts +19 -0
- package/dist/types/providers/cowork-fetch.d.ts +3 -0
- package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
- package/dist/types/providers/cursor-pi-args.d.ts +105 -0
- package/dist/types/providers/cursor.d.ts +221 -0
- package/dist/types/providers/devin.d.ts +12 -0
- package/dist/types/providers/error-message.d.ts +25 -0
- package/dist/types/providers/github-copilot-headers.d.ts +40 -0
- package/dist/types/providers/gitlab-duo-workflow.d.ts +254 -0
- package/dist/types/providers/gitlab-duo.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +24 -0
- package/dist/types/providers/google-gemini-cli.d.ts +120 -0
- package/dist/types/providers/google-shared.d.ts +203 -0
- package/dist/types/providers/google-types.d.ts +155 -0
- package/dist/types/providers/google-vertex.d.ts +7 -0
- package/dist/types/providers/google.d.ts +4 -0
- package/dist/types/providers/grammar.d.ts +1 -0
- package/dist/types/providers/kimi.d.ts +27 -0
- package/dist/types/providers/mock.d.ts +179 -0
- package/dist/types/providers/ollama.d.ts +8 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +35 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +1311 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-chat-wire.d.ts +669 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +109 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +26 -0
- package/dist/types/providers/openai-codex-responses.d.ts +238 -0
- package/dist/types/providers/openai-completions.d.ts +48 -0
- package/dist/types/providers/openai-reasoning-fallback.d.ts +25 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +1314 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-wire.d.ts +6099 -0
- package/dist/types/providers/openai-responses.d.ts +131 -0
- package/dist/types/providers/openai-shared.d.ts +624 -0
- package/dist/types/providers/pi-native-client.d.ts +13 -0
- package/dist/types/providers/pi-native-server.d.ts +69 -0
- package/dist/types/providers/register-builtins.d.ts +37 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +32 -0
- package/dist/types/providers/vision-guard.d.ts +20 -0
- package/dist/types/registry/aiand.d.ts +7 -0
- package/dist/types/registry/aimlapi.d.ts +4 -0
- package/dist/types/registry/alibaba-coding-plan.d.ts +8 -0
- package/dist/types/registry/alibaba-token-plan.d.ts +18 -0
- package/dist/types/registry/amazon-bedrock.d.ts +5 -0
- package/dist/types/registry/anthropic.d.ts +10 -0
- package/dist/types/registry/api-key-login.d.ts +42 -0
- package/dist/types/registry/api-key-validation.d.ts +43 -0
- package/dist/types/registry/aws.d.ts +13 -0
- package/dist/types/registry/azure.d.ts +4 -0
- package/dist/types/registry/baseten.d.ts +7 -0
- package/dist/types/registry/bedrock-mantle.d.ts +22 -0
- package/dist/types/registry/cerebras.d.ts +7 -0
- package/dist/types/registry/cloudflare-ai-gateway.d.ts +13 -0
- package/dist/types/registry/coreweave.d.ts +7 -0
- package/dist/types/registry/cursor.d.ts +7 -0
- package/dist/types/registry/deepseek.d.ts +8 -0
- package/dist/types/registry/derived.d.ts +5 -0
- package/dist/types/registry/devin.d.ts +8 -0
- package/dist/types/registry/exa.d.ts +8 -0
- package/dist/types/registry/firepass.d.ts +16 -0
- package/dist/types/registry/fireworks.d.ts +7 -0
- package/dist/types/registry/github-copilot.d.ts +7 -0
- package/dist/types/registry/gitlab-duo-workflow.d.ts +10 -0
- package/dist/types/registry/gitlab-duo.d.ts +9 -0
- package/dist/types/registry/gmi-cloud.d.ts +7 -0
- package/dist/types/registry/google-antigravity.d.ts +9 -0
- package/dist/types/registry/google-gemini-cli.d.ts +9 -0
- package/dist/types/registry/google-vertex.d.ts +5 -0
- package/dist/types/registry/google.d.ts +4 -0
- package/dist/types/registry/groq.d.ts +4 -0
- package/dist/types/registry/huggingface.d.ts +7 -0
- package/dist/types/registry/index.d.ts +4 -0
- package/dist/types/registry/kagi.d.ts +14 -0
- package/dist/types/registry/kilo.d.ts +7 -0
- package/dist/types/registry/kimi-code.d.ts +7 -0
- package/dist/types/registry/litellm.d.ts +13 -0
- package/dist/types/registry/llama-cpp.d.ts +8 -0
- package/dist/types/registry/lm-studio.d.ts +8 -0
- package/dist/types/registry/meta.d.ts +7 -0
- package/dist/types/registry/minimax-code-cn.d.ts +6 -0
- package/dist/types/registry/minimax-code.d.ts +6 -0
- package/dist/types/registry/minimax.d.ts +4 -0
- package/dist/types/registry/mistral.d.ts +4 -0
- package/dist/types/registry/moonshot.d.ts +7 -0
- package/dist/types/registry/nanogpt.d.ts +7 -0
- package/dist/types/registry/novita.d.ts +6 -0
- package/dist/types/registry/nvidia.d.ts +7 -0
- package/dist/types/registry/oauth/anthropic-constants.d.ts +12 -0
- package/dist/types/registry/oauth/anthropic.d.ts +24 -0
- package/dist/types/registry/oauth/callback-server.d.ts +74 -0
- package/dist/types/registry/oauth/cursor.d.ts +16 -0
- package/dist/types/registry/oauth/device-code.d.ts +25 -0
- package/dist/types/registry/oauth/devin.d.ts +5 -0
- package/dist/types/registry/oauth/github-copilot.d.ts +30 -0
- package/dist/types/registry/oauth/gitlab-duo-workflow.d.ts +6 -0
- package/dist/types/registry/oauth/gitlab-duo.d.ts +3 -0
- package/dist/types/registry/oauth/google-antigravity.d.ts +11 -0
- package/dist/types/registry/oauth/google-gemini-cli.d.ts +22 -0
- package/dist/types/registry/oauth/google-oauth-shared.d.ts +56 -0
- package/dist/types/registry/oauth/index.d.ts +45 -0
- package/dist/types/registry/oauth/kimi.d.ts +21 -0
- package/dist/types/registry/oauth/minimax-code.d.ts +27 -0
- package/dist/types/registry/oauth/openai-codex.d.ts +33 -0
- package/dist/types/registry/oauth/opencode.d.ts +18 -0
- package/dist/types/registry/oauth/perplexity.d.ts +9 -0
- package/dist/types/registry/oauth/pkce.d.ts +8 -0
- package/dist/types/registry/oauth/types.d.ts +87 -0
- package/dist/types/registry/oauth/wafer.d.ts +1 -0
- package/dist/types/registry/oauth/xai-oauth.d.ts +46 -0
- package/dist/types/registry/oauth/xiaomi.d.ts +25 -0
- package/dist/types/registry/oauth/zai.d.ts +25 -0
- package/dist/types/registry/ollama-cloud.d.ts +7 -0
- package/dist/types/registry/ollama.d.ts +12 -0
- package/dist/types/registry/openai-codex-device.d.ts +8 -0
- package/dist/types/registry/openai-codex.d.ts +9 -0
- package/dist/types/registry/openai.d.ts +4 -0
- package/dist/types/registry/opencode-go.d.ts +6 -0
- package/dist/types/registry/opencode-zen.d.ts +6 -0
- package/dist/types/registry/openrouter.d.ts +13 -0
- package/dist/types/registry/parallel.d.ts +14 -0
- package/dist/types/registry/perplexity.d.ts +7 -0
- package/dist/types/registry/qianfan.d.ts +7 -0
- package/dist/types/registry/qwen-portal.d.ts +7 -0
- package/dist/types/registry/registry.d.ts +367 -0
- package/dist/types/registry/sakana.d.ts +7 -0
- package/dist/types/registry/siliconflow-cn.d.ts +7 -0
- package/dist/types/registry/siliconflow.d.ts +7 -0
- package/dist/types/registry/synthetic.d.ts +6 -0
- package/dist/types/registry/tavily.d.ts +14 -0
- package/dist/types/registry/together.d.ts +6 -0
- package/dist/types/registry/types.d.ts +75 -0
- package/dist/types/registry/umans.d.ts +7 -0
- package/dist/types/registry/venice.d.ts +13 -0
- package/dist/types/registry/vercel-ai-gateway.d.ts +7 -0
- package/dist/types/registry/vllm.d.ts +7 -0
- package/dist/types/registry/wafer-serverless.d.ts +6 -0
- package/dist/types/registry/xai-oauth.d.ts +7 -0
- package/dist/types/registry/xai.d.ts +7 -0
- package/dist/types/registry/xiaomi-token-plan-ams.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-cn.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-sgp.d.ts +6 -0
- package/dist/types/registry/xiaomi.d.ts +6 -0
- package/dist/types/registry/zai.d.ts +15 -0
- package/dist/types/registry/zenmux.d.ts +7 -0
- package/dist/types/registry/zhipu-coding-plan.d.ts +7 -0
- package/dist/types/stream.d.ts +46 -0
- package/dist/types/types.d.ts +1064 -0
- package/dist/types/usage/alibaba-token-plan.d.ts +3 -0
- package/dist/types/usage/claude.d.ts +4 -0
- package/dist/types/usage/cursor.d.ts +4 -0
- package/dist/types/usage/gemini.d.ts +2 -0
- package/dist/types/usage/github-copilot.d.ts +7 -0
- package/dist/types/usage/google-antigravity.d.ts +15 -0
- package/dist/types/usage/kimi.d.ts +2 -0
- package/dist/types/usage/minimax-code.d.ts +3 -0
- package/dist/types/usage/ollama.d.ts +5 -0
- package/dist/types/usage/openai-codex-base-url.d.ts +18 -0
- package/dist/types/usage/openai-codex-reset.d.ts +88 -0
- package/dist/types/usage/openai-codex.d.ts +10 -0
- package/dist/types/usage/opencode-go.d.ts +2 -0
- package/dist/types/usage/shared.d.ts +1 -0
- package/dist/types/usage/synthetic.d.ts +2 -0
- package/dist/types/usage/umans.d.ts +2 -0
- package/dist/types/usage/xai-oauth.d.ts +12 -0
- package/dist/types/usage/zai.d.ts +3 -0
- package/dist/types/usage.d.ts +527 -0
- package/dist/types/utils/abort.d.ts +25 -0
- package/dist/types/utils/anthropic-auth.d.ts +35 -0
- package/dist/types/utils/aws-profile.d.ts +17 -0
- package/dist/types/utils/block-symbols.d.ts +62 -0
- package/dist/types/utils/deterministic-id.d.ts +16 -0
- package/dist/types/utils/empty-completion-retry.d.ts +21 -0
- package/dist/types/utils/event-stream.d.ts +39 -0
- package/dist/types/utils/foundry.d.ts +1 -0
- package/dist/types/utils/google-validation.d.ts +2 -0
- package/dist/types/utils/harmony-leak.d.ts +135 -0
- package/dist/types/utils/http-inspector.d.ts +49 -0
- package/dist/types/utils/idle-iterator.d.ts +149 -0
- package/dist/types/utils/leaked-thinking-stream.d.ts +33 -0
- package/dist/types/utils/openai-http.d.ts +48 -0
- package/dist/types/utils/openrouter-headers.d.ts +1 -0
- package/dist/types/utils/parse-bind.d.ts +23 -0
- package/dist/types/utils/provider-response.d.ts +3 -0
- package/dist/types/utils/proxy.d.ts +39 -0
- package/dist/types/utils/request-debug.d.ts +29 -0
- package/dist/types/utils/retry-after.d.ts +4 -0
- package/dist/types/utils/retry.d.ts +14 -0
- package/dist/types/utils/schema/adapt.d.ts +24 -0
- package/dist/types/utils/schema/compatibility.d.ts +30 -0
- package/dist/types/utils/schema/dereference.d.ts +11 -0
- package/dist/types/utils/schema/draft.d.ts +10 -0
- package/dist/types/utils/schema/equality.d.ts +4 -0
- package/dist/types/utils/schema/fields.d.ts +54 -0
- package/dist/types/utils/schema/index.d.ts +14 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +20 -0
- package/dist/types/utils/schema/meta-validator.d.ts +2 -0
- package/dist/types/utils/schema/normalize.d.ts +153 -0
- package/dist/types/utils/schema/spill.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +17 -0
- package/dist/types/utils/schema/strict-tool-validation.d.ts +16 -0
- package/dist/types/utils/schema/types.d.ts +4 -0
- package/dist/types/utils/schema/typescript.d.ts +24 -0
- package/dist/types/utils/schema/wire.d.ts +52 -0
- package/dist/types/utils/sdk-stream-timeout.d.ts +33 -0
- package/dist/types/utils/sse-debug.d.ts +5 -0
- package/dist/types/utils/stream-markup-healing.d.ts +87 -0
- package/dist/types/utils/thinking-loop.d.ts +102 -0
- package/dist/types/utils/tool-call-loop-guard.d.ts +26 -0
- package/dist/types/utils/tool-choice.d.ts +52 -0
- package/dist/types/utils/validation.d.ts +28 -0
- package/dist/types/utils.d.ts +57 -0
- package/package.json +138 -0
- package/src/api-registry.ts +109 -0
- package/src/auth/sqlite-credential-store.ts +2066 -0
- package/src/auth-broker/client.ts +471 -0
- package/src/auth-broker/discover.ts +310 -0
- package/src/auth-broker/index.ts +7 -0
- package/src/auth-broker/refresher.ts +117 -0
- package/src/auth-broker/remote-store.ts +1332 -0
- package/src/auth-broker/server.ts +898 -0
- package/src/auth-broker/snapshot-cache.ts +200 -0
- package/src/auth-broker/types.ts +193 -0
- package/src/auth-broker/wire-schema-resource.ts +487 -0
- package/src/auth-broker/wire-schemas.ts +43 -0
- package/src/auth-gateway/http.ts +227 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +836 -0
- package/src/auth-gateway/types.ts +153 -0
- package/src/auth-retry.ts +401 -0
- package/src/auth-storage.ts +6540 -0
- package/src/dialect/anthropic.md +31 -0
- package/src/dialect/anthropic.ts +608 -0
- package/src/dialect/catalog.ts +29 -0
- package/src/dialect/coercion.ts +136 -0
- package/src/dialect/deepseek.md +24 -0
- package/src/dialect/deepseek.ts +609 -0
- package/src/dialect/demotion.ts +40 -0
- package/src/dialect/examples.ts +71 -0
- package/src/dialect/factory.ts +34 -0
- package/src/dialect/fenced-thinking.ts +184 -0
- package/src/dialect/gemini.md +44 -0
- package/src/dialect/gemini.ts +583 -0
- package/src/dialect/gemma.md +33 -0
- package/src/dialect/gemma.ts +387 -0
- package/src/dialect/glm.md +32 -0
- package/src/dialect/glm.ts +579 -0
- package/src/dialect/harmony.md +31 -0
- package/src/dialect/harmony.ts +345 -0
- package/src/dialect/hermes.md +25 -0
- package/src/dialect/hermes.ts +206 -0
- package/src/dialect/history.ts +81 -0
- package/src/dialect/index.ts +15 -0
- package/src/dialect/inventory.ts +30 -0
- package/src/dialect/kimi.md +24 -0
- package/src/dialect/kimi.ts +340 -0
- package/src/dialect/minimax.md +31 -0
- package/src/dialect/minimax.ts +95 -0
- package/src/dialect/owned-stream.ts +481 -0
- package/src/dialect/prompt-template.md +12 -0
- package/src/dialect/qwen3.md +28 -0
- package/src/dialect/qwen3.ts +240 -0
- package/src/dialect/rendering.ts +304 -0
- package/src/dialect/thinking.ts +292 -0
- package/src/dialect/types.ts +56 -0
- package/src/dialect/xml.md +22 -0
- package/src/dialect/xml.ts +90 -0
- package/src/error/abort.ts +18 -0
- package/src/error/auth-classify.ts +47 -0
- package/src/error/auth.ts +48 -0
- package/src/error/aws.ts +35 -0
- package/src/error/classes.ts +281 -0
- package/src/error/finalize.ts +69 -0
- package/src/error/flags.ts +602 -0
- package/src/error/format.ts +45 -0
- package/src/error/gateway.ts +96 -0
- package/src/error/index.ts +14 -0
- package/src/error/oauth.ts +58 -0
- package/src/error/provider.ts +63 -0
- package/src/error/rate-limit.ts +303 -0
- package/src/error/retryable.ts +70 -0
- package/src/error/validation.ts +44 -0
- package/src/index.ts +51 -0
- package/src/provider-details.ts +90 -0
- package/src/providers/amazon-bedrock.ts +1064 -0
- package/src/providers/anthropic-client.ts +317 -0
- package/src/providers/anthropic-messages-server-schema.ts +252 -0
- package/src/providers/anthropic-messages-server.ts +818 -0
- package/src/providers/anthropic-wire.ts +359 -0
- package/src/providers/anthropic.ts +4539 -0
- package/src/providers/aws-credentials.ts +772 -0
- package/src/providers/aws-eventstream.ts +181 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.ts +438 -0
- package/src/providers/bedrock-mantle.ts +110 -0
- package/src/providers/claude-code-fingerprint.ts +20 -0
- package/src/providers/cowork-fetch.ts +201 -0
- package/src/providers/cursor/exec-modern.ts +496 -0
- package/src/providers/cursor/proto/agent.proto +4533 -0
- package/src/providers/cursor/proto/buf.gen.yaml +6 -0
- package/src/providers/cursor/proto/buf.yaml +17 -0
- package/src/providers/cursor-pi-args.ts +165 -0
- package/src/providers/cursor.ts +4689 -0
- package/src/providers/devin/proto/buf/validate/validate.proto +468 -0
- package/src/providers/devin/proto/buf.gen.yaml +33 -0
- package/src/providers/devin/proto/buf.yaml +17 -0
- package/src/providers/devin/proto/cel/expr/checked.proto +103 -0
- package/src/providers/devin/proto/cel/expr/eval.proto +38 -0
- package/src/providers/devin/proto/cel/expr/explain.proto +15 -0
- package/src/providers/devin/proto/cel/expr/syntax.proto +113 -0
- package/src/providers/devin/proto/cel/expr/value.proto +41 -0
- package/src/providers/devin/proto/connectext/grpc/status/v1/status.proto +11 -0
- package/src/providers/devin/proto/errorspb/errors.proto +56 -0
- package/src/providers/devin/proto/errorspb/hintdetail.proto +7 -0
- package/src/providers/devin/proto/errorspb/markers.proto +10 -0
- package/src/providers/devin/proto/errorspb/tags.proto +12 -0
- package/src/providers/devin/proto/errorspb/testing.proto +6 -0
- package/src/providers/devin/proto/exa/analytics_pb/analytics.proto +188 -0
- package/src/providers/devin/proto/exa/api_server_pb/api_server.proto +2461 -0
- package/src/providers/devin/proto/exa/auth_pb/auth.proto +19 -0
- package/src/providers/devin/proto/exa/auto_cascade_common_pb/auto_cascade_common.proto +79 -0
- package/src/providers/devin/proto/exa/browser_preview_pb/browser_preview.proto +32 -0
- package/src/providers/devin/proto/exa/bug_checker_pb/bug_checker.proto +22 -0
- package/src/providers/devin/proto/exa/cascade_plugins_pb/cascade_plugins.proto +262 -0
- package/src/providers/devin/proto/exa/chat_client_server_pb/chat_client_server.proto +57 -0
- package/src/providers/devin/proto/exa/chat_pb/chat.proto +449 -0
- package/src/providers/devin/proto/exa/code_edit/code_edit_pb/code_edit.proto +186 -0
- package/src/providers/devin/proto/exa/codeium_common_pb/codeium_common.proto +4157 -0
- package/src/providers/devin/proto/exa/context_module_pb/context_module.proto +175 -0
- package/src/providers/devin/proto/exa/cortex_pb/cortex.proto +3268 -0
- package/src/providers/devin/proto/exa/dev_pb/dev.proto +26 -0
- package/src/providers/devin/proto/exa/diff_action_pb/diff_action.proto +75 -0
- package/src/providers/devin/proto/exa/eval/pr_eval/datasets_pb/datasets.proto +103 -0
- package/src/providers/devin/proto/exa/eval_pb/eval.proto +1315 -0
- package/src/providers/devin/proto/exa/extension_server_pb/extension_server.proto +556 -0
- package/src/providers/devin/proto/exa/file_system_provider_pb/file_system_provider.proto +75 -0
- package/src/providers/devin/proto/exa/index_pb/index.proto +461 -0
- package/src/providers/devin/proto/exa/knowledge_base_pb/knowledge_base.proto +144 -0
- package/src/providers/devin/proto/exa/language_server_pb/language_server.proto +2385 -0
- package/src/providers/devin/proto/exa/model_management_pb/model_management.proto +186 -0
- package/src/providers/devin/proto/exa/opensearch_clients_pb/opensearch_clients.proto +503 -0
- package/src/providers/devin/proto/exa/product_analytics_pb/product_analytics.proto +37 -0
- package/src/providers/devin/proto/exa/prompt_pb/prompt.proto +92 -0
- package/src/providers/devin/proto/exa/reactive_component_pb/reactive_component.proto +96 -0
- package/src/providers/devin/proto/exa/seat_management_pb/seat_management.proto +2680 -0
- package/src/providers/devin/proto/exa/tokenizer_pb/tokenizer.proto +37 -0
- package/src/providers/devin/proto/exa/trainer_pb/config.proto +647 -0
- package/src/providers/devin/proto/exa/tree_sitter/language_data_pb/language_data.proto +14 -0
- package/src/providers/devin/proto/exa/trust_pb/trust.proto +157 -0
- package/src/providers/devin/proto/exa/user_analytics_pb/user_analytics.proto +519 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/base/api_base.proto +28 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/datastore/datastore_v3.proto +484 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/log/log_service.proto +136 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/remote_api/remote_api.proto +42 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +61 -0
- package/src/providers/devin/proto/grpc/binlog/v1/binarylog.proto +84 -0
- package/src/providers/devin/proto/io/prometheus/client/metrics.proto +98 -0
- package/src/providers/devin.ts +679 -0
- package/src/providers/error-message.ts +23 -0
- package/src/providers/github-copilot-headers.ts +141 -0
- package/src/providers/gitlab-duo-workflow-chatml-note.md +1 -0
- package/src/providers/gitlab-duo-workflow.ts +3135 -0
- package/src/providers/gitlab-duo.ts +399 -0
- package/src/providers/google-auth.ts +330 -0
- package/src/providers/google-gemini-cli.ts +1370 -0
- package/src/providers/google-shared.ts +1122 -0
- package/src/providers/google-types.ts +180 -0
- package/src/providers/google-vertex.ts +135 -0
- package/src/providers/google.ts +47 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.ts +51 -0
- package/src/providers/mock.ts +514 -0
- package/src/providers/ollama.ts +776 -0
- package/src/providers/openai-anthropic-shim.ts +166 -0
- package/src/providers/openai-chat-server-schema.ts +243 -0
- package/src/providers/openai-chat-server.ts +752 -0
- package/src/providers/openai-chat-wire.ts +859 -0
- package/src/providers/openai-codex/request-transformer.ts +491 -0
- package/src/providers/openai-codex/response-handler.ts +102 -0
- package/src/providers/openai-codex-responses.ts +4716 -0
- package/src/providers/openai-completions.ts +2389 -0
- package/src/providers/openai-reasoning-fallback.ts +269 -0
- package/src/providers/openai-responses-server-schema.ts +397 -0
- package/src/providers/openai-responses-server.ts +1466 -0
- package/src/providers/openai-responses-wire.ts +6416 -0
- package/src/providers/openai-responses.ts +1393 -0
- package/src/providers/openai-shared.ts +3500 -0
- package/src/providers/pi-native-client.ts +275 -0
- package/src/providers/pi-native-server.ts +245 -0
- package/src/providers/register-builtins.ts +503 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.ts +1083 -0
- package/src/providers/vision-guard.ts +54 -0
- package/src/registry/aiand.ts +22 -0
- package/src/registry/aimlapi.ts +6 -0
- package/src/registry/alibaba-coding-plan.ts +104 -0
- package/src/registry/alibaba-token-plan.ts +125 -0
- package/src/registry/amazon-bedrock.ts +22 -0
- package/src/registry/anthropic.ts +26 -0
- package/src/registry/api-key-login.ts +115 -0
- package/src/registry/api-key-validation.ts +145 -0
- package/src/registry/aws.ts +57 -0
- package/src/registry/azure.ts +6 -0
- package/src/registry/baseten.ts +22 -0
- package/src/registry/bedrock-mantle.ts +34 -0
- package/src/registry/cerebras.ts +23 -0
- package/src/registry/cloudflare-ai-gateway.ts +45 -0
- package/src/registry/coreweave.ts +40 -0
- package/src/registry/cursor.ts +20 -0
- package/src/registry/deepseek.ts +46 -0
- package/src/registry/derived.ts +9 -0
- package/src/registry/devin.ts +15 -0
- package/src/registry/exa.ts +19 -0
- package/src/registry/firepass.ts +32 -0
- package/src/registry/fireworks.ts +28 -0
- package/src/registry/github-copilot.ts +22 -0
- package/src/registry/gitlab-duo-workflow.ts +20 -0
- package/src/registry/gitlab-duo.ts +19 -0
- package/src/registry/gmi-cloud.ts +22 -0
- package/src/registry/google-antigravity.ts +22 -0
- package/src/registry/google-gemini-cli.ts +22 -0
- package/src/registry/google-vertex.ts +38 -0
- package/src/registry/google.ts +6 -0
- package/src/registry/groq.ts +6 -0
- package/src/registry/huggingface.ts +29 -0
- package/src/registry/index.ts +4 -0
- package/src/registry/kagi.ts +46 -0
- package/src/registry/kilo.ts +114 -0
- package/src/registry/kimi-code.ts +17 -0
- package/src/registry/litellm.ts +45 -0
- package/src/registry/llama-cpp.ts +35 -0
- package/src/registry/lm-studio.ts +31 -0
- package/src/registry/meta.ts +22 -0
- package/src/registry/minimax-code-cn.ts +12 -0
- package/src/registry/minimax-code.ts +12 -0
- package/src/registry/minimax.ts +6 -0
- package/src/registry/mistral.ts +6 -0
- package/src/registry/moonshot.ts +28 -0
- package/src/registry/nanogpt.ts +22 -0
- package/src/registry/novita.ts +25 -0
- package/src/registry/nvidia.ts +61 -0
- package/src/registry/oauth/anthropic-constants.ts +12 -0
- package/src/registry/oauth/anthropic.ts +346 -0
- package/src/registry/oauth/callback-server.ts +438 -0
- package/src/registry/oauth/cursor.ts +187 -0
- package/src/registry/oauth/device-code.ts +92 -0
- package/src/registry/oauth/devin.ts +124 -0
- package/src/registry/oauth/github-copilot.ts +369 -0
- package/src/registry/oauth/gitlab-duo-workflow.ts +146 -0
- package/src/registry/oauth/gitlab-duo.ts +222 -0
- package/src/registry/oauth/google-antigravity.ts +225 -0
- package/src/registry/oauth/google-gemini-cli.ts +297 -0
- package/src/registry/oauth/google-oauth-shared.ts +211 -0
- package/src/registry/oauth/index.ts +187 -0
- package/src/registry/oauth/kimi.ts +297 -0
- package/src/registry/oauth/minimax-code.ts +53 -0
- package/src/registry/oauth/oauth.html +317 -0
- package/src/registry/oauth/openai-codex.ts +384 -0
- package/src/registry/oauth/opencode.ts +50 -0
- package/src/registry/oauth/perplexity.ts +228 -0
- package/src/registry/oauth/pkce.ts +18 -0
- package/src/registry/oauth/types.ts +96 -0
- package/src/registry/oauth/wafer.ts +24 -0
- package/src/registry/oauth/xai-oauth.ts +559 -0
- package/src/registry/oauth/xiaomi.ts +211 -0
- package/src/registry/oauth/zai.ts +285 -0
- package/src/registry/ollama-cloud.ts +36 -0
- package/src/registry/ollama.ts +43 -0
- package/src/registry/openai-codex-device.ts +18 -0
- package/src/registry/openai-codex.ts +19 -0
- package/src/registry/openai.ts +6 -0
- package/src/registry/opencode-go.ts +12 -0
- package/src/registry/opencode-zen.ts +12 -0
- package/src/registry/openrouter.ts +28 -0
- package/src/registry/parallel.ts +45 -0
- package/src/registry/perplexity.ts +13 -0
- package/src/registry/qianfan.ts +27 -0
- package/src/registry/qwen-portal.ts +50 -0
- package/src/registry/registry.ts +182 -0
- package/src/registry/sakana.ts +22 -0
- package/src/registry/siliconflow-cn.ts +22 -0
- package/src/registry/siliconflow.ts +22 -0
- package/src/registry/synthetic.ts +21 -0
- package/src/registry/tavily.ts +45 -0
- package/src/registry/together.ts +22 -0
- package/src/registry/types.ts +86 -0
- package/src/registry/umans.ts +23 -0
- package/src/registry/venice.ts +33 -0
- package/src/registry/vercel-ai-gateway.ts +38 -0
- package/src/registry/vllm.ts +34 -0
- package/src/registry/wafer-serverless.ts +12 -0
- package/src/registry/xai-oauth.ts +17 -0
- package/src/registry/xai.ts +22 -0
- package/src/registry/xiaomi-token-plan-ams.ts +12 -0
- package/src/registry/xiaomi-token-plan-cn.ts +12 -0
- package/src/registry/xiaomi-token-plan-sgp.ts +12 -0
- package/src/registry/xiaomi.ts +12 -0
- package/src/registry/zai.ts +41 -0
- package/src/registry/zenmux.ts +22 -0
- package/src/registry/zhipu-coding-plan.ts +27 -0
- package/src/stream.ts +1944 -0
- package/src/types.ts +1243 -0
- package/src/usage/alibaba-token-plan.ts +230 -0
- package/src/usage/claude.ts +830 -0
- package/src/usage/cursor.ts +335 -0
- package/src/usage/gemini.ts +258 -0
- package/src/usage/github-copilot.ts +424 -0
- package/src/usage/google-antigravity.ts +497 -0
- package/src/usage/kimi.ts +277 -0
- package/src/usage/minimax-code.ts +291 -0
- package/src/usage/ollama.ts +41 -0
- package/src/usage/openai-codex-base-url.ts +35 -0
- package/src/usage/openai-codex-reset.ts +205 -0
- package/src/usage/openai-codex.ts +627 -0
- package/src/usage/opencode-go.ts +89 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/synthetic.ts +180 -0
- package/src/usage/umans.ts +192 -0
- package/src/usage/xai-oauth.ts +414 -0
- package/src/usage/zai.ts +370 -0
- package/src/usage.ts +411 -0
- package/src/utils/abort.ts +67 -0
- package/src/utils/anthropic-auth.ts +93 -0
- package/src/utils/aws-profile.ts +88 -0
- package/src/utils/block-symbols.ts +78 -0
- package/src/utils/deterministic-id.ts +20 -0
- package/src/utils/empty-completion-retry.ts +161 -0
- package/src/utils/event-stream.ts +202 -0
- package/src/utils/foundry.ts +8 -0
- package/src/utils/google-validation.ts +25 -0
- package/src/utils/harmony-leak.ts +500 -0
- package/src/utils/http-inspector.ts +196 -0
- package/src/utils/idle-iterator.ts +531 -0
- package/src/utils/leaked-thinking-stream.ts +483 -0
- package/src/utils/openai-http.ts +119 -0
- package/src/utils/openrouter-headers.ts +12 -0
- package/src/utils/parse-bind.ts +56 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/proxy.ts +314 -0
- package/src/utils/request-debug.ts +351 -0
- package/src/utils/retry-after.ts +121 -0
- package/src/utils/retry.ts +77 -0
- package/src/utils/schema/CONSTRAINTS.md +168 -0
- package/src/utils/schema/adapt.ts +36 -0
- package/src/utils/schema/compatibility.ts +435 -0
- package/src/utils/schema/dereference.ts +98 -0
- package/src/utils/schema/draft.ts +341 -0
- package/src/utils/schema/equality.ts +97 -0
- package/src/utils/schema/fields.ts +210 -0
- package/src/utils/schema/index.ts +14 -0
- package/src/utils/schema/json-schema-validator.ts +595 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.ts +2314 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.ts +109 -0
- package/src/utils/schema/strict-tool-validation.ts +117 -0
- package/src/utils/schema/types.ts +10 -0
- package/src/utils/schema/typescript.ts +212 -0
- package/src/utils/schema/wire.ts +662 -0
- package/src/utils/sdk-stream-timeout.ts +43 -0
- package/src/utils/sse-debug.ts +18 -0
- package/src/utils/stream-markup-healing.ts +247 -0
- package/src/utils/thinking-loop.ts +552 -0
- package/src/utils/tool-call-loop-guard.ts +107 -0
- package/src/utils/tool-choice.ts +101 -0
- package/src/utils/validation.ts +1932 -0
- package/src/utils.ts +492 -0
|
@@ -0,0 +1,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 loginBaseten = createApiKeyLogin({
|
|
6
|
+
providerLabel: "Baseten",
|
|
7
|
+
authUrl: "https://app.baseten.co/settings/api_keys",
|
|
8
|
+
instructions: "Copy your API key from the Baseten dashboard",
|
|
9
|
+
promptMessage: "Paste your Baseten API key",
|
|
10
|
+
placeholder: "bt_...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "models-endpoint",
|
|
13
|
+
provider: "Baseten",
|
|
14
|
+
modelsUrl: "https://inference.baseten.co/v1/models",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const basetenProvider = {
|
|
19
|
+
id: "baseten",
|
|
20
|
+
name: "Baseten",
|
|
21
|
+
login: (cb: OAuthLoginCallbacks) => loginBaseten(cb),
|
|
22
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type BedrockMantleOptions,
|
|
3
|
+
createBedrockMantleAuthenticatedFetch,
|
|
4
|
+
prepareBedrockMantleRequest,
|
|
5
|
+
} from "../providers/bedrock-mantle";
|
|
6
|
+
import type { Model } from "../types";
|
|
7
|
+
import { resolveAwsRegion } from "../utils/aws-profile";
|
|
8
|
+
import { resolveAwsBearerToken, resolveAwsRegistryApiKey } from "./aws";
|
|
9
|
+
import type { ProviderDefinition } from "./types";
|
|
10
|
+
|
|
11
|
+
export const bedrockMantleProvider = {
|
|
12
|
+
id: "bedrock-mantle",
|
|
13
|
+
name: "Amazon Bedrock Mantle",
|
|
14
|
+
envKeys: resolveAwsRegistryApiKey,
|
|
15
|
+
allowsMissingApiKey: true,
|
|
16
|
+
prepareRequest: (model, options) =>
|
|
17
|
+
prepareBedrockMantleRequest(model as Model<"openai-responses">, options as BedrockMantleOptions),
|
|
18
|
+
mapSimpleOptions: options => ({ providerOptions: options.providerOptions }),
|
|
19
|
+
prepareModelDiscovery: config => {
|
|
20
|
+
const bearerToken = resolveAwsBearerToken(config.apiKey);
|
|
21
|
+
if (!bearerToken) {
|
|
22
|
+
return { ...config, apiKey: undefined, authenticated: false };
|
|
23
|
+
}
|
|
24
|
+
const region = resolveAwsRegion();
|
|
25
|
+
return {
|
|
26
|
+
authenticated: true,
|
|
27
|
+
baseUrl: `https://bedrock-mantle.${encodeURIComponent(region)}.api.aws/openai/v1`,
|
|
28
|
+
fetch: createBedrockMantleAuthenticatedFetch({
|
|
29
|
+
fetch: config.fetch,
|
|
30
|
+
providerOptions: { bearerToken, region },
|
|
31
|
+
}),
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
export const loginCerebras = createApiKeyLogin({
|
|
6
|
+
providerLabel: "Cerebras",
|
|
7
|
+
authUrl: "https://cloud.cerebras.ai/platform/",
|
|
8
|
+
instructions: "Copy your API key from the Cerebras dashboard",
|
|
9
|
+
promptMessage: "Paste your Cerebras API key",
|
|
10
|
+
placeholder: "csk-...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "chat-completions",
|
|
13
|
+
provider: "Cerebras",
|
|
14
|
+
baseUrl: "https://api.cerebras.ai/v1",
|
|
15
|
+
model: "gpt-oss-120b",
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export const cerebrasProvider = {
|
|
20
|
+
id: "cerebras",
|
|
21
|
+
name: "Cerebras",
|
|
22
|
+
login: (cb: OAuthLoginCallbacks) => loginCerebras(cb),
|
|
23
|
+
} 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://developers.cloudflare.com/ai-gateway/configuration/authentication/";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Login to Cloudflare AI Gateway.
|
|
9
|
+
*
|
|
10
|
+
* Opens browser to Cloudflare AI Gateway authentication docs and prompts for a gateway token/API key.
|
|
11
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
12
|
+
*/
|
|
13
|
+
export async function loginCloudflareAiGateway(options: OAuthController): Promise<string> {
|
|
14
|
+
if (!options.onPrompt) {
|
|
15
|
+
throw new AIError.OnPromptRequiredError("Cloudflare AI Gateway");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
options.onAuth?.({
|
|
19
|
+
url: AUTH_URL,
|
|
20
|
+
instructions:
|
|
21
|
+
"Copy your Cloudflare AI Gateway token/API key. Configure account/gateway base URL in models config.",
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const apiKey = await options.onPrompt({
|
|
25
|
+
message: "Paste your Cloudflare AI Gateway token/API key",
|
|
26
|
+
placeholder: "cf-aig-...",
|
|
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 cloudflareAiGatewayProvider = {
|
|
42
|
+
id: "cloudflare-ai-gateway",
|
|
43
|
+
name: "Cloudflare AI Gateway",
|
|
44
|
+
login: (cb: OAuthLoginCallbacks) => loginCloudflareAiGateway(cb),
|
|
45
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { coreWeaveProjectHeaders } from "@linxiraos/pi-catalog/wire/coreweave";
|
|
2
|
+
import { $env } from "@linxiraos/pi-utils";
|
|
3
|
+
import * as AIError from "../error";
|
|
4
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
5
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
6
|
+
import type { ProviderDefinition } from "./types";
|
|
7
|
+
|
|
8
|
+
const PROJECT_PERSIST_INSTRUCTIONS =
|
|
9
|
+
"add export COREWEAVE_PROJECT=<team>/<project> to your shell startup file (for example ~/.zshrc, ~/.bashrc, or your shell's profile/rc file)";
|
|
10
|
+
const PROJECT_SETUP_INSTRUCTIONS = `Create or select a CoreWeave Serverless Inference project, ${PROJECT_PERSIST_INSTRUCTIONS} for the OpenAI-Project header, then copy your API key from account settings`;
|
|
11
|
+
|
|
12
|
+
function requireCoreWeaveProjectHeaders(): Record<string, string> {
|
|
13
|
+
const headers = coreWeaveProjectHeaders($env);
|
|
14
|
+
if (!headers) {
|
|
15
|
+
throw new AIError.ConfigurationError(
|
|
16
|
+
`CoreWeave Serverless Inference requires OpenAI-Project. Set COREWEAVE_PROJECT=<team>/<project> before running /login coreweave. To persist it, ${PROJECT_PERSIST_INSTRUCTIONS}.`,
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
return headers;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const loginCoreWeave = createApiKeyLogin({
|
|
23
|
+
providerLabel: "CoreWeave Serverless Inference",
|
|
24
|
+
authUrl: "https://wandb.ai/settings",
|
|
25
|
+
instructions: PROJECT_SETUP_INSTRUCTIONS,
|
|
26
|
+
promptMessage: "Paste your CoreWeave Serverless Inference API key",
|
|
27
|
+
placeholder: "api-key",
|
|
28
|
+
validation: {
|
|
29
|
+
kind: "models-endpoint",
|
|
30
|
+
provider: "CoreWeave Serverless Inference",
|
|
31
|
+
modelsUrl: "https://api.inference.wandb.ai/v1/models",
|
|
32
|
+
headers: requireCoreWeaveProjectHeaders,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
export const coreWeaveProvider = {
|
|
37
|
+
id: "coreweave",
|
|
38
|
+
name: "CoreWeave Serverless Inference",
|
|
39
|
+
login: (cb: OAuthLoginCallbacks) => loginCoreWeave(cb),
|
|
40
|
+
} 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 cursorProvider = {
|
|
5
|
+
id: "cursor",
|
|
6
|
+
name: "Cursor (Claude, GPT, etc.)",
|
|
7
|
+
login: async (cb: OAuthLoginCallbacks) => {
|
|
8
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
9
|
+
const { loginCursor } = await import("./oauth/cursor");
|
|
10
|
+
return loginCursor(
|
|
11
|
+
url => cb.onAuth({ url }),
|
|
12
|
+
cb.onProgress ? () => cb.onProgress?.("Waiting for browser authentication...") : undefined,
|
|
13
|
+
);
|
|
14
|
+
},
|
|
15
|
+
refreshToken: async (credentials: OAuthCredentials) => {
|
|
16
|
+
// Lazy import: keep heavy OAuth flow modules out of the eager registry graph.
|
|
17
|
+
const { refreshCursorToken } = await import("./oauth/cursor");
|
|
18
|
+
return refreshCursorToken(credentials.refresh);
|
|
19
|
+
},
|
|
20
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
3
|
+
import type { OAuthController, OAuthLoginCallbacks, OAuthPrompt } from "./oauth/types";
|
|
4
|
+
import type { ProviderDefinition } from "./types";
|
|
5
|
+
|
|
6
|
+
const innerLogin = createApiKeyLogin({
|
|
7
|
+
providerLabel: "DeepSeek",
|
|
8
|
+
authUrl: "https://platform.deepseek.com/api_keys",
|
|
9
|
+
instructions: "Create or copy your API key from the DeepSeek dashboard",
|
|
10
|
+
promptMessage: "Paste your DeepSeek API key",
|
|
11
|
+
placeholder: "sk-...",
|
|
12
|
+
validation: {
|
|
13
|
+
kind: "models-endpoint",
|
|
14
|
+
provider: "deepseek",
|
|
15
|
+
modelsUrl: "https://api.deepseek.com/v1/models",
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export function normalizeDeepSeekApiKey(raw: string): string {
|
|
20
|
+
const trimmed = raw.trim();
|
|
21
|
+
if (!trimmed) {
|
|
22
|
+
return trimmed;
|
|
23
|
+
}
|
|
24
|
+
const stripped = trimmed.replace(/^bearer\b\s*/i, "");
|
|
25
|
+
if (!stripped) {
|
|
26
|
+
throw new AIError.ApiKeyRequiredError("DeepSeek API key is empty after stripping Bearer prefix");
|
|
27
|
+
}
|
|
28
|
+
return stripped;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const loginDeepSeek = async (options: OAuthController): Promise<string> => {
|
|
32
|
+
const userOnPrompt = options.onPrompt;
|
|
33
|
+
const wrapped: OAuthController = userOnPrompt
|
|
34
|
+
? {
|
|
35
|
+
...options,
|
|
36
|
+
onPrompt: async (prompt: OAuthPrompt) => normalizeDeepSeekApiKey(await userOnPrompt(prompt)),
|
|
37
|
+
}
|
|
38
|
+
: options;
|
|
39
|
+
return innerLogin(wrapped);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const deepseekProvider = {
|
|
43
|
+
id: "deepseek",
|
|
44
|
+
name: "DeepSeek",
|
|
45
|
+
login: (cb: OAuthLoginCallbacks) => loginDeepSeek(cb),
|
|
46
|
+
} as const satisfies ProviderDefinition;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PROVIDER_REGISTRY } from "./registry";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Providers whose OAuth flow needs a pasted code/redirect URL rather than a
|
|
5
|
+
* local callback server. Consumed by the coding-agent login UX.
|
|
6
|
+
*/
|
|
7
|
+
export const PASTE_CODE_LOGIN_PROVIDERS: ReadonlySet<string> = new Set(
|
|
8
|
+
PROVIDER_REGISTRY.filter(p => p.pasteCodeFlow).map(p => p.id),
|
|
9
|
+
);
|
|
@@ -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,19 @@
|
|
|
1
|
+
import { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
export const loginExa = createApiKeyLogin({
|
|
6
|
+
providerLabel: "Exa",
|
|
7
|
+
authUrl: "https://dashboard.exa.ai/api-keys",
|
|
8
|
+
instructions: "Create or copy your API key from the Exa dashboard.",
|
|
9
|
+
promptMessage: "Paste your Exa API key",
|
|
10
|
+
placeholder: "API key",
|
|
11
|
+
validation: null,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export const exaProvider = {
|
|
15
|
+
id: "exa",
|
|
16
|
+
name: "Exa",
|
|
17
|
+
envKeys: "EXA_API_KEY",
|
|
18
|
+
login: (cb: OAuthLoginCallbacks) => loginExa(cb),
|
|
19
|
+
} 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 { createApiKeyLogin } from "./api-key-login";
|
|
2
|
+
import type { OAuthLoginCallbacks } from "./oauth/types";
|
|
3
|
+
import type { ProviderDefinition } from "./types";
|
|
4
|
+
|
|
5
|
+
export const loginGmiCloud = createApiKeyLogin({
|
|
6
|
+
providerLabel: "GMI Cloud",
|
|
7
|
+
authUrl: "https://console.gmicloud.ai",
|
|
8
|
+
instructions: "Create or copy your GMI Cloud API key",
|
|
9
|
+
promptMessage: "Paste your GMI Cloud API key",
|
|
10
|
+
placeholder: "eyJ...",
|
|
11
|
+
validation: {
|
|
12
|
+
kind: "models-endpoint",
|
|
13
|
+
provider: "GMI Cloud",
|
|
14
|
+
modelsUrl: "https://api.gmi-serving.com/v1/models",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const gmiCloudProvider = {
|
|
19
|
+
id: "gmi-cloud",
|
|
20
|
+
name: "GMI Cloud",
|
|
21
|
+
login: (cb: OAuthLoginCallbacks) => loginGmiCloud(cb),
|
|
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 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 "@linxiraos/pi-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;
|