refactor: add feedback on saving assistant prompt (#8726)

This commit is contained in:
one 2025-07-31 21:20:16 +08:00 committed by GitHub
parent 0113447481
commit 925cc6bb9b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 26 additions and 7 deletions

View File

@ -703,6 +703,7 @@
"no_results": "No results",
"open": "Open",
"paste": "Paste",
"preview": "Preview",
"prompt": "Prompt",
"provider": "Provider",
"reasoning_content": "Deep reasoning",
@ -711,6 +712,7 @@
"rename": "Rename",
"reset": "Reset",
"save": "Save",
"saved": "Saved",
"search": "Search",
"select": "Select",
"selectedItems": "Selected {{count}} items",

View File

@ -703,6 +703,7 @@
"no_results": "検索結果なし",
"open": "開く",
"paste": "貼り付け",
"preview": "プレビュー",
"prompt": "プロンプト",
"provider": "プロバイダー",
"reasoning_content": "深く考察済み",
@ -711,6 +712,7 @@
"rename": "名前を変更",
"reset": "リセット",
"save": "保存",
"saved": "保存されました",
"search": "検索",
"select": "選択",
"selectedItems": "{{count}}件の項目を選択しました",

View File

@ -703,6 +703,7 @@
"no_results": "Результатов не найдено",
"open": "Открыть",
"paste": "Вставить",
"preview": "Предварительный просмотр",
"prompt": "Промпт",
"provider": "Провайдер",
"reasoning_content": "Глубокий анализ",
@ -711,6 +712,7 @@
"rename": "Переименовать",
"reset": "Сбросить",
"save": "Сохранить",
"saved": "Сохранено",
"search": "Поиск",
"select": "Выбрать",
"selectedItems": "Выбрано {{count}} элементов",

View File

@ -703,6 +703,7 @@
"no_results": "无结果",
"open": "打开",
"paste": "粘贴",
"preview": "预览",
"prompt": "提示词",
"provider": "提供商",
"reasoning_content": "已深度思考",
@ -711,6 +712,7 @@
"rename": "重命名",
"reset": "重置",
"save": "保存",
"saved": "已保存",
"search": "搜索",
"select": "选择",
"selectedItems": "已选择 {{count}} 项",

View File

@ -703,6 +703,7 @@
"no_results": "沒有結果",
"open": "開啟",
"paste": "貼上",
"preview": "預覽",
"prompt": "提示詞",
"provider": "供應商",
"reasoning_content": "已深度思考",
@ -711,6 +712,7 @@
"rename": "重新命名",
"reset": "重設",
"save": "儲存",
"saved": "已儲存",
"search": "搜尋",
"select": "選擇",
"selectedItems": "已選擇 {{count}} 項",

View File

@ -1,6 +1,6 @@
import 'emoji-picker-element'
import { CloseCircleFilled, QuestionCircleOutlined } from '@ant-design/icons'
import { CloseCircleFilled } from '@ant-design/icons'
import CodeEditor from '@renderer/components/CodeEditor'
import EmojiPicker from '@renderer/components/EmojiPicker'
import { Box, HSpaceBetweenStack, HStack } from '@renderer/components/Layout'
@ -9,6 +9,7 @@ import { estimateTextTokens } from '@renderer/services/TokenService'
import { Assistant, AssistantSettings } from '@renderer/types'
import { getLeadingEmoji } from '@renderer/utils'
import { Button, Input, Popover } from 'antd'
import { Edit, Eye, HelpCircle } from 'lucide-react'
import { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import ReactMarkdown from 'react-markdown'
@ -29,7 +30,7 @@ const AssistantPromptSettings: React.FC<Props> = ({ assistant, updateAssistant }
const [prompt, setPrompt] = useState(assistant.prompt)
const [tokenCount, setTokenCount] = useState(0)
const { t } = useTranslation()
const [showMarkdown, setShowMarkdown] = useState(prompt.length > 0)
const [showPreview, setShowPreview] = useState(prompt.length > 0)
useEffect(() => {
const updateTokenCount = async () => {
@ -47,6 +48,7 @@ const AssistantPromptSettings: React.FC<Props> = ({ assistant, updateAssistant }
const onUpdate = () => {
const _assistant = { ...assistant, name: name.trim(), emoji, prompt }
updateAssistant(_assistant)
window.message.success(t('common.saved'))
}
const handleEmojiSelect = (selectedEmoji: string) => {
@ -112,12 +114,12 @@ const AssistantPromptSettings: React.FC<Props> = ({ assistant, updateAssistant }
<HStack mb={8} alignItems="center" gap={4}>
<Box style={{ fontWeight: 'bold' }}>{t('common.prompt')}</Box>
<Popover title={t('agents.add.prompt.variables.tip.title')} content={promptVarsContent}>
<QuestionCircleOutlined size={14} color="var(--color-text-2)" />
<HelpCircle size={14} color="var(--color-text-2)" />
</Popover>
</HStack>
<TextAreaContainer>
{showMarkdown ? (
<MarkdownContainer className="markdown" onClick={() => setShowMarkdown(false)}>
{showPreview ? (
<MarkdownContainer className="markdown" onClick={() => setShowPreview(false)}>
<ReactMarkdown>{processedPrompt || prompt}</ReactMarkdown>
<div style={{ height: '30px' }} />
</MarkdownContainer>
@ -147,8 +149,11 @@ const AssistantPromptSettings: React.FC<Props> = ({ assistant, updateAssistant }
</TextAreaContainer>
<HSpaceBetweenStack width="100%" justifyContent="flex-end" mt="10px">
<TokenCount>Tokens: {tokenCount}</TokenCount>
<Button type="primary" onClick={() => setShowMarkdown((prev) => !prev)}>
{t(showMarkdown ? 'common.edit' : 'common.save')}
<Button
type="primary"
icon={showPreview ? <Edit size={14} /> : <Eye size={14} />}
onClick={() => setShowPreview((prev) => !prev)}>
{showPreview ? t('common.edit') : t('common.preview')}
</Button>
</HSpaceBetweenStack>
</Container>
@ -160,6 +165,10 @@ const Container = styled.div`
flex: 1;
flex-direction: column;
overflow: hidden;
.ant-btn {
line-height: 0;
}
`
const EmojiButtonWrapper = styled.div`