diff --git a/docs/pr-assets/1161-vision-sidecar-1440.png b/docs/pr-assets/1161-vision-sidecar-1440.png new file mode 100644 index 000000000..84cdcf5da Binary files /dev/null and b/docs/pr-assets/1161-vision-sidecar-1440.png differ diff --git a/gui/src/i18n/de.ts b/gui/src/i18n/de.ts index 1ddf5a014..565de3619 100644 --- a/gui/src/i18n/de.ts +++ b/gui/src/i18n/de.ts @@ -287,6 +287,7 @@ export const de: Record = { "dash.backendAuto": "Automatisch", "dash.backendOpenAI": "OpenAI", "dash.backendAnthropic": "Anthropic", + "dash.backendChat": "Chat API", "dash.sidecarSaved": "Sidecar-Einstellungen gespeichert. Angewendet bei der nächsten Anfrage.", "dash.sidecarSaveFailed": "Sidecar-Einstellungen konnten nicht gespeichert werden.", "dash.injectionLabel": "Sub-Agent-Delegation", diff --git a/gui/src/i18n/en.ts b/gui/src/i18n/en.ts index 2d2fc9660..db225d411 100644 --- a/gui/src/i18n/en.ts +++ b/gui/src/i18n/en.ts @@ -305,6 +305,7 @@ export const en = { "dash.backendAuto": "Auto", "dash.backendOpenAI": "OpenAI", "dash.backendAnthropic": "Anthropic", + "dash.backendChat": "Chat API", "dash.sidecarSaved": "Sidecar settings saved. Applied on the next request.", "dash.sidecarSaveFailed": "Failed to save sidecar settings.", "dash.injectionLabel": "Sub-agent delegation", diff --git a/gui/src/i18n/ja.ts b/gui/src/i18n/ja.ts index d87f58f9d..32a1e125f 100644 --- a/gui/src/i18n/ja.ts +++ b/gui/src/i18n/ja.ts @@ -296,6 +296,7 @@ export const ja: Record = { "dash.backendAuto": "自動", "dash.backendOpenAI": "OpenAI", "dash.backendAnthropic": "Anthropic", + "dash.backendChat": "Chat API", "dash.sidecarSaved": "サイドカー設定を保存しました。次回リクエスト時に適用されます。", "dash.sidecarSaveFailed": "サイドカー設定の保存に失敗しました。", "dash.injectionLabel": "サブエージェント委任", diff --git a/gui/src/i18n/ko.ts b/gui/src/i18n/ko.ts index bbf55e907..03297e3e9 100644 --- a/gui/src/i18n/ko.ts +++ b/gui/src/i18n/ko.ts @@ -291,6 +291,7 @@ export const ko: Record = { "dash.backendAuto": "자동", "dash.backendOpenAI": "OpenAI", "dash.backendAnthropic": "Anthropic", + "dash.backendChat": "Chat API", "dash.sidecarSaved": "사이드카 설정이 저장됐습니다. 다음 요청부터 적용됩니다.", "dash.sidecarSaveFailed": "사이드카 설정 저장에 실패했습니다.", "dash.injectionLabel": "서브에이전트 위임", diff --git a/gui/src/i18n/ru.ts b/gui/src/i18n/ru.ts index 60064fd39..678af8f42 100644 --- a/gui/src/i18n/ru.ts +++ b/gui/src/i18n/ru.ts @@ -296,6 +296,7 @@ export const ru: Record = { "dash.backendAuto": "Авто", "dash.backendOpenAI": "OpenAI", "dash.backendAnthropic": "Anthropic", + "dash.backendChat": "Chat API", "dash.sidecarSaved": "Настройки сайдкара сохранены. Вступят в силу со следующего запроса.", "dash.sidecarSaveFailed": "Не удалось сохранить настройки сайдкара.", "dash.injectionLabel": "Делегирование подагентам", diff --git a/gui/src/i18n/tr.ts b/gui/src/i18n/tr.ts index 32b11d619..e98ec98b3 100644 --- a/gui/src/i18n/tr.ts +++ b/gui/src/i18n/tr.ts @@ -297,6 +297,7 @@ export const tr: Record = { "dash.backendAuto": "Otomatik", "dash.backendOpenAI": "OpenAI", "dash.backendAnthropic": "Anthropic", + "dash.backendChat": "Sohbet API", "dash.sidecarSaved": "Yan araç ayarları kaydedildi. Sonraki istekte uygulanacak.", "dash.sidecarSaveFailed": "Yan araç ayarları kaydedilemedi.", "dash.injectionLabel": "Alt ajan devri", diff --git a/gui/src/i18n/zh-TW.ts b/gui/src/i18n/zh-TW.ts index 3edb42ebb..c40be4973 100644 --- a/gui/src/i18n/zh-TW.ts +++ b/gui/src/i18n/zh-TW.ts @@ -190,6 +190,7 @@ export const zhTW: Record = { "dash.backendAuto": "自動", "dash.backendOpenAI": "OpenAI", "dash.backendAnthropic": "Anthropic", + "dash.backendChat": "聊天 API", "dash.sidecarSaved": "附屬設定已儲存。將在下一個請求時生效。", "dash.sidecarSaveFailed": "儲存附屬設定失敗。", "dash.injectionLabel": "子代理委託", diff --git a/gui/src/i18n/zh.ts b/gui/src/i18n/zh.ts index 899e1fd6c..7e0f2cdbd 100644 --- a/gui/src/i18n/zh.ts +++ b/gui/src/i18n/zh.ts @@ -291,6 +291,7 @@ export const zh: Record = { "dash.backendAuto": "自动", "dash.backendOpenAI": "OpenAI", "dash.backendAnthropic": "Anthropic", + "dash.backendChat": "Chat API", "dash.sidecarSaved": "附属设置已保存。将在下一个请求时生效。", "dash.sidecarSaveFailed": "保存附属设置失败。", "dash.injectionLabel": "子代理委托", diff --git a/gui/src/pages/claude-code-sections.tsx b/gui/src/pages/claude-code-sections.tsx index 70fa292fa..183d23b3f 100644 --- a/gui/src/pages/claude-code-sections.tsx +++ b/gui/src/pages/claude-code-sections.tsx @@ -170,6 +170,7 @@ export function ClaudeCodeSettingsCard({ { value: "auto", label: t("dash.backendAuto") }, { value: "openai", label: t("dash.backendOpenAI") }, { value: "anthropic", label: t("dash.backendAnthropic") }, + ...(key === "visionSidecar" ? [{ value: "chat", label: t("dash.backendChat") }] : []), ]} onChange={value => { // Auto may exist as an empty in-memory draft so the model input diff --git a/gui/src/pages/claude-manual-env.ts b/gui/src/pages/claude-manual-env.ts index bb0c2970d..80373b26e 100644 --- a/gui/src/pages/claude-manual-env.ts +++ b/gui/src/pages/claude-manual-env.ts @@ -4,7 +4,7 @@ * copy-paste shell block is directly unit-testable (tests/claude-manual-env.test.ts). */ -export type SidecarBackend = "openai" | "anthropic"; +export type SidecarBackend = "openai" | "anthropic" | "chat"; export interface SidecarOverride { backend?: SidecarBackend; model?: string } export interface ClaudeManualEnvState { diff --git a/gui/src/pages/dashboard-overview-sections.tsx b/gui/src/pages/dashboard-overview-sections.tsx index 7834743d0..68506689f 100644 --- a/gui/src/pages/dashboard-overview-sections.tsx +++ b/gui/src/pages/dashboard-overview-sections.tsx @@ -515,7 +515,11 @@ export function DashboardSidecarPanels({ d }: { d: Dash }) {