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
@@ -731,9 +731,8 @@ export const settingsDict = {
'settings.skills.sidebar.toast.skillDeleted': 'Skill "{name}" を削除しました',
'settings.skills.sidebar.toast.deleteSkillFailed': 'Skill の削除に失敗しました',
'settings.skills.sidebar.toast.duplicateLoadFailed': '複製用の Skill 詳細の読み込みに失敗しました',
'settings.skills.sidebar.toast.renameLoadFailed': 'Skill 詳細の読み込みに失敗しました',
'settings.skills.sidebar.toast.removeOldAfterRenameFailed': '名前変更後に古い Skill の削除に失敗しました',
'settings.skills.sidebar.toast.renameFailed': 'Skill の名前変更に失敗しました',
'settings.skills.sidebar.toast.skillRenamed': 'Skill の名前を「{name}」に変更しました',
'settings.skills.sidebar.deleteDialog.title': 'Skill を削除',
'settings.skills.sidebar.deleteDialog.description': 'Skill "{name}" を削除してもよろしいですか?',
'settings.skills.sidebar.renameDialog.title': 'Skill の名前変更',
@@ -1346,7 +1345,58 @@ export const settingsDict = {
'settings.providers.page.connect.selectProviderPlaceholder': 'Provider を選択',
'settings.providers.page.connect.searchProvidersPlaceholder': '検索...',
'settings.providers.page.connect.noProvidersFound': 'Provider が見つかりません',
'settings.providers.page.connect.allProvidersConnected': 'すべての Provider が接続されています。',
'settings.providers.page.custom.optionLabel': 'その他 / カスタム',
'settings.providers.page.custom.title': 'カスタムプロバイダー',
'settings.providers.page.custom.editTitle': 'カスタムプロバイダーを編集',
'settings.providers.page.custom.description': 'ベース URL・認証情報・モデル一覧を指定して、OpenAI 互換プロバイダーを追加します。OpenCode 設定に保存され、他のプロバイダーと同様にチャットで使えます。',
'settings.providers.page.custom.field.providerID.label': 'プロバイダー ID',
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
'settings.providers.page.custom.field.providerID.info': '小文字・数字・ハイフン・アンダースコア。OpenCode のプロバイダー ID として使われます。',
'settings.providers.page.custom.field.name.label': '表示名',
'settings.providers.page.custom.field.name.placeholder': 'My Provider',
'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': 'OpenAI 互換 API のベース URL。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': 'OpenChamber ではなく OpenCode の認証に保存されます。環境変数から読む場合は {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': 'value',
'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 キー',
@@ -1355,6 +1405,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': '設定場所:',
@@ -1384,6 +1438,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': 'すべて非表示',
@@ -1404,6 +1460,8 @@ export const settingsDict = {
'settings.providers.page.toast.deviceCodeCopyFailed': 'デバイスコードのコピーに失敗しました',
'settings.providers.page.toast.providerDisconnected': 'Provider を切断しました',
'settings.providers.page.toast.providerDisconnectFailed': 'Provider の切断に失敗しました',
'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 サーバー',