Merge origin/main into deferred OpenCode restart branch.

Resolve ProvidersPage and lifecycle conflicts with custom providers and
AppImage ARGV0 stripping. Address review follow-ups: OAuth index helper +
tests, single auth-methods load trigger, shared Google env-alias module with
VS Code parity coverage, and deferred restart for custom provider upsert.

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
This commit is contained in:
Cursor Agent
2026-08-03 13:57:05 +00:00
co-authored by Serhii Dziupin
94 changed files with 5949 additions and 372 deletions
@@ -698,9 +698,8 @@ export const settingsDict = {
"settings.skills.sidebar.toast.skillDeleted": "Навичку \"{name}\" успішно видалено",
"settings.skills.sidebar.toast.deleteSkillFailed": "Не вдалося видалити навичку",
"settings.skills.sidebar.toast.duplicateLoadFailed": "Не вдалося завантажити деталі навичок для дублювання",
"settings.skills.sidebar.toast.renameLoadFailed": "Не вдалося завантажити деталі навичок",
"settings.skills.sidebar.toast.removeOldAfterRenameFailed": "Не вдалося видалити стару навичку після перейменування",
"settings.skills.sidebar.toast.renameFailed": "Не вдалося перейменувати навичку",
"settings.skills.sidebar.toast.skillRenamed": "Навичку перейменовано на \"{name}\"",
"settings.skills.sidebar.deleteDialog.title": "Видалити навичку",
"settings.skills.sidebar.deleteDialog.description": "Ви впевнені, що бажаєте видалити навичку «{name}»?",
"settings.skills.sidebar.renameDialog.title": "Перейменувати навичку",
@@ -1313,7 +1312,58 @@ export const settingsDict = {
"settings.providers.page.connect.selectProviderPlaceholder": "Виберіть провайдера",
"settings.providers.page.connect.searchProvidersPlaceholder": "Пошук...",
"settings.providers.page.connect.noProvidersFound": "Немає провайдерів",
"settings.providers.page.connect.allProvidersConnected": "Усі провайдери підключені.",
"settings.providers.page.custom.optionLabel": "Інший / Власний",
"settings.providers.page.custom.title": "Власний провайдер",
"settings.providers.page.custom.editTitle": "Редагувати власного провайдера",
"settings.providers.page.custom.description": "Додайте OpenAI-сумісного провайдера з базовою URL-адресою, обліковими даними та списком моделей. Зберігається в конфігурації OpenCode й працює в чаті як будь-який інший провайдер.",
"settings.providers.page.custom.field.providerID.label": "ID провайдера",
"settings.providers.page.custom.field.providerID.placeholder": "mij-provider",
"settings.providers.page.custom.field.providerID.info": "Малі літери, цифри, дефіси та підкреслення. Використовується як ID провайдера OpenCode.",
"settings.providers.page.custom.field.name.label": "Відображувана назва",
"settings.providers.page.custom.field.name.placeholder": "Мій провайдер",
"settings.providers.page.custom.field.name.info": "Показується у виборі провайдера та моделі.",
"settings.providers.page.custom.field.baseURL.label": "Базова URL-адреса",
"settings.providers.page.custom.field.baseURL.placeholder": "https://api.example.com/v1",
"settings.providers.page.custom.field.baseURL.info": "Базова URL-адреса OpenAI-сумісного API. Має починатися з http:// або https://.",
"settings.providers.page.custom.field.apiKey.label": "API-ключ",
"settings.providers.page.custom.field.apiKey.placeholder": "sk-... або {env:VAR_NAME}",
"settings.providers.page.custom.field.apiKey.info": "Зберігається в автентифікації OpenCode, не OpenChamber. Використовуйте {env:VAR_NAME}, щоб читати ключ зі змінної середовища.",
"settings.providers.page.custom.field.apiKey.editInfo": "Залиште порожнім, щоб зберегти наявні облікові дані, або введіть новий ключ / {env:VAR_NAME}.",
"settings.providers.page.custom.field.apiKey.editPlaceholder": "Залиште порожнім, щоб зберегти наявний ключ",
"settings.providers.page.custom.models.title": "Моделі",
"settings.providers.page.custom.models.idLabel": "ID моделі",
"settings.providers.page.custom.models.idPlaceholder": "gpt-4o",
"settings.providers.page.custom.models.nameLabel": "Назва моделі",
"settings.providers.page.custom.models.namePlaceholder": "GPT-4o",
"settings.providers.page.custom.models.add": "Додати модель",
"settings.providers.page.custom.models.remove": "Видалити модель",
"settings.providers.page.custom.headers.title": "Заголовки",
"settings.providers.page.custom.headers.description": "Необов’язкові заголовки запиту, що надсилаються з кожним викликом.",
"settings.providers.page.custom.headers.keyLabel": "Назва заголовка",
"settings.providers.page.custom.headers.keyPlaceholder": "X-Custom-Header",
"settings.providers.page.custom.headers.valueLabel": "Значення заголовка",
"settings.providers.page.custom.headers.valuePlaceholder": "значення",
"settings.providers.page.custom.headers.add": "Додати заголовок",
"settings.providers.page.custom.headers.remove": "Видалити заголовок",
"settings.providers.page.custom.actions.back": "Назад",
"settings.providers.page.custom.actions.save": "Зберегти провайдера",
"settings.providers.page.custom.actions.update": "Оновити провайдера",
"settings.providers.page.custom.error.providerID.required": "ID провайдера обов’язковий",
"settings.providers.page.custom.error.providerID.format": "Використовуйте малі літери, цифри, дефіси або підкреслення",
"settings.providers.page.custom.error.providerID.exists": "Провайдер із цим ID уже підключено",
"settings.providers.page.custom.error.name.required": "Відображувана назва обов’язкова",
"settings.providers.page.custom.error.baseURL.required": "Базова URL-адреса обов’язкова",
"settings.providers.page.custom.error.baseURL.format": "Базова URL-адреса має починатися з http:// або https://",
"settings.providers.page.custom.error.required": "Обов’язково",
"settings.providers.page.custom.error.duplicate": "Дублікат",
"settings.providers.page.custom.error.apiKey.required": "Потрібен API-ключ або {env:VAR_NAME}",
"settings.providers.page.custom.authFailure.configAfterAuth": "Облікові дані збережено, але конфігурацію провайдера — ні. Виправте помилку й спробуйте знову або від’єднайте, щоб очистити часткове збереження.",
"settings.providers.page.auth.title": "Аутентифікація",
"settings.providers.page.auth.loadingMethods": "Завантаження методів автентифікації...",
"settings.providers.page.auth.apiKeyLabel": "API ключ",
@@ -1322,6 +1372,10 @@ export const settingsDict = {
"settings.providers.page.auth.oauthMethodFallback": "OAuth метод {index}",
"settings.providers.page.auth.pasteAuthorizationCodePlaceholder": "Вставити код авторизації",
"settings.providers.page.auth.connected": "Підключено",
"settings.providers.page.auth.incomplete": "Облікові дані відсутні",
"settings.providers.page.auth.incompleteHint": "· Додайте API-ключ або {env:VAR} перед використанням цього провайдера в чаті",
"settings.providers.page.auth.useReconnectHint": "· Скористайтеся повторним підключенням, щоб оновити облікові дані",
"settings.providers.page.connectionDetails.title": "Деталі підключення",
"settings.providers.page.connectionDetails.configuredIn": "Налаштовано в:",
@@ -1351,6 +1405,8 @@ export const settingsDict = {
"settings.providers.page.actions.complete": "Завершити",
"settings.providers.page.actions.hide": "Сховати",
"settings.providers.page.actions.reconnect": "Перепідключити",
"settings.providers.page.actions.edit": "Редагувати",
"settings.providers.page.actions.disconnecting": "Відключення...",
"settings.providers.page.actions.disconnect": "Відключити",
"settings.providers.page.actions.hideAll": "Сховати все",
@@ -1371,6 +1427,8 @@ export const settingsDict = {
"settings.providers.page.toast.deviceCodeCopyFailed": "Не вдалося скопіювати код пристрою",
"settings.providers.page.toast.providerDisconnected": "Провайдера відключено",
"settings.providers.page.toast.providerDisconnectFailed": "Не вдалося відключити провайдера",
"settings.providers.page.toast.customProviderSaved": "{provider} підключено",
"settings.providers.page.toast.customProviderSaveFailed": "Не вдалося зберегти власного провайдера",
"settings.mcp.page.empty.selectServer": "Виберіть MCP сервер на бічній панелі",
"settings.mcp.page.empty.addNewOne": "або додати новий",
"settings.mcp.page.header.newServer": "Новий сервер MCP",