import { LabIcon } from '@jupyterlab/ui-components'; /** * Brand icons for the agent launcher cards. Most marks are taken verbatim * from `jupyter-ai-contrib/jupyter-ai-acp-client` * (`jupyter_ai_acp_client/static/*.svg`, BSD-3-Clause); Antigravity post-dates * that set, so its mark is the official glyph from `@lobehub/icons-static-svg` * (MIT) — we ship the brand-colored `antigravity-color` variant so Antigravity * reads as a multi-color Google mark. Small adjustments are applied * to play nicely with JupyterLab themes: * - Monochrome marks (Codex, Copilot, Goose) use `currentColor` so they * inherit the surrounding launcher card's text color rather than * hard-coding black, which disappears on the dark theme. * - The Goose mark upstream is rendered on a white rounded rect; we drop * the rect so the silhouette can sit on the launcher card directly. * - SVG ids that would collide if two copies of the same artwork ended up * on the page (gradient/mask/filter defs) are namespaced under * `xtralab-…`. * * Brand-colored icons (Antigravity, Claude, Kiro, Mistral Vibe, OpenCode) keep * their upstream colors; the dark/light contrast of the launcher card behind * them is the same as on `jupyter-ai-acp-client`. * * The Vim and Neovim marks belong to the launcher's "Open" editor tile rather * than the agent grid. They are the brand silhouettes from Simple Icons * (https://simpleicons.org, CC0), each filled with its brand green so the mark * reads on both the light and dark themes. */ const antigravityIcon = new LabIcon({ name: 'xtralab:agent-antigravity', svgstr: ` ` }); const claudeIcon = new LabIcon({ name: 'xtralab:agent-claude', svgstr: ` ` }); const codexIcon = new LabIcon({ name: 'xtralab:agent-codex', svgstr: ` ` }); const copilotIcon = new LabIcon({ name: 'xtralab:agent-copilot', svgstr: ` ` }); const gooseIcon = new LabIcon({ name: 'xtralab:agent-goose', svgstr: ` ` }); const kiroIcon = new LabIcon({ name: 'xtralab:agent-kiro', svgstr: ` ` }); const mistralVibeIcon = new LabIcon({ name: 'xtralab:agent-mistral-vibe', svgstr: ` ` }); const opencodeIcon = new LabIcon({ name: 'xtralab:agent-opencode', svgstr: ` ` }); const neovimIcon = new LabIcon({ name: 'xtralab:editor-neovim', svgstr: ` ` }); const vimIcon = new LabIcon({ name: 'xtralab:editor-vim', svgstr: ` ` }); /** * Built-in icons keyed by the agent's id, used to resolve the icon for an * agent declared without an inline `iconSvg` override (i.e. one of xtralab's * defaults). Custom agents added via settings can either supply their own * `iconSvg` or fall back to the generic terminal icon. */ export const BUILTIN_AGENT_ICONS: Record = { antigravity: antigravityIcon, claude: claudeIcon, codex: codexIcon, copilot: copilotIcon, goose: gooseIcon, kiro: kiroIcon, 'mistral-vibe': mistralVibeIcon, opencode: opencodeIcon }; /** * Built-in icons keyed by the editor's id, used to resolve the icon for a * built-in editor (Neovim, Vim) declared without an inline `iconSvg`. Custom * editors added via settings can supply their own `iconSvg` or fall back to * the generic text-editor icon. */ export const BUILTIN_EDITOR_ICONS: Record = { nvim: neovimIcon, vim: vimIcon };