From 47f1f30b7c5b83bc66dac69a262576fef3d58e5b Mon Sep 17 00:00:00 2001 From: John McLaren Date: Thu, 23 Jul 2026 12:17:37 -0400 Subject: [PATCH] Surface Copilot and Gemini CLI in the settings/provider UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR 3 registers the Copilot and Gemini CLI drivers server-side (disabled by default). This wires them into upstream's existing, registry-driven settings and provider UI so users can actually see, add, and enable them: - session-logic.ts: add copilot + geminiCli to PROVIDER_OPTIONS (available, "new" badge) so they appear in the add-provider wizard and pickers. - providerIconUtils.ts: map copilot -> GithubCopilotIcon, geminiCli -> Gemini (both icons already ship in Icons.tsx). - contracts/model.ts: PROVIDER_DISPLAY_NAMES entries ("GitHub Copilot", "Gemini CLI") so they render with proper names instead of raw kinds. Note: aadit's "Settings & appearance UI" (fork section C — theme, accent colors, custom models, connection settings) is NOT ported: upstream has since built an equivalent-or-better system (useTheme light/dark/system, ProviderAccentColorPicker, AddProviderInstanceDialog wizard, ProviderModels section). This PR is only the residual work to surface the two new providers in it. Verification (node 24 + pnpm 11): contracts + web typecheck clean; session-logic + settings/wizard tests pass (71 tests); fmt + lint clean. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_011AKPoXHMgPRGfXik2GDzBp --- apps/web/src/components/chat/providerIconUtils.ts | 13 ++++++++++++- apps/web/src/session-logic.ts | 12 ++++++++++++ packages/contracts/src/model.ts | 4 ++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/apps/web/src/components/chat/providerIconUtils.ts b/apps/web/src/components/chat/providerIconUtils.ts index f9e7a7007168..fec76e8fd53f 100644 --- a/apps/web/src/components/chat/providerIconUtils.ts +++ b/apps/web/src/components/chat/providerIconUtils.ts @@ -1,5 +1,14 @@ import { ProviderDriverKind } from "@t3tools/contracts"; -import { ClaudeAI, CursorIcon, GrokIcon, Icon, OpenAI, OpenCodeIcon } from "../Icons"; +import { + ClaudeAI, + CursorIcon, + Gemini, + GithubCopilotIcon, + GrokIcon, + Icon, + OpenAI, + OpenCodeIcon, +} from "../Icons"; import { PROVIDER_OPTIONS } from "../../session-logic"; export const PROVIDER_ICON_BY_PROVIDER: Partial> = { @@ -8,6 +17,8 @@ export const PROVIDER_ICON_BY_PROVIDER: Partial [ProviderDriverKind.make("opencode")]: OpenCodeIcon, [ProviderDriverKind.make("cursor")]: CursorIcon, [ProviderDriverKind.make("grok")]: GrokIcon, + [ProviderDriverKind.make("copilot")]: GithubCopilotIcon, + [ProviderDriverKind.make("geminiCli")]: Gemini, }; function isAvailableProviderOption(option: (typeof PROVIDER_OPTIONS)[number]): option is { diff --git a/apps/web/src/session-logic.ts b/apps/web/src/session-logic.ts index 5d5051f748e7..96a0204a4032 100644 --- a/apps/web/src/session-logic.ts +++ b/apps/web/src/session-logic.ts @@ -51,6 +51,18 @@ export const PROVIDER_OPTIONS: Array<{ available: true, pickerSidebarBadge: "new", }, + { + value: ProviderDriverKind.make("copilot"), + label: "Copilot", + available: true, + pickerSidebarBadge: "new", + }, + { + value: ProviderDriverKind.make("geminiCli"), + label: "Gemini CLI", + available: true, + pickerSidebarBadge: "new", + }, ]; export type WorkLogToolLifecycleStatus = diff --git a/packages/contracts/src/model.ts b/packages/contracts/src/model.ts index 8c74c13b89b4..a0e195a3c0ef 100644 --- a/packages/contracts/src/model.ts +++ b/packages/contracts/src/model.ts @@ -132,6 +132,8 @@ const CLAUDE_DRIVER_KIND = ProviderDriverKind.make("claudeAgent"); const CURSOR_DRIVER_KIND = ProviderDriverKind.make("cursor"); const GROK_DRIVER_KIND = ProviderDriverKind.make("grok"); const OPENCODE_DRIVER_KIND = ProviderDriverKind.make("opencode"); +const COPILOT_DRIVER_KIND = ProviderDriverKind.make("copilot"); +const GEMINI_CLI_DRIVER_KIND = ProviderDriverKind.make("geminiCli"); export const DEFAULT_MODEL = "gpt-5.6-sol"; @@ -218,4 +220,6 @@ export const PROVIDER_DISPLAY_NAMES: Partial> [CURSOR_DRIVER_KIND]: "Cursor", [GROK_DRIVER_KIND]: "Grok", [OPENCODE_DRIVER_KIND]: "OpenCode", + [COPILOT_DRIVER_KIND]: "GitHub Copilot", + [GEMINI_CLI_DRIVER_KIND]: "Gemini CLI", };