/** `conversation` namespace dictionaries. */

/** Dictionary namespace owned by this plugin. */
export const NS = 'conversation'

// The claimed /plan hint and the plan-mode textarea placeholder share one
// string: both describe the same next action.
const PLAN_NEXT_ACTION_ZH = '描述你的任务以生成计划'
const PLAN_NEXT_ACTION_EN = 'describe your task to generate plan'

/** Simplified Chinese dictionary (the key-set source of truth). */
export const zh = {
  'view.chat': '对话',
  'hint.plan': PLAN_NEXT_ACTION_ZH,
  'hint.goal': '输入目标，智能体将持续执行',
  'hint.goal.active': '当前目标进行中。可输入 edit 修改 / pause 暂停 / resume 继续 / clear 清除',
  'placeholder.plan': PLAN_NEXT_ACTION_ZH,
  'placeholder.default': '给智能体发消息',
  'placeholder.unavailable': '会话不可用',
  'placeholder.parentOffline': '父会话已离线，无法继续发送；仍可停止当前运行',
  'placeholder.hero': '描述你想要构建的内容',
  'placeholder.workspace': '选择一个工作区开始',
  'input.commands': '命令',
  'input.stop': '停止生成',
  'input.send': '发送消息',
  'placeholder.steerQueue': 'Cmd/Ctrl+Enter 插话发送全部排队消息',
  'input.accessMode': '访问模式，当前：{name}',
  'image.dropTitle': '图片拖动到此处即可添加',
  'image.dropDesc': '最多 {count} 张，每张 {size}',
  'image.dropBlocked': '当前无法添加图片',
  'image.pending': '待发送图片',
  'image.openOriginal': '查看原图',
  'image.openOriginalLabel': '{label}，点击查看原图',
  'image.remove': '移除图片 {name}',
  'image.scrollLeft': '向左滚动图片',
  'image.scrollRight': '向右滚动图片',
  'image.original': '原图',
  'image.label': '图片',
  'image.loadFailed': '图片加载失败，点击重试',
  'image.loading': '图片加载中…',
  'image.preview': '原图预览',
  'image.closePreview': '关闭原图预览',
  'image.serviceUnavailable': '图片读取服务不可用',
  'image.unsupportedType': '仅支持 PNG、JPG、WebP、GIF 格式的图片',
  'image.tooMany': '一条消息最多添加 {count} 张图片',
  'image.fileTooLarge': '单张图片不能超过 {size}',
  'image.totalTooLarge': '图片总大小超过 {size}，请移除部分图片',
  'image.tooManyPixels': '图片分辨率过大，请压缩后重试',
  'image.modelUnsupported': '当前模型不支持图片，请切换支持图片的模型',
  'image.subagentUnsupported': '子智能体会话暂不支持图片',
  'image.sendFailed': '图片发送失败（{reason}），请重新添加图片后再试',
  'context.aria': '上下文已用 {percent}',
  'context.used': '上下文已用',
  'context.system': '系统提示词',
  'context.tools': '工具',
  'context.messages': '对话消息',
  'stats.counts': '{turns} 轮 · {steps} 步',
  'stats.llm': 'LLM {duration}',
  'stats.toolCall': '工具调用 {duration}',
  'stats.ttftAverage': '首 token 平均 {duration}',
  'stats.tokensPerSecond': '{throughput} tok/s',
  'stats.cacheHit': '缓存命中 {percent}%',
  'stats.tokens': '输入 {input} tok · 输出 {output} tok',
  'settings.enter.title': '繁忙时 Enter 键行为',
  'settings.enter.description': '仅在智能体运行时生效；Cmd/Ctrl+Enter 使用另一行为',
  'settings.enter.queue': '排队发送',
  'settings.enter.steer': '插话发送',
  'access.confirm.title': '确认启用 Full access？',
  'access.confirm.description': '启用 Full access 后，agent 将减少确认步骤，并且可以直接执行更多操作，包括敏感操作、文件修改或外部命令。仅建议在你信任当前任务时使用。',
  'access.confirm.acknowledge': '我已了解风险，并愿意继续',
  'access.confirm.cancel': '取消',
  'access.confirm.enable': '启用 Full access',
  'hero.headline': '探索未至之境',
  'hero.preview': '预览版',
  'hero.chooseWorkspace': '选择工作区',
  'session.hierarchy': '会话层级',
  'details.title': '详情',
  'details.close': '关闭详情',
  'details.empty': '点击消息流中的工具行查看详情',
  'details.notInWindow': '该调用不在当前窗口内',
  'details.input': '输入',
  'details.output': '输出',
  'details.running': '运行中…',
  'todo.title': '任务',
  'todo.progress.done': '{done} 已完成',
  'todo.progress.active': '{active} 进行中',
  'todo.progress.pending': '{pending} 待处理',
  'todo.rowTitle': '更新任务清单',
  'todo.completed': '{done}/{total} 已完成',
  'chat.loadingHistory': '载入历史…',
  'chat.loadError': '历史加载失败：{message}（{code}）',
  'chat.loadOlder': '加载更早',
  'chat.toBottom': '回到底部',
  'message.extraBlock': '附加内容块',
  'message.contextInjection': '上下文注入',
  'message.contextRecall': '跨会话召回',
  'message.context.instructions.loaded': '已载入',
  'message.context.instructions.added': '已新增',
  'message.context.instructions.updated': '已更新',
  'message.context.instructions.removed': '已移除',
  'message.context.catalog.replaced': '替换目录',
  'message.context.catalog.more': '…还有 {count} 条',
  'message.context.snapshot.supersedes': '取代先前的快照',
  'message.context.relay.from': '来自会话 {session}',
  'message.context.recall.counts': '保留 {retained} 条 · 省略 {omitted} 条',
  'message.context.recall.truncated': '已截断',
  'message.compaction': '上下文已压缩',
  'message.compaction.running': '正在压缩…',
  'message.compaction.completed': '已压缩 {items} 条历史记录（约 {tokens} tokens）',
  'message.compaction.expand': '点击查看压缩摘要',
  'message.compaction.unavailable': '压缩摘要不可用',
  'message.unknownSurface': '未知 surface 事件：{type}',
  'message.unknownBlock': '未知内容块',
  'message.stopped': '已停止',
  'message.branch': '在新对话中分支',
  'message.branchUnavailable': '仅可从已完成轮次的最后一条消息分支',
  'message.retry.active': '正在重试模型请求',
  'message.retry.cancelled': '模型请求重试已取消',
  'message.retry.started': '已重试模型请求',
  'message.retry.scheduled': '等待重试模型请求',
  'message.retry.status': '{label}（{retry}/{maximum}） · {seconds}s',
  'message.retry.delay': '重试延迟：',
  'message.retry.failure': '失败原因：',
  'message.turnError': '本轮运行失败',
  'message.maxTokens': '已达到输出 token 上限',
  'message.maxTokens.hint': '回答被截断，已有输出保留在对话中。发送“继续”可让模型接着输出。',
  'message.ranFor': '用时 {duration}',
  'message.ttft': '首 token {seconds}秒',
  'message.tokensPerSecond': '{tps} tok/s',
  'duration.seconds': '{seconds}秒',
  'duration.minutes': '{minutes}分{seconds}秒',
  'command.running': '执行中…',
  'command.failed': '命令失败',
  'command.done': '已完成',
  'command.title': '命令',
  'approval.waiting': '等待审批',
  'approval.detail.aria': '审批详情',
  'approval.escalation': '工具 {toolName} 请求越权执行',
  'approval.reject': '拒绝',
  'approval.allowOnce': '允许一次',
  'ask.rowTitle': '提问',
  'ask.waiting': '等待回答',
  'ask.cancelled': '已取消',
  'ask.interrupted': '已中断',
  'ask.answered': '{answered}/{total} 已回答',
  'bash.running': '运行中',
  'bash.failed': '失败',
  'bash.stopped': '已停止',
  'row.running': '运行中',
  'row.failed': '失败',
  'row.stopped': '已停止',
  'queue.count': '{n} 条排队消息',
  'queue.edit': '编辑排队消息',
  'queue.edit.unsupported': '包含非文本内容，暂不支持编辑',
  'queue.save': '保存排队消息',
  'queue.cancelEdit': '取消编辑',
  'queue.remove': '删除排队消息',
  'queue.steer': '插话发送',
  'queue.steer.unavailable': '仅运行中可插话发送',
  'queue.editFailed': '编辑失败：这条消息可能已经开始发送。',
  'queue.removeFailed': '删除失败：这条消息可能已经开始发送。',
  'queue.steerFailed': '插话发送失败，请重试。',
  'terminal.signal': '信号 {signal}',
  'terminal.exitCode': '退出码 {code}',
  'terminal.running': '运行中',
  'terminal.failed': '失败',
  'terminal.done': '已完成',
  'terminal.noOutput': '无输出',
  'terminal.collapseAria': '收起输出',
  'terminal.expandAria': '展开其余 {n} 行输出',
  'terminal.expandRest': '… 其余 {n} 行',
  'json.truncated': '… 已截断，共 {total} 字符',
  'clock.md': '{m}月{d}日',
  'clock.ymd': '{y}年{m}月{d}日',
} satisfies Record<string, string>

/** The conversation namespace key union. */
export type ConversationKey = keyof typeof zh

/** English dictionary, checked complete against the zh key set. */
export const en = {
  'view.chat': 'Chat',
  'hint.plan': PLAN_NEXT_ACTION_EN,
  'hint.goal': 'describe the objective for a long-running task',
  'hint.goal.active': 'goal active — edit / pause / resume / clear',
  'placeholder.plan': PLAN_NEXT_ACTION_EN,
  'placeholder.default': 'Message the agent',
  'placeholder.unavailable': 'Session unavailable',
  'placeholder.parentOffline': 'Parent session offline; sending is unavailable but you can still stop the run',
  'placeholder.hero': 'Describe what you want to build',
  'placeholder.workspace': 'Choose a workspace to start',
  'input.commands': 'Commands',
  'input.stop': 'Stop generating',
  'input.send': 'Send message',
  'placeholder.steerQueue': 'Cmd/Ctrl+Enter steers all queued messages',
  'input.accessMode': 'Access mode, current: {name}',
  'image.dropTitle': 'Drag images here to add them',
  'image.dropDesc': 'Up to {count} images, {size} each',
  'image.dropBlocked': 'Images cannot be added right now',
  'image.pending': 'Pending images',
  'image.openOriginal': 'View original',
  'image.openOriginalLabel': '{label}, click to view original',
  'image.remove': 'Remove image {name}',
  'image.scrollLeft': 'Scroll images left',
  'image.scrollRight': 'Scroll images right',
  'image.original': 'Original image',
  'image.label': 'Image',
  'image.loadFailed': 'Image failed to load; click to retry',
  'image.loading': 'Loading image…',
  'image.preview': 'Original image preview',
  'image.closePreview': 'Close original image preview',
  'image.serviceUnavailable': 'Image loading service unavailable',
  'image.unsupportedType': 'Only PNG, JPG, WebP, and GIF images are supported',
  'image.tooMany': 'A message can include up to {count} images',
  'image.fileTooLarge': 'Each image must be smaller than {size}',
  'image.totalTooLarge': 'Images exceed {size} in total; remove some and try again',
  'image.tooManyPixels': 'Image resolution is too high; compress it and try again',
  'image.modelUnsupported': 'The current model does not support images; switch to a model that does',
  'image.subagentUnsupported': 'Subagent sessions do not support images yet',
  'image.sendFailed': 'Sending images failed ({reason}); re-add them and try again',
  'context.aria': '{percent} of context used',
  'context.used': 'of context used',
  'context.system': 'System prompt',
  'context.tools': 'Tools',
  'context.messages': 'Messages',
  'stats.counts': '{turns} turns · {steps} steps',
  'stats.llm': 'LLM {duration}',
  'stats.toolCall': 'Tool call {duration}',
  'stats.ttftAverage': 'TTFT avg {duration}',
  'stats.tokensPerSecond': '{throughput} tok/s',
  'stats.cacheHit': 'Cache hit {percent}%',
  'stats.tokens': 'Input {input} tok · Output {output} tok',
  'settings.enter.title': 'Enter behavior while busy',
  'settings.enter.description': 'Busy only; Cmd/Ctrl+Enter uses the other behavior',
  'settings.enter.queue': 'Queue',
  'settings.enter.steer': 'Steer',
  'access.confirm.title': 'Enable Full access?',
  'access.confirm.description': 'Full access reduces confirmation steps and lets the agent perform more actions directly, including sensitive operations, file changes, or external commands. Only use it when you trust the current task.',
  'access.confirm.acknowledge': 'I understand the risks and want to continue',
  'access.confirm.cancel': 'Cancel',
  'access.confirm.enable': 'Enable Full access',
  'hero.headline': 'Into the Unknown',
  'hero.preview': 'Preview',
  'hero.chooseWorkspace': 'Choose workspace',
  'session.hierarchy': 'Session hierarchy',
  'details.title': 'Details',
  'details.close': 'Close details',
  'details.empty': 'Click a tool row in the message flow to view its details',
  'details.notInWindow': 'This call is outside the current window',
  'details.input': 'Input',
  'details.output': 'Output',
  'details.running': 'Running…',
  'todo.title': 'To-dos',
  'todo.progress.done': '{done} completed',
  'todo.progress.active': '{active} in progress',
  'todo.progress.pending': '{pending} pending',
  'todo.rowTitle': 'Update to-do list',
  'todo.completed': '{done}/{total} completed',
  'chat.loadingHistory': 'Loading history…',
  'chat.loadError': 'Failed to load history: {message} ({code})',
  'chat.loadOlder': 'Load earlier',
  'chat.toBottom': 'Back to bottom',
  'message.extraBlock': 'Extra content block',
  'message.contextInjection': 'Context injection',
  'message.contextRecall': 'Session recall',
  'message.context.instructions.loaded': 'loaded',
  'message.context.instructions.added': 'added',
  'message.context.instructions.updated': 'updated',
  'message.context.instructions.removed': 'removed',
  'message.context.catalog.replaced': 'Replacement catalog',
  'message.context.catalog.more': '… {count} more',
  'message.context.snapshot.supersedes': 'Supersedes earlier snapshots',
  'message.context.relay.from': 'From session {session}',
  'message.context.recall.counts': '{retained} kept · {omitted} omitted',
  'message.context.recall.truncated': 'truncated',
  'message.compaction': 'Context compacted',
  'message.compaction.running': 'Compacting context…',
  'message.compaction.completed': 'Compacted {items} history items (~{tokens} tokens)',
  'message.compaction.expand': 'View compaction summary',
  'message.compaction.unavailable': 'Compaction summary unavailable',
  'message.unknownSurface': 'Unknown surface event: {type}',
  'message.unknownBlock': 'Unknown content block',
  'message.stopped': 'Stopped',
  'message.branch': 'Branch into a new conversation',
  'message.branchUnavailable': 'Available only on the last message of a completed turn',
  'message.retry.active': 'Retrying model request',
  'message.retry.cancelled': 'Model request retry cancelled',
  'message.retry.started': 'Retried model request',
  'message.retry.scheduled': 'Waiting to retry model request',
  'message.retry.status': '{label} ({retry}/{maximum}) · {seconds}s',
  'message.retry.delay': 'Retry delay: ',
  'message.retry.failure': 'Failure reason: ',
  'message.turnError': 'This turn failed',
  'message.maxTokens': 'Output token limit reached',
  'message.maxTokens.hint': 'The reply was cut off; earlier output is preserved in the conversation. Send "continue" to let the model resume.',
  'message.ranFor': 'Ran for {duration}',
  'message.ttft': 'TTFT {seconds}s',
  'message.tokensPerSecond': '{tps} tok/s',
  'duration.seconds': '{seconds}s',
  'duration.minutes': '{minutes}m {seconds}s',
  'command.running': 'Running…',
  'command.failed': 'Command failed',
  'command.done': 'Completed',
  'command.title': 'Command',
  'approval.waiting': 'Waiting for approval',
  'approval.detail.aria': 'Approval details',
  'approval.escalation': 'Tool {toolName} requests privileged execution',
  'approval.reject': 'Reject',
  'approval.allowOnce': 'Allow once',
  'ask.rowTitle': 'Ask question',
  'ask.waiting': 'waiting',
  'ask.cancelled': 'cancelled',
  'ask.interrupted': 'interrupted',
  'ask.answered': '{answered}/{total} answered',
  'bash.running': 'Running',
  'bash.failed': 'Failed',
  'bash.stopped': 'Stopped',
  'row.running': 'Running',
  'row.failed': 'Failed',
  'row.stopped': 'Stopped',
  'queue.count': '{n} queued messages',
  'queue.edit': 'Edit queued message',
  'queue.edit.unsupported': 'Contains non-text content; editing is not supported yet',
  'queue.save': 'Save queued message',
  'queue.cancelEdit': 'Cancel editing',
  'queue.remove': 'Remove queued message',
  'queue.steer': 'Steer queued message',
  'queue.steer.unavailable': 'Steering is available only while the agent is running',
  'queue.editFailed': 'Edit failed: this message may have already started sending.',
  'queue.removeFailed': 'Removal failed: this message may have already started sending.',
  'queue.steerFailed': 'Steering failed. Try again.',
  'terminal.signal': 'signal {signal}',
  'terminal.exitCode': 'exit code {code}',
  'terminal.running': 'Running',
  'terminal.failed': 'Failed',
  'terminal.done': 'Done',
  'terminal.noOutput': 'No output',
  'terminal.collapseAria': 'Collapse output',
  'terminal.expandAria': 'Expand the remaining {n} output lines',
  'terminal.expandRest': '… {n} more lines',
  'json.truncated': '… truncated, {total} characters total',
  'clock.md': '{m}/{d}',
  'clock.ymd': '{y}-{m}-{d}',
} satisfies Record<ConversationKey, string>
