@prestyj/cli 4.6.4 → 4.10.2
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/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +11 -10
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/mcp.js +1 -1
- package/dist/cli/shared.d.ts +12 -0
- package/dist/cli/shared.d.ts.map +1 -1
- package/dist/cli/shared.js +31 -6
- package/dist/cli/shared.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +63 -62
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +7 -14
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -17
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-compaction.test.js +1 -1
- package/dist/core/agent-session-compaction.test.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +6 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -58
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +3 -254
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/auto-update.d.ts +4 -26
- package/dist/core/auto-update.d.ts.map +1 -1
- package/dist/core/auto-update.js +12 -237
- package/dist/core/auto-update.js.map +1 -1
- package/dist/core/claude-code-version.d.ts +1 -9
- package/dist/core/claude-code-version.d.ts.map +1 -1
- package/dist/core/claude-code-version.js +2 -105
- package/dist/core/claude-code-version.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +2 -2
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/file-lock.d.ts +1 -5
- package/dist/core/file-lock.d.ts.map +1 -1
- package/dist/core/file-lock.js +2 -75
- package/dist/core/file-lock.js.map +1 -1
- package/dist/core/logger.d.ts +4 -17
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +21 -110
- package/dist/core/logger.js.map +1 -1
- package/dist/core/lsp/client.d.ts +63 -0
- package/dist/core/lsp/client.d.ts.map +1 -0
- package/dist/core/lsp/client.js +215 -0
- package/dist/core/lsp/client.js.map +1 -0
- package/dist/core/lsp/format.d.ts +12 -0
- package/dist/core/lsp/format.d.ts.map +1 -0
- package/dist/core/lsp/format.js +30 -0
- package/dist/core/lsp/format.js.map +1 -0
- package/dist/core/lsp/format.test.d.ts +2 -0
- package/dist/core/lsp/format.test.d.ts.map +1 -0
- package/dist/core/lsp/format.test.js +56 -0
- package/dist/core/lsp/format.test.js.map +1 -0
- package/dist/core/lsp/integration.test.d.ts +2 -0
- package/dist/core/lsp/integration.test.d.ts.map +1 -0
- package/dist/core/lsp/integration.test.js +60 -0
- package/dist/core/lsp/integration.test.js.map +1 -0
- package/dist/core/lsp/jsonrpc.d.ts +32 -0
- package/dist/core/lsp/jsonrpc.d.ts.map +1 -0
- package/dist/core/lsp/jsonrpc.js +141 -0
- package/dist/core/lsp/jsonrpc.js.map +1 -0
- package/dist/core/lsp/jsonrpc.test.d.ts +2 -0
- package/dist/core/lsp/jsonrpc.test.d.ts.map +1 -0
- package/dist/core/lsp/jsonrpc.test.js +127 -0
- package/dist/core/lsp/jsonrpc.test.js.map +1 -0
- package/dist/core/lsp/manager.d.ts +40 -0
- package/dist/core/lsp/manager.d.ts.map +1 -0
- package/dist/core/lsp/manager.js +135 -0
- package/dist/core/lsp/manager.js.map +1 -0
- package/dist/core/lsp/manager.test.d.ts +2 -0
- package/dist/core/lsp/manager.test.d.ts.map +1 -0
- package/dist/core/lsp/manager.test.js +119 -0
- package/dist/core/lsp/manager.test.js.map +1 -0
- package/dist/core/lsp/servers.d.ts +45 -0
- package/dist/core/lsp/servers.d.ts.map +1 -0
- package/dist/core/lsp/servers.js +247 -0
- package/dist/core/lsp/servers.js.map +1 -0
- package/dist/core/mcp/defaults.d.ts +1 -1
- package/dist/core/mcp/defaults.js +1 -1
- package/dist/core/mcp/store.d.ts +1 -1
- package/dist/core/mcp/store.test.js +1 -1
- package/dist/core/mcp/store.test.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -75
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +4 -344
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/oauth/anthropic.d.ts +1 -3
- package/dist/core/oauth/anthropic.d.ts.map +1 -1
- package/dist/core/oauth/anthropic.js +2 -96
- package/dist/core/oauth/anthropic.js.map +1 -1
- package/dist/core/oauth/gemini.d.ts +1 -3
- package/dist/core/oauth/gemini.d.ts.map +1 -1
- package/dist/core/oauth/gemini.js +2 -385
- package/dist/core/oauth/gemini.js.map +1 -1
- package/dist/core/oauth/kimi.d.ts +1 -45
- package/dist/core/oauth/kimi.d.ts.map +1 -1
- package/dist/core/oauth/kimi.js +2 -277
- package/dist/core/oauth/kimi.js.map +1 -1
- package/dist/core/oauth/openai.d.ts +1 -3
- package/dist/core/oauth/openai.d.ts.map +1 -1
- package/dist/core/oauth/openai.js +2 -187
- package/dist/core/oauth/openai.js.map +1 -1
- package/dist/core/oauth/pkce.d.ts +1 -4
- package/dist/core/oauth/pkce.d.ts.map +1 -1
- package/dist/core/oauth/pkce.js +2 -16
- package/dist/core/oauth/pkce.js.map +1 -1
- package/dist/core/oauth/types.d.ts +1 -13
- package/dist/core/oauth/types.d.ts.map +1 -1
- package/dist/core/process-manager.d.ts +10 -0
- package/dist/core/process-manager.d.ts.map +1 -1
- package/dist/core/process-manager.js +45 -1
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +20 -7
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/session-manager.d.ts +26 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +99 -2
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-manager.test.d.ts +2 -0
- package/dist/core/session-manager.test.d.ts.map +1 -0
- package/dist/core/session-manager.test.js +113 -0
- package/dist/core/session-manager.test.js.map +1 -0
- package/dist/core/settings-manager.d.ts +2 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +6 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/telegram.d.ts +1 -112
- package/dist/core/telegram.d.ts.map +1 -1
- package/dist/core/telegram.js +2 -251
- package/dist/core/telegram.js.map +1 -1
- package/dist/core/thinking-level.d.ts +1 -4
- package/dist/core/thinking-level.d.ts.map +1 -1
- package/dist/core/thinking-level.js +3 -58
- package/dist/core/thinking-level.js.map +1 -1
- package/dist/core/voice-transcriber.d.ts +1 -32
- package/dist/core/voice-transcriber.d.ts.map +1 -1
- package/dist/core/voice-transcriber.js +3 -112
- package/dist/core/voice-transcriber.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +5 -2
- package/dist/interactive.js.map +1 -1
- package/dist/modes/agent-home-mode.d.ts.map +1 -1
- package/dist/modes/agent-home-mode.js +10 -38
- package/dist/modes/agent-home-mode.js.map +1 -1
- package/dist/modes/serve-mode.d.ts.map +1 -1
- package/dist/modes/serve-mode.js +11 -39
- package/dist/modes/serve-mode.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +13 -6
- package/dist/session.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +6 -3
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts +3 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +15 -3
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +70 -0
- package/dist/tools/edit.test.js.map +1 -1
- package/dist/tools/goals.d.ts +1 -1
- package/dist/tools/index.d.ts +15 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +16 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/task-send.d.ts +12 -0
- package/dist/tools/task-send.d.ts.map +1 -0
- package/dist/tools/task-send.js +34 -0
- package/dist/tools/task-send.js.map +1 -0
- package/dist/tools/task-send.test.d.ts +2 -0
- package/dist/tools/task-send.test.d.ts.map +1 -0
- package/dist/tools/task-send.test.js +95 -0
- package/dist/tools/task-send.test.js.map +1 -0
- package/dist/tools/write.d.ts +3 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +13 -2
- package/dist/tools/write.js.map +1 -1
- package/dist/tools/write.test.js +33 -0
- package/dist/tools/write.test.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/App.d.ts +16 -0
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +126 -12
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/anchor-pad-reclaim.test.d.ts +2 -0
- package/dist/ui/anchor-pad-reclaim.test.d.ts.map +1 -0
- package/dist/ui/anchor-pad-reclaim.test.js +146 -0
- package/dist/ui/anchor-pad-reclaim.test.js.map +1 -0
- package/dist/ui/app-items.d.ts +14 -0
- package/dist/ui/app-items.d.ts.map +1 -1
- package/dist/ui/app-items.js +13 -0
- package/dist/ui/app-items.js.map +1 -1
- package/dist/ui/app-items.test.js +17 -1
- package/dist/ui/app-items.test.js.map +1 -1
- package/dist/ui/atomic-flush-regression.test.d.ts +2 -0
- package/dist/ui/atomic-flush-regression.test.d.ts.map +1 -0
- package/dist/ui/atomic-flush-regression.test.js +218 -0
- package/dist/ui/atomic-flush-regression.test.js.map +1 -0
- package/dist/ui/components/AssistantMessage.test.js +32 -1
- package/dist/ui/components/AssistantMessage.test.js.map +1 -1
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +1 -0
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/InputArea.test.js +11 -5
- package/dist/ui/components/InputArea.test.js.map +1 -1
- package/dist/ui/components/Markdown.d.ts.map +1 -1
- package/dist/ui/components/Markdown.js +9 -1
- package/dist/ui/components/Markdown.js.map +1 -1
- package/dist/ui/footer-jump-regression.test.js +56 -9
- package/dist/ui/footer-jump-regression.test.js.map +1 -1
- package/dist/ui/frame-clip-regression.test.d.ts +2 -0
- package/dist/ui/frame-clip-regression.test.d.ts.map +1 -0
- package/dist/ui/frame-clip-regression.test.js +215 -0
- package/dist/ui/frame-clip-regression.test.js.map +1 -0
- package/dist/ui/hooks/useTranscriptHistory.d.ts +9 -1
- package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.js +51 -19
- package/dist/ui/hooks/useTranscriptHistory.js.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts +2 -0
- package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js +81 -0
- package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js.map +1 -0
- package/dist/ui/live-area-clamp.test.js +37 -0
- package/dist/ui/live-area-clamp.test.js.map +1 -1
- package/dist/ui/live-area-height.d.ts.map +1 -1
- package/dist/ui/live-area-height.js +13 -6
- package/dist/ui/live-area-height.js.map +1 -1
- package/dist/ui/live-area-height.test.js +9 -0
- package/dist/ui/live-area-height.test.js.map +1 -1
- package/dist/ui/live-item-flush.d.ts +28 -0
- package/dist/ui/live-item-flush.d.ts.map +1 -1
- package/dist/ui/live-item-flush.js +44 -0
- package/dist/ui/live-item-flush.js.map +1 -1
- package/dist/ui/live-item-flush.test.js +83 -1
- package/dist/ui/live-item-flush.test.js.map +1 -1
- package/dist/ui/login.d.ts.map +1 -1
- package/dist/ui/login.js +12 -30
- package/dist/ui/login.js.map +1 -1
- package/dist/ui/mcp.d.ts +1 -2
- package/dist/ui/mcp.d.ts.map +1 -1
- package/dist/ui/mcp.js +8 -43
- package/dist/ui/mcp.js.map +1 -1
- package/dist/ui/pixel.d.ts.map +1 -1
- package/dist/ui/pixel.js +10 -38
- package/dist/ui/pixel.js.map +1 -1
- package/dist/ui/queued-message.test.js +7 -1
- package/dist/ui/queued-message.test.js.map +1 -1
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +154 -5
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/sessions.d.ts.map +1 -1
- package/dist/ui/sessions.js +10 -42
- package/dist/ui/sessions.js.map +1 -1
- package/dist/ui/startup-banner-order.test.d.ts +2 -0
- package/dist/ui/startup-banner-order.test.d.ts.map +1 -0
- package/dist/ui/startup-banner-order.test.js +105 -0
- package/dist/ui/startup-banner-order.test.js.map +1 -0
- package/dist/ui/streaming-flush-bounce.test.js +41 -20
- package/dist/ui/streaming-flush-bounce.test.js.map +1 -1
- package/dist/ui/submit-boundary-gap.test.d.ts +2 -0
- package/dist/ui/submit-boundary-gap.test.d.ts.map +1 -0
- package/dist/ui/submit-boundary-gap.test.js +180 -0
- package/dist/ui/submit-boundary-gap.test.js.map +1 -0
- package/dist/ui/terminal-history.d.ts.map +1 -1
- package/dist/ui/terminal-history.js +28 -9
- package/dist/ui/terminal-history.js.map +1 -1
- package/dist/ui/terminal-history.test.js +10 -3
- package/dist/ui/terminal-history.test.js.map +1 -1
- package/dist/ui/testing/screen-recorder.d.ts.map +1 -1
- package/dist/ui/testing/screen-recorder.js +11 -1
- package/dist/ui/testing/screen-recorder.js.map +1 -1
- package/dist/ui/tui-history-parity.test.js +4 -1
- package/dist/ui/tui-history-parity.test.js.map +1 -1
- package/dist/ui/tui-simulation.test.js +7 -1
- package/dist/ui/tui-simulation.test.js.map +1 -1
- package/dist/ui/utils/assistant-stream-split.d.ts +7 -0
- package/dist/ui/utils/assistant-stream-split.d.ts.map +1 -1
- package/dist/ui/utils/assistant-stream-split.js +22 -1
- package/dist/ui/utils/assistant-stream-split.js.map +1 -1
- package/dist/ui/utils/assistant-stream-split.test.js +14 -0
- package/dist/ui/utils/assistant-stream-split.test.js.map +1 -1
- package/dist/ui/utils/markdown-renderer.d.ts.map +1 -1
- package/dist/ui/utils/markdown-renderer.js +46 -3
- package/dist/ui/utils/markdown-renderer.js.map +1 -1
- package/dist/ui/utils/markdown-renderer.test.d.ts +2 -0
- package/dist/ui/utils/markdown-renderer.test.d.ts.map +1 -0
- package/dist/ui/utils/markdown-renderer.test.js +63 -0
- package/dist/ui/utils/markdown-renderer.test.js.map +1 -0
- package/dist/ui/utils/terminal-graphics.d.ts +28 -1
- package/dist/ui/utils/terminal-graphics.d.ts.map +1 -1
- package/dist/ui/utils/terminal-graphics.js +44 -3
- package/dist/ui/utils/terminal-graphics.js.map +1 -1
- package/dist/ui/utils/terminal-graphics.test.js +40 -1
- package/dist/ui/utils/terminal-graphics.test.js.map +1 -1
- package/dist/utils/session-title.js +1 -1
- package/dist/utils/session-title.js.map +1 -1
- package/package.json +7 -6
- package/dist/core/model-registry.test.d.ts +0 -2
- package/dist/core/model-registry.test.d.ts.map +0 -1
- package/dist/core/model-registry.test.js +0 -95
- package/dist/core/model-registry.test.js.map +0 -1
- package/dist/core/oauth/gemini.test.d.ts +0 -2
- package/dist/core/oauth/gemini.test.d.ts.map +0 -1
- package/dist/core/oauth/gemini.test.js +0 -154
- package/dist/core/oauth/gemini.test.js.map +0 -1
- package/dist/core/thinking-level.test.d.ts +0 -2
- package/dist/core/thinking-level.test.d.ts.map +0 -1
- package/dist/core/thinking-level.test.js +0 -51
- package/dist/core/thinking-level.test.js.map +0 -1
- package/dist/core/voice-transcriber.test.d.ts +0 -2
- package/dist/core/voice-transcriber.test.d.ts.map +0 -1
- package/dist/core/voice-transcriber.test.js +0 -88
- package/dist/core/voice-transcriber.test.js.map +0 -1
|
@@ -1,386 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { generatePKCE } from "./pkce.js";
|
|
4
|
-
const CLIENT_ID_ENV = "EZCODER_GEMINI_OAUTH_CLIENT_ID";
|
|
5
|
-
const CLIENT_SECRET_ENV = "EZCODER_GEMINI_OAUTH_CLIENT_SECRET";
|
|
6
|
-
const LEGACY_CLIENT_ID_ENV = "GGCODER_GEMINI_OAUTH_CLIENT_ID";
|
|
7
|
-
const LEGACY_CLIENT_SECRET_ENV = "GGCODER_GEMINI_OAUTH_CLIENT_SECRET";
|
|
8
|
-
// Public "installed application" OAuth client shipped with the official Gemini CLI.
|
|
9
|
-
// Unlike the OpenAI/Anthropic flows (pure PKCE, no secret), Google's token endpoint
|
|
10
|
-
// requires a client_secret for the installed-app authorization_code / refresh_token
|
|
11
|
-
// grants — so it must be embedded to support local login like the other providers.
|
|
12
|
-
// This is the published gemini-cli installed-app secret (non-confidential by design);
|
|
13
|
-
// the env vars above override it for users who bring their own Google Cloud client.
|
|
14
|
-
const DEFAULT_CLIENT_ID = "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com";
|
|
15
|
-
const DEFAULT_CLIENT_SECRET = "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";
|
|
16
|
-
const AUTHORIZE_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
17
|
-
const TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
18
|
-
const CODE_ASSIST_BASE_URL = "https://cloudcode-pa.googleapis.com";
|
|
19
|
-
const CODE_ASSIST_API_VERSION = "v1internal";
|
|
20
|
-
const CODE_ASSIST_POST_RETRIES = 3;
|
|
21
|
-
const CODE_ASSIST_POST_RETRY_DELAY_MS = 100;
|
|
22
|
-
const SCOPE = [
|
|
23
|
-
"https://www.googleapis.com/auth/cloud-platform",
|
|
24
|
-
"https://www.googleapis.com/auth/userinfo.email",
|
|
25
|
-
"https://www.googleapis.com/auth/userinfo.profile",
|
|
26
|
-
].join(" ");
|
|
27
|
-
const USER_TIER_FREE = "free-tier";
|
|
28
|
-
const USER_TIER_LEGACY = "legacy-tier";
|
|
29
|
-
const USER_TIER_STANDARD = "standard-tier";
|
|
30
|
-
const VALIDATION_REQUIRED_REASON = "VALIDATION_REQUIRED";
|
|
31
|
-
const VPC_SC_REASON = "SECURITY_POLICY_VIOLATED";
|
|
32
|
-
class CodeAssistHttpError extends Error {
|
|
33
|
-
status;
|
|
34
|
-
body;
|
|
35
|
-
constructor(label, status, body) {
|
|
36
|
-
super(`Gemini Code Assist ${label} failed (${status}): ${body}`);
|
|
37
|
-
this.name = "CodeAssistHttpError";
|
|
38
|
-
this.status = status;
|
|
39
|
-
this.body = body;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export async function loginGemini(callbacks) {
|
|
43
|
-
const { clientId, clientSecret } = getGeminiOAuthClientCredentials();
|
|
44
|
-
const { verifier, challenge } = await generatePKCE();
|
|
45
|
-
const state = crypto.randomBytes(32).toString("hex");
|
|
46
|
-
const redirectUri = await getLoopbackRedirectUri();
|
|
47
|
-
const url = new URL(AUTHORIZE_URL);
|
|
48
|
-
url.searchParams.set("response_type", "code");
|
|
49
|
-
url.searchParams.set("client_id", clientId);
|
|
50
|
-
url.searchParams.set("redirect_uri", redirectUri);
|
|
51
|
-
url.searchParams.set("scope", SCOPE);
|
|
52
|
-
url.searchParams.set("access_type", "offline");
|
|
53
|
-
url.searchParams.set("prompt", "consent");
|
|
54
|
-
url.searchParams.set("code_challenge", challenge);
|
|
55
|
-
url.searchParams.set("code_challenge_method", "S256");
|
|
56
|
-
url.searchParams.set("state", state);
|
|
57
|
-
let code;
|
|
58
|
-
try {
|
|
59
|
-
code = await loginWithServer(url.toString(), redirectUri, state, callbacks);
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
callbacks.onOpenUrl(url.toString());
|
|
63
|
-
const raw = await callbacks.onPromptCode("Could not start local server. Paste the callback URL or code from the browser:");
|
|
64
|
-
const parsed = parseAuthorizationInput(raw);
|
|
65
|
-
if (!parsed.code) {
|
|
66
|
-
throw new Error("No authorization code found in input.");
|
|
67
|
-
}
|
|
68
|
-
if (parsed.state && parsed.state !== state) {
|
|
69
|
-
throw new Error("Invalid state. Please try again.");
|
|
70
|
-
}
|
|
71
|
-
code = parsed.code;
|
|
72
|
-
}
|
|
73
|
-
const creds = await exchangeGeminiCode(code, verifier, redirectUri, clientId, clientSecret);
|
|
74
|
-
callbacks.onStatus("Setting up Gemini Code Assist access...");
|
|
75
|
-
const projectId = await setupCodeAssistProject(creds.accessToken, callbacks);
|
|
76
|
-
return {
|
|
77
|
-
...creds,
|
|
78
|
-
projectId,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
export async function refreshGeminiToken(refreshToken) {
|
|
82
|
-
const { clientId, clientSecret } = getGeminiOAuthClientCredentials();
|
|
83
|
-
const data = await postTokenRequest({
|
|
84
|
-
grant_type: "refresh_token",
|
|
85
|
-
refresh_token: refreshToken,
|
|
86
|
-
client_id: clientId,
|
|
87
|
-
client_secret: clientSecret,
|
|
88
|
-
});
|
|
89
|
-
return {
|
|
90
|
-
accessToken: data.access_token,
|
|
91
|
-
refreshToken: data.refresh_token ?? refreshToken,
|
|
92
|
-
expiresAt: Date.now() + data.expires_in * 1000 - 5 * 60 * 1000,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
function getGeminiOAuthClientCredentials() {
|
|
96
|
-
const clientId = process.env[CLIENT_ID_ENV]?.trim() ??
|
|
97
|
-
process.env[LEGACY_CLIENT_ID_ENV]?.trim() ??
|
|
98
|
-
DEFAULT_CLIENT_ID;
|
|
99
|
-
const clientSecret = process.env[CLIENT_SECRET_ENV]?.trim() ??
|
|
100
|
-
process.env[LEGACY_CLIENT_SECRET_ENV]?.trim() ??
|
|
101
|
-
DEFAULT_CLIENT_SECRET;
|
|
102
|
-
return { clientId, clientSecret };
|
|
103
|
-
}
|
|
104
|
-
async function getLoopbackRedirectUri() {
|
|
105
|
-
return new Promise((resolve, reject) => {
|
|
106
|
-
const server = http.createServer();
|
|
107
|
-
server.listen(0, "127.0.0.1", () => {
|
|
108
|
-
const addr = server.address();
|
|
109
|
-
server.close(() => {
|
|
110
|
-
if (addr && typeof addr === "object") {
|
|
111
|
-
resolve(`http://127.0.0.1:${addr.port}/oauth2callback`);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
reject(new Error("Failed to allocate OAuth callback port."));
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
server.on("error", reject);
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
function parseAuthorizationInput(input) {
|
|
122
|
-
const value = input.trim();
|
|
123
|
-
if (!value)
|
|
124
|
-
return {};
|
|
125
|
-
try {
|
|
126
|
-
const url = new URL(value);
|
|
127
|
-
return {
|
|
128
|
-
code: url.searchParams.get("code") ?? undefined,
|
|
129
|
-
state: url.searchParams.get("state") ?? undefined,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
catch {
|
|
133
|
-
// not a URL
|
|
134
|
-
}
|
|
135
|
-
if (value.includes("code=")) {
|
|
136
|
-
const params = new URLSearchParams(value);
|
|
137
|
-
return {
|
|
138
|
-
code: params.get("code") ?? undefined,
|
|
139
|
-
state: params.get("state") ?? undefined,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
return { code: value };
|
|
143
|
-
}
|
|
144
|
-
async function loginWithServer(authUrl, redirectUri, expectedState, callbacks) {
|
|
145
|
-
const redirect = new URL(redirectUri);
|
|
146
|
-
const port = Number(redirect.port);
|
|
147
|
-
return new Promise((resolve, reject) => {
|
|
148
|
-
let receivedCode = null;
|
|
149
|
-
const server = http.createServer((req, res) => {
|
|
150
|
-
const url = new URL(req.url || "", redirect.origin);
|
|
151
|
-
if (url.pathname !== redirect.pathname) {
|
|
152
|
-
res.statusCode = 404;
|
|
153
|
-
res.end("Not found");
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
if (url.searchParams.get("state") !== expectedState) {
|
|
157
|
-
res.statusCode = 400;
|
|
158
|
-
res.end("State mismatch");
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
receivedCode = url.searchParams.get("code");
|
|
162
|
-
res.writeHead(200, { "Content-Type": "text/html", Connection: "close" });
|
|
163
|
-
res.end("<html><body><h1>Login successful!</h1><p>You can close this tab.</p></body></html>");
|
|
164
|
-
server.close();
|
|
165
|
-
});
|
|
166
|
-
server.on("error", (err) => reject(err));
|
|
167
|
-
server.listen(port, "127.0.0.1", () => {
|
|
168
|
-
callbacks.onOpenUrl(authUrl);
|
|
169
|
-
callbacks.onStatus("Waiting for browser callback...");
|
|
170
|
-
});
|
|
171
|
-
const timeout = setTimeout(() => {
|
|
172
|
-
if (!receivedCode)
|
|
173
|
-
server.close();
|
|
174
|
-
}, 120_000);
|
|
175
|
-
timeout.unref();
|
|
176
|
-
server.on("close", () => {
|
|
177
|
-
clearTimeout(timeout);
|
|
178
|
-
if (receivedCode) {
|
|
179
|
-
resolve(receivedCode);
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
reject(new Error("Server closed without receiving code."));
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
async function exchangeGeminiCode(code, verifier, redirectUri, clientId, clientSecret) {
|
|
188
|
-
const data = await postTokenRequest({
|
|
189
|
-
grant_type: "authorization_code",
|
|
190
|
-
client_id: clientId,
|
|
191
|
-
client_secret: clientSecret,
|
|
192
|
-
code,
|
|
193
|
-
redirect_uri: redirectUri,
|
|
194
|
-
code_verifier: verifier,
|
|
195
|
-
});
|
|
196
|
-
if (!data.refresh_token) {
|
|
197
|
-
throw new Error("Gemini OAuth did not return a refresh token. Please try login again.");
|
|
198
|
-
}
|
|
199
|
-
return {
|
|
200
|
-
accessToken: data.access_token,
|
|
201
|
-
refreshToken: data.refresh_token,
|
|
202
|
-
expiresAt: Date.now() + data.expires_in * 1000 - 5 * 60 * 1000,
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
async function postTokenRequest(body) {
|
|
206
|
-
const response = await fetch(TOKEN_URL, {
|
|
207
|
-
method: "POST",
|
|
208
|
-
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
209
|
-
body: new URLSearchParams(body),
|
|
210
|
-
});
|
|
211
|
-
if (!response.ok) {
|
|
212
|
-
const text = await response.text();
|
|
213
|
-
throw new Error(`Gemini token request failed (${response.status}): ${text}`);
|
|
214
|
-
}
|
|
215
|
-
return (await response.json());
|
|
216
|
-
}
|
|
217
|
-
async function setupCodeAssistProject(accessToken, callbacks) {
|
|
218
|
-
const envProject = process.env.GOOGLE_CLOUD_PROJECT ?? process.env.GOOGLE_CLOUD_PROJECT_ID;
|
|
219
|
-
if (envProject && /^\d+$/.test(envProject)) {
|
|
220
|
-
throw new Error("GOOGLE_CLOUD_PROJECT must be a project ID, not a numeric project number.");
|
|
221
|
-
}
|
|
222
|
-
const coreMetadata = {
|
|
223
|
-
ideType: "IDE_UNSPECIFIED",
|
|
224
|
-
platform: "PLATFORM_UNSPECIFIED",
|
|
225
|
-
pluginType: "GEMINI",
|
|
226
|
-
};
|
|
227
|
-
const projectMetadata = {
|
|
228
|
-
...coreMetadata,
|
|
229
|
-
...(envProject ? { duetProject: envProject } : {}),
|
|
230
|
-
};
|
|
231
|
-
let loadRes;
|
|
232
|
-
while (true) {
|
|
233
|
-
loadRes = await loadCodeAssist(accessToken, envProject, projectMetadata);
|
|
234
|
-
const validation = getValidationRequiredTier(loadRes);
|
|
235
|
-
if (!validation)
|
|
236
|
-
break;
|
|
237
|
-
callbacks.onStatus(`Gemini Code Assist requires account validation${validation.reasonMessage ? `: ${validation.reasonMessage}` : ""}`);
|
|
238
|
-
callbacks.onOpenUrl(validation.validationUrl);
|
|
239
|
-
const answer = await callbacks.onPromptCode("Complete validation in the browser, then press Enter to retry (or type cancel):");
|
|
240
|
-
if (answer.trim().toLowerCase() === "cancel") {
|
|
241
|
-
throw new Error("Gemini Code Assist account validation was cancelled.");
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
if (loadRes.currentTier) {
|
|
245
|
-
const project = loadRes.cloudaicompanionProject ?? envProject;
|
|
246
|
-
if (!project)
|
|
247
|
-
throwProjectError(loadRes);
|
|
248
|
-
return project;
|
|
249
|
-
}
|
|
250
|
-
const tier = getOnboardTier(loadRes);
|
|
251
|
-
const onboardReq = tier.id === USER_TIER_FREE
|
|
252
|
-
? {
|
|
253
|
-
tierId: tier.id,
|
|
254
|
-
cloudaicompanionProject: undefined,
|
|
255
|
-
metadata: coreMetadata,
|
|
256
|
-
}
|
|
257
|
-
: {
|
|
258
|
-
tierId: tier.id,
|
|
259
|
-
cloudaicompanionProject: envProject,
|
|
260
|
-
metadata: projectMetadata,
|
|
261
|
-
};
|
|
262
|
-
let operation = await codeAssistPost(accessToken, "onboardUser", onboardReq);
|
|
263
|
-
while (!operation.done && operation.name) {
|
|
264
|
-
await new Promise((resolve) => setTimeout(resolve, 5_000));
|
|
265
|
-
operation = await codeAssistGet(accessToken, operation.name);
|
|
266
|
-
}
|
|
267
|
-
const project = operation.response?.cloudaicompanionProject?.id ?? envProject;
|
|
268
|
-
if (!project)
|
|
269
|
-
throwProjectError(loadRes);
|
|
270
|
-
return project;
|
|
271
|
-
}
|
|
272
|
-
async function loadCodeAssist(accessToken, envProject, metadata) {
|
|
273
|
-
try {
|
|
274
|
-
return await codeAssistPost(accessToken, "loadCodeAssist", {
|
|
275
|
-
...(envProject ? { cloudaicompanionProject: envProject } : {}),
|
|
276
|
-
metadata,
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
catch (err) {
|
|
280
|
-
if (err instanceof CodeAssistHttpError && isVpcScAffectedError(err)) {
|
|
281
|
-
return { currentTier: { id: USER_TIER_STANDARD } };
|
|
282
|
-
}
|
|
283
|
-
if (err instanceof CodeAssistHttpError &&
|
|
284
|
-
err.status === 403 &&
|
|
285
|
-
envProject === "cloudshell-gca") {
|
|
286
|
-
throw new Error("Access to the default Cloud Shell Gemini project was denied.\n" +
|
|
287
|
-
"Please set your own Google Cloud project by running:\n" +
|
|
288
|
-
"gcloud config set project [PROJECT_ID]\n" +
|
|
289
|
-
"or setting export GOOGLE_CLOUD_PROJECT=...", { cause: err });
|
|
290
|
-
}
|
|
291
|
-
throw err;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
function getValidationRequiredTier(response) {
|
|
295
|
-
return response.ineligibleTiers?.find((tier) => tier.reasonCode === VALIDATION_REQUIRED_REASON && typeof tier.validationUrl === "string");
|
|
296
|
-
}
|
|
297
|
-
function getOnboardTier(response) {
|
|
298
|
-
const defaultTier = response.allowedTiers?.find((tier) => tier.isDefault);
|
|
299
|
-
return defaultTier ?? { id: USER_TIER_LEGACY, name: "" };
|
|
300
|
-
}
|
|
301
|
-
function throwProjectError(response) {
|
|
302
|
-
const reasons = response.ineligibleTiers
|
|
303
|
-
?.map((tier) => tier.reasonMessage ?? tier.tierName)
|
|
304
|
-
.filter((reason) => Boolean(reason));
|
|
305
|
-
if (reasons && reasons.length > 0) {
|
|
306
|
-
throw new Error(`Gemini Code Assist setup failed: ${reasons.join(", ")}`);
|
|
307
|
-
}
|
|
308
|
-
throw new Error("Gemini requires a Google Cloud project for this account. Set GOOGLE_CLOUD_PROJECT and try again.");
|
|
309
|
-
}
|
|
310
|
-
async function codeAssistPost(accessToken, method, body) {
|
|
311
|
-
let lastError;
|
|
312
|
-
for (let attempt = 0; attempt <= CODE_ASSIST_POST_RETRIES; attempt++) {
|
|
313
|
-
try {
|
|
314
|
-
return await codeAssistRequest(getCodeAssistMethodUrl(method), accessToken, method, {
|
|
315
|
-
method: "POST",
|
|
316
|
-
body: JSON.stringify(body),
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
catch (err) {
|
|
320
|
-
if (!(err instanceof CodeAssistHttpError) ||
|
|
321
|
-
attempt === CODE_ASSIST_POST_RETRIES ||
|
|
322
|
-
!shouldRetryCodeAssistStatus(err.status)) {
|
|
323
|
-
throw err;
|
|
324
|
-
}
|
|
325
|
-
lastError = err;
|
|
326
|
-
}
|
|
327
|
-
await new Promise((resolve) => setTimeout(resolve, CODE_ASSIST_POST_RETRY_DELAY_MS));
|
|
328
|
-
}
|
|
329
|
-
throw lastError ?? new Error(`Gemini Code Assist ${method} failed.`);
|
|
330
|
-
}
|
|
331
|
-
async function codeAssistGet(accessToken, operationName) {
|
|
332
|
-
return codeAssistRequest(getCodeAssistOperationUrl(operationName), accessToken, "operation", {
|
|
333
|
-
method: "GET",
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
async function codeAssistRequest(url, accessToken, label, init) {
|
|
337
|
-
const response = await fetch(url, {
|
|
338
|
-
...init,
|
|
339
|
-
headers: codeAssistHeaders(accessToken),
|
|
340
|
-
});
|
|
341
|
-
if (!response.ok) {
|
|
342
|
-
const text = await response.text();
|
|
343
|
-
throw new CodeAssistHttpError(label, response.status, text);
|
|
344
|
-
}
|
|
345
|
-
return (await response.json());
|
|
346
|
-
}
|
|
347
|
-
function getCodeAssistBaseUrl() {
|
|
348
|
-
const endpoint = process.env.CODE_ASSIST_ENDPOINT ?? CODE_ASSIST_BASE_URL;
|
|
349
|
-
const version = process.env.CODE_ASSIST_API_VERSION || CODE_ASSIST_API_VERSION;
|
|
350
|
-
return `${endpoint}/${version}`;
|
|
351
|
-
}
|
|
352
|
-
function getCodeAssistMethodUrl(method) {
|
|
353
|
-
return `${getCodeAssistBaseUrl()}:${method}`;
|
|
354
|
-
}
|
|
355
|
-
function getCodeAssistOperationUrl(operationName) {
|
|
356
|
-
return `${getCodeAssistBaseUrl()}/${operationName}`;
|
|
357
|
-
}
|
|
358
|
-
function shouldRetryCodeAssistStatus(status) {
|
|
359
|
-
return status === 429 || status === 499 || (status >= 500 && status <= 599);
|
|
360
|
-
}
|
|
361
|
-
function isVpcScAffectedError(error) {
|
|
362
|
-
try {
|
|
363
|
-
const parsed = JSON.parse(error.body);
|
|
364
|
-
if (!parsed || typeof parsed !== "object" || !("error" in parsed))
|
|
365
|
-
return false;
|
|
366
|
-
const details = parsed.error?.details;
|
|
367
|
-
return Array.isArray(details)
|
|
368
|
-
? details.some((detail) => detail != null &&
|
|
369
|
-
typeof detail === "object" &&
|
|
370
|
-
"reason" in detail &&
|
|
371
|
-
detail.reason === VPC_SC_REASON)
|
|
372
|
-
: false;
|
|
373
|
-
}
|
|
374
|
-
catch {
|
|
375
|
-
return false;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
function codeAssistHeaders(accessToken) {
|
|
379
|
-
return {
|
|
380
|
-
Authorization: `Bearer ${accessToken}`,
|
|
381
|
-
"Content-Type": "application/json",
|
|
382
|
-
"User-Agent": "google-gemini-cli",
|
|
383
|
-
"X-Goog-Api-Client": "gemini-cli/0.0.0",
|
|
384
|
-
};
|
|
385
|
-
}
|
|
1
|
+
// Moved to @prestyj/core.
|
|
2
|
+
export { loginGemini, refreshGeminiToken } from "@prestyj/core";
|
|
386
3
|
//# sourceMappingURL=gemini.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/core/oauth/gemini.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/core/oauth/gemini.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,46 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Kimi Code OAuth — Device Authorization Grant (RFC 8628).
|
|
3
|
-
*
|
|
4
|
-
* Mirrors MoonshotAI/kimi-code's managed-auth flow. Three form-encoded
|
|
5
|
-
* POST endpoints against the OAuth host (default `https://auth.kimi.com`):
|
|
6
|
-
*
|
|
7
|
-
* - `/api/oauth/device_authorization` (client_id) → device + user code
|
|
8
|
-
* - `/api/oauth/token` (grant_type=device_code) → poll until authorized
|
|
9
|
-
* - `/api/oauth/token` (grant_type=refresh_token) → refresh access token
|
|
10
|
-
*
|
|
11
|
-
* Unlike Anthropic/OpenAI/Gemini (browser-redirect PKCE), this is a
|
|
12
|
-
* device-code/poll flow: we show the user a URL + code, they authorize in a
|
|
13
|
-
* browser on any device, and we poll for the token.
|
|
14
|
-
*
|
|
15
|
-
* After login the issued token is used against the managed coding API
|
|
16
|
-
* (`https://api.kimi.com/coding/v1`, distinct from the `api.moonshot.ai`
|
|
17
|
-
* API-key endpoint) via `Authorization: Bearer <access_token>`. We persist
|
|
18
|
-
* that base URL on the credential so the runtime routes there automatically.
|
|
19
|
-
*/
|
|
20
|
-
import type { OAuthCredentials, OAuthLoginCallbacks } from "./types.js";
|
|
21
|
-
/** Managed coding API base URL the issued OAuth token is used against. */
|
|
22
|
-
export declare function kimiCodeBaseUrl(): string;
|
|
23
|
-
/**
|
|
24
|
-
* Headers the Kimi For Coding API requires on every model request. The
|
|
25
|
-
* managed endpoint gates access to recognized coding agents: requests must
|
|
26
|
-
* carry a `kimi_code_cli` platform identity and matching `User-Agent`, or the
|
|
27
|
-
* server rejects with "only available for Coding Agents". Attach these to the
|
|
28
|
-
* inference client's default headers whenever the Kimi OAuth token is used.
|
|
29
|
-
*/
|
|
30
|
-
export declare function kimiCodingHeaders(): Record<string, string>;
|
|
31
|
-
/**
|
|
32
|
-
* True if `baseUrl` targets the Kimi For Coding managed endpoint (the URL
|
|
33
|
-
* persisted on Kimi OAuth credentials). Callers use this to decide whether to
|
|
34
|
-
* attach `kimiCodingHeaders()` — the Moonshot API-key path uses a different
|
|
35
|
-
* host and must NOT receive the coding-agent identity headers.
|
|
36
|
-
*/
|
|
37
|
-
export declare function isKimiCodingEndpoint(baseUrl: string | undefined): boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Drive the Kimi device-code flow end-to-end. Shows the verification URL +
|
|
40
|
-
* user code via callbacks, opens the browser, and polls until the user
|
|
41
|
-
* authorizes (or a 15-minute local timeout elapses).
|
|
42
|
-
*/
|
|
43
|
-
export declare function loginKimi(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;
|
|
44
|
-
/** Exchange a refresh token for a fresh Kimi access token. */
|
|
45
|
-
export declare function refreshKimiToken(refreshToken: string): Promise<OAuthCredentials>;
|
|
1
|
+
export { loginKimi, refreshKimiToken, kimiCodeBaseUrl, kimiCodingHeaders, isKimiCodingEndpoint, } from "@prestyj/core";
|
|
46
2
|
//# sourceMappingURL=kimi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kimi.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/kimi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kimi.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/kimi.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
|