fix(files): prevent autosave data loss on load lag and binary files

Guard FilesView autosave until the selected file has finished loading,
refuse binary/PDF/office/archive text saves, and add a persisted global
autoSaveEnabled setting (default true) under Settings → General.

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
This commit is contained in:
Cursor Agent
2026-07-30 06:37:47 +00:00
co-authored by Serhii Dziupin
parent a4c7bac303
commit 5b727ed53c
34 changed files with 504 additions and 55 deletions
@@ -31,6 +31,7 @@ type AppearanceSlice = {
summaryLength: number;
maxLastMessageLength: number;
autoDeleteEnabled: boolean;
autoSaveEnabled: boolean;
autoDeleteAfterDays: number;
sessionRetentionAction: 'archive' | 'delete';
fontSize: number;
@@ -78,6 +79,7 @@ export const startAppearanceAutoSave = (): void => {
summaryLength: useUIStore.getState().summaryLength,
maxLastMessageLength: useUIStore.getState().maxLastMessageLength,
autoDeleteEnabled: useUIStore.getState().autoDeleteEnabled,
autoSaveEnabled: useUIStore.getState().autoSaveEnabled,
autoDeleteAfterDays: useUIStore.getState().autoDeleteAfterDays,
sessionRetentionAction: useUIStore.getState().sessionRetentionAction,
fontSize: useUIStore.getState().fontSize,
@@ -117,6 +119,7 @@ export const startAppearanceAutoSave = (): void => {
summaryLength: state.summaryLength,
maxLastMessageLength: state.maxLastMessageLength,
autoDeleteEnabled: state.autoDeleteEnabled,
autoSaveEnabled: state.autoSaveEnabled,
autoDeleteAfterDays: state.autoDeleteAfterDays,
sessionRetentionAction: state.sessionRetentionAction,
fontSize: state.fontSize,
@@ -196,6 +199,9 @@ export const startAppearanceAutoSave = (): void => {
if (current.autoDeleteEnabled !== previous.autoDeleteEnabled) {
diff.autoDeleteEnabled = current.autoDeleteEnabled;
}
if (current.autoSaveEnabled !== previous.autoSaveEnabled) {
diff.autoSaveEnabled = current.autoSaveEnabled;
}
if (current.autoDeleteAfterDays !== previous.autoDeleteAfterDays) {
diff.autoDeleteAfterDays = current.autoDeleteAfterDays;
}