export default { aiTool: { running: 'Running…', approve: 'Approve', reject: 'Reject', 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) executionSlow: 'Tool "{name}" is taking longer than expected, please wait…', // BUG-260624-02: 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) 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) expand: 'Expand', collapse: 'Collapse', expandAll: 'Expand all', collapseAll: 'Collapse all', written: 'written', items: 'items', lines: 'lines', // UX-260618-08/11: truncation hints (read_file paged truncation / list_directory 1000-entry cap) linesTruncated: '{shown}/{total} lines, truncated', dirTruncated: 'Truncated, first {n} items only', readPrefix: 'Read', readFallback: 'Read File', dirPrefix: 'Dir', dirFallback: 'List Directory', writePrefix: 'Write', writeFallback: 'Write File', // grep cross-file content search header (F-260621) 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) deletePrefix: 'Delete Project', deleteFallback: 'Delete Project', restorePrefix: 'Restore Project', restoreFallback: 'Restore Project from Trash', purgePrefix: 'Purge Project', purgeFallback: 'Purge Project', updatePrefix: 'Update Project', updateFallback: 'Update Project', createTask: 'Create Task', createProject: 'Create Project', taskCount: '{n} tasks', projectCount: '{n} projects', ideaCount: '{n} ideas', // UX-260618-10/12: list_trash collapsed header count + paged has_more hint (backend returns {items,total,has_more} object) trashCount: '{n} in trash', listHasMore: '({n} shown, more available)', createdWithName: 'Created: {name}', created: 'Created', updatedField: 'Updated {field}', updated: 'Updated', deleted: 'Deleted', deleteIneffective: 'Delete ineffective', restored: 'Restored', restoreIneffective: 'Restore ineffective (not in trash)', 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) 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) 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 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 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 renamedWithBytes: 'Renamed {from} → {to} ({bytes})', renamedCrossVolume: 'Moved {from} → {to} (cross-volume, {bytes})', writeOverwrite: 'overwrote {old} → {neww}', encodingLabel: 'encoding: {enc}', // http_request result summary (method + status + elapsed; body in expanded view) httpOk: '{method} {status} OK ({ms} ms)', httpFailed: '{method} {status} failed', httpTruncated: 'Response truncated ({bytes}), see details', httpRequestFallback: 'HTTP Request', foundN: 'Found {n}', // grep cross-file content search results (F-260621): per output_mode phrasing grepHitsN: '{n} hits', grepFilesN: '{n} files', grepCountSummary: '{n} hits / {files} files', grepCountLines: '{n} hits', 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) deleteFileSoft: 'Soft-deleted {path} (backed up, recover from: {backup_path})', fileInfoSize: '{path} {size}', // UX-260618-12: file_info modified time (epoch_ms → client toLocaleString) fileInfoModified: ' · modified {time}', fileInfoLines: ' · {n} lines', fileInfoBinary: ' · binary', fileInfoDir: ' · directory', fileInfoMissing: '{path} does not exist', projectLabel: '"{name}"', projectIdNotFound: '(project not found, id={id})', // UX-260618-14: 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) confirmHighDelete: 'Permanently delete? This action cannot be undone', confirmHighExec: 'Run this command?', confirmHighGeneric: 'Proceed with this high-risk action?', // 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) toolGroup: { readFile: 'Read File', writeFile: 'Write File', listDirectory: 'List Directory', grep: 'Content Search', createTask: 'Create Task', createProject: 'Create Project', createIdea: 'Create Idea', listTasks: 'List Tasks', listProjects: 'List Projects', listIdeas: 'List Ideas', deleteProject: 'Delete Project', restoreProject: 'Restore Project', purgeProject: 'Purge Project', updateProject: 'Update Project', runWorkflow: 'Run Workflow', httpRequest: 'HTTP Request', }, // UX-260617-14: 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) // (reuse executionFailed/executionFailedHint, no new key) // http_request High-risk confirm: external network call, data may leak via URL/body confirmHighHttp: 'Send this HTTP request to an external server?', // Approval argument key labels argLabel: { id: 'ID', projectId: 'Project ID', name: 'Name', title: 'Title', description: 'Description', field: 'Field', value: 'Value', path: 'Path', priority: 'Priority', tags: 'Tags', source: 'Source', method: 'Method', url: 'URL', body: 'Body', headers: 'Headers', timeout_secs: 'Timeout (s)', parse: 'Parse', }, }, }