diff --git a/ui/src/i18n/locales/en.ts b/ui/src/i18n/locales/en.ts index a54f31e583a..dfba6d21fa8 100644 --- a/ui/src/i18n/locales/en.ts +++ b/ui/src/i18n/locales/en.ts @@ -2,6 +2,7 @@ import type { TranslationMap } from "../lib/types.ts"; export const en: TranslationMap = { common: { + version: "Version", health: "Health", ok: "OK", offline: "Offline", diff --git a/ui/src/i18n/locales/pt-BR.ts b/ui/src/i18n/locales/pt-BR.ts index 6c34f2317bf..d7cb780bb5f 100644 --- a/ui/src/i18n/locales/pt-BR.ts +++ b/ui/src/i18n/locales/pt-BR.ts @@ -2,6 +2,7 @@ import type { TranslationMap } from "../lib/types.ts"; export const pt_BR: TranslationMap = { common: { + version: "Versão", health: "Saúde", ok: "OK", offline: "Offline", diff --git a/ui/src/i18n/locales/zh-CN.ts b/ui/src/i18n/locales/zh-CN.ts index e757b0ef8f9..f6c7ce38c85 100644 --- a/ui/src/i18n/locales/zh-CN.ts +++ b/ui/src/i18n/locales/zh-CN.ts @@ -2,6 +2,7 @@ import type { TranslationMap } from "../lib/types.ts"; export const zh_CN: TranslationMap = { common: { + version: "版本", health: "健康状况", ok: "正常", offline: "离线", diff --git a/ui/src/i18n/locales/zh-TW.ts b/ui/src/i18n/locales/zh-TW.ts index d0d8e141f27..52f39b92398 100644 --- a/ui/src/i18n/locales/zh-TW.ts +++ b/ui/src/i18n/locales/zh-TW.ts @@ -2,6 +2,7 @@ import type { TranslationMap } from "../lib/types.ts"; export const zh_TW: TranslationMap = { common: { + version: "版本", health: "健康狀況", ok: "正常", offline: "離線", diff --git a/ui/src/styles/components.css b/ui/src/styles/components.css index 428f5f9a9d5..701da6b2ab9 100644 --- a/ui/src/styles/components.css +++ b/ui/src/styles/components.css @@ -328,6 +328,12 @@ animation: none; } +.statusDot.warn { + background: var(--warn); + box-shadow: 0 0 8px rgba(245, 158, 11, 0.5); + animation: none; +} + /* =========================================== Buttons - Tactile with personality =========================================== */ diff --git a/ui/src/ui/app-render.ts b/ui/src/ui/app-render.ts index d4f8fee89bf..487ba0bbc53 100644 --- a/ui/src/ui/app-render.ts +++ b/ui/src/ui/app-render.ts @@ -136,6 +136,16 @@ function resolveAssistantAvatarUrl(state: AppViewState): string | undefined { } export function renderApp(state: AppViewState) { + const openClawVersion = + (typeof state.hello?.server?.version === "string" && state.hello.server.version.trim()) || + state.updateAvailable?.currentVersion || + t("common.na"); + const availableUpdate = + state.updateAvailable && + state.updateAvailable.latestVersion !== state.updateAvailable.currentVersion + ? state.updateAvailable + : null; + const versionStatusClass = availableUpdate ? "warn" : "ok"; const presenceCount = state.presenceEntries.length; const sessionsCount = state.sessionsResult?.count ?? null; const cronNext = state.cronStatus?.nextWakeAtMs ?? null; @@ -231,6 +241,11 @@ export function renderApp(state: AppViewState) {