优化: 清理无意义注释(走查编号前缀/过时历史标注/死代码注释)
This commit is contained in:
+4
-4
@@ -23,9 +23,9 @@ export default {
|
||||
errorTimeout: 'The response timed out. Please try again.',
|
||||
errorNetwork: 'Network connection failed. Please check your network.',
|
||||
// CR-30-2 / F-260616-07(d) / decision a1: stream pre-failure retry bubble copy
|
||||
// UX-260616-01: clarify this is an AI response (network/rate-limit) retry, not a tool failure (shown in card)
|
||||
// clarify this is an AI response (network/rate-limit) retry, not a tool failure (shown in card)
|
||||
aiStreamRetry: '⚠ AI response failed, retrying ({attempt}/{max})…',
|
||||
// UX-260616-01: Fatal errors (4xx/auth) are not retryable — prompt user to check settings instead
|
||||
// Fatal errors (4xx/auth) are not retryable — prompt user to check settings instead
|
||||
notRetryable: 'This error cannot be resolved by retrying. Please check the configuration.',
|
||||
streamInterruptedAfterTool: '⚠ The tool finished, but the following reply was interrupted (no data stream for a long time). You can click Continue to retry.',
|
||||
streamInterrupted: '⚠ The response was interrupted (no data stream for a long time). This may be due to a network disconnection or a backend error. Please try again.',
|
||||
@@ -38,7 +38,7 @@ export default {
|
||||
approvalNotDelivered: 'Approval operation failed to reach the backend: {error}',
|
||||
queuedSendFailed: 'Failed to send queued message: {error}',
|
||||
approvalTimeout: '⚰ Approval timed out, automatically rejected: {toolName}',
|
||||
// UX-260617-08: conversation load/switch failure feedback (network jitter/IPC down → empty list/blank, was silent)
|
||||
// conversation load/switch failure feedback (network jitter/IPC down → empty list/blank, was silent)
|
||||
loadConvFail: 'Failed to load conversations. Please check your network or backend connection.',
|
||||
switchConvFail: 'Failed to switch conversation. Please retry.',
|
||||
// M30: rename/archive/pin IPC failure feedback (was no try/catch, exceptions leaked to unhandledrejection)
|
||||
@@ -52,7 +52,7 @@ export default {
|
||||
unarchiveAction: 'unarchive',
|
||||
pinAction: 'pin',
|
||||
unpinAction: 'unpin',
|
||||
// AE-2025-07: Agentic loop progress bar copy
|
||||
// Agentic loop progress bar copy
|
||||
// Note: max round / completed tool count are not surfaced by backend this round;
|
||||
// template conditionally omits them. Add *WithMax keys once backend exposes them.
|
||||
agenticProgress: '🔄 Round {round} · ⏳{pending} pending',
|
||||
|
||||
@@ -71,7 +71,7 @@ export default {
|
||||
selectModel: 'Select model',
|
||||
noModels: 'No models available. Please fetch in settings.',
|
||||
|
||||
// ── Empty states (UX-2025-20: example prompt cards + no-provider guidance) ──
|
||||
// ── Empty states 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',
|
||||
@@ -84,7 +84,7 @@ export default {
|
||||
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) ──
|
||||
// ── Provider switch feedback ──
|
||||
providerSwitched: 'Switched to {model}',
|
||||
providerSwitchHint: 'Current model: {model}',
|
||||
|
||||
@@ -107,7 +107,7 @@ export default {
|
||||
skillNoMatch: 'No matching skill',
|
||||
skillNotLoaded: 'No local skills loaded',
|
||||
|
||||
// ── UX-10: @ entity mention (@ opens popover, select inserts [Type:Name] token) ──
|
||||
// ── @ entity mention (@ opens popover, select inserts [Type:Name] token) ──
|
||||
mentionHint: "{'@'} to mention project/task",
|
||||
mentionGroupProject: 'Projects',
|
||||
mentionGroupTask: 'Tasks',
|
||||
@@ -136,13 +136,13 @@ export default {
|
||||
|
||||
// ── Confirm dialog ──
|
||||
confirmDeleteConversation: 'Delete chat "{title}"? This cannot be undone.',
|
||||
// UX-260617-24: stronger warning when deleting the currently active conversation
|
||||
// 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) ──
|
||||
// ── Message copy ──
|
||||
copyMsg: 'Copy message',
|
||||
copied: 'Copied',
|
||||
copyFailed: 'Copy failed',
|
||||
@@ -151,14 +151,14 @@ export default {
|
||||
copiedAsImage: 'Copied as image',
|
||||
copyAsImageFailed: 'Failed to copy as image',
|
||||
|
||||
// ── Message actions bar (UX-02) ──
|
||||
// ── Message actions bar ──
|
||||
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 ──
|
||||
// ── edit last user message and regenerate ──
|
||||
editMessage: 'Edit',
|
||||
editMessageFailed: 'Edit failed: {msg}',
|
||||
editNotLastUser: 'Only the last user message can be edited',
|
||||
@@ -168,7 +168,7 @@ export default {
|
||||
retry: 'Retry',
|
||||
goToSettingsAction: 'Open settings',
|
||||
|
||||
// ── F-260616-03: max iterations reached pause action card ──
|
||||
// ── max iterations reached pause action card ──
|
||||
maxRoundsReached: 'Max rounds reached. Continue?',
|
||||
maxRoundsHint: 'Continue runs another full round; stop ends with current results',
|
||||
continueLoop: 'Continue',
|
||||
|
||||
+17
-17
@@ -6,11 +6,11 @@ export default {
|
||||
approveAll: 'Approve All ({n})',
|
||||
rejectAll: 'Reject All',
|
||||
rejectedHint: 'User rejected this action',
|
||||
// B-260616-12: tool execution slow hint (frontend fallback, no backend cancel IPC)
|
||||
// tool execution slow hint (frontend fallback, no backend cancel IPC)
|
||||
executionSlow: 'Tool "{name}" is taking longer than expected, please wait…',
|
||||
// BUG-260624-02: approval pending duration hint (>2min orange, >5min red)
|
||||
// approval pending duration hint (>2min orange, >5min red)
|
||||
waitTime: '⏱ Waiting {time}',
|
||||
// UX-260616-01: tool execution failure marker (AR-6 keeps status=completed, red to distinguish from success)
|
||||
// tool execution failure marker (AR-6 keeps status=completed, red to distinguish from success)
|
||||
executionFailed: 'Failed',
|
||||
executionFailedHint: 'Tool execution failed, see details below',
|
||||
// Singular expand/collapse (ToolCard single-card content, command output toggle; expandAll/collapseAll are for ToolCardList global multi-group)
|
||||
@@ -31,7 +31,7 @@ export default {
|
||||
dirFallback: 'List Directory',
|
||||
writePrefix: 'Write',
|
||||
writeFallback: 'Write File',
|
||||
// grep cross-file content search header (F-260621)
|
||||
// grep cross-file content search header
|
||||
grepPrefix: 'Search',
|
||||
grepFallback: 'Content Search',
|
||||
// CRUD tool display names (delete/restore/purge/update_project resolve project name by id; fallback when no id or unresolved)
|
||||
@@ -63,26 +63,26 @@ export default {
|
||||
purged: 'Purged',
|
||||
purgeIneffective: 'Purge ineffective',
|
||||
workflowHint: 'Run it on the workflow page',
|
||||
// UX-260618-05: run_workflow tool_result shows execution_id (workflowHint misleading — workflow already triggered; old key kept for other refs)
|
||||
// run_workflow tool_result shows execution_id (workflowHint misleading — workflow already triggered; old key kept for other refs)
|
||||
workflowTriggered: 'Task {id} triggered workflow (advancing to {status}, execution {exec})',
|
||||
workflowTriggeredShort: 'Execution {exec}',
|
||||
|
||||
// UX-260616-04: formatToolResult covers all tools with human-readable summaries (missing keys)
|
||||
// formatToolResult covers all tools with human-readable summaries (missing keys)
|
||||
updatedTaskField: 'Task「{title}」 updated field {field}',
|
||||
advancedTask: 'Task「{title}」 advanced to {status}',
|
||||
// UX-260618-09: advance_task return-round accumulation (shown only when >0); UX-260618-14: {title} = task name (TaskRecord), fallback id
|
||||
// advance_task return-round accumulation (shown only when >0); {title} = task name (TaskRecord), fallback id
|
||||
advancedTaskWithRounds: 'Task「{title}」 advanced to {status} (returned {n} times)',
|
||||
commandOk: 'Command succeeded ({ms} ms)',
|
||||
commandFailed: 'Command failed (exit code {code})',
|
||||
commandOutputLines: '{n} lines of output',
|
||||
patchedFile: 'Patched {path} ({diff} bytes)',
|
||||
// UX-260618-06: patch_file multi-match hint + size_diff unit
|
||||
// patch_file multi-match hint + size_diff unit
|
||||
patchedMatches: 'matched {n} places',
|
||||
bytesUnit: 'bytes',
|
||||
patchedNoChange: '{path} no change',
|
||||
appendedTo: 'Appended {bytes} to {path}',
|
||||
renamedFile: 'Renamed {from} → {to}',
|
||||
// UX-260618-12: rename_file bytes/cross-volume + write_file overwrite/encoding hints
|
||||
// rename_file bytes/cross-volume + write_file overwrite/encoding hints
|
||||
renamedWithBytes: 'Renamed {from} → {to} ({bytes})',
|
||||
renamedCrossVolume: 'Moved {from} → {to} (cross-volume, {bytes})',
|
||||
writeOverwrite: 'overwrote {old} → {neww}',
|
||||
@@ -113,7 +113,7 @@ export default {
|
||||
fetchUrlFallback: 'Fetch URL',
|
||||
installObscura: 'Install obscura via AI',
|
||||
obscuraInstallPrompt: 'Please install obscura (a Rust headless browser, used by fetch_url render=true for JS rendering). Try `cargo install obscura` first; if cargo is unavailable, download the prebuilt binary for this platform from the GitHub releases (github.com/h4ckf0r0day/obscura) and place it on PATH. After installing, verify with `obscura --version` and tell me I can retry the web fetch.',
|
||||
// grep cross-file content search results (F-260621): per output_mode phrasing
|
||||
// grep cross-file content search results per output_mode phrasing
|
||||
grepHitsN: '{n} hits',
|
||||
grepFilesN: '{n} files',
|
||||
grepCountSummary: '{n} hits / {files} files',
|
||||
@@ -121,10 +121,10 @@ export default {
|
||||
grepTruncated: 'Results truncated (max reached), narrow pattern or add glob',
|
||||
boundDir: 'Bound directory "{path}" stack: {stack}',
|
||||
deleteFilePermanent: 'Permanently deleted {path}',
|
||||
// UX-260618-07: soft-delete adds backup_path (trash filename so user knows where to recover from)
|
||||
// soft-delete adds backup_path (trash filename so user knows where to recover from)
|
||||
deleteFileSoft: 'Soft-deleted {path} (backed up, recover from: {backup_path})',
|
||||
fileInfoSize: '{path} {size}',
|
||||
// UX-260618-12: file_info modified time (epoch_ms → client toLocaleString)
|
||||
// file_info modified time (epoch_ms → client toLocaleString)
|
||||
fileInfoModified: ' · modified {time}',
|
||||
fileInfoLines: ' · {n} lines',
|
||||
fileInfoBinary: ' · binary',
|
||||
@@ -133,11 +133,11 @@ export default {
|
||||
|
||||
projectLabel: '"{name}"',
|
||||
projectIdNotFound: '(project not found, id={id})',
|
||||
// UX-260618-14: advance_task/run_workflow task_id → task title (store.tasks lookup; fallback id)
|
||||
// advance_task/run_workflow task_id → task title (store.tasks lookup; fallback id)
|
||||
taskLabel: '"{name}"',
|
||||
taskIdNotFound: '(task not in current list, id={id})',
|
||||
|
||||
// AE-2025-05: High-risk approval second confirm (ask once more before approve; misclick cancellable)
|
||||
// High-risk approval second confirm (ask once more before approve; misclick cancellable)
|
||||
confirmHighDelete: 'Permanently delete? This action cannot be undone',
|
||||
confirmHighExec: 'Run this command?',
|
||||
confirmHighGeneric: 'Proceed with this high-risk action?',
|
||||
@@ -145,7 +145,7 @@ export default {
|
||||
// Tool result detail format (plain-text result + approval placeholder appends arg summary)
|
||||
resultDetail: '{raw} ({detail})',
|
||||
|
||||
// UX-260617-17: ToolCardList group header (shown when 2+ same-name tools; was hardcoded zh)
|
||||
// ToolCardList group header (shown when 2+ same-name tools; was hardcoded zh)
|
||||
toolGroup: {
|
||||
readFile: 'Read File',
|
||||
writeFile: 'Write File',
|
||||
@@ -165,10 +165,10 @@ export default {
|
||||
httpRequest: 'HTTP Request',
|
||||
},
|
||||
|
||||
// UX-260617-14: approval loading fallback timeout notice (no backend ack, card still pending_approval → reset + prompt)
|
||||
// approval loading fallback timeout notice (no backend ack, card still pending_approval → reset + prompt)
|
||||
approveLoadingTimeout: 'Approval response timed out, please retry or check the backend',
|
||||
|
||||
// UX-260617-18: tool failure detection copy (regex narrowed to line-anchored err_msg prefix)
|
||||
// tool failure detection copy (regex narrowed to line-anchored err_msg prefix)
|
||||
// (reuse executionFailed/executionFailedHint, no new key)
|
||||
|
||||
// http_request High-risk confirm: external network call, data may leak via URL/body
|
||||
|
||||
@@ -49,7 +49,7 @@ export default {
|
||||
decided: {
|
||||
human: 'Human',
|
||||
auto: 'Auto',
|
||||
// SA-1: cover all backend decided_by sources (different decision paths, more precise than generic 'auto')
|
||||
// cover all backend decided_by sources (different decision paths, more precise than generic 'auto')
|
||||
auto_trust: 'Auto (trusted)',
|
||||
auto_dedup: 'Auto (deduped)',
|
||||
cache_hit: 'Auto (cached)',
|
||||
@@ -66,7 +66,7 @@ export default {
|
||||
convTruncated: 'Content truncated (expand to view full conversation)',
|
||||
convSelectHint: '← Select a conversation to view full interaction log',
|
||||
convReasoning: 'Reasoning (thinking)',
|
||||
// SA-2: conversation role labels (previously hardcoded Chinese, now i18n)
|
||||
// conversation role labels (previously hardcoded Chinese, now i18n)
|
||||
convRoleUser: '🧑 User',
|
||||
convRoleAssistant: '🤖 Assistant',
|
||||
convRoleTool: '🔧 Tool',
|
||||
|
||||
@@ -230,7 +230,7 @@ export default {
|
||||
confirmDiscardUnsaved: 'The form has unsaved changes. Discard them?',
|
||||
toastSaved: 'Saved',
|
||||
toastSaveFail: 'Save failed: {msg}',
|
||||
// P0-2: save-failure classified guidance (persistent banner, not raw Err text)
|
||||
// save-failure classified guidance (persistent banner, not raw Err text)
|
||||
saveErrKeyringTitle: 'Failed to write key to the OS keychain',
|
||||
saveErrKeyringDetail: 'Original config left unchanged. Backend reason: {msg}\nSuggestion: check the OS keychain/credential store permissions (Windows Credential Manager / macOS Keychain / Linux secret-service daemon), then click "Save" again to retry.',
|
||||
saveErrGenericTitle: 'Failed to save provider config',
|
||||
|
||||
@@ -95,7 +95,7 @@ export default {
|
||||
desc: 'Description',
|
||||
branch: 'Branch',
|
||||
priority: 'Priority',
|
||||
// F-260619-01: related idea (1:1, optional)
|
||||
// related idea (1:1, optional)
|
||||
idea: 'Related Idea',
|
||||
ideaPlaceholder: 'None (optional)',
|
||||
titlePlaceholder: 'Enter task title...',
|
||||
|
||||
Reference in New Issue
Block a user