From 58d3bb89d26265f24436e4ee3ca59bc53f45e34b Mon Sep 17 00:00:00 2001 From: Jason Date: Sat, 17 Jan 2026 22:10:08 +0800 Subject: [PATCH] fix(opencode): generate unique provider key when duplicating OpenCode uses user-provided provider keys as IDs instead of random UUIDs. When duplicating a provider, generate a unique key by appending "-copy" suffix (or "-copy-2", "-copy-3", etc. if already exists). --- src/App.tsx | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/App.tsx b/src/App.tsx index 8d6d9180c..17eecb645 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -352,13 +352,29 @@ function App() { setConfirmAction(null); }; + // Generate a unique provider key for OpenCode duplication + const generateUniqueOpencodeKey = (originalKey: string, existingKeys: string[]): string => { + const baseKey = `${originalKey}-copy`; + + if (!existingKeys.includes(baseKey)) { + return baseKey; + } + + // If -copy already exists, try -copy-2, -copy-3, ... + let counter = 2; + while (existingKeys.includes(`${baseKey}-${counter}`)) { + counter++; + } + return `${baseKey}-${counter}`; + }; + // 复制供应商 const handleDuplicateProvider = async (provider: Provider) => { // 1️⃣ 计算新的 sortIndex:如果原供应商有 sortIndex,则复制它 const newSortIndex = provider.sortIndex !== undefined ? provider.sortIndex + 1 : undefined; - const duplicatedProvider: Omit = { + const duplicatedProvider: Omit & { providerKey?: string } = { name: `${provider.name} copy`, settingsConfig: JSON.parse(JSON.stringify(provider.settingsConfig)), // 深拷贝 websiteUrl: provider.websiteUrl, @@ -371,6 +387,12 @@ function App() { iconColor: provider.iconColor, }; + // OpenCode: generate unique provider key (used as ID) + if (activeApp === "opencode") { + const existingKeys = Object.keys(providers); + duplicatedProvider.providerKey = generateUniqueOpencodeKey(provider.id, existingKeys); + } + // 2️⃣ 如果原供应商有 sortIndex,需要将后续所有供应商的 sortIndex +1 if (provider.sortIndex !== undefined) { const updates = Object.values(providers)