v0.4.3 2a19df1

labels.go RawHistoryFolder

1package provider
2
3import "strings"
4
5// ProviderLabel returns the user-facing label for a provider id.
6func ProviderLabel(id string) string {
7	switch id {
8	case "anthropic":
9		return "Anthropic (Claude Pro/Max)"
10	case "openai":
11		return "OpenAI"
12	case LMStudioProviderID:
13		return "LM Studio"
14	case "openai-codex":
15		return "OpenAI Codex (ChatGPT Plus/Pro)"
16	case "openai-responses":
17		return "OpenAI Responses"
18	case "kimi":
19		return "Kimi Code"
20	case "deepseek":
21		return "DeepSeek"
22	case "google":
23		return "Google (Gemini API key)"
24	case "github-copilot":
25		return "GitHub Copilot"
26	case "moonshotai":
27		return "Moonshot AI"
28	case "moonshotai-cn":
29		return "Moonshot AI CN"
30	case "groq":
31		return "Groq"
32	case "xai":
33		return "xAI"
34	case "cerebras":
35		return "Cerebras"
36	case "together":
37		return "Together AI"
38	case "huggingface":
39		return "Hugging Face"
40	case "openrouter":
41		return "OpenRouter"
42	case "gondola":
43		return "Gondola"
44	case "yolo-auto":
45		return "Yolo-Auto"
46	case "mistral":
47		return "Mistral"
48	case "zai":
49		return "Z.AI"
50	case "xiaomi":
51		return "Xiaomi"
52	case "xiaomi-token-plan-ams":
53		return "Xiaomi Token Plan AMS"
54	case "xiaomi-token-plan-cn":
55		return "Xiaomi Token Plan CN"
56	case "xiaomi-token-plan-sgp":
57		return "Xiaomi Token Plan SGP"
58	case "minimax":
59		return "MiniMax"
60	case "minimax-cn":
61		return "MiniMax CN"
62	case "fireworks":
63		return "Fireworks"
64	case "vercel-ai-gateway":
65		return "Vercel AI Gateway"
66	case "opencode":
67		return "OpenCode"
68	case "opencode-go":
69		return "OpenCode Go"
70	case "amazon-bedrock":
71		return "Amazon Bedrock"
72	case "google-vertex":
73		return "Google Vertex AI"
74	case "azure-openai-responses":
75		return "Azure OpenAI"
76	case "cloudflare-workers-ai":
77		return "Cloudflare Workers AI"
78	case "cloudflare-ai-gateway":
79		return "Cloudflare AI Gateway"
80	case "ollama":
81		return "Ollama"
82	case LlamaCPPProviderID:
83		return "llama.cpp"
84	}
85	return titleProviderID(id)
86}
87
88func titleProviderID(id string) string {
89	parts := strings.FieldsFunc(id, func(r rune) bool { return r == '-' || r == '_' })
90	for i, p := range parts {
91		if p == "" {
92			continue
93		}
94		parts[i] = strings.ToUpper(p[:1]) + p[1:]
95	}
96	return strings.Join(parts, " ")
97}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 476

↑↓ moveenter openesc close