From a1d7f9e82298f646b623c35867e8c3d7fde23754 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sun, 8 Feb 2026 22:43:02 +0900 Subject: [PATCH] fix: guard against missing brace in JSONC provider replacement --- src/cli/config-manager/add-provider-config.ts | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/cli/config-manager/add-provider-config.ts b/src/cli/config-manager/add-provider-config.ts index c911310a5..a7a195f41 100644 --- a/src/cli/config-manager/add-provider-config.ts +++ b/src/cli/config-manager/add-provider-config.ts @@ -55,24 +55,28 @@ export function addProviderConfig(config: InstallConfig): ConfigMergeResult { const providerIdx = content.indexOf('"provider"') if (providerIdx !== -1) { const colonIdx = content.indexOf(":", providerIdx + '"provider"'.length) - const braceStart = content.indexOf("{", colonIdx) - let depth = 0 - let braceEnd = braceStart - for (let i = braceStart; i < content.length; i++) { - if (content[i] === "{") depth++ - else if (content[i] === "}") { - depth-- - if (depth === 0) { - braceEnd = i - break + const braceStart = colonIdx !== -1 ? content.indexOf("{", colonIdx) : -1 + if (braceStart === -1) { + writeFileSync(path, JSON.stringify(newConfig, null, 2) + "\n") + } else { + let depth = 0 + let braceEnd = braceStart + for (let i = braceStart; i < content.length; i++) { + if (content[i] === "{") depth++ + else if (content[i] === "}") { + depth-- + if (depth === 0) { + braceEnd = i + break + } } } + const newContent = + content.slice(0, providerIdx) + + `"provider": ${providerJson}` + + content.slice(braceEnd + 1) + writeFileSync(path, newContent) } - const newContent = - content.slice(0, providerIdx) + - `"provider": ${providerJson}` + - content.slice(braceEnd + 1) - writeFileSync(path, newContent) } else { const newContent = content.replace(/(\{)/, `$1\n "provider": ${providerJson},`) writeFileSync(path, newContent)