diff --git a/open-sse/executors/base.ts b/open-sse/executors/base.ts index d3a33060a3..141a7048fd 100644 --- a/open-sse/executors/base.ts +++ b/open-sse/executors/base.ts @@ -264,13 +264,12 @@ export class BaseExecutor { const transformedBody = this.transformRequest(model, body, stream, credentials); try { - // For non-streaming requests, apply a fetch timeout to prevent stalled connections. - // Streaming requests skip the timeout — they use stream idle detection instead. - const timeoutSignal = !stream ? AbortSignal.timeout(FETCH_TIMEOUT_MS) : null; - const combinedSignal = - signal && timeoutSignal - ? mergeAbortSignals(signal, timeoutSignal) - : signal || timeoutSignal; + // Apply timeout to all requests. Non-streaming requests need this to prevent + // stalled connections. Streaming requests also need it for the initial fetch() call + // to prevent hanging on unresponsive providers (e.g. 300s TCP default timeout — #769). + // Stream idle detection (STREAM_IDLE_TIMEOUT_MS) handles stalls after data starts flowing. + const timeoutSignal = AbortSignal.timeout(FETCH_TIMEOUT_MS); + const combinedSignal = signal ? mergeAbortSignals(signal, timeoutSignal) : timeoutSignal; // Apply CLI fingerprint ordering if enabled for this provider let finalHeaders = headers; diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 75215b0efc..5bec4ce225 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -571,7 +571,9 @@ "cursor": "محرر كود المؤشر AI", "continue": "تابع مساعد الذكاء الاصطناعي", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index 99cc58ce12..80c0dc1c6e 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -571,7 +571,9 @@ "cursor": "Cursor AI Code Editor", "continue": "Продължете AI Assistant", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index 8ac1afed42..1c09e6213f 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -643,7 +643,9 @@ "cursor": "Cursor AI Code Editor", "continue": "Continue AI asistent", "opencode": "OpenCode AI coding agent (Terminál)", - "kiro": "Amazon Kiro – AI poháněné IDE" + "kiro": "Amazon Kiro – AI poháněné IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index 1614f07f53..fe7df65c10 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -571,7 +571,9 @@ "cursor": "Cursor AI Code Editor", "continue": "Fortsæt AI Assistant", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index fed8765b1e..5f4c5fe1e4 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -571,7 +571,9 @@ "cursor": "Cursor-KI-Code-Editor", "continue": "Weiter AI Assistant", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 99d2ebc6ee..61f1b1bc9b 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -648,7 +648,9 @@ "cursor": "Cursor AI Code Editor", "continue": "Continue AI Assistant", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 3d83be5e61..36af782f17 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -571,7 +571,9 @@ "cursor": "Editor de código AI del cursor", "continue": "Continuar Asistente de IA", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index ba20289153..edb20c9994 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -571,7 +571,9 @@ "cursor": "Cursor AI Code Editor", "continue": "Jatka AI Assistantia", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index e4bb5d4330..55cbd5c782 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -571,7 +571,9 @@ "cursor": "Éditeur de code AI du curseur", "continue": "Continuer l'Assistant IA", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index 782d1b3456..29af3ce63f 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -571,7 +571,9 @@ "cursor": "עורך קוד AI של הסמן", "continue": "המשך עוזר AI", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index 231bc1bf8b..06743d95e2 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -489,7 +489,9 @@ "cursor": "कर्सर एआई कोड संपादक", "continue": "एआई असिस्टेंट जारी रखें", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index e154a69052..fac46c6f8a 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -571,7 +571,9 @@ "cursor": "Kurzor AI kódszerkesztő", "continue": "Az AI-asszisztens folytatása", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 78c03e2229..514fb55920 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -571,7 +571,9 @@ "cursor": "Editor Kode AI Kursor", "continue": "Lanjutkan Asisten AI", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json index 49e91354bd..7b6562bdd9 100644 --- a/src/i18n/messages/in.json +++ b/src/i18n/messages/in.json @@ -643,7 +643,9 @@ "cursor": "कर्सर एआई कोड संपादक", "continue": "एआई असिस्टेंट जारी रखें", "opencode": "ओपनकोड एआई कोडिंग एजेंट (टर्मिनल)", - "kiro": "अमेज़ॅन किरो - एआई-संचालित आईडीई" + "kiro": "अमेज़ॅन किरो - एआई-संचालित आईडीई", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index f8394c7ac5..6289585118 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -571,7 +571,9 @@ "cursor": "Editor del codice AI del cursore", "continue": "Continua Assistente AI", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index 8fe76a7f41..c11da06718 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -571,7 +571,9 @@ "cursor": "カーソルAIコードエディター", "continue": "AIアシスタントを続ける", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index e009c79256..804ce4b9dc 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -571,7 +571,9 @@ "cursor": "커서 AI 코드 편집기", "continue": "AI 어시스턴트 계속하기", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index 5cdb70ff45..cc7dedd3da 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -571,7 +571,9 @@ "cursor": "Editor Kod AI Kursor", "continue": "Teruskan AI Assistant", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index 0df65a4b76..8721cc212c 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -571,7 +571,9 @@ "cursor": "Cursor AI-code-editor", "continue": "Ga door met AI-assistent", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index 7f38755bca..f606d70b0c 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -571,7 +571,9 @@ "cursor": "Cursor AI Code Editor", "continue": "Fortsett AI Assistant", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index 612628df83..7460073fd4 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -571,7 +571,9 @@ "cursor": "Cursor AI Code Editor", "continue": "Ipagpatuloy ang AI Assistant", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index df232b5c75..a4b9633cbc 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -571,7 +571,9 @@ "cursor": "Edytor kodu AI kursora", "continue": "Kontynuuj Asystenta AI", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index ab4a789f6f..385ecb4ee5 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -571,7 +571,9 @@ "cursor": "Editor de código com IA Cursor", "continue": "Assistente de IA Continue", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — IDE com IA", + "windsurf": "Windsurf — Editor de Código com IA", + "copilot": "GitHub Copilot — Assistente de IA" }, "guides": { "cursor": { diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index de62c98f6e..dc8d3018ec 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -571,7 +571,9 @@ "cursor": "Editor de código do cursor AI", "continue": "Continuar Assistente de IA", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index 9cceb64459..75dedc3a5e 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -571,7 +571,9 @@ "cursor": "Cursor AI Code Editor", "continue": "Continuați Asistentul AI", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index 0c9babf3f4..1fdf01e352 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -571,7 +571,9 @@ "cursor": "Редактор кода курсора AI", "continue": "Продолжить AI-помощник", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index 3b141de23f..bc2483e353 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -571,7 +571,9 @@ "cursor": "Editor kódu AI kurzora", "continue": "Pokračovať v Asistentovi AI", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index a6bd67dbf8..3d72f1d0fb 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -571,7 +571,9 @@ "cursor": "Cursor AI Code Editor", "continue": "Fortsätt AI Assistant", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index b89076eac0..34f3ee362f 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -571,7 +571,9 @@ "cursor": "ตัวแก้ไขรหัสเคอร์เซอร์ AI", "continue": "ดำเนินการต่อผู้ช่วย AI", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json index ee8e988f14..49a74ba2f9 100644 --- a/src/i18n/messages/tr.json +++ b/src/i18n/messages/tr.json @@ -641,7 +641,9 @@ "cursor": "Cursor AI Kod Düzenleyici", "continue": "Continue AI Asistanı", "opencode": "OpenCode AI kodlama ajanı (Terminal)", - "kiro": "Amazon Kiro - AI destekli IDE" + "kiro": "Amazon Kiro - AI destekli IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index af844428d0..aeb02f18f7 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -571,7 +571,9 @@ "cursor": "Редактор коду Cursor AI", "continue": "Продовжити AI Assistant", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index d0107c11f4..7f1f40f6f4 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -571,7 +571,9 @@ "cursor": "Trình chỉnh sửa mã AI con trỏ", "continue": "Tiếp tục Trợ lý AI", "opencode": "OpenCode AI coding agent (Terminal)", - "kiro": "Amazon Kiro — AI-powered IDE" + "kiro": "Amazon Kiro — AI-powered IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": { diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index ab278f0a1f..294102a67e 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -627,7 +627,9 @@ "cursor": "Cursor AI 代码编辑器", "continue": "继续AI助手", "opencode": "OpenCode AI 编码智能体(终端)", - "kiro": "Amazon Kiro - AI 驱动 IDE" + "kiro": "Amazon Kiro - AI 驱动 IDE", + "windsurf": "Windsurf AI Code Editor", + "copilot": "GitHub Copilot AI Assistant" }, "guides": { "cursor": {