@gajae-code/ai 0.1.1
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 +2644 -0
- package/README.md +1181 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth-broker/client.d.ts +66 -0
- package/dist/types/auth-broker/index.d.ts +5 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +96 -0
- package/dist/types/auth-broker/server.d.ts +32 -0
- package/dist/types/auth-broker/types.d.ts +105 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +412 -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 +17 -0
- package/dist/types/auth-gateway/types.d.ts +115 -0
- package/dist/types/auth-storage.d.ts +641 -0
- package/dist/types/cli.d.ts +2 -0
- package/dist/types/index.d.ts +49 -0
- package/dist/types/model-cache.d.ts +17 -0
- package/dist/types/model-manager.d.ts +62 -0
- package/dist/types/model-thinking.d.ts +71 -0
- package/dist/types/models.d.ts +12 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/provider-models/bundled-references.d.ts +4 -0
- package/dist/types/provider-models/descriptors.d.ts +48 -0
- package/dist/types/provider-models/google.d.ts +20 -0
- package/dist/types/provider-models/index.d.ts +5 -0
- package/dist/types/provider-models/ollama.d.ts +7 -0
- package/dist/types/provider-models/openai-compat.d.ts +237 -0
- package/dist/types/provider-models/special.d.ts +16 -0
- package/dist/types/providers/amazon-bedrock.d.ts +36 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +450 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic.d.ts +188 -0
- package/dist/types/providers/aws-credentials.d.ts +43 -0
- package/dist/types/providers/aws-eventstream.d.ts +38 -0
- package/dist/types/providers/aws-sigv4.d.ts +55 -0
- package/dist/types/providers/azure-openai-responses.d.ts +15 -0
- package/dist/types/providers/cursor/gen/agent_pb.d.ts +13022 -0
- package/dist/types/providers/cursor.d.ts +42 -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.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +24 -0
- package/dist/types/providers/google-gemini-cli.d.ts +72 -0
- package/dist/types/providers/google-gemini-headers.d.ts +18 -0
- package/dist/types/providers/google-shared.d.ts +163 -0
- package/dist/types/providers/google-types.d.ts +138 -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 +175 -0
- package/dist/types/providers/ollama.d.ts +6 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +814 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-codex/constants.d.ts +26 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +49 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +17 -0
- package/dist/types/providers/openai-codex-responses.d.ts +67 -0
- package/dist/types/providers/openai-completions-compat.d.ts +25 -0
- package/dist/types/providers/openai-completions.d.ts +33 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-shared.d.ts +89 -0
- package/dist/types/providers/openai-responses.d.ts +32 -0
- package/dist/types/providers/pi-native-client.d.ts +13 -0
- package/dist/types/providers/pi-native-server.d.ts +68 -0
- package/dist/types/providers/register-builtins.d.ts +31 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +12 -0
- package/dist/types/providers/vision-guard.d.ts +8 -0
- package/dist/types/rate-limit-utils.d.ts +19 -0
- package/dist/types/stream.d.ts +24 -0
- package/dist/types/types.d.ts +746 -0
- package/dist/types/usage/claude.d.ts +3 -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 +2 -0
- package/dist/types/usage/kimi.d.ts +2 -0
- package/dist/types/usage/minimax-code.d.ts +2 -0
- package/dist/types/usage/openai-codex.d.ts +3 -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 +258 -0
- package/dist/types/utils/abort.d.ts +19 -0
- package/dist/types/utils/anthropic-auth.d.ts +31 -0
- package/dist/types/utils/discovery/antigravity.d.ts +61 -0
- package/dist/types/utils/discovery/codex.d.ts +38 -0
- package/dist/types/utils/discovery/cursor.d.ts +23 -0
- package/dist/types/utils/discovery/gemini.d.ts +25 -0
- package/dist/types/utils/discovery/index.d.ts +4 -0
- package/dist/types/utils/discovery/openai-compatible.d.ts +72 -0
- package/dist/types/utils/event-stream.d.ts +28 -0
- package/dist/types/utils/fireworks-model-id.d.ts +10 -0
- package/dist/types/utils/foundry.d.ts +1 -0
- package/dist/types/utils/h2-fetch.d.ts +22 -0
- package/dist/types/utils/http-inspector.d.ts +31 -0
- package/dist/types/utils/idle-iterator.d.ts +67 -0
- package/dist/types/utils/json-parse.d.ts +10 -0
- package/dist/types/utils/oauth/alibaba-coding-plan.d.ts +18 -0
- package/dist/types/utils/oauth/anthropic.d.ts +22 -0
- package/dist/types/utils/oauth/api-key-login.d.ts +35 -0
- package/dist/types/utils/oauth/api-key-validation.d.ts +27 -0
- package/dist/types/utils/oauth/callback-server.d.ts +57 -0
- package/dist/types/utils/oauth/cerebras.d.ts +1 -0
- package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/cursor.d.ts +15 -0
- package/dist/types/utils/oauth/deepseek.d.ts +10 -0
- package/dist/types/utils/oauth/firepass.d.ts +1 -0
- package/dist/types/utils/oauth/fireworks.d.ts +1 -0
- package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
- package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
- package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
- package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
- package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
- package/dist/types/utils/oauth/huggingface.d.ts +19 -0
- package/dist/types/utils/oauth/index.d.ts +38 -0
- package/dist/types/utils/oauth/kagi.d.ts +17 -0
- package/dist/types/utils/oauth/kilo.d.ts +5 -0
- package/dist/types/utils/oauth/kimi.d.ts +21 -0
- package/dist/types/utils/oauth/litellm.d.ts +18 -0
- package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
- package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
- package/dist/types/utils/oauth/moonshot.d.ts +1 -0
- package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
- package/dist/types/utils/oauth/nvidia.d.ts +18 -0
- package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
- package/dist/types/utils/oauth/ollama.d.ts +18 -0
- package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
- package/dist/types/utils/oauth/opencode.d.ts +18 -0
- package/dist/types/utils/oauth/parallel.d.ts +17 -0
- package/dist/types/utils/oauth/perplexity.d.ts +9 -0
- package/dist/types/utils/oauth/pkce.d.ts +8 -0
- package/dist/types/utils/oauth/qianfan.d.ts +17 -0
- package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
- package/dist/types/utils/oauth/synthetic.d.ts +1 -0
- package/dist/types/utils/oauth/tavily.d.ts +17 -0
- package/dist/types/utils/oauth/together.d.ts +1 -0
- package/dist/types/utils/oauth/types.d.ts +44 -0
- package/dist/types/utils/oauth/venice.d.ts +18 -0
- package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/vllm.d.ts +16 -0
- package/dist/types/utils/oauth/xiaomi.d.ts +19 -0
- package/dist/types/utils/oauth/zai.d.ts +18 -0
- package/dist/types/utils/oauth/zenmux.d.ts +1 -0
- package/dist/types/utils/overflow.d.ts +54 -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/retry-after.d.ts +3 -0
- package/dist/types/utils/retry.d.ts +26 -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 +49 -0
- package/dist/types/utils/schema/index.d.ts +13 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
- package/dist/types/utils/schema/meta-validator.d.ts +2 -0
- package/dist/types/utils/schema/normalize.d.ts +93 -0
- package/dist/types/utils/schema/spill.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +25 -0
- package/dist/types/utils/schema/types.d.ts +4 -0
- package/dist/types/utils/schema/wire.d.ts +54 -0
- package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
- package/dist/types/utils/sse-debug.d.ts +10 -0
- package/dist/types/utils/tool-call-healing.d.ts +71 -0
- package/dist/types/utils/tool-choice.d.ts +50 -0
- package/dist/types/utils/validation.d.ts +17 -0
- package/dist/types/utils.d.ts +28 -0
- package/package.json +146 -0
- package/src/api-registry.ts +96 -0
- package/src/auth-broker/client.ts +358 -0
- package/src/auth-broker/index.ts +5 -0
- package/src/auth-broker/refresher.ts +127 -0
- package/src/auth-broker/remote-store.ts +623 -0
- package/src/auth-broker/server.ts +644 -0
- package/src/auth-broker/types.ts +127 -0
- package/src/auth-broker/wire-schemas.ts +200 -0
- package/src/auth-gateway/http.ts +194 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +717 -0
- package/src/auth-gateway/types.ts +134 -0
- package/src/auth-storage.ts +4104 -0
- package/src/cli.ts +262 -0
- package/src/index.ts +54 -0
- package/src/model-cache.ts +129 -0
- package/src/model-manager.ts +450 -0
- package/src/model-thinking.ts +691 -0
- package/src/models.json +73853 -0
- package/src/models.json.d.ts +9 -0
- package/src/models.ts +56 -0
- package/src/prompts/turn-aborted-guidance.md +4 -0
- package/src/provider-details.ts +90 -0
- package/src/provider-models/bundled-references.ts +38 -0
- package/src/provider-models/descriptors.ts +308 -0
- package/src/provider-models/google.ts +91 -0
- package/src/provider-models/index.ts +5 -0
- package/src/provider-models/ollama.ts +153 -0
- package/src/provider-models/openai-compat.ts +2275 -0
- package/src/provider-models/special.ts +67 -0
- package/src/providers/amazon-bedrock.ts +849 -0
- package/src/providers/anthropic-messages-server-schema.ts +229 -0
- package/src/providers/anthropic-messages-server.ts +677 -0
- package/src/providers/anthropic.ts +2696 -0
- package/src/providers/aws-credentials.ts +501 -0
- package/src/providers/aws-eventstream.ts +185 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.ts +337 -0
- package/src/providers/cursor/gen/agent_pb.ts +15274 -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 +2561 -0
- package/src/providers/error-message.ts +21 -0
- package/src/providers/github-copilot-headers.ts +140 -0
- package/src/providers/gitlab-duo.ts +372 -0
- package/src/providers/google-auth.ts +252 -0
- package/src/providers/google-gemini-cli.ts +795 -0
- package/src/providers/google-gemini-headers.ts +41 -0
- package/src/providers/google-shared.ts +902 -0
- package/src/providers/google-types.ts +167 -0
- package/src/providers/google-vertex.ts +88 -0
- package/src/providers/google.ts +41 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.ts +52 -0
- package/src/providers/mock.ts +500 -0
- package/src/providers/ollama.ts +544 -0
- package/src/providers/openai-anthropic-shim.ts +138 -0
- package/src/providers/openai-chat-server-schema.ts +243 -0
- package/src/providers/openai-chat-server.ts +628 -0
- package/src/providers/openai-codex/constants.ts +43 -0
- package/src/providers/openai-codex/request-transformer.ts +161 -0
- package/src/providers/openai-codex/response-handler.ts +81 -0
- package/src/providers/openai-codex-responses.ts +2598 -0
- package/src/providers/openai-completions-compat.ts +279 -0
- package/src/providers/openai-completions.ts +1853 -0
- package/src/providers/openai-responses-server-schema.ts +290 -0
- package/src/providers/openai-responses-server.ts +1183 -0
- package/src/providers/openai-responses-shared.ts +800 -0
- package/src/providers/openai-responses.ts +621 -0
- package/src/providers/pi-native-client.ts +228 -0
- package/src/providers/pi-native-server.ts +210 -0
- package/src/providers/register-builtins.ts +412 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.ts +309 -0
- package/src/providers/vision-guard.ts +31 -0
- package/src/rate-limit-utils.ts +84 -0
- package/src/stream.ts +895 -0
- package/src/types.ts +884 -0
- package/src/usage/claude.ts +431 -0
- package/src/usage/gemini.ts +250 -0
- package/src/usage/github-copilot.ts +421 -0
- package/src/usage/google-antigravity.ts +201 -0
- package/src/usage/kimi.ts +271 -0
- package/src/usage/minimax-code.ts +31 -0
- package/src/usage/openai-codex.ts +503 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/zai.ts +247 -0
- package/src/usage.ts +183 -0
- package/src/utils/abort.ts +51 -0
- package/src/utils/anthropic-auth.ts +87 -0
- package/src/utils/discovery/antigravity.ts +261 -0
- package/src/utils/discovery/codex.ts +371 -0
- package/src/utils/discovery/cursor.ts +306 -0
- package/src/utils/discovery/gemini.ts +248 -0
- package/src/utils/discovery/index.ts +4 -0
- package/src/utils/discovery/openai-compatible.ts +224 -0
- package/src/utils/event-stream.ts +142 -0
- package/src/utils/fireworks-model-id.ts +30 -0
- package/src/utils/foundry.ts +8 -0
- package/src/utils/h2-fetch.ts +60 -0
- package/src/utils/http-inspector.ts +176 -0
- package/src/utils/idle-iterator.ts +250 -0
- package/src/utils/json-parse.ts +148 -0
- package/src/utils/oauth/alibaba-coding-plan.ts +59 -0
- package/src/utils/oauth/anthropic.ts +200 -0
- package/src/utils/oauth/api-key-login.ts +87 -0
- package/src/utils/oauth/api-key-validation.ts +92 -0
- package/src/utils/oauth/callback-server.ts +276 -0
- package/src/utils/oauth/cerebras.ts +16 -0
- package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
- package/src/utils/oauth/cursor.ts +157 -0
- package/src/utils/oauth/deepseek.ts +53 -0
- package/src/utils/oauth/firepass.ts +24 -0
- package/src/utils/oauth/fireworks.ts +15 -0
- package/src/utils/oauth/github-copilot.ts +362 -0
- package/src/utils/oauth/gitlab-duo.ts +123 -0
- package/src/utils/oauth/google-antigravity.ts +200 -0
- package/src/utils/oauth/google-gemini-cli.ts +256 -0
- package/src/utils/oauth/google-oauth-shared.ts +110 -0
- package/src/utils/oauth/huggingface.ts +62 -0
- package/src/utils/oauth/index.ts +444 -0
- package/src/utils/oauth/kagi.ts +47 -0
- package/src/utils/oauth/kilo.ts +87 -0
- package/src/utils/oauth/kimi.ts +254 -0
- package/src/utils/oauth/litellm.ts +47 -0
- package/src/utils/oauth/lm-studio.ts +38 -0
- package/src/utils/oauth/minimax-code.ts +78 -0
- package/src/utils/oauth/moonshot.ts +16 -0
- package/src/utils/oauth/nanogpt.ts +15 -0
- package/src/utils/oauth/nvidia.ts +70 -0
- package/src/utils/oauth/oauth.html +199 -0
- package/src/utils/oauth/ollama-cloud.ts +28 -0
- package/src/utils/oauth/ollama.ts +47 -0
- package/src/utils/oauth/openai-codex.ts +299 -0
- package/src/utils/oauth/opencode.ts +49 -0
- package/src/utils/oauth/parallel.ts +46 -0
- package/src/utils/oauth/perplexity.ts +206 -0
- package/src/utils/oauth/pkce.ts +18 -0
- package/src/utils/oauth/qianfan.ts +58 -0
- package/src/utils/oauth/qwen-portal.ts +60 -0
- package/src/utils/oauth/synthetic.ts +16 -0
- package/src/utils/oauth/tavily.ts +46 -0
- package/src/utils/oauth/together.ts +16 -0
- package/src/utils/oauth/types.ts +94 -0
- package/src/utils/oauth/venice.ts +59 -0
- package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
- package/src/utils/oauth/vllm.ts +40 -0
- package/src/utils/oauth/xiaomi.ts +137 -0
- package/src/utils/oauth/zai.ts +60 -0
- package/src/utils/oauth/zenmux.ts +15 -0
- package/src/utils/overflow.ts +137 -0
- package/src/utils/parse-bind.ts +54 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry.ts +54 -0
- package/src/utils/schema/CONSTRAINTS.md +164 -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 +190 -0
- package/src/utils/schema/index.ts +13 -0
- package/src/utils/schema/json-schema-validator.ts +577 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.ts +1588 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.ts +97 -0
- package/src/utils/schema/types.ts +11 -0
- package/src/utils/schema/wire.ts +213 -0
- package/src/utils/schema/zod-decontaminate.ts +331 -0
- package/src/utils/sse-debug.ts +289 -0
- package/src/utils/tool-call-healing.ts +271 -0
- package/src/utils/tool-choice.ts +99 -0
- package/src/utils/validation.ts +1019 -0
- package/src/utils.ts +166 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type RawHttpRequestDump = {
|
|
2
|
+
provider: string;
|
|
3
|
+
api: string;
|
|
4
|
+
model: string;
|
|
5
|
+
method?: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
headers?: Record<string, string>;
|
|
8
|
+
body?: unknown;
|
|
9
|
+
};
|
|
10
|
+
export type CapturedHttpErrorResponse = {
|
|
11
|
+
status: number;
|
|
12
|
+
headers?: Headers;
|
|
13
|
+
bodyText?: string;
|
|
14
|
+
bodyJson?: unknown;
|
|
15
|
+
};
|
|
16
|
+
export declare function appendRawHttpRequestDumpFor400(message: string, error: unknown, dump: RawHttpRequestDump | undefined): Promise<string>;
|
|
17
|
+
export declare function finalizeErrorMessage(error: unknown, rawRequestDump: RawHttpRequestDump | undefined, capturedErrorResponse?: CapturedHttpErrorResponse): Promise<string>;
|
|
18
|
+
export declare function withHttpStatus(error: unknown, status: number): Error;
|
|
19
|
+
/**
|
|
20
|
+
* Rewrite error message for GitHub Copilot request failures.
|
|
21
|
+
* Must run AFTER finalizeErrorMessage since it replaces the message entirely.
|
|
22
|
+
*
|
|
23
|
+
* 400 `model_not_supported` = Copilot routing rollout gap for our OAuth client.
|
|
24
|
+
* A preview model (gpt-5.3-OpenAI code backend, gpt-5.4*, ...) flaps between 200 and
|
|
25
|
+
* 400 because only some of Copilot's backends have the model. After the
|
|
26
|
+
* in-request retry exhausts, surface guidance rather than the raw error.
|
|
27
|
+
* 401 = token invalid/expired → credential removal is safe, prompt re-login.
|
|
28
|
+
* 403 = token valid but access denied (plan, model policy, org restriction) →
|
|
29
|
+
* do NOT reuse the auth-failed string (which triggers credential removal).
|
|
30
|
+
*/
|
|
31
|
+
export declare function rewriteCopilotError(errorMessage: string, error: unknown, provider: string): string;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the idle timeout used for provider streaming transports.
|
|
3
|
+
*
|
|
4
|
+
* `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS` is accepted as a backward-compatible alias.
|
|
5
|
+
* Set `PI_STREAM_IDLE_TIMEOUT_MS=0` to disable the watchdog.
|
|
6
|
+
*
|
|
7
|
+
* Providers that legitimately stream much slower than the global default can pass
|
|
8
|
+
* `fallbackMs` to widen the floor used when neither env var nor caller option is set.
|
|
9
|
+
* Caller options still take precedence; env overrides still trump the fallback.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getStreamIdleTimeoutMs(fallbackMs?: number): number | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Returns the idle timeout used for OpenAI-family streaming transports.
|
|
14
|
+
*
|
|
15
|
+
* Set `PI_OPENAI_STREAM_IDLE_TIMEOUT_MS=0` to disable the watchdog.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getOpenAIStreamIdleTimeoutMs(): number | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Returns the timeout used while waiting for the first stream event.
|
|
20
|
+
* The first token can legitimately take longer than later inter-event gaps,
|
|
21
|
+
* so the default never undershoots the steady-state idle timeout.
|
|
22
|
+
*
|
|
23
|
+
* Set `PI_STREAM_FIRST_EVENT_TIMEOUT_MS=0` to disable the watchdog.
|
|
24
|
+
*
|
|
25
|
+
* Providers whose first response can legitimately take longer (heavy reasoning,
|
|
26
|
+
* slow cold-start proxies) can pass `fallbackMs` to widen the floor used when
|
|
27
|
+
* neither env var nor caller option is set. Caller options still take precedence;
|
|
28
|
+
* env overrides still trump the fallback.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getStreamFirstEventTimeoutMs(idleTimeoutMs?: number, fallbackMs?: number): number | undefined;
|
|
31
|
+
export type Watchdog = NodeJS.Timeout | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Starts a watchdog that aborts a request if no first stream event arrives in time.
|
|
34
|
+
* Call `markFirstEventReceived()` as soon as the first event is observed.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createWatchdog(timeoutMs: number | undefined, onTimeout: () => void): Watchdog;
|
|
37
|
+
export interface IdleTimeoutIteratorOptions {
|
|
38
|
+
watchdog?: Watchdog;
|
|
39
|
+
idleTimeoutMs?: number;
|
|
40
|
+
firstItemTimeoutMs?: number;
|
|
41
|
+
errorMessage: string;
|
|
42
|
+
firstItemErrorMessage?: string;
|
|
43
|
+
onIdle?: () => void;
|
|
44
|
+
onFirstItemTimeout?: () => void;
|
|
45
|
+
/**
|
|
46
|
+
* Optional semantic-progress predicate. Non-progress items are still yielded,
|
|
47
|
+
* but they do not reset the idle deadline. This prevents provider
|
|
48
|
+
* keepalive/no-op events from keeping a stalled tool call alive forever.
|
|
49
|
+
*/
|
|
50
|
+
isProgressItem?: (item: unknown) => boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Cancel iteration as soon as this signal aborts. Required for caller-driven
|
|
53
|
+
* cancellation (ESC) when the underlying transport does not surface signal
|
|
54
|
+
* aborts to the iterator (HTTP/2 proxies, native sockets, mocked fetch).
|
|
55
|
+
* Without this, the consumer sleeps on iterator.next() until the idle/first
|
|
56
|
+
* -event watchdog fires — observable as the issue #912 "Working… forever"
|
|
57
|
+
* symptom on the github-copilot provider.
|
|
58
|
+
*/
|
|
59
|
+
abortSignal?: AbortSignal;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Yields items from an async iterable while enforcing a maximum idle gap between items.
|
|
63
|
+
*
|
|
64
|
+
* The first item may use a shorter timeout so stuck requests can be aborted and retried
|
|
65
|
+
* before any user-visible content has streamed.
|
|
66
|
+
*/
|
|
67
|
+
export declare function iterateWithIdleTimeout<T>(iterable: AsyncIterable<T>, options: IdleTimeoutIteratorOptions): AsyncGenerator<T>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function repairJson(json: string): string;
|
|
2
|
+
export declare function parseJsonWithRepair<T>(json: string): T;
|
|
3
|
+
/**
|
|
4
|
+
* Attempts to parse potentially incomplete JSON during streaming.
|
|
5
|
+
* Always returns a valid object, even if the JSON is incomplete.
|
|
6
|
+
*
|
|
7
|
+
* @param partialJson The partial JSON string from streaming
|
|
8
|
+
* @returns Parsed object or empty object if parsing fails
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseStreamingJson<T = Record<string, unknown>>(partialJson: string | undefined): T;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alibaba Coding Plan login flow.
|
|
3
|
+
*
|
|
4
|
+
* Alibaba Coding Plan provides OpenAI-compatible models via https://coding-intl.dashscope.aliyuncs.com/v1.
|
|
5
|
+
*
|
|
6
|
+
* This is not OAuth - it's a simple API key flow:
|
|
7
|
+
* 1. Open browser to Alibaba Cloud DashScope API key settings
|
|
8
|
+
* 2. User copies their API key
|
|
9
|
+
* 3. User pastes the API key into the CLI
|
|
10
|
+
*/
|
|
11
|
+
import type { OAuthController } from "./types";
|
|
12
|
+
/**
|
|
13
|
+
* Login to Alibaba Coding Plan.
|
|
14
|
+
*
|
|
15
|
+
* Opens browser to API keys page, prompts user to paste their API key.
|
|
16
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
17
|
+
*/
|
|
18
|
+
export declare function loginAlibabaCodingPlan(options: OAuthController): Promise<string>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic OAuth flow (Anthropic model Pro/Max)
|
|
3
|
+
*/
|
|
4
|
+
import { OAuthCallbackFlow } from "./callback-server";
|
|
5
|
+
import type { OAuthController, OAuthCredentials } from "./types";
|
|
6
|
+
export declare class AnthropicOAuthFlow extends OAuthCallbackFlow {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(ctrl: OAuthController);
|
|
9
|
+
generateAuthUrl(state: string, redirectUri: string): Promise<{
|
|
10
|
+
url: string;
|
|
11
|
+
instructions?: string;
|
|
12
|
+
}>;
|
|
13
|
+
exchangeToken(code: string, state: string, redirectUri: string): Promise<OAuthCredentials>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Login with Anthropic OAuth
|
|
17
|
+
*/
|
|
18
|
+
export declare function loginAnthropic(ctrl: OAuthController): Promise<OAuthCredentials>;
|
|
19
|
+
/**
|
|
20
|
+
* Refresh Anthropic OAuth token
|
|
21
|
+
*/
|
|
22
|
+
export declare function refreshAnthropicToken(refreshToken: string): Promise<OAuthCredentials>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared factory for API-key-paste "login" flows.
|
|
3
|
+
*
|
|
4
|
+
* Several providers (Cerebras, Synthetic, Moonshot, Together, NanoGPT, ZenMux)
|
|
5
|
+
* don't actually implement OAuth — they just ask the user to paste an API key,
|
|
6
|
+
* optionally validate it, and return the trimmed key.
|
|
7
|
+
*/
|
|
8
|
+
import type { OAuthController } from "./types";
|
|
9
|
+
type ChatCompletionsValidation = {
|
|
10
|
+
kind: "chat-completions";
|
|
11
|
+
provider: string;
|
|
12
|
+
baseUrl: string;
|
|
13
|
+
model: string;
|
|
14
|
+
};
|
|
15
|
+
type ModelsEndpointValidation = {
|
|
16
|
+
kind: "models-endpoint";
|
|
17
|
+
provider: string;
|
|
18
|
+
modelsUrl: string;
|
|
19
|
+
};
|
|
20
|
+
export type ApiKeyLoginConfig = {
|
|
21
|
+
/** Display name used in error messages, e.g. "Cerebras", "NanoGPT". */
|
|
22
|
+
providerLabel: string;
|
|
23
|
+
/** URL opened in browser for the user to grab their key. */
|
|
24
|
+
authUrl: string;
|
|
25
|
+
/** Instructions shown with the onAuth callback. */
|
|
26
|
+
instructions: string;
|
|
27
|
+
/** Prompt message shown when asking for the key paste. */
|
|
28
|
+
promptMessage: string;
|
|
29
|
+
/** Placeholder string for the prompt (e.g. "sk-...", "csk-..."). */
|
|
30
|
+
placeholder: string;
|
|
31
|
+
/** Validation strategy, or `null` to skip validation. */
|
|
32
|
+
validation: ChatCompletionsValidation | ModelsEndpointValidation | null;
|
|
33
|
+
};
|
|
34
|
+
export declare function createApiKeyLogin(config: ApiKeyLoginConfig): (options: OAuthController) => Promise<string>;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
type OpenAICompatibleValidationOptions = {
|
|
2
|
+
provider: string;
|
|
3
|
+
apiKey: string;
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
model: string;
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
};
|
|
8
|
+
type ModelListValidationOptions = {
|
|
9
|
+
provider: string;
|
|
10
|
+
apiKey: string;
|
|
11
|
+
modelsUrl: string;
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Validate an API key against an OpenAI-compatible chat completions endpoint.
|
|
16
|
+
*
|
|
17
|
+
* Performs a minimal request to verify credentials and endpoint access.
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateOpenAICompatibleApiKey(options: OpenAICompatibleValidationOptions): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Validate an API key against a provider models endpoint.
|
|
22
|
+
*
|
|
23
|
+
* Useful for providers where access to specific models may vary by plan and
|
|
24
|
+
* should not block key validation.
|
|
25
|
+
*/
|
|
26
|
+
export declare function validateApiKeyAgainstModelsEndpoint(options: ModelListValidationOptions): Promise<void>;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { OAuthController, OAuthCredentials } from "./types";
|
|
2
|
+
export type CallbackResult = {
|
|
3
|
+
code: string;
|
|
4
|
+
state: string;
|
|
5
|
+
};
|
|
6
|
+
export interface OAuthCallbackFlowOptions {
|
|
7
|
+
preferredPort: number;
|
|
8
|
+
callbackPath?: string;
|
|
9
|
+
callbackHostname?: string;
|
|
10
|
+
/** Exact redirect URI advertised to the provider; disables port fallback. */
|
|
11
|
+
redirectUri?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Abstract base class for OAuth flows with local callback servers.
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class OAuthCallbackFlow {
|
|
17
|
+
#private;
|
|
18
|
+
ctrl: OAuthController;
|
|
19
|
+
preferredPort: number;
|
|
20
|
+
callbackPath: string;
|
|
21
|
+
callbackHostname: string;
|
|
22
|
+
redirectUri?: string;
|
|
23
|
+
constructor(ctrl: OAuthController, preferredPortOrOptions: number | OAuthCallbackFlowOptions, callbackPath?: string);
|
|
24
|
+
/**
|
|
25
|
+
* Generate provider-specific authorization URL.
|
|
26
|
+
* @param state - CSRF state token
|
|
27
|
+
* @param redirectUri - The actual redirect URI to use (may differ from expected if port fallback occurred)
|
|
28
|
+
* @returns Authorization URL and optional instructions
|
|
29
|
+
*/
|
|
30
|
+
abstract generateAuthUrl(state: string, redirectUri: string): Promise<{
|
|
31
|
+
url: string;
|
|
32
|
+
instructions?: string;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Exchange authorization code for OAuth tokens.
|
|
36
|
+
* @param code - Authorization code from callback
|
|
37
|
+
* @param state - CSRF state token
|
|
38
|
+
* @param redirectUri - The actual redirect URI used (must match authorization request)
|
|
39
|
+
* @returns OAuth credentials
|
|
40
|
+
*/
|
|
41
|
+
abstract exchangeToken(code: string, state: string, redirectUri: string): Promise<OAuthCredentials>;
|
|
42
|
+
/**
|
|
43
|
+
* Generate CSRF state token. Override if provider needs custom state generation.
|
|
44
|
+
*/
|
|
45
|
+
generateState(): string;
|
|
46
|
+
/**
|
|
47
|
+
* Execute the OAuth login flow.
|
|
48
|
+
*/
|
|
49
|
+
login(): Promise<OAuthCredentials>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Parse a redirect URL or code string to extract code and state.
|
|
53
|
+
*/
|
|
54
|
+
export declare function parseCallbackInput(input: string): {
|
|
55
|
+
code?: string;
|
|
56
|
+
state?: string;
|
|
57
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const loginCerebras: (options: import("./types").OAuthController) => Promise<string>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare AI Gateway login flow.
|
|
3
|
+
*
|
|
4
|
+
* Cloudflare AI Gateway proxies upstream model providers.
|
|
5
|
+
*
|
|
6
|
+
* This is not OAuth - it's a simple API key flow:
|
|
7
|
+
* 1. Open Cloudflare AI Gateway docs/dashboard
|
|
8
|
+
* 2. User copies their Cloudflare AI Gateway token/API key
|
|
9
|
+
* 3. User pastes the API key into the CLI
|
|
10
|
+
*/
|
|
11
|
+
import type { OAuthController } from "./types";
|
|
12
|
+
/**
|
|
13
|
+
* Login to Cloudflare AI Gateway.
|
|
14
|
+
*
|
|
15
|
+
* Opens browser to Cloudflare AI Gateway authentication docs and prompts for a gateway token/API key.
|
|
16
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
17
|
+
*/
|
|
18
|
+
export declare function loginCloudflareAiGateway(options: OAuthController): Promise<string>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { OAuthCredentials } from "./types";
|
|
2
|
+
export interface CursorAuthParams {
|
|
3
|
+
verifier: string;
|
|
4
|
+
challenge: string;
|
|
5
|
+
uuid: string;
|
|
6
|
+
loginUrl: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function generateCursorAuthParams(): Promise<CursorAuthParams>;
|
|
9
|
+
export declare function pollCursorAuth(uuid: string, verifier: string): Promise<{
|
|
10
|
+
accessToken: string;
|
|
11
|
+
refreshToken: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function loginCursor(onAuthUrl: (url: string) => void, onPollStart?: () => void): Promise<OAuthCredentials>;
|
|
14
|
+
export declare function refreshCursorToken(apiKeyOrRefreshToken: string): Promise<OAuthCredentials>;
|
|
15
|
+
export declare function isCursorTokenExpiringSoon(token: string, thresholdSeconds?: number): boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { OAuthController } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Normalize a pasted DeepSeek API key.
|
|
4
|
+
*
|
|
5
|
+
* Users frequently copy keys out of `curl` snippets that include the
|
|
6
|
+
* `Authorization: Bearer …` prefix. Strip it so validation does not fail
|
|
7
|
+
* with a confusing 401, and reject obviously empty input early.
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeDeepSeekApiKey(raw: string): string;
|
|
10
|
+
export declare const loginDeepSeek: (options: OAuthController) => Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const loginFirepass: (options: import("./types").OAuthController) => Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const loginFireworks: (options: import("./types").OAuthController) => Promise<string>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { OAuthCredentials } from "./types";
|
|
2
|
+
export declare const COPILOT_USER_AGENT: "opencode/1.3.15";
|
|
3
|
+
export declare const OPENCODE_HEADERS: {
|
|
4
|
+
readonly "User-Agent": "opencode/1.3.15";
|
|
5
|
+
};
|
|
6
|
+
export type ParsedGitHubCopilotApiKey = {
|
|
7
|
+
accessToken: string;
|
|
8
|
+
enterpriseUrl?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function normalizeGitHubCopilotEnterpriseDomain(input: string | undefined): string | undefined;
|
|
11
|
+
export declare function parseGitHubCopilotApiKey(apiKeyRaw: string): ParsedGitHubCopilotApiKey;
|
|
12
|
+
export declare function normalizeDomain(input: string): string | null;
|
|
13
|
+
export declare function getGitHubCopilotBaseUrl(enterpriseDomain?: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Refresh GitHub Copilot token.
|
|
16
|
+
* With the opencode OAuth flow, the GitHub token is used directly — no JWT exchange needed.
|
|
17
|
+
*/
|
|
18
|
+
export declare function refreshGitHubCopilotToken(refreshToken: string, enterpriseDomain?: string): OAuthCredentials;
|
|
19
|
+
/**
|
|
20
|
+
* Login with GitHub Copilot OAuth (device code flow)
|
|
21
|
+
*
|
|
22
|
+
* @param options.onAuth - Callback with URL and optional instructions (user code)
|
|
23
|
+
* @param options.onPrompt - Callback to prompt user for input
|
|
24
|
+
* @param options.onProgress - Optional progress callback
|
|
25
|
+
* @param options.signal - Optional AbortSignal for cancellation
|
|
26
|
+
*/
|
|
27
|
+
export declare function loginGitHubCopilot(options: {
|
|
28
|
+
onAuth: (url: string, instructions?: string) => void;
|
|
29
|
+
onPrompt: (prompt: {
|
|
30
|
+
message: string;
|
|
31
|
+
placeholder?: string;
|
|
32
|
+
allowEmpty?: boolean;
|
|
33
|
+
}) => Promise<string>;
|
|
34
|
+
onProgress?: (message: string) => void;
|
|
35
|
+
signal?: AbortSignal;
|
|
36
|
+
pollIntervalFloorMs?: number;
|
|
37
|
+
pollIntervalScaleMs?: number;
|
|
38
|
+
}): Promise<OAuthCredentials>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "./types";
|
|
2
|
+
export declare function loginGitLabDuo(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;
|
|
3
|
+
export declare function refreshGitLabDuoToken(credentials: OAuthCredentials): Promise<OAuthCredentials>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { OAuthController, OAuthCredentials } from "./types";
|
|
2
|
+
export declare const ANTIGRAVITY_LOAD_CODE_ASSIST_METADATA: Readonly<{
|
|
3
|
+
ideType: "ANTIGRAVITY";
|
|
4
|
+
platform: "PLATFORM_UNSPECIFIED";
|
|
5
|
+
pluginType: "GEMINI";
|
|
6
|
+
}>;
|
|
7
|
+
export declare function loginAntigravity(ctrl: OAuthController): Promise<OAuthCredentials>;
|
|
8
|
+
/**
|
|
9
|
+
* Refresh Antigravity token
|
|
10
|
+
*/
|
|
11
|
+
export declare function refreshAntigravityToken(refreshToken: string, projectId: string): Promise<OAuthCredentials>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini CLI OAuth flow (Google Cloud Code Assist)
|
|
3
|
+
* Standard Gemini models only (gemini-2.0-flash, gemini-2.5-*)
|
|
4
|
+
*/
|
|
5
|
+
import type { OAuthController, OAuthCredentials } from "./types";
|
|
6
|
+
export declare function loginGeminiCli(ctrl: OAuthController): Promise<OAuthCredentials>;
|
|
7
|
+
/**
|
|
8
|
+
* Refresh Google Cloud Code Assist token
|
|
9
|
+
*/
|
|
10
|
+
export declare function refreshGoogleCloudToken(refreshToken: string, projectId: string): Promise<OAuthCredentials>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared OAuth flow for Google-style providers (Gemini CLI, Antigravity).
|
|
3
|
+
*
|
|
4
|
+
* Both providers use the same authorization-code flow shape; only the client
|
|
5
|
+
* credentials, scopes, endpoint constants, and project-discovery logic differ.
|
|
6
|
+
*/
|
|
7
|
+
import { OAuthCallbackFlow } from "./callback-server";
|
|
8
|
+
import type { OAuthController, OAuthCredentials } from "./types";
|
|
9
|
+
export interface GoogleOAuthFlowConfig {
|
|
10
|
+
clientId: string;
|
|
11
|
+
clientSecret: string;
|
|
12
|
+
authUrl: string;
|
|
13
|
+
tokenUrl: string;
|
|
14
|
+
scopes: string[];
|
|
15
|
+
callbackPort: number;
|
|
16
|
+
callbackPath: string;
|
|
17
|
+
discoverProject: (accessToken: string, onProgress?: (message: string) => void) => Promise<string>;
|
|
18
|
+
}
|
|
19
|
+
export declare class GoogleOAuthFlow extends OAuthCallbackFlow {
|
|
20
|
+
private readonly config;
|
|
21
|
+
constructor(ctrl: OAuthController, config: GoogleOAuthFlowConfig);
|
|
22
|
+
generateAuthUrl(state: string, redirectUri: string): Promise<{
|
|
23
|
+
url: string;
|
|
24
|
+
instructions?: string;
|
|
25
|
+
}>;
|
|
26
|
+
exchangeToken(code: string, _state: string, redirectUri: string): Promise<OAuthCredentials>;
|
|
27
|
+
}
|
|
28
|
+
export declare function runGoogleOAuthLogin(ctrl: OAuthController, config: GoogleOAuthFlowConfig): Promise<OAuthCredentials>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hugging Face Inference login flow.
|
|
3
|
+
*
|
|
4
|
+
* Hugging Face Inference Providers expose an OpenAI-compatible endpoint via
|
|
5
|
+
* https://router.huggingface.co/v1.
|
|
6
|
+
*
|
|
7
|
+
* This is an API key flow:
|
|
8
|
+
* 1. Open browser to Hugging Face token settings
|
|
9
|
+
* 2. User creates/copies a token with Inference Providers permission
|
|
10
|
+
* 3. User pastes the token into the CLI
|
|
11
|
+
*/
|
|
12
|
+
import type { OAuthController } from "./types";
|
|
13
|
+
/**
|
|
14
|
+
* Login to Hugging Face Inference Providers.
|
|
15
|
+
*
|
|
16
|
+
* Opens browser to token settings, prompts user to paste their API key.
|
|
17
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
18
|
+
*/
|
|
19
|
+
export declare function loginHuggingface(options: OAuthController): Promise<string>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { OAuthCredentials, OAuthProvider, OAuthProviderId, OAuthProviderInfo, OAuthProviderInterface } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Register a custom OAuth provider.
|
|
4
|
+
*/
|
|
5
|
+
export declare function registerOAuthProvider(provider: OAuthProviderInterface): void;
|
|
6
|
+
/**
|
|
7
|
+
* Get a custom OAuth provider by ID.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getOAuthProvider(id: OAuthProviderId): OAuthProviderInterface | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Remove all custom OAuth providers registered by a source.
|
|
12
|
+
*/
|
|
13
|
+
export declare function unregisterOAuthProviders(sourceId: string): void;
|
|
14
|
+
/**
|
|
15
|
+
* Refresh token for any OAuth provider.
|
|
16
|
+
* Saves the new credentials and returns the new access token.
|
|
17
|
+
*/
|
|
18
|
+
export declare function refreshOAuthToken(provider: OAuthProvider, credentials: OAuthCredentials): Promise<OAuthCredentials>;
|
|
19
|
+
/**
|
|
20
|
+
* Build API-key bytes for a provider from an already-fresh OAuth credential.
|
|
21
|
+
*
|
|
22
|
+
* Refresh is owned by AuthStorage. This helper deliberately refuses expired
|
|
23
|
+
* credentials so it cannot POST broker redaction sentinels to upstream token
|
|
24
|
+
* endpoints as a side channel.
|
|
25
|
+
*
|
|
26
|
+
* For providers that need credential metadata at request time, returns
|
|
27
|
+
* JSON-encoded credentials plus expiry metadata for diagnostics/edge guards.
|
|
28
|
+
* @returns API key string, or null if no credentials
|
|
29
|
+
* @throws Error if the credential is expired and must be refreshed upstream
|
|
30
|
+
*/
|
|
31
|
+
export declare function getOAuthApiKey(provider: OAuthProvider, credentials: Record<string, OAuthCredentials>): Promise<{
|
|
32
|
+
newCredentials: OAuthCredentials;
|
|
33
|
+
apiKey: string;
|
|
34
|
+
} | null>;
|
|
35
|
+
/**
|
|
36
|
+
* Get list of OAuth providers.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getOAuthProviders(): OAuthProviderInfo[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kagi login flow.
|
|
3
|
+
*
|
|
4
|
+
* Kagi web search uses an API key from the account settings page.
|
|
5
|
+
* This is an API key flow:
|
|
6
|
+
* 1. Open browser to Kagi API settings
|
|
7
|
+
* 2. User copies API key
|
|
8
|
+
* 3. User pastes key into CLI
|
|
9
|
+
*/
|
|
10
|
+
import type { OAuthController } from "./types";
|
|
11
|
+
/**
|
|
12
|
+
* Login to Kagi.
|
|
13
|
+
*
|
|
14
|
+
* Opens browser to API settings and prompts user to paste their API key.
|
|
15
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
16
|
+
*/
|
|
17
|
+
export declare function loginKagi(options: OAuthController): Promise<string>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi Code OAuth flow (device authorization grant)
|
|
3
|
+
*/
|
|
4
|
+
import type { OAuthController, OAuthCredentials } from "./types";
|
|
5
|
+
export declare let getKimiCommonHeaders: () => Readonly<{
|
|
6
|
+
"User-Agent": `KimiCLI/${string}`;
|
|
7
|
+
"X-Msh-Platform": "kimi_cli";
|
|
8
|
+
"X-Msh-Version": string;
|
|
9
|
+
"X-Msh-Device-Name": string;
|
|
10
|
+
"X-Msh-Device-Model": string;
|
|
11
|
+
"X-Msh-Os-Version": string;
|
|
12
|
+
"X-Msh-Device-Id": string;
|
|
13
|
+
}>;
|
|
14
|
+
/**
|
|
15
|
+
* Login with Kimi Code OAuth (device code flow).
|
|
16
|
+
*/
|
|
17
|
+
export declare function loginKimi(options: OAuthController): Promise<OAuthCredentials>;
|
|
18
|
+
/**
|
|
19
|
+
* Refresh Kimi OAuth token.
|
|
20
|
+
*/
|
|
21
|
+
export declare function refreshKimiToken(refreshToken: string): Promise<OAuthCredentials>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LiteLLM login flow.
|
|
3
|
+
*
|
|
4
|
+
* LiteLLM is an OpenAI-compatible proxy that routes requests to many upstream providers.
|
|
5
|
+
*
|
|
6
|
+
* This is not OAuth - it's a simple API key flow:
|
|
7
|
+
* 1. Open browser to LiteLLM docs/dashboard
|
|
8
|
+
* 2. User copies their LiteLLM API key
|
|
9
|
+
* 3. User pastes the API key into the CLI
|
|
10
|
+
*/
|
|
11
|
+
import type { OAuthController } from "./types";
|
|
12
|
+
/**
|
|
13
|
+
* Login to LiteLLM.
|
|
14
|
+
*
|
|
15
|
+
* Opens browser to LiteLLM setup docs, prompts user to paste their API key.
|
|
16
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
17
|
+
*/
|
|
18
|
+
export declare function loginLiteLLM(options: OAuthController): Promise<string>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LM Studio login flow.
|
|
3
|
+
*
|
|
4
|
+
* LM Studio provides an OpenAI-compatible API at a local base URL.
|
|
5
|
+
* It usually runs unauthenticated but can be configured to require a bearer token.
|
|
6
|
+
*
|
|
7
|
+
* This flow stores an API-key-style credential used by `/login` and auth storage.
|
|
8
|
+
*/
|
|
9
|
+
import type { OAuthController } from "./types";
|
|
10
|
+
export declare const DEFAULT_LOCAL_TOKEN = "lm-studio-local";
|
|
11
|
+
/**
|
|
12
|
+
* Login to LM Studio.
|
|
13
|
+
*
|
|
14
|
+
* Opens LM Studio API docs, prompts for an optional token,
|
|
15
|
+
* and returns a stored key value.
|
|
16
|
+
*/
|
|
17
|
+
export declare function loginLmStudio(options: OAuthController): Promise<string>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MiniMax Coding Plan login flow.
|
|
3
|
+
*
|
|
4
|
+
* MiniMax Coding Plan is a subscription service that provides access to
|
|
5
|
+
* MiniMax models (M2, M2.1) through an OpenAI-compatible API.
|
|
6
|
+
*
|
|
7
|
+
* This is not OAuth - it's a simple API key flow:
|
|
8
|
+
* 1. Open browser to https://platform.minimax.io/subscribe/coding-plan
|
|
9
|
+
* 2. User subscribes and copies their API key
|
|
10
|
+
* 3. User pastes the API key back into the CLI
|
|
11
|
+
*
|
|
12
|
+
* International: https://api.minimax.io/v1
|
|
13
|
+
* China: https://api.minimaxi.com/v1
|
|
14
|
+
*/
|
|
15
|
+
import type { OAuthController } from "./types";
|
|
16
|
+
/**
|
|
17
|
+
* Login to MiniMax Coding Plan (international).
|
|
18
|
+
*
|
|
19
|
+
* Opens browser to subscription page, prompts user to paste their API key.
|
|
20
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
21
|
+
*/
|
|
22
|
+
export declare function loginMiniMaxCode(options: OAuthController): Promise<string>;
|
|
23
|
+
/**
|
|
24
|
+
* Login to MiniMax Coding Plan (China).
|
|
25
|
+
*
|
|
26
|
+
* Same flow as international but uses China endpoint.
|
|
27
|
+
*/
|
|
28
|
+
export declare function loginMiniMaxCodeCn(options: OAuthController): Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const loginMoonshot: (options: import("./types").OAuthController) => Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const loginNanoGPT: (options: import("./types").OAuthController) => Promise<string>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NVIDIA login flow.
|
|
3
|
+
*
|
|
4
|
+
* NVIDIA provides OpenAI-compatible models via https://integrate.api.nvidia.com/v1.
|
|
5
|
+
*
|
|
6
|
+
* This is not OAuth - it's a simple API key flow:
|
|
7
|
+
* 1. Open browser to NVIDIA NGC catalog
|
|
8
|
+
* 2. User copies their API key
|
|
9
|
+
* 3. User pastes the API key into the CLI
|
|
10
|
+
*/
|
|
11
|
+
import type { OAuthController } from "./types";
|
|
12
|
+
/**
|
|
13
|
+
* Login to NVIDIA.
|
|
14
|
+
*
|
|
15
|
+
* Opens browser to NVIDIA dashboard, prompts user to paste their API key.
|
|
16
|
+
* Returns the API key directly (not OAuthCredentials - this isn't OAuth).
|
|
17
|
+
*/
|
|
18
|
+
export declare function loginNvidia(options: OAuthController): Promise<string>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama login flow.
|
|
3
|
+
*
|
|
4
|
+
* Ollama is typically used locally without authentication, but some hosted
|
|
5
|
+
* deployments require a bearer token/API key.
|
|
6
|
+
*
|
|
7
|
+
* This flow is API-key based (not OAuth):
|
|
8
|
+
* 1. Optionally open Ollama docs
|
|
9
|
+
* 2. Prompt user for API key/token (optional)
|
|
10
|
+
* 3. Persist key only when provided
|
|
11
|
+
*/
|
|
12
|
+
import type { OAuthController } from "./types";
|
|
13
|
+
/**
|
|
14
|
+
* Login to Ollama.
|
|
15
|
+
*
|
|
16
|
+
* Returns a trimmed API key/token string. Empty string means local no-auth mode.
|
|
17
|
+
*/
|
|
18
|
+
export declare function loginOllama(options: OAuthController): Promise<string>;
|