@@ -74,6 +74,7 @@ import { gitRemoveWorktreeMutationOptions } from "../lib/gitReactQuery";
7474import {
7575 ArchiveIcon ,
7676 ChevronDownIcon ,
77+ ExternalLinkIcon ,
7778 PlusIcon ,
7879 RotateCcwIcon ,
7980 Undo2Icon ,
@@ -153,6 +154,10 @@ type InstallBinarySettingsKey =
153154type InstallProviderSettings = {
154155 provider : ProviderKind ;
155156 title : string ;
157+ docs : ReadonlyArray < {
158+ label : string ;
159+ href : string ;
160+ } > ;
156161 binaryPathKey : InstallBinarySettingsKey ;
157162 binaryPlaceholder : string ;
158163 binaryDescription : ReactNode ;
@@ -246,6 +251,11 @@ const INSTALL_PROVIDER_SETTINGS: readonly InstallProviderSettings[] = [
246251 {
247252 provider : "codex" ,
248253 title : "Codex" ,
254+ docs : [
255+ { label : "Install" , href : "https://help.openai.com/en/articles/11096431" } ,
256+ { label : "Update" , href : "https://help.openai.com/en/articles/11096431" } ,
257+ { label : "Config" , href : "https://github.com/openai/codex/blob/main/docs/config.md" } ,
258+ ] ,
249259 binaryPathKey : "codexBinaryPath" ,
250260 binaryPlaceholder : "Codex binary path" ,
251261 binaryDescription : (
@@ -260,6 +270,11 @@ const INSTALL_PROVIDER_SETTINGS: readonly InstallProviderSettings[] = [
260270 {
261271 provider : "claudeAgent" ,
262272 title : "Claude" ,
273+ docs : [
274+ { label : "Install" , href : "https://code.claude.com/docs/en/installation" } ,
275+ { label : "Update" , href : "https://code.claude.com/docs/en/installation#update-claude-code" } ,
276+ { label : "Config" , href : "https://code.claude.com/docs/en/settings" } ,
277+ ] ,
263278 binaryPathKey : "claudeBinaryPath" ,
264279 binaryPlaceholder : "Claude binary path" ,
265280 binaryDescription : (
@@ -271,6 +286,11 @@ const INSTALL_PROVIDER_SETTINGS: readonly InstallProviderSettings[] = [
271286 {
272287 provider : "cursor" ,
273288 title : "Cursor" ,
289+ docs : [
290+ { label : "Install" , href : "https://docs.cursor.com/en/cli/installation" } ,
291+ { label : "Update" , href : "https://docs.cursor.com/en/cli/installation#updates" } ,
292+ { label : "Config" , href : "https://docs.cursor.com/en/cli/overview" } ,
293+ ] ,
274294 binaryPathKey : "cursorBinaryPath" ,
275295 binaryPlaceholder : "Cursor Agent binary path" ,
276296 binaryDescription : (
@@ -285,6 +305,14 @@ const INSTALL_PROVIDER_SETTINGS: readonly InstallProviderSettings[] = [
285305 {
286306 provider : "gemini" ,
287307 title : "Gemini" ,
308+ docs : [
309+ { label : "Install" , href : "https://google-gemini.github.io/gemini-cli/docs/get-started/" } ,
310+ { label : "Update" , href : "https://github.com/google-gemini/gemini-cli" } ,
311+ {
312+ label : "Config" ,
313+ href : "https://google-gemini.github.io/gemini-cli/docs/get-started/configuration.html" ,
314+ } ,
315+ ] ,
288316 binaryPathKey : "geminiBinaryPath" ,
289317 binaryPlaceholder : "Gemini binary path" ,
290318 binaryDescription : (
@@ -296,6 +324,11 @@ const INSTALL_PROVIDER_SETTINGS: readonly InstallProviderSettings[] = [
296324 {
297325 provider : "kilo" ,
298326 title : "Kilo" ,
327+ docs : [
328+ { label : "Install" , href : "https://kilo.ai/docs/cli" } ,
329+ { label : "Update" , href : "https://kilo.ai/docs/cli" } ,
330+ { label : "Config" , href : "https://kilo.ai/docs/cli#configuration" } ,
331+ ] ,
299332 binaryPathKey : "kiloBinaryPath" ,
300333 binaryPlaceholder : "Kilo binary path" ,
301334 binaryDescription : (
@@ -313,6 +346,11 @@ const INSTALL_PROVIDER_SETTINGS: readonly InstallProviderSettings[] = [
313346 {
314347 provider : "opencode" ,
315348 title : "OpenCode" ,
349+ docs : [
350+ { label : "Install" , href : "https://opencode.ai/docs/" } ,
351+ { label : "Update" , href : "https://opencode.ai/docs/cli/" } ,
352+ { label : "Config" , href : "https://opencode.ai/docs/config/" } ,
353+ ] ,
316354 binaryPathKey : "openCodeBinaryPath" ,
317355 binaryPlaceholder : "OpenCode binary path" ,
318356 binaryDescription : (
@@ -331,6 +369,11 @@ const INSTALL_PROVIDER_SETTINGS: readonly InstallProviderSettings[] = [
331369 {
332370 provider : "pi" ,
333371 title : "Pi" ,
372+ docs : [
373+ { label : "Install" , href : "https://pi.dev/docs/latest" } ,
374+ { label : "Update" , href : "https://pi.dev/docs/latest/settings" } ,
375+ { label : "Config" , href : "https://pi.dev/docs/latest/settings" } ,
376+ ] ,
334377 binaryPathKey : "piBinaryPath" ,
335378 binaryPlaceholder : "Pi binary path" ,
336379 binaryDescription : (
@@ -432,6 +475,30 @@ function SettingResetButton({ label, onClick }: { label: string; onClick: () =>
432475 ) ;
433476}
434477
478+ function ProviderDocsLinks ( { docs } : { docs : InstallProviderSettings [ "docs" ] } ) {
479+ return (
480+ < div className = "rounded-lg border border-border/60 bg-[var(--color-background-elevated-secondary)]/35 px-3 py-2.5" >
481+ < div className = "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between" >
482+ < span className = "text-xs font-medium text-foreground" > CLI docs</ span >
483+ < div className = "flex flex-wrap gap-2" >
484+ { docs . map ( ( doc ) => (
485+ < a
486+ key = { `${ doc . label } :${ doc . href } ` }
487+ href = { doc . href }
488+ target = "_blank"
489+ rel = "noreferrer"
490+ className = "inline-flex h-7 items-center gap-1.5 rounded-md border border-border/70 px-2.5 text-xs text-muted-foreground transition-colors hover:border-border hover:bg-[var(--color-background-panel)] hover:text-foreground"
491+ >
492+ < span > { doc . label } </ span >
493+ < ExternalLinkIcon className = "size-3" />
494+ </ a >
495+ ) ) }
496+ </ div >
497+ </ div >
498+ </ div >
499+ ) ;
500+ }
501+
435502function normalizeManagedWorktreePath ( value : string | null | undefined ) : string | null {
436503 const trimmed = value ?. trim ( ) ;
437504 return trimmed && trimmed . length > 0 ? trimmed : null ;
@@ -2406,6 +2473,8 @@ function SettingsRouteView() {
24062473 < CollapsibleContent >
24072474 < div className = "border-t border-border/70 px-4 py-4" >
24082475 < div className = "space-y-3" >
2476+ < ProviderDocsLinks docs = { providerSettings . docs } />
2477+
24092478 < label
24102479 htmlFor = { `provider-install-${ providerSettings . binaryPathKey } ` }
24112480 className = "block"
0 commit comments