From bd55e75536aaeec57e028ec21ca607e1a08e53d9 Mon Sep 17 00:00:00 2001 From: Local Dev Date: Sun, 25 Oct 2026 10:47:40 +0200 Subject: [PATCH] Theseus 0.3.113: AI picker shows the real brand favicons The ChatGPT, Grok, Gemini and Phind rows in the sidebar AI picker now pull each site's own favicon through the same fetch-and-cache path custom engines already use. The old placeholder color-letter tiles I shipped in 0.3.106 are removed; the engine's sym emoji is the pre-fetch fallback until the real favicon lands (cached per profile after that). Change: fall back from bundledIcon(id) to customFavicon(https:///) for built-in engines when no bundled file exists. Perplexity keeps its existing bundled perplexity.png. --- engine-icons/chatgpt.svg | 1 - engine-icons/gemini.svg | 1 - engine-icons/grok.svg | 1 - engine-icons/phind.svg | 1 - main.js | 7 ++++++- package.json | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 engine-icons/chatgpt.svg delete mode 100644 engine-icons/gemini.svg delete mode 100644 engine-icons/grok.svg delete mode 100644 engine-icons/phind.svg diff --git a/engine-icons/chatgpt.svg b/engine-icons/chatgpt.svg deleted file mode 100644 index 13d93f54..00000000 --- a/engine-icons/chatgpt.svg +++ /dev/null @@ -1 +0,0 @@ -C diff --git a/engine-icons/gemini.svg b/engine-icons/gemini.svg deleted file mode 100644 index 0a1b12d5..00000000 --- a/engine-icons/gemini.svg +++ /dev/null @@ -1 +0,0 @@ -G diff --git a/engine-icons/grok.svg b/engine-icons/grok.svg deleted file mode 100644 index 186c1d7e..00000000 --- a/engine-icons/grok.svg +++ /dev/null @@ -1 +0,0 @@ -G diff --git a/engine-icons/phind.svg b/engine-icons/phind.svg deleted file mode 100644 index af402d66..00000000 --- a/engine-icons/phind.svg +++ /dev/null @@ -1 +0,0 @@ -P diff --git a/main.js b/main.js index 2ea4082a..626ae758 100644 --- a/main.js +++ b/main.js @@ -288,8 +288,13 @@ function isInstalled(id) { return (settings.installedEngines || DEFAULT_ENABLED).includes(id); } function allEngines() { + // Built-in engines without a bundled icon fall back to the same + // fetch-and-cache path custom engines use — pulls the site's own + // /favicon.ico once and remembers it per profile, so the picker shows + // the real brand mark instead of the sym glyph. The emoji sym renders + // first and the real icon replaces it on the next emit after fetch. const list = Object.entries(SEARCH_ENGINES).map(([id, e]) => - ({ id, name: e.name, sym: e.sym, favicon: bundledIcon(id), kind: e.kind || "search", tier: e.tier || "catalog", builtin: true, installed: isInstalled(id), enabled: isEnabled(id) && !e.frozen, frozen: e.frozen || null })); + ({ id, name: e.name, sym: e.sym, favicon: bundledIcon(id) || (e.fav ? customFavicon("https://" + e.fav + "/") : null), kind: e.kind || "search", tier: e.tier || "catalog", builtin: true, installed: isInstalled(id), enabled: isEnabled(id) && !e.frozen, frozen: e.frozen || null })); for (const c of settings.customEngines || []) list.push({ id: c.id, name: c.name, sym: c.sym || "🔍", favicon: customFavicon(c.url), kind: c.kind || "search", tier: "custom", builtin: false, installed: true, enabled: isEnabled(c.id) }); // Apply the user's custom order; ids not in engineOrder keep their natural order (stable sort). diff --git a/package.json b/package.json index 71149242..3ee61024 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "theseus-navigator", - "version": "0.3.112", + "version": "0.3.113", "license": "MPL-2.0", "description": "Theseus Navigator — a browser that follows the thread. By Silent Mode, a Deviant project.", "author": "Silent Mode",