feat: add prompt display control (#5439)

Co-authored-by: 亢奋猫 <kangfenmao@qq.com>
This commit is contained in:
Jee 2025-05-10 20:16:59 +08:00 committed by GitHub
parent b962126d98
commit 3f1fadb9b6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 25 additions and 3 deletions

View File

@ -1344,6 +1344,7 @@
"providerPlaceholder": "Provider name", "providerPlaceholder": "Provider name",
"advancedSettings": "Advanced Settings" "advancedSettings": "Advanced Settings"
}, },
"messages.prompt": "Show prompt",
"messages.divider": "Show divider between messages", "messages.divider": "Show divider between messages",
"messages.grid_columns": "Message grid display columns", "messages.grid_columns": "Message grid display columns",
"messages.grid_popover_trigger": "Grid detail trigger", "messages.grid_popover_trigger": "Grid detail trigger",

View File

@ -1342,6 +1342,7 @@
"providerPlaceholder": "プロバイダー名", "providerPlaceholder": "プロバイダー名",
"advancedSettings": "詳細設定" "advancedSettings": "詳細設定"
}, },
"messages.prompt": "プロンプト表示",
"messages.divider": "メッセージ間に区切り線を表示", "messages.divider": "メッセージ間に区切り線を表示",
"messages.grid_columns": "メッセージグリッドの表示列数", "messages.grid_columns": "メッセージグリッドの表示列数",
"messages.grid_popover_trigger": "グリッド詳細トリガー", "messages.grid_popover_trigger": "グリッド詳細トリガー",

View File

@ -1342,6 +1342,7 @@
"providerPlaceholder": "Имя провайдера", "providerPlaceholder": "Имя провайдера",
"advancedSettings": "Расширенные настройки" "advancedSettings": "Расширенные настройки"
}, },
"messages.prompt": "Показывать подсказки",
"messages.divider": "Показывать разделитель между сообщениями", "messages.divider": "Показывать разделитель между сообщениями",
"messages.grid_columns": "Количество столбцов сетки сообщений", "messages.grid_columns": "Количество столбцов сетки сообщений",
"messages.grid_popover_trigger": "Триггер для отображения подробной информации в сетке", "messages.grid_popover_trigger": "Триггер для отображения подробной информации в сетке",

View File

@ -1344,6 +1344,7 @@
"providerPlaceholder": "提供者名称", "providerPlaceholder": "提供者名称",
"advancedSettings": "高级设置" "advancedSettings": "高级设置"
}, },
"messages.prompt": "提示词显示",
"messages.divider": "消息分割线", "messages.divider": "消息分割线",
"messages.grid_columns": "消息网格展示列数", "messages.grid_columns": "消息网格展示列数",
"messages.grid_popover_trigger": "网格详情触发", "messages.grid_popover_trigger": "网格详情触发",

View File

@ -1343,6 +1343,7 @@
"providerPlaceholder": "提供者名稱", "providerPlaceholder": "提供者名稱",
"advancedSettings": "高級設定" "advancedSettings": "高級設定"
}, },
"messages.prompt": "提示詞顯示",
"messages.divider": "訊息間顯示分隔線", "messages.divider": "訊息間顯示分隔線",
"messages.grid_columns": "訊息網格展示列數", "messages.grid_columns": "訊息網格展示列數",
"messages.grid_popover_trigger": "網格詳細資訊觸發", "messages.grid_popover_trigger": "網格詳細資訊觸發",

View File

@ -42,7 +42,7 @@ interface MessagesProps {
const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic }) => { const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic }) => {
const { t } = useTranslation() const { t } = useTranslation()
const { showTopics, topicPosition, showAssistants, messageNavigation } = useSettings() const { showPrompt, showTopics, topicPosition, showAssistants, messageNavigation } = useSettings()
const { updateTopic, addTopic } = useAssistant(assistant.id) const { updateTopic, addTopic } = useAssistant(assistant.id)
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
const containerRef = useRef<HTMLDivElement>(null) const containerRef = useRef<HTMLDivElement>(null)
@ -254,7 +254,7 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
)} )}
</ScrollContainer> </ScrollContainer>
</InfiniteScroll> </InfiniteScroll>
<Prompt assistant={assistant} key={assistant.prompt} topic={topic} /> {showPrompt && <Prompt assistant={assistant} key={assistant.prompt} topic={topic} />}
</NarrowLayout> </NarrowLayout>
{messageNavigation === 'anchor' && <MessageAnchorLine messages={displayMessages} />} {messageNavigation === 'anchor' && <MessageAnchorLine messages={displayMessages} />}
{messageNavigation === 'buttons' && <ChatNavigation containerId="messages" />} {messageNavigation === 'buttons' && <ChatNavigation containerId="messages" />}

View File

@ -37,6 +37,7 @@ import {
setPasteLongTextThreshold, setPasteLongTextThreshold,
setRenderInputMessageAsMarkdown, setRenderInputMessageAsMarkdown,
setShowInputEstimatedTokens, setShowInputEstimatedTokens,
setShowPrompt,
setShowMessageDivider, setShowMessageDivider,
setShowTranslateConfirm, setShowTranslateConfirm,
setThoughtAutoCollapse setThoughtAutoCollapse
@ -76,6 +77,7 @@ const SettingsTab: FC<Props> = (props) => {
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
const { const {
showPrompt,
showMessageDivider, showMessageDivider,
messageFont, messageFont,
showInputEstimatedTokens, showInputEstimatedTokens,
@ -282,6 +284,11 @@ const SettingsTab: FC<Props> = (props) => {
<SettingGroup> <SettingGroup>
<SettingSubtitle style={{ marginTop: 0 }}>{t('settings.messages.title')}</SettingSubtitle> <SettingSubtitle style={{ marginTop: 0 }}>{t('settings.messages.title')}</SettingSubtitle>
<SettingDivider /> <SettingDivider />
<SettingRow>
<SettingRowTitleSmall>{t('settings.messages.prompt')}</SettingRowTitleSmall>
<Switch size="small" checked={showPrompt} onChange={(checked) => dispatch(setShowPrompt(checked))} />
</SettingRow>
<SettingDivider />
<SettingRow> <SettingRow>
<SettingRowTitleSmall>{t('settings.messages.divider')}</SettingRowTitleSmall> <SettingRowTitleSmall>{t('settings.messages.divider')}</SettingRowTitleSmall>
<Switch <Switch

View File

@ -46,7 +46,7 @@ const persistedReducer = persistReducer(
{ {
key: 'cherry-studio', key: 'cherry-studio',
storage, storage,
version: 98, version: 99,
blacklist: ['runtime', 'messages', 'messageBlocks'], blacklist: ['runtime', 'messages', 'messageBlocks'],
migrate migrate
}, },

View File

@ -1267,11 +1267,15 @@ const migrateConfig = {
}, },
'99': (state: RootState) => { '99': (state: RootState) => {
try { try {
state.settings.showPrompt = true
addWebSearchProvider(state, 'bocha') addWebSearchProvider(state, 'bocha')
updateWebSearchProvider(state, { updateWebSearchProvider(state, {
id: 'exa', id: 'exa',
apiHost: 'https://api.exa.ai' apiHost: 'https://api.exa.ai'
}) })
updateWebSearchProvider(state, { updateWebSearchProvider(state, {
id: 'tavily', id: 'tavily',
apiHost: 'https://api.tavily.com' apiHost: 'https://api.tavily.com'

View File

@ -31,6 +31,7 @@ export interface SettingsState {
proxyMode: 'system' | 'custom' | 'none' proxyMode: 'system' | 'custom' | 'none'
proxyUrl?: string proxyUrl?: string
userName: string userName: string
showPrompt: boolean
showMessageDivider: boolean showMessageDivider: boolean
messageFont: 'system' | 'serif' messageFont: 'system' | 'serif'
showInputEstimatedTokens: boolean showInputEstimatedTokens: boolean
@ -143,6 +144,7 @@ export const initialState: SettingsState = {
proxyMode: 'system', proxyMode: 'system',
proxyUrl: undefined, proxyUrl: undefined,
userName: '', userName: '',
showPrompt: true,
showMessageDivider: true, showMessageDivider: true,
messageFont: 'system', messageFont: 'system',
showInputEstimatedTokens: false, showInputEstimatedTokens: false,
@ -272,6 +274,9 @@ const settingsSlice = createSlice({
setUserName: (state, action: PayloadAction<string>) => { setUserName: (state, action: PayloadAction<string>) => {
state.userName = action.payload state.userName = action.payload
}, },
setShowPrompt: (state, action: PayloadAction<boolean>) => {
state.showPrompt = action.payload
},
setShowMessageDivider: (state, action: PayloadAction<boolean>) => { setShowMessageDivider: (state, action: PayloadAction<boolean>) => {
state.showMessageDivider = action.payload state.showMessageDivider = action.payload
}, },
@ -528,6 +533,7 @@ export const {
setProxyMode, setProxyMode,
setProxyUrl, setProxyUrl,
setUserName, setUserName,
setShowPrompt,
setShowMessageDivider, setShowMessageDivider,
setMessageFont, setMessageFont,
setShowInputEstimatedTokens, setShowInputEstimatedTokens,