feat: add clickable settings links to checkpoint timeout warnings

- Use flag-based approach instead of passing i18n keys around
- Backend sends warning type enum (WAIT_TIMEOUT/INIT_TIMEOUT) + timeout value
- Frontend CheckpointWarning maps type to appropriate i18n key
- Add checkpoint error translations to webview-ui locale files only
- Remove duplicate translations from backend locale files
- Trans component handles translation and link interpolation
- Move periods inside settingsLink tags for proper spacing

TEMPORARY: Warning always shows for testing (will be reverted)

This provides a clean architecture where:
- Backend: Sends simple flag + timeout (no i18n dependency)
- Frontend: Handles all i18n logic with Trans component
- No duplication: Translations only in frontend where they're used

Addresses PR #8019 review feedback.
This commit is contained in:
daniel-lxs 2025-10-22 16:26:30 -05:00
parent 62143f9135
commit 2e793647fe
No known key found for this signature in database
GPG key ID: 21C74479048B3AA6
40 changed files with 110 additions and 63 deletions

View file

@ -17,13 +17,11 @@ import { DIFF_VIEW_URI_SCHEME } from "../../integrations/editor/DiffViewProvider
import { CheckpointServiceOptions, RepoPerTaskCheckpointService } from "../../services/checkpoints"
const WARNING_THRESHOLD_MS = 5000
const WAIT_LONG_TIME_I18_KEY = "common:errors.wait_checkpoint_long_time"
const INIT_FAIL_LONG_TIME_I18_KEY = "common:errors.init_checkpoint_fail_long_time"
function sendCheckpointInitWarn(task: Task, checkpointWarning: string) {
function sendCheckpointInitWarn(task: Task, type?: "WAIT_TIMEOUT" | "INIT_TIMEOUT", timeout?: number) {
task.providerRef.deref()?.postMessageToWebview({
type: "checkpointInitWarning",
checkpointWarning,
checkpointWarning: type && timeout ? { type, timeout } : undefined,
})
}
@ -88,10 +86,7 @@ export async function getCheckpointService(task: Task, { interval = 250 }: { int
// Show warning if we're past the threshold and haven't shown it yet
if (!warningShown && elapsed >= WARNING_THRESHOLD_MS) {
warningShown = true
sendCheckpointInitWarn(
task,
t(WAIT_LONG_TIME_I18_KEY, { timeout: WARNING_THRESHOLD_MS / 1000 }),
)
sendCheckpointInitWarn(task, "WAIT_TIMEOUT", WARNING_THRESHOLD_MS / 1000)
}
console.log(
@ -102,11 +97,11 @@ export async function getCheckpointService(task: Task, { interval = 250 }: { int
{ interval, timeout: checkpointTimeoutMs },
)
if (!task?.checkpointService) {
sendCheckpointInitWarn(task, t(INIT_FAIL_LONG_TIME_I18_KEY, { timeout: task.checkpointTimeout }))
sendCheckpointInitWarn(task, "INIT_TIMEOUT", task.checkpointTimeout)
task.enableCheckpoints = false
return undefined
} else {
sendCheckpointInitWarn(task, "")
sendCheckpointInitWarn(task)
}
return task.checkpointService
}
@ -120,12 +115,12 @@ export async function getCheckpointService(task: Task, { interval = 250 }: { int
await checkGitInstallation(task, service, log, provider)
task.checkpointService = service
if (task.enableCheckpoints) {
sendCheckpointInitWarn(task, "")
sendCheckpointInitWarn(task)
}
return service
} catch (err) {
if (err.name === "TimeoutError" && task.enableCheckpoints) {
sendCheckpointInitWarn(task, t(INIT_FAIL_LONG_TIME_I18_KEY, { timeout: task.checkpointTimeout }))
sendCheckpointInitWarn(task, "INIT_TIMEOUT", task.checkpointTimeout)
}
log(`[Task#getCheckpointService] ${err.message}`)
task.enableCheckpoints = false
@ -169,7 +164,7 @@ async function checkGitInstallation(
service.on("checkpoint", ({ fromHash: from, toHash: to, suppressMessage }) => {
try {
sendCheckpointInitWarn(task, "")
sendCheckpointInitWarn(task)
// Always update the current checkpoint hash in the webview, including the suppress flag
provider?.postMessageToWebview({
type: "currentCheckpointUpdated",

View file

@ -31,8 +31,6 @@
"could_not_open_file": "No s'ha pogut obrir el fitxer: {{errorMessage}}",
"could_not_open_file_generic": "No s'ha pogut obrir el fitxer!",
"checkpoint_timeout": "S'ha esgotat el temps en intentar restaurar el punt de control.",
"wait_checkpoint_long_time": "Has esperat {{timeout}} segons per inicialitzar el punt de control. Si no necessites aquesta funció, desactiva-la a la configuració.",
"init_checkpoint_fail_long_time": "La inicialització del punt de control ha trigat més de {{timeout}} segons. La funció de punt de control s'ha desactivat per a aquesta tasca. Pots desactivar-la o augmentar el temps d'espera a la configuració.",
"checkpoint_failed": "Ha fallat la restauració del punt de control.",
"git_not_installed": "Git és necessari per a la funció de punts de control. Si us plau, instal·la Git per activar els punts de control.",
"nested_git_repos_warning": "Els punts de control estan deshabilitats perquè s'ha detectat un repositori git niat a: {{path}}. Per utilitzar punts de control, si us plau elimina o reubica aquest repositori git niat.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "Datei konnte nicht geöffnet werden: {{errorMessage}}",
"could_not_open_file_generic": "Datei konnte nicht geöffnet werden!",
"checkpoint_timeout": "Zeitüberschreitung beim Versuch, den Checkpoint wiederherzustellen.",
"wait_checkpoint_long_time": "Du hast {{timeout}} Sekunden auf die Initialisierung des Checkpoints gewartet. Wenn du die Checkpoint-Funktion nicht brauchst, kannst du sie in den Einstellungen ausschalten.",
"init_checkpoint_fail_long_time": "Die Initialisierung des Checkpoints dauert länger als {{timeout}} Sekunden. Die Checkpoint-Funktion ist für diese Aufgabe deaktiviert. Du kannst Checkpoints ausschalten oder die Wartezeit in den Einstellungen verlängern.",
"checkpoint_failed": "Fehler beim Wiederherstellen des Checkpoints.",
"git_not_installed": "Git ist für die Checkpoint-Funktion erforderlich. Bitte installiere Git, um Checkpoints zu aktivieren.",
"nested_git_repos_warning": "Checkpoints sind deaktiviert, da ein verschachteltes Git-Repository erkannt wurde unter: {{path}}. Um Checkpoints zu verwenden, entferne oder verschiebe bitte dieses verschachtelte Git-Repository.",

View file

@ -30,8 +30,6 @@
"checkpoint_failed": "Failed to restore checkpoint.",
"git_not_installed": "Git is required for the checkpoints feature. Please install Git to enable checkpoints.",
"nested_git_repos_warning": "Checkpoints are disabled because a nested git repository was detected at: {{path}}. To use checkpoints, please remove or relocate this nested git repository.",
"wait_checkpoint_long_time": "Waited {{timeout}} seconds for checkpoint initialization. If you don't need the checkpoint feature, please turn it off in the settings.",
"init_checkpoint_fail_long_time": "Checkpoint initialization has taken more than {{timeout}} seconds. Checkpoint function is disabled for this task. You can disable checkpoint or extend the waiting time in settings.",
"no_workspace": "Please open a project folder first",
"update_support_prompt": "Failed to update support prompt",
"reset_support_prompt": "Failed to reset support prompt",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "No se pudo abrir el archivo: {{errorMessage}}",
"could_not_open_file_generic": "¡No se pudo abrir el archivo!",
"checkpoint_timeout": "Se agotó el tiempo al intentar restaurar el punto de control.",
"wait_checkpoint_long_time": "Has esperado {{timeout}} segundos para la inicialización del punto de control. Si no necesitas esta función, desactívala en la configuración.",
"init_checkpoint_fail_long_time": "La inicialización del punto de control ha tardado más de {{timeout}} segundos. La función de punto de control está desactivada para esta tarea. Puedes desactivarla o aumentar el tiempo de espera en la configuración.",
"checkpoint_failed": "Error al restaurar el punto de control.",
"git_not_installed": "Git es necesario para la función de puntos de control. Por favor, instala Git para activar los puntos de control.",
"nested_git_repos_warning": "Los puntos de control están deshabilitados porque se detectó un repositorio git anidado en: {{path}}. Para usar puntos de control, por favor elimina o reubica este repositorio git anidado.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "Impossible d'ouvrir le fichier : {{errorMessage}}",
"could_not_open_file_generic": "Impossible d'ouvrir le fichier !",
"checkpoint_timeout": "Expiration du délai lors de la tentative de rétablissement du checkpoint.",
"wait_checkpoint_long_time": "Tu as attendu {{timeout}} secondes pour l'initialisation du checkpoint. Si tu n'as pas besoin de cette fonction, désactive-la dans les paramètres.",
"init_checkpoint_fail_long_time": "L'initialisation du checkpoint a pris plus de {{timeout}} secondes. La fonction checkpoint est désactivée pour cette tâche. Tu peux la désactiver ou prolonger le délai dans les paramètres.",
"checkpoint_failed": "Échec du rétablissement du checkpoint.",
"git_not_installed": "Git est requis pour la fonctionnalité des points de contrôle. Veuillez installer Git pour activer les points de contrôle.",
"nested_git_repos_warning": "Les points de contrôle sont désactivés car un dépôt git imbriqué a été détecté à : {{path}}. Pour utiliser les points de contrôle, veuillez supprimer ou déplacer ce dépôt git imbriqué.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "फ़ाइल नहीं खोली जा सकी: {{errorMessage}}",
"could_not_open_file_generic": "फ़ाइल नहीं खोली जा सकी!",
"checkpoint_timeout": "चेकपॉइंट को पुनर्स्थापित करने का प्रयास करते समय टाइमआउट हो गया।",
"wait_checkpoint_long_time": "तुमने {{timeout}} सेकंड तक चेकपॉइंट इनिशियलाइज़ेशन का इंतजार किया। अगर तुम्हें यह फ़ीचर नहीं चाहिए, तो सेटिंग्स में बंद कर दो।",
"init_checkpoint_fail_long_time": "चेकपॉइंट इनिशियलाइज़ेशन {{timeout}} सेकंड से ज़्यादा समय ले रहा है। इस कार्य के लिए चेकपॉइंट फ़ीचर बंद कर दिया गया है। तुम इसे बंद कर सकते हो या सेटिंग्स में इंतजार का समय बढ़ा सकते हो।",
"checkpoint_failed": "चेकपॉइंट पुनर्स्थापित करने में विफल।",
"git_not_installed": "चेकपॉइंट सुविधा के लिए Git आवश्यक है। कृपया चेकपॉइंट সক্ষম करने के लिए Git इंस्टॉल करें।",
"nested_git_repos_warning": "चेकपॉइंट अक्षम हैं क्योंकि {{path}} पर नेस्टेड git रिपॉजिटरी का पता चला है। चेकपॉइंट का उपयोग करने के लिए, कृपया इस नेस्टेड git रिपॉजिटरी को हटाएं या स्थानांतरित करें।",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "Tidak dapat membuka file: {{errorMessage}}",
"could_not_open_file_generic": "Tidak dapat membuka file!",
"checkpoint_timeout": "Timeout saat mencoba memulihkan checkpoint.",
"wait_checkpoint_long_time": "Kamu sudah menunggu {{timeout}} detik untuk inisialisasi checkpoint. Kalau tidak butuh fitur ini, matikan saja di pengaturan.",
"init_checkpoint_fail_long_time": "Inisialisasi checkpoint sudah lebih dari {{timeout}} detik. Fitur checkpoint dinonaktifkan untuk tugas ini. Kamu bisa mematikan atau menambah waktu tunggu di pengaturan.",
"checkpoint_failed": "Gagal memulihkan checkpoint.",
"git_not_installed": "Git diperlukan untuk fitur checkpoint. Silakan instal Git untuk mengaktifkan checkpoint.",
"nested_git_repos_warning": "Checkpoint dinonaktifkan karena repositori git bersarang terdeteksi di: {{path}}. Untuk menggunakan checkpoint, silakan hapus atau pindahkan repositori git bersarang ini.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "Impossibile aprire il file: {{errorMessage}}",
"could_not_open_file_generic": "Impossibile aprire il file!",
"checkpoint_timeout": "Timeout durante il tentativo di ripristinare il checkpoint.",
"wait_checkpoint_long_time": "Hai aspettato {{timeout}} secondi per l'inizializzazione del checkpoint. Se non ti serve questa funzione, disattivala nelle impostazioni.",
"init_checkpoint_fail_long_time": "L'inizializzazione del checkpoint ha impiegato più di {{timeout}} secondi. La funzione checkpoint è disabilitata per questa attività. Puoi disattivarla o aumentare il tempo di attesa nelle impostazioni.",
"checkpoint_failed": "Impossibile ripristinare il checkpoint.",
"git_not_installed": "Git è richiesto per la funzione di checkpoint. Per favore, installa Git per abilitare i checkpoint.",
"nested_git_repos_warning": "I checkpoint sono disabilitati perché è stato rilevato un repository git annidato in: {{path}}. Per utilizzare i checkpoint, rimuovi o sposta questo repository git annidato.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "ファイルを開けませんでした:{{errorMessage}}",
"could_not_open_file_generic": "ファイルを開けませんでした!",
"checkpoint_timeout": "チェックポイントの復元を試みる際にタイムアウトしました。",
"wait_checkpoint_long_time": "{{timeout}} 秒間チェックポイントの初期化を待機しました。チェックポイント機能が不要な場合は、設定でオフにしてください。",
"init_checkpoint_fail_long_time": "チェックポイントの初期化が {{timeout}} 秒以上かかりました。このタスクではチェックポイント機能が無効化されました。チェックポイントをオフにするか、設定で待機時間を延長できます。",
"checkpoint_failed": "チェックポイントの復元に失敗しました。",
"git_not_installed": "チェックポイント機能にはGitが必要です。チェックポイントを有効にするにはGitをインストールしてください。",
"nested_git_repos_warning": "{{path}} でネストされたgitリポジトリが検出されたため、チェックポイントが無効になっています。チェックポイントを使用するには、このネストされたgitリポジトリを削除または移動してください。",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "파일을 열 수 없습니다: {{errorMessage}}",
"could_not_open_file_generic": "파일을 열 수 없습니다!",
"checkpoint_timeout": "체크포인트 복원을 시도하는 중 시간 초과되었습니다.",
"wait_checkpoint_long_time": "{{timeout}}초 동안 체크포인트 초기화를 기다렸어. 체크포인트 기능이 필요 없다면 설정에서 꺼 줘.",
"init_checkpoint_fail_long_time": "체크포인트 초기화가 {{timeout}}초 이상 걸렸어. 이 작업에 대해 체크포인트 기능이 꺼졌어. 체크포인트를 끄거나 설정에서 대기 시간을 늘릴 수 있어.",
"checkpoint_failed": "체크포인트 복원에 실패했습니다.",
"git_not_installed": "체크포인트 기능을 사용하려면 Git이 필요합니다. 체크포인트를 활성화하려면 Git을 설치하세요.",
"nested_git_repos_warning": "{{path}}에서 중첩된 git 저장소가 감지되어 체크포인트가 비활성화되었습니다. 체크포인트를 사용하려면 이 중첩된 git 저장소를 제거하거나 이동해주세요.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "Kon bestand niet openen: {{errorMessage}}",
"could_not_open_file_generic": "Kon bestand niet openen!",
"checkpoint_timeout": "Time-out bij het herstellen van checkpoint.",
"wait_checkpoint_long_time": "Je hebt {{timeout}} seconden gewacht op de initialisatie van de checkpoint. Als je deze functie niet nodig hebt, schakel hem dan uit in de instellingen.",
"init_checkpoint_fail_long_time": "De initialisatie van de checkpoint duurde meer dan {{timeout}} seconden. De checkpointfunctie is uitgeschakeld voor deze taak. Je kunt hem uitschakelen of de wachttijd in de instellingen verhogen.",
"checkpoint_failed": "Herstellen van checkpoint mislukt.",
"git_not_installed": "Git is vereist voor de checkpoint-functie. Installeer Git om checkpoints in te schakelen.",
"nested_git_repos_warning": "Checkpoints zijn uitgeschakeld omdat een geneste git-repository is gedetecteerd op: {{path}}. Om checkpoints te gebruiken, verwijder of verplaats deze geneste git-repository.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "Nie można otworzyć pliku: {{errorMessage}}",
"could_not_open_file_generic": "Nie można otworzyć pliku!",
"checkpoint_timeout": "Upłynął limit czasu podczas próby przywrócenia punktu kontrolnego.",
"wait_checkpoint_long_time": "Czekałeś {{timeout}} sekund na inicjalizację punktu kontrolnego. Jeśli nie potrzebujesz tej funkcji, wyłącz ją w ustawieniach.",
"init_checkpoint_fail_long_time": "Inicjalizacja punktu kontrolnego trwała ponad {{timeout}} sekund. Funkcja punktu kontrolnego została wyłączona dla tego zadania. Możesz ją wyłączyć lub wydłużyć czas oczekiwania w ustawieniach.",
"checkpoint_failed": "Nie udało się przywrócić punktu kontrolnego.",
"git_not_installed": "Funkcja punktów kontrolnych wymaga oprogramowania Git. Zainstaluj Git, aby włączyć punkty kontrolne.",
"nested_git_repos_warning": "Punkty kontrolne są wyłączone, ponieważ wykryto zagnieżdżone repozytorium git w: {{path}}. Aby używać punktów kontrolnych, usuń lub przenieś to zagnieżdżone repozytorium git.",

View file

@ -31,8 +31,6 @@
"could_not_open_file": "Não foi possível abrir o arquivo: {{errorMessage}}",
"could_not_open_file_generic": "Não foi possível abrir o arquivo!",
"checkpoint_timeout": "Tempo esgotado ao tentar restaurar o ponto de verificação.",
"wait_checkpoint_long_time": "Você esperou {{timeout}} segundos para inicializar o checkpoint. Se não precisa dessa função, desative nas configurações.",
"init_checkpoint_fail_long_time": "A inicialização do checkpoint levou mais de {{timeout}} segundos. A função de checkpoint foi desativada para esta tarefa. Você pode desativar ou aumentar o tempo de espera nas configurações.",
"checkpoint_failed": "Falha ao restaurar o ponto de verificação.",
"git_not_installed": "O Git é necessário para o recurso de checkpoints. Por favor, instale o Git para habilitar os checkpoints.",
"nested_git_repos_warning": "Os checkpoints estão desabilitados porque um repositório git aninhado foi detectado em: {{path}}. Para usar checkpoints, por favor remova ou realoque este repositório git aninhado.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "Не удалось открыть файл: {{errorMessage}}",
"could_not_open_file_generic": "Не удалось открыть файл!",
"checkpoint_timeout": "Превышено время ожидания при попытке восстановления контрольной точки.",
"wait_checkpoint_long_time": "Ожидание инициализации контрольной точки заняло {{timeout}} секунд. Если тебе не нужна эта функция, отключи её в настройках.",
"init_checkpoint_fail_long_time": "Инициализация контрольной точки заняла более {{timeout}} секунд. Функция контрольных точек отключена для этой задачи. Ты можешь отключить её или увеличить время ожидания в настройках.",
"checkpoint_failed": "Не удалось восстановить контрольную точку.",
"git_not_installed": "Для функции контрольных точек требуется Git. Пожалуйста, установите Git, чтобы включить контрольные точки.",
"nested_git_repos_warning": "Контрольные точки отключены, поскольку обнаружен вложенный git-репозиторий в: {{path}}. Чтобы использовать контрольные точки, пожалуйста, удалите или переместите этот вложенный git-репозиторий.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "Dosya açılamadı: {{errorMessage}}",
"could_not_open_file_generic": "Dosya açılamadı!",
"checkpoint_timeout": "Kontrol noktasını geri yüklemeye çalışırken zaman aşımına uğradı.",
"wait_checkpoint_long_time": "{{timeout}} saniye boyunca kontrol noktası başlatılması beklendi. Bu özelliğe ihtiyacın yoksa ayarlardan kapatabilirsin.",
"init_checkpoint_fail_long_time": "Kontrol noktası başlatılması {{timeout}} saniyeden fazla sürdü. Bu görev için kontrol noktası özelliği devre dışı bırakıldı. Özelliği kapatabilir veya ayarlardan bekleme süresini artırabilirsin.",
"checkpoint_failed": "Kontrol noktası geri yüklenemedi.",
"git_not_installed": "Kontrol noktaları özelliği için Git gereklidir. Kontrol noktalarını etkinleştirmek için lütfen Git'i yükleyin.",
"nested_git_repos_warning": "{{path}} konumunda iç içe git deposu tespit edildiği için kontrol noktaları devre dışı bırakıldı. Kontrol noktalarını kullanmak için lütfen bu iç içe git deposunu kaldırın veya taşıyın.",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "Không thể mở tệp: {{errorMessage}}",
"could_not_open_file_generic": "Không thể mở tệp!",
"checkpoint_timeout": "Đã hết thời gian khi cố gắng khôi phục điểm kiểm tra.",
"wait_checkpoint_long_time": "Bạn đã chờ {{timeout}} giây để khởi tạo điểm kiểm tra. Nếu không cần chức năng này, hãy tắt nó trong cài đặt.",
"init_checkpoint_fail_long_time": "Khởi tạo điểm kiểm tra mất hơn {{timeout}} giây. Chức năng điểm kiểm tra đã bị vô hiệu hóa cho tác vụ này. Bạn có thể tắt nó hoặc tăng thời gian chờ trong cài đặt.",
"checkpoint_failed": "Không thể khôi phục điểm kiểm tra.",
"git_not_installed": "Yêu cầu Git cho tính năng điểm kiểm tra. Vui lòng cài đặt Git để bật điểm kiểm tra.",
"nested_git_repos_warning": "Điểm kiểm tra bị vô hiệu hóa vì phát hiện kho git lồng nhau tại: {{path}}. Để sử dụng điểm kiểm tra, vui lòng xóa hoặc di chuyển kho git lồng nhau này.",

View file

@ -32,8 +32,6 @@
"could_not_open_file": "无法打开文件:{{errorMessage}}",
"could_not_open_file_generic": "无法打开文件!",
"checkpoint_timeout": "尝试恢复检查点时超时。",
"wait_checkpoint_long_time": "初始化存档点已等待 {{timeout}} 秒。如果你不需要存档点功能,请在设置中关闭。",
"init_checkpoint_fail_long_time": "存档点初始化已超过 {{timeout}} 秒。本任务已禁用存档点功能。你可以关闭存档点或在设置中延长等待时间。",
"checkpoint_failed": "恢复检查点失败。",
"git_not_installed": "存档点功能需要 Git。请安装 Git 以启用存档点。",
"nested_git_repos_warning": "存档点已禁用,因为在 {{path}} 检测到嵌套的 git 仓库。要使用存档点,请移除或重新定位此嵌套的 git 仓库。",

View file

@ -27,8 +27,6 @@
"could_not_open_file": "無法開啟檔案:{{errorMessage}}",
"could_not_open_file_generic": "無法開啟檔案!",
"checkpoint_timeout": "嘗試恢復檢查點時超時。",
"wait_checkpoint_long_time": "初始化存檔點已等待 {{timeout}} 秒。如果你不需要存檔點功能,請在設定中關閉。",
"init_checkpoint_fail_long_time": "存檔點初始化已超過 {{timeout}} 秒。此工作已停用存檔點功能。你可以關閉存檔點或在設定中延長等待時間。",
"checkpoint_failed": "恢復檢查點失敗。",
"git_not_installed": "存檔點功能需要 Git。請安裝 Git 以啟用存檔點。",
"nested_git_repos_warning": "存檔點已停用,因為在 {{path}} 偵測到巢狀的 git 儲存庫。要使用存檔點,請移除或重新配置此巢狀的 git 儲存庫。",

View file

@ -128,7 +128,10 @@ export interface ExtensionMessage {
text?: string
payload?: any // Add a generic payload for now, can refine later
// Checkpoint warning message
checkpointWarning?: string
checkpointWarning?: {
type: "WAIT_TIMEOUT" | "INIT_TIMEOUT"
timeout: number
}
action?:
| "chatButtonClicked"
| "mcpButtonClicked"

View file

@ -192,7 +192,9 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
const [isAtBottom, setIsAtBottom] = useState(false)
const lastTtsRef = useRef<string>("")
const [wasStreaming, setWasStreaming] = useState<boolean>(false)
const [checkpointWarningText, setCheckpointWarningText] = useState<string>("")
const [checkpointWarning, setCheckpointWarning] = useState<
{ type: "WAIT_TIMEOUT" | "INIT_TIMEOUT"; timeout: number } | undefined
>(undefined)
const [isCondensing, setIsCondensing] = useState<boolean>(false)
const [showAnnouncementModal, setShowAnnouncementModal] = useState(false)
const everVisibleMessagesTsRef = useRef<LRUCache<number, boolean>>(
@ -830,7 +832,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
}
break
case "checkpointInitWarning":
setCheckpointWarningText(message.checkpointWarning || "")
setCheckpointWarning(message.checkpointWarning)
break
}
// textAreaRef.current is not explicitly required here since React
@ -848,7 +850,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
handleSetChatBoxMessage,
handlePrimaryButtonClick,
handleSecondaryButtonClick,
setCheckpointWarningText,
setCheckpointWarning,
],
)
@ -1427,7 +1429,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
// Effect to clear checkpoint warning when messages appear or task changes
useEffect(() => {
if (isHidden || !task) {
setCheckpointWarningText("")
setCheckpointWarning(undefined)
}
}, [modifiedMessages.length, isStreaming, isHidden, task])
@ -1800,11 +1802,10 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
</div>
)}
{checkpointWarningText && (
<div className="px-3">
<CheckpointWarning text={checkpointWarningText} />
</div>
)}
{/* TEMPORARY: Always show warning for testing */}
<div className="px-3">
<CheckpointWarning warning={checkpointWarning || { type: "WAIT_TIMEOUT", timeout: 5 }} />
</div>
</>
) : (
<div className="flex-1 min-h-0 overflow-y-auto flex flex-col gap-4 relative">

View file

@ -2,10 +2,13 @@ import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"
import { Trans } from "react-i18next"
interface CheckpointWarningProps {
text?: string
warning: {
type: "WAIT_TIMEOUT" | "INIT_TIMEOUT"
timeout: number
}
}
export const CheckpointWarning = ({ text }: CheckpointWarningProps) => {
export const CheckpointWarning = ({ warning }: CheckpointWarningProps) => {
const settingsLink = (
<VSCodeLink
href="#"
@ -20,15 +23,24 @@ export const CheckpointWarning = ({ text }: CheckpointWarningProps) => {
"*",
)
}}
className="inline px-0.5"
className="inline"
/>
)
// Map warning type to i18n key
const i18nKey =
warning.type === "WAIT_TIMEOUT" ? "errors.wait_checkpoint_long_time" : "errors.init_checkpoint_fail_long_time"
return (
<div className="flex items-center p-3 my-3 bg-vscode-inputValidation-warningBackground border border-vscode-inputValidation-warningBorder rounded">
<span className="codicon codicon-loading codicon-modifier-spin mr-2" />
<span className="text-vscode-foreground">
{text ? text : <Trans i18nKey="chat:checkpoint.initializingWarning" components={{ settingsLink }} />}
<Trans
i18nKey={i18nKey}
ns="common"
values={{ timeout: warning.timeout }}
components={{ settingsLink }}
/>
</span>
</div>
)

View file

@ -95,5 +95,9 @@
"months_ago": "fa {{count}} mesos",
"year_ago": "fa un any",
"years_ago": "fa {{count}} anys"
},
"errors": {
"wait_checkpoint_long_time": "Has esperat {{timeout}} segons per inicialitzar el punt de control. Si no necessites aquesta funció, desactiva-la a <settingsLink>la configuració.</settingsLink>",
"init_checkpoint_fail_long_time": "La inicialització del punt de control ha trigat més de {{timeout}} segons. La funció de punt de control s'ha desactivat per a aquesta tasca. Pots desactivar-la o augmentar el temps d'espera a <settingsLink>la configuració.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "vor {{count}} Monaten",
"year_ago": "vor einem Jahr",
"years_ago": "vor {{count}} Jahren"
},
"errors": {
"wait_checkpoint_long_time": "Du hast {{timeout}} Sekunden auf die Initialisierung des Checkpoints gewartet. Wenn du die Checkpoint-Funktion nicht brauchst, kannst du sie in den <settingsLink>Einstellungen.</settingsLink> ausschalten",
"init_checkpoint_fail_long_time": "Die Initialisierung des Checkpoints dauert länger als {{timeout}} Sekunden. Die Checkpoint-Funktion ist für diese Aufgabe deaktiviert. Du kannst Checkpoints ausschalten oder die Wartezeit in den <settingsLink>Einstellungen.</settingsLink> verlängern"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} months ago",
"year_ago": "a year ago",
"years_ago": "{{count}} years ago"
},
"errors": {
"wait_checkpoint_long_time": "Waited {{timeout}} seconds for checkpoint initialization. If you don't need the checkpoint feature, please turn it off in <settingsLink>settings.</settingsLink>",
"init_checkpoint_fail_long_time": "Checkpoint initialization has taken more than {{timeout}} seconds. Checkpoint function is disabled for this task. You can disable checkpoint or extend the waiting time in <settingsLink>settings.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "hace {{count}} meses",
"year_ago": "hace un año",
"years_ago": "hace {{count}} años"
},
"errors": {
"wait_checkpoint_long_time": "Has esperado {{timeout}} segundos para la inicialización del punto de control. Si no necesitas esta función, desactívala en <settingsLink>la configuración.</settingsLink>",
"init_checkpoint_fail_long_time": "La inicialización del punto de control ha tardado más de {{timeout}} segundos. La función de punto de control está desactivada para esta tarea. Puedes desactivarla o aumentar el tiempo de espera en <settingsLink>la configuración.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "il y a {{count}} mois",
"year_ago": "il y a un an",
"years_ago": "il y a {{count}} ans"
},
"errors": {
"wait_checkpoint_long_time": "Tu as attendu {{timeout}} secondes pour l'initialisation du checkpoint. Si tu n'as pas besoin de cette fonction, désactive-la dans <settingsLink>les paramètres.</settingsLink>",
"init_checkpoint_fail_long_time": "L'initialisation du checkpoint a pris plus de {{timeout}} secondes. La fonction checkpoint est désactivée pour cette tâche. Tu peux la désactiver ou prolonger le délai dans <settingsLink>les paramètres.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} महीने पहले",
"year_ago": "एक साल पहले",
"years_ago": "{{count}} साल पहले"
},
"errors": {
"wait_checkpoint_long_time": "तुमने {{timeout}} सेकंड तक चेकपॉइंट इनिशियलाइज़ेशन का इंतजार किया। अगर तुम्हें यह फ़ीचर नहीं चाहिए, तो <settingsLink>सेटिंग्स.</settingsLink> में बंद कर दो",
"init_checkpoint_fail_long_time": "चेकपॉइंट इनिशियलाइज़ेशन {{timeout}} सेकंड से ज़्यादा समय ले रहा है। इस कार्य के लिए चेकपॉइंट फ़ीचर बंद कर दिया गया है। तुम इसे बंद कर सकते हो या <settingsLink>सेटिंग्स.</settingsLink> में इंतजार का समय बढ़ा सकते हो"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} bulan yang lalu",
"year_ago": "satu tahun yang lalu",
"years_ago": "{{count}} tahun yang lalu"
},
"errors": {
"wait_checkpoint_long_time": "Kamu sudah menunggu {{timeout}} detik untuk inisialisasi checkpoint. Kalau tidak butuh fitur ini, matikan saja di <settingsLink>pengaturan.</settingsLink>",
"init_checkpoint_fail_long_time": "Inisialisasi checkpoint sudah lebih dari {{timeout}} detik. Fitur checkpoint dinonaktifkan untuk tugas ini. Kamu bisa mematikan atau menambah waktu tunggu di <settingsLink>pengaturan.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} mesi fa",
"year_ago": "un anno fa",
"years_ago": "{{count}} anni fa"
},
"errors": {
"wait_checkpoint_long_time": "Hai aspettato {{timeout}} secondi per l'inizializzazione del checkpoint. Se non ti serve questa funzione, disattivala nelle <settingsLink>impostazioni.</settingsLink>",
"init_checkpoint_fail_long_time": "L'inizializzazione del checkpoint ha impiegato più di {{timeout}} secondi. La funzione checkpoint è disabilitata per questa attività. Puoi disattivarla o aumentare il tempo di attesa nelle <settingsLink>impostazioni.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}}ヶ月前",
"year_ago": "1年前",
"years_ago": "{{count}}年前"
},
"errors": {
"wait_checkpoint_long_time": "{{timeout}} 秒間チェックポイントの初期化を待機しました。チェックポイント機能が不要な場合は、<settingsLink>設定。</settingsLink>でオフにしてください",
"init_checkpoint_fail_long_time": "チェックポイントの初期化が {{timeout}} 秒以上かかりました。このタスクではチェックポイント機能が無効化されました。チェックポイントをオフにするか、<settingsLink>設定。</settingsLink>で待機時間を延長できます"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}}개월 전",
"year_ago": "1년 전",
"years_ago": "{{count}}년 전"
},
"errors": {
"wait_checkpoint_long_time": "{{timeout}}초 동안 체크포인트 초기화를 기다렸어. 체크포인트 기능이 필요 없다면 <settingsLink>설정.</settingsLink>에서 꺼 줘",
"init_checkpoint_fail_long_time": "체크포인트 초기화가 {{timeout}}초 이상 걸렸어. 이 작업에 대해 체크포인트 기능이 꺼졌어. 체크포인트를 끄거나 <settingsLink>설정.</settingsLink>에서 대기 시간을 늘릴 수 있어"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} maanden geleden",
"year_ago": "een jaar geleden",
"years_ago": "{{count}} jaar geleden"
},
"errors": {
"wait_checkpoint_long_time": "Je hebt {{timeout}} seconden gewacht op de initialisatie van de checkpoint. Als je deze functie niet nodig hebt, schakel hem dan uit in de <settingsLink>instellingen.</settingsLink>",
"init_checkpoint_fail_long_time": "De initialisatie van de checkpoint duurde meer dan {{timeout}} seconden. De checkpointfunctie is uitgeschakeld voor deze taak. Je kunt hem uitschakelen of de wachttijd in de <settingsLink>instellingen.</settingsLink> verhogen"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} miesięcy temu",
"year_ago": "rok temu",
"years_ago": "{{count}} lat temu"
},
"errors": {
"wait_checkpoint_long_time": "Czekałeś {{timeout}} sekund na inicjalizację punktu kontrolnego. Jeśli nie potrzebujesz tej funkcji, wyłącz ją w <settingsLink>ustawieniach.</settingsLink>",
"init_checkpoint_fail_long_time": "Inicjalizacja punktu kontrolnego trwała ponad {{timeout}} sekund. Funkcja punktu kontrolnego została wyłączona dla tego zadania. Możesz ją wyłączyć lub wydłużyć czas oczekiwania w <settingsLink>ustawieniach.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "há {{count}} meses",
"year_ago": "há um ano",
"years_ago": "há {{count}} anos"
},
"errors": {
"wait_checkpoint_long_time": "Você esperou {{timeout}} segundos para inicializar o checkpoint. Se não precisa dessa função, desative nas <settingsLink>configurações.</settingsLink>",
"init_checkpoint_fail_long_time": "A inicialização do checkpoint levou mais de {{timeout}} segundos. A função de checkpoint foi desativada para esta tarefa. Você pode desativar ou aumentar o tempo de espera nas <settingsLink>configurações.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} месяцев назад",
"year_ago": "год назад",
"years_ago": "{{count}} лет назад"
},
"errors": {
"wait_checkpoint_long_time": "Ожидание инициализации контрольной точки заняло {{timeout}} секунд. Если тебе не нужна эта функция, отключи её в <settingsLink>настройках.</settingsLink>",
"init_checkpoint_fail_long_time": "Инициализация контрольной точки заняла более {{timeout}} секунд. Функция контрольных точек отключена для этой задачи. Ты можешь отключить её или увеличить время ожидания в <settingsLink>настройках.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} ay önce",
"year_ago": "bir yıl önce",
"years_ago": "{{count}} yıl önce"
},
"errors": {
"wait_checkpoint_long_time": "{{timeout}} saniye boyunca kontrol noktası başlatılması beklendi. Bu özelliğe ihtiyacın yoksa <settingsLink>ayarlardan.</settingsLink> kapatabilirsin",
"init_checkpoint_fail_long_time": "Kontrol noktası başlatılması {{timeout}} saniyeden fazla sürdü. Bu görev için kontrol noktası özelliği devre dışı bırakıldı. Özelliği kapatabilir veya <settingsLink>ayarlardan.</settingsLink> bekleme süresini artırabilirsin"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} tháng trước",
"year_ago": "một năm trước",
"years_ago": "{{count}} năm trước"
},
"errors": {
"wait_checkpoint_long_time": "Bạn đã chờ {{timeout}} giây để khởi tạo điểm kiểm tra. Nếu không cần chức năng này, hãy tắt nó trong <settingsLink>cài đặt.</settingsLink>",
"init_checkpoint_fail_long_time": "Khởi tạo điểm kiểm tra mất hơn {{timeout}} giây. Chức năng điểm kiểm tra đã bị vô hiệu hóa cho tác vụ này. Bạn có thể tắt nó hoặc tăng thời gian chờ trong <settingsLink>cài đặt.</settingsLink>"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}}个月前",
"year_ago": "1年前",
"years_ago": "{{count}}年前"
},
"errors": {
"wait_checkpoint_long_time": "初始化存档点已等待 {{timeout}} 秒。如果你不需要存档点功能,请在<settingsLink>设置。</settingsLink>中关闭",
"init_checkpoint_fail_long_time": "存档点初始化已超过 {{timeout}} 秒。本任务已禁用存档点功能。你可以关闭存档点或在<settingsLink>设置。</settingsLink>中延长等待时间"
}
}

View file

@ -95,5 +95,9 @@
"months_ago": "{{count}} 個月前",
"year_ago": "1 年前",
"years_ago": "{{count}} 年前"
},
"errors": {
"wait_checkpoint_long_time": "初始化存檔點已等待 {{timeout}} 秒。如果你不需要存檔點功能,請在<settingsLink>設定。</settingsLink>中關閉",
"init_checkpoint_fail_long_time": "存檔點初始化已超過 {{timeout}} 秒。此工作已停用存檔點功能。你可以關閉存檔點或在<settingsLink>設定。</settingsLink>中延長等待時間"
}
}