NousResearch/hermes-agent · error
"${result.extensionId}" does not contribute any color themes
Error message
"${result.extensionId}" does not contribute any color themes. What it means
Thrown by buildThemeFromMarketplace when a successfully downloaded VS Code Marketplace extension contributes zero color themes (result.themes is empty). The installer expects the extension manifest to list at least one theme contribution; an extension that ships icons, snippets, or language packs only produces an empty array and this error.
Source
Thrown at apps/desktop/src/themes/install.ts:40
const { theme } = convertVscodeColorTheme(raw, opts)
return installUserTheme(theme)
}
/**
* Fold every color theme an extension contributes into ONE desktop theme family.
*
* Many extensions ship a light *and* a dark variant (GitHub, Solarized, Winter
* is Coming…). Rather than install them as separate flat entries — which made
* the light/dark toggle a no-op and let "install in dark mode" land on the light
* variant — we map the first light variant onto `colors` and the first dark
* variant onto `darkColors`. The result is a single picker entry whose light/dark
* toggle switches between the real variants. A single-variant extension fills
* both slots with its one palette (the toggle is a no-op, as it must be).
*/
export function buildThemeFromMarketplace(result: DesktopMarketplaceThemeResult): DesktopTheme {
if (!result.themes.length) {
throw new Error(`"${result.extensionId}" does not contribute any color themes.`)
}
const variants = result.themes.map(file => {
const raw = parseVscodeTheme(file.contents)
const label = file.label || raw.name || result.displayName
const { mode, theme } = convertVscodeColorTheme(raw, { label, source: result.extensionId })
return { mode, palette: theme.colors, terminal: theme.terminal }
})
const fallback = variants[0]
const light = variants.find(variant => variant.mode === 'light') ?? fallback
const dark = variants.find(variant => variant.mode === 'dark') ?? fallback
// The terminal ANSI palette tracks the painted variant the same way colors do
// (light → terminal, dark → darkTerminal); each falls back to the other so a
// single-variant import still themes the terminal in both modes.
const terminal = light.terminal ?? dark.terminalView on GitHub (pinned to c896c09c42)
Solutions
- Verify on the Marketplace page that the extension actually ships color themes (not just icon themes or tools).
- Use the exact publisher.extension id of a known color theme (e.g. 'GitHub.github-vscode-theme').
- If the extension should have themes, check the fetchMarketplace result — the API response may be truncated or the manifest unreadable; retry after app update.
Defensive patterns
Strategy: validation
Validate before calling
function isColorThemeExtension(result: DesktopMarketplaceThemeResult): boolean {
return Array.isArray(result.themes) && result.themes.length > 0
} Type guard
function hasThemes(result: DesktopMarketplaceThemeResult): result is DesktopMarketplaceThemeResult & { themes: [ThemeFile, ...ThemeFile[]] } {
return result.themes.length > 0
} Try / catch
try {
await installVscodeThemeFromMarketplace(id)
} catch (e) {
if (e instanceof Error && e.message.includes('does not contribute any color themes'))
showHint('Pick an extension that ships color themes')
else throw e
} Prevention
- Filter the Marketplace picker to extensions whose package.json contributes.themes is non-empty.
- Show extension type (color theme vs icon theme) before install.
- Prefer curated/pinned theme extension ids in the UI.
When it happens
Trigger: installVscodeThemeFromMarketplace(id) with a valid 'publisher.extension' id for an extension whose package.json has no contributes.themes entries (or whose themes the fetcher could not read).
Common situations: Installing an icon theme (e.g. Material Icon Theme) or a product extension (Prettier, ESLint) by id, mistaking it for a color theme; or a Marketplace metadata change that drops theme contribution info.
Related errors
- Expected a Marketplace id like "publisher.extension".
- Theme file is not a JSON object.
- Theme has no "colors" map — not a VS Code color theme.
- Extension "${id}" was not found on the Marketplace.
- Extension "${id}" has no published versions.
AI-assisted analysis of NousResearch/hermes-agent@c896c09c42 (2026-08-14).
Data as JSON: /api/errors/c580191d1883d2d5.
Report an issue: GitHub.