Files
DevFlow/src/i18n/en/aiChat.ts
T

275 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export default {
aiChat: {
// ── Multi-Agent parallel execution ──
conflictsPending: '{n} conflicts to resolve',
acceptA: 'Accept A',
acceptB: 'Accept B',
mergeBoth: 'Merge Both',
manualResolve: 'Manual',
// ── 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',
// ── Approval overlay (global top-right) ──
approvalWaitingTitle: 'Approval required',
approvalWaitingDesc: 'Click to review and handle',
// ── System-level approval popup (standalone window, visible when app unfocused) ──
popupTitle: 'Approval pending',
popupTagPath: 'Path auth',
popupTagRisk: 'Risk action',
popupOpenPanel: 'Open approval panel',
// 空态文案:正常空态会被 maybeAutoClose 即时关窗,此 hint 仅 close 失败时兜底
popupEmptyHint: 'Closing…',
// ── 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 projects 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 windows 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) ──
pickImage: 'Pick image',
pickImageTitle: 'Pick image (or paste / drag-drop)',
imageFilter: 'Image files',
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',
// Copy bubble as image (html2canvas → clipboard; falls back to download)
copyAsImage: 'Copy as image',
copiedAsImage: 'Copied as image',
copyAsImageFailed: 'Failed to copy as image',
// ── Message actions bar (UX-02) ──
regenerate: 'Regenerate',
regenerateFailed: 'Regenerate failed: {msg}',
regenerateUnavailable: 'No reply to regenerate',
// fetch_url "Install obscura via AI" button triggers sendMessage; failure toast (mirrors editMessageFailed)
sendFailed: 'Send failed: {msg}',
// ── 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}',
// M5:path deny second confirmation (deny is irreversible — tool returns Err, loop continues without retry; asymmetry with approve, prevents mis-clicks)
dirAuthDenyConfirm: 'Deny authorization? The tool will fail immediately and will not be retried this round.',
// ── 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',
// ── TopBar bottom context badges (tooltip + L3 full context popover labels) ──
viewGoals: 'View goals',
viewHistory: 'View history messages',
viewSummary: 'View context summary',
viewContext: 'View AI context',
contextSystemPrompt: 'System Prompt',
contextEnvironment: 'Environment',
contextCompressedSummary: 'Compressed Summary',
contextEnrichment: 'Enriched Context',
contextCountUnit: 'items',
// ── EnrichmentPanel ──
enrichmentDismiss: 'Unlink',
// ── AE-2025-04 Session Trust ──
// Auto-approval toast (same-session already approved same-kind op: same tool + same dir)
autoApprovedToast: 'Auto-approved: {tool}({dir})',
// ── CIStatus.vue (commit CI checks status card) ──
ciTitle: 'CI Checks',
ciNFailed: '{n} failed',
ciNPending: '{n} pending',
ciNPassed: '{n} passed',
// ── MessageList token detail popover (per-fee breakdown: input/cache hit/output/reasoning) ──
tokenDetailTitle: 'Token usage details',
estimated: 'estimated',
tokenInLabel: 'Input (cache miss, full price)',
tokenCacheLabel: 'Cache hit (low price)',
tokenOutLabel: 'Output',
tokenReasonLabel: 'Reasoning',
tokenCacheRateLabel: 'Cache hit rate',
tokenModelLabel: 'Model',
tokenUsageNoteLabel: 'Usage note',
tokenUsageNote: 'prompt_tokens missing, shown as estimated',
// ── TopBar goal/project context labels ──
goalsCount: 'Goals ({n})',
none: 'None',
projectLabel: "{'@'}Projects",
},
}