Skip to content

Commit 3cf1984

Browse files
authored
feat: add errorCode field to global settings and related components for improved error handling (#504)
1 parent c90a32b commit 3cf1984

File tree

7 files changed

+35
-8
lines changed

7 files changed

+35
-8
lines changed

packages/types/src/global-settings.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ export const globalSettingsSchema = z.object({
156156
hasOpenedModeSelector: z.boolean().optional(),
157157
lastModeExportPath: z.string().optional(),
158158
lastModeImportPath: z.string().optional(),
159+
160+
errorCode: z.record(z.string(), z.record(z.string(), z.string())).optional(),
159161
})
160162

161163
export type GlobalSettings = z.infer<typeof globalSettingsSchema>
@@ -328,6 +330,8 @@ export const EVALS_SETTINGS: RooCodeSettings = {
328330
mode: "code", // "architect",
329331

330332
customModes: [],
333+
334+
errorCode: {},
331335
}
332336

333337
export const EVALS_TIMEOUT = 5 * 60 * 1_000

pnpm-lock.yaml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/core/costrict/error-code/ErrorCodeManager.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import axios from "axios"
22
import { jwtDecode } from "jwt-decode"
33
import crypto from "crypto"
4+
import retry from "async-retry"
45

56
import { t } from "../../../i18n"
67
import { ClineProvider } from "../../webview/ClineProvider"
@@ -47,12 +48,22 @@ export class ErrorCodeManager {
4748
*/
4849
public async refreshErrorCodes(): Promise<void> {
4950
try {
50-
// Clear existing error code mapping
51-
this.errorMap = {}
52-
// Get remote error codes
53-
const remoteErrorMap = await this.fetchRemoteCodes()
54-
this.errorMap = remoteErrorMap
51+
await retry(
52+
async () => {
53+
// Clear existing error code mapping
54+
this.errorMap = {}
55+
// Get remote error codes
56+
const remoteErrorMap = await this.fetchRemoteCodes()
57+
this.errorMap = remoteErrorMap
58+
this.provider.setValue("errorCode", remoteErrorMap)
59+
},
60+
{
61+
retries: 2,
62+
},
63+
)
5564
} catch (error) {
65+
const { errorCode } = await this.provider.getState()
66+
this.errorMap = (errorCode ?? {}) as IErrorMap
5667
console.error("Failed to refresh error codes:", error)
5768
}
5869
}
@@ -65,7 +76,7 @@ export class ErrorCodeManager {
6576
try {
6677
const { language, apiConfiguration } = await this.provider.getState()
6778
const baseUrl = apiConfiguration.zgsmBaseUrl || ZgsmAuthConfig.getInstance().getDefaultApiBaseUrl()
68-
const response = await axios.get(`${baseUrl}/shenma/api/v1/error-code/error_codes_${language}.json`)
79+
const response = await axios.get(`${baseUrl}/costrict/error-code/error_codes_${language}.json`)
6980
return response.data
7081
} catch (error) {
7182
console.error("Failed to fetch remote error codes:", error)
@@ -124,7 +135,7 @@ export class ErrorCodeManager {
124135
let status = error.status as number
125136
const { code, headers } = error
126137
const requestId = headers?.get("x-request-id") ?? null
127-
const { apiConfiguration } = await this.provider.getState()
138+
const { apiConfiguration, errorCode } = await this.provider.getState()
128139
const { zgsmApiKeyExpiredAt, zgsmApiKeyUpdatedAt, isOldModeLoginState } = this.parseZgsmTokenInfo(
129140
apiConfiguration.zgsmAccessToken,
130141
)
@@ -159,7 +170,8 @@ export class ErrorCodeManager {
159170
"quota-manager.voucher_expired",
160171
]
161172
if (code) {
162-
let { message, solution } = this.errorMap[code] || this.unknownError
173+
const errorMap = Object.keys(this.errorMap).length > 0 ? this.errorMap : (errorCode ?? {}) // Use fetched error codes or fallback to provider state
174+
let { message, solution } = errorMap[code] || this.unknownError
163175
if (authRequiredCodes.includes(code)) {
164176
rawError = message
165177
message = defaultError["401"].message

src/core/webview/ClineProvider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2248,6 +2248,7 @@ export class ClineProvider
22482248
// return false
22492249
// }
22502250
})(),
2251+
errorCode: stateValues.errorCode ?? {},
22512252
}
22522253
}
22532254

src/core/webview/__tests__/ClineProvider.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ describe("ClineProvider", () => {
576576
remoteControlEnabled: false,
577577
taskSyncEnabled: false,
578578
featureRoomoteControlEnabled: false,
579+
errorCode: {},
579580
}
580581

581582
const message: ExtensionMessage = {

src/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,7 @@
726726
"@roo-code/types": "workspace:^",
727727
"@vscode/codicons": "^0.0.36",
728728
"async-mutex": "^0.5.0",
729+
"async-retry": "^1.3.3",
729730
"axios": "^1.12.0",
730731
"cheerio": "^1.0.0",
731732
"chokidar": "^4.0.3",
@@ -796,6 +797,7 @@
796797
"@roo-code/build": "workspace:^",
797798
"@roo-code/config-eslint": "workspace:^",
798799
"@roo-code/config-typescript": "workspace:^",
800+
"@types/async-retry": "^1.4.9",
799801
"@types/clone-deep": "^4.0.4",
800802
"@types/debug": "^4.1.12",
801803
"@types/diff": "^5.2.1",

src/shared/ExtensionMessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ export type ExtensionState = Pick<
316316
| "openRouterImageGenerationSelectedModel"
317317
| "includeTaskHistoryInEnhance"
318318
| "reasoningBlockCollapsed"
319+
| "errorCode"
319320
> & {
320321
version: string
321322
clineMessages: ClineMessage[]

0 commit comments

Comments
 (0)