From def84feb446428e6f7d251cd4b12ff4660b2348e Mon Sep 17 00:00:00 2001 From: RCD <90105158+Finesssee@users.noreply.github.com> Date: Sun, 11 Oct 2026 22:12:04 +0700 Subject: [PATCH] Add CLI dashboard icons for the 7 new providers Embed the upstream v0.73.0 ProviderIcon SVGs for clawrouter, ibmbob, langdock, lithosai, museai, synthetic and workbuddy so the serve dashboard shows their brand icons instead of the neutral dot. --- rust/src/cli/serve/dashboard/icons.rs | 53 +++++++++++++++++-- .../icons/ProviderIcon-clawrouter.svg | 7 +++ .../dashboard/icons/ProviderIcon-ibmbob.svg | 23 ++++++++ .../dashboard/icons/ProviderIcon-langdock.svg | 4 ++ .../dashboard/icons/ProviderIcon-lithosai.svg | 1 + .../dashboard/icons/ProviderIcon-museai.svg | 3 ++ .../icons/ProviderIcon-synthetic.svg | 14 +++++ .../icons/ProviderIcon-workbuddy.svg | 1 + 8 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 rust/src/cli/serve/dashboard/icons/ProviderIcon-clawrouter.svg create mode 100644 rust/src/cli/serve/dashboard/icons/ProviderIcon-ibmbob.svg create mode 100644 rust/src/cli/serve/dashboard/icons/ProviderIcon-langdock.svg create mode 100644 rust/src/cli/serve/dashboard/icons/ProviderIcon-lithosai.svg create mode 100644 rust/src/cli/serve/dashboard/icons/ProviderIcon-museai.svg create mode 100644 rust/src/cli/serve/dashboard/icons/ProviderIcon-synthetic.svg create mode 100644 rust/src/cli/serve/dashboard/icons/ProviderIcon-workbuddy.svg diff --git a/rust/src/cli/serve/dashboard/icons.rs b/rust/src/cli/serve/dashboard/icons.rs index cd95719095..25fb521cb2 100644 --- a/rust/src/cli/serve/dashboard/icons.rs +++ b/rust/src/cli/serve/dashboard/icons.rs @@ -4,7 +4,7 @@ //! route as static brand art — no account data, so no auth; immutable per //! binary, so aggressively cacheable (`Cache-Control: public, max-age=86400, //! immutable`, upstream's exact policy). Assets are the pinned upstream SVGs -//! (`upstream v0.48.0: Sources/CodexBar/Resources/ProviderIcon-*.svg`), embedded +//! (`upstream v0.48.0+: Sources/CodexBar/Resources/ProviderIcon-*.svg`), embedded //! with `include_bytes!` so the CLI ships as a standalone binary, mirroring //! upstream's reason for embedding (`CLIServeProviderIcons`). //! Upstream regenerates its table with `Scripts/generate_serve_provider_icons.py`; @@ -97,6 +97,10 @@ static ICONS: &[(&str, &[u8])] = &[ "ProviderIcon-claude", include_bytes!("icons/ProviderIcon-claude.svg"), ), + ( + "ProviderIcon-clawrouter", + include_bytes!("icons/ProviderIcon-clawrouter.svg"), + ), ( "ProviderIcon-clinepass", include_bytes!("icons/ProviderIcon-clinepass.svg"), @@ -173,6 +177,10 @@ static ICONS: &[(&str, &[u8])] = &[ "ProviderIcon-huggingface", include_bytes!("icons/ProviderIcon-huggingface.svg"), ), + ( + "ProviderIcon-ibmbob", + include_bytes!("icons/ProviderIcon-ibmbob.svg"), + ), ( "ProviderIcon-jetbrains", include_bytes!("icons/ProviderIcon-jetbrains.svg"), @@ -189,10 +197,18 @@ static ICONS: &[(&str, &[u8])] = &[ "ProviderIcon-kiro", include_bytes!("icons/ProviderIcon-kiro.svg"), ), + ( + "ProviderIcon-langdock", + include_bytes!("icons/ProviderIcon-langdock.svg"), + ), ( "ProviderIcon-litellm", include_bytes!("icons/ProviderIcon-litellm.svg"), ), + ( + "ProviderIcon-lithosai", + include_bytes!("icons/ProviderIcon-lithosai.svg"), + ), ( "ProviderIcon-llmman", include_bytes!("icons/ProviderIcon-llmman.svg"), @@ -225,6 +241,10 @@ static ICONS: &[(&str, &[u8])] = &[ "ProviderIcon-muse", include_bytes!("icons/ProviderIcon-muse.svg"), ), + ( + "ProviderIcon-museai", + include_bytes!("icons/ProviderIcon-museai.svg"), + ), ( "ProviderIcon-neuralwatt", include_bytes!("icons/ProviderIcon-neuralwatt.svg"), @@ -289,6 +309,10 @@ static ICONS: &[(&str, &[u8])] = &[ "ProviderIcon-sub2api", include_bytes!("icons/ProviderIcon-sub2api.svg"), ), + ( + "ProviderIcon-synthetic", + include_bytes!("icons/ProviderIcon-synthetic.svg"), + ), ( "ProviderIcon-t3chat", include_bytes!("icons/ProviderIcon-t3chat.svg"), @@ -313,6 +337,10 @@ static ICONS: &[(&str, &[u8])] = &[ "ProviderIcon-windsurf", include_bytes!("icons/ProviderIcon-windsurf.svg"), ), + ( + "ProviderIcon-workbuddy", + include_bytes!("icons/ProviderIcon-workbuddy.svg"), + ), ( "ProviderIcon-xai", include_bytes!("icons/ProviderIcon-xai.svg"), @@ -386,8 +414,21 @@ mod tests { "/icons/ProviderIcon-qwencloud.svg" ); assert!(obj.get("openaiapi").is_none(), "no asset -> no entry"); - assert!(obj.get("clawrouter").is_none(), "no such local provider"); - assert!(obj.get("synthetic").is_none(), "no such local provider"); + for id in [ + "clawrouter", + "ibmbob", + "langdock", + "lithosai", + "museai", + "synthetic", + "workbuddy", + ] { + assert_eq!( + obj.get(id).unwrap(), + &format!("/icons/ProviderIcon-{id}.svg"), + "{id}" + ); + } let keys: Vec<&String> = obj.keys().collect(); let mut sorted = keys.clone(); sorted.sort(); @@ -408,7 +449,11 @@ mod tests { Some("ProviderIcon-qwencloud") ); assert_eq!(icon_resource_for("codex"), Some("ProviderIcon-codex")); - assert!(icon_resource_for("clawrouter").is_none()); + assert_eq!( + icon_resource_for("clawrouter"), + Some("ProviderIcon-clawrouter") + ); + assert!(icon_resource_for("openaiapi").is_none()); assert!(icon_resource_for("../etc").is_none()); } } diff --git a/rust/src/cli/serve/dashboard/icons/ProviderIcon-clawrouter.svg b/rust/src/cli/serve/dashboard/icons/ProviderIcon-clawrouter.svg new file mode 100644 index 0000000000..f8718f87e9 --- /dev/null +++ b/rust/src/cli/serve/dashboard/icons/ProviderIcon-clawrouter.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/rust/src/cli/serve/dashboard/icons/ProviderIcon-ibmbob.svg b/rust/src/cli/serve/dashboard/icons/ProviderIcon-ibmbob.svg new file mode 100644 index 0000000000..70367244e9 --- /dev/null +++ b/rust/src/cli/serve/dashboard/icons/ProviderIcon-ibmbob.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rust/src/cli/serve/dashboard/icons/ProviderIcon-langdock.svg b/rust/src/cli/serve/dashboard/icons/ProviderIcon-langdock.svg new file mode 100644 index 0000000000..6d80ebd4cc --- /dev/null +++ b/rust/src/cli/serve/dashboard/icons/ProviderIcon-langdock.svg @@ -0,0 +1,4 @@ + + + + diff --git a/rust/src/cli/serve/dashboard/icons/ProviderIcon-lithosai.svg b/rust/src/cli/serve/dashboard/icons/ProviderIcon-lithosai.svg new file mode 100644 index 0000000000..326e97efaa --- /dev/null +++ b/rust/src/cli/serve/dashboard/icons/ProviderIcon-lithosai.svg @@ -0,0 +1 @@ + diff --git a/rust/src/cli/serve/dashboard/icons/ProviderIcon-museai.svg b/rust/src/cli/serve/dashboard/icons/ProviderIcon-museai.svg new file mode 100644 index 0000000000..e20c8275b9 --- /dev/null +++ b/rust/src/cli/serve/dashboard/icons/ProviderIcon-museai.svg @@ -0,0 +1,3 @@ + + + diff --git a/rust/src/cli/serve/dashboard/icons/ProviderIcon-synthetic.svg b/rust/src/cli/serve/dashboard/icons/ProviderIcon-synthetic.svg new file mode 100644 index 0000000000..b50f4da2cc --- /dev/null +++ b/rust/src/cli/serve/dashboard/icons/ProviderIcon-synthetic.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/rust/src/cli/serve/dashboard/icons/ProviderIcon-workbuddy.svg b/rust/src/cli/serve/dashboard/icons/ProviderIcon-workbuddy.svg new file mode 100644 index 0000000000..2097127bcd --- /dev/null +++ b/rust/src/cli/serve/dashboard/icons/ProviderIcon-workbuddy.svg @@ -0,0 +1 @@ +