Russian UI: settings, notch views, agent steps, errors; visible success after installing hooks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -46,24 +46,24 @@ struct MochiActivityState: Codable, Hashable, Sendable {
|
||||
|
||||
static func statusText(state: BotState, urgency: Int, stepIndex: Int, stepCount: Int) -> String {
|
||||
switch urgency {
|
||||
case 0: return "waiting for your OK"
|
||||
case 1: return "has a question"
|
||||
case 0: return "ждёт вашего OK"
|
||||
case 1: return "есть вопрос"
|
||||
default: break
|
||||
}
|
||||
switch state {
|
||||
case .working, .thinking, .searching:
|
||||
return stepCount == 0 ? "working" : "working · \(min(stepIndex + 1, stepCount))/\(stepCount)"
|
||||
case .finished: return "✓ done"
|
||||
case .error: return "error"
|
||||
case .ratelimit: return "rate limited"
|
||||
case .sleeping: return "asleep"
|
||||
case .dizzy: return "dizzy"
|
||||
default: return "idle"
|
||||
return stepCount == 0 ? "работает" : "работает · \(min(stepIndex + 1, stepCount))/\(stepCount)"
|
||||
case .finished: return "✓ готово"
|
||||
case .error: return "ошибка"
|
||||
case .ratelimit: return "лимит запросов"
|
||||
case .sleeping: return "спит"
|
||||
case .dizzy: return "голова кружится"
|
||||
default: return "отдыхает"
|
||||
}
|
||||
}
|
||||
|
||||
static let placeholder = MochiActivityState(
|
||||
pillId: "integration_claude", agent: "VS Code", color: "#4A86E8",
|
||||
state: "working", statusText: "working · 3/7", tone: "working",
|
||||
state: "working", statusText: "работает · 3/7", tone: "working",
|
||||
stepIndex: 2, stepCount: 7, others: 1)
|
||||
}
|
||||
|
||||
@@ -6,19 +6,19 @@ enum Outfit: String, CaseIterable {
|
||||
|
||||
var displayName: String {
|
||||
switch self {
|
||||
case .auto: return "Auto (seasons)"
|
||||
case .none: return "None"
|
||||
case .partyHat: return "Party hat"
|
||||
case .beanie: return "Beanie"
|
||||
case .crown: return "Crown"
|
||||
case .sunglasses: return "Sunglasses"
|
||||
case .roundGlasses: return "Round glasses"
|
||||
case .bow: return "Bow"
|
||||
case .scarf: return "Scarf"
|
||||
case .witchHat: return "Witch hat"
|
||||
case .pumpkin: return "Pumpkin"
|
||||
case .santaHat: return "Santa hat"
|
||||
case .bunnyEars: return "Bunny ears"
|
||||
case .auto: return "Авто (по сезону)"
|
||||
case .none: return "Без наряда"
|
||||
case .partyHat: return "Праздничный колпак"
|
||||
case .beanie: return "Шапка"
|
||||
case .crown: return "Корона"
|
||||
case .sunglasses: return "Солнечные очки"
|
||||
case .roundGlasses: return "Круглые очки"
|
||||
case .bow: return "Бантик"
|
||||
case .scarf: return "Шарф"
|
||||
case .witchHat: return "Шляпа ведьмы"
|
||||
case .pumpkin: return "Тыква"
|
||||
case .santaHat: return "Шапка Санты"
|
||||
case .bunnyEars: return "Заячьи ушки"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,10 @@ enum PillCategory: String, CaseIterable {
|
||||
|
||||
var title: String {
|
||||
switch self {
|
||||
case .workspace: return "Where you code"
|
||||
case .agent: return "Agents"
|
||||
case .ai: return "AI for the chat"
|
||||
case .service: return "Services"
|
||||
case .workspace: return "Где вы пишете код"
|
||||
case .agent: return "Агенты"
|
||||
case .ai: return "ИИ для чата"
|
||||
case .service: return "Сервисы"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@ struct PillDefinition {
|
||||
case "integration_claude": return "Claude Code"
|
||||
case "agent_cursor": return "Cursor"
|
||||
case "agent_codex": return "Codex"
|
||||
default: return "Agent"
|
||||
default: return "Агент"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,44 +49,44 @@ enum PillCatalog {
|
||||
static let all: [PillDefinition] = [
|
||||
// ── Where you code ───────────────────────────────────────────────────
|
||||
.init(id: "integration_claude", name: "VS Code", color: "#F5F6F8",
|
||||
category: .workspace, subtitle: "Integration", source: .claudeCode),
|
||||
category: .workspace, subtitle: "Интеграция", source: .claudeCode),
|
||||
.init(id: "agent_cursor", name: "Cursor", color: "#C0C4CC",
|
||||
category: .workspace, subtitle: "Integration", source: .agent),
|
||||
category: .workspace, subtitle: "Интеграция", source: .agent),
|
||||
.init(id: "agent_antigravity", name: "Antigravity", color: "#E879F9",
|
||||
category: .workspace, subtitle: "Integration", source: .agent, githubOnly: true),
|
||||
category: .workspace, subtitle: "Интеграция", source: .agent, githubOnly: true),
|
||||
.init(id: "agent_codex", name: "Codex", color: "#2DD4BF",
|
||||
category: .workspace, subtitle: "Integration", source: .agent, githubOnly: true),
|
||||
category: .workspace, subtitle: "Интеграция", source: .agent, githubOnly: true),
|
||||
// ── Agents ───────────────────────────────────────────────────────────
|
||||
.init(id: "agent_gemini", name: "Gemini CLI", color: "#8AB4F8",
|
||||
category: .agent, subtitle: "Agent", source: .agent, githubOnly: true),
|
||||
category: .agent, subtitle: "Агент", source: .agent, githubOnly: true),
|
||||
// ── AI for the chat ──────────────────────────────────────────────────
|
||||
.init(id: "ai_anthropic", name: "Anthropic", color: ChatProvider.anthropic.accentHex,
|
||||
category: .ai, subtitle: "Chat", source: .n8n),
|
||||
category: .ai, subtitle: "Чат", source: .n8n),
|
||||
.init(id: "ai_google", name: "Google AI", color: ChatProvider.google.accentHex,
|
||||
category: .ai, subtitle: "Chat", source: .n8n),
|
||||
category: .ai, subtitle: "Чат", source: .n8n),
|
||||
.init(id: "ai_openai", name: "OpenAI", color: ChatProvider.openai.accentHex,
|
||||
category: .ai, subtitle: "Chat", source: .n8n),
|
||||
category: .ai, subtitle: "Чат", source: .n8n),
|
||||
.init(id: "ai_ollama", name: "Ollama", color: ChatProvider.ollama.accentHex,
|
||||
category: .ai, subtitle: "Chat", source: .n8n),
|
||||
category: .ai, subtitle: "Чат", source: .n8n),
|
||||
.init(id: "ai_lmstudio", name: "LM Studio", color: ChatProvider.lmstudio.accentHex,
|
||||
category: .ai, subtitle: "Chat", source: .n8n),
|
||||
category: .ai, subtitle: "Чат", source: .n8n),
|
||||
// ── Services ─────────────────────────────────────────────────────────
|
||||
.init(id: "integration_resend", name: "Resend", color: "#22C55E",
|
||||
category: .service, subtitle: "Integration", source: .n8n),
|
||||
category: .service, subtitle: "Интеграция", source: .n8n),
|
||||
.init(id: "integration_n8n", name: "n8n", color: "#F29B38",
|
||||
category: .service, subtitle: "Integration", source: .n8n),
|
||||
category: .service, subtitle: "Интеграция", source: .n8n),
|
||||
.init(id: "integration_vercel", name: "Vercel", color: "#7C5CFF",
|
||||
category: .service, subtitle: "Integration", source: .n8n),
|
||||
category: .service, subtitle: "Интеграция", source: .n8n),
|
||||
.init(id: "integration_github", name: "GitHub", color: "#F4505E",
|
||||
category: .service, subtitle: "Integration", source: .n8n),
|
||||
category: .service, subtitle: "Интеграция", source: .n8n),
|
||||
.init(id: "integration_notion", name: "Notion", color: "#8C8C8C",
|
||||
category: .service, subtitle: "Integration", source: .n8n),
|
||||
category: .service, subtitle: "Интеграция", source: .n8n),
|
||||
.init(id: "integration_calcom", name: "Cal.com", color: "#C9956A",
|
||||
category: .service, subtitle: "Integration", source: .n8n),
|
||||
category: .service, subtitle: "Интеграция", source: .n8n),
|
||||
.init(id: "integration_stripe", name: "Stripe", color: "#0570DE",
|
||||
category: .service, subtitle: "Integration", source: .n8n),
|
||||
category: .service, subtitle: "Интеграция", source: .n8n),
|
||||
.init(id: "integration_music", name: "Apple Music", color: "#FA2D48",
|
||||
category: .service, subtitle: "Integration", source: .n8n, githubOnly: true),
|
||||
category: .service, subtitle: "Интеграция", source: .n8n, githubOnly: true),
|
||||
]
|
||||
|
||||
/// Pills available in the current build target.
|
||||
|
||||
Reference in New Issue
Block a user