From ed1a288b868493938053b1780bd33430cb863512 Mon Sep 17 00:00:00 2001 From: rensumo <15206641+rensumo@user.noreply.gitee.com> Date: Sat, 21 Feb 2026 11:37:51 +0800 Subject: [PATCH 1/6] feat(gemini-cli): support ALL project id and simplify project selection UI --- package-lock.json | 16 ++++++++++++++++ src/i18n/locales/en.json | 4 +++- src/i18n/locales/zh-CN.json | 4 +++- src/pages/OAuthPage.module.scss | 7 +++++++ src/pages/OAuthPage.tsx | 12 ++++++++++-- 5 files changed, 39 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index f9bf2b8..75cd29f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,6 +73,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -480,6 +481,7 @@ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.8.tgz", "integrity": "sha512-XcE9fcnkHCbWkjeKyi0lllwXmBLtyYb5dt89dJyx23I9+LSh5vZDIuk7OLG4VM1lgrXZQcY6cxyZyk5WVPRv/A==", "license": "MIT", + "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", @@ -1945,6 +1947,7 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2032,6 +2035,7 @@ "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.48.1", "@typescript-eslint/types": "8.48.1", @@ -2349,6 +2353,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2560,6 +2565,7 @@ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", "license": "MIT", + "peer": true, "dependencies": { "@kurkle/color": "^0.3.0" }, @@ -2824,6 +2830,7 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3300,6 +3307,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -3629,6 +3637,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -3735,6 +3744,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -3752,6 +3762,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3860,6 +3871,7 @@ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -4042,6 +4054,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4118,6 +4131,7 @@ "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -4247,6 +4261,7 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", + "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -4274,6 +4289,7 @@ "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index fa7644f..8bbaa18 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -710,7 +710,9 @@ "gemini_cli_oauth_hint": "Login to Google Gemini CLI service through OAuth flow, automatically obtain and save authentication files.", "gemini_cli_project_id_label": "Google Cloud Project ID (Optional):", "gemini_cli_project_id_placeholder": "Leave blank to auto-select first available project", - "gemini_cli_project_id_hint": "Optional. If not provided, the system will automatically select the first available project from your account.", + "gemini_cli_project_id_hint": "Optional. If not provided, the system will automatically select the first available project from your account. Enter ALL to fetch all projects.", + "gemini_cli_fetch_all_projects_label": "Fetch all projects", + "gemini_cli_fetch_all_projects_hint": "Optional. If not provided, the system will automatically select the first available project from your account.", "gemini_cli_project_id_required": "Please enter a Google Cloud project ID.", "gemini_cli_oauth_url_label": "Authorization URL:", "gemini_cli_open_link": "Open Link", diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index 54257df..127c2bf 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -710,7 +710,9 @@ "gemini_cli_oauth_hint": "通过 OAuth 流程登录 Google Gemini CLI 服务,自动获取并保存认证文件。", "gemini_cli_project_id_label": "Google Cloud 项目 ID (可选):", "gemini_cli_project_id_placeholder": "留空将自动选择第一个可用项目", - "gemini_cli_project_id_hint": "可选填写项目 ID。如不填写,系统将自动选择您账号下的第一个可用项目。", + "gemini_cli_project_id_hint": "可选填写项目 ID。如不填写,系统将自动选择您账号下的第一个可用项目。输入 ALL 可获取全部项目。", + "gemini_cli_fetch_all_projects_label": "获取全部项目", + "gemini_cli_fetch_all_projects_hint": "可选填写项目 ID。如不填写,系统将自动选择您账号下的第一个可用项目。", "gemini_cli_project_id_required": "请填写 Google Cloud 项目 ID。", "gemini_cli_oauth_url_label": "授权链接:", "gemini_cli_open_link": "打开链接", diff --git a/src/pages/OAuthPage.module.scss b/src/pages/OAuthPage.module.scss index 081c2f5..ec29eea 100644 --- a/src/pages/OAuthPage.module.scss +++ b/src/pages/OAuthPage.module.scss @@ -150,6 +150,13 @@ margin-bottom: 0; gap: $spacing-sm; } + + :global(.input:disabled) { + background-color: var(--bg-tertiary); + border-color: var(--border-color); + color: var(--text-tertiary); + cursor: not-allowed; + } } .formItem { diff --git a/src/pages/OAuthPage.tsx b/src/pages/OAuthPage.tsx index 8cb3e34..af97a9f 100644 --- a/src/pages/OAuthPage.tsx +++ b/src/pages/OAuthPage.tsx @@ -153,8 +153,16 @@ export function OAuthPage() { }; const startAuth = async (provider: OAuthProvider) => { - const projectId = provider === 'gemini-cli' ? (states[provider]?.projectId || '').trim() : undefined; - // 项目 ID 现在是可选的,如果不输入将自动选择第一个可用项目 + const geminiState = provider === 'gemini-cli' ? states[provider] : undefined; + const projectId = + provider === 'gemini-cli' + ? (() => { + const rawProjectId = (geminiState?.projectId || '').trim(); + if (!rawProjectId) return undefined; + return rawProjectId.toUpperCase() === 'ALL' ? 'ALL' : rawProjectId; + })() + : undefined; + // 项目 ID 现在是可选的,如果不输入将自动选择第一个可用项目;可切换为获取全部项目 if (provider === 'gemini-cli') { updateProviderState(provider, { projectIdError: undefined }); } From df693be20c6c486c180c2520523f091d02d424b3 Mon Sep 17 00:00:00 2001 From: rensumo <15206641+rensumo@user.noreply.gitee.com> Date: Sat, 21 Feb 2026 11:41:29 +0800 Subject: [PATCH 2/6] chore(i18n): remove unused gemini_cli_fetch_all_projects keys --- src/i18n/locales/en.json | 2 -- src/i18n/locales/zh-CN.json | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 8bbaa18..85406f8 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -711,8 +711,6 @@ "gemini_cli_project_id_label": "Google Cloud Project ID (Optional):", "gemini_cli_project_id_placeholder": "Leave blank to auto-select first available project", "gemini_cli_project_id_hint": "Optional. If not provided, the system will automatically select the first available project from your account. Enter ALL to fetch all projects.", - "gemini_cli_fetch_all_projects_label": "Fetch all projects", - "gemini_cli_fetch_all_projects_hint": "Optional. If not provided, the system will automatically select the first available project from your account.", "gemini_cli_project_id_required": "Please enter a Google Cloud project ID.", "gemini_cli_oauth_url_label": "Authorization URL:", "gemini_cli_open_link": "Open Link", diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index 127c2bf..f9cb8a2 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -711,8 +711,6 @@ "gemini_cli_project_id_label": "Google Cloud 项目 ID (可选):", "gemini_cli_project_id_placeholder": "留空将自动选择第一个可用项目", "gemini_cli_project_id_hint": "可选填写项目 ID。如不填写,系统将自动选择您账号下的第一个可用项目。输入 ALL 可获取全部项目。", - "gemini_cli_fetch_all_projects_label": "获取全部项目", - "gemini_cli_fetch_all_projects_hint": "可选填写项目 ID。如不填写,系统将自动选择您账号下的第一个可用项目。", "gemini_cli_project_id_required": "请填写 Google Cloud 项目 ID。", "gemini_cli_oauth_url_label": "授权链接:", "gemini_cli_open_link": "打开链接", From 868c0151722b448e5c033528053287dc2e93959f Mon Sep 17 00:00:00 2001 From: rensumo Date: Sat, 21 Feb 2026 12:00:30 +0800 Subject: [PATCH 3/6] Update src/pages/OAuthPage.tsx Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- src/pages/OAuthPage.tsx | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/pages/OAuthPage.tsx b/src/pages/OAuthPage.tsx index af97a9f..81a7ee3 100644 --- a/src/pages/OAuthPage.tsx +++ b/src/pages/OAuthPage.tsx @@ -153,15 +153,8 @@ export function OAuthPage() { }; const startAuth = async (provider: OAuthProvider) => { - const geminiState = provider === 'gemini-cli' ? states[provider] : undefined; - const projectId = - provider === 'gemini-cli' - ? (() => { - const rawProjectId = (geminiState?.projectId || '').trim(); - if (!rawProjectId) return undefined; - return rawProjectId.toUpperCase() === 'ALL' ? 'ALL' : rawProjectId; - })() - : undefined; + const rawProjectId = (provider === 'gemini-cli' ? states[provider]?.projectId : undefined)?.trim(); + const projectId = rawProjectId?.toUpperCase() === 'ALL' ? 'ALL' : (rawProjectId || undefined); // 项目 ID 现在是可选的,如果不输入将自动选择第一个可用项目;可切换为获取全部项目 if (provider === 'gemini-cli') { updateProviderState(provider, { projectIdError: undefined }); From f506d33fcd91116256d6f111a77d6b6593df8950 Mon Sep 17 00:00:00 2001 From: rensumo <15206641+rensumo@user.noreply.gitee.com> Date: Sat, 21 Feb 2026 12:00:34 +0800 Subject: [PATCH 4/6] refactor(gemini-cli): simplify project id normalization and disable input while polling --- src/pages/OAuthPage.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/pages/OAuthPage.tsx b/src/pages/OAuthPage.tsx index 81a7ee3..250ffed 100644 --- a/src/pages/OAuthPage.tsx +++ b/src/pages/OAuthPage.tsx @@ -153,9 +153,14 @@ export function OAuthPage() { }; const startAuth = async (provider: OAuthProvider) => { - const rawProjectId = (provider === 'gemini-cli' ? states[provider]?.projectId : undefined)?.trim(); - const projectId = rawProjectId?.toUpperCase() === 'ALL' ? 'ALL' : (rawProjectId || undefined); - // 项目 ID 现在是可选的,如果不输入将自动选择第一个可用项目;可切换为获取全部项目 + const geminiState = provider === 'gemini-cli' ? states[provider] : undefined; + const rawProjectId = provider === 'gemini-cli' ? (geminiState?.projectId || '').trim() : ''; + const projectId = rawProjectId + ? rawProjectId.toUpperCase() === 'ALL' + ? 'ALL' + : rawProjectId + : undefined; + // 项目 ID 可选:留空自动选择第一个可用项目;输入 ALL 获取全部项目 if (provider === 'gemini-cli') { updateProviderState(provider, { projectIdError: undefined }); } @@ -368,6 +373,7 @@ export function OAuthPage() { hint={t('auth_login.gemini_cli_project_id_hint')} value={state.projectId || ''} error={state.projectIdError} + disabled={Boolean(state.polling)} onChange={(e) => updateProviderState(provider.id, { projectId: e.target.value, From 3768b5117dfe7d81cf0ce4e2f69dcee0b2af4c2c Mon Sep 17 00:00:00 2001 From: rensumo <15206641+rensumo@user.noreply.gitee.com> Date: Sun, 22 Feb 2026 15:20:24 +0800 Subject: [PATCH 5/6] chore(lockfile): revert unrelated package-lock.json changes --- package-lock.json | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75cd29f..f9bf2b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,7 +73,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -481,7 +480,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.8.tgz", "integrity": "sha512-XcE9fcnkHCbWkjeKyi0lllwXmBLtyYb5dt89dJyx23I9+LSh5vZDIuk7OLG4VM1lgrXZQcY6cxyZyk5WVPRv/A==", "license": "MIT", - "peer": true, "dependencies": { "@codemirror/state": "^6.5.0", "crelt": "^1.0.6", @@ -1947,7 +1945,6 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2035,7 +2032,6 @@ "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.48.1", "@typescript-eslint/types": "8.48.1", @@ -2353,7 +2349,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2565,7 +2560,6 @@ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", "license": "MIT", - "peer": true, "dependencies": { "@kurkle/color": "^0.3.0" }, @@ -2830,7 +2824,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3307,7 +3300,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -3637,7 +3629,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3744,7 +3735,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3762,7 +3752,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3871,7 +3860,6 @@ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -4054,7 +4042,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4131,7 +4118,6 @@ "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -4261,7 +4247,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", - "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -4289,7 +4274,6 @@ "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } From e5ef41037f4933bd291fe6ae41cdffd4f14fe03a Mon Sep 17 00:00:00 2001 From: Supra4E8C Date: Sun, 22 Feb 2026 16:00:52 +0800 Subject: [PATCH 6/6] chore(i18n): add ALL project hint in ru locale --- src/i18n/locales/ru.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 3232b8f..5d13a27 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -713,7 +713,7 @@ "gemini_cli_oauth_hint": "Выполните вход в сервис Google Gemini CLI через OAuth и автоматически получите/сохраните файлы авторизации.", "gemini_cli_project_id_label": "Google Cloud Project ID (необязательно):", "gemini_cli_project_id_placeholder": "Оставьте пустым, чтобы выбрать первый доступный проект автоматически", - "gemini_cli_project_id_hint": "Необязательно. Если не указано, система автоматически выберет первый доступный проект вашей учётной записи.", + "gemini_cli_project_id_hint": "Необязательно. Если не указано, система автоматически выберет первый доступный проект вашей учётной записи. Введите ALL, чтобы получить все проекты.", "gemini_cli_project_id_required": "Укажите идентификатор проекта Google Cloud.", "gemini_cli_oauth_url_label": "URL авторизации:", "gemini_cli_open_link": "Открыть ссылку",