Skip to content
cccskills
FreePublished on GitHub

add-icon-mapping

Connect provider, model, or agent IDs to existing icons in lobe-icons. Use it to add or adjust keyword mappings when an item shows the default fallback icon, including keeping the main and React Native configurations aligned.

OriginalShow the original description

Add or modify icon keyword mappings for providers, models, or agents in lobe-icons. Use this whenever a task involves mapping a provider/model id to an icon, adding a new entry to ModelProvider enum or providerMappings/modelMappings/agentMappings, or fixing a provider/model that renders the fallback (default) icon in LobeHub. Trigger even if the request only says "add icon for X provider" or references a Linear issue about icon keyword mapping — the actual icon component usually already exists; only the mapping is missing.

lobehub/lobe-icons2,646 stars(GitHub 2,646 + cccskills 0)
Works withLinearOpenAI

Run score Not tested

See how to install

Good for

  • Map a new provider ID to its existing brand icon
  • Fix a model that displays the fallback icon
  • Add model or agent keyword matching rules
  • Keep provider mappings aligned in React Native

Files included (1)

  • SKILL.md5.9 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Add icon keyword mapping

lobe-icons ships icon components (e.g. src/Grok/) and, separately, mapping tables that resolve a provider/model/agent id string to one of those components. A provider showing the fallback icon in LobeHub almost always means the mapping entry is missing, not the icon itself. Always check src/<Name>/ first — if the brand icon already exists, the task is only wiring it up.

Where mappings live (edit ALL that apply)

The react-native package duplicates the main package's config files. Forgetting the RN package is the most common mistake — the main package edits compile and pass review on their own.

WhatMain packagereact-native package
Provider enumsrc/features/providerEnum.tspackages/react-native/src/features/providerEnum.ts
Provider mappingssrc/features/providerConfig.tsxpackages/react-native/src/features/providerConfig.tsx
Model mappingssrc/features/modelConfig.tspackages/react-native/src/features/modelConfig.ts
Agent mappingssrc/features/agentConfig.ts— (main package only)

The static-* workspace packages (static-svg, static-png, static-webp, static-avatar) are generated from icon components and contain no mapping logic — never edit them for a mapping change.

Matching semantics (they differ!)

  • ProviderIcon: exact match — keyword.toLowerCase() === provider. A keyword like xai will NOT match supergrok; every provider id needs its own keyword.
  • ModelIcon / AgentIcon: each keyword is a case-insensitive RegExp tested against the model id, and the first matching entry in the array wins. Consequences:
    • Substrings match: keyword gpt-4 matches chatgpt-4o-latest.
    • Order matters: put more specific entries before general ones (see how gpt-oss sits before the broad OpenAI entry).
    • Regex syntax is live: ^o1, /o1, o1- are anchored patterns, and characters like . or + in a keyword are regex metacharacters — escape or anchor deliberately.

Provider mapping workflow

  1. Enum — add to ModelProvider in providerEnum.ts, alphabetically sorted, value lowercase:
    SuperGrok = 'supergrok',
    
  2. Import — in providerConfig.tsx, import the icon (alphabetical order). Main package uses the @/ alias, RN uses relative paths:
    import Grok from '@/Grok';          // main package
    import Grok from '../icons/Grok';   // react-native package
    
  3. Mapping entry — add to providerMappings, near related entries:
    { Icon: Grok, keywords: [ModelProvider.SuperGrok] },
    
  4. Repeat 1–3 in the react-native package. The RN enum is RNModelProvider inside its own providerEnum.ts; entry shape is identical.

New entry vs appending a keyword

Two established patterns for derived/subscription providers:

  • Append to an existing entry when the new provider should look identical to its parent — precedent: keywords: [ModelProvider.Moonshot, ModelProvider.KimiCodingPlan], [ModelProvider.ZhiPu, ModelProvider.GLMCodingPlan].
  • New entry with a different brand icon when a more recognizable brand exists and visual distinction from the parent provider helps — precedent: supergrok → Grok icon instead of appending to the XAI entry.

Prefer whichever the issue/requester specifies; otherwise pick based on whether users would benefit from telling the two providers apart in a list.

Verification

bun run type-check                             # repo root
cd packages/react-native && bun run type-check # RN package has its own tsconfig

If dependencies aren't installed, the RN type-check reports pre-existing Cannot find module 'react-native' / 'react-native-svg' errors — those are environmental, not caused by your change. Only errors mentioning your new enum member or the config files matter; don't install dependencies just to silence them (pnpm install creates lockfile noise, see below).

Type-check catches typos but not a missed mapping — grep is the completeness check:

grep -rn "supergrok" src packages/react-native/src

Expect hits in both enum files and both config files (2×2). For a model/agent keyword, quickly sanity-check the regex in isolation: new RegExp(keyword, 'i').test(modelId).

There are no committed tests and the repo's vitest.config.ts alias ('@': './src', relative) does not resolve transitive @/ imports — a render test needs a throwaway config with an absolute-path alias and server.deps.inline: [/@lobehub/]. Usually type-check + grep is sufficient.

Commit pitfalls

  • .npmrc sets lockfile=false — the repo commits no lockfile. Running pnpm install generates pnpm-lock.yaml and may inject a placeholder allowBuilds: block into pnpm-workspace.yaml. Delete the lockfile and git checkout -- pnpm-workspace.yaml before committing.
  • The pre-commit hook runs lint-staged and can sweep unintended files into the commit. After committing, check git show --stat HEAD — a mapping change should touch only the 2–4 config files.
  • Commit style is gitmoji + conventional: ✨ feat: add Grok icon mapping for supergrok provider.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Build a product or documentation landing page by arranging @lobehub/ui/awesome components for the hero, live examples, feature sections, and install call to action. Wire links and theming, then review the page for responsive layout and accessibility preferences.

  • Create a product landing page from existing components
  • Build a home page for a lobedocs documentation site
  • Add live component examples and feature sections
lobehub/lobe-icons2.6KUpdated Oct 26, 2026

using-docs-kit

FreeSummary

Set up and write a static documentation site with @lobehub/docs-kit and its lobedocs CLI. Create component pages with live demos and API tables, guides, a home page, and changelog, while following the kit’s build validations.

  • Set up a docs site with lobedocs
  • Write component pages with demos and API tables
  • Migrate existing documentation from dumi
lobehub/lobe-icons2.6KUpdated Oct 26, 2026

See all skills by lobehub

Report a problem with this skill