chore(store): update migration logic and increment version to 87

* Updated migration functions to include error handling for provider additions.
* Incremented the version number in the persisted reducer configuration.
This commit is contained in:
kangfenmao 2025-03-30 14:08:14 +08:00
parent 9e977f4b35
commit b363cb06a4
2 changed files with 489 additions and 287 deletions

View File

@ -42,7 +42,7 @@ const persistedReducer = persistReducer(
{ {
key: 'cherry-studio', key: 'cherry-studio',
storage, storage,
version: 86, version: 87,
blacklist: ['runtime', 'messages'], blacklist: ['runtime', 'messages'],
migrate migrate
}, },

View File

@ -35,26 +35,47 @@ function addProvider(state: RootState, id: string) {
const migrateConfig = { const migrateConfig = {
'2': (state: RootState) => { '2': (state: RootState) => {
try {
addProvider(state, 'yi') addProvider(state, 'yi')
return state return state
} catch (error) {
return state
}
}, },
'3': (state: RootState) => { '3': (state: RootState) => {
try {
addProvider(state, 'zhipu') addProvider(state, 'zhipu')
return state return state
} catch (error) {
return state
}
}, },
'4': (state: RootState) => { '4': (state: RootState) => {
try {
addProvider(state, 'ollama') addProvider(state, 'ollama')
return state return state
} catch (error) {
return state
}
}, },
'5': (state: RootState) => { '5': (state: RootState) => {
try {
addProvider(state, 'moonshot') addProvider(state, 'moonshot')
return state return state
} catch (error) {
return state
}
}, },
'6': (state: RootState) => { '6': (state: RootState) => {
try {
addProvider(state, 'openrouter') addProvider(state, 'openrouter')
return state return state
} catch (error) {
return state
}
}, },
'7': (state: RootState) => { '7': (state: RootState) => {
try {
return { return {
...state, ...state,
settings: { settings: {
@ -62,8 +83,12 @@ const migrateConfig = {
language: navigator.language language: navigator.language
} }
} }
} catch (error) {
return state
}
}, },
'8': (state: RootState) => { '8': (state: RootState) => {
try {
const fixAssistantName = (assistant: Assistant) => { const fixAssistantName = (assistant: Assistant) => {
if (isEmpty(assistant.name)) { if (isEmpty(assistant.name)) {
assistant.name = i18n.t(`assistant.${assistant.id}.name`) assistant.name = i18n.t(`assistant.${assistant.id}.name`)
@ -87,8 +112,12 @@ const migrateConfig = {
assistants: state.assistants.assistants.map((assistant) => fixAssistantName(assistant)) assistants: state.assistants.assistants.map((assistant) => fixAssistantName(assistant))
} }
} }
} catch (error) {
return state
}
}, },
'9': (state: RootState) => { '9': (state: RootState) => {
try {
return { return {
...state, ...state,
llm: { llm: {
@ -101,21 +130,37 @@ const migrateConfig = {
}) })
} }
} }
} catch (error) {
return state
}
}, },
'10': (state: RootState) => { '10': (state: RootState) => {
try {
addProvider(state, 'baichuan') addProvider(state, 'baichuan')
return state return state
} catch (error) {
return state
}
}, },
'11': (state: RootState) => { '11': (state: RootState) => {
try {
addProvider(state, 'dashscope') addProvider(state, 'dashscope')
addProvider(state, 'anthropic') addProvider(state, 'anthropic')
return state return state
} catch (error) {
return state
}
}, },
'12': (state: RootState) => { '12': (state: RootState) => {
try {
addProvider(state, 'aihubmix') addProvider(state, 'aihubmix')
return state return state
} catch (error) {
return state
}
}, },
'13': (state: RootState) => { '13': (state: RootState) => {
try {
return { return {
...state, ...state,
assistants: { assistants: {
@ -128,8 +173,12 @@ const migrateConfig = {
} }
} }
} }
} catch (error) {
return state
}
}, },
'14': (state: RootState) => { '14': (state: RootState) => {
try {
return { return {
...state, ...state,
settings: { settings: {
@ -138,8 +187,12 @@ const migrateConfig = {
proxyUrl: undefined proxyUrl: undefined
} }
} }
} catch (error) {
return state
}
}, },
'15': (state: RootState) => { '15': (state: RootState) => {
try {
return { return {
...state, ...state,
settings: { settings: {
@ -148,8 +201,12 @@ const migrateConfig = {
showMessageDivider: true showMessageDivider: true
} }
} }
} catch (error) {
return state
}
}, },
'16': (state: RootState) => { '16': (state: RootState) => {
try {
return { return {
...state, ...state,
settings: { settings: {
@ -158,8 +215,12 @@ const migrateConfig = {
showInputEstimatedTokens: false showInputEstimatedTokens: false
} }
} }
} catch (error) {
return state
}
}, },
'17': (state: RootState) => { '17': (state: RootState) => {
try {
return { return {
...state, ...state,
settings: { settings: {
@ -167,8 +228,12 @@ const migrateConfig = {
theme: 'auto' theme: 'auto'
} }
} }
} catch (error) {
return state
}
}, },
'19': (state: RootState) => { '19': (state: RootState) => {
try {
return { return {
...state, ...state,
agents: { agents: {
@ -183,8 +248,12 @@ const migrateConfig = {
} }
} }
} }
} catch (error) {
return state
}
}, },
'20': (state: RootState) => { '20': (state: RootState) => {
try {
return { return {
...state, ...state,
settings: { settings: {
@ -192,18 +261,30 @@ const migrateConfig = {
fontSize: 14 fontSize: 14
} }
} }
} catch (error) {
return state
}
}, },
'21': (state: RootState) => { '21': (state: RootState) => {
try {
addProvider(state, 'gemini') addProvider(state, 'gemini')
addProvider(state, 'stepfun') addProvider(state, 'stepfun')
addProvider(state, 'doubao') addProvider(state, 'doubao')
return state return state
} catch (error) {
return state
}
}, },
'22': (state: RootState) => { '22': (state: RootState) => {
try {
addProvider(state, 'minimax') addProvider(state, 'minimax')
return state return state
} catch (error) {
return state
}
}, },
'23': (state: RootState) => { '23': (state: RootState) => {
try {
return { return {
...state, ...state,
settings: { settings: {
@ -212,8 +293,12 @@ const migrateConfig = {
windowStyle: 'transparent' windowStyle: 'transparent'
} }
} }
} catch (error) {
return state
}
}, },
'24': (state: RootState) => { '24': (state: RootState) => {
try {
return { return {
...state, ...state,
assistants: { assistants: {
@ -232,16 +317,28 @@ const migrateConfig = {
topicPosition: 'right' topicPosition: 'right'
} }
} }
} catch (error) {
return state
}
}, },
'25': (state: RootState) => { '25': (state: RootState) => {
try {
addProvider(state, 'github') addProvider(state, 'github')
return state return state
} catch (error) {
return state
}
}, },
'26': (state: RootState) => { '26': (state: RootState) => {
try {
addProvider(state, 'ocoolai') addProvider(state, 'ocoolai')
return state return state
} catch (error) {
return state
}
}, },
'27': (state: RootState) => { '27': (state: RootState) => {
try {
return { return {
...state, ...state,
settings: { settings: {
@ -249,15 +346,24 @@ const migrateConfig = {
renderInputMessageAsMarkdown: true renderInputMessageAsMarkdown: true
} }
} }
} catch (error) {
return state
}
}, },
'28': (state: RootState) => { '28': (state: RootState) => {
try {
addProvider(state, 'together') addProvider(state, 'together')
addProvider(state, 'fireworks') addProvider(state, 'fireworks')
addProvider(state, 'zhinao') addProvider(state, 'zhinao')
addProvider(state, 'hunyuan') addProvider(state, 'hunyuan')
addProvider(state, 'nvidia') addProvider(state, 'nvidia')
return state
} catch (error) {
return state
}
}, },
'29': (state: RootState) => { '29': (state: RootState) => {
try {
return { return {
...state, ...state,
assistants: { assistants: {
@ -271,12 +377,20 @@ const migrateConfig = {
}) })
} }
} }
} catch (error) {
return state
}
}, },
'30': (state: RootState) => { '30': (state: RootState) => {
try {
addProvider(state, 'azure-openai') addProvider(state, 'azure-openai')
return state return state
} catch (error) {
return state
}
}, },
'31': (state: RootState) => { '31': (state: RootState) => {
try {
return { return {
...state, ...state,
llm: { llm: {
@ -289,12 +403,20 @@ const migrateConfig = {
}) })
} }
} }
} catch (error) {
return state
}
}, },
'32': (state: RootState) => { '32': (state: RootState) => {
try {
addProvider(state, 'hunyuan') addProvider(state, 'hunyuan')
return state return state
} catch (error) {
return state
}
}, },
'33': (state: RootState) => { '33': (state: RootState) => {
try {
state.assistants.defaultAssistant.type = 'assistant' state.assistants.defaultAssistant.type = 'assistant'
state.agents.agents.forEach((agent) => { state.agents.agents.forEach((agent) => {
@ -318,8 +440,12 @@ const migrateConfig = {
}) })
} }
} }
} catch (error) {
return state
}
}, },
'34': (state: RootState) => { '34': (state: RootState) => {
try {
state.assistants.assistants.forEach((assistant) => { state.assistants.assistants.forEach((assistant) => {
assistant.topics.forEach((topic) => { assistant.topics.forEach((topic) => {
topic.assistantId = assistant.id topic.assistantId = assistant.id
@ -333,34 +459,62 @@ const migrateConfig = {
}) })
}) })
return state return state
} catch (error) {
return state
}
}, },
'35': (state: RootState) => { '35': (state: RootState) => {
try {
state.settings.mathEngine = 'KaTeX' state.settings.mathEngine = 'KaTeX'
return state return state
} catch (error) {
return state
}
}, },
'36': (state: RootState) => { '36': (state: RootState) => {
try {
state.settings.topicPosition = 'left' state.settings.topicPosition = 'left'
return state return state
} catch (error) {
return state
}
}, },
'37': (state: RootState) => { '37': (state: RootState) => {
try {
state.settings.messageStyle = 'plain' state.settings.messageStyle = 'plain'
return state return state
} catch (error) {
return state
}
}, },
'38': (state: RootState) => { '38': (state: RootState) => {
try {
addProvider(state, 'grok') addProvider(state, 'grok')
addProvider(state, 'hyperbolic') addProvider(state, 'hyperbolic')
addProvider(state, 'mistral') addProvider(state, 'mistral')
return state return state
} catch (error) {
return state
}
}, },
'39': (state: RootState) => { '39': (state: RootState) => {
try {
state.settings.codeStyle = 'auto' state.settings.codeStyle = 'auto'
return state return state
} catch (error) {
return state
}
}, },
'40': (state: RootState) => { '40': (state: RootState) => {
try {
state.settings.tray = true state.settings.tray = true
return state return state
} catch (error) {
return state
}
}, },
'41': (state: RootState) => { '41': (state: RootState) => {
try {
state.llm.providers.forEach((provider) => { state.llm.providers.forEach((provider) => {
if (provider.id === 'gemini') { if (provider.id === 'gemini') {
provider.type = 'gemini' provider.type = 'gemini'
@ -371,26 +525,42 @@ const migrateConfig = {
} }
}) })
return state return state
} catch (error) {
return state
}
}, },
'42': (state: RootState) => { '42': (state: RootState) => {
try {
state.settings.proxyMode = state.settings.proxyUrl ? 'custom' : 'none' state.settings.proxyMode = state.settings.proxyUrl ? 'custom' : 'none'
return state return state
} catch (error) {
return state
}
}, },
'43': (state: RootState) => { '43': (state: RootState) => {
try {
if (state.settings.proxyMode === 'none') { if (state.settings.proxyMode === 'none') {
state.settings.proxyMode = 'system' state.settings.proxyMode = 'system'
} }
return state return state
} catch (error) {
return state
}
}, },
'44': (state: RootState) => { '44': (state: RootState) => {
try {
state.settings.translateModelPrompt = TRANSLATE_PROMPT state.settings.translateModelPrompt = TRANSLATE_PROMPT
return state return state
} catch (error) {
return state
}
}, },
'45': (state: RootState) => { '45': (state: RootState) => {
state.settings.enableTopicNaming = true state.settings.enableTopicNaming = true
return state return state
}, },
'46': (state: RootState) => { '46': (state: RootState) => {
try {
if ( if (
state.settings?.translateModelPrompt?.includes( state.settings?.translateModelPrompt?.includes(
'If the target language is the same as the source language, do not translate' 'If the target language is the same as the source language, do not translate'
@ -399,16 +569,24 @@ const migrateConfig = {
state.settings.translateModelPrompt = TRANSLATE_PROMPT state.settings.translateModelPrompt = TRANSLATE_PROMPT
} }
return state return state
} catch (error) {
return state
}
}, },
'47': (state: RootState) => { '47': (state: RootState) => {
try {
state.llm.providers.forEach((provider) => { state.llm.providers.forEach((provider) => {
provider.models.forEach((model) => { provider.models.forEach((model) => {
model.group = getDefaultGroupName(model.id) model.group = getDefaultGroupName(model.id)
}) })
}) })
return state return state
} catch (error) {
return state
}
}, },
'48': (state: RootState) => { '48': (state: RootState) => {
try {
if (state.shortcuts) { if (state.shortcuts) {
state.shortcuts.shortcuts.forEach((shortcut) => { state.shortcuts.shortcuts.forEach((shortcut) => {
shortcut.system = shortcut.key !== 'new_topic' shortcut.system = shortcut.key !== 'new_topic'
@ -429,8 +607,12 @@ const migrateConfig = {
}) })
} }
return state return state
} catch (error) {
return state
}
}, },
'49': (state: RootState) => { '49': (state: RootState) => {
try {
state.settings.pasteLongTextThreshold = 1500 state.settings.pasteLongTextThreshold = 1500
if (state.shortcuts) { if (state.shortcuts) {
state.shortcuts.shortcuts = [ state.shortcuts.shortcuts = [
@ -445,10 +627,17 @@ const migrateConfig = {
] ]
} }
return state return state
} catch (error) {
return state
}
}, },
'50': (state: RootState) => { '50': (state: RootState) => {
try {
addProvider(state, 'jina') addProvider(state, 'jina')
return state return state
} catch (error) {
return state
}
}, },
'51': (state: RootState) => { '51': (state: RootState) => {
state.settings.topicNamingPrompt = '' state.settings.topicNamingPrompt = ''
@ -634,6 +823,7 @@ const migrateConfig = {
} }
}, },
'67': (state: RootState) => { '67': (state: RootState) => {
try {
if (state.minapps) { if (state.minapps) {
const xiaoyi = DEFAULT_MIN_APPS.find((app) => app.id === 'xiaoyi') const xiaoyi = DEFAULT_MIN_APPS.find((app) => app.id === 'xiaoyi')
if (xiaoyi) { if (xiaoyi) {
@ -652,6 +842,9 @@ const migrateConfig = {
} }
return state return state
} catch (error) {
return state
}
}, },
'68': (state: RootState) => { '68': (state: RootState) => {
try { try {
@ -946,6 +1139,15 @@ const migrateConfig = {
} }
return state return state
},
'87': (state: RootState) => {
try {
state.settings.maxKeepAliveMinapps = 3
state.settings.showOpenedMinappsInSidebar = true
return state
} catch (error) {
return state
}
} }
} }