mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-14 03:02:14 +03:00
feat: migrate iFlow provider to Qoder AI (#660)
This commit is contained in:
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "التكاليف",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "في انتظار إذن Google...",
|
||||
"waitingForOpenAIAuthorization": "في انتظار ترخيص OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "في انتظار تصريح مكافحة الجاذبية...",
|
||||
"waitingForIFlowAuthorization": "في انتظار ترخيص iFlow...",
|
||||
"waitingForQoderAuthorization": "في انتظار ترخيص Qoder...",
|
||||
"exchangingCodeForTokens": "استبدال الكود بالرموز..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Разходи",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Изчаква се разрешение от Google...",
|
||||
"waitingForOpenAIAuthorization": "Изчаква се разрешение за OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "Изчаква се разрешение за антигравитация...",
|
||||
"waitingForIFlowAuthorization": "Изчаква се разрешение за iFlow...",
|
||||
"waitingForQoderAuthorization": "Изчаква се разрешение за Qoder...",
|
||||
"exchangingCodeForTokens": "Размяна на код за токени..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -941,7 +941,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Volný zásobník (0 $)",
|
||||
"templateFreeStackDesc": "Round-robin mezi všemi bezplatnými poskytovateli: Kiro (Claude), iFlow (5 modelů), Qwen (4 modely), Gemini CLI. Bez nákladů, nikdy nepřestaňte kódovat."
|
||||
"templateFreeStackDesc": "Round-robin mezi všemi bezplatnými poskytovateli: Kiro (Claude), Qoder (5 modelů), Qwen (4 modely), Gemini CLI. Bez nákladů, nikdy nepřestaňte kódovat."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Náklady",
|
||||
@@ -2479,7 +2479,7 @@
|
||||
"waitingForGoogleAuthorization": "Čekám na Google autorizaci...",
|
||||
"waitingForOpenAIAuthorization": "Čekám na OpenAI autorizaci...",
|
||||
"waitingForAntigravityAuthorization": "Čekám na Antigravity autorizaci...",
|
||||
"waitingForIFlowAuthorization": "Čekám na iFlow autorizaci...",
|
||||
"waitingForQoderAuthorization": "Čekám na Qoder autorizaci...",
|
||||
"exchangingCodeForTokens": "Vyměňuji kód za tokeny...",
|
||||
"Authorization": "Autorizace",
|
||||
"Content-Disposition": "Obsah-Dispozice"
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Omkostninger",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Venter på Google-godkendelse...",
|
||||
"waitingForOpenAIAuthorization": "Venter på OpenAI-godkendelse...",
|
||||
"waitingForAntigravityAuthorization": "Venter på antigravity-autorisation...",
|
||||
"waitingForIFlowAuthorization": "Venter på iFlow-godkendelse...",
|
||||
"waitingForQoderAuthorization": "Venter på Qoder-godkendelse...",
|
||||
"exchangingCodeForTokens": "Udveksler kode til tokens..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Kosten",
|
||||
@@ -2416,7 +2416,7 @@
|
||||
"waitingForGoogleAuthorization": "Warte auf Google-Autorisierung...",
|
||||
"waitingForOpenAIAuthorization": "Warte auf OpenAI-Autorisierung...",
|
||||
"waitingForAntigravityAuthorization": "Warte auf Antigravity-Autorisierung...",
|
||||
"waitingForIFlowAuthorization": "Warte auf iFlow-Autorisierung...",
|
||||
"waitingForQoderAuthorization": "Warte auf Qoder-Autorisierung...",
|
||||
"exchangingCodeForTokens": "Tausche Code gegen Token aus...",
|
||||
"Authorization": "Autorisierung",
|
||||
"Content-Disposition": "Inhaltliche Disposition"
|
||||
|
||||
@@ -941,7 +941,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Costs",
|
||||
@@ -2483,7 +2483,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Costos",
|
||||
@@ -2416,7 +2416,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens...",
|
||||
"Authorization": "Autorización",
|
||||
"Content-Disposition": "Disposición de contenido"
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Kustannukset",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Odotetaan Googlen valtuutusta...",
|
||||
"waitingForOpenAIAuthorization": "Odotetaan OpenAI-valtuutusta...",
|
||||
"waitingForAntigravityAuthorization": "Odotetaan antigravitaatiovaltuutusta...",
|
||||
"waitingForIFlowAuthorization": "Odotetaan iFlow-valtuutusta...",
|
||||
"waitingForQoderAuthorization": "Odotetaan Qoder-valtuutusta...",
|
||||
"exchangingCodeForTokens": "Vaihdetaan koodia tokeneihin..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Coûts",
|
||||
@@ -2416,7 +2416,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens...",
|
||||
"Authorization": "Autorisation",
|
||||
"Content-Disposition": "Disposition du contenu"
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "עלויות",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "ממתין לאישור Google...",
|
||||
"waitingForOpenAIAuthorization": "ממתין להרשאת OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "ממתין לאישור נגד כבידה...",
|
||||
"waitingForIFlowAuthorization": "ממתין להרשאת iFlow...",
|
||||
"waitingForQoderAuthorization": "ממתין להרשאת Qoder...",
|
||||
"exchangingCodeForTokens": "מחליף קוד לאסימונים..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -798,7 +798,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "लागत",
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Költségek",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Várakozás a Google engedélyére...",
|
||||
"waitingForOpenAIAuthorization": "Várakozás az OpenAI engedélyezésére...",
|
||||
"waitingForAntigravityAuthorization": "Várakozás az Antigravitációs engedélyezésre...",
|
||||
"waitingForIFlowAuthorization": "Várakozás az iFlow engedélyezésére...",
|
||||
"waitingForQoderAuthorization": "Várakozás az Qoder engedélyezésére...",
|
||||
"exchangingCodeForTokens": "Kód cseréje tokenre..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Biaya",
|
||||
@@ -2416,7 +2416,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens...",
|
||||
"Authorization": "Otorisasi",
|
||||
"Content-Disposition": "Disposisi Konten"
|
||||
|
||||
@@ -2477,7 +2477,7 @@
|
||||
"waitingForGoogleAuthorization": "Google प्राधिकरण की प्रतीक्षा की जा रही है...",
|
||||
"waitingForOpenAIAuthorization": "OpenAI प्राधिकरण की प्रतीक्षा की जा रही है...",
|
||||
"waitingForAntigravityAuthorization": "एंटीग्रेविटी प्राधिकरण की प्रतीक्षा की जा रही है...",
|
||||
"waitingForIFlowAuthorization": "iFlow प्राधिकरण की प्रतीक्षा की जा रही है...",
|
||||
"waitingForQoderAuthorization": "Qoder प्राधिकरण की प्रतीक्षा की जा रही है...",
|
||||
"exchangingCodeForTokens": "टोकन के लिए कोड का आदान-प्रदान..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Costi",
|
||||
@@ -2416,7 +2416,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens...",
|
||||
"Authorization": "Autorizzazione",
|
||||
"Content-Disposition": "Disposizione del contenuto"
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "コスト",
|
||||
@@ -2416,7 +2416,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens...",
|
||||
"Authorization": "認可",
|
||||
"Content-Disposition": "コンテンツの配置"
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "비용",
|
||||
@@ -2416,7 +2416,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens...",
|
||||
"Authorization": "승인",
|
||||
"Content-Disposition": "컨텐츠 처리"
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Kos",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Menunggu kebenaran Google...",
|
||||
"waitingForOpenAIAuthorization": "Menunggu kebenaran OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "Menunggu kebenaran Antigraviti...",
|
||||
"waitingForIFlowAuthorization": "Menunggu kebenaran iFlow...",
|
||||
"waitingForQoderAuthorization": "Menunggu kebenaran Qoder...",
|
||||
"exchangingCodeForTokens": "Bertukar kod untuk token..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Kosten",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Wachten op Google-autorisatie...",
|
||||
"waitingForOpenAIAuthorization": "Wachten op OpenAI-autorisatie...",
|
||||
"waitingForAntigravityAuthorization": "Wachten op toestemming voor anti-zwaartekracht...",
|
||||
"waitingForIFlowAuthorization": "Wachten op iFlow-autorisatie...",
|
||||
"waitingForQoderAuthorization": "Wachten op Qoder-autorisatie...",
|
||||
"exchangingCodeForTokens": "Code uitwisselen voor tokens..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Kostnader",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Venter på Google-autorisasjon...",
|
||||
"waitingForOpenAIAuthorization": "Venter på OpenAI-godkjenning...",
|
||||
"waitingForAntigravityAuthorization": "Venter på antigravity-autorisasjon...",
|
||||
"waitingForIFlowAuthorization": "Venter på iFlow-autorisasjon...",
|
||||
"waitingForQoderAuthorization": "Venter på Qoder-autorisasjon...",
|
||||
"exchangingCodeForTokens": "Utveksler kode for tokens..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Mga gastos",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Naghihintay ng pahintulot ng Google...",
|
||||
"waitingForOpenAIAuthorization": "Naghihintay ng awtorisasyon sa OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "Naghihintay ng awtorisasyon sa Antigravity...",
|
||||
"waitingForIFlowAuthorization": "Naghihintay ng awtorisasyon ng iFlow...",
|
||||
"waitingForQoderAuthorization": "Naghihintay ng awtorisasyon ng Qoder...",
|
||||
"exchangingCodeForTokens": "Pagpapalit ng code para sa mga token..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Koszty",
|
||||
@@ -2416,7 +2416,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens...",
|
||||
"Authorization": "Autoryzacja",
|
||||
"Content-Disposition": "Dyspozycja treści"
|
||||
|
||||
@@ -902,7 +902,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Custos",
|
||||
@@ -2436,7 +2436,7 @@
|
||||
"waitingForGoogleAuthorization": "Aguardando autorização do Google...",
|
||||
"waitingForOpenAIAuthorization": "Aguardando autorização do OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "Aguardando autorização antigravidade...",
|
||||
"waitingForIFlowAuthorization": "Aguardando autorização do iFlow...",
|
||||
"waitingForQoderAuthorization": "Aguardando autorização do Qoder...",
|
||||
"exchangingCodeForTokens": "Trocando código por tokens..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Custos",
|
||||
@@ -2428,7 +2428,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens...",
|
||||
"Authorization": "Autorização",
|
||||
"Content-Disposition": "Disposição de conteúdo"
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Costuri",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Se așteaptă autorizarea Google...",
|
||||
"waitingForOpenAIAuthorization": "Se așteaptă autorizarea OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "Se așteaptă autorizația antigravitație...",
|
||||
"waitingForIFlowAuthorization": "Se așteaptă autorizarea iFlow...",
|
||||
"waitingForQoderAuthorization": "Se așteaptă autorizarea Qoder...",
|
||||
"exchangingCodeForTokens": "Se schimbă codul pentru jetoane..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Затраты",
|
||||
@@ -2416,7 +2416,7 @@
|
||||
"waitingForGoogleAuthorization": "Waiting for Google authorization...",
|
||||
"waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
|
||||
"waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
|
||||
"waitingForIFlowAuthorization": "Waiting for iFlow authorization...",
|
||||
"waitingForQoderAuthorization": "Waiting for Qoder authorization...",
|
||||
"exchangingCodeForTokens": "Exchanging code for tokens...",
|
||||
"Authorization": "Авторизация",
|
||||
"Content-Disposition": "Содержание-Расположение"
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "náklady",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Čaká sa na autorizáciu Google...",
|
||||
"waitingForOpenAIAuthorization": "Čaká sa na autorizáciu OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "Čaká sa na antigravitačné povolenie...",
|
||||
"waitingForIFlowAuthorization": "Čaká sa na autorizáciu iFlow...",
|
||||
"waitingForQoderAuthorization": "Čaká sa na autorizáciu Qoder...",
|
||||
"exchangingCodeForTokens": "Výmena kódu za tokeny..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Kostnader",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Väntar på Google-auktorisering...",
|
||||
"waitingForOpenAIAuthorization": "Väntar på OpenAI-auktorisering...",
|
||||
"waitingForAntigravityAuthorization": "Väntar på antigravitationstillstånd...",
|
||||
"waitingForIFlowAuthorization": "Väntar på iFlow-auktorisering...",
|
||||
"waitingForQoderAuthorization": "Väntar på Qoder-auktorisering...",
|
||||
"exchangingCodeForTokens": "Byter ut kod för tokens..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "ค่าใช้จ่าย",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "กำลังรอการอนุญาตจาก Google...",
|
||||
"waitingForOpenAIAuthorization": "กำลังรอการอนุญาต OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "กำลังรอการอนุญาตต้านแรงโน้มถ่วง...",
|
||||
"waitingForIFlowAuthorization": "กำลังรอการอนุญาตจาก iFlow...",
|
||||
"waitingForQoderAuthorization": "กำลังรอการอนุญาตจาก Qoder...",
|
||||
"exchangingCodeForTokens": "การเปลี่ยนรหัสเป็นโทเค็น..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -939,7 +939,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Ücretsiz Yığın ($0)",
|
||||
"templateFreeStackDesc": "Tüm ücretsiz sağlayıcılarda round-robin: Kiro (Claude), iFlow (5 model), Qwen (4 model), Gemini CLI. Sıfır maliyet, kodlama kesintisiz."
|
||||
"templateFreeStackDesc": "Tüm ücretsiz sağlayıcılarda round-robin: Kiro (Claude), Qoder (5 model), Qwen (4 model), Gemini CLI. Sıfır maliyet, kodlama kesintisiz."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Maliyetler",
|
||||
@@ -2475,7 +2475,7 @@
|
||||
"waitingForGoogleAuthorization": "Google yetkilendirmesi bekleniyor...",
|
||||
"waitingForOpenAIAuthorization": "OpenAI yetkilendirmesi bekleniyor...",
|
||||
"waitingForAntigravityAuthorization": "Antigravity yetkilendirmesi bekleniyor...",
|
||||
"waitingForIFlowAuthorization": "iFlow yetkilendirmesi bekleniyor...",
|
||||
"waitingForQoderAuthorization": "Qoder yetkilendirmesi bekleniyor...",
|
||||
"exchangingCodeForTokens": "Kod jetonlarla değiştiriliyor..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Витрати",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Очікування авторизації Google...",
|
||||
"waitingForOpenAIAuthorization": "Очікування авторизації OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "Очікування авторизації Antigravity...",
|
||||
"waitingForIFlowAuthorization": "Очікування авторизації iFlow...",
|
||||
"waitingForQoderAuthorization": "Очікування авторизації Qoder...",
|
||||
"exchangingCodeForTokens": "Обмін коду на токени..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -890,7 +890,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "Free Stack ($0)",
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
"templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."
|
||||
},
|
||||
"costs": {
|
||||
"title": "Chi phí",
|
||||
@@ -2418,7 +2418,7 @@
|
||||
"waitingForGoogleAuthorization": "Đang chờ Google ủy quyền...",
|
||||
"waitingForOpenAIAuthorization": "Đang chờ ủy quyền OpenAI...",
|
||||
"waitingForAntigravityAuthorization": "Đang chờ ủy quyền chống hấp dẫn...",
|
||||
"waitingForIFlowAuthorization": "Đang chờ ủy quyền iFlow...",
|
||||
"waitingForQoderAuthorization": "Đang chờ ủy quyền Qoder...",
|
||||
"exchangingCodeForTokens": "Đổi mã lấy token..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -941,7 +941,7 @@
|
||||
}
|
||||
},
|
||||
"templateFreeStack": "免费栈($0)",
|
||||
"templateFreeStackDesc": "在所有免费提供商之间进行轮询:Kiro(Claude)、iFlow(5 个模型)、Qwen(4 个模型)、Gemini CLI。零成本,编码不中断。"
|
||||
"templateFreeStackDesc": "在所有免费提供商之间进行轮询:Kiro(Claude)、Qoder(5 个模型)、Qwen(4 个模型)、Gemini CLI。零成本,编码不中断。"
|
||||
},
|
||||
"costs": {
|
||||
"title": "成本",
|
||||
@@ -2477,7 +2477,7 @@
|
||||
"waitingForGoogleAuthorization": "正在等待 Google 授权...",
|
||||
"waitingForOpenAIAuthorization": "正在等待 OpenAI 授权...",
|
||||
"waitingForAntigravityAuthorization": "正在等待 Antigravity 授权...",
|
||||
"waitingForIFlowAuthorization": "正在等待 iFlow 授权...",
|
||||
"waitingForQoderAuthorization": "正在等待 Qoder 授权...",
|
||||
"exchangingCodeForTokens": "正在用授权码换取 Tokens..."
|
||||
},
|
||||
"landing": {
|
||||
|
||||
@@ -64,13 +64,13 @@ export const QWEN_CONFIG = {
|
||||
codeChallengeMethod: "S256",
|
||||
};
|
||||
|
||||
// iFlow OAuth Configuration (Authorization Code)
|
||||
export const IFLOW_CONFIG = {
|
||||
clientId: process.env.IFLOW_OAUTH_CLIENT_ID || "10009311001",
|
||||
clientSecret: process.env.IFLOW_OAUTH_CLIENT_SECRET || "4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",
|
||||
authorizeUrl: "https://iflow.cn/oauth",
|
||||
tokenUrl: "https://iflow.cn/oauth/token",
|
||||
userInfoUrl: "https://iflow.cn/api/oauth/getUserInfo",
|
||||
// Qoder OAuth Configuration (Authorization Code)
|
||||
export const QODER_CONFIG = {
|
||||
clientId: process.env.QODER_OAUTH_CLIENT_ID || "10009311001",
|
||||
clientSecret: process.env.QODER_OAUTH_CLIENT_SECRET || "4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",
|
||||
authorizeUrl: "https://qoder.cn/oauth",
|
||||
tokenUrl: "https://qoder.cn/oauth/token",
|
||||
userInfoUrl: "https://qoder.cn/api/oauth/getUserInfo",
|
||||
extraParams: {
|
||||
loginMethod: "phone",
|
||||
type: "phone",
|
||||
@@ -220,7 +220,7 @@ export const PROVIDERS = {
|
||||
CODEX: "codex",
|
||||
GEMINI: "gemini-cli",
|
||||
QWEN: "qwen",
|
||||
IFLOW: "iflow",
|
||||
QODER: "qoder",
|
||||
ANTIGRAVITY: "antigravity",
|
||||
OPENAI: "openai",
|
||||
GITHUB: "github",
|
||||
|
||||
@@ -14,7 +14,7 @@ import { claude } from "./claude";
|
||||
import { codex } from "./codex";
|
||||
import { gemini } from "./gemini";
|
||||
import { antigravity } from "./antigravity";
|
||||
import { iflow } from "./iflow";
|
||||
import { qoder } from "./qoder";
|
||||
import { qwen } from "./qwen";
|
||||
import { kimiCoding } from "./kimi-coding";
|
||||
import { github } from "./github";
|
||||
@@ -28,7 +28,7 @@ export const PROVIDERS = {
|
||||
codex,
|
||||
"gemini-cli": gemini,
|
||||
antigravity,
|
||||
iflow,
|
||||
qoder,
|
||||
qwen,
|
||||
"kimi-coding": kimiCoding,
|
||||
github,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { IFLOW_CONFIG } from "../constants/oauth";
|
||||
import { QODER_CONFIG } from "../constants/oauth";
|
||||
|
||||
export const iflow = {
|
||||
config: IFLOW_CONFIG,
|
||||
export const qoder = {
|
||||
config: QODER_CONFIG,
|
||||
flowType: "authorization_code",
|
||||
buildAuthUrl: (config, redirectUri, state) => {
|
||||
const params = new URLSearchParams({
|
||||
@@ -50,7 +50,7 @@ export const iflow = {
|
||||
},
|
||||
postExchange: async (tokens) => {
|
||||
const userInfoRes = await fetch(
|
||||
`${IFLOW_CONFIG.userInfoUrl}?accessToken=${encodeURIComponent(tokens.access_token)}`,
|
||||
`${QODER_CONFIG.userInfoUrl}?accessToken=${encodeURIComponent(tokens.access_token)}`,
|
||||
{ headers: { Accept: "application/json" } }
|
||||
);
|
||||
const result = userInfoRes.ok ? await userInfoRes.json() : {};
|
||||
@@ -7,7 +7,7 @@ export { ClaudeService } from "./claude";
|
||||
export { CodexService } from "./codex";
|
||||
export { GeminiCLIService } from "./gemini";
|
||||
export { QwenService } from "./qwen";
|
||||
export { IFlowService } from "./iflow";
|
||||
export { QoderService } from "./qoder";
|
||||
export { AntigravityService } from "./antigravity";
|
||||
export { OpenAIService } from "./openai";
|
||||
export { GitHubService } from "./github";
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
import crypto from "crypto";
|
||||
import open from "open";
|
||||
import { IFLOW_CONFIG } from "../constants/oauth";
|
||||
import { QODER_CONFIG } from "../constants/oauth";
|
||||
import { getServerCredentials } from "../config/index";
|
||||
import { startLocalServer } from "../utils/server";
|
||||
import { spinner as createSpinner } from "../utils/ui";
|
||||
|
||||
/**
|
||||
* iFlow OAuth Service
|
||||
* Qoder OAuth Service
|
||||
* Uses Authorization Code flow with Basic Auth
|
||||
*/
|
||||
export class IFlowService {
|
||||
export class QoderService {
|
||||
config: any;
|
||||
|
||||
constructor() {
|
||||
this.config = IFLOW_CONFIG;
|
||||
this.config = QODER_CONFIG;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build iFlow authorization URL
|
||||
* Build Qoder authorization URL
|
||||
*/
|
||||
buildAuthUrl(redirectUri: string, state: string) {
|
||||
const params = new URLSearchParams({
|
||||
@@ -65,7 +65,7 @@ export class IFlowService {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user info from iFlow
|
||||
* Get user info from Qoder
|
||||
*/
|
||||
async getUserInfo(accessToken: string) {
|
||||
const response = await fetch(
|
||||
@@ -92,12 +92,12 @@ export class IFlowService {
|
||||
}
|
||||
|
||||
/**
|
||||
* Save iFlow tokens to server
|
||||
* Save Qoder tokens to server
|
||||
*/
|
||||
async saveTokens(tokens: any, userInfo: any) {
|
||||
const { server, token, userId } = getServerCredentials();
|
||||
|
||||
const response = await fetch(`${server}/api/cli/providers/iflow`, {
|
||||
const response = await fetch(`${server}/api/cli/providers/qoder`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
@@ -122,10 +122,10 @@ export class IFlowService {
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete iFlow OAuth flow
|
||||
* Complete Qoder OAuth flow
|
||||
*/
|
||||
async connect() {
|
||||
const spinner = createSpinner("Starting iFlow OAuth...").start();
|
||||
const spinner = createSpinner("Starting Qoder OAuth...").start();
|
||||
|
||||
try {
|
||||
spinner.text = "Starting local server...";
|
||||
@@ -145,14 +145,14 @@ export class IFlowService {
|
||||
// Build authorization URL
|
||||
const authUrl = this.buildAuthUrl(redirectUri, state);
|
||||
|
||||
console.log("\nOpening browser for iFlow authentication...");
|
||||
console.log("\nOpening browser for Qoder authentication...");
|
||||
console.log(`If browser doesn't open, visit:\n${authUrl}\n`);
|
||||
|
||||
// Open browser
|
||||
await open(authUrl);
|
||||
|
||||
// Wait for callback
|
||||
spinner.start("Waiting for iFlow authorization...");
|
||||
spinner.start("Waiting for Qoder authorization...");
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
const timeout = setTimeout(() => {
|
||||
@@ -193,7 +193,7 @@ export class IFlowService {
|
||||
// Save tokens to server
|
||||
await this.saveTokens(tokens, userInfo);
|
||||
|
||||
spinner.succeed(`iFlow connected successfully! (${userInfo.email || userInfo.phone})`);
|
||||
spinner.succeed(`Qoder connected successfully! (${userInfo.email || userInfo.phone})`);
|
||||
return true;
|
||||
} catch (error: any) {
|
||||
spinner.fail(`Failed: ${error.message}`);
|
||||
@@ -25,7 +25,7 @@ export async function getUsageForProvider(connection) {
|
||||
return await getCodexUsage(accessToken, providerSpecificData);
|
||||
case "qwen":
|
||||
return await getQwenUsage(accessToken, providerSpecificData);
|
||||
case "iflow":
|
||||
case "qoder":
|
||||
return await getIflowUsage(accessToken);
|
||||
case "kiro":
|
||||
return await getKiroUsage(accessToken);
|
||||
@@ -209,14 +209,14 @@ async function getQwenUsage(accessToken, providerSpecificData) {
|
||||
}
|
||||
|
||||
/**
|
||||
* iFlow Usage
|
||||
* Qoder Usage
|
||||
*/
|
||||
async function getIflowUsage(accessToken) {
|
||||
try {
|
||||
// iFlow may have usage endpoint
|
||||
return { message: "iFlow connected. Usage tracked per request." };
|
||||
// Qoder may have usage endpoint
|
||||
return { message: "Qoder connected. Usage tracked per request." };
|
||||
} catch (error) {
|
||||
return { message: "Unable to fetch iFlow usage." };
|
||||
return { message: "Unable to fetch Qoder usage." };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -434,7 +434,7 @@ export default function OAuthModal({
|
||||
}, [authData, exchangeTokens]);
|
||||
|
||||
// Fix #344: Detect when OAuth popup is closed without completing authorization
|
||||
// Some providers (like iFlow) redirect to their own chat UI instead of sending a callback,
|
||||
// Some providers (like Qoder) redirect to their own chat UI instead of sending a callback,
|
||||
// leaving the modal stuck at "Waiting for Authorization" forever.
|
||||
useEffect(() => {
|
||||
if (step !== "waiting" || isDeviceCode || !popupRef.current) return;
|
||||
@@ -535,7 +535,7 @@ export default function OAuthModal({
|
||||
Complete the authorization in the popup window.
|
||||
</p>
|
||||
<p className="text-xs text-text-muted mb-4 opacity-70">
|
||||
If the popup closes without redirecting back (e.g. iFlow), this dialog will
|
||||
If the popup closes without redirecting back (e.g. Qoder), this dialog will
|
||||
automatically switch to manual URL input mode.
|
||||
</p>
|
||||
<Button variant="ghost" onClick={() => setStep("input")}>
|
||||
|
||||
@@ -19,7 +19,7 @@ export const PROVIDER_COLORS = {
|
||||
codex: { bg: "#10A37F", text: "#fff", label: "Codex" },
|
||||
gemini: { bg: "#34A853", text: "#fff", label: "Gemini" },
|
||||
qwen: { bg: "#6366F1", text: "#fff", label: "Qwen" },
|
||||
iflow: { bg: "#EC4899", text: "#fff", label: "iFlow" },
|
||||
qoder: { bg: "#EC4899", text: "#fff", label: "Qoder" },
|
||||
fireworks: { bg: "#F97316", text: "#fff", label: "Fireworks" },
|
||||
kimi: { bg: "#06B6D4", text: "#fff", label: "Kimi" },
|
||||
"gemini-cli": { bg: "#34A853", text: "#fff", label: "Gemini CLI" },
|
||||
|
||||
@@ -277,7 +277,7 @@ export const DEFAULT_PRICING = {
|
||||
},
|
||||
},
|
||||
|
||||
// iFlow AI (if)
|
||||
// Qoder AI (if)
|
||||
if: {
|
||||
"qwen3-coder-plus": {
|
||||
input: 1.0,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
// Free Providers
|
||||
export const FREE_PROVIDERS = {
|
||||
iflow: { id: "iflow", alias: "if", name: "iFlow AI", icon: "water_drop", color: "#6366F1" },
|
||||
qoder: { id: "qoder", alias: "if", name: "Qoder AI", icon: "water_drop", color: "#6366F1" },
|
||||
qwen: { id: "qwen", alias: "qw", name: "Qwen Code", icon: "psychology", color: "#10B981" },
|
||||
"gemini-cli": {
|
||||
id: "gemini-cli",
|
||||
|
||||
Reference in New Issue
Block a user