From 1f45cf885c698b74f561ef0bf444a77ec0975365 Mon Sep 17 00:00:00 2001 From: rinseaid Date: Tue, 11 Aug 2026 03:30:10 -0400 Subject: [PATCH] fix(vision): preserve images for text-only routes (#9037) * fix(vision): preserve images for text-only routes * fix(i18n): complete Vietnamese vision bridge copy * fix(ci): drain prerelease tag input --------- Co-authored-by: rinseaid --- scripts/ci/should-promote-latest.sh | 3 + .../ModalityBridgeVisionTab.tsx | 9 +++ src/i18n/messages/en.json | 2 + src/i18n/messages/pt-BR.json | 2 + src/i18n/messages/vi.json | 2 + src/lib/guardrails/visionBridge.ts | 9 ++- src/shared/constants/visionBridgeDefaults.ts | 3 + src/shared/validation/settingsSchemas.ts | 1 + tests/unit/guardrails/visionBridge.test.ts | 40 ++++++++++++ .../unit/ui/visionBridgeSettingsTab.test.tsx | 64 +++++++++++++++++++ tests/unit/visionBridgeDefaults.test.ts | 1 + 11 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 tests/unit/ui/visionBridgeSettingsTab.test.tsx diff --git a/scripts/ci/should-promote-latest.sh b/scripts/ci/should-promote-latest.sh index e118086c88..e1e9745782 100755 --- a/scripts/ci/should-promote-latest.sh +++ b/scripts/ci/should-promote-latest.sh @@ -26,6 +26,9 @@ VERSION="${1:?version required}" # `main` and `next`, plus every pre-release identifier, fail closed here even if # a caller forgets to short-circuit them first. if ! printf '%s' "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then + # Consume the caller's tag stream before exiting. A pre-release decision is + # immediate, but closing stdin early can give a piped producer EPIPE. + cat >/dev/null echo "false" exit 0 fi diff --git a/src/app/(dashboard)/dashboard/settings/components/modalityBridge/ModalityBridgeVisionTab.tsx b/src/app/(dashboard)/dashboard/settings/components/modalityBridge/ModalityBridgeVisionTab.tsx index 9079578bbb..55a2a78591 100644 --- a/src/app/(dashboard)/dashboard/settings/components/modalityBridge/ModalityBridgeVisionTab.tsx +++ b/src/app/(dashboard)/dashboard/settings/components/modalityBridge/ModalityBridgeVisionTab.tsx @@ -19,6 +19,7 @@ interface VisionState { modalityBridgeVisionMode: VisionBridgeMode; modalityBridgeVisionModel: string; modalityBridgeVisionTaskAware: boolean; + visionBridgeRerouteTextOnly: boolean; modalityBridgeVisionPrompt: string; modalityBridgeVisionTimeout: number; modalityBridgeVisionMaxImages: number; @@ -34,6 +35,7 @@ function fromApi(data: Record): VisionState { modalityBridgeVisionMode: runtime.mode, modalityBridgeVisionModel: runtime.model, modalityBridgeVisionTaskAware: runtime.taskAware, + visionBridgeRerouteTextOnly: data.visionBridgeRerouteTextOnly === true, modalityBridgeVisionPrompt: runtime.prompt, modalityBridgeVisionTimeout: runtime.timeoutMs, modalityBridgeVisionMaxImages: runtime.maxImages, @@ -119,6 +121,13 @@ export default function ModalityBridgeVisionTab() { description={t("visionBridgeEnabledDesc")} /> + void update({ visionBridgeRerouteTextOnly: checked })} + label={t("visionBridgeRerouteTextOnlyLabel")} + description={t("visionBridgeRerouteTextOnlyDesc")} + /> +