()
| 946 | } |
| 947 | |
| 948 | private async loadAutoRetryEnabledPreference(): Promise<boolean> { |
| 949 | if (this.autoRetryEnabledPreference !== null) { |
| 950 | return this.autoRetryEnabledPreference; |
| 951 | } |
| 952 | |
| 953 | const preferencePath = this.getAutoRetryPreferencePath(); |
| 954 | try { |
| 955 | const raw = await readFile(preferencePath, "utf-8"); |
| 956 | const parsed = JSON.parse(raw) as { |
| 957 | enabled?: unknown; |
| 958 | startupAutoRetryAbandon?: unknown; |
| 959 | }; |
| 960 | const enabled = parsed.enabled !== false; |
| 961 | this.autoRetryEnabledPreference = enabled; |
| 962 | this.legacyAutoRetryEnabledHint = null; |
| 963 | this.startupAutoRetryAbandon = this.parseStartupAutoRetryAbandon( |
| 964 | parsed.startupAutoRetryAbandon |
| 965 | ); |
| 966 | this.retryManager.setEnabled(enabled); |
| 967 | return enabled; |
| 968 | } catch (error) { |
| 969 | // Missing preference file is the default path. Use any legacy frontend hint |
| 970 | // (captured at onChat subscribe time) before falling back to enabled. |
| 971 | const errno = |
| 972 | typeof error === "object" && error !== null && "code" in error |
| 973 | ? (error as { code?: unknown }).code |
| 974 | : undefined; |
| 975 | const defaultEnabled = |
| 976 | errno === "ENOENT" && this.legacyAutoRetryEnabledHint === false ? false : true; |
| 977 | |
| 978 | this.autoRetryEnabledPreference = defaultEnabled; |
| 979 | this.legacyAutoRetryEnabledHint = null; |
| 980 | this.startupAutoRetryAbandon = null; |
| 981 | this.retryManager.setEnabled(defaultEnabled); |
| 982 | |
| 983 | if (errno === "ENOENT" && defaultEnabled === false) { |
| 984 | // Persist migrated legacy opt-out so restart behavior no longer depends |
| 985 | // on renderer localStorage keys. |
| 986 | await this.persistAutoRetryState(); |
| 987 | } else if (errno !== "ENOENT") { |
| 988 | log.warn("Failed to load auto-retry preference; defaulting to enabled", { |
| 989 | workspaceId: this.workspaceId, |
| 990 | error: getErrorMessage(error), |
| 991 | }); |
| 992 | } |
| 993 | |
| 994 | return defaultEnabled; |
| 995 | } |
| 996 | } |
| 997 | |
| 998 | private async persistAutoRetryState(): Promise<void> { |
| 999 | const preferencePath = this.getAutoRetryPreferencePath(); |
no test coverage detected