修复 tool_result 压缩零效果(BUG-260628-01):单行/少行/JSON 大字符 串字段逃逸压缩的问题,基于实测数据(53/94 次迭代零节省)调参, 增加字符级保底截断,压缩有效率从 8% 提升至 ~85%+
208 lines
9.2 KiB
TypeScript
208 lines
9.2 KiB
TypeScript
export default {
|
||
aiChat: {
|
||
// ── Conversation sidebar ──
|
||
sidebarTitle: 'Chats',
|
||
newConversation: 'New chat',
|
||
doubleClickToRename: 'Double-click to rename',
|
||
generating: 'Generating…',
|
||
archive: 'Archive',
|
||
unarchive: 'Unarchive',
|
||
pinConversation: 'Pin',
|
||
unpinConversation: 'Unpin',
|
||
moreActions: 'More actions',
|
||
archived: 'Archived',
|
||
archivedCount: 'Archived ({n})',
|
||
emptyConversation: 'No conversations',
|
||
// UX-06 §3.1: conversation search (live title filter, Ctrl+K to focus)
|
||
searchPlaceholder: 'Search chats…',
|
||
searchEmpty: 'No matching chats',
|
||
searchShortcutHint: 'Ctrl+K',
|
||
|
||
// ── Time grouping (sidebar) ──
|
||
today: 'Today',
|
||
yesterday: 'Yesterday',
|
||
earlier: 'Earlier',
|
||
groupEmpty: 'None',
|
||
|
||
// ── Header buttons ──
|
||
conversationList: 'Chat list',
|
||
maximize: 'Maximize',
|
||
pendingApprovalCount: '{n} pending',
|
||
pendingApprovalHint: 'Click to jump to the first pending approval',
|
||
restoreSidebar: 'Restore sidebar',
|
||
sidebarResizeHint: 'Drag to resize sidebar',
|
||
detachWindow: 'Detach window',
|
||
closePanel: 'Close panel',
|
||
dockRight: 'Dock to main window right',
|
||
undock: 'Undock',
|
||
pinOnTop: 'Pin on top',
|
||
unpin: 'Unpin',
|
||
closeWindow: 'Close window',
|
||
|
||
// ── Provider status ──
|
||
clickToSwitchProvider: 'Click to switch provider',
|
||
providerNotConfigured: 'No AI provider configured. Please add one in settings.',
|
||
notConfigured: 'Not configured',
|
||
|
||
// ── F-01 阶段6: model picker (auto/specify toggle + dropdown) ──
|
||
autoMode: 'Auto',
|
||
specifyMode: 'Specify',
|
||
autoModeHint: 'Auto mode: router picks the best model per scenario',
|
||
specifyModeHint: 'Specify mode: use the selected model, overriding the router (main chat only)',
|
||
selectModel: 'Select model',
|
||
noModels: 'No models available. Please fetch in settings.',
|
||
|
||
// ── Empty states (UX-2025-20: example prompt cards + no-provider guidance) ──
|
||
emptyNoProvider: 'No AI provider configured',
|
||
emptyNoProviderHint: 'Please add a provider in settings to start chatting',
|
||
emptyTitle: 'Chat with AI assistant',
|
||
emptyHint: 'Try "create a project" or "list all tasks"',
|
||
// Example prompt cards: click to fill and send (4 prompts, DevFlow scenarios)
|
||
examplePrompt1: 'Analyze this project’s dependencies',
|
||
examplePrompt2: 'Help me write a workflow node',
|
||
examplePrompt3: 'List all current tasks',
|
||
examplePrompt4: 'Generate a project idea',
|
||
goToSettings: 'Open settings',
|
||
goToSettingsHint: 'The detached window cannot open settings directly. Configure AI providers on the main window’s Settings page.',
|
||
|
||
// ── Provider switch feedback (UX-2025-14) ──
|
||
providerSwitched: 'Switched to {model}',
|
||
providerSwitchHint: 'Current model: {model}',
|
||
|
||
// ── Back to bottom ──
|
||
backToBottom: 'Back to bottom',
|
||
|
||
// ── Pending queue ──
|
||
queueTitle: 'Queued {n}/10',
|
||
clearQueue: 'Clear',
|
||
// UX-260616-06/07: queue item edit + send now
|
||
queueEdit: 'Edit',
|
||
queueSave: 'Save',
|
||
queueCancel: 'Cancel',
|
||
queueSendNow: 'Send now',
|
||
|
||
// ── Skill ──
|
||
clearSkill: 'Clear skill',
|
||
placeholderWithSkill: 'Skill selected. Type arguments and press Enter',
|
||
placeholderDefault: "Type a message... (/ for skills, {'@'} to mention)",
|
||
skillNoMatch: 'No matching skill',
|
||
skillNotLoaded: 'No local skills loaded',
|
||
|
||
// ── UX-10: @ entity mention (@ opens popover, select inserts [Type:Name] token) ──
|
||
mentionHint: "{'@'} to mention project/task",
|
||
mentionGroupProject: 'Projects',
|
||
mentionGroupTask: 'Tasks',
|
||
mentionGroupIdea: 'Ideas',
|
||
mentionNoMatch: 'No matching entity',
|
||
mentionEmpty: 'No project/task to mention',
|
||
|
||
// ── Send ──
|
||
stopGenerating: 'Stop generating',
|
||
// L2 状态机停止按钮三态(ConvState 派生)
|
||
stopping: 'Stopping',
|
||
stopFailedRetry: 'Stop failed, click to retry',
|
||
|
||
// ── Input hint ──
|
||
inputHint: 'Enter to send · Shift+Enter for newline',
|
||
|
||
// ── F-260614-05 Phase 2b: image input (paste / drag-drop) ──
|
||
removeImage: 'Remove image',
|
||
imagePreviewAlt: 'Pending image',
|
||
imageTooLarge: 'Image too large (max 10MB), skipped',
|
||
imageLimit: 'Up to {n} images, extras ignored',
|
||
imageReadFailed: 'Failed to read image',
|
||
|
||
// ── Confirm dialog ──
|
||
confirmDeleteConversation: 'Delete chat "{title}"? This cannot be undone.',
|
||
// UX-260617-24: stronger warning when deleting the currently active conversation
|
||
confirmDeleteActiveConversation: '"{title}" is the chat you are currently viewing. Deleting it will clear the current view and cannot be undone. Continue?',
|
||
clearChat: 'Clear',
|
||
confirmClearChat: 'Are you sure you want to clear all messages in this chat? This cannot be undone.',
|
||
toastSendFail: 'Send failed: {msg}',
|
||
|
||
// ── Message copy (F-260615-13) ──
|
||
copyMsg: 'Copy message',
|
||
copied: 'Copied',
|
||
copyFailed: 'Copy failed',
|
||
|
||
// ── Message actions bar (UX-02) ──
|
||
regenerate: 'Regenerate',
|
||
regenerateFailed: 'Regenerate failed: {msg}',
|
||
regenerateUnavailable: 'No reply to regenerate',
|
||
|
||
// ── UX-09: edit last user message and regenerate ──
|
||
editMessage: 'Edit',
|
||
editMessageFailed: 'Edit failed: {msg}',
|
||
editNotLastUser: 'Only the last user message can be edited',
|
||
placeholderEditing: 'Edit message then Enter to regenerate (Esc to cancel)',
|
||
|
||
// ── Error bubble actions (UX-03 / UX-260616-01) ──
|
||
retry: 'Retry',
|
||
goToSettingsAction: 'Open settings',
|
||
|
||
// ── F-260616-03: max iterations reached pause action card ──
|
||
maxRoundsReached: 'Max rounds reached. Continue?',
|
||
maxRoundsHint: 'Continue runs another full round; stop ends with current results',
|
||
continueLoop: 'Continue',
|
||
stopLoop: 'Stop',
|
||
continueLoopFailed: 'Continue failed: {msg}',
|
||
stopLoopFailed: 'Stop failed: {msg}',
|
||
|
||
// ── L1 help protocol (aichat experience & agent capability redesign §2.3, 2026-06-21): circuit-breaker help card ──
|
||
helpRequiredAck: 'Choice noted. Please rephrase your request to try another approach / continue',
|
||
|
||
// ── F-260619-03 Phase B: path authorization dialog (LLM accessing dir outside whitelist) ──
|
||
dirAuthRequired: 'Path authorization required',
|
||
dirAuthHint: '{tool} wants to access: {path}',
|
||
dirAuthOnce: 'This time',
|
||
dirAuthSession: 'This session',
|
||
dirAuthAlways: 'Always',
|
||
dirAuthDeny: 'Deny',
|
||
dirAuthFailed: 'Authorization failed: {msg}',
|
||
|
||
// ── Input Augmentation layer: mention/skill injection feedback ──
|
||
// search_files blind search denied by whitelist fallback (no auth dialog; prompt user to use @mention or absolute path)
|
||
searchFilesBlocked: 'search_files only works inside authorized dirs. Use @[project] to reference or provide an absolute path.',
|
||
// /skill hot reload (ai_reload_skills IPC) success toast
|
||
skillReloaded: 'Skills reloaded',
|
||
// @mention entity resolve failed (id points to a project/task/idea/skill that was deleted or unavailable)
|
||
mentionUnresolved: 'The mentioned {kind} was deleted or is unavailable',
|
||
// Same-name skill conflict (scan_skills returns conflicts; frontend warns, injection takes first by skills>commands>plugins priority)
|
||
skillConflict: 'Skill "{name}" has multiple definitions; using skills priority',
|
||
|
||
// ── ⑥.4 Phase 4: @project expansion summary (input area preview) ──
|
||
enrichmentBadge: '📎 Referenced "{project}" ({tasks} tasks, {ideas} ideas)',
|
||
enrichmentExpand: 'Show context preview',
|
||
enrichmentCollapse: 'Hide context preview',
|
||
enrichmentLabel: 'Context preview',
|
||
|
||
|
||
// ── F-15 phase 2: manual context management (clear / compress) ──
|
||
// Buttons (Header action area: trash + compress icon)
|
||
clearContext: 'Clear context',
|
||
compressContext: 'Compress context',
|
||
// Confirm dialog (clear is semantically irreversible; history archived, not deleted)
|
||
// Title "Clear context" folded into the lead sentence; stress irreversible + archived segment + AI no longer sees history
|
||
clearContextConfirm: 'Clear context? This action is irreversible. The current chat context will be archived as a segment (the AI will no longer see these history messages). New chats are not affected.',
|
||
// Danger button label for the confirm dialog (ConfirmDialog dangerLabel); falls back to common.confirm if omitted
|
||
clearContextDangerLabel: 'Clear',
|
||
// Collapsed separator (consecutive same-status merged into one bar; {n}=merged message count)
|
||
contextArchived: 'Archived {n} messages',
|
||
compressed: 'Context compressed',
|
||
compressing: 'Compressing…',
|
||
clearSuccess: 'Context cleared',
|
||
compressSuccess: 'Context compressed',
|
||
compressError: 'Compression failed: {msg}',
|
||
clearError: 'Clear failed: {msg}',
|
||
// Separator expand / collapse
|
||
expand: 'Expand',
|
||
collapse: 'Collapse',
|
||
// Compressed summary block label (before the system summary message when expanded)
|
||
compressedSummaryLabel: 'Context summary',
|
||
|
||
// ── AE-2025-04 Session Trust ──
|
||
// Auto-approval toast (same-session already approved same-kind op: same tool + same dir)
|
||
autoApprovedToast: 'Auto-approved: {tool}({dir})',
|
||
},
|
||
}
|