mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-07 08:26:51 +00:00
feat: add checkpoint initialization timeout settings and warnings
- Added new localization strings for checkpoint initialization timeout messages in multiple languages. - Implemented checkpoint initialization timeout feature in settings, allowing users to configure the timeout duration (10-60 seconds). - Updated the ShadowCheckpointService to handle long initialization times and provide appropriate warnings. - Enhanced the chat component to display checkpoint initialization warnings based on the new timeout settings. - Modified the CheckpointWarning component to accept custom warning messages. - Updated tests to cover new checkpoint timeout functionality and ensure proper integration.
This commit is contained in:
parent
68c5be8030
commit
a9a2e8c234
53 changed files with 239 additions and 33 deletions
|
|
@ -97,6 +97,7 @@ export const globalSettingsSchema = z.object({
|
|||
cachedChromeHostUrl: z.string().optional(),
|
||||
|
||||
enableCheckpoints: z.boolean().optional(),
|
||||
checkpointTimeout: z.number().optional(),
|
||||
|
||||
ttsEnabled: z.boolean().optional(),
|
||||
ttsSpeed: z.number().optional(),
|
||||
|
|
|
|||
|
|
@ -168,6 +168,7 @@ vi.mock("../activate", () => ({
|
|||
|
||||
vi.mock("../i18n", () => ({
|
||||
initializeI18n: vi.fn(),
|
||||
t: vi.fn((key) => key),
|
||||
}))
|
||||
|
||||
describe("extension.ts", () => {
|
||||
|
|
|
|||
|
|
@ -16,10 +16,17 @@ import { DIFF_VIEW_URI_SCHEME } from "../../integrations/editor/DiffViewProvider
|
|||
|
||||
import { CheckpointServiceOptions, RepoPerTaskCheckpointService } from "../../services/checkpoints"
|
||||
|
||||
export async function getCheckpointService(
|
||||
task: Task,
|
||||
{ interval = 250, timeout = 15_000 }: { interval?: number; timeout?: number } = {},
|
||||
) {
|
||||
const waitWarn = t("common:errors.wait_checkpoint_long_time")
|
||||
const failWarn = t("common:errors.init_checkpoint_fail_long_time")
|
||||
|
||||
function sendCheckpointInitWarn(task: Task, checkpointWarning: string) {
|
||||
task.providerRef.deref()?.postMessageToWebview({
|
||||
type: "checkpointInitWarning",
|
||||
checkpointWarning,
|
||||
})
|
||||
}
|
||||
|
||||
export async function getCheckpointService(task: Task, { interval = 250 }: { interval?: number } = {}) {
|
||||
if (!task.enableCheckpoints) {
|
||||
return undefined
|
||||
}
|
||||
|
|
@ -30,6 +37,9 @@ export async function getCheckpointService(
|
|||
|
||||
const provider = task.providerRef.deref()
|
||||
|
||||
// Get checkpoint timeout from task settings (converted to milliseconds)
|
||||
const checkpointTimeoutMs = task.checkpointTimeout * 1000
|
||||
|
||||
const log = (message: string) => {
|
||||
console.log(message)
|
||||
|
||||
|
|
@ -67,14 +77,28 @@ export async function getCheckpointService(
|
|||
}
|
||||
|
||||
if (task.checkpointServiceInitializing) {
|
||||
const checkpointInitStartTime = Date.now()
|
||||
let warningShown = false
|
||||
|
||||
await pWaitFor(
|
||||
() => {
|
||||
console.log("[Task#getCheckpointService] waiting for service to initialize")
|
||||
const elapsed = Date.now() - checkpointInitStartTime
|
||||
|
||||
// Show warning if we're past 5 seconds and haven't shown it yet
|
||||
if (!warningShown && elapsed >= 5000) {
|
||||
warningShown = true
|
||||
sendCheckpointInitWarn(task, waitWarn)
|
||||
}
|
||||
|
||||
console.log(
|
||||
`[Task#getCheckpointService] waiting for service to initialize (${Math.round(elapsed / 1000)}s)`,
|
||||
)
|
||||
return !!task.checkpointService && !!task?.checkpointService?.isInitialized
|
||||
},
|
||||
{ interval, timeout },
|
||||
{ interval, timeout: checkpointTimeoutMs },
|
||||
)
|
||||
if (!task?.checkpointService) {
|
||||
sendCheckpointInitWarn(task, failWarn)
|
||||
task.enableCheckpoints = false
|
||||
return undefined
|
||||
}
|
||||
|
|
@ -89,8 +113,14 @@ export async function getCheckpointService(
|
|||
task.checkpointServiceInitializing = true
|
||||
await checkGitInstallation(task, service, log, provider)
|
||||
task.checkpointService = service
|
||||
if (task.enableCheckpoints) {
|
||||
sendCheckpointInitWarn(task, "")
|
||||
}
|
||||
return service
|
||||
} catch (err) {
|
||||
if (err.name == "TimeoutError" && task.enableCheckpoints) {
|
||||
sendCheckpointInitWarn(task, failWarn)
|
||||
}
|
||||
log(`[Task#getCheckpointService] ${err.message}`)
|
||||
task.enableCheckpoints = false
|
||||
task.checkpointServiceInitializing = false
|
||||
|
|
|
|||
|
|
@ -125,6 +125,7 @@ export interface TaskOptions extends CreateTaskOptions {
|
|||
apiConfiguration: ProviderSettings
|
||||
enableDiff?: boolean
|
||||
enableCheckpoints?: boolean
|
||||
checkpointTimeout?: number
|
||||
enableBridge?: boolean
|
||||
fuzzyMatchThreshold?: number
|
||||
consecutiveMistakeLimit?: number
|
||||
|
|
@ -266,6 +267,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
|
||||
// Checkpoints
|
||||
enableCheckpoints: boolean
|
||||
checkpointTimeout: number
|
||||
checkpointService?: RepoPerTaskCheckpointService
|
||||
checkpointServiceInitializing = false
|
||||
|
||||
|
|
@ -302,6 +304,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
apiConfiguration,
|
||||
enableDiff = false,
|
||||
enableCheckpoints = true,
|
||||
checkpointTimeout = 15,
|
||||
enableBridge = false,
|
||||
fuzzyMatchThreshold = 1.0,
|
||||
consecutiveMistakeLimit = DEFAULT_CONSECUTIVE_MISTAKE_LIMIT,
|
||||
|
|
@ -361,6 +364,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
|
|||
this.globalStoragePath = provider.context.globalStorageUri.fsPath
|
||||
this.diffViewProvider = new DiffViewProvider(this.cwd, this)
|
||||
this.enableCheckpoints = enableCheckpoints
|
||||
this.checkpointTimeout = checkpointTimeout
|
||||
this.enableBridge = enableBridge
|
||||
|
||||
this.parentTask = parentTask
|
||||
|
|
|
|||
|
|
@ -864,6 +864,7 @@ export class ClineProvider
|
|||
apiConfiguration,
|
||||
diffEnabled: enableDiff,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
fuzzyMatchThreshold,
|
||||
experiments,
|
||||
cloudUserInfo,
|
||||
|
|
@ -875,6 +876,7 @@ export class ClineProvider
|
|||
apiConfiguration,
|
||||
enableDiff,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
fuzzyMatchThreshold,
|
||||
consecutiveMistakeLimit: apiConfiguration.consecutiveMistakeLimit,
|
||||
historyItem,
|
||||
|
|
@ -1717,6 +1719,7 @@ export class ClineProvider
|
|||
ttsSpeed,
|
||||
diffEnabled,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
taskHistory,
|
||||
soundVolume,
|
||||
browserViewportSize,
|
||||
|
|
@ -1829,6 +1832,7 @@ export class ClineProvider
|
|||
ttsSpeed: ttsSpeed ?? 1.0,
|
||||
diffEnabled: diffEnabled ?? true,
|
||||
enableCheckpoints: enableCheckpoints ?? true,
|
||||
checkpointTimeout: checkpointTimeout ?? 15,
|
||||
shouldShowAnnouncement:
|
||||
telemetrySetting !== "unset" && lastShownAnnouncementId !== this.latestAnnouncementId,
|
||||
allowedCommands: mergedAllowedCommands,
|
||||
|
|
@ -2049,6 +2053,7 @@ export class ClineProvider
|
|||
ttsSpeed: stateValues.ttsSpeed ?? 1.0,
|
||||
diffEnabled: stateValues.diffEnabled ?? true,
|
||||
enableCheckpoints: stateValues.enableCheckpoints ?? true,
|
||||
checkpointTimeout: stateValues.checkpointTimeout ?? 15,
|
||||
soundVolume: stateValues.soundVolume,
|
||||
browserViewportSize: stateValues.browserViewportSize ?? "900x600",
|
||||
screenshotQuality: stateValues.screenshotQuality ?? 75,
|
||||
|
|
@ -2478,6 +2483,7 @@ export class ClineProvider
|
|||
organizationAllowList,
|
||||
diffEnabled: enableDiff,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
fuzzyMatchThreshold,
|
||||
experiments,
|
||||
cloudUserInfo,
|
||||
|
|
@ -2493,6 +2499,7 @@ export class ClineProvider
|
|||
apiConfiguration,
|
||||
enableDiff,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
fuzzyMatchThreshold,
|
||||
consecutiveMistakeLimit: apiConfiguration.consecutiveMistakeLimit,
|
||||
task: text,
|
||||
|
|
|
|||
|
|
@ -557,6 +557,7 @@ describe("ClineProvider", () => {
|
|||
remoteControlEnabled: false,
|
||||
taskSyncEnabled: false,
|
||||
featureRoomoteControlEnabled: false,
|
||||
checkpointTimeout: 15,
|
||||
}
|
||||
|
||||
const message: ExtensionMessage = {
|
||||
|
|
|
|||
|
|
@ -1259,6 +1259,11 @@ export const webviewMessageHandler = async (
|
|||
await updateGlobalState("enableCheckpoints", enableCheckpoints)
|
||||
await provider.postStateToWebview()
|
||||
break
|
||||
case "checkpointTimeout":
|
||||
const checkpointTimeout = message.value ?? 15
|
||||
await updateGlobalState("checkpointTimeout", checkpointTimeout)
|
||||
await provider.postStateToWebview()
|
||||
break
|
||||
case "browserViewportSize":
|
||||
const browserViewportSize = message.text ?? "900x600"
|
||||
await updateGlobalState("browserViewportSize", browserViewportSize)
|
||||
|
|
|
|||
2
src/i18n/locales/ca/common.json
generated
2
src/i18n/locales/ca/common.json
generated
|
|
@ -31,6 +31,8 @@
|
|||
"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": "La inicialització del punt de control està trigant més del previst. Això pot indicar un repositori gran o operacions Git lentes.",
|
||||
"init_checkpoint_fail_long_time": "La inicialització del punt de control ha fallat després de molt de temps. Els punts de control s'han desactivat per a aquesta tasca. Pots desactivar completament els punts de control 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.",
|
||||
|
|
|
|||
2
src/i18n/locales/de/common.json
generated
2
src/i18n/locales/de/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"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": "Die Initialisierung des Checkpoints dauert länger als erwartet. Das kann auf ein großes Repository oder langsame Git-Vorgänge hindeuten.",
|
||||
"init_checkpoint_fail_long_time": "Die Initialisierung des Checkpoints ist nach langer Wartezeit fehlgeschlagen. Checkpoints wurden für diese Aufgabe deaktiviert. Du kannst Checkpoints komplett deaktivieren oder das Timeout in den Einstellungen erhöhen.",
|
||||
"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.",
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@
|
|||
"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": "Checkpoint initialization is taking longer than expected. This may indicate a large repository or slow Git operations.",
|
||||
"init_checkpoint_fail_long_time": "Checkpoint initialization failed after taking long time. Checkpoints have been disabled for this task. You can disable checkpoints entirely or increase the timeout 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",
|
||||
|
|
|
|||
2
src/i18n/locales/es/common.json
generated
2
src/i18n/locales/es/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"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": "La inicialización del punto de control está tardando más de lo esperado. Esto puede indicar un repositorio grande o operaciones de Git lentas.",
|
||||
"init_checkpoint_fail_long_time": "La inicialización del punto de control falló después de mucho tiempo. Los puntos de control se han desactivado para esta tarea. Puedes desactivar los puntos de control completamente 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.",
|
||||
|
|
|
|||
2
src/i18n/locales/fr/common.json
generated
2
src/i18n/locales/fr/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"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": "L'initialisation du checkpoint prend plus de temps que prévu. Cela peut indiquer un dépôt volumineux ou des opérations Git lentes.",
|
||||
"init_checkpoint_fail_long_time": "L'initialisation du checkpoint a échoué après un long délai. Les checkpoints ont été désactivés pour cette tâche. Tu peux désactiver complètement les checkpoints ou augmenter 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é.",
|
||||
|
|
|
|||
2
src/i18n/locales/hi/common.json
generated
2
src/i18n/locales/hi/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"could_not_open_file": "फ़ाइल नहीं खोली जा सकी: {{errorMessage}}",
|
||||
"could_not_open_file_generic": "फ़ाइल नहीं खोली जा सकी!",
|
||||
"checkpoint_timeout": "चेकपॉइंट को पुनर्स्थापित करने का प्रयास करते समय टाइमआउट हो गया।",
|
||||
"wait_checkpoint_long_time": "चेकपॉइंट इनिशियलाइज़ेशन अपेक्षा से अधिक समय ले रहा है। यह बड़े रिपॉजिटरी या धीमी Git ऑपरेशन्स का संकेत हो सकता है।",
|
||||
"init_checkpoint_fail_long_time": "चेकपॉइंट इनिशियलाइज़ेशन लंबे समय बाद विफल हो गया। इस कार्य के लिए चेकपॉइंट्स अक्षम कर दिए गए हैं। तुम चेकपॉइंट्स पूरी तरह अक्षम कर सकते हो या सेटिंग्स में टाइमआउट बढ़ा सकते हो।",
|
||||
"checkpoint_failed": "चेकपॉइंट पुनर्स्थापित करने में विफल।",
|
||||
"git_not_installed": "चेकपॉइंट सुविधा के लिए Git आवश्यक है। कृपया चेकपॉइंट সক্ষম करने के लिए Git इंस्टॉल करें।",
|
||||
"nested_git_repos_warning": "चेकपॉइंट अक्षम हैं क्योंकि {{path}} पर नेस्टेड git रिपॉजिटरी का पता चला है। चेकपॉइंट का उपयोग करने के लिए, कृपया इस नेस्टेड git रिपॉजिटरी को हटाएं या स्थानांतरित करें।",
|
||||
|
|
|
|||
2
src/i18n/locales/id/common.json
generated
2
src/i18n/locales/id/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"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": "Inisialisasi checkpoint memakan waktu lebih lama dari yang diharapkan. Ini mungkin menandakan repositori besar atau operasi Git yang lambat.",
|
||||
"init_checkpoint_fail_long_time": "Inisialisasi checkpoint gagal setelah waktu lama. Checkpoint telah dinonaktifkan untuk tugas ini. Kamu bisa menonaktifkan checkpoint sepenuhnya atau menambah batas waktu 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.",
|
||||
|
|
|
|||
2
src/i18n/locales/it/common.json
generated
2
src/i18n/locales/it/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"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": "L'inizializzazione del checkpoint sta richiedendo più tempo del previsto. Questo può indicare un repository grande o operazioni Git lente.",
|
||||
"init_checkpoint_fail_long_time": "L'inizializzazione del checkpoint è fallita dopo molto tempo. I checkpoint sono stati disabilitati per questa attività. Puoi disabilitare completamente i checkpoint o aumentare il timeout 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.",
|
||||
|
|
|
|||
2
src/i18n/locales/ja/common.json
generated
2
src/i18n/locales/ja/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"could_not_open_file": "ファイルを開けませんでした:{{errorMessage}}",
|
||||
"could_not_open_file_generic": "ファイルを開けませんでした!",
|
||||
"checkpoint_timeout": "チェックポイントの復元を試みる際にタイムアウトしました。",
|
||||
"wait_checkpoint_long_time": "チェックポイントの初期化に予想以上の時間がかかっています。これはリポジトリが大きいか、Git操作が遅い可能性があります。",
|
||||
"init_checkpoint_fail_long_time": "チェックポイントの初期化が長時間かかった後に失敗しました。このタスクではチェックポイントが無効化されました。チェックポイントを完全に無効化するか、設定でタイムアウトを延長できます。",
|
||||
"checkpoint_failed": "チェックポイントの復元に失敗しました。",
|
||||
"git_not_installed": "チェックポイント機能にはGitが必要です。チェックポイントを有効にするにはGitをインストールしてください。",
|
||||
"nested_git_repos_warning": "{{path}} でネストされたgitリポジトリが検出されたため、チェックポイントが無効になっています。チェックポイントを使用するには、このネストされたgitリポジトリを削除または移動してください。",
|
||||
|
|
|
|||
2
src/i18n/locales/ko/common.json
generated
2
src/i18n/locales/ko/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"could_not_open_file": "파일을 열 수 없습니다: {{errorMessage}}",
|
||||
"could_not_open_file_generic": "파일을 열 수 없습니다!",
|
||||
"checkpoint_timeout": "체크포인트 복원을 시도하는 중 시간 초과되었습니다.",
|
||||
"wait_checkpoint_long_time": "체크포인트 초기화가 예상보다 오래 걸리고 있어. 이는 저장소가 크거나 Git 작업이 느릴 수 있어.",
|
||||
"init_checkpoint_fail_long_time": "체크포인트 초기화가 오랜 시간 후 실패했어. 이 작업에 대해 체크포인트가 비활성화됐어. 체크포인트를 완전히 끄거나 설정에서 타임아웃을 늘릴 수 있어.",
|
||||
"checkpoint_failed": "체크포인트 복원에 실패했습니다.",
|
||||
"git_not_installed": "체크포인트 기능을 사용하려면 Git이 필요합니다. 체크포인트를 활성화하려면 Git을 설치하세요.",
|
||||
"nested_git_repos_warning": "{{path}}에서 중첩된 git 저장소가 감지되어 체크포인트가 비활성화되었습니다. 체크포인트를 사용하려면 이 중첩된 git 저장소를 제거하거나 이동해주세요.",
|
||||
|
|
|
|||
2
src/i18n/locales/nl/common.json
generated
2
src/i18n/locales/nl/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"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": "De initialisatie van de checkpoint duurt langer dan verwacht. Dit kan wijzen op een grote repository of trage Git-bewerkingen.",
|
||||
"init_checkpoint_fail_long_time": "De initialisatie van de checkpoint is na lange tijd mislukt. Checkpoints zijn uitgeschakeld voor deze taak. Je kunt checkpoints volledig uitschakelen of de timeout verhogen in de instellingen.",
|
||||
"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.",
|
||||
|
|
|
|||
2
src/i18n/locales/pl/common.json
generated
2
src/i18n/locales/pl/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"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": "Inicjalizacja punktu kontrolnego trwa dłużej niż oczekiwano. Może to oznaczać dużą zawartość repozytorium lub wolne operacje Git.",
|
||||
"init_checkpoint_fail_long_time": "Inicjalizacja punktu kontrolnego nie powiodła się po długim czasie. Punkty kontrolne zostały wyłączone dla tego zadania. Możesz całkowicie wyłączyć punkty kontrolne lub zwiększyć limit czasu 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.",
|
||||
|
|
|
|||
2
src/i18n/locales/pt-BR/common.json
generated
2
src/i18n/locales/pt-BR/common.json
generated
|
|
@ -31,6 +31,8 @@
|
|||
"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": "A inicialização do checkpoint está demorando mais do que o esperado. Isso pode indicar um repositório grande ou operações Git lentas.",
|
||||
"init_checkpoint_fail_long_time": "A inicialização do checkpoint falhou após muito tempo. Os checkpoints foram desativados para esta tarefa. Você pode desativar completamente os checkpoints ou aumentar o tempo limite 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.",
|
||||
|
|
|
|||
2
src/i18n/locales/ru/common.json
generated
2
src/i18n/locales/ru/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"could_not_open_file": "Не удалось открыть файл: {{errorMessage}}",
|
||||
"could_not_open_file_generic": "Не удалось открыть файл!",
|
||||
"checkpoint_timeout": "Превышено время ожидания при попытке восстановления контрольной точки.",
|
||||
"wait_checkpoint_long_time": "Инициализация контрольной точки занимает больше времени, чем ожидалось. Это может указывать на большой репозиторий или медленные операции Git.",
|
||||
"init_checkpoint_fail_long_time": "Инициализация контрольной точки завершилась неудачно после долгого ожидания. Контрольные точки отключены для этой задачи. Ты можешь полностью отключить контрольные точки или увеличить таймаут в настройках.",
|
||||
"checkpoint_failed": "Не удалось восстановить контрольную точку.",
|
||||
"git_not_installed": "Для функции контрольных точек требуется Git. Пожалуйста, установите Git, чтобы включить контрольные точки.",
|
||||
"nested_git_repos_warning": "Контрольные точки отключены, поскольку обнаружен вложенный git-репозиторий в: {{path}}. Чтобы использовать контрольные точки, пожалуйста, удалите или переместите этот вложенный git-репозиторий.",
|
||||
|
|
|
|||
2
src/i18n/locales/tr/common.json
generated
2
src/i18n/locales/tr/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"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": "Kontrol noktası başlatılması beklenenden uzun sürüyor. Bu, büyük bir depo veya yavaş Git işlemleri anlamına gelebilir.",
|
||||
"init_checkpoint_fail_long_time": "Kontrol noktası başlatılması uzun süre sonra başarısız oldu. Bu görev için kontrol noktaları devre dışı bırakıldı. Kontrol noktalarını tamamen devre dışı bırakabilir veya ayarlardan zaman aşımını 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.",
|
||||
|
|
|
|||
2
src/i18n/locales/vi/common.json
generated
2
src/i18n/locales/vi/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"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": "Khởi tạo điểm kiểm tra đang mất nhiều thời gian hơn dự kiến. Điều này có thể do kho lưu trữ lớn hoặc các thao tác Git chậm.",
|
||||
"init_checkpoint_fail_long_time": "Khởi tạo điểm kiểm tra thất bại sau thời gian dài. Điểm kiểm tra đã bị vô hiệu hóa cho tác vụ này. Bạn có thể tắt hoàn toàn điểm kiểm tra 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.",
|
||||
|
|
|
|||
2
src/i18n/locales/zh-CN/common.json
generated
2
src/i18n/locales/zh-CN/common.json
generated
|
|
@ -32,6 +32,8 @@
|
|||
"could_not_open_file": "无法打开文件:{{errorMessage}}",
|
||||
"could_not_open_file_generic": "无法打开文件!",
|
||||
"checkpoint_timeout": "尝试恢复检查点时超时。",
|
||||
"wait_checkpoint_long_time": "存档点初始化耗时超出预期,可能是仓库较大或 Git 操作较慢。",
|
||||
"init_checkpoint_fail_long_time": "存档点初始化长时间后失败,已为本任务禁用存档点。你可以完全禁用存档点或在设置中增加超时时间。",
|
||||
"checkpoint_failed": "恢复检查点失败。",
|
||||
"git_not_installed": "存档点功能需要 Git。请安装 Git 以启用存档点。",
|
||||
"nested_git_repos_warning": "存档点已禁用,因为在 {{path}} 检测到嵌套的 git 仓库。要使用存档点,请移除或重新定位此嵌套的 git 仓库。",
|
||||
|
|
|
|||
2
src/i18n/locales/zh-TW/common.json
generated
2
src/i18n/locales/zh-TW/common.json
generated
|
|
@ -27,6 +27,8 @@
|
|||
"could_not_open_file": "無法開啟檔案:{{errorMessage}}",
|
||||
"could_not_open_file_generic": "無法開啟檔案!",
|
||||
"checkpoint_timeout": "嘗試恢復檢查點時超時。",
|
||||
"wait_checkpoint_long_time": "存檔點初始化花費時間超過預期,可能是專案資料夾很大或 Git 操作較慢。",
|
||||
"init_checkpoint_fail_long_time": "存檔點初始化長時間後失敗,已為此工作停用存檔點。你可以完全停用存檔點或在設定中增加逾時時間。",
|
||||
"checkpoint_failed": "恢復檢查點失敗。",
|
||||
"git_not_installed": "存檔點功能需要 Git。請安裝 Git 以啟用存檔點。",
|
||||
"nested_git_repos_warning": "存檔點已停用,因為在 {{path}} 偵測到巢狀的 git 儲存庫。要使用存檔點,請移除或重新配置此巢狀的 git 儲存庫。",
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ export abstract class ShadowCheckpointService extends EventEmitter {
|
|||
|
||||
private async stageAll(git: SimpleGit) {
|
||||
try {
|
||||
await git.add(".")
|
||||
await git.add([".", "--ignore-errors"])
|
||||
} catch (error) {
|
||||
this.log(
|
||||
`[${this.constructor.name}#stageAll] failed to add files to git: ${error instanceof Error ? error.message : String(error)}`,
|
||||
|
|
@ -240,7 +240,7 @@ export abstract class ShadowCheckpointService extends EventEmitter {
|
|||
|
||||
const startTime = Date.now()
|
||||
await this.stageAll(this.git)
|
||||
const commitArgs = options?.allowEmpty ? { "--allow-empty": null } : undefined
|
||||
const commitArgs = options?.allowEmpty ? { "--allow-empty": null, "--no-verify": null } : undefined
|
||||
const result = await this.git.commit(message, commitArgs)
|
||||
const fromHash = this._checkpoints[this._checkpoints.length - 1] ?? this.baseHash!
|
||||
const toHash = result.commit || fromHash
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ export interface ExtensionMessage {
|
|||
| "checkRulesDirectoryResult"
|
||||
| "deleteCustomModeCheck"
|
||||
| "currentCheckpointUpdated"
|
||||
| "checkpointInitWarning"
|
||||
| "showHumanRelayDialog"
|
||||
| "humanRelayResponse"
|
||||
| "humanRelayCancel"
|
||||
|
|
@ -126,6 +127,8 @@ export interface ExtensionMessage {
|
|||
| "dismissedUpsells"
|
||||
text?: string
|
||||
payload?: any // Add a generic payload for now, can refine later
|
||||
// Checkpoint warning message
|
||||
checkpointWarning?: string
|
||||
action?:
|
||||
| "chatButtonClicked"
|
||||
| "mcpButtonClicked"
|
||||
|
|
@ -298,6 +301,7 @@ export type ExtensionState = Pick<
|
|||
requestDelaySeconds: number
|
||||
|
||||
enableCheckpoints: boolean
|
||||
checkpointTimeout: number // Timeout for checkpoint initialization in seconds (default: 15)
|
||||
maxOpenTabsContext: number // Maximum number of VSCode open tabs to include in context (0-500)
|
||||
maxWorkspaceFiles: number // Maximum number of files to include in current working directory details (0-500)
|
||||
showRooIgnoredFiles: boolean // Whether to show .rooignore'd files in listings
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ export interface WebviewMessage {
|
|||
| "soundVolume"
|
||||
| "diffEnabled"
|
||||
| "enableCheckpoints"
|
||||
| "checkpointTimeout"
|
||||
| "browserViewportSize"
|
||||
| "screenshotQuality"
|
||||
| "remoteBrowserHost"
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
|
|||
const [isAtBottom, setIsAtBottom] = useState(false)
|
||||
const lastTtsRef = useRef<string>("")
|
||||
const [wasStreaming, setWasStreaming] = useState<boolean>(false)
|
||||
const [showCheckpointWarning, setShowCheckpointWarning] = useState<boolean>(false)
|
||||
const [checkpointWarningText, setCheckpointWarningText] = useState<string>("")
|
||||
const [isCondensing, setIsCondensing] = useState<boolean>(false)
|
||||
const [showAnnouncementModal, setShowAnnouncementModal] = useState(false)
|
||||
const everVisibleMessagesTsRef = useRef<LRUCache<number, boolean>>(
|
||||
|
|
@ -829,6 +829,9 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
|
|||
setIsCondensing(false)
|
||||
}
|
||||
break
|
||||
case "checkpointInitWarning":
|
||||
setCheckpointWarningText(message.checkpointWarning || "")
|
||||
break
|
||||
}
|
||||
// textAreaRef.current is not explicitly required here since React
|
||||
// guarantees that ref will be stable across re-renders, and we're
|
||||
|
|
@ -845,6 +848,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
|
|||
handleSetChatBoxMessage,
|
||||
handlePrimaryButtonClick,
|
||||
handleSecondaryButtonClick,
|
||||
setCheckpointWarningText,
|
||||
],
|
||||
)
|
||||
|
||||
|
|
@ -1420,26 +1424,12 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
|
|||
|
||||
useEvent("wheel", handleWheel, window, { passive: true }) // passive improves scrolling performance
|
||||
|
||||
// Effect to handle showing the checkpoint warning after a delay
|
||||
// Effect to clear checkpoint warning when messages appear or task changes
|
||||
useEffect(() => {
|
||||
// Only show the warning when there's a task but no visible messages yet
|
||||
if (task && modifiedMessages.length === 0 && !isStreaming && !isHidden) {
|
||||
const timer = setTimeout(() => {
|
||||
setShowCheckpointWarning(true)
|
||||
}, 5000) // 5 seconds
|
||||
|
||||
return () => clearTimeout(timer)
|
||||
} else {
|
||||
setShowCheckpointWarning(false)
|
||||
if (isHidden || !task) {
|
||||
setCheckpointWarningText("")
|
||||
}
|
||||
}, [task, modifiedMessages.length, isStreaming, isHidden])
|
||||
|
||||
// Effect to hide the checkpoint warning when messages appear
|
||||
useEffect(() => {
|
||||
if (modifiedMessages.length > 0 || isStreaming || isHidden) {
|
||||
setShowCheckpointWarning(false)
|
||||
}
|
||||
}, [modifiedMessages.length, isStreaming, isHidden])
|
||||
}, [modifiedMessages.length, isStreaming, isHidden, task])
|
||||
|
||||
const placeholderText = task ? t("chat:typeMessage") : t("chat:typeTask")
|
||||
|
||||
|
|
@ -1810,9 +1800,9 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
|
|||
</div>
|
||||
)}
|
||||
|
||||
{showCheckpointWarning && (
|
||||
{checkpointWarningText && (
|
||||
<div className="px-3">
|
||||
<CheckpointWarning />
|
||||
<CheckpointWarning text={checkpointWarningText} />
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,21 @@
|
|||
import { Trans } from "react-i18next"
|
||||
import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"
|
||||
import { useMemo } from "react"
|
||||
|
||||
export const CheckpointWarning = () => {
|
||||
interface CheckpointWarningProps {
|
||||
text?: string
|
||||
}
|
||||
|
||||
export const CheckpointWarning = ({ text }: CheckpointWarningProps) => {
|
||||
const warningText = useMemo(() => {
|
||||
return text || "chat:checkpoint.initializingWarning"
|
||||
}, [text])
|
||||
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">
|
||||
<Trans
|
||||
i18nKey="chat:checkpoint.initializingWarning"
|
||||
i18nKey={warningText}
|
||||
components={{
|
||||
settingsLink: (
|
||||
<VSCodeLink
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ describe("MarketplaceView", () => {
|
|||
setFollowupAutoApproveTimeoutMs: vi.fn(),
|
||||
profileThresholds: {},
|
||||
setProfileThresholds: vi.fn(),
|
||||
checkpointTimeout: 15,
|
||||
// ... other required context properties
|
||||
}
|
||||
})
|
||||
|
|
@ -86,6 +87,7 @@ describe("MarketplaceView", () => {
|
|||
mockExtensionState = {
|
||||
...mockExtensionState,
|
||||
organizationSettingsVersion: 2,
|
||||
checkpointTimeout: 15,
|
||||
}
|
||||
|
||||
// Re-render with updated context
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import { VSCodeCheckbox, VSCodeLink } from "@vscode/webview-ui-toolkit/react"
|
|||
import { GitBranch } from "lucide-react"
|
||||
import { Trans } from "react-i18next"
|
||||
import { buildDocLink } from "@src/utils/docLinks"
|
||||
import { Slider } from "@/components/ui"
|
||||
|
||||
import { SetCachedStateField } from "./types"
|
||||
import { SectionHeader } from "./SectionHeader"
|
||||
|
|
@ -11,10 +12,16 @@ import { Section } from "./Section"
|
|||
|
||||
type CheckpointSettingsProps = HTMLAttributes<HTMLDivElement> & {
|
||||
enableCheckpoints?: boolean
|
||||
setCachedStateField: SetCachedStateField<"enableCheckpoints">
|
||||
checkpointTimeout?: number
|
||||
setCachedStateField: SetCachedStateField<"enableCheckpoints" | "checkpointTimeout">
|
||||
}
|
||||
|
||||
export const CheckpointSettings = ({ enableCheckpoints, setCachedStateField, ...props }: CheckpointSettingsProps) => {
|
||||
export const CheckpointSettings = ({
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
setCachedStateField,
|
||||
...props
|
||||
}: CheckpointSettingsProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
return (
|
||||
<div {...props}>
|
||||
|
|
@ -44,6 +51,33 @@ export const CheckpointSettings = ({ enableCheckpoints, setCachedStateField, ...
|
|||
</Trans>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{enableCheckpoints && (
|
||||
<div className="mt-4">
|
||||
<label className="block text-sm font-medium mb-2">
|
||||
{t("settings:checkpoints.timeout.label")}
|
||||
</label>
|
||||
<div className="flex items-center gap-2">
|
||||
<Slider
|
||||
min={10}
|
||||
max={60}
|
||||
step={1}
|
||||
defaultValue={[checkpointTimeout ?? 15]}
|
||||
onValueChange={([value]) => {
|
||||
if (value >= 10 && value <= 60) {
|
||||
setCachedStateField("checkpointTimeout", value)
|
||||
}
|
||||
}}
|
||||
className="flex-1"
|
||||
data-testid="checkpoint-timeout-slider"
|
||||
/>
|
||||
<span className="w-12 text-center">{checkpointTimeout ?? 15}</span>
|
||||
</div>
|
||||
<div className="text-vscode-descriptionForeground text-sm mt-1">
|
||||
{t("settings:checkpoints.timeout.description")}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</Section>
|
||||
</div>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -147,6 +147,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
browserToolEnabled,
|
||||
browserViewportSize,
|
||||
enableCheckpoints,
|
||||
checkpointTimeout,
|
||||
diffEnabled,
|
||||
experiments,
|
||||
fuzzyMatchThreshold,
|
||||
|
|
@ -324,6 +325,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
vscode.postMessage({ type: "soundVolume", value: soundVolume })
|
||||
vscode.postMessage({ type: "diffEnabled", bool: diffEnabled })
|
||||
vscode.postMessage({ type: "enableCheckpoints", bool: enableCheckpoints })
|
||||
vscode.postMessage({ type: "checkpointTimeout", value: checkpointTimeout })
|
||||
vscode.postMessage({ type: "browserViewportSize", text: browserViewportSize })
|
||||
vscode.postMessage({ type: "remoteBrowserHost", text: remoteBrowserHost })
|
||||
vscode.postMessage({ type: "remoteBrowserEnabled", bool: remoteBrowserEnabled })
|
||||
|
|
@ -691,6 +693,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
{activeTab === "checkpoints" && (
|
||||
<CheckpointSettings
|
||||
enableCheckpoints={enableCheckpoints}
|
||||
checkpointTimeout={checkpointTimeout}
|
||||
setCachedStateField={setCachedStateField}
|
||||
/>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -86,6 +86,8 @@ export interface ExtensionStateContextType extends ExtensionState {
|
|||
setTtsSpeed: (value: number) => void
|
||||
setDiffEnabled: (value: boolean) => void
|
||||
setEnableCheckpoints: (value: boolean) => void
|
||||
checkpointTimeout: number
|
||||
setCheckpointTimeout: (value: number) => void
|
||||
setBrowserViewportSize: (value: string) => void
|
||||
setFuzzyMatchThreshold: (value: number) => void
|
||||
setWriteDelayMs: (value: number) => void
|
||||
|
|
@ -194,6 +196,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
|
|||
ttsSpeed: 1.0,
|
||||
diffEnabled: false,
|
||||
enableCheckpoints: true,
|
||||
checkpointTimeout: 15, // Default to 15 seconds
|
||||
fuzzyMatchThreshold: 1.0,
|
||||
language: "en", // Default language code
|
||||
writeDelayMs: 1000,
|
||||
|
|
@ -454,6 +457,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
|
|||
setTtsSpeed: (value) => setState((prevState) => ({ ...prevState, ttsSpeed: value })),
|
||||
setDiffEnabled: (value) => setState((prevState) => ({ ...prevState, diffEnabled: value })),
|
||||
setEnableCheckpoints: (value) => setState((prevState) => ({ ...prevState, enableCheckpoints: value })),
|
||||
setCheckpointTimeout: (value) => setState((prevState) => ({ ...prevState, checkpointTimeout: value })),
|
||||
setBrowserViewportSize: (value: string) =>
|
||||
setState((prevState) => ({ ...prevState, browserViewportSize: value })),
|
||||
setFuzzyMatchThreshold: (value) => setState((prevState) => ({ ...prevState, fuzzyMatchThreshold: value })),
|
||||
|
|
|
|||
|
|
@ -214,12 +214,14 @@ describe("mergeExtensionState", () => {
|
|||
remoteControlEnabled: false,
|
||||
taskSyncEnabled: false,
|
||||
featureRoomoteControlEnabled: false,
|
||||
checkpointTimeout: 15, // Add the checkpoint timeout property
|
||||
}
|
||||
|
||||
const prevState: ExtensionState = {
|
||||
...baseState,
|
||||
apiConfiguration: { modelMaxTokens: 1234, modelMaxThinkingTokens: 123 },
|
||||
experiments: {} as Record<ExperimentId, boolean>,
|
||||
checkpointTimeout: 10,
|
||||
}
|
||||
|
||||
const newState: ExtensionState = {
|
||||
|
|
@ -236,6 +238,7 @@ describe("mergeExtensionState", () => {
|
|||
imageGeneration: false,
|
||||
runSlashCommand: false,
|
||||
} as Record<ExperimentId, boolean>,
|
||||
checkpointTimeout: 20,
|
||||
}
|
||||
|
||||
const result = mergeExtensionState(prevState, newState)
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/ca/settings.json
generated
4
webview-ui/src/i18n/locales/ca/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Temps d'espera per inicialitzar el punt de control (segons)",
|
||||
"description": "Temps màxim d'espera per inicialitzar el servei de punts de control. El valor per defecte és 15 segons. Rang: 10-60 segons."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Habilitar punts de control automàtics",
|
||||
"description": "Quan està habilitat, Roo crearà automàticament punts de control durant l'execució de tasques, facilitant la revisió de canvis o la reversió a estats anteriors. <0>Més informació</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/de/settings.json
generated
4
webview-ui/src/i18n/locales/de/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Timeout für Checkpoint-Initialisierung (Sekunden)",
|
||||
"description": "Maximale Wartezeit für die Initialisierung des Checkpoint-Dienstes. Standard ist 15 Sekunden. Bereich: 10-60 Sekunden."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Automatische Kontrollpunkte aktivieren",
|
||||
"description": "Wenn aktiviert, erstellt Roo automatisch Kontrollpunkte während der Aufgabenausführung, was die Überprüfung von Änderungen oder die Rückkehr zu früheren Zuständen erleichtert. <0>Mehr erfahren</0>"
|
||||
|
|
|
|||
|
|
@ -505,6 +505,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Checkpoint initialization timeout (seconds)",
|
||||
"description": "Maximum time to wait for checkpoint service initialization. Default is 15 seconds. Range: 10-60 seconds."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Enable automatic checkpoints",
|
||||
"description": "When enabled, Roo will automatically create checkpoints during task execution, making it easy to review changes or revert to earlier states. <0>Learn more</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/es/settings.json
generated
4
webview-ui/src/i18n/locales/es/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Tiempo de espera para inicializar el punto de control (segundos)",
|
||||
"description": "Tiempo máximo de espera para inicializar el servicio de puntos de control. El valor por defecto es 15 segundos. Rango: 10-60 segundos."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Habilitar puntos de control automáticos",
|
||||
"description": "Cuando está habilitado, Roo creará automáticamente puntos de control durante la ejecución de tareas, facilitando la revisión de cambios o la reversión a estados anteriores. <0>Más información</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/fr/settings.json
generated
4
webview-ui/src/i18n/locales/fr/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Délai d'initialisation du point de contrôle (secondes)",
|
||||
"description": "Temps d'attente maximum pour l'initialisation du service de points de contrôle. Par défaut : 15 secondes. Plage : 10-60 secondes."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Activer les points de contrôle automatiques",
|
||||
"description": "Lorsque cette option est activée, Roo créera automatiquement des points de contrôle pendant l'exécution des tâches, facilitant la révision des modifications ou le retour à des états antérieurs. <0>En savoir plus</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/hi/settings.json
generated
4
webview-ui/src/i18n/locales/hi/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "चेकपॉइंट इनिशियलाइज़ेशन टाइमआउट (सेकंड)",
|
||||
"description": "चेकपॉइंट सेवा इनिशियलाइज़ करने के लिए अधिकतम प्रतीक्षा समय। डिफ़ॉल्ट 15 सेकंड है। सीमा: 10-60 सेकंड।"
|
||||
},
|
||||
"enable": {
|
||||
"label": "स्वचालित चेकपॉइंट सक्षम करें",
|
||||
"description": "जब सक्षम होता है, तो Roo कार्य निष्पादन के दौरान स्वचालित रूप से चेकपॉइंट बनाएगा, जिससे परिवर्तनों की समीक्षा करना या पहले की स्थितियों पर वापस जाना आसान हो जाएगा। <0>अधिक जानें</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/id/settings.json
generated
4
webview-ui/src/i18n/locales/id/settings.json
generated
|
|
@ -510,6 +510,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Batas waktu inisialisasi checkpoint (detik)",
|
||||
"description": "Waktu maksimum menunggu inisialisasi layanan checkpoint. Default 15 detik. Rentang: 10-60 detik."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Aktifkan checkpoint otomatis",
|
||||
"description": "Ketika diaktifkan, Roo akan secara otomatis membuat checkpoint selama eksekusi tugas, memudahkan untuk meninjau perubahan atau kembali ke state sebelumnya. <0>Pelajari lebih lanjut</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/it/settings.json
generated
4
webview-ui/src/i18n/locales/it/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Timeout inizializzazione checkpoint (secondi)",
|
||||
"description": "Tempo massimo di attesa per l'inizializzazione del servizio checkpoint. Predefinito: 15 secondi. Intervallo: 10-60 secondi."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Abilita punti di controllo automatici",
|
||||
"description": "Quando abilitato, Roo creerà automaticamente punti di controllo durante l'esecuzione dei compiti, facilitando la revisione delle modifiche o il ritorno a stati precedenti. <0>Scopri di più</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/ja/settings.json
generated
4
webview-ui/src/i18n/locales/ja/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "チェックポイント初期化タイムアウト(秒)",
|
||||
"description": "チェックポイントサービスの初期化を待つ最大時間。デフォルトは15秒。範囲:10~60秒。"
|
||||
},
|
||||
"enable": {
|
||||
"label": "自動チェックポイントを有効化",
|
||||
"description": "有効にすると、Rooはタスク実行中に自動的にチェックポイントを作成し、変更の確認や以前の状態への復帰を容易にします。 <0>詳細情報</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/ko/settings.json
generated
4
webview-ui/src/i18n/locales/ko/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "체크포인트 초기화 타임아웃(초)",
|
||||
"description": "체크포인트 서비스 초기화를 기다리는 최대 시간입니다. 기본값은 15초. 범위: 10~60초."
|
||||
},
|
||||
"enable": {
|
||||
"label": "자동 체크포인트 활성화",
|
||||
"description": "활성화되면 Roo는 작업 실행 중에 자동으로 체크포인트를 생성하여 변경 사항을 검토하거나 이전 상태로 되돌리기 쉽게 합니다. <0>더 알아보기</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/nl/settings.json
generated
4
webview-ui/src/i18n/locales/nl/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Timeout voor checkpoint-initialisatie (seconden)",
|
||||
"description": "Maximale wachttijd voor het initialiseren van de checkpointservice. Standaard is 15 seconden. Bereik: 10-60 seconden."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Automatische checkpoints inschakelen",
|
||||
"description": "Indien ingeschakeld, maakt Roo automatisch checkpoints tijdens het uitvoeren van taken, zodat je eenvoudig wijzigingen kunt bekijken of terugzetten. <0>Meer informatie</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/pl/settings.json
generated
4
webview-ui/src/i18n/locales/pl/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Limit czasu inicjalizacji punktu kontrolnego (sekundy)",
|
||||
"description": "Maksymalny czas oczekiwania na inicjalizację usługi punktów kontrolnych. Domyślnie 15 sekund. Zakres: 10-60 sekund."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Włącz automatyczne punkty kontrolne",
|
||||
"description": "Gdy włączone, Roo automatycznie utworzy punkty kontrolne podczas wykonywania zadań, ułatwiając przeglądanie zmian lub powrót do wcześniejszych stanów. <0>Dowiedz się więcej</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
4
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Tempo limite para inicialização do checkpoint (segundos)",
|
||||
"description": "Tempo máximo de espera para inicializar o serviço de checkpoint. Padrão: 15 segundos. Faixa: 10-60 segundos."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Ativar pontos de verificação automáticos",
|
||||
"description": "Quando ativado, o Roo criará automaticamente pontos de verificação durante a execução de tarefas, facilitando a revisão de alterações ou o retorno a estados anteriores. <0>Saiba mais</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/ru/settings.json
generated
4
webview-ui/src/i18n/locales/ru/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Таймаут инициализации контрольной точки (секунды)",
|
||||
"description": "Максимальное время ожидания инициализации сервиса контрольных точек. По умолчанию 15 секунд. Диапазон: 10-60 секунд."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Включить автоматические контрольные точки",
|
||||
"description": "Если включено, Roo будет автоматически создавать контрольные точки во время выполнения задач, что упрощает просмотр изменений или возврат к предыдущим состояниям. <0>Подробнее</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/tr/settings.json
generated
4
webview-ui/src/i18n/locales/tr/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Kontrol noktası başlatma zaman aşımı (saniye)",
|
||||
"description": "Kontrol noktası servisini başlatmak için maksimum bekleme süresi. Varsayılan 15 saniye. Aralık: 10-60 saniye."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Otomatik kontrol noktalarını etkinleştir",
|
||||
"description": "Etkinleştirildiğinde, Roo görev yürütme sırasında otomatik olarak kontrol noktaları oluşturarak değişiklikleri gözden geçirmeyi veya önceki durumlara dönmeyi kolaylaştırır. <0>Daha fazla bilgi</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/vi/settings.json
generated
4
webview-ui/src/i18n/locales/vi/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "Thời gian chờ khởi tạo điểm kiểm tra (giây)",
|
||||
"description": "Thời gian tối đa chờ khởi tạo dịch vụ điểm kiểm tra. Mặc định là 15 giây. Khoảng: 10-60 giây."
|
||||
},
|
||||
"enable": {
|
||||
"label": "Bật điểm kiểm tra tự động",
|
||||
"description": "Khi được bật, Roo sẽ tự động tạo các điểm kiểm tra trong quá trình thực hiện nhiệm vụ, giúp dễ dàng xem lại các thay đổi hoặc quay lại trạng thái trước đó. <0>Tìm hiểu thêm</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
4
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "存档点初始化超时时间(秒)",
|
||||
"description": "存档点服务初始化最长等待时间。默认 15 秒。范围:10-60 秒。"
|
||||
},
|
||||
"enable": {
|
||||
"label": "启用自动存档点",
|
||||
"description": "开启后自动创建任务存档点,方便回溯修改。 <0>了解更多</0>"
|
||||
|
|
|
|||
4
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
4
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
|
|
@ -506,6 +506,10 @@
|
|||
}
|
||||
},
|
||||
"checkpoints": {
|
||||
"timeout": {
|
||||
"label": "檢查點初始化逾時(秒)",
|
||||
"description": "檢查點服務初始化的最長等待時間。預設為 15 秒。範圍:10-60 秒。"
|
||||
},
|
||||
"enable": {
|
||||
"label": "啟用自動檢查點",
|
||||
"description": "啟用後,Roo 將在工作執行期間自動建立檢查點,使審核變更或回到早期狀態變得容易。 <0>了解更多</0>"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue