diff --git a/src/main/env.d.ts b/src/main/env.d.ts
new file mode 100644
index 00000000..fc2e8e74
--- /dev/null
+++ b/src/main/env.d.ts
@@ -0,0 +1,9 @@
+///
+
+interface ImportMetaEnv {
+ VITE_MAIN_BUNDLE_ID: string
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv
+}
diff --git a/src/main/index.ts b/src/main/index.ts
index 5544b39a..2c96ff14 100644
--- a/src/main/index.ts
+++ b/src/main/index.ts
@@ -12,7 +12,7 @@ app.whenReady().then(async () => {
await updateUserDataPath()
// Set app user model id for windows
- electronApp.setAppUserModelId('com.kangfenmao.CherryStudio')
+ electronApp.setAppUserModelId(import.meta.env.VITE_MAIN_BUNDLE_ID || 'com.kangfenmao.CherryStudio')
// Default open or close DevTools by F12 in development
// and ignore CommandOrControl + R in production.
diff --git a/src/renderer/src/config/env.ts b/src/renderer/src/config/env.ts
index e0b12e66..0e5f9517 100644
--- a/src/renderer/src/config/env.ts
+++ b/src/renderer/src/config/env.ts
@@ -2,5 +2,4 @@ export { default as UserAvatar } from '@renderer/assets/images/avatar.png'
export { default as AppLogo } from '@renderer/assets/images/logo.png'
export const APP_NAME = 'Cherry Studio'
-
export const isLocalAi = false
diff --git a/src/renderer/src/pages/home/Messages/Message.tsx b/src/renderer/src/pages/home/Messages/Message.tsx
index d6135e06..6d2db26d 100644
--- a/src/renderer/src/pages/home/Messages/Message.tsx
+++ b/src/renderer/src/pages/home/Messages/Message.tsx
@@ -9,6 +9,7 @@ import {
} from '@ant-design/icons'
import UserPopup from '@renderer/components/Popups/UserPopup'
import { FONT_FAMILY } from '@renderer/config/constant'
+import { APP_NAME, AppLogo, isLocalAi } from '@renderer/config/env'
import { startMinAppById } from '@renderer/config/minapp'
import { getModelLogo } from '@renderer/config/provider'
import { useAssistant } from '@renderer/hooks/useAssistant'
@@ -71,18 +72,24 @@ const MessageItem: FC = ({ message, index, showMenu, onDeleteMessage }) =
)
const getUserName = useCallback(() => {
- if (message.id === 'assistant') return assistant?.name
+ if (isLocalAi && message.role !== 'user') return APP_NAME
if (message.role === 'assistant') return upperFirst(model?.name || model?.id)
return userName || t('common.you')
- }, [assistant?.name, message.id, message.role, model?.id, model?.name, t, userName])
+ }, [message.role, model?.id, model?.name, t, userName])
const fontFamily = useMemo(() => {
return messageFont === 'serif' ? FONT_FAMILY.replace('sans-serif', 'serif').replace('Ubuntu, ', '') : FONT_FAMILY
}, [messageFont])
const messageBorder = showMessageDivider ? undefined : 'none'
- const avatarSource = useMemo(() => (message.modelId ? getModelLogo(message.modelId) : undefined), [message.modelId])
+
+ const avatarSource = useMemo(() => {
+ if (isLocalAi) return AppLogo
+ return message.modelId ? getModelLogo(message.modelId) : undefined
+ }, [message.modelId])
+
const avatarName = useMemo(() => firstLetter(assistant?.name).toUpperCase(), [assistant?.name])
+
const username = useMemo(() => removeLeadingEmoji(getUserName()), [getUserName])
const dropdownItems = useMemo(
@@ -146,7 +153,11 @@ const MessageItem: FC = ({ message, index, showMenu, onDeleteMessage }) =
{avatarName}