mirror of
https://github.com/EthanMarti/infio-copilot.git
synced 2026-01-16 08:21:55 +00:00
Remove the markdown-to-text dependency, update the package.json file, enhance internationalization support for chat history view components, optimize user interaction prompts, and improve both user experience and code readability.
This commit is contained in:
parent
bff3e05d93
commit
306817741f
@ -101,7 +101,6 @@
|
||||
"lodash.isequal": "^4.5.0",
|
||||
"lru-cache": "^10.1.0",
|
||||
"lucide-react": "^0.447.0",
|
||||
"markdown-to-text": "^0.1.1",
|
||||
"mermaid": "^11.6.0",
|
||||
"micromatch": "^4.0.5",
|
||||
"minimatch": "^10.0.1",
|
||||
|
||||
@ -49,7 +49,7 @@ const ChatHistoryView = ({
|
||||
const titleInputRefs = useRef<Map<string, HTMLInputElement>>(new Map())
|
||||
|
||||
const handleCleanup = async () => {
|
||||
const confirmed = confirm('此操作将永久删除所有对话的历史版本,只保留最新版。这有助于清理数据,但操作不可撤销。确定要继续吗?')
|
||||
const confirmed = confirm(String(t('chat.history.cleanupConfirm')))
|
||||
if (!confirmed) {
|
||||
return
|
||||
}
|
||||
@ -57,12 +57,12 @@ const ChatHistoryView = ({
|
||||
try {
|
||||
const count = await cleanupOutdatedChats()
|
||||
if (count > 0) {
|
||||
new Notice(`成功清理了 ${count} 个过时的对话文件。`)
|
||||
new Notice(String(t('chat.history.cleanupSuccess', { count })))
|
||||
} else {
|
||||
new Notice('没有需要清理的对话文件。')
|
||||
new Notice(String(t('chat.history.cleanupNone')))
|
||||
}
|
||||
} catch (error) {
|
||||
new Notice('清理失败,请检查开发者控制台获取更多信息。')
|
||||
new Notice(String(t('chat.history.cleanupFailed')))
|
||||
console.error('Failed to cleanup outdated chats', error)
|
||||
}
|
||||
}
|
||||
@ -145,12 +145,12 @@ const ChatHistoryView = ({
|
||||
// batch delete selected conversations
|
||||
const handleBatchDelete = async () => {
|
||||
if (selectedConversations.size === 0) {
|
||||
new Notice('请先选择要删除的对话')
|
||||
new Notice(String(t('chat.history.selectFirst')))
|
||||
return
|
||||
}
|
||||
|
||||
// show confirmation
|
||||
const confirmed = confirm(`确定要删除选中的 ${selectedConversations.size} 个对话吗?此操作不可撤销。`)
|
||||
const confirmed = confirm(String(t('chat.history.batchDeleteConfirm', { count: selectedConversations.size })))
|
||||
if (!confirmed) {
|
||||
return
|
||||
}
|
||||
@ -172,10 +172,10 @@ const ChatHistoryView = ({
|
||||
|
||||
// show results
|
||||
if (deletedIds.length > 0) {
|
||||
new Notice(`成功删除 ${deletedIds.length} 个对话`)
|
||||
new Notice(String(t('chat.history.batchDeleteSuccess', { count: deletedIds.length })))
|
||||
}
|
||||
if (errors.length > 0) {
|
||||
new Notice(`${errors.length} 个对话删除失败`)
|
||||
new Notice(String(t('chat.history.batchDeleteFailed', { count: errors.length })))
|
||||
}
|
||||
|
||||
// clear selections
|
||||
@ -241,18 +241,18 @@ const ChatHistoryView = ({
|
||||
<button
|
||||
onClick={handleCleanup}
|
||||
className="infio-chat-history-cleanup-btn"
|
||||
title={'清理历史版本'}
|
||||
title={String(t('chat.history.cleanupTitle'))}
|
||||
>
|
||||
<Sparkles size={16} />
|
||||
清理
|
||||
{t('chat.history.cleanup')}
|
||||
</button>
|
||||
<button
|
||||
onClick={toggleSelectionMode}
|
||||
className={`infio-chat-history-selection-btn ${selectionMode ? 'active' : ''}`}
|
||||
title={selectionMode ? '退出选择模式' : '进入选择模式'}
|
||||
title={selectionMode ? String(t('chat.history.exitSelection')) : String(t('chat.history.enterSelection'))}
|
||||
>
|
||||
<CopyPlus size={16} />
|
||||
{selectionMode ? '取消' : '多选'}
|
||||
{selectionMode ? t('chat.history.cancel') : t('chat.history.multiSelect')}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -260,7 +260,7 @@ const ChatHistoryView = ({
|
||||
{/* description */}
|
||||
<div className="infio-chat-history-tip">
|
||||
{selectionMode
|
||||
? `选择模式 - 已选择 ${selectedConversations.size} 个对话`
|
||||
? String(t('chat.history.selectionMode', { count: selectedConversations.size }))
|
||||
: String(t('chat.history.description'))
|
||||
}
|
||||
</div>
|
||||
@ -276,12 +276,12 @@ const ChatHistoryView = ({
|
||||
{isAllSelected ? (
|
||||
<>
|
||||
<CheckSquare size={16} />
|
||||
取消全选
|
||||
{t('chat.history.unselectAll')}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Square size={16} />
|
||||
全选
|
||||
{t('chat.history.selectAll')}
|
||||
</>
|
||||
)}
|
||||
</button>
|
||||
@ -293,7 +293,7 @@ const ChatHistoryView = ({
|
||||
className="infio-chat-history-batch-delete-btn"
|
||||
>
|
||||
<Trash2 size={16} />
|
||||
批量删除 ({selectedConversations.size})
|
||||
{t('chat.history.batchDelete')} ({selectedConversations.size})
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -316,10 +316,10 @@ const ChatHistoryView = ({
|
||||
<button
|
||||
onClick={toggleWorkspaceFilter}
|
||||
className={`infio-chat-history-workspace-filter-btn ${filterByWorkspace ? 'active' : ''}`}
|
||||
title={filterByWorkspace ? '显示所有对话' : '只显示当前工作区对话'}
|
||||
title={filterByWorkspace ? String(t('chat.history.showAllChats')) : String(t('chat.history.showWorkspaceChats'))}
|
||||
>
|
||||
<Globe size={14} />
|
||||
当前工作区
|
||||
{t('chat.history.currentWorkspace')}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@ -393,7 +393,7 @@ const ChatHistoryView = ({
|
||||
<div className="infio-chat-history-conversation-title">{conversation.title}</div>
|
||||
{conversation.workspace && (
|
||||
<div className="infio-chat-history-workspace">
|
||||
工作区: {conversation.workspace}
|
||||
{t('chat.history.workspaceLabel', { workspace: conversation.workspace })}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@ -2,7 +2,7 @@ import * as path from 'path'
|
||||
|
||||
import { BaseSerializedNode } from '@lexical/clipboard/clipboard'
|
||||
import { useMutation } from '@tanstack/react-query'
|
||||
import { Box, Brain, CircleStop, History, NotebookPen, Plus, Search, Server, SquareSlash, Undo } from 'lucide-react'
|
||||
import { Box, Lightbulb, CircleStop, History, NotebookPen, Plus, Search, Server, SquareSlash, Undo } from 'lucide-react'
|
||||
import { App, Notice, TFile, TFolder, WorkspaceLeaf } from 'obsidian'
|
||||
import {
|
||||
forwardRef,
|
||||
@ -193,7 +193,7 @@ const Chat = forwardRef<ChatRef, ChatProps>((props, ref) => {
|
||||
}
|
||||
}
|
||||
|
||||
const [tab, setTab] = useState<'chat' | 'commands' | 'custom-mode' | 'mcp' | 'search' | 'history' | 'workspace' | 'insights'>('search')
|
||||
const [tab, setTab] = useState<'chat' | 'commands' | 'custom-mode' | 'mcp' | 'search' | 'history' | 'workspace' | 'insights'>('chat')
|
||||
|
||||
const [selectedSerializedNodes, setSelectedSerializedNodes] = useState<BaseSerializedNode[]>([])
|
||||
|
||||
@ -1310,18 +1310,6 @@ const Chat = forwardRef<ChatRef, ChatProps>((props, ref) => {
|
||||
>
|
||||
<History size={18} color={tab === 'history' ? 'var(--text-accent)' : 'var(--text-color)'} />
|
||||
</button>
|
||||
<button
|
||||
onClick={() => {
|
||||
if (tab === 'insights') {
|
||||
setTab('chat')
|
||||
} else {
|
||||
setTab('insights')
|
||||
}
|
||||
}}
|
||||
className="infio-chat-list-dropdown"
|
||||
>
|
||||
<Brain size={18} color={tab === 'insights' ? 'var(--text-accent)' : 'var(--text-color)'} />
|
||||
</button>
|
||||
<button
|
||||
onClick={() => {
|
||||
if (tab === 'search') {
|
||||
@ -1334,6 +1322,18 @@ const Chat = forwardRef<ChatRef, ChatProps>((props, ref) => {
|
||||
>
|
||||
<Search size={18} color={tab === 'search' ? 'var(--text-accent)' : 'var(--text-color)'} />
|
||||
</button>
|
||||
<button
|
||||
onClick={() => {
|
||||
if (tab === 'insights') {
|
||||
setTab('chat')
|
||||
} else {
|
||||
setTab('insights')
|
||||
}
|
||||
}}
|
||||
className="infio-chat-list-dropdown"
|
||||
>
|
||||
<Lightbulb size={18} color={tab === 'insights' ? 'var(--text-accent)' : 'var(--text-color)'} />
|
||||
</button>
|
||||
<button
|
||||
onClick={() => {
|
||||
if (tab === 'workspace') {
|
||||
|
||||
@ -1,38 +1,50 @@
|
||||
import { NotebookPen, Search, Server, SquareSlash } from 'lucide-react';
|
||||
import { History, Lightbulb, NotebookPen, Search, Server, SquareSlash } from 'lucide-react';
|
||||
import React from 'react';
|
||||
|
||||
import { t } from '../../lang/helpers';
|
||||
|
||||
interface HelloInfoProps {
|
||||
onNavigate: (tab: 'commands' | 'custom-mode' | 'mcp' | 'search') => void;
|
||||
onNavigate: (tab: 'commands' | 'custom-mode' | 'mcp' | 'search' | 'history' | 'insights') => void;
|
||||
}
|
||||
|
||||
const HelloInfo: React.FC<HelloInfoProps> = ({ onNavigate }) => {
|
||||
const navigationItems = [
|
||||
{
|
||||
label: '语义搜索',
|
||||
description: '使用 RAG 在笔记库中进行语义搜索',
|
||||
label: t('chat.navigation.history'),
|
||||
description: t('chat.navigation.historyDesc'),
|
||||
icon: <History size={20} />,
|
||||
action: () => onNavigate('history'),
|
||||
},
|
||||
{
|
||||
label: t('chat.navigation.search'),
|
||||
description: t('chat.navigation.searchDesc'),
|
||||
icon: <Search size={20} />,
|
||||
action: () => onNavigate('search'),
|
||||
},
|
||||
{
|
||||
label: t('chat.navigation.commands'),
|
||||
description: t('chat.navigation.commandsDesc'),
|
||||
icon: <SquareSlash size={20} />,
|
||||
action: () => onNavigate('commands'),
|
||||
label: t('chat.navigation.insights'),
|
||||
description: t('chat.navigation.insightsDesc'),
|
||||
icon: <Lightbulb size={20} />,
|
||||
action: () => onNavigate('insights'),
|
||||
},
|
||||
{
|
||||
label: t('chat.navigation.customMode'),
|
||||
description: t('chat.navigation.customModeDesc'),
|
||||
icon: <NotebookPen size={20} />,
|
||||
action: () => onNavigate('custom-mode'),
|
||||
},
|
||||
{
|
||||
label: t('chat.navigation.mcp'),
|
||||
description: t('chat.navigation.mcpDesc'),
|
||||
icon: <Server size={20} />,
|
||||
action: () => onNavigate('mcp'),
|
||||
}
|
||||
// {
|
||||
// label: t('chat.navigation.commands'),
|
||||
// description: t('chat.navigation.commandsDesc'),
|
||||
// icon: <SquareSlash size={20} />,
|
||||
// action: () => onNavigate('commands'),
|
||||
// },
|
||||
// {
|
||||
// label: t('chat.navigation.customMode'),
|
||||
// description: t('chat.navigation.customModeDesc'),
|
||||
// icon: <NotebookPen size={20} />,
|
||||
// action: () => onNavigate('custom-mode'),
|
||||
// },
|
||||
// {
|
||||
// label: t('chat.navigation.mcp'),
|
||||
// description: t('chat.navigation.mcpDesc'),
|
||||
// icon: <Server size={20} />,
|
||||
// action: () => onNavigate('mcp'),
|
||||
// }
|
||||
];
|
||||
|
||||
return (
|
||||
|
||||
@ -546,7 +546,7 @@ const InsightView = () => {
|
||||
<div className="infio-insight-stats-overview">
|
||||
<div className="infio-insight-stats-main">
|
||||
<span className="infio-insight-stats-number">{insightResults.length}</span>
|
||||
<span className="infio-insight-stats-label">个洞察</span>
|
||||
<span className="infio-insight-stats-label">{t('insights.stats.insightCount')}</span>
|
||||
</div>
|
||||
<div className="infio-insight-stats-breakdown">
|
||||
{insightGroupedResults.length > 0 && (
|
||||
@ -557,7 +557,7 @@ const InsightView = () => {
|
||||
<span className="infio-insight-stats-item-value">
|
||||
{insightGroupedResults.filter(g => g.groupType === 'workspace').length}
|
||||
</span>
|
||||
<span className="infio-insight-stats-item-label">工作区</span>
|
||||
<span className="infio-insight-stats-item-label">{t('insights.stats.workspaceCount')}</span>
|
||||
</div>
|
||||
)}
|
||||
{insightGroupedResults.filter(g => g.groupType === 'folder').length > 0 && (
|
||||
@ -566,7 +566,7 @@ const InsightView = () => {
|
||||
<span className="infio-insight-stats-item-value">
|
||||
{insightGroupedResults.filter(g => g.groupType === 'folder').length}
|
||||
</span>
|
||||
<span className="infio-insight-stats-item-label">文件夹</span>
|
||||
<span className="infio-insight-stats-item-label">{t('insights.stats.folderCount')}</span>
|
||||
</div>
|
||||
)}
|
||||
{insightGroupedResults.filter(g => g.groupType === 'file').length > 0 && (
|
||||
@ -575,7 +575,7 @@ const InsightView = () => {
|
||||
<span className="infio-insight-stats-item-value">
|
||||
{insightGroupedResults.filter(g => g.groupType === 'file').length}
|
||||
</span>
|
||||
<span className="infio-insight-stats-item-label">文件</span>
|
||||
<span className="infio-insight-stats-item-label">{t('insights.stats.fileCount')}</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
@ -585,7 +585,7 @@ const InsightView = () => {
|
||||
)}
|
||||
<div className="infio-insight-model-info">
|
||||
<div className="infio-insight-model-row">
|
||||
<span className="infio-insight-model-label">洞察模型:</span>
|
||||
<span className="infio-insight-model-label">{t('insights.stats.insightModelLabel')}</span>
|
||||
<ModelSelect modelType="insight" />
|
||||
</div>
|
||||
<div className="infio-insight-actions">
|
||||
@ -643,15 +643,15 @@ const InsightView = () => {
|
||||
{/* 进度日志 */}
|
||||
<div className="obsidian-insight-progress-log">
|
||||
<div className="obsidian-insight-progress-log-item">
|
||||
<span className="obsidian-insight-progress-log-label">阶段:</span>
|
||||
<span className="obsidian-insight-progress-log-label">{t('insights.progress.stage')}</span>
|
||||
<span className="obsidian-insight-progress-log-value">{initProgress.stage}</span>
|
||||
</div>
|
||||
<div className="obsidian-insight-progress-log-item">
|
||||
<span className="obsidian-insight-progress-log-label">进度:</span>
|
||||
<span className="obsidian-insight-progress-log-label">{t('insights.progress.progressLabel')}</span>
|
||||
<span className="obsidian-insight-progress-log-value">{initProgress.current} / {initProgress.total}</span>
|
||||
</div>
|
||||
<div className="obsidian-insight-progress-log-item">
|
||||
<span className="obsidian-insight-progress-log-label">当前:</span>
|
||||
<span className="obsidian-insight-progress-log-label">{t('insights.progress.currentLabel')}</span>
|
||||
<span className="obsidian-insight-progress-log-value">{initProgress.currentItem}</span>
|
||||
</div>
|
||||
</div>
|
||||
@ -786,7 +786,7 @@ const InsightView = () => {
|
||||
</div>
|
||||
<div className="obsidian-file-header-right">
|
||||
<span className="obsidian-insight-count">
|
||||
{fileGroup.insights.length} 个洞察
|
||||
{fileGroup.insights.length} {t('insights.progress.insightCountLabel')}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -286,7 +286,7 @@ const SearchView = () => {
|
||||
currentWorkspace,
|
||||
{ reindexAll: true },
|
||||
(progress) => {
|
||||
setRAGInitProgress(progress)
|
||||
setRAGInitProgress(progress as any)
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@ -174,7 +174,7 @@ async function loadTransformers(): Promise<void> {
|
||||
globalTransformers.transformers = {
|
||||
pipelineFactory,
|
||||
AutoTokenizer,
|
||||
env
|
||||
env: env as unknown as TransformersEnv
|
||||
};
|
||||
|
||||
transformersLoaded = true;
|
||||
|
||||
@ -6,6 +6,12 @@ export default {
|
||||
subtitle: "Explore different modes to enhance your productivity"
|
||||
},
|
||||
navigation: {
|
||||
history: "Chat History",
|
||||
historyDesc: "View and manage your conversation history",
|
||||
insights: "AI Insights",
|
||||
insightsDesc: "View AI-generated insights and analysis",
|
||||
search: "Semantic Search",
|
||||
searchDesc: "Use RAG for semantic search within your note vault",
|
||||
commands: "Commands",
|
||||
commandsDesc: "Create and manage custom commands for quick actions",
|
||||
customMode: "Custom Mode",
|
||||
@ -47,7 +53,29 @@ export default {
|
||||
save: "Save",
|
||||
cancel: "Cancel",
|
||||
yesterday: "Yesterday",
|
||||
daysAgo: "days ago"
|
||||
daysAgo: "days ago",
|
||||
// New keys for ChatHistoryView
|
||||
cleanup: "Cleanup",
|
||||
cleanupTitle: "Cleanup History Versions",
|
||||
cleanupConfirm: "This operation will permanently delete all historical versions of conversations, keeping only the latest version. This helps clean up data, but the operation is irreversible. Are you sure you want to continue?",
|
||||
cleanupSuccess: "Successfully cleaned up {count} outdated conversation files.",
|
||||
cleanupNone: "No conversation files need to be cleaned up.",
|
||||
cleanupFailed: "Cleanup failed, please check the developer console for more information.",
|
||||
multiSelect: "Multi-select",
|
||||
exitSelection: "Exit selection mode",
|
||||
enterSelection: "Enter selection mode",
|
||||
selectionMode: "Selection mode - {count} conversations selected",
|
||||
selectAll: "Select all",
|
||||
unselectAll: "Unselect all",
|
||||
batchDelete: "Batch delete",
|
||||
batchDeleteConfirm: "Are you sure you want to delete the selected {count} conversations? This operation is irreversible.",
|
||||
batchDeleteSuccess: "Successfully deleted {count} conversations",
|
||||
batchDeleteFailed: "{count} conversations failed to delete",
|
||||
selectFirst: "Please select conversations to delete first",
|
||||
currentWorkspace: "Current workspace",
|
||||
showAllChats: "Show all conversations",
|
||||
showWorkspaceChats: "Show only current workspace conversations",
|
||||
workspaceLabel: "Workspace: {workspace}"
|
||||
},
|
||||
shortcutInfo: {
|
||||
editInline: "Edit inline",
|
||||
@ -120,6 +148,7 @@ export default {
|
||||
viewDetails: "View details"
|
||||
},
|
||||
input: {
|
||||
search: "Search",
|
||||
submit: "Submit",
|
||||
collectedModels: "Collected Models",
|
||||
loading: "Loading...",
|
||||
@ -597,7 +626,12 @@ export default {
|
||||
workspace: "{count} workspace",
|
||||
folder: "{count} folder",
|
||||
file: "{count} file",
|
||||
scopeLabel: "Scope:"
|
||||
scopeLabel: "Scope:",
|
||||
insightCount: "insights",
|
||||
workspaceCount: "workspaces",
|
||||
folderCount: "folders",
|
||||
fileCount: "files",
|
||||
insightModelLabel: "Insight Model:"
|
||||
},
|
||||
types: {
|
||||
denseSummary: "📋 Dense Summary",
|
||||
@ -633,7 +667,11 @@ export default {
|
||||
folderNotFound: "Folder does not exist:"
|
||||
},
|
||||
progress: {
|
||||
current: "Processing: {item}"
|
||||
current: "Processing: {item}",
|
||||
stage: "Stage:",
|
||||
progressLabel: "Progress:",
|
||||
currentLabel: "Current:",
|
||||
insightCountLabel: "insights"
|
||||
}
|
||||
},
|
||||
workspace: {
|
||||
|
||||
@ -7,6 +7,12 @@ export default {
|
||||
subtitle: "探索不同模式来提升您的生产力"
|
||||
},
|
||||
navigation: {
|
||||
history: "聊天记录",
|
||||
historyDesc: "查看和管理您的对话历史记录",
|
||||
insights: "AI 洞察",
|
||||
insightsDesc: "查看 AI 生成的洞察和分析",
|
||||
search: "语义搜索",
|
||||
searchDesc: "使用 RAG 在笔记库中进行语义搜索",
|
||||
commands: "命令",
|
||||
commandsDesc: "创建和管理用于快速操作的自定义命令",
|
||||
customMode: "自定义模式",
|
||||
@ -48,7 +54,29 @@ export default {
|
||||
save: "保存",
|
||||
cancel: "取消",
|
||||
yesterday: "昨天",
|
||||
daysAgo: "天前"
|
||||
daysAgo: "天前",
|
||||
// New keys for ChatHistoryView
|
||||
cleanup: "清理",
|
||||
cleanupTitle: "清理历史版本",
|
||||
cleanupConfirm: "此操作将永久删除所有对话的历史版本,只保留最新版。这有助于清理数据,但操作不可撤销。确定要继续吗?",
|
||||
cleanupSuccess: "成功清理了 {count} 个过时的对话文件。",
|
||||
cleanupNone: "没有需要清理的对话文件。",
|
||||
cleanupFailed: "清理失败,请检查开发者控制台获取更多信息。",
|
||||
multiSelect: "多选",
|
||||
exitSelection: "退出选择模式",
|
||||
enterSelection: "进入选择模式",
|
||||
selectionMode: "选择模式 - 已选择 {count} 个对话",
|
||||
selectAll: "全选",
|
||||
unselectAll: "取消全选",
|
||||
batchDelete: "批量删除",
|
||||
batchDeleteConfirm: "确定要删除选中的 {count} 个对话吗?此操作不可撤销。",
|
||||
batchDeleteSuccess: "成功删除 {count} 个对话",
|
||||
batchDeleteFailed: "{count} 个对话删除失败",
|
||||
selectFirst: "请先选择要删除的对话",
|
||||
currentWorkspace: "当前工作区",
|
||||
showAllChats: "显示所有对话",
|
||||
showWorkspaceChats: "只显示当前工作区对话",
|
||||
workspaceLabel: "工作区: {workspace}"
|
||||
},
|
||||
shortcutInfo: {
|
||||
editInline: "行内编辑",
|
||||
@ -599,7 +627,12 @@ export default {
|
||||
workspace: "{count}工作区",
|
||||
folder: "{count}文件夹",
|
||||
file: "{count}文件",
|
||||
scopeLabel: "范围:"
|
||||
scopeLabel: "范围:",
|
||||
insightCount: "个洞察",
|
||||
workspaceCount: "个工作区",
|
||||
folderCount: "个文件夹",
|
||||
fileCount: "个文件",
|
||||
insightModelLabel: "洞察模型:"
|
||||
},
|
||||
types: {
|
||||
denseSummary: "📋 密集摘要",
|
||||
@ -635,7 +668,11 @@ export default {
|
||||
folderNotFound: "文件夹不存在:"
|
||||
},
|
||||
progress: {
|
||||
current: "正在处理: {item}"
|
||||
current: "正在处理: {item}",
|
||||
stage: "阶段:",
|
||||
progressLabel: "进度:",
|
||||
currentLabel: "当前:",
|
||||
insightCountLabel: "个洞察"
|
||||
}
|
||||
},
|
||||
workspace: {
|
||||
|
||||
@ -53,11 +53,16 @@ describe('parseSmartCopilotSettings', () => {
|
||||
chatModelId: '',
|
||||
mcpEnabled: false,
|
||||
collectedChatModels: [],
|
||||
collectedApplyModels: [],
|
||||
collectedEmbeddingModels: [],
|
||||
collectedInsightModels: [],
|
||||
chatModelProvider: 'Infio',
|
||||
applyModelId: '',
|
||||
applyModelProvider: 'Infio',
|
||||
embeddingModelId: '',
|
||||
embeddingModelProvider: 'Infio',
|
||||
insightModelId: '',
|
||||
insightModelProvider: 'Infio',
|
||||
experimentalDiffStrategy: false,
|
||||
defaultProvider: 'Infio',
|
||||
alibabaQwenProvider: {
|
||||
@ -286,6 +291,9 @@ describe('settings migration', () => {
|
||||
groqApiKey: 'groq-api-key',
|
||||
deepseekApiKey: '',
|
||||
collectedChatModels: [],
|
||||
collectedApplyModels: [],
|
||||
collectedEmbeddingModels: [],
|
||||
collectedInsightModels: [],
|
||||
chatModelId: '',
|
||||
mcpEnabled: false,
|
||||
chatModelProvider: 'Infio',
|
||||
@ -293,6 +301,8 @@ describe('settings migration', () => {
|
||||
applyModelProvider: 'Infio',
|
||||
embeddingModelId: '',
|
||||
embeddingModelProvider: 'Infio',
|
||||
insightModelId: '',
|
||||
insightModelProvider: 'Infio',
|
||||
experimentalDiffStrategy: false,
|
||||
defaultProvider: 'Infio',
|
||||
alibabaQwenProvider: {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user