From 1a5fdb33389e1813be7116dfd83e5e6e160befe6 Mon Sep 17 00:00:00 2001 From: aw338WoWmUI <121638634+aw338WoWmUI@users.noreply.github.com> Date: Sun, 11 Jan 2026 13:01:50 +0800 Subject: [PATCH] fix(cli): update existing plugin entry instead of skipping Addresses cubic review feedback: installer now replaces existing oh-my-opencode entries with the new version-aware entry, allowing users to switch between @latest, @beta, or pinned versions. --- src/cli/config-manager.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/cli/config-manager.ts b/src/cli/config-manager.ts index fcbcfdc8..a2a96fa1 100644 --- a/src/cli/config-manager.ts +++ b/src/cli/config-manager.ts @@ -237,11 +237,18 @@ export async function addPluginToOpenCodeConfig(currentVersion: string): Promise const config = parseResult.config const plugins = config.plugin ?? [] - if (plugins.some((p) => p.startsWith(PACKAGE_NAME))) { - return { success: true, configPath: path } + const existingIndex = plugins.findIndex((p) => p === PACKAGE_NAME || p.startsWith(`${PACKAGE_NAME}@`)) + + if (existingIndex !== -1) { + if (plugins[existingIndex] === pluginEntry) { + return { success: true, configPath: path } + } + plugins[existingIndex] = pluginEntry + } else { + plugins.push(pluginEntry) } - config.plugin = [...plugins, pluginEntry] + config.plugin = plugins if (format === "jsonc") { const content = readFileSync(path, "utf-8") @@ -249,11 +256,8 @@ export async function addPluginToOpenCodeConfig(currentVersion: string): Promise const match = content.match(pluginArrayRegex) if (match) { - const arrayContent = match[1].trim() - const newArrayContent = arrayContent - ? `${arrayContent},\n "${pluginEntry}"` - : `"${pluginEntry}"` - const newContent = content.replace(pluginArrayRegex, `"plugin": [\n ${newArrayContent}\n ]`) + const formattedPlugins = plugins.map((p) => `"${p}"`).join(",\n ") + const newContent = content.replace(pluginArrayRegex, `"plugin": [\n ${formattedPlugins}\n ]`) writeFileSync(path, newContent) } else { const newContent = content.replace(/^(\s*\{)/, `$1\n "plugin": ["${pluginEntry}"],`)