v0.2.49 be497c5

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 "openai-codex":
13		return "OpenAI Codex (ChatGPT Plus/Pro)"
14	case "openai-responses":
15		return "OpenAI Responses"
16	case "kimi":
17		return "Kimi Code"
18	case "deepseek":
19		return "DeepSeek"
20	case "google":
21		return "Google (Gemini API key)"
22	case "github-copilot":
23		return "GitHub Copilot"
24	case "moonshotai":
25		return "Moonshot AI"
26	case "moonshotai-cn":
27		return "Moonshot AI CN"
28	case "groq":
29		return "Groq"
30	case "xai":
31		return "xAI"
32	case "cerebras":
33		return "Cerebras"
34	case "together":
35		return "Together AI"
36	case "huggingface":
37		return "Hugging Face"
38	case "openrouter":
39		return "OpenRouter"
40	case "mistral":
41		return "Mistral"
42	case "zai":
43		return "Z.AI"
44	case "xiaomi":
45		return "Xiaomi"
46	case "xiaomi-token-plan-ams":
47		return "Xiaomi Token Plan AMS"
48	case "xiaomi-token-plan-cn":
49		return "Xiaomi Token Plan CN"
50	case "xiaomi-token-plan-sgp":
51		return "Xiaomi Token Plan SGP"
52	case "minimax":
53		return "MiniMax"
54	case "minimax-cn":
55		return "MiniMax CN"
56	case "fireworks":
57		return "Fireworks"
58	case "vercel-ai-gateway":
59		return "Vercel AI Gateway"
60	case "opencode":
61		return "OpenCode"
62	case "opencode-go":
63		return "OpenCode Go"
64	case "amazon-bedrock":
65		return "Amazon Bedrock"
66	case "google-vertex":
67		return "Google Vertex AI"
68	case "azure-openai-responses":
69		return "Azure OpenAI"
70	case "cloudflare-workers-ai":
71		return "Cloudflare Workers AI"
72	case "cloudflare-ai-gateway":
73		return "Cloudflare AI Gateway"
74	case "ollama":
75		return "Ollama"
76	}
77	return titleProviderID(id)
78}
79
80func titleProviderID(id string) string {
81	parts := strings.FieldsFunc(id, func(r rune) bool { return r == '-' || r == '_' })
82	for i, p := range parts {
83		if p == "" {
84			continue
85		}
86		parts[i] = strings.ToUpper(p[:1]) + p[1:]
87	}
88	return strings.Join(parts, " ")
89}

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