@slkiser/opencode-quota 4.0.1 → 4.2.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/README.md +94 -28
- package/dist/bin/opencode-quota.d.ts.map +1 -1
- package/dist/bin/opencode-quota.js +8 -0
- package/dist/bin/opencode-quota.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/anthropic.d.ts.map +1 -1
- package/dist/lib/anthropic.js +78 -72
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/api-key-resolver.d.ts +73 -22
- package/dist/lib/api-key-resolver.d.ts.map +1 -1
- package/dist/lib/api-key-resolver.js +116 -39
- package/dist/lib/api-key-resolver.js.map +1 -1
- package/dist/lib/atomic-json.d.ts +3 -1
- package/dist/lib/atomic-json.d.ts.map +1 -1
- package/dist/lib/atomic-json.js +23 -9
- package/dist/lib/atomic-json.js.map +1 -1
- package/dist/lib/chutes-config.d.ts.map +1 -1
- package/dist/lib/chutes-config.js +2 -4
- package/dist/lib/chutes-config.js.map +1 -1
- package/dist/lib/chutes.d.ts.map +1 -1
- package/dist/lib/chutes.js +28 -23
- package/dist/lib/chutes.js.map +1 -1
- package/dist/lib/cli-show.d.ts +9 -0
- package/dist/lib/cli-show.d.ts.map +1 -1
- package/dist/lib/cli-show.js +34 -5
- package/dist/lib/cli-show.js.map +1 -1
- package/dist/lib/cli-status.d.ts +8 -0
- package/dist/lib/cli-status.d.ts.map +1 -0
- package/dist/lib/cli-status.js +125 -0
- package/dist/lib/cli-status.js.map +1 -0
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +47 -12
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/copilot.d.ts +11 -5
- package/dist/lib/copilot.d.ts.map +1 -1
- package/dist/lib/copilot.js +378 -79
- package/dist/lib/copilot.js.map +1 -1
- package/dist/lib/deepseek-auth.d.ts.map +1 -1
- package/dist/lib/deepseek-auth.js +3 -7
- package/dist/lib/deepseek-auth.js.map +1 -1
- package/dist/lib/deepseek.d.ts.map +1 -1
- package/dist/lib/deepseek.js +22 -17
- package/dist/lib/deepseek.js.map +1 -1
- package/dist/lib/display-sanitize.d.ts.map +1 -1
- package/dist/lib/display-sanitize.js +8 -0
- package/dist/lib/display-sanitize.js.map +1 -1
- package/dist/lib/entries.d.ts +14 -0
- package/dist/lib/entries.d.ts.map +1 -1
- package/dist/lib/entries.js.map +1 -1
- package/dist/lib/format-utils.d.ts +7 -0
- package/dist/lib/format-utils.d.ts.map +1 -1
- package/dist/lib/format-utils.js +18 -0
- package/dist/lib/format-utils.js.map +1 -1
- package/dist/lib/format.d.ts +1 -0
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +22 -7
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/glm-coding-plan.d.ts +18 -0
- package/dist/lib/glm-coding-plan.d.ts.map +1 -0
- package/dist/lib/glm-coding-plan.js +68 -0
- package/dist/lib/glm-coding-plan.js.map +1 -0
- package/dist/lib/google-agy-companion.d.ts +4 -25
- package/dist/lib/google-agy-companion.d.ts.map +1 -1
- package/dist/lib/google-agy-companion.js +47 -272
- package/dist/lib/google-agy-companion.js.map +1 -1
- package/dist/lib/google-agy.d.ts.map +1 -1
- package/dist/lib/google-agy.js +204 -111
- package/dist/lib/google-agy.js.map +1 -1
- package/dist/lib/google-antigravity-companion.d.ts +4 -25
- package/dist/lib/google-antigravity-companion.d.ts.map +1 -1
- package/dist/lib/google-antigravity-companion.js +44 -283
- package/dist/lib/google-antigravity-companion.js.map +1 -1
- package/dist/lib/google-companion-credentials.d.ts +70 -0
- package/dist/lib/google-companion-credentials.d.ts.map +1 -0
- package/dist/lib/google-companion-credentials.js +265 -0
- package/dist/lib/google-companion-credentials.js.map +1 -0
- package/dist/lib/google-gemini-cli-companion.d.ts +4 -25
- package/dist/lib/google-gemini-cli-companion.d.ts.map +1 -1
- package/dist/lib/google-gemini-cli-companion.js +47 -258
- package/dist/lib/google-gemini-cli-companion.js.map +1 -1
- package/dist/lib/google-gemini-cli.d.ts.map +1 -1
- package/dist/lib/google-gemini-cli.js +55 -61
- package/dist/lib/google-gemini-cli.js.map +1 -1
- package/dist/lib/google-token-cache.d.ts.map +1 -1
- package/dist/lib/google-token-cache.js +87 -34
- package/dist/lib/google-token-cache.js.map +1 -1
- package/dist/lib/google.d.ts.map +1 -1
- package/dist/lib/google.js +80 -84
- package/dist/lib/google.js.map +1 -1
- package/dist/lib/grouped-entry-normalization.d.ts.map +1 -1
- package/dist/lib/grouped-entry-normalization.js +7 -1
- package/dist/lib/grouped-entry-normalization.js.map +1 -1
- package/dist/lib/http.d.ts +12 -7
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +28 -15
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/init-installer.d.ts +2 -1
- package/dist/lib/init-installer.d.ts.map +1 -1
- package/dist/lib/init-installer.js +29 -2
- package/dist/lib/init-installer.js.map +1 -1
- package/dist/lib/kimi-auth.d.ts +3 -26
- package/dist/lib/kimi-auth.d.ts.map +1 -1
- package/dist/lib/kimi-auth.js +24 -91
- package/dist/lib/kimi-auth.js.map +1 -1
- package/dist/lib/kimi.d.ts.map +1 -1
- package/dist/lib/kimi.js +20 -15
- package/dist/lib/kimi.js.map +1 -1
- package/dist/lib/maintainer-announcements.d.ts.map +1 -1
- package/dist/lib/maintainer-announcements.js +5 -0
- package/dist/lib/maintainer-announcements.js.map +1 -1
- package/dist/lib/map-with-concurrency.d.ts +2 -0
- package/dist/lib/map-with-concurrency.d.ts.map +1 -0
- package/dist/lib/map-with-concurrency.js +17 -0
- package/dist/lib/map-with-concurrency.js.map +1 -0
- package/dist/lib/mimo-config.d.ts +29 -0
- package/dist/lib/mimo-config.d.ts.map +1 -0
- package/dist/lib/mimo-config.js +147 -0
- package/dist/lib/mimo-config.js.map +1 -0
- package/dist/lib/mimo.d.ts +35 -0
- package/dist/lib/mimo.d.ts.map +1 -0
- package/dist/lib/mimo.js +236 -0
- package/dist/lib/mimo.js.map +1 -0
- package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
- package/dist/lib/modelsdev-pricing.js +39 -27
- package/dist/lib/modelsdev-pricing.js.map +1 -1
- package/dist/lib/nanogpt-config.d.ts.map +1 -1
- package/dist/lib/nanogpt-config.js +2 -4
- package/dist/lib/nanogpt-config.js.map +1 -1
- package/dist/lib/nanogpt.d.ts.map +1 -1
- package/dist/lib/nanogpt.js +40 -30
- package/dist/lib/nanogpt.js.map +1 -1
- package/dist/lib/ollama-cloud.d.ts +1 -1
- package/dist/lib/ollama-cloud.d.ts.map +1 -1
- package/dist/lib/ollama-cloud.js +73 -68
- package/dist/lib/ollama-cloud.js.map +1 -1
- package/dist/lib/openai.d.ts.map +1 -1
- package/dist/lib/openai.js +53 -48
- package/dist/lib/openai.js.map +1 -1
- package/dist/lib/opencode-config-providers.d.ts.map +1 -1
- package/dist/lib/opencode-config-providers.js +13 -16
- package/dist/lib/opencode-config-providers.js.map +1 -1
- package/dist/lib/opencode-config-read.d.ts +23 -0
- package/dist/lib/opencode-config-read.d.ts.map +1 -0
- package/dist/lib/opencode-config-read.js +30 -0
- package/dist/lib/opencode-config-read.js.map +1 -0
- package/dist/lib/opencode-go.d.ts.map +1 -1
- package/dist/lib/opencode-go.js +44 -39
- package/dist/lib/opencode-go.js.map +1 -1
- package/dist/lib/opencode-zen-config.d.ts +34 -0
- package/dist/lib/opencode-zen-config.d.ts.map +1 -0
- package/dist/lib/opencode-zen-config.js +103 -0
- package/dist/lib/opencode-zen-config.js.map +1 -0
- package/dist/lib/opencode-zen.d.ts +27 -0
- package/dist/lib/opencode-zen.d.ts.map +1 -0
- package/dist/lib/opencode-zen.js +143 -0
- package/dist/lib/opencode-zen.js.map +1 -0
- package/dist/lib/openrouter.d.ts +13 -0
- package/dist/lib/openrouter.d.ts.map +1 -0
- package/dist/lib/openrouter.js +41 -0
- package/dist/lib/openrouter.js.map +1 -0
- package/dist/lib/provider-add-command.d.ts.map +1 -1
- package/dist/lib/provider-add-command.js +4 -12
- package/dist/lib/provider-add-command.js.map +1 -1
- package/dist/lib/provider-add-json-v1-questionnaire.d.ts +32 -0
- package/dist/lib/provider-add-json-v1-questionnaire.d.ts.map +1 -0
- package/dist/lib/provider-add-json-v1-questionnaire.js +336 -0
- package/dist/lib/provider-add-json-v1-questionnaire.js.map +1 -0
- package/dist/lib/provider-availability.d.ts +2 -2
- package/dist/lib/provider-availability.d.ts.map +1 -1
- package/dist/lib/provider-availability.js +2 -3
- package/dist/lib/provider-availability.js.map +1 -1
- package/dist/lib/provider-metadata.d.ts +300 -1
- package/dist/lib/provider-metadata.d.ts.map +1 -1
- package/dist/lib/provider-metadata.js +332 -227
- package/dist/lib/provider-metadata.js.map +1 -1
- package/dist/lib/quota-command-format.d.ts.map +1 -1
- package/dist/lib/quota-command-format.js +12 -16
- package/dist/lib/quota-command-format.js.map +1 -1
- package/dist/lib/quota-dialog-commands.d.ts +59 -2
- package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
- package/dist/lib/quota-dialog-commands.js +73 -39
- package/dist/lib/quota-dialog-commands.js.map +1 -1
- package/dist/lib/quota-entry-display.d.ts +2 -0
- package/dist/lib/quota-entry-display.d.ts.map +1 -1
- package/dist/lib/quota-entry-display.js +27 -13
- package/dist/lib/quota-entry-display.js.map +1 -1
- package/dist/lib/quota-providers-remote.d.ts +0 -1
- package/dist/lib/quota-providers-remote.d.ts.map +1 -1
- package/dist/lib/quota-providers-remote.js +3 -16
- package/dist/lib/quota-providers-remote.js.map +1 -1
- package/dist/lib/quota-render-data.d.ts +4 -0
- package/dist/lib/quota-render-data.d.ts.map +1 -1
- package/dist/lib/quota-render-data.js +118 -127
- package/dist/lib/quota-render-data.js.map +1 -1
- package/dist/lib/quota-runtime-context.d.ts +9 -1
- package/dist/lib/quota-runtime-context.d.ts.map +1 -1
- package/dist/lib/quota-runtime-context.js +5 -0
- package/dist/lib/quota-runtime-context.js.map +1 -1
- package/dist/lib/quota-state.d.ts.map +1 -1
- package/dist/lib/quota-state.js +25 -1
- package/dist/lib/quota-state.js.map +1 -1
- package/dist/lib/quota-stats.d.ts +1 -0
- package/dist/lib/quota-stats.d.ts.map +1 -1
- package/dist/lib/quota-stats.js +14 -4
- package/dist/lib/quota-stats.js.map +1 -1
- package/dist/lib/quota-status.d.ts +7 -17
- package/dist/lib/quota-status.d.ts.map +1 -1
- package/dist/lib/quota-status.js +123 -948
- package/dist/lib/quota-status.js.map +1 -1
- package/dist/lib/runtime-provider-ids.d.ts +4 -0
- package/dist/lib/runtime-provider-ids.d.ts.map +1 -0
- package/dist/lib/runtime-provider-ids.js +10 -0
- package/dist/lib/runtime-provider-ids.js.map +1 -0
- package/dist/lib/session-tokens.d.ts +2 -0
- package/dist/lib/session-tokens.d.ts.map +1 -1
- package/dist/lib/session-tokens.js +4 -2
- package/dist/lib/session-tokens.js.map +1 -1
- package/dist/lib/synthetic-config.d.ts.map +1 -1
- package/dist/lib/synthetic-config.js +2 -4
- package/dist/lib/synthetic-config.js.map +1 -1
- package/dist/lib/synthetic.d.ts.map +1 -1
- package/dist/lib/synthetic.js +37 -32
- package/dist/lib/synthetic.js.map +1 -1
- package/dist/lib/toast-format-grouped.d.ts +1 -0
- package/dist/lib/toast-format-grouped.d.ts.map +1 -1
- package/dist/lib/toast-format-grouped.js +33 -29
- package/dist/lib/toast-format-grouped.js.map +1 -1
- package/dist/lib/tui-refresh-lifecycle.d.ts +17 -0
- package/dist/lib/tui-refresh-lifecycle.d.ts.map +1 -0
- package/dist/lib/tui-refresh-lifecycle.js +83 -0
- package/dist/lib/tui-refresh-lifecycle.js.map +1 -0
- package/dist/lib/tui-runtime.d.ts +0 -5
- package/dist/lib/tui-runtime.d.ts.map +1 -1
- package/dist/lib/tui-runtime.js +1 -6
- package/dist/lib/tui-runtime.js.map +1 -1
- package/dist/lib/tui-sidebar-format.d.ts +1 -1
- package/dist/lib/tui-sidebar-format.d.ts.map +1 -1
- package/dist/lib/tui-sidebar-format.js +1 -0
- package/dist/lib/tui-sidebar-format.js.map +1 -1
- package/dist/lib/types.d.ts +72 -8
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/xai.d.ts +39 -0
- package/dist/lib/xai.d.ts.map +1 -0
- package/dist/lib/xai.js +153 -0
- package/dist/lib/xai.js.map +1 -0
- package/dist/lib/zai-auth.d.ts +3 -26
- package/dist/lib/zai-auth.d.ts.map +1 -1
- package/dist/lib/zai-auth.js +24 -94
- package/dist/lib/zai-auth.js.map +1 -1
- package/dist/lib/zai.d.ts +1 -8
- package/dist/lib/zai.d.ts.map +1 -1
- package/dist/lib/zai.js +11 -91
- package/dist/lib/zai.js.map +1 -1
- package/dist/lib/zhipu-auth.d.ts +3 -26
- package/dist/lib/zhipu-auth.d.ts.map +1 -1
- package/dist/lib/zhipu-auth.js +24 -94
- package/dist/lib/zhipu-auth.js.map +1 -1
- package/dist/lib/zhipu.d.ts +1 -8
- package/dist/lib/zhipu.d.ts.map +1 -1
- package/dist/lib/zhipu.js +10 -84
- package/dist/lib/zhipu.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +20 -145
- package/dist/plugin.js.map +1 -1
- package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
- package/dist/providers/alibaba-coding-plan.js +33 -6
- package/dist/providers/alibaba-coding-plan.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +35 -7
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/chutes.d.ts.map +1 -1
- package/dist/providers/chutes.js +10 -3
- package/dist/providers/chutes.js.map +1 -1
- package/dist/providers/copilot.d.ts.map +1 -1
- package/dist/providers/copilot.js +102 -31
- package/dist/providers/copilot.js.map +1 -1
- package/dist/providers/cursor.d.ts.map +1 -1
- package/dist/providers/cursor.js +34 -6
- package/dist/providers/cursor.js.map +1 -1
- package/dist/providers/deepseek.d.ts.map +1 -1
- package/dist/providers/deepseek.js +10 -3
- package/dist/providers/deepseek.js.map +1 -1
- package/dist/providers/glm-coding-plan-provider.d.ts +44 -0
- package/dist/providers/glm-coding-plan-provider.d.ts.map +1 -0
- package/dist/providers/glm-coding-plan-provider.js +62 -0
- package/dist/providers/glm-coding-plan-provider.js.map +1 -0
- package/dist/providers/google-agy.d.ts.map +1 -1
- package/dist/providers/google-agy.js +83 -42
- package/dist/providers/google-agy.js.map +1 -1
- package/dist/providers/google-antigravity.d.ts.map +1 -1
- package/dist/providers/google-antigravity.js +31 -6
- package/dist/providers/google-antigravity.js.map +1 -1
- package/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/dist/providers/google-gemini-cli.js +24 -6
- package/dist/providers/google-gemini-cli.js.map +1 -1
- package/dist/providers/kimi-code.d.ts.map +1 -1
- package/dist/providers/kimi-code.js +27 -8
- package/dist/providers/kimi-code.js.map +1 -1
- package/dist/providers/mimo.d.ts +3 -0
- package/dist/providers/mimo.d.ts.map +1 -0
- package/dist/providers/mimo.js +127 -0
- package/dist/providers/mimo.js.map +1 -0
- package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
- package/dist/providers/minimax-coding-plan.js +68 -32
- package/dist/providers/minimax-coding-plan.js.map +1 -1
- package/dist/providers/nanogpt.d.ts.map +1 -1
- package/dist/providers/nanogpt.js +41 -4
- package/dist/providers/nanogpt.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +20 -3
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js +33 -15
- package/dist/providers/opencode-go.js.map +1 -1
- package/dist/providers/opencode-zen.d.ts +3 -0
- package/dist/providers/opencode-zen.d.ts.map +1 -0
- package/dist/providers/opencode-zen.js +99 -0
- package/dist/providers/opencode-zen.js.map +1 -0
- package/dist/providers/openrouter.d.ts +6 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +25 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/quota-providers.d.ts.map +1 -1
- package/dist/providers/quota-providers.js +3 -3
- package/dist/providers/quota-providers.js.map +1 -1
- package/dist/providers/qwen-code.d.ts.map +1 -1
- package/dist/providers/qwen-code.js +19 -5
- package/dist/providers/qwen-code.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +8 -0
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/result-helpers.d.ts +29 -1
- package/dist/providers/result-helpers.d.ts.map +1 -1
- package/dist/providers/result-helpers.js +69 -0
- package/dist/providers/result-helpers.js.map +1 -1
- package/dist/providers/synthetic.d.ts.map +1 -1
- package/dist/providers/synthetic.js +10 -3
- package/dist/providers/synthetic.js.map +1 -1
- package/dist/providers/xai.d.ts +6 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +51 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/providers/zai.d.ts +1 -7
- package/dist/providers/zai.d.ts.map +1 -1
- package/dist/providers/zai.js +11 -46
- package/dist/providers/zai.js.map +1 -1
- package/dist/providers/zhipu.d.ts +1 -7
- package/dist/providers/zhipu.d.ts.map +1 -1
- package/dist/providers/zhipu.js +11 -46
- package/dist/providers/zhipu.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +47 -136
- package/dist/tui.tsx +62 -179
- package/package.json +1 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import { readdirSync } from "node:fs";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
6
|
+
import { getOpencodeRuntimeDirCandidates } from "./opencode-runtime-paths.js";
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
function isModuleNotFoundError(error) {
|
|
9
|
+
if (!error || typeof error !== "object")
|
|
10
|
+
return false;
|
|
11
|
+
if ("code" in error && error.code === "MODULE_NOT_FOUND")
|
|
12
|
+
return true;
|
|
13
|
+
return error instanceof Error && error.message.includes("Cannot find module");
|
|
14
|
+
}
|
|
15
|
+
function isPackagePathNotExportedError(error) {
|
|
16
|
+
return Boolean(error &&
|
|
17
|
+
typeof error === "object" &&
|
|
18
|
+
"code" in error &&
|
|
19
|
+
error.code === "ERR_PACKAGE_PATH_NOT_EXPORTED");
|
|
20
|
+
}
|
|
21
|
+
function isFallthroughResolutionError(error) {
|
|
22
|
+
return isModuleNotFoundError(error) || isPackagePathNotExportedError(error);
|
|
23
|
+
}
|
|
24
|
+
function isMissingFileError(error) {
|
|
25
|
+
if (!error || typeof error !== "object" || !("code" in error))
|
|
26
|
+
return false;
|
|
27
|
+
return error.code === "ENOENT" || error.code === "ENOTDIR";
|
|
28
|
+
}
|
|
29
|
+
function markPackageFound(error, context) {
|
|
30
|
+
if (isPackagePathNotExportedError(error))
|
|
31
|
+
context.packageFound = true;
|
|
32
|
+
}
|
|
33
|
+
function resolveSpecifier(specifier, searchRuntimePaths, context) {
|
|
34
|
+
try {
|
|
35
|
+
return require.resolve(specifier);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
markPackageFound(error, context);
|
|
39
|
+
if (!searchRuntimePaths || !isFallthroughResolutionError(error))
|
|
40
|
+
throw error;
|
|
41
|
+
try {
|
|
42
|
+
return require.resolve(specifier, {
|
|
43
|
+
paths: getOpencodeRuntimeDirCandidates().cacheDirs,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch (runtimeError) {
|
|
47
|
+
markPackageFound(runtimeError, context);
|
|
48
|
+
throw runtimeError;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function getRuntimePackageRoots(descriptor) {
|
|
53
|
+
const cacheDirs = getOpencodeRuntimeDirCandidates().cacheDirs;
|
|
54
|
+
const packageRoots = cacheDirs.map((cacheDir) => join(cacheDir, "node_modules", descriptor.packageName));
|
|
55
|
+
for (const cacheDir of cacheDirs) {
|
|
56
|
+
try {
|
|
57
|
+
const packagesDir = join(cacheDir, "packages");
|
|
58
|
+
if (descriptor.packageScan === "scoped") {
|
|
59
|
+
const [scope, name] = descriptor.packageName.split("/");
|
|
60
|
+
const scopeDir = join(packagesDir, scope);
|
|
61
|
+
for (const entry of readdirSync(scopeDir, { withFileTypes: true })) {
|
|
62
|
+
if (entry.isDirectory() && entry.name.startsWith(name)) {
|
|
63
|
+
const packagePath = join(scopeDir, entry.name);
|
|
64
|
+
packageRoots.push(packagePath);
|
|
65
|
+
packageRoots.push(join(packagePath, "node_modules", descriptor.packageName));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
for (const entry of readdirSync(packagesDir, { withFileTypes: true })) {
|
|
71
|
+
if (entry.isDirectory() && entry.name.startsWith(descriptor.packageName)) {
|
|
72
|
+
const packagePath = join(packagesDir, entry.name);
|
|
73
|
+
packageRoots.push(packagePath);
|
|
74
|
+
packageRoots.push(join(packagePath, "node_modules", descriptor.packageName));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// A missing runtime packages directory is not an installed companion.
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return packageRoots;
|
|
84
|
+
}
|
|
85
|
+
function buildConfiguredState(params) {
|
|
86
|
+
return {
|
|
87
|
+
presence: {
|
|
88
|
+
state: "present",
|
|
89
|
+
importSpecifier: params.importSpecifier,
|
|
90
|
+
resolvedPath: params.resolvedPath,
|
|
91
|
+
},
|
|
92
|
+
credentials: {
|
|
93
|
+
state: "configured",
|
|
94
|
+
clientId: params.clientId,
|
|
95
|
+
clientSecret: params.clientSecret,
|
|
96
|
+
resolvedPath: params.resolvedPath,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function buildInvalidState(descriptor, importSpecifier, resolvedPath) {
|
|
101
|
+
return {
|
|
102
|
+
presence: {
|
|
103
|
+
state: "invalid",
|
|
104
|
+
importSpecifier,
|
|
105
|
+
...(resolvedPath ? { resolvedPath } : {}),
|
|
106
|
+
error: descriptor.invalidError,
|
|
107
|
+
},
|
|
108
|
+
credentials: {
|
|
109
|
+
state: "invalid",
|
|
110
|
+
...(resolvedPath ? { resolvedPath } : {}),
|
|
111
|
+
error: descriptor.invalidError,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function parseSourceCredentials(descriptor, content) {
|
|
116
|
+
const readConstant = (name) => {
|
|
117
|
+
const escapedName = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
118
|
+
return (content
|
|
119
|
+
.match(new RegExp(`(?:export\\s+const|const|var)\\s+${escapedName}\\s*=\\s*["']([^"']+)["']`))?.[1]
|
|
120
|
+
?.trim() ?? "");
|
|
121
|
+
};
|
|
122
|
+
const clientId = readConstant(descriptor.clientIdExport);
|
|
123
|
+
const clientSecret = readConstant(descriptor.clientSecretExport);
|
|
124
|
+
return clientId && clientSecret ? { clientId, clientSecret } : null;
|
|
125
|
+
}
|
|
126
|
+
async function readCredentialsPath(descriptor, importSpecifier, resolvedPath, readErrors) {
|
|
127
|
+
let content;
|
|
128
|
+
try {
|
|
129
|
+
content = await readFile(resolvedPath, "utf8");
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
if (readErrors === "fallthrough-all" || isMissingFileError(error))
|
|
133
|
+
return null;
|
|
134
|
+
return buildInvalidState(descriptor, importSpecifier, resolvedPath);
|
|
135
|
+
}
|
|
136
|
+
const credentials = parseSourceCredentials(descriptor, content);
|
|
137
|
+
return credentials
|
|
138
|
+
? buildConfiguredState({ importSpecifier, resolvedPath, ...credentials })
|
|
139
|
+
: buildInvalidState(descriptor, importSpecifier, resolvedPath);
|
|
140
|
+
}
|
|
141
|
+
async function resolveStage(descriptor, stage, context) {
|
|
142
|
+
if (stage.kind === "dynamic-import") {
|
|
143
|
+
for (const importSpecifier of stage.specifiers) {
|
|
144
|
+
let resolvedPath;
|
|
145
|
+
try {
|
|
146
|
+
resolvedPath = resolveSpecifier(importSpecifier, true, context);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
if (isFallthroughResolutionError(error))
|
|
150
|
+
continue;
|
|
151
|
+
return buildInvalidState(descriptor, importSpecifier);
|
|
152
|
+
}
|
|
153
|
+
let companionModule;
|
|
154
|
+
try {
|
|
155
|
+
companionModule = (await import(pathToFileURL(resolvedPath).href));
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return buildInvalidState(descriptor, importSpecifier, resolvedPath);
|
|
159
|
+
}
|
|
160
|
+
const clientId = companionModule[descriptor.clientIdExport];
|
|
161
|
+
const clientSecret = companionModule[descriptor.clientSecretExport];
|
|
162
|
+
if (typeof clientId !== "string" ||
|
|
163
|
+
!clientId.trim() ||
|
|
164
|
+
typeof clientSecret !== "string" ||
|
|
165
|
+
!clientSecret.trim()) {
|
|
166
|
+
return buildInvalidState(descriptor, importSpecifier, resolvedPath);
|
|
167
|
+
}
|
|
168
|
+
return buildConfiguredState({
|
|
169
|
+
importSpecifier,
|
|
170
|
+
resolvedPath,
|
|
171
|
+
clientId: clientId.trim(),
|
|
172
|
+
clientSecret: clientSecret.trim(),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
if (stage.kind === "runtime-files") {
|
|
178
|
+
for (const packageRoot of getRuntimePackageRoots(descriptor)) {
|
|
179
|
+
for (const parts of stage.candidatePaths) {
|
|
180
|
+
const resolved = await readCredentialsPath(descriptor, stage.importSpecifier, join(packageRoot, ...parts), stage.readErrors);
|
|
181
|
+
if (resolved)
|
|
182
|
+
return resolved;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
if (stage.kind === "source-specifier") {
|
|
188
|
+
let resolvedPath;
|
|
189
|
+
try {
|
|
190
|
+
resolvedPath = resolveSpecifier(stage.importSpecifier, stage.searchRuntimePaths, context);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
return isFallthroughResolutionError(error)
|
|
194
|
+
? null
|
|
195
|
+
: buildInvalidState(descriptor, stage.importSpecifier);
|
|
196
|
+
}
|
|
197
|
+
return ((await readCredentialsPath(descriptor, stage.importSpecifier, resolvedPath, stage.readErrors)) ?? buildInvalidState(descriptor, stage.importSpecifier, resolvedPath));
|
|
198
|
+
}
|
|
199
|
+
if (stage.kind === "package-json") {
|
|
200
|
+
let packageJsonPath;
|
|
201
|
+
try {
|
|
202
|
+
packageJsonPath = resolveSpecifier(stage.importSpecifier, true, context);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
return isFallthroughResolutionError(error)
|
|
206
|
+
? null
|
|
207
|
+
: buildInvalidState(descriptor, stage.resolutionErrorImportSpecifier);
|
|
208
|
+
}
|
|
209
|
+
const packageRoot = dirname(packageJsonPath);
|
|
210
|
+
for (const parts of stage.candidatePaths) {
|
|
211
|
+
const resolved = await readCredentialsPath(descriptor, stage.candidateImportSpecifier, join(packageRoot, ...parts), stage.readErrors);
|
|
212
|
+
if (resolved)
|
|
213
|
+
return resolved;
|
|
214
|
+
}
|
|
215
|
+
const invalidPath = stage.exhaustedInvalidPath === "package-json"
|
|
216
|
+
? packageJsonPath
|
|
217
|
+
: join(packageRoot, ...stage.candidatePaths[0]);
|
|
218
|
+
return buildInvalidState(descriptor, stage.candidateImportSpecifier, invalidPath);
|
|
219
|
+
}
|
|
220
|
+
let packageEntryPath;
|
|
221
|
+
try {
|
|
222
|
+
packageEntryPath = resolveSpecifier(stage.importSpecifier, true, context);
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
return isFallthroughResolutionError(error)
|
|
226
|
+
? null
|
|
227
|
+
: buildInvalidState(descriptor, stage.importSpecifier);
|
|
228
|
+
}
|
|
229
|
+
return ((await readCredentialsPath(descriptor, stage.importSpecifier, packageEntryPath, stage.readErrors)) ?? buildInvalidState(descriptor, stage.importSpecifier, packageEntryPath));
|
|
230
|
+
}
|
|
231
|
+
export function createGoogleCompanionCredentialResolver(descriptor) {
|
|
232
|
+
let resolvedStatePromise = null;
|
|
233
|
+
async function getResolvedState() {
|
|
234
|
+
if (!resolvedStatePromise) {
|
|
235
|
+
resolvedStatePromise = (async () => {
|
|
236
|
+
const context = { packageFound: false };
|
|
237
|
+
for (const stage of descriptor.stages) {
|
|
238
|
+
const resolved = await resolveStage(descriptor, stage, context);
|
|
239
|
+
if (resolved)
|
|
240
|
+
return resolved;
|
|
241
|
+
}
|
|
242
|
+
if (context.packageFound) {
|
|
243
|
+
return buildInvalidState(descriptor, descriptor.packageName);
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
presence: {
|
|
247
|
+
state: "missing",
|
|
248
|
+
importSpecifier: descriptor.missingImportSpecifier,
|
|
249
|
+
error: descriptor.missingError,
|
|
250
|
+
},
|
|
251
|
+
credentials: { state: "missing", error: descriptor.missingError },
|
|
252
|
+
};
|
|
253
|
+
})();
|
|
254
|
+
}
|
|
255
|
+
return resolvedStatePromise;
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
inspect: async () => (await getResolvedState()).presence,
|
|
259
|
+
resolveCredentials: async () => (await getResolvedState()).credentials,
|
|
260
|
+
clearCacheForTests: () => {
|
|
261
|
+
resolvedStatePromise = null;
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=google-companion-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-companion-credentials.js","sourceRoot":"","sources":["../../src/lib/google-companion-credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} | {
|
|
6
|
-
state: "missing";
|
|
7
|
-
importSpecifier: string;
|
|
8
|
-
error: string;
|
|
9
|
-
} | {
|
|
10
|
-
state: "invalid";
|
|
11
|
-
importSpecifier: string;
|
|
12
|
-
error: string;
|
|
13
|
-
resolvedPath?: string;
|
|
14
|
-
};
|
|
15
|
-
export type GeminiCliConfiguredCredentials = {
|
|
16
|
-
state: "configured";
|
|
17
|
-
clientId: string;
|
|
18
|
-
clientSecret: string;
|
|
19
|
-
resolvedPath: string;
|
|
20
|
-
};
|
|
21
|
-
export type GeminiCliClientCredentials = GeminiCliConfiguredCredentials | {
|
|
22
|
-
state: "missing" | "invalid";
|
|
23
|
-
error: string;
|
|
24
|
-
resolvedPath?: string;
|
|
25
|
-
};
|
|
1
|
+
import { type GoogleCompanionClientCredentials, type GoogleCompanionConfiguredCredentials, type GoogleCompanionPresence } from "./google-companion-credentials.js";
|
|
2
|
+
export type GeminiCliCompanionPresence = GoogleCompanionPresence;
|
|
3
|
+
export type GeminiCliConfiguredCredentials = GoogleCompanionConfiguredCredentials;
|
|
4
|
+
export type GeminiCliClientCredentials = GoogleCompanionClientCredentials;
|
|
26
5
|
export declare function inspectGeminiCliCompanionPresence(): Promise<GeminiCliCompanionPresence>;
|
|
27
6
|
export declare function resolveGeminiCliClientCredentials(): Promise<GeminiCliClientCredentials>;
|
|
28
7
|
export declare function clearGeminiCliCompanionCacheForTests(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-gemini-cli-companion.d.ts","sourceRoot":"","sources":["../../src/lib/google-gemini-cli-companion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"google-gemini-cli-companion.d.ts","sourceRoot":"","sources":["../../src/lib/google-gemini-cli-companion.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gCAAgC,EACrC,KAAK,oCAAoC,EAEzC,KAAK,uBAAuB,EAC7B,MAAM,mCAAmC,CAAC;AA0D3C,MAAM,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AACjE,MAAM,MAAM,8BAA8B,GAAG,oCAAoC,CAAC;AAClF,MAAM,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAE1E,wBAAsB,iCAAiC,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAE7F;AAED,wBAAsB,iCAAiC,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAE7F;AAED,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D"}
|
|
@@ -1,275 +1,64 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { pathToFileURL } from "node:url";
|
|
6
|
-
import { getOpencodeRuntimeDirCandidates } from "./opencode-runtime-paths.js";
|
|
7
|
-
const require = createRequire(import.meta.url);
|
|
8
|
-
const COMPANION_PACKAGE_NAME = "opencode-gemini-auth";
|
|
9
|
-
const COMPANION_JS_IMPORT_SPECIFIERS = [
|
|
10
|
-
`${COMPANION_PACKAGE_NAME}/dist/src/constants.js`,
|
|
11
|
-
`${COMPANION_PACKAGE_NAME}/src/constants.js`,
|
|
12
|
-
];
|
|
13
|
-
const COMPANION_SOURCE_IMPORT_SPECIFIER = `${COMPANION_PACKAGE_NAME}/src/constants.ts`;
|
|
14
|
-
const COMPANION_PACKAGE_JSON_SPECIFIER = `${COMPANION_PACKAGE_NAME}/package.json`;
|
|
15
|
-
const COMPANION_DIRECT_CANDIDATE_PATHS = [
|
|
1
|
+
import { createGoogleCompanionCredentialResolver, } from "./google-companion-credentials.js";
|
|
2
|
+
const PACKAGE_NAME = "opencode-gemini-auth";
|
|
3
|
+
const SOURCE_SPECIFIER = `${PACKAGE_NAME}/src/constants.ts`;
|
|
4
|
+
const RUNTIME_CANDIDATES = [
|
|
16
5
|
["src", "constants.ts"],
|
|
17
6
|
["src", "constants.js"],
|
|
18
7
|
["dist", "src", "constants.js"],
|
|
19
8
|
["dist", "index.js"],
|
|
20
9
|
];
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return message.includes("Cannot find module");
|
|
34
|
-
}
|
|
35
|
-
function isPackagePathNotExportedError(error) {
|
|
36
|
-
if (!error || typeof error !== "object") {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
return "code" in error && error.code === "ERR_PACKAGE_PATH_NOT_EXPORTED";
|
|
40
|
-
}
|
|
41
|
-
function isFallthroughResolutionError(error) {
|
|
42
|
-
return isModuleNotFoundError(error) || isPackagePathNotExportedError(error);
|
|
43
|
-
}
|
|
44
|
-
function normalizeCredential(value) {
|
|
45
|
-
return typeof value === "string" ? value.trim() : "";
|
|
46
|
-
}
|
|
47
|
-
function getCompanionResolvePaths() {
|
|
48
|
-
const paths = [...getOpencodeRuntimeDirCandidates().cacheDirs];
|
|
49
|
-
return paths;
|
|
50
|
-
}
|
|
51
|
-
function getRuntimePackageRoots() {
|
|
52
|
-
const cacheDirs = getOpencodeRuntimeDirCandidates().cacheDirs;
|
|
53
|
-
const packageRoots = cacheDirs.map((cacheDir) => join(cacheDir, "node_modules", COMPANION_PACKAGE_NAME));
|
|
54
|
-
for (const cacheDir of cacheDirs) {
|
|
55
|
-
try {
|
|
56
|
-
const packagesDir = join(cacheDir, "packages");
|
|
57
|
-
const entries = readdirSync(packagesDir, { withFileTypes: true });
|
|
58
|
-
for (const entry of entries) {
|
|
59
|
-
if (entry.isDirectory() && entry.name.startsWith(COMPANION_PACKAGE_NAME)) {
|
|
60
|
-
packageRoots.push(join(packagesDir, entry.name));
|
|
61
|
-
packageRoots.push(join(packagesDir, entry.name, "node_modules", COMPANION_PACKAGE_NAME));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
// Ignore if packages dir doesn't exist
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return packageRoots;
|
|
70
|
-
}
|
|
71
|
-
function markPackageFoundForExportBlock(error, context) {
|
|
72
|
-
if (isPackagePathNotExportedError(error)) {
|
|
73
|
-
context.packageFound = true;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function resolveCompanionSpecifier(specifier, context) {
|
|
77
|
-
try {
|
|
78
|
-
return require.resolve(specifier);
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
markPackageFoundForExportBlock(error, context);
|
|
82
|
-
if (!isFallthroughResolutionError(error)) {
|
|
83
|
-
throw error;
|
|
84
|
-
}
|
|
85
|
-
try {
|
|
86
|
-
return require.resolve(specifier, { paths: getCompanionResolvePaths() });
|
|
87
|
-
}
|
|
88
|
-
catch (resolvePathsError) {
|
|
89
|
-
markPackageFoundForExportBlock(resolvePathsError, context);
|
|
90
|
-
throw resolvePathsError;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
function buildConfiguredState(params) {
|
|
95
|
-
return {
|
|
96
|
-
presence: {
|
|
97
|
-
state: "present",
|
|
98
|
-
importSpecifier: params.importSpecifier,
|
|
99
|
-
resolvedPath: params.resolvedPath,
|
|
10
|
+
const descriptor = {
|
|
11
|
+
packageName: PACKAGE_NAME,
|
|
12
|
+
packageScan: "unscoped",
|
|
13
|
+
clientIdExport: "GEMINI_CLIENT_ID",
|
|
14
|
+
clientSecretExport: "GEMINI_CLIENT_SECRET",
|
|
15
|
+
missingImportSpecifier: SOURCE_SPECIFIER,
|
|
16
|
+
missingError: `Install ${PACKAGE_NAME} separately to enable Gemini CLI quota`,
|
|
17
|
+
invalidError: `Installed ${PACKAGE_NAME} package is incompatible`,
|
|
18
|
+
stages: [
|
|
19
|
+
{
|
|
20
|
+
kind: "dynamic-import",
|
|
21
|
+
specifiers: [`${PACKAGE_NAME}/dist/src/constants.js`, `${PACKAGE_NAME}/src/constants.js`],
|
|
100
22
|
},
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
23
|
+
{
|
|
24
|
+
kind: "source-specifier",
|
|
25
|
+
importSpecifier: SOURCE_SPECIFIER,
|
|
26
|
+
searchRuntimePaths: false,
|
|
27
|
+
readErrors: "fallthrough-all",
|
|
106
28
|
},
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
state: "invalid",
|
|
113
|
-
importSpecifier,
|
|
114
|
-
...(resolvedPath ? { resolvedPath } : {}),
|
|
115
|
-
error: COMPANION_INVALID_ERROR,
|
|
29
|
+
{
|
|
30
|
+
kind: "runtime-files",
|
|
31
|
+
importSpecifier: SOURCE_SPECIFIER,
|
|
32
|
+
candidatePaths: RUNTIME_CANDIDATES,
|
|
33
|
+
readErrors: "fallthrough-all",
|
|
116
34
|
},
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
35
|
+
{
|
|
36
|
+
kind: "package-json",
|
|
37
|
+
importSpecifier: `${PACKAGE_NAME}/package.json`,
|
|
38
|
+
candidateImportSpecifier: SOURCE_SPECIFIER,
|
|
39
|
+
candidatePaths: [
|
|
40
|
+
["src", "constants.ts"],
|
|
41
|
+
["dist", "index.js"],
|
|
42
|
+
],
|
|
43
|
+
readErrors: "fallthrough-all",
|
|
44
|
+
resolutionErrorImportSpecifier: SOURCE_SPECIFIER,
|
|
45
|
+
exhaustedInvalidPath: "first-candidate",
|
|
121
46
|
},
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
.match(/(?:export\s+const|const|var)\s+GEMINI_CLIENT_ID\s*=\s*["']([^"']+)["']/)?.[1]
|
|
127
|
-
?.trim() ?? "";
|
|
128
|
-
const clientSecret = content
|
|
129
|
-
.match(/(?:export\s+const|const|var)\s+GEMINI_CLIENT_SECRET\s*=\s*["']([^"']+)["']/)?.[1]
|
|
130
|
-
?.trim() ?? "";
|
|
131
|
-
return clientId && clientSecret ? { clientId, clientSecret } : null;
|
|
132
|
-
}
|
|
133
|
-
function getPackageCredentialPaths(packageRoot) {
|
|
134
|
-
return COMPANION_DIRECT_CANDIDATE_PATHS.map((parts) => join(packageRoot, ...parts));
|
|
135
|
-
}
|
|
136
|
-
function getRuntimeSourceConstantPaths() {
|
|
137
|
-
return getRuntimePackageRoots().flatMap((packageRoot) => getPackageCredentialPaths(packageRoot));
|
|
138
|
-
}
|
|
139
|
-
async function tryReadSourceConstantsPath(resolvedPath) {
|
|
140
|
-
try {
|
|
141
|
-
const content = await readFile(resolvedPath, "utf8");
|
|
142
|
-
const credentials = parseSourceCredentials(content);
|
|
143
|
-
if (!credentials) {
|
|
144
|
-
return buildInvalidState(COMPANION_SOURCE_IMPORT_SPECIFIER, resolvedPath);
|
|
145
|
-
}
|
|
146
|
-
return buildConfiguredState({
|
|
147
|
-
importSpecifier: COMPANION_SOURCE_IMPORT_SPECIFIER,
|
|
148
|
-
resolvedPath,
|
|
149
|
-
clientId: credentials.clientId,
|
|
150
|
-
clientSecret: credentials.clientSecret,
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
async function tryResolveJsConstants(importSpecifier, context) {
|
|
158
|
-
let resolvedPath;
|
|
159
|
-
try {
|
|
160
|
-
resolvedPath = resolveCompanionSpecifier(importSpecifier, context);
|
|
161
|
-
}
|
|
162
|
-
catch (error) {
|
|
163
|
-
if (isFallthroughResolutionError(error)) {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
return buildInvalidState(importSpecifier);
|
|
167
|
-
}
|
|
168
|
-
let companionModule;
|
|
169
|
-
try {
|
|
170
|
-
companionModule = (await import(pathToFileURL(resolvedPath).href));
|
|
171
|
-
}
|
|
172
|
-
catch {
|
|
173
|
-
return buildInvalidState(importSpecifier, resolvedPath);
|
|
174
|
-
}
|
|
175
|
-
const clientId = normalizeCredential(companionModule.GEMINI_CLIENT_ID);
|
|
176
|
-
const clientSecret = normalizeCredential(companionModule.GEMINI_CLIENT_SECRET);
|
|
177
|
-
if (!clientId || !clientSecret) {
|
|
178
|
-
return buildInvalidState(importSpecifier, resolvedPath);
|
|
179
|
-
}
|
|
180
|
-
return buildConfiguredState({ importSpecifier, resolvedPath, clientId, clientSecret });
|
|
181
|
-
}
|
|
182
|
-
async function tryResolvePackageEntry(context) {
|
|
183
|
-
try {
|
|
184
|
-
const packageEntryPath = resolveCompanionSpecifier(COMPANION_PACKAGE_NAME, context);
|
|
185
|
-
const packageEntryResolved = await tryReadSourceConstantsPath(packageEntryPath);
|
|
186
|
-
return packageEntryResolved ?? buildInvalidState(COMPANION_PACKAGE_NAME, packageEntryPath);
|
|
187
|
-
}
|
|
188
|
-
catch (error) {
|
|
189
|
-
return isFallthroughResolutionError(error) ? null : buildInvalidState(COMPANION_PACKAGE_NAME);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
async function tryResolveSourceConstants(context) {
|
|
193
|
-
let resolvedPath;
|
|
194
|
-
try {
|
|
195
|
-
resolvedPath = require.resolve(COMPANION_SOURCE_IMPORT_SPECIFIER);
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
if (!isFallthroughResolutionError(error)) {
|
|
199
|
-
return buildInvalidState(COMPANION_SOURCE_IMPORT_SPECIFIER);
|
|
200
|
-
}
|
|
201
|
-
for (const candidatePath of getRuntimeSourceConstantPaths()) {
|
|
202
|
-
const runtimeResolved = await tryReadSourceConstantsPath(candidatePath);
|
|
203
|
-
if (runtimeResolved) {
|
|
204
|
-
return runtimeResolved;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
try {
|
|
208
|
-
const packageJsonPath = resolveCompanionSpecifier(COMPANION_PACKAGE_JSON_SPECIFIER, context);
|
|
209
|
-
const packageRoot = dirname(packageJsonPath);
|
|
210
|
-
for (const candidatePath of [
|
|
211
|
-
join(packageRoot, "src", "constants.ts"),
|
|
212
|
-
join(packageRoot, "dist", "index.js"),
|
|
213
|
-
]) {
|
|
214
|
-
const packageResolved = await tryReadSourceConstantsPath(candidatePath);
|
|
215
|
-
if (packageResolved) {
|
|
216
|
-
return packageResolved;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
resolvedPath = join(packageRoot, "src", "constants.ts");
|
|
220
|
-
}
|
|
221
|
-
catch (packageError) {
|
|
222
|
-
if (isFallthroughResolutionError(packageError)) {
|
|
223
|
-
return tryResolvePackageEntry(context);
|
|
224
|
-
}
|
|
225
|
-
return buildInvalidState(COMPANION_SOURCE_IMPORT_SPECIFIER);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
return ((await tryReadSourceConstantsPath(resolvedPath)) ??
|
|
229
|
-
buildInvalidState(COMPANION_SOURCE_IMPORT_SPECIFIER, resolvedPath));
|
|
230
|
-
}
|
|
231
|
-
async function resolveCompanionState() {
|
|
232
|
-
const context = { packageFound: false };
|
|
233
|
-
for (const importSpecifier of COMPANION_JS_IMPORT_SPECIFIERS) {
|
|
234
|
-
const resolved = await tryResolveJsConstants(importSpecifier, context);
|
|
235
|
-
if (resolved) {
|
|
236
|
-
return resolved;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
const sourceResolved = await tryResolveSourceConstants(context);
|
|
240
|
-
if (sourceResolved) {
|
|
241
|
-
return sourceResolved;
|
|
242
|
-
}
|
|
243
|
-
if (context.packageFound) {
|
|
244
|
-
return buildInvalidState(COMPANION_PACKAGE_NAME);
|
|
245
|
-
}
|
|
246
|
-
return {
|
|
247
|
-
presence: {
|
|
248
|
-
state: "missing",
|
|
249
|
-
importSpecifier: COMPANION_SOURCE_IMPORT_SPECIFIER,
|
|
250
|
-
error: COMPANION_MISSING_ERROR,
|
|
251
|
-
},
|
|
252
|
-
credentials: {
|
|
253
|
-
state: "missing",
|
|
254
|
-
error: COMPANION_MISSING_ERROR,
|
|
47
|
+
{
|
|
48
|
+
kind: "package-entry",
|
|
49
|
+
importSpecifier: PACKAGE_NAME,
|
|
50
|
+
readErrors: "fallthrough-all",
|
|
255
51
|
},
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
if (!resolvedCompanionStatePromise) {
|
|
260
|
-
resolvedCompanionStatePromise = resolveCompanionState();
|
|
261
|
-
}
|
|
262
|
-
return resolvedCompanionStatePromise;
|
|
263
|
-
}
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
const resolver = createGoogleCompanionCredentialResolver(descriptor);
|
|
264
55
|
export async function inspectGeminiCliCompanionPresence() {
|
|
265
|
-
|
|
266
|
-
return resolved.presence;
|
|
56
|
+
return resolver.inspect();
|
|
267
57
|
}
|
|
268
58
|
export async function resolveGeminiCliClientCredentials() {
|
|
269
|
-
|
|
270
|
-
return resolved.credentials;
|
|
59
|
+
return resolver.resolveCredentials();
|
|
271
60
|
}
|
|
272
61
|
export function clearGeminiCliCompanionCacheForTests() {
|
|
273
|
-
|
|
62
|
+
resolver.clearCacheForTests();
|
|
274
63
|
}
|
|
275
64
|
//# sourceMappingURL=google-gemini-cli-companion.js.map
|