{
  "_lang": "zh",
  "nav": {
    "core": "核心",
    "configure": "配置",
    "automate": "自动化",
    "observe": "观测",
    "advanced": "高级",
    "config": "系统配置",
    "automation": "自动化",
    "resources": "资源",
    "system": "系统",
    "overview": "概览",
    "canvas": "画布",
    "chat": "对话",
    "sessions": "会话",
    "approvals": "审批",
    "workflows": "工作流",
    "scheduler": "调度器",
    "goals": "目标",
    "agents": "智能体",
    "users": "用户",
    "providers": "供应商",
    "channels": "通道",
    "skills": "技能",
    "hands": "Hands",
    "plugins": "插件",
    "mcp_servers": "MCP",
    "models": "模型",
    "media": "媒体生成",
    "analytics": "分析",
    "memory": "记忆",
    "comms": "通信",
    "runtime": "运行时",
    "audit": "审计",
    "logs": "日志",
    "settings": "设置",
    "network": "网络",
    "a2a": "A2A",
    "telemetry": "遥测",
    "terminal": "终端",
    "user_center": "用户中心",
    "logout": "退出登录",
    "shortcuts": "文档与快捷键",
    "runtime_section": "运行时",
    "observability": "可观测性",
    "admin": "管理",
    "expand_sidebar": "展开侧边栏",
    "collapse_sidebar": "折叠侧边栏",
    "open_menu": "打开导航菜单",
    "skip_to_content": "跳转到内容",
    "more": "更多",
    "mobile_tabs": "底部导航"
  },
  "common": {
    "copied": "已复制",
    "show": "显示",
    "hide": "隐藏",
    "copy_failed": "复制失败",
    "refresh": "刷新",
    "status": "状态",
    "daemon_online": "守护进程在线",
    "infrastructure": "控制台",
    "toggle_theme": "切换主题",
    "change_language": "切换语言",
    "theme": "主题",
    "light": "浅色",
    "dark": "深色",
    "language": "语言",
    "user": "用户",
    "delete": "删除",
    "all": "全部",
    "cancel": "取消",
    "save": "保存",
    "saving": "保存中...",
    "edit": "编辑",
    "confirm": "确认",
    "loading": "加载中...",
    "search": "搜索",
    "back": "返回",
    "retry": "重试",
    "create": "创建",
    "creating": "创建中...",
    "name": "名称",
    "description": "描述",
    "detail": "详情",
    "actions": "操作",
    "clear": "清空",
    "load": "加载",
    "active": "活跃",
    "idle": "空闲",
    "running": "运行中",
    "online": "在线",
    "offline": "离线",
    "setup": "需配置",
    "ok": "正常",
    "config": "配置",
    "interact": "交互",
    "never": "从不",
    "just_now": "刚刚",
    "settings": "设置",
    "unknown": "未知",
    "no_data": "暂无数据",
    "resume": "恢复",
    "close": "关闭",
    "clear_search": "清除搜索",
    "select": "选择",
    "deselect": "取消选择",
    "yes": "是",
    "no": "否",
    "details": "详情",
    "kernel_runtime": "内核运行时",
    "run_now": "立即运行",
    "view_all": "查看全部",
    "created": "已创建",
    "check": "检查",
    "label": "标签",
    "local": "本地",
    "properties": "属性",
    "success": "成功",
    "type": "类型",
    "symbols": {
      "separator": "：",
      "arrow": "→",
      "none": "-",
      "slash": "/",
      "expand": "+",
      "collapse": "−"
    },
    "units": {
      "mb": "MB",
      "ms": "ms",
      "days_short": "天",
      "hours_short": "时",
      "minutes_short": "分",
      "seconds_short": "秒"
    },
    "copy": "复制",
    "add_more": "添加更多…",
    "press_enter_to_add": "按回车添加 “{{value}}”",
    "always": "始终",
    "auto": "自动",
    "clear_filters": "清除筛选",
    "continue": "继续",
    "disabled": "关闭",
    "error": "错误",
    "help": "帮助",
    "next": "下一步",
    "no_results": "无结果",
    "off": "关闭",
    "previous": "上一步",
    "saved": "已保存",
    "sort_by": "排序",
    "sort_created": "创建时间",
    "sort_last_active": "最近活跃",
    "sort_name": "名称",
    "viewAll": "查看全部",
    "on": "开启",
    "expand": "展开",
    "collapse": "收起",
    "show_advanced": "显示高级选项",
    "hide_advanced": "隐藏高级选项",
    "add": "添加",
    "remove": "移除",
    "discard": "放弃更改",
    "more_actions": "更多操作",
    "currency_symbol": "$",
    "unlimited": "无限制",
    "none": "无",
    "metadata": "元数据",
    "size": "大小",
    "path": "路径"
  },
  "status": {
    "running": "运行中",
    "idle": "闲置",
    "error": "错误",
    "active": "活跃",
    "paused": "已暂停",
    "configured": "已配置",
    "nominal": "正常",
    "unknown": "未知"
  },
  "overview": {
    "welcome": "欢迎使用 LibreFang",
    "description": "管理智能体、工作流和多渠道集成。",
    "system_overview": "系统概览",
    "operational": "运行正常",
    "alert": "系统告警",
    "active_agents": "活跃智能体",
    "active": "活跃",
    "total": "总计",
    "active_count": "{{count}} 活跃",
    "workflows": "工作流",
    "design_with_canvas": "使用可视化画布设计",
    "providers": "供应商",
    "configured": "已配置",
    "channels": "通道",
    "adapters_available": "个适配器可用",
    "quick_actions": "快速操作",
    "new_workflow": "新建工作流",
    "deploy_agent": "部署智能体",
    "open_chat": "打开对话",
    "recent_agents": "最近智能体",
    "view_all": "查看全部",
    "system_status": "系统状态",
    "uptime": "运行时间",
    "memory_usage": "内存",
    "version": "版本",
    "telemetry": "服务监控",
    "pro_tip": "小贴士",
    "pro_tip_text": "使用画布设计跨通道的智能体工作流。",
    "no_active_agents": "暂未配置活跃智能体",
    "no_telemetry": "暂无监控数据",
    "active_sessions": "活跃会话",
    "agent_count": "Agent 数量",
    "health_checks": "健康检查",
    "pro_tip_shortcut": "⌘K 搜索 · / 聚焦页面搜索框 · ? 查看全部快捷键 · g + 字母跳页",
    "setup_title": "需要初始化",
    "setup_description": "未检测到配置文件，点击自动检测 LLM 供应商并生成默认配置。",
    "setup_button": "初始化",
    "setup_running": "初始化中...",
    "setup_wizard": "使用向导",
    "last_updated": "最后更新",
    "recent_sessions": "最近会话",
    "agents_online": "个智能体在线",
    "loading_runtime": "正在加载运行时…",
    "no_agents": "暂无智能体",
    "no_token_data": "暂无 token 使用数据",
    "idle": "空闲",
    "error": "异常",
    "refresh": "刷新",
    "refreshing": "刷新中…",
    "new_agent": "新建智能体",
    "updated": "更新",
    "tokens_by_agent": "各智能体 Token 用量 · 全部时间",
    "kpi": {
      "active_agents": "活跃智能体",
      "configured": "已配置",
      "spend": "支出",
      "prior": "前期",
      "no_prior": "无前期支出",
      "tokens_over_7d": "近 7 天 token",
      "peak": "tokens/s 峰值",
      "p95_latency": "P95 延迟",
      "default_model": "默认模型"
    },
    "range": {
      "7d": "近 7 天",
      "30d": "近 30 天",
      "90d": "近 90 天"
    },
    "cost": {
      "title": "费用",
      "vs_prior": "对比上期",
      "no_prior": "无前期支出",
      "provider_all_time": "全部时间提供商占比"
    },
    "alerts": {
      "title": "告警",
      "active": "条活跃",
      "show_less": "收起",
      "all_clear": "一切正常。",
      "systems_ok": "系统运行正常",
      "restore": "恢复",
      "restore_count": "恢复 {{count}} 条已忽略",
      "agent_failed": "{{name}} 已失败",
      "agent_failed_sub": "请到 Agents 页重启",
      "mcp_degraded": "{{count}} 个 MCP 服务器降级",
      "connected": "已连接",
      "approvals_pending": "{{count}} 个待审批",
      "approvals_pending_sub": "前往审批队列处理",
      "degraded": "降级"
    },
    "col": {
      "agent": "智能体",
      "model": "模型",
      "profile": "Profile",
      "mode": "模式",
      "last_active": "最近活跃",
      "task": "任务",
      "msgs": "消息数",
      "started": "开始时间",
      "no_label": "(无标题)"
    },
    "system": {
      "runtime": "运行时",
      "memory": "记忆",
      "scheduler": "调度",
      "mcp": "MCP",
      "network": "网络",
      "audit": "审计",
      "audit_value": "仅追加 · 正常",
      "active": "条活跃",
      "no_schedules": "暂无计划",
      "servers": "个服务器",
      "degraded": "降级",
      "peers": "个节点",
      "no_peers": "暂无节点"
    }
  },
  "agents": {
    "title": "智能体",
    "subtitle": "内核管理的智能体。",
    "model": "模型",
    "provider": "供应商",
    "max_tokens": "最大令牌数",
    "temperature": "温度",
    "last_active": "最后活跃",
    "no_matching": "没有匹配的智能体。",
    "system_prompt": "系统提示词",
    "web_search": "网络搜索",
    "web_search_augmentation": "搜索增强",
    "web_search_augmentation_hint": "自动搜索网络并将结果注入上下文，适用于不支持工具调用的模型",
    "capabilities": "能力",
    "skills": "技能",
    "tags": "标签",
    "mode": "模式",
    "create_agent": "创建智能体",
    "from_form": "可视化",
    "from_template": "从模板",
    "from_toml": "从 TOML",
    "template_name": "模板名称",
    "template_placeholder": "-- 请选择模板 --",
    "template_custom_name": "智能体名称（可选）",
    "template_custom_name_placeholder": "留空则使用模板默认名称",
    "template_custom_name_hint": "覆盖模板的默认名称，可以基于同一模板创建多个智能体。",
    "edit_template_toml": "编辑 TOML 进行高级定制 →",
    "loading_template_toml": "正在加载模板…",
    "loading_template_toml_failed": "加载模板 TOML 失败",
    "agent_created": "智能体已创建",
    "create_failed": "创建智能体失败",
    "manifest_toml": "智能体清单 (TOML)",
    "thinking_toml_hint": "在 TOML 中添加 [thinking] 段可启用扩展思考",
    "schedule_manual": "手动触发",
    "kpi": {
      "sessions": "会话数 · 24h",
      "sessions_idle": "空闲",
      "cost": "费用 · 24h",
      "p95": "P95 延迟",
      "samples": "{{count}} 次采样",
      "tools": "工具"
    },
    "form": {
      "basics": "基本信息",
      "model": "模型配置",
      "resources": "资源与预算",
      "capabilities": "能力授权",
      "discovery": "发现与扩展",
      "name": "智能体名称",
      "description": "描述",
      "description_placeholder": "这个智能体做什么？",
      "version": "版本",
      "author": "作者",
      "provider": "供应商",
      "select_provider": "-- 选择供应商 --",
      "model_id": "模型",
      "select_model": "-- 选择模型 --",
      "system_prompt": "系统提示词",
      "system_prompt_placeholder": "你是一个有用的 AI 智能体。",
      "temperature": "Temperature",
      "max_tokens": "最大 Token 数",
      "tokens_per_hour": "每小时 LLM Token 上限",
      "tool_calls_per_minute": "每分钟工具调用上限",
      "cost_per_hour": "每小时费用上限 ($)",
      "cost_per_day": "每日费用上限 ($)",
      "inherit_default": "沿用默认值",
      "network_hosts": "允许访问的网络主机",
      "network_hosts_hint": "智能体可访问的 host:port (如 api.openai.com:443)。留空=禁用网络。",
      "shell_commands": "允许执行的 Shell 命令",
      "shell_commands_hint": "智能体可执行的命令名。留空=禁用 Shell。",
      "agent_spawn": "允许派生子智能体",
      "ofp_discover": "允许发现 OFP 节点",
      "enabled": "启动时启用",
      "tags": "标签",
      "tags_placeholder": "beta, research",
      "skills": "技能",
      "skills_placeholder": "留空=可用全部技能",
      "skills_hint": "留空=可使用全部已安装技能。",
      "skills_search_placeholder": "搜索已安装的技能…",
      "mcp_servers": "MCP 服务器",
      "mcp_servers_placeholder": "留空=可用全部已连接服务器",
      "mcp_servers_hint": "留空=可使用全部已配置 MCP 服务器。",
      "mcp_servers_search_placeholder": "搜索 MCP 服务器…",
      "live_toml": "TOML 实时预览",
      "preview_toml": "TOML",
      "preview_markdown": "Markdown",
      "switch_to_toml": "切换到 TOML →",
      "toml_parse_error": "TOML 解析错误：{{msg}}",
      "copy": "复制到剪贴板",
      "copied": "已复制",
      "module": "模块",
      "priority": "优先级",
      "priority_low": "低",
      "priority_normal": "普通",
      "priority_high": "高",
      "priority_critical": "紧急",
      "api_key_env": "API Key 环境变量",
      "api_key_env_hint": "保存 API Key 的环境变量名(如 OPENAI_API_KEY)。",
      "base_url": "Base URL 覆盖",
      "cost_per_month": "每月费用上限 ($)",
      "network_bytes_per_hour": "每小时网络流量上限",
      "memory_bytes": "最大内存 (字节)",
      "cpu_time_ms": "最长 CPU 时间 (毫秒)",
      "cap_tools": "工具 ID 白名单",
      "cap_tools_hint": "允许调用的工具 ID。留空=不在此层限制。",
      "cap_tools_search_placeholder": "搜索工具…",
      "memory_read": "内存读取作用域",
      "memory_write": "内存写入作用域",
      "agent_message": "可发消息的智能体",
      "ofp_connect": "OFP 连接模式",
      "scheduling": "调度策略",
      "schedule_mode": "调度模式",
      "schedule_mode_hint": "Reactive=事件触发；Periodic=定时；Proactive=条件监控；Continuous=常驻循环。",
      "schedule_reactive": "Reactive (默认)",
      "schedule_periodic": "Periodic (cron)",
      "schedule_proactive": "Proactive (条件)",
      "schedule_continuous": "Continuous 循环",
      "cron": "Cron 表达式",
      "conditions": "触发条件",
      "check_interval_secs": "检查间隔 (秒)",
      "fallback_models": "备用模型",
      "fallback_models_hint": "主模型失败时按顺序尝试。",
      "add_fallback": "添加备用模型",
      "thinking": "扩展思考",
      "thinking_enabled": "启用智能体级思考配置",
      "budget_tokens": "思考 Token 预算",
      "stream_thinking": "流式思考输出",
      "autonomous": "自主运行守护",
      "autonomous_enabled": "启用自主模式",
      "max_iterations": "单次最大迭代",
      "max_restarts": "最大重启次数",
      "heartbeat_interval_secs": "心跳间隔 (秒)",
      "heartbeat_timeout_secs": "心跳超时 (秒)",
      "heartbeat_keep_recent": "保留近 N 次心跳",
      "heartbeat_channel": "心跳通道",
      "quiet_hours": "静默时段 (cron)",
      "routing": "模型路由",
      "routing_enabled": "按复杂度路由模型",
      "simple_model": "简单",
      "medium_model": "中等",
      "complex_model": "复杂",
      "simple_threshold": "简单阈值 (tokens)",
      "complex_threshold": "复杂阈值 (tokens)",
      "context_injection": "上下文注入",
      "context_injection_hint": "在 LLM 调用前自动注入内容到会话。",
      "add_injection": "添加注入",
      "injection_name": "名称 (用于日志)",
      "injection_content": "注入内容",
      "injection_condition": "条件 (可选,如 agent.tags contains 'chat')",
      "position_system": "System (提示词顶部)",
      "position_before_user": "用户消息之前",
      "position_after_reset": "Reset 提示之后",
      "response_format": "响应格式",
      "response_format_mode": "格式模式",
      "response_text": "Text (默认)",
      "response_json": "JSON 对象",
      "response_json_schema": "JSON Schema",
      "schema_name": "Schema 名称",
      "schema_body": "Schema (JSON)",
      "strict": "严格模式",
      "lifecycle": "生命周期与覆盖",
      "session_mode": "会话模式",
      "session_persistent": "Persistent (复用会话)",
      "session_new": "New (每次新会话)",
      "web_search_aug": "Web 搜索增强",
      "web_search_off": "关闭",
      "web_search_auto": "Auto (模型不支持工具调用时)",
      "web_search_always": "始终启用",
      "exec_policy": "Exec 策略",
      "exec_policy_global": "(使用全局策略)",
      "exec_policy_extras_hint": "TOML 中已存在自定义 [exec_policy] 表,此下拉框无法显示其内容。提交时该表仍会随 manifest 一起下发。选一个简写来覆盖。",
      "response_format_extras_hint": "TOML 中存在 type 未识别的 [response_format] 表,提交时仍会下发。选 json 或 json_schema 进行覆盖。",
      "pinned_model": "固定模型",
      "workspace": "工作区路径",
      "allowed_plugins": "允许的插件",
      "allowed_plugins_placeholder": "留空=可用全部已安装插件",
      "skills_disabled": "禁用全部技能",
      "tools_disabled": "禁用全部工具",
      "inherit_parent_context": "继承父级上下文 (子智能体)",
      "generate_identity_files": "生成工作区身份文件",
      "name_placeholder": "例如 my-agent",
      "module_placeholder": "例如 default",
      "model_id_placeholder": "例如 gpt-4o",
      "temperature_placeholder": "0.7",
      "max_tokens_placeholder": "4096",
      "api_key_env_placeholder": "OPENAI_API_KEY",
      "base_url_placeholder": "https://api.example.com/v1",
      "tool_calls_per_minute_placeholder": "60",
      "unlimited_placeholder": "0 = 无限制",
      "network_bytes_placeholder": "0 = 无限制",
      "memory_bytes_placeholder": "0 = 无限制",
      "cpu_time_placeholder": "0 = 无限制",
      "network_hosts_placeholder": "api.openai.com:443",
      "shell_commands_placeholder": "ls, cat, grep",
      "cap_tools_placeholder": "web_search, file_read",
      "memory_glob_placeholder": "agent:*",
      "agent_message_placeholder": "智能体名称",
      "ofp_connect_placeholder": "/ip4/0.0.0.0/tcp/4001",
      "cron_hint": "标准 5 字段 Cron 表达式（如 0 */6 * * *）",
      "cron_placeholder": "0 */6 * * *",
      "conditions_placeholder": "agent.queue_depth > 10",
      "check_interval_placeholder": "300",
      "budget_tokens_placeholder": "8192",
      "max_iterations_placeholder": "50",
      "max_restarts_placeholder": "3",
      "heartbeat_interval_placeholder": "60",
      "auto_placeholder": "自动",
      "heartbeat_channel_placeholder": "heartbeat",
      "quiet_hours_hint": "Cron 表达式，指定智能体不应运行的时间段（如 0 22 * * *）",
      "quiet_hours_placeholder": "0 22 * * *",
      "simple_threshold_placeholder": "512",
      "complex_threshold_placeholder": "2048",
      "schema_name_placeholder": "my_schema"
    },
    "delete_confirm": "确定要删除智能体 \"{{name}}\" 吗？",
    "prompts": "提示词管理",
    "prompts_experiments": {
      "title": "提示词与实验",
      "versions_tab": "版本",
      "experiments_tab": "实验",
      "new_version": "新建版本",
      "new_experiment": "新建实验",
      "active": "当前生效",
      "activate": "激活",
      "no_versions": "暂无提示词版本",
      "create_version_title": "创建提示词版本",
      "system_prompt": "系统提示词",
      "description_optional": "描述（可选）",
      "no_experiments": "暂无实验",
      "start": "启动",
      "pause": "暂停",
      "complete": "完成",
      "metrics": "指标",
      "experiment_metrics": "实验指标",
      "requests": "请求数",
      "avg_latency": "平均延迟",
      "avg_cost": "平均成本",
      "close_metrics": "关闭指标",
      "create_experiment_title": "创建实验",
      "experiment_name": "实验名称",
      "select_versions": "选择提示词版本（至少 2 个）",
      "create_versions_first": "请先创建至少 2 个提示词版本。",
      "control": "对照组",
      "create_with_variants": "创建（{{count}} 个变体）",
      "variants_count": "{{count}} 个变体",
      "created_label": "创建时间：",
      "ok_label": "成功",
      "err_label": "错误",
      "system_prompt_placeholder": "你是一个有用的 AI 助手...",
      "description_placeholder": "这个版本有什么不同？",
      "experiment_name_placeholder": "我的 A/B 测试"
    },
    "thinking": "扩展思考",
    "thinking_enabled": "已启用",
    "budget_tokens": "思考预算 (tokens)",
    "stream_thinking": "流式思考",
    "thinking_hint": "扩展思考让模型在回答前进行深度推理",
    "clone": "克隆",
    "reset": "重置",
    "reset_confirm": "确定要重置此智能体的会话吗？聊天记录将被清空。",
    "suspend": "暂停",
    "resume": "恢复",
    "core_agents": "核心智能体",
    "hands": "Hands",
    "hand_badge": "HAND",
    "show_hand_agents": "显示 Hands 智能体",
    "filter_all": "全部",
    "filter_running": "运行中",
    "filter_suspended": "已暂停",
    "hand_agent_hint": "你正在编辑由 Hand 创建的活动运行时智能体。改动仅在内存中生效；守护进程重启或 Hand 重新加载后会回退到 Hand 的配置。",
    "tools_cap": "工具",
    "network": "网络",
    "help": "Agents 是这个 LibreFang 实例运行的所有自治单元。每个 agent 都有独立的身份、prompt、工具集、记忆与预算——以一行的形式存在于本页，直到被删除。从这里可以创建新 agent、编辑已有 agent、暂停 / 恢复，以及克隆好用的配置。\n\n使用步骤：\n\n1. 创建。点 \"Create agent\" 选择创建方式：表单、模板或裸 TOML。表单最简单；模板是预置原型（researcher、coder 等）；TOML 适合已经清楚要写什么的场景。\n\n2. 查看与编辑。点击某行打开详情面板——能看到 capabilities、hands、模型、最近活动。\"Edit\" 改名字 / prompt / 模型 / 工具策略；\"Edit template TOML\" 直接编辑完整 manifest。\n\n3. 生命周期。Suspend 暂停 agent（停触发器，状态保留）。Resume 恢复。Clone 把 manifest 复制到新 agent，方便 fork 而不破坏原版。Delete 是永久的——会话和记忆一起带走。\n\n典型场景：\n\n  · 起一个按领域分工的 agent（research / code / ops），每个独立 channel 和预算。\n  · Fork 一个跑得好的 agent，改 prompt 后并行 A/B 对比。\n  · 配额吃紧时暂停部分 agent，不丢配置和记忆。\n\n注意事项：\n\n  · agent.toml manifest 控制运行时行为——session_mode、max_concurrent_invocations、max_history_messages、命名工作区。表单覆盖常见情况；TOML 编辑器是兜底入口。\n  · 身份文件（SOUL.md、IDENTITY.md 等）放在 {workspace}/.identity/ 下。升级后首次 spawn 会自动迁移。\n  · 删除不可逆。要保留的话先 Suspend。",
    "builtin": {
      "academic-researcher": {
        "name": "学术研究员",
        "description": "学术研究智能体，检索学术论文、总结发现并生成文献综述。"
      },
      "analyst": {
        "name": "数据分析师",
        "description": "数据分析智能体，处理数据、生成洞察、创建报告。"
      },
      "architect": {
        "name": "系统架构师",
        "description": "系统架构智能体，设计软件架构、评估方案取舍、撰写技术规范。"
      },
      "assistant": {
        "name": "通用助手",
        "description": "通用助手智能体，处理日常任务、问答和对话。"
      },
      "code-reviewer": {
        "name": "代码审查员",
        "description": "高级代码审查智能体，审阅 PR、识别问题、提出生产级改进建议。"
      },
      "coder": {
        "name": "程序员",
        "description": "专业软件工程师，读写和分析代码。"
      },
      "customer-support": {
        "name": "客户支持",
        "description": "客户支持智能体，处理工单、解决问题、与客户沟通。"
      },
      "data-scientist": {
        "name": "数据科学家",
        "description": "数据科学智能体，分析数据集、构建模型、创建可视化、进行统计分析。"
      },
      "debugger": {
        "name": "调试专家",
        "description": "专业调试智能体，追踪 bug、分析堆栈跟踪、进行根因分析。"
      },
      "devops-lead": {
        "name": "DevOps 负责人",
        "description": "DevOps 负责人智能体，管理 CI/CD、基础设施、部署、监控和故障响应。"
      },
      "doc-writer": {
        "name": "文档撰写员",
        "description": "技术写作智能体，创建文档、README、API 文档、教程和架构指南。"
      },
      "email-assistant": {
        "name": "邮件助手",
        "description": "邮件分类、起草、日程安排和收件箱管理智能体。"
      },
      "hello-world": {
        "name": "Hello World",
        "description": "入门示例智能体，可以读取文件、搜索网络并回答日常问题。"
      },
      "home-automation": {
        "name": "家居自动化",
        "description": "智能家居控制智能体，管理 IoT 设备、自动化规则和家居监控。"
      },
      "legal-assistant": {
        "name": "法律助手",
        "description": "法律助手智能体，用于合同审查、法律研究、合规检查和文件起草。"
      },
      "meeting-assistant": {
        "name": "会议助手",
        "description": "会议记录、行动项、议程准备和跟进追踪智能体。"
      },
      "ops": {
        "name": "运维",
        "description": "DevOps 智能体，监控系统、运行诊断、管理部署。"
      },
      "orchestrator": {
        "name": "编排器",
        "description": "元智能体，分解复杂任务、委派给专业智能体并综合结果。"
      },
      "personal-finance": {
        "name": "个人理财",
        "description": "个人理财智能体，用于预算追踪、支出分析、储蓄目标和财务规划。"
      },
      "planner": {
        "name": "项目规划师",
        "description": "项目规划智能体，制定项目计划、拆解史诗、估算工作量、识别风险和依赖关系。"
      },
      "recipe-assistant": {
        "name": "食谱助手",
        "description": "烹饪助手，帮助处理食谱、膳食计划、食材替换和份量调整。"
      },
      "recruiter": {
        "name": "招聘助手",
        "description": "招聘智能体，用于简历筛选、候选人外联、职位描述撰写和招聘流程管理。"
      },
      "researcher": {
        "name": "研究员",
        "description": "研究智能体，抓取网络内容并综合信息。"
      },
      "sales-assistant": {
        "name": "销售助手",
        "description": "销售助手智能体，用于 CRM 更新、外联起草、管道管理和交易追踪。"
      },
      "security-auditor": {
        "name": "安全审计员",
        "description": "安全专家，审查代码漏洞、检查配置、进行威胁建模。"
      },
      "social-media": {
        "name": "社交媒体",
        "description": "社交媒体内容创作、排期和互动策略智能体。"
      },
      "test-engineer": {
        "name": "测试工程师",
        "description": "质量保证工程师，设计测试策略、编写测试、验证正确性。"
      },
      "translator": {
        "name": "翻译",
        "description": "多语言翻译智能体，用于文档翻译、本地化和跨文化沟通。"
      },
      "travel-planner": {
        "name": "旅行规划师",
        "description": "行程规划智能体，用于行程创建、预订调研、预算估算和旅行物流。"
      },
      "tutor": {
        "name": "辅导老师",
        "description": "教学和讲解智能体，用于学习、辅导和教育内容创作。"
      },
      "writer": {
        "name": "写作助手",
        "description": "内容写作智能体，创建文档、文章和技术写作。"
      }
    },
    "clone_failed": "克隆智能体失败",
    "delete_failed": "删除智能体失败",
    "delete_success": "智能体已删除",
    "delete_title": "删除智能体？",
    "edit_name": "智能体名称",
    "model_save_failed": "更新模型失败",
    "model_saved": "模型已更新",
    "rename_failed": "重命名智能体失败",
    "rename_hand_disabled": "Hand 管理的智能体不能重命名",
    "rename_hint": "点击重命名",
    "rename_success": "智能体已重命名",
    "reset_title": "重置会话？",
    "resume_failed": "恢复智能体失败",
    "suspend_failed": "暂停智能体失败",
    "tools_allowed_count": "已允许",
    "tools_allowlist_desc": "这些工具被明确允许。留空表示允许所有工具（被屏蔽的除外）。",
    "tools_allowlist_title": "允许列表",
    "tools_available": "个工具可用",
    "tools_blocked_count": "已屏蔽",
    "tools_blocklist_desc": "这些工具始终被屏蔽，即使出现在允许列表中也无效。",
    "tools_blocklist_title": "屏蔽列表",
    "tools_conflict_warning": "{{count}} 个工具同时出现在两个列表中。屏蔽列表优先，保存时这些工具将从允许列表中移除。",
    "tools_disabled_hint": "工具当前已启用。下方的允许/屏蔽列表控制哪些工具可用。",
    "tools_disabled_hint_active": "此智能体已禁用所有工具，允许/屏蔽过滤器不可编辑。请在智能体配置中重新启用工具后再管理过滤器。",
    "tools_disabled_label": "禁用全部工具",
    "tools_disabled_save_blocked": "此智能体已禁用所有工具。若要重新启用，请直接编辑智能体清单或配置——此编辑器仅管理允许/屏蔽过滤器。",
    "tools_disabled_save_hint": "请在智能体配置中重新启用工具后再修改过滤器",
    "tools_edit_aria": "编辑工具",
    "tools_editor_desc": "查看此智能体的当前工具状态。允许列表为空表示不限制；屏蔽列表仍会移除所选工具。",
    "tools_editor_title": "智能体工具",
    "tools_load_failed": "加载工具失败",
    "tools_save_failed": "更新工具失败",
    "tools_saved": "工具已更新",
    "tools_saved_conflicts": "工具已更新，冲突已按屏蔽列表优先原则解决。",
    "tools_search_placeholder": "搜索工具...",
    "detail": {
      "schedule_mode": "模式",
      "schedule_manual": "手动",
      "schedule_manual_desc": "仅在收到消息或事件时唤醒",
      "schedule_continuous": "持续运行",
      "schedule_continuous_desc": "Agent 按固定间隔轮询任务",
      "schedule_periodic": "周期触发",
      "schedule_periodic_desc": "Agent 根据 manifest 中的 cron 表达式触发 — 请编辑 agent.toml",
      "schedule_proactive": "主动监听",
      "schedule_proactive_desc": "Agent 监控 manifest 中配置的条件 — 请编辑 agent.toml",
      "schedule_manifest_only": "由 manifest 控制",
      "switch_to_continuous": "切换为持续运行",
      "switch_to_manual": "切换为手动",
      "check_interval_secs": "检查间隔（秒）",
      "schedule_invalid_interval": "间隔必须是正整数（秒）",
      "schedule_updated": "调度已更新",
      "cron_jobs": "定时任务",
      "add_cron": "新增定时",
      "no_cron": "暂无定时任务",
      "event_triggers": "事件触发器",
      "add_trigger": "新增触发器",
      "no_triggers": "暂无事件触发器",
      "no_triggers_reactive": "暂无触发器 — Agent 仅在收到消息时唤醒",
      "cron": {
        "name": "名称",
        "name_required": "名称不能为空",
        "expr": "Cron 表达式",
        "expr_hint": "标准 5 字段 cron（分 时 日 月 周）",
        "expr_required": "Cron 表达式不能为空",
        "tz": "时区（可选）",
        "message": "消息",
        "message_placeholder": "定时触发时发送给 Agent 的消息…",
        "enabled": "启用",
        "create": "创建定时任务",
        "edit": "编辑定时任务",
        "created": "定时任务已创建",
        "updated": "定时任务已更新",
        "deleted": "定时任务已删除",
        "no_id": "定时任务缺少 ID",
        "edit_disabled_non_cron": "此调度使用 'every' 或 'at' — 请通过 agent.toml 编辑，避免被静默改写为 cron 表达式。"
      },
      "trigger": {
        "pattern": "事件模式",
        "invalid_pattern": "触发器模式 JSON 无效",
        "prompt": "提示词模板",
        "prompt_placeholder": "事件触发时发送给 Agent 的提示词…",
        "max_fires": "最大触发次数（0 = 无限制）",
        "cooldown": "冷却时间（秒，留空表示无）",
        "session_mode": "会话模式（留空表示沿用 Agent 默认）",
        "create": "创建触发器",
        "edit": "编辑触发器",
        "created": "触发器已创建",
        "updated": "触发器已更新",
        "deleted": "触发器已删除"
      }
    }
  },
  "providers": {
    "title": "供应商",
    "subtitle": "管理大模型 API 连接和配置。",
    "configured_count": "{{configured}} / {{total}} 已配置",
    "models": "模型",
    "latency": "延迟",
    "test_connection": "测试连接",
    "analyzing": "分析中...",
    "reachable": "可连接",
    "unreachable": "无法连接",
    "not_checked": "未检测",
    "configured": "已配置",
    "unconfigured": "未配置",
    "online": "在线",
    "offline": "离线",
    "require_config": "需配置",
    "no_configured": "暂无已配置的供应商",
    "no_unconfigured": "暂无未配置的供应商",
    "no_results": "没有匹配的供应商",
    "name": "名称",
    "test": "测试",
    "batch_test": "批量测试",
    "select_all": "全选",
    "health": "健康状态",
    "key_required": "需要密钥",
    "details": "详情",
    "last_test": "上次测试",
    "error": "错误",
    "open_settings": "打开设置",
    "filter_all": "全部",
    "filter_reachable": "可连接",
    "filter_unreachable": "无法连接",
    "results": "结果",
    "config": "配置",
    "configure_provider": "配置供应商",
    "key_saved": "API Key 已保存",
    "key_removed": "API Key 已移除",
    "key_placeholder": "输入 API Key...",
    "key_placeholder_existing": "输入新 Key 替换旧的...",
    "optional": "可选",
    "remove_key": "移除 Key",
    "base_url": "Base URL",
    "base_url_hint": "仅填 host:port (如 http://192.168.1.10:11434) 时会自动追加 /v1,适配 OpenAI 兼容端点。",
    "proxy_url": "代理 URL",
    "proxy_url_placeholder": "http://proxy:8080 或 socks5://proxy:1080",
    "api_key": "API Key",
    "set_as_default": "设为默认",
    "default_set": "默认供应商已更新",
    "auto_select_model": "自动选择最佳模型",
    "model_name_placeholder": "例如 llama3.2, qwen2.5",
    "is_default": "默认",
    "add": "添加供应商",
    "delete_confirm_title": "移除供应商密钥",
    "delete_confirm_message": "确定要移除此供应商的 API Key 吗？移除后该供应商将变为未配置状态。",
    "help": "Providers 是 LLM 厂商连接（OpenAI、Anthropic、Gemini、Groq 等）——凭据、base URL、健康状态。模型目录的 availability 来自这里，每次 LLM 调用都路由经过一个已配置的 provider。\n\n使用步骤：\n\n1. 添加或编辑。\"Add\" 创建新 provider 连接——选种类、粘 API key，命中自托管 / 代理端点时再设 base URL。Edit 改已有的。\n\n2. 测试连通性。\"Batch test\" 一次 ping 所有已配置 provider；行内 test 测单个。Test 通过表示凭据能认证、端点可达。\n\n3. 自动选模型。Test 之后 \"Auto-select model\" 会给该 provider 选一个合理的默认模型，新建 agent 就有可用的。\n\n4. 看健康。状态徽标显示 healthy、限流或 auth-failed。\n\n典型场景：\n\n  · 上一个新 provider —— 粘 key、test、auto-select、完事。\n  · 改 base URL 把云端 Anthropic 切到本地代理。\n  · 排查 \"为什么没模型可用\"——多半是这里 key 缺失或过期。\n\n注意事项：\n\n  · provider 401 / 403 被识别为 \"可达，鉴权失败\"——跟 \"不可达\" 区分，让测试结果更准确。\n  · key 存在 config 里，把宿主机当作机密存储看待。\n  · 删 provider 不会删指向它的 agent——但这些 agent 的模型选项会失效，直到重新指。",
    "wizard_step_basics": "基本信息",
    "wizard_step_advanced": "高级选项",
    "wizard_step_models": "模型",
    "wizard_id_label": "供应商 ID",
    "wizard_id_placeholder": "my-provider",
    "wizard_id_hint": "小写字母加连字符，作为唯一标识符。",
    "wizard_base_url_label": "Base URL",
    "wizard_base_url_placeholder": "https://api.example.com/v1",
    "wizard_api_key_label": "API Key",
    "wizard_api_key_placeholder": "sk-...",
    "wizard_api_key_hint": "本地供应商无需 Key 时可留空。",
    "wizard_display_name_label": "显示名称",
    "wizard_api_key_env_label": "API Key 环境变量",
    "wizard_key_required_label": "需要 API Key",
    "wizard_advanced_hint": "以下值由供应商 ID 自动推导，如需可手动修改。",
    "wizard_models_hint": "可选：现在添加模型，或稍后再添加。",
    "wizard_model_id": "模型 ID",
    "wizard_model_name": "显示名称",
    "wizard_model_tier": "层级",
    "wizard_model_context": "上下文窗口",
    "wizard_model_max_output": "最大输出 Token",
    "wizard_model_input_cost": "输入成本 / 百万 Token",
    "wizard_model_output_cost": "输出成本 / 百万 Token",
    "wizard_next": "下一步",
    "wizard_back": "上一步",
    "wizard_skip_create": "跳过并创建",
    "wizard_create": "创建供应商",
    "wizard_creating": "创建中...",
    "wizard_id_required": "供应商 ID 不能为空",
    "wizard_base_url_required": "Base URL 不能为空",
    "wizard_auto_derived": "自动推导",
    "wizard_env_var": "环境变量",
    "provider_models": "模型",
    "no_models_for_provider": "暂无注册模型",
    "remove_key_confirm_title": "移除 API Key",
    "remove_key_confirm_message": "这将移除已存储的 API Key，并将该供应商标记为未配置。",
    "all_configured": "全部供应商均已配置",
    "empty_title": "尚未配置供应商",
    "empty_body": "接入 OpenAI、Anthropic、Gemini、Groq 或其他 LLM 供应商，让 agent 可以路由提示词并使用模型。",
    "connect_first": "添加一个供应商",
    "picker_title": "添加供应商",
    "create_custom": "创建自定义供应商"
  },
  "channels": {
    "add": "添加",
    "all_configured": "已配置全部 channel",
    "category": "类别",
    "config": "配置",
    "config_template_summary": "或者手动粘贴到 config.toml",
    "configured_count": "{{count}} 个活跃连接器",
    "connect_first": "添加一个 channel",
    "empty_body": "接入 Slack、Discord、邮件、短信或其他自带桥接，让 agent 可以收发消息。",
    "empty_title": "尚未配置 channel",
    "has_token": "已有令牌",
    "help": "Channels 是让人类跟你的 agent 对话的入站 / 出站桥梁——Slack、Discord、Telegram、邮件、webhook 等。每个 channel 有自己的 adapter；在这里配置 channel 等于把 adapter 跟一份凭据接起来并启用。\n\n使用步骤：\n\n1. 浏览目录。卡片显示运行时支持的所有 channel adapter，带 \"已配置 / 未配置\" 徽标和难度提示。\n\n2. 配置。在某个 channel 上点 \"Configure\"，填必填字段（token、app id、webhook URL 等）。保存后写入 config 并热重载 adapter——无需重启 daemon。\n\n3. 扫码登录。某些 adapter（如 WhatsApp Web）用扫码登录而非 token，点 \"QR login\" 用手机 app 扫。\n\n4. 验证。保存后卡片翻为 \"已配置\"，Comms 页就能看到该 adapter 的实时事件流。\n\n典型场景：\n\n  · 把 agent 接入团队 Slack，让任何人都能 DM 它。\n  · 配一个入站 webhook，让 agent 在 GitHub 事件上触发。\n  · 一个实例跑多个 Telegram 机器人，通过 channel binding 路由到不同 agent。\n\n注意事项：\n\n  · Channel binding（哪个 agent 在哪个 channel 上回应）写在 agent 的 manifest 里——本页只管 adapter 凭据。\n  · 部分 channel 字段是平台级密钥，存在本地 config，仅管理员可见。\n  · 重载会重新解析 channel 配置而不重启 daemon；重载失败时旧配置继续运行。",
    "msgs_24h": "条/24h",
    "name": "名称",
    "no_configured": "暂无已配置的通道",
    "no_results": "没有匹配的通道",
    "picker_title": "添加 channel",
    "reload": "重新加载",
    "reload_success": "通道已重新加载",
    "required_fields": "必填字段",
    "results": "结果",
    "saved": "已保存",
    "saved_restart_required": "已保存 — 需要重启 daemon 才能生效",
    "secret_set_placeholder": "•••• (已设置 — 留空则保持不变)",
    "select_all": "全选",
    "shadowed_secrets_warning": "警告：以下 token 被 shell 环境变量遮蔽，需要先 unset 并重启才会生效：{{keys}}",
    "subtitle": "消息通道适配器管理。",
    "title": "通道"
  },
  "skills": {
    "title": "技能",
    "subtitle": "扩展智能体能力的技能包。",
    "tools": "工具",
    "author": "作者",
    "uninstall": "卸载",
    "no_skills": "没有可用技能。",
    "uninstall_confirm_title": "卸载技能",
    "uninstall_confirm": "确定要卸载「{{name}}」吗？此操作无法撤销。",
    "installed": "已安装",
    "pending_tab": "待审",
    "marketplace": "市场",
    "install": "安装",
    "installing": "安装中...",
    "installed_count": "已安装 {{count}} 个",
    "browse": "浏览",
    "browse_registry": "应用市场",
    "source_fanghub": "FangHub",
    "source_clawhub": "ClawHub",
    "source_clawhub_cn": "ClawHub 国内版",
    "source_skillhub": "SkillHub",
    "sort_trending": "热门",
    "sort_downloads": "下载量",
    "sort_stars": "星标",
    "sort_updated": "更新",
    "sort_rating": "评分",
    "no_results": "没有找到技能",
    "rate_limited": "请求受限",
    "rate_limited_desc": "ClawHub API 请求次数超限，请稍后重试。",
    "load_error": "加载失败",
    "search_placeholder": "搜索技能（如 python、web、ai...）",
    "stars_count": "星标",
    "downloads_count": "下载",
    "install_timeout": "安装超时",
    "help": "Skills 是原子能力——单一目的的 prompt + 工具片段，agent 拾起后扩展推理（如 \"总结长文档\"、\"抽取实体\"、\"做一次维基查找\"）。跟 hands（受管多工具包）和 plugins（裸代码）不同：skill 是声明式的小单元，常被热改。\n\n使用步骤：\n\n1. 浏览。按来源（内置、市场、自建）和分类筛选。每张卡显示作者、下载量、描述。\n\n2. 安装 / 创建。市场 skill 一键安装。\"Create\" 在页内写自定义 skill ——名字、描述、prompt；编辑器有合理上限。\n\n3. 演化。每个 skill 有演化历史——版本、changelog、附带文件。可以在不丢旧版的前提下迭代 prompt 或挂参考文档。\n\n4. 浏览注册表。Registry 标签显示更广的公开目录，可从那里拉取。\n\n典型场景：\n\n  · 装一个把某件事做得很好的社区 skill，省得自己写。\n  · Fork 一个 skill 改 prompt 适配本领域，通过 evolution 保留两版。\n  · 给自家 agent 建一套内部 skill 库共用。\n\n注意事项：\n\n  · skill 名字必须通过校验（不能有路径花招、有长度上限）。冲突会以 \"name conflict\" 报错。\n  · prompt 体积有上限——大段参考内容放 evolution 附带文件，别塞 prompt。\n  · \"security blocked\" 错误说明 skill 想做运行时禁止的事（比如往沙盒外写）。",
    "skillhub": "SkillHub",
    "skillhub_search_placeholder": "搜索 SkillHub...",
    "skillhub_rate_limited_desc": "SkillHub 请求频率限制，请稍后重试。",
    "hub_unreachable": "不可达",
    "hub_checking": "检查中…",
    "all_hubs": "所有枢纽",
    "builtin": "FangHub",
    "official": "官方",
    "install_to": "安装到",
    "global": "全局（所有 Agent）",
    "cat_coding": "编程",
    "cat_git": "Git",
    "cat_web": "Web",
    "cat_devops": "DevOps",
    "cat_browser": "浏览器",
    "cat_ai": "AI",
    "cat_data": "数据",
    "cat_productivity": "效率",
    "cat_security": "安全",
    "cat_cli": "CLI",
    "reload_from_disk": "重新加载",
    "reloaded": "重新扫描技能目录（已加载 {{count}} 个）",
    "evo_create": "创建技能",
    "evo_created": "技能创建成功",
    "evo_create_title": "创建技能",
    "evo_name_hint": "小写字母，可含连字符（如 csv-analysis）",
    "evo_desc_placeholder": "这个技能教 agent 做什么",
    "evo_prompt_context": "Prompt 上下文（Markdown）",
    "evo_prompt_placeholder": "# 技能说明\n\n注入系统提示的 Markdown 指令...",
    "evo_tags": "标签（逗号分隔）",
    "evo_fill_required": "名称与描述为必填项",
    "evo_update": "更新",
    "evo_updated": "技能已更新",
    "evo_update_title": "更新 {{name}}",
    "evo_patch": "局部修改",
    "evo_patched": "技能已修改",
    "evo_patch_title": "修改 {{name}}",
    "evo_patch_old": "查找",
    "evo_patch_new": "替换为",
    "evo_replace_all": "替换所有匹配",
    "evo_changelog_placeholder": "改动内容与原因",
    "evo_rollback": "回滚",
    "evo_rollback_confirm": "回滚到上一个版本？需要再次修改才能撤销。",
    "evo_rolled_back": "技能已回滚",
    "evo_no_rollback": "没有更早版本可回滚",
    "evo_delete": "删除",
    "evo_delete_title": "删除此 agent 演化的技能",
    "evo_delete_confirm": "永久删除 {{name}}？此操作不可撤销。",
    "evo_deleted": "技能已删除",
    "evo_add_file": "添加文件",
    "evo_upload": "上传",
    "evo_upload_title": "为 {{name}} 添加文件",
    "evo_folder": "子目录",
    "evo_filename": "文件名",
    "evo_content": "内容",
    "evo_content_placeholder": "粘贴文件内容或从本地加载",
    "evo_load_from_disk": "从本地加载",
    "evo_file_uploaded": "文件已上传",
    "evo_file_too_large": "文件超过 1 MiB 限制",
    "evo_files": "辅助文件",
    "evo_view_file": "查看文件",
    "evo_file_truncated": "文件预览截断至 256 KiB",
    "evo_remove_file": "删除文件",
    "evo_remove_file_confirm": "删除 {{path}}？",
    "evo_file_removed": "文件已删除",
    "evo_history": "版本历史",
    "evo_uses": "使用次数",
    "evo_evolutions": "演化次数",
    "evo_prompt_size": "Prompt 上下文",
    "evo_not_found": "技能不存在",
    "err_name_conflict": "已存在同名技能，请换一个名称。",
    "err_desc_too_long": "描述过长（最多 1024 字符）。",
    "err_prompt_too_large": "Prompt 上下文过大（最多 160,000 字符）。",
    "err_security_blocked": "内容被安全扫描拦截，请移除可疑模式。",
    "err_invalid_name": "技能名称非法：仅允许小写字母、数字、连字符、下划线。",
    "err_create_failed": "创建技能失败，请重试。",
    "outputs": "技能输出",
    "evo_load_failed": "加载文件失败",
    "evo_action_failed": "操作失败",
    "evo_delete_failed": "删除失败",
    "reload_failed": "刷新失败"
  },
  "hands": {
    "title": "Hands",
    "subtitle": "可组合的功能扩展包。",
    "view_manifest": "查看 HAND.toml",
    "manifest_title": "HAND.toml — {{name}}",
    "manifest_error": "加载 HAND.toml 失败",
    "available": "可用能力",
    "instances": "活跃实例",
    "running_now": "正在运行",
    "activate": "激活",
    "deactivate": "停用",
    "orchestration": "能力管理",
    "active_label": "活跃",
    "total_label": "总计",
    "search_placeholder": "搜索 Hands...",
    "ready": "就绪",
    "degraded": "降级运行",
    "no_matching_hint": "换个搜索词或者清除当前筛选条件试试。",
    "clear_filters": "清除筛选",
    "missing_req": "缺少依赖",
    "instance": "实例",
    "agent": "智能体",
    "activated_at": "激活时间",
    "paused": "已暂停",
    "pause": "暂停",
    "resume": "恢复",
    "inactive_label": "未激活",
    "metrics": "指标",
    "metrics_no_data": "暂无指标数据。",
    "settings": "设置",
    "settings_empty": "暂无可用设置。",
    "tab_schedules": "定时任务",
    "new_schedule": "新建定时任务",
    "schedule_name_placeholder": "例如：每日状态检查",
    "schedule_message_placeholder": "触发时让此 Hand 执行什么操作？",
    "schedule_created": "定时任务已创建",
    "configure_delivery_targets": "配置投递目标 →",
    "requirements": "依赖项",
    "tools": "工具",
    "cat_communication": "通信",
    "cat_content": "内容",
    "cat_data": "数据",
    "cat_development": "开发",
    "cat_productivity": "效率",
    "help": "Hands 是自治能力包——一组工具集 + 胶水逻辑打包成一个可拾取的 \"手\"，让 agent 获得一类完整能力（如 \"上网浏览\"、\"操控 Telegram bot\"、\"运行沙盒 shell\"）。它跟 skills（单一能力）和 plugins（裸扩展）不同：hand 是有生命周期管理的整套能力包。\n\n使用步骤：\n\n1. 浏览。每张卡显示 hand 名字、描述、状态（active / paused / degraded）和依赖。\n\n2. 启用。\"Activate\" 启用 hand——agent 申请时它的工具就可用了。\"Deactivate\" 干净下线。\n\n3. 暂停 / 恢复。Pause 保留状态但不接新活——调试或配额吃紧时不用清配置就能停。Resume 恢复。\n\n4. 配置投递。\"Configure delivery targets\" 把 hand 的输出路由到指定 channel / agent ——hand 与系统其他部分的编排开关。\n\n跟 Skills / Plugins / MCP 的区别：\n\n  · Skills —— 原子能力单元，粒度更小。\n  · Plugins —— 你写或装的裸运行时扩展。\n  · Hands —— 有生命周期管理的有主见的能力包。\n  · MCP —— 通过协议访问的外部工具服务器。\n\n典型场景：\n\n  · 启用一个 \"browser\" hand，让 agent 能抓网页并总结。\n  · 安静时段把吵闹的 hand 暂停掉，不动配置。\n  · 排查卡在 \"degraded\" 的 hand——读它的 manifest 错误信息找原因。\n\n注意事项：\n\n  · \"degraded\" 通常是缺依赖或健康检查失败——manifest 错误信息会指出原因。\n  · Deactivate 是优雅下线：在途调用跑完，不接新调用。",
    "settings_activate_first": "请先激活此 Hand 才能编辑其设置。",
    "settings_default": "默认值",
    "settings_save": "保存设置",
    "settings_saved": "已保存",
    "uninstall": "卸载此 Hand",
    "uninstall_confirm": "确定要卸载此 Hand？其 HAND.toml 和工作区文件将被删除，此操作不可撤销。"
  },
  "analytics": {
    "title": "分析",
    "subtitle": "使用统计和性能监控。",
    "intelligence": "数据分析",
    "compute": "计算消耗",
    "compute_desc": "供应商消耗的资源。",
    "runtime": "运行时状态",
    "runtime_desc": "核心系统执行指标。",
    "active_agents": "活跃智能体",
    "configured_channels": "配置通道",
    "available_skills": "可用技能",
    "health_checks": "健康检查",
    "advanced": "高级指标",
    "advanced_desc": "详细分析即将推出。",
    "usage_by_model": "按模型成本",
    "usage_by_model_desc": "每个模型的 Token 消耗明细。",
    "daily_trend": "每日成本趋势",
    "daily_trend_desc": "最近 14 天的成本变化。",
    "today_cost": "今日成本",
    "total_calls": "总调用次数",
    "total_tokens_label": "总 Token 数",
    "budget_title": "预算限额",
    "budget_desc": "设置消费上限控制成本。",
    "hourly_limit": "每小时限额",
    "daily_limit": "每日限额",
    "monthly_limit": "每月限额",
    "token_limit": "Token/小时",
    "alert_threshold": "告警阈值",
    "budget_saved": "预算限额已更新。",
    "usage_summary": "使用概览",
    "usage_summary_desc": "API 调用消耗统计。",
    "total_requests": "总请求数",
    "total_tokens": "总 Token",
    "total_cost": "总消耗",
    "avg_latency": "平均延迟",
    "usage_by_agent": "智能体消耗",
    "usage_by_agent_desc": "按智能体分组的消耗排名。",
    "no_agent_data": "暂无智能体消耗数据",
    "no_model_data": "暂无模型消耗数据",
    "no_trend_data": "暂无趋势数据",
    "cost_per_call": "单次调用成本",
    "cheapest_call": "最低单次成本",
    "avg_cost_per_call": "平均单次成本",
    "help": "Analytics 汇总本实例所有 agent 与 provider 的 LLM 调用花费、延迟、吞吐量。数据来自 metering 层——和 per-agent 预算同源，只是按维度切片做图。\n\n使用步骤：\n\n1. 选时间窗口。用时间范围选择器锁定今天 / 本周 / 本月或自定义区间，所有图表和表格会重新聚合。\n\n2. 看头部指标。总花费、总调用次数、平均每次成本、平均延迟——一眼判断当前花销是否健康。\n\n3. 下钻。\"Model performance\" 表格按模型拆分延迟 / 成本 / 调用次数，看哪个模型物有所值；每日趋势图显示用量是否在攀升。\n\n4. 设置防线。预算面板可设小时 / 日 / 月限额和告警阈值。越过阈值会进 Approvals。\n\n典型场景：\n\n  · 在月底账单到来前抓住失控的 agent——日趋势异常飙升 + Budget 页 per-agent 排名指出元凶。\n  · 选默认模型时跨 provider 比较延迟。\n  · 导出 CSV 给财务 / 报表用。\n\n注意事项：\n\n  · 数据随调用结果落入即更新——没有小时级聚合延迟，但最近几秒内的调用可能尚未计入。\n  · 成本根据模型目录里发布的价格计算；provider 改价就更新 Models 页对应条目。\n  · 这里设置的预算是全局的；per-agent 上限在 agent 自己的页面。",
    "cost": "费用",
    "avg": "平均",
    "min": "最小",
    "max": "最大",
    "cost_per_call_label": "每次调用费用",
    "calls": "调用次数",
    "cost_call": "单次费用",
    "export_csv": "导出 CSV",
    "fastest_model": "最快模型",
    "latency_by_model": "按模型延迟",
    "min_max": "最小 / 最大",
    "model": "模型",
    "model_performance_table": "模型性能",
    "tokens": "Token 数"
  },
  "memory": {
    "title": "记忆",
    "subtitle": "智能体的持久化记忆存储。",
    "cognitive_layer": "向量存储",
    "objects_stored": "{{count}} 个存储对象",
    "add_memory": "添加记忆",
    "edit_memory": "编辑记忆",
    "content": "内容",
    "content_placeholder": "输入记忆内容...",
    "level": "层级",
    "agent_id": "智能体 ID",
    "agent_optional": "可选",
    "episodic": "情景记忆",
    "semantic": "语义记忆",
    "working": "工作记忆",
    "total_memories": "总记忆数",
    "importance": "重要性",
    "cleanup": "清理",
    "decay": "衰减",
    "add": "添加",
    "filter_all": "全部",
    "showing": "显示 {{count}} / {{total}} 条",
    "no_memories": "暂无记忆",
    "created": "创建于",
    "config_title": "记忆配置",
    "config_desc": "修改后写入 config.toml，重启后生效。",
    "embedding_provider": "向量引擎",
    "extraction_model": "提取模型",
    "proactive": "主动记忆",
    "proactive_enabled": "启用",
    "auto_memorize": "自动记忆",
    "auto_retrieve": "自动召回",
    "help": "Memory 是 agent 的长期存储——embedding 向量加结构化记录，agent 在召回时取出来跨会话保持上下文。本页可以浏览、搜索、编辑、播种记忆，并配置 embedding 与召回行为。\n\n使用步骤：\n\n1. 浏览 / 搜索。列表显示最近记忆，含访问次数和元数据。搜索走向量相似（配置了 embedding provider 时）或文本回退。\n\n2. 添加。\"Add memory\" 手动播种事实——选范围（global / per-agent）、填内容、保存。适合手工策划的知识。\n\n3. 编辑 / 删除。点击行查看、编辑或删除。编辑会自动重新 embedding。\n\n4. 配置。设置面板切换自动记忆（agent 边跑边写）、自动召回（自动注入到上下文）、选 embedding provider 与 API key。\n\n典型场景：\n\n  · 一次性写入 \"对用户 @evan 始终用中文回复\"，不再写进 system prompt 里反复贴。\n  · 检视 agent 实际记下了什么，把低价值的剪掉。\n  · 切换 embedding provider（成本 / 质量变化时）。\n\n注意事项：\n\n  · 存储是 ~/.librefang/ 下的 SQLite，备份也在那里。\n  · per-agent 记忆不会跨 agent 串；global 记忆所有 agent 都能看到。\n  · 关掉自动召回不会删记忆——只是不再注入上下文。仍可手动查询。",
    "access_count": "访问次数",
    "category": "分类",
    "cleanup_success": "清理完成",
    "delete_success": "记忆已删除",
    "last_access": "最后访问",
    "embedding_section": "向量嵌入",
    "provider": "Provider",
    "auto_detect": "自动检测",
    "provider_openai": "OpenAI",
    "provider_ollama": "Ollama",
    "provider_vllm": "vLLM",
    "provider_lmstudio": "LM Studio",
    "provider_gemini": "Gemini",
    "provider_minimax": "MiniMax",
    "model": "模型",
    "api_key_env": "API 密钥环境变量",
    "api_key_env_hint": "本地 provider（Ollama / vLLM / LM Studio）通常无需密钥——留空即可。",
    "proactive_memory": "主动记忆",
    "extraction_model_label": "提取模型",
    "max_retrieve": "最大召回数",
    "decay_rate": "衰减率",
    "auto": "自动",
    "agent_label": "智能体：",
    "user": "用户",
    "session": "会话",
    "agent": "智能体",
    "tab_aria_label": "记忆视图",
    "tab_records": "记忆条目",
    "tab_kv": "KV",
    "tab_dreams": "自动梦境",
    "tab_health": "健康度",
    "scope_agent_label": "智能体",
    "scope_all_label": "范围",
    "rail_title": "智能体范围",
    "rail_filter_placeholder": "筛选智能体",
    "rail_all_agents": "全部智能体",
    "rail_records_short": "条",
    "rail_kv_short": "KV",
    "rail_no_match": "没有匹配的智能体。",
    "auto_dream_on_badge": "自动梦境：开",
    "auto_dream_off_badge": "自动梦境：关",
    "auto_dream_desc_inline": "按 agent 周期性整理记忆。Manifest 覆盖 > 全局默认；全局开关在 config.toml 的 [auto_dream] 下配置。",
    "kv_label_short": "KV 对",
    "kv_no_agents": "暂无可用 agent",
    "kv_agent_missing": "所选 agent 尚无 KV 数据",
    "kv_key": "Key",
    "kv_value": "Value",
    "kv_source": "来源",
    "kv_empty": "暂无 KV 条目",
    "dream_no_status": "该 agent 尚未被调度器登记梦境状态。",
    "dream_agent_missing": "所选 agent 尚无梦境状态",
    "records_filtered_to_agent": "已按当前 agent 过滤",
    "embedding_model_default": "自动 / 走 provider 默认",
    "extraction_model_default": "使用内核默认",
    "extraction_model_placeholder": "例如 openai/gpt-4o-mini",
    "custom_model_option": "自定义…",
    "decay_rate_hint": "应用于记忆置信度的每日衰减率。值越低，记忆衰减越慢。",
    "decay_rate_invalid": "必须是 0 到 1 之间的数。",
    "max_retrieve_invalid": "必须是 1 到 50 之间的整数。",
    "config_invalid_stored": "存量配置中存在越界的数值字段。请修正下方高亮字段后再保存。",
    "delete_confirm_title": "删除记忆",
    "delete_confirm_message": "此记忆将被永久删除。",
    "proactive_disabled_notice": "主动记忆已在配置中禁用 —— 没有条目可显示。KV 记忆与自动梦境仍可使用。",
    "health_embedding_title": "Embedding 后端",
    "health_embedding_ok": "可达",
    "health_embedding_down": "不可达",
    "health_provider": "Provider",
    "health_model": "模型",
    "health_api_key_env": "API key 环境变量",
    "health_unset": "未设置",
    "health_embed_hint_ok": "存活探测成功 —— 当前 embedding 后端响应了一次测试调用。",
    "health_embed_hint_fail": "存活探测失败。在 provider 恢复可达前，记忆写入将跳过向量索引。检查 API key、base URL，以及本地服务（Ollama / vLLM / LM Studio）是否在运行。",
    "health_proactive_title": "主动记忆",
    "health_proactive_on": "已启用",
    "health_proactive_off": "已禁用",
    "health_extraction_model": "提取模型",
    "health_use_default": "内核默认",
    "health_auto_memorize": "自动记忆",
    "health_auto_retrieve": "自动召回",
    "health_decay_rate": "衰减率",
    "health_dream_title": "自动梦境",
    "health_dream_with_errors": "运行中（含错误）",
    "health_dream_on": "运行中",
    "health_dream_off": "已禁用",
    "health_dream_enrolled": "已报名的智能体",
    "health_dream_last": "最近一次成功整理",
    "health_dream_failed": "上次执行失败 / 中止的已报名 agent 数",
    "health_dream_warn": "有已报名的 agent 上次梦境执行失败或被中止。打开自动梦境标签查看具体错误。",
    "health_actions_title": "调优",
    "health_actions_desc": "上面的配置项都来自 config.toml。设置抽屉提供同步编辑（带校验与下拉选项）。",
    "health_open_config": "打开配置"
  },
  "comms": {
    "bus": "通信总线",
    "subtitle": "实时消息流量和连接性。",
    "active_channels": "通道",
    "active_channels_description": "适配器的连接状态。",
    "unconfigured": "需配置",
    "health_description": "子系统检查。",
    "awaiting_telemetry": "正在获取监控数据...",
    "topology": "网络拓扑",
    "topology_description": "事件总线和消息路由。",
    "no_channels": "未发现通信通道。",
    "total_channels": "总通道数",
    "connected": "已连接",
    "events_today": "今日事件",
    "uptime": "可用率",
    "events": "事件流",
    "events_desc": "实时消息事件。",
    "connections": "连接",
    "help": "Comms 是消息总线的实时监控页。Channels 管配置，Comms 显示流量——已连接的 adapter、最近的发 / 收事件、agent ↔ channel 拓扑、基本健康状态。\n\n使用步骤：\n\n1. 健康行。活跃 channel、当日事件总数、daemon 运行时长——快速判断 \"总线还活着吗\"。\n\n2. 事件时间线。最新的 send / receive / error 事件，含来源、类型、时间戳。搜索可按 channel、agent 或文本过滤。\n\n3. 拓扑。可视化展示当前哪些 agent 在哪些 channel 上可达。\n\n典型场景：\n\n  · \"用户说 Telegram 机器人没回\" ——在时间线上找匹配的 receive 事件，看是否有对应的 send 发出。\n  · 抓那种 adapter 静默掉线（没有心跳事件）的情况。\n  · 看部署刚上线后流量是否在几秒内恢复。\n\n注意事项：\n\n  · 事件流是内存里的有上限缓冲，旧事件会被挤掉。要看深历史去审计轨迹和 channel 日志。\n  · 这里 \"在线\" 指 adapter 已连接，不保证上游服务（Slack、Telegram 等）也健康。"
  },
  "canvas": {
    "title": "流程设计器",
    "subtitle": "可视化设计智能体工作流。",
    "node_library": "节点库",
    "triggers": "触发器",
    "logic": "逻辑",
    "actions": "动作",
    "clear_confirm": "确定要清空画布吗？",
    "no_agent_steps": "没有已分配智能体的节点。点击节点可绑定智能体。",
    "name_required": "请输入工作流名称。",
    "node_config": "节点配置",
    "node_label": "名称",
    "node_desc": "描述",
    "assign_agent": "绑定智能体",
    "no_agent": "-- 不绑定 --",
    "agent_steps": "个智能体步骤",
    "run_result": "运行结果",
    "run_input_title": "运行工作流",
    "run_input_hint": "输入内容会传给第一个步骤（作为 {{input}}）。留空则无初始输入。",
    "run_input_placeholder": "例如：请翻译以下内容...",
    "run_now": "运行",
    "to_run": "运行",
    "step_mode": "执行模式",
    "mode_sequential": "顺序执行",
    "mode_fan_out": "并行执行",
    "mode_collect": "收集合并",
    "mode_conditional": "条件执行",
    "mode_loop": "循环执行",
    "condition_text": "条件文本",
    "condition_placeholder": "当前一步输出包含此文本时才执行",
    "loop_until": "输出包含以下内容时停止",
    "loop_until_placeholder": "例如：完成",
    "loop_max": "最大循环次数",
    "error_mode": "错误处理",
    "error_fail": "出错停止",
    "error_skip": "出错跳过",
    "error_retry": "出错重试",
    "max_retries": "最大重试次数",
    "timeout": "超时时间（秒）",
    "output_var": "输出变量名",
    "output_var_hint": "（后续步骤用 {{变量名}} 引用）",
    "example_placeholder": "例如 research_result",
    "create_group": "创建分组",
    "new_group": "分组",
    "unsaved": "有未保存的更改",
    "empty_title": "空画布",
    "empty_hint": "从左侧添加节点，或右键画布添加",
    "collapse_sidebar": "折叠侧栏",
    "expand_sidebar": "展开侧栏",
    "ctx_edit": "编辑节点",
    "ctx_copy": "复制",
    "ctx_duplicate": "复制节点",
    "ctx_add_agent": "添加智能体节点",
    "ctx_paste": "粘贴",
    "ctx_select_all": "全选",
    "ctx_auto_layout": "自动排列",
    "ctx_delete_connection": "删除连接",
    "click_to_assign": "点击绑定智能体",
    "saved": "已保存",
    "exported": "已导出",
    "imported": "已导入",
    "import_error": "无效的工作流文件",
    "save_as_template": "存为模板",
    "save_before_schedule": "请先保存工作流，再设置定时任务",
    "save_first_to_template": "请先保存工作流再存为模板",
    "saved_as_template": "已保存为模板",
    "shortcuts_title": "快捷键",
    "sc_undo": "撤销",
    "sc_redo": "重做",
    "sc_copy": "复制",
    "sc_paste": "粘贴",
    "sc_duplicate": "复制节点",
    "sc_select_all": "全选",
    "sc_group": "创建分组",
    "sc_ungroup": "解散分组",
    "sc_fit_view": "适配视口",
    "sc_export": "导出 JSON",
    "sc_import": "导入 JSON",
    "sc_delete": "删除",
    "sc_pan": "平移画布",
    "sc_select": "框选",
    "sc_context": "右键菜单",
    "sc_help": "快捷键帮助",
    "node_types": {
      "start": "开始",
      "start_desc": "工作流入口",
      "end": "结束",
      "end_desc": "工作流终止",
      "schedule": "定时",
      "schedule_desc": "时间触发器",
      "webhook": "Webhook",
      "webhook_desc": "HTTP webhook 触发器",
      "channel": "通道",
      "channel_desc": "发送到通道",
      "condition": "条件",
      "condition_desc": "分支逻辑",
      "loop": "循环",
      "loop_desc": "重复执行",
      "parallel": "并行",
      "parallel_desc": "并行执行",
      "wait": "等待",
      "wait_desc": "延迟/等待",
      "collect": "收集",
      "collect_desc": "合并并行结果",
      "respond": "响应",
      "respond_desc": "发送响应",
      "agent": "智能体",
      "agent_desc": "运行智能体任务"
    },
    "nodes": {
      "start": "开始",
      "start_desc": "工作流入口",
      "end": "结束",
      "end_desc": "工作流终止",
      "schedule": "定时",
      "schedule_desc": "时间触发器",
      "webhook": "Webhook",
      "webhook_desc": "HTTP webhook 触发器",
      "channel": "通道",
      "channel_desc": "发送到通道",
      "condition": "条件",
      "condition_desc": "分支逻辑",
      "loop": "循环",
      "loop_desc": "重复执行",
      "parallel": "并行",
      "parallel_desc": "并行执行",
      "collect": "收集",
      "collect_desc": "合并并行结果",
      "wait": "等待",
      "wait_desc": "延迟/等待",
      "respond": "响应",
      "respond_desc": "发送响应",
      "agent": "智能体",
      "agent_desc": "运行智能体任务"
    },
    "ungroup": "取消分组",
    "delete_group": "删除分组及子节点",
    "group": "分组",
    "fit_view": "适应视图 (Cmd+1)",
    "export": "导出 (Cmd+E)",
    "import": "导入 (Cmd+I)",
    "shortcuts": "快捷键 (?)",
    "dry_run_hint": "Dry Run — 验证但不调用 LLM",
    "dry_run": "Dry Run",
    "dry_run_desc": "验证 Agent 并预览解析后的提示词，不调用任何 LLM。",
    "validate": "校验",
    "valid": "通过",
    "issues_found": "发现问题",
    "skip": "已跳过",
    "agent_not_found": "未找到 Agent",
    "resolved_prompt": "解析后 Prompt：",
    "step_details": "步骤详情",
    "click_to_expand": "点击展开",
    "fullscreen": "全屏",
    "exit_fullscreen": "退出全屏",
    "browse_templates": "浏览模板",
    "depends_on": "依赖节点",
    "depends_on_hint": "此节点将在所选节点完成后才会运行。",
    "load_error": "加载数据失败",
    "logic_actions": "逻辑与动作",
    "no_templates": "暂无模板",
    "save_error": "创建工作流失败",
    "scheduled": "计划已创建",
    "template_instantiate_error": "实例化模板失败",
    "template_load_error": "加载模板失败",
    "template_params": "模板参数",
    "template_search": "搜索模板...",
    "use_template": "使用模板",
    "workflow_load_error": "加载工作流失败"
  },
  "workflows": {
    "title": "工作流",
    "subtitle": "自动化中心。",
    "all_workflows": "所有工作流",
    "run_workflow": "运行工作流",
    "select_workflow": "选择工作流",
    "recent_runs": "最近运行记录",
    "no_runs": "暂无运行记录",
    "select_workflow_hint": "请选择一个工作流以查看记录",
    "steps_count": "{{count}} 步",
    "nodes_unit": "个节点",
    "automation_hub": "自动化中心",
    "templates": "模板",
    "template_library": "工作流市场",
    "my_workflows": "我的工作流",
    "use_template": "使用模板",
    "create_blank": "创建空白工作流",
    "new_workflow": "新建工作流",
    "workflow_name": "工作流名称",
    "description": "描述",
    "delete_confirm": "确定要删除此工作流吗？",
    "open_workflows": "工作流列表",
    "untitled_workflow": "未命名工作流",
    "help": "Workflows 是多步自动化——由节点（LLM 调用、工具调用、分支等）组成的图，运行时自上而下执行。跟单次 scheduler 触发（一进一出）不同：workflow 是带分支与中间步骤的菜谱。可视化画布构建，模板播种常见形状。\n\n使用步骤：\n\n1. 创建。\"Create blank\" 打开空画布，或挑模板（\"my workflows\" 列你的，\"all workflows\" 列共享的）。\n\n2. 编辑节点。每个节点有自己的上下文（ctx_edit）——编辑 prompt、工具引用、分支条件。拖线连接节点。\n\n3. Dry run。\"Dry run\" 不调用 LLM 验证 workflow ——检查节点连线、缺失引用、agent ID 是否存在。正式跑前先 Dry run，省掉 token。\n\n4. Run now。提供运行输入，点 \"Run now\"；输出和 resolved prompt 会显示；\"Run history\" 跟踪历次运行。\n\n跟 Scheduler / Goals 的区别：\n\n  · Scheduler —— 单次触发，按时钟或事件。\n  · Goals —— 长期意图，有状态地跟踪。\n  · Workflows —— 可重复执行的多步带分支菜谱。\n\n典型场景：\n\n  · \"拉 issue → 总结 → 让 agent 出修复 → 发评论\" 打包成可重复 workflow。\n  · 模板化一个研究流水线，按是否找到文档分支。\n  · 把 workflow 作为 Scheduler cron 的目标——cron 到点触发该 workflow。\n\n注意事项：\n\n  · Dry run 能在不花 token 的前提下抓出 missing-agent / 未解析 prompt——大改动保存前先跑。\n  · Run history 是 per-workflow 的；输出在删除该 workflow 前都保留。\n  · 失败的运行会留下含失败点的记录，重试前先看一眼。",
    "search_placeholder": "搜索工作流...",
    "runs_label": "次运行",
    "empty_title": "还没有工作流",
    "empty_desc": "从模板快速创建，或从空白开始设计。",
    "parameters": "参数",
    "additional_context_placeholder": "附加说明（可选）...",
    "template_details": {
      "content_pipeline": "内容创作流水线",
      "content_pipeline_desc": "调研 → 写作 → 编辑，产出精品文章",
      "translate_polish": "翻译润色",
      "translate_polish_desc": "自动识别语言，翻译并润色",
      "brainstorm": "头脑风暴",
      "brainstorm_desc": "发散创意 → 评估打分 → 输出行动计划",
      "weekly_report": "周报生成器",
      "weekly_report_desc": "把零散笔记变成专业周报"
    },
    "nodes": {
      "complete": "完成",
      "complete_desc": "工作流完成",
      "topic_input": "输入主题",
      "topic_input_desc": "输入你的主题",
      "researcher": "调研员",
      "researcher_desc": "深度调研主题",
      "writer": "写作者",
      "writer_desc": "撰写结构化文章",
      "editor": "编辑",
      "editor_desc": "润色定稿",
      "source_text": "原文",
      "source_text_desc": "粘贴待翻译文本",
      "translator": "翻译",
      "translator_desc": "自动识别并翻译",
      "reviewer": "审校",
      "reviewer_desc": "审查翻译质量",
      "challenge": "挑战",
      "challenge_desc": "描述你的挑战",
      "idea_gen": "创意生成",
      "idea_gen_desc": "生成10个创意方案",
      "evaluator": "评估",
      "evaluator_desc": "打分并排序",
      "action_plan": "行动计划",
      "action_plan_desc": "制定实施方案",
      "work_notes": "工作笔记",
      "work_notes_desc": "粘贴原始笔记",
      "organizer": "整理",
      "organizer_desc": "分类和结构化",
      "report_writer": "周报撰写",
      "report_writer_desc": "生成专业周报"
    },
    "dry_run": "Dry Run",
    "dry_run_hint": "Dry Run — 验证但不调用 LLM",
    "dry_run_valid": "验证通过 — 所有 Agent 已解析",
    "dry_run_warning": "警告 — 部分 Agent 未找到",
    "delete_failed": "删除失败",
    "run_failed": "运行失败",
    "run_started": "运行已启动",
    "schedule_failed": "创建计划失败",
    "skip": "跳过",
    "agent_not_found": "未找到 Agent",
    "resolved_prompt": "解析后的提示词：",
    "step_details": "步骤详情",
    "run_history": "运行历史",
    "prompt_sent": "发送的提示词：",
    "output": "输出：",
    "generated_images": "生成的图片：",
    "loading_details": "正在加载详情…"
  },
  "scheduler": {
    "title": "调度器",
    "subtitle": "管理 Cron 任务和定期任务。",
    "create_job": "创建调度",
    "pick_schedule": "选择调度方式",
    "job_name": "任务名称",
    "job_name_placeholder": "例如：每周健康检查",
    "cron_exp": "Cron 表达式",
    "target_agent": "目标智能体",
    "select_agent": "选择智能体...",
    "active_schedules": "定时任务",
    "run_now": "立即运行",
    "event_triggers": "事件触发器",
    "system_cron": "系统 Cron",
    "schedules": "个调度",
    "triggers_label": "个触发器",
    "cron_jobs": "个定时",
    "no_schedules": "暂无调度任务。创建一个来自动化智能体任务。",
    "target": "目标",
    "target_workflow": "工作流",
    "select_workflow": "选择工作流...",
    "message": "消息",
    "message_placeholder": "发送给智能体的消息...",
    "every_minute": "每分钟",
    "every_n_hours": "每 {{n}} 小时",
    "weekly": "每周",
    "type_interval_min": "每 N 分钟",
    "type_interval_hour": "每 N 小时",
    "type_daily": "每天",
    "type_weekday": "工作日",
    "type_weekly": "每周",
    "type_monthly": "每月",
    "type_custom": "自定义",
    "every": "每",
    "minutes": "分钟",
    "hours": "小时",
    "daily_at": "每天",
    "weekdays_at": "工作日",
    "at": "时间",
    "every_month_on": "每月第",
    "field_min": "分",
    "field_hour": "时",
    "field_day": "日",
    "field_month": "月",
    "field_weekday": "星期",
    "every_n_minutes": "每 {{n}} 分钟",
    "day_suffix": "号",
    "weekday_sun": "日",
    "weekday_mon": "一",
    "weekday_tue": "二",
    "weekday_wed": "三",
    "weekday_thu": "四",
    "weekday_fri": "五",
    "weekday_sat": "六",
    "weekday_short_mon": "一",
    "weekday_short_tue": "二",
    "weekday_short_wed": "三",
    "weekday_short_thu": "四",
    "weekday_short_fri": "五",
    "weekday_short_sat": "六",
    "weekday_short_sun": "日",
    "cron_every_n_min": "每 {{n}} 分钟",
    "cron_every_n_hour": "每 {{n}} 小时",
    "cron_monthly": "每月{{dom}}日 {{time}}",
    "cron_weekly": "周{{day}} {{time}}",
    "cron_weekdays": "工作日 {{time}}",
    "cron_daily": "每天 {{time}}",
    "cron_invalid": "无效表达式",
    "help": "Scheduler 让 agent 按时钟或事件触发执行。Cron 风格的 schedule 按固定间隔触发；事件触发器在系统其他位置发生事件时触发。每次触发都会向目标 agent（或 workflow）投递一条消息——和人类手动发消息流程一样。\n\n使用步骤：\n\n1. 创建 schedule。\"Create job\" → 选 agent 或 workflow，写 cron 表达式（或选 \"every minute\" / \"every N hours\" 预设），填消息体，保存。\n\n2. 事件触发器。Events 标签可以把触发器绑到某个事件源，按事件触发而非时钟触发。\n\n3. 配置投递。\"Edit targets\" 把 schedule 的输出（agent 回复）路由到 channel、其他 agent 或 webhook。\n\n4. 管理。开关 active / disabled、查 \"next run\" 时间、删旧任务。\n\n跟 Goals / Workflows 的区别：\n\n  · Goals —— 长期意图，有状态地跟踪。\n  · Workflows —— 多步序列，常是图形结构。\n  · Scheduler —— 单次触发，按时钟或事件。\n\n典型场景：\n\n  · 每天 9 点向 ops agent 发 \"总结昨天的事故\"。\n  · \"每 15 分钟看一下队列，深度 > N 就动手\"。\n  · webhook 或另一个 agent 发事件时，事件驱动触发。\n\n注意事项：\n\n  · 同一个 agent 的所有 cron 触发共享一个会话——并不会按每次触发隔离。要按次隔离需用 session_mode = \"new\" 且别用 cron（要走 dispatcher 上的 trigger 路径）。\n  · Cron 触发受 per-agent 并发上限影响；长任务会阻塞下一次触发。\n  · Cron 表达式在解析器支持时是秒级精度；保存前看一眼 next-run 预览。",
    "next_run": "下次执行",
    "save_success": "计划已保存",
    "timezone": "时区",
    "weekdays": "工作日",
    "delivery": {
      "targets_label": "投递目标",
      "no_targets": "未配置扇出目标。仍按原有单一投递行为执行。",
      "no_fanout": "无扇出目标",
      "add_target": "添加目标",
      "new_target": "新目标",
      "type_channel": "频道",
      "type_webhook": "Webhook",
      "type_local_file": "本地文件",
      "type_email": "邮件",
      "channel_type": "频道类型",
      "channel_type_helper": "自定义频道类型按原样透传。未知值会在投递时失败,错误信息会列出已配置的适配器。",
      "recipient": "接收者",
      "thread_id": "Thread ID（可选）",
      "account_id": "Account ID（可选）",
      "url": "Webhook URL",
      "auth_header": "Authorization 头（可选）",
      "path": "文件路径",
      "append": "追加（取消勾选则每次覆盖）",
      "email_to": "收件邮箱",
      "subject_template": "主题模板（可选，{job} 为任务名）",
      "custom": "自定义…",
      "add": "添加目标",
      "save": "保存目标",
      "saved": "投递目标已更新",
      "edit_targets": "编辑目标",
      "edit_modal_title": "编辑投递目标",
      "err_pick_type": "请选择目标类型",
      "err_channel_type_required": "频道类型必填",
      "err_recipient_required": "接收者必填",
      "err_url_required": "Webhook URL 必填",
      "err_url_scheme": "Webhook URL 必须以 http:// 或 https:// 开头",
      "err_url_blocked_host": "Webhook 主机不允许 (loopback / 链路本地 / metadata 服务)",
      "err_path_required": "文件路径必填",
      "err_path_absolute": "文件路径必须是工作区相对路径,不能是绝对路径",
      "err_path_traversal": "文件路径不能包含 '..'",
      "err_email_required": "收件邮箱必填"
    }
  },
  "runtime": {
    "title": "运行时",
    "subtitle": "引擎状态与资源管理。",
    "kernel": "运行时环境",
    "environment": "运行环境",
    "engine_version": "引擎版本",
    "system_uptime": "系统运行时间",
    "engine": "引擎信息",
    "git_hash": "Git 提交",
    "build_time": "构建时间",
    "system": "系统状态",
    "queue": "任务队列",
    "pending_tasks": "待处理",
    "running_tasks": "运行中",
    "completed_today": "今日完成",
    "active_agents": "活跃智能体",
    "status": "状态",
    "hostname": "主机名",
    "platform": "平台",
    "rust_version": "Rust 版本",
    "config": "运行配置",
    "default_provider": "默认供应商",
    "default_model": "默认模型",
    "api_listen": "API 监听地址",
    "home_dir": "主目录",
    "log_level": "日志级别",
    "network_enabled": "网络",
    "memory_used": "内存",
    "sessions": "会话数",
    "health_checks": "健康检查",
    "all_passed": "全部通过",
    "degraded": "有异常",
    "queue_config": "队列配置",
    "max_depth_agent": "单 Agent 最大深度",
    "max_depth_global": "全局最大深度",
    "task_ttl": "任务 TTL",
    "lane": "通道",
    "capacity": "容量",
    "no_lanes": "暂无队列通道",
    "enabled": "已启用",
    "disabled": "已禁用",
    "providers": "供应商",
    "channels": "通道",
    "skills": "技能",
    "workflows": "工作流",
    "resources": "资源概览",
    "server_control": "服务器控制",
    "reload_config": "重载配置",
    "reload_success": "配置已重载（{{status}}）",
    "reload_error": "重载配置失败",
    "shutdown": "关闭服务器",
    "shutdown_confirm_title": "确认关闭服务器",
    "shutdown_confirm_desc": "服务器将停止运行，仪表盘将无法访问。",
    "shutdown_confirm": "确认关闭",
    "shutdown_error": "关闭服务器失败",
    "help": "Runtime 是引擎级 dashboard——kernel 健康、构建信息、监听地址、queue / lane 状态、审计链状态、备份、生命周期控制。回答 \"daemon 健不健康，现在在干什么\"。\n\n使用步骤：\n\n1. 健康行。活跃 agent、channel、审计条数、运行时长、构建时间、鉴权模式——一目了然的事实。\n\n2. 审计验证。\"Audit verify\" 走 hash 链报告 valid / invalid。可疑事件后或导出证据前跑一遍。\n\n3. 备份。\"Create backup\" 给 daemon 状态目录做快照。备份列表显示已有备份。\n\n4. 生命周期。重载配置（重读 config.toml，应用热重载字段）、清理 sessions（丢弃 idle 会话状态）、关闭（停 daemon——重启需外部命令）。\n\n典型场景：\n\n  · 改完配置：点 Reload，无需重启即可生效。\n  · 部署前 / 事故前：做备份以便回滚状态。\n  · 导出审计前确认链条完好。\n\n注意事项：\n\n  · Reload 只生效热重载字段——某些改动仍需完整重启（字段旁会有 \"needs restart\" 提示）。\n  · 清理 sessions 不破坏数据：只丢内存缓存，不动持久历史。\n  · 部分 per-agent 上限（如 max_concurrent_invocations）不会在 reload 时生效；要让 agent 重生才能生效。",
    "load_error": "加载运行时概览失败",
    "load_error_desc": "核心运行时数据暂时无法加载。请在守护进程和 API 健康检查恢复后重试。",
    "panics": "Panic 次数",
    "restarts": "重启次数",
    "database": "数据库",
    "embedding": "Embedding",
    "proactive_memory": "主动记忆",
    "extraction_model": "提取模型",
    "config_warnings": "配置告警",
    "no_warnings": "无告警",
    "security": "安全状态",
    "core_protections": "核心防护",
    "rate_limiter": "速率限制",
    "websocket_limits": "WebSocket 限制",
    "wasm_sandbox": "WASM 沙箱",
    "auth_mode": "认证模式",
    "audit_trail": "审计链",
    "taint_tracking": "污点追踪",
    "manifest_signing": "清单签名",
    "features_enabled": "已启用 {{count}} 项",
    "audit": "审计日志",
    "audit_verify": "验证链",
    "audit_valid": "链完整",
    "audit_invalid": "链损坏",
    "audit_entries": "{{count}} 条记录",
    "audit_not_verified": "审计链尚未验证",
    "audit_verified_ok": "审计链验证通过（{{count}} 条记录）",
    "audit_verified_invalid": "审计链无效 - 检测到篡改",
    "no_audit": "暂无审计事件",
    "backups": "备份管理",
    "create_backup": "创建备份",
    "restore": "恢复",
    "no_backups": "暂无备份",
    "backup_created": "备份已创建",
    "backup_error": "备份失败",
    "restore_success": "恢复完成，请重启守护进程。",
    "restore_error": "恢复失败",
    "restore_confirm_title": "恢复备份",
    "restore_confirm_desc": "当前运行时状态将被此备份中的数据替换。",
    "restore_confirm": "恢复备份",
    "delete_backup_confirm_title": "删除备份",
    "delete_backup_confirm_desc": "该备份文件将被永久删除。",
    "delete_backup_confirm": "确认删除此备份？",
    "task_queue": "任务队列",
    "total_tasks": "总计",
    "pending_count": "待处理",
    "in_progress_count": "进行中",
    "completed_count": "已完成",
    "failed_count": "失败",
    "no_tasks": "暂无排队任务",
    "retry": "重试",
    "cancel_task": "取消",
    "cleanup_sessions": "清理会话",
    "sessions_deleted": "已清理 {{count}} 个会话",
    "tokens_per_min": "tok/min",
    "max_per_ip": "最大连接/IP",
    "idle_timeout": "空闲超时",
    "max_msg_size": "最大消息大小",
    "max_msg_min": "最大消息数/分",
    "fuel_limit": "Fuel 上限",
    "timeout": "超时"
  },
  "logs": {
    "title": "日志",
    "subtitle": "实时系统日志。",
    "export_json": "导出 JSON",
    "timestamp": "时间戳",
    "module": "模块",
    "agent": "智能体",
    "message": "内容",
    "all_modules": "全部模块",
    "help": "Logs 是实时诊断流——daemon tracing 层产出的结构化日志事件，可按模块过滤、按文本搜索。用于 \"运行时此刻在说什么\" 的调试；要看防篡改历史去 Audit trail。\n\n使用步骤：\n\n1. 按模块过滤。下拉选某个子系统（kernel / runtime / channel 等）。\"All modules\" 显示全部。\n\n2. 搜索。对消息体的自由文本匹配——找 agent id、channel 名或某个错误字符串很有用。\n\n3. 导出 JSON。把当前视图导出成 JSON，分享给支持人员或喂给外部日志工具。\n\n跟 Audit trail 的区别：\n\n  · Logs —— 诊断、细粒度、易失。回答 \"现在发生了什么\"。\n  · Audit trail —— 仅特权操作、hash 链、持久。回答 \"谁在何时做了什么\"。\n\n典型场景：\n\n  · 看 agent 启动并确认每个子系统都注册成功。\n  · 抓 5xx 时按 request id grep 日志。\n  · 抓事故前后日志导出 JSON 写 bug 报告。\n\n注意事项：\n\n  · 日志量有上限，旧事件会被挤掉。要长期保留可跑外部采集器（或抓 Prometheus）。\n  · 模块过滤是服务端做的；搜索是客户端在已加载数据上做的。\n  · 日志不会自动脱敏——如果消息可能含密钥或 PII，导出时要小心。"
  },
  "settings": {
    "title": "设置",
    "subtitle": "系统参数管理。",
    "appearance": "外观",
    "theme": "界面主题",
    "language": "语言",
    "theme_light": "浅色",
    "theme_dark": "深色",
    "system_config": "系统配置",
    "nav_layout": "导航菜单布局",
    "nav_grouped": "分组",
    "nav_collapsible": "二级菜单",
    "theme_desc": "切换界面明暗模式",
    "language_desc": "界面显示语言",
    "nav_layout_desc": "侧边栏导航折叠方式",
    "tools_title": "工具",
    "tools_search": "搜索工具...",
    "change_password": "修改凭证",
    "change_credentials": "修改凭证",
    "new_username": "新用户名",
    "username_too_short": "用户名至少需要 2 个字符",
    "pw_current": "当前密码",
    "pw_verify_identity": "验证身份",
    "pw_current_placeholder": "输入当前密码以确认操作",
    "pw_new": "新密码",
    "pw_leave_blank": "留空则保持不变",
    "pw_confirm": "确认新密码",
    "pw_submit": "保存",
    "pw_success": "凭证修改成功，正在跳转至登录页...",
    "pw_failed": "凭证修改失败",
    "pw_mismatch": "两次输入的新密码不一致",
    "pw_empty": "新密码不能为空",
    "pw_too_short": "密码长度不能少于 8 个字符",
    "pw_no_changes": "未检测到任何变更",
    "security": "安全",
    "totp_title": "TOTP 二次验证",
    "totp_desc": "审批关键工具执行时需要验证器应用的验证码",
    "totp_enrolled": "已注册",
    "totp_not_enrolled": "未注册",
    "totp_enforced": "已启用",
    "totp_setup": "设置 TOTP",
    "totp_reset": "重置 TOTP",
    "totp_revoke": "撤销 TOTP",
    "totp_scan": "扫描二维码或在验证器应用中手动输入密钥：",
    "totp_confirm": "确认",
    "totp_recovery_title": "恢复码（请保存到安全的地方）：",
    "totp_recovery_reveal": "显示恢复码",
    "totp_recovery_hide": "隐藏恢复码",
    "totp_reset_placeholder": "当前 TOTP 或恢复码",
    "totp_verify_reset": "验证并重置",
    "totp_revoke_placeholder": "TOTP 或恢复码",
    "totp_confirm_revoke": "确认撤销",
    "totp_setup_failed": "设置失败",
    "totp_revoke_failed": "撤销失败",
    "totp_revoked_success": "TOTP 已撤销。请在配置中设置 second_factor = \"none\"。",
    "totp_confirmed_success": "TOTP 已确认。请在配置中设置 second_factor = \"totp\" 以强制启用。",
    "totp_invalid_code": "验证码无效",
    "totp_no_recovery": "恢复码已用完。请重置 TOTP 以生成新恢复码。",
    "totp_low_recovery": "仅剩 {{count}} 个恢复码。",
    "auto_dream": "梦境模式",
    "auto_dream_on": "已启用",
    "auto_dream_off": "已禁用",
    "auto_dream_desc": "定期让开启选项的 Agent 整合自身记忆。在下方逐个切换 Agent 的开关，并在 config.toml 的 [auto_dream] enabled 中打开全局开关。",
    "auto_dream_load_err": "加载梦境模式状态失败",
    "auto_dream_no_agents": "尚无 Agent 加入。在 Agent manifest 中设置 auto_dream_enabled = true。",
    "auto_dream_no_agents_registered": "尚未注册任何 Agent。请先创建 Agent，再在此处开启。",
    "auto_dream_opt_in_hint": "未加入 —— 打开开关以纳入调度器。",
    "auto_dream_opt_out_running": "梦境运行中被关闭 —— 当前任务会完成或可手动中止。",
    "auto_dream_cache": "缓存",
    "auto_dream_cache_title": "本次梦境的 prompt cache 命中率 —— 数值越高，表示前缀有更多部分从 Anthropic 缓存读取，而非按全价重新计费。",
    "auto_dream_cost_title": "本次梦境 turn 的实际 provider 成本（输入 + 输出，缓存命中部分按折扣价计费）。",
    "auto_dream_enrolled": "已加入",
    "auto_dream_not_enrolled": "关闭",
    "auto_dream_enrolled_ok": "Agent 已加入",
    "auto_dream_unenrolled_ok": "Agent 已退出",
    "auto_dream_toggle_title": "切换此 Agent 的梦境加入状态",
    "auto_dream_every": "每",
    "auto_dream_effective_title": "实际生效的阈值 —— manifest 覆盖值优先于全局默认",
    "auto_dream_sessions_progress_title": "距上次梦境被触及的会话数 / 触发阈值",
    "auto_dream_last": "上次",
    "auto_dream_next": "下次",
    "auto_dream_sessions_since": "个会话",
    "auto_dream_trigger": "立即梦境",
    "auto_dream_fired": "整合已触发",
    "auto_dream_abort": "中止",
    "auto_dream_aborted": "中止信号已发出",
    "auto_dream_phase": "阶段",
    "auto_dream_tool_calls": "次工具调用",
    "auto_dream_memories_touched": "条记忆被修改",
    "auto_dream_status_running": "运行中",
    "auto_dream_status_completed": "已完成",
    "auto_dream_status_failed": "失败",
    "auto_dream_status_aborted": "已中止",
    "auto_dream_dur_minute": "分钟",
    "auto_dream_dur_hour": "小时",
    "auto_dream_dur_day": "天",
    "auto_dream_dur_week": "周",
    "help": "Dashboard 偏好与账号级开关。改本地 UI 设置、管理 TOTP、触发 Auto-Dream 都在这里——这里不修改磁盘上的 kernel 配置（那是 Config 页的工作）。\n\n页面内容：\n\n  · UI 偏好——语言（English / 中文）、主题（明 / 暗）、侧栏默认折叠。存在浏览器 localStorage，按设备隔离。\n  · TOTP 启用——给敏感操作（审批、删调度、装插件）加一道 6 位验证码。Setup 给你二维码和恢复码；Revoke 移除该校验。\n  · Auto-Dream——定期后台跑一遍，agent 复盘自己的会话日志、产生记忆更新。可手动触发、看正在跑的进度、开/关每日定时。\n\nSettings（本页）vs Config：\n\n  · Settings——单用户、单浏览器的轻量级 UI / 账号开关。\n  · Config (/dashboard/config)——kernel 级 TOML 编辑器：providers、channels、MCP servers、plugin 策略、运行时上限。那里改完要重载 kernel。\n\n注意事项：\n\n  · TOTP 密钥加密存在 kernel vault 里。Authenticator 和恢复码都丢的话，要管理员改配置并重启才能恢复。\n  · Auto-Dream 跑在 kernel 里，用 agent 自己的 session，会计入该 agent 的预算。如果你启用了 TOTP，\"Run now\" 按钮也要 6 位码。\n  · 主题/语言切换即时生效，不需要重载 kernel。",
    "backup": "备份",
    "export_config_btn": "导出配置",
    "export_config_desc": "将当前配置下载为 TOML 文件。",
    "export_config_title": "导出配置"
  },
  "config": {
    "title": "系统配置",
    "desc": "查看和编辑 config.toml 配置项",
    "reload": "重新加载",
    "view_raw_toml": "查看 TOML 源文件",
    "raw_toml_title": "config.toml",
    "raw_toml_error": "加载 config.toml 失败",
    "hot_reload": "热加载",
    "root_level": "根级",
    "no_section": "未找到配置项",
    "cat_general": "通用",
    "cat_memory": "记忆",
    "cat_tools": "工具",
    "cat_channels": "频道",
    "cat_security": "安全",
    "cat_network": "网络",
    "cat_infra": "基础设施",
    "sec_general": "通用",
    "sec_default_model": "默认模型",
    "sec_thinking": "思考模式",
    "sec_budget": "预算",
    "sec_reload": "重载",
    "sec_memory": "记忆",
    "sec_proactive_memory": "主动记忆",
    "sec_web": "网络搜索",
    "sec_browser": "浏览器",
    "sec_links": "链接",
    "sec_media": "媒体",
    "sec_tts": "语音合成",
    "sec_canvas": "画布",
    "sec_channels": "频道",
    "sec_broadcast": "广播",
    "sec_auto_dream": "梦境模式",
    "sec_auto_reply": "自动回复",
    "sec_approval": "审批",
    "sec_exec_policy": "执行策略",
    "sec_vault": "密钥库",
    "sec_oauth": "OAuth",
    "sec_external_auth": "外部认证",
    "sec_network": "网络",
    "sec_a2a": "A2A",
    "sec_pairing": "配对",
    "sec_docker": "Docker",
    "sec_extensions": "扩展",
    "sec_session": "会话",
    "sec_queue": "队列",
    "sec_webhook_triggers": "Webhook 触发器",
    "sec_vertex_ai": "Vertex AI",
    "sec_audit": "审计日志",
    "sec_azure_openai": "Azure OpenAI",
    "sec_compaction": "会话压缩",
    "sec_context_engine": "上下文引擎",
    "sec_fallback_providers": "备用提供商",
    "sec_health_check": "健康检查",
    "sec_heartbeat": "心跳",
    "sec_inbox": "文件收件箱",
    "sec_llm": "LLM",
    "sec_notification": "通知",
    "sec_parallel_tools": "并行工具",
    "sec_plugins": "插件",
    "sec_privacy": "隐私",
    "sec_prompt_intelligence": "Prompt 智能",
    "sec_provider_proxy_urls": "提供商代理 URL",
    "sec_provider_regions": "提供商区域",
    "sec_provider_request_timeout_secs": "提供商请求超时（秒）",
    "sec_provider_urls": "提供商基础 URL",
    "sec_proxy": "代理",
    "sec_rate_limit": "速率限制",
    "sec_registry": "注册表",
    "sec_sanitize": "清理",
    "sec_sidecar_channels": "Sidecar 通道",
    "sec_skills": "技能",
    "sec_taint_rules": "污点规则",
    "sec_task_board": "任务面板",
    "sec_telemetry": "遥测",
    "sec_tool_invoke": "工具调用",
    "sec_tool_policy": "工具策略",
    "sec_tool_results": "工具结果",
    "sec_tool_timeouts": "工具超时（秒）",
    "sec_triggers": "触发器",
    "map_empty": "暂无条目 — 点击添加创建",
    "map_key": "键",
    "map_value": "值",
    "list_empty": "暂无项目 — 点击添加创建",
    "add_row": "添加",
    "add_item": "添加",
    "remove_row": "删除",
    "remove_item": "删除",
    "expand": "展开",
    "collapse": "折叠",
    "fields_unit": "个字段",
    "fld_alert_threshold": "告警阈值",
    "fld_allowed_commands": "允许的命令",
    "fld_allowed_domains": "允许的域名",
    "fld_allowed_tags": "允许的标签",
    "fld_allowlist": "允许列表",
    "fld_anchor_path": "锚点文件路径",
    "fld_api_key": "API 密钥",
    "fld_api_key_env": "API 密钥环境变量",
    "fld_api_listen": "API 监听地址",
    "fld_api_requests_per_minute": "每分钟 API 请求数",
    "fld_api_version": "API 版本",
    "fld_artifact_max_age_days": "制品最大保留天数",
    "fld_audience": "受众",
    "fld_auth_rate_limit_per_ip": "每 IP 认证速率限制",
    "fld_audio_model": "音频模型",
    "fld_audio_provider": "音频提供商",
    "fld_audio_transcription": "音频转写",
    "fld_auto_approve": "自动审批",
    "fld_auto_approve_autonomous": "自主模式自动审批",
    "fld_auto_memorize": "自动记忆",
    "fld_auto_reconnect": "自动重连",
    "fld_auto_retrieve": "自动检索",
    "fld_auto_start_observability_stack": "自动启动可观测性栈",
    "fld_base_url": "基础 URL",
    "fld_bootstrap_peers": "引导节点",
    "fld_budget_tokens": "预算 Token 数",
    "fld_cache_ttl_minutes": "缓存 TTL（分钟）",
    "fld_cache_ttl_secs": "缓存 TTL（秒）",
    "fld_check_interval_secs": "检查间隔（秒）",
    "fld_chromium_path": "Chromium 路径",
    "fld_cleanup_interval_hours": "清理间隔（小时）",
    "fld_claim_ttl_secs": "认领 TTL（秒）",
    "fld_client_id": "客户端 ID",
    "fld_client_secret_env": "客户端密钥环境变量",
    "fld_confidence_decay_rate": "置信度衰减率",
    "fld_consolidation_interval_hours": "合并间隔（小时）",
    "cleanup_interval_hours_0": "禁用",
    "cleanup_interval_hours_1": "每小时",
    "cleanup_interval_hours_6": "每 6 小时",
    "cleanup_interval_hours_12": "每 12 小时",
    "cleanup_interval_hours_24": "每天",
    "cleanup_interval_hours_48": "每两天",
    "cleanup_interval_hours_168": "每周",
    "consolidation_interval_hours_0": "禁用",
    "consolidation_interval_hours_1": "每小时",
    "consolidation_interval_hours_6": "每 6 小时",
    "consolidation_interval_hours_12": "每 12 小时",
    "consolidation_interval_hours_24": "每天",
    "consolidation_interval_hours_48": "每两天",
    "consolidation_interval_hours_168": "每周",
    "fld_consolidation_threshold": "合并阈值",
    "fld_container_prefix": "容器前缀",
    "fld_cooldown_secs": "冷却时间（秒）",
    "fld_cpu_limit": "CPU 限制",
    "fld_custom_block_patterns": "自定义拦截模式",
    "fld_credentials_path": "凭证路径",
    "fld_debounce_ms": "防抖时间（毫秒）",
    "fld_decay_rate": "衰减率",
    "fld_default_agent": "默认 Agent",
    "fld_default_max_llm_tokens_per_hour": "每小时最大 LLM Token 数",
    "fld_default_timeout_secs": "默认超时（秒）",
    "fld_deployment": "部署名称",
    "fld_directory": "监听目录",
    "fld_disable_input_sanitizer": "禁用输入过滤",
    "fld_disabled": "禁用的技能",
    "fld_discord": "Discord",
    "fld_duplicate_threshold": "去重阈值",
    "fld_email": "邮件",
    "fld_emit_caller_trace_headers": "发送调用者追踪头",
    "fld_embedding_api_key_env": "Embedding API 密钥环境变量",
    "fld_embedding_model": "Embedding 模型",
    "fld_embedding_provider": "Embedding 提供商",
    "fld_enabled": "启用",
    "fld_endpoint": "服务端点",
    "fld_engine": "引擎",
    "fld_env_passthrough_denied_patterns": "环境变量传递拒绝模式",
    "fld_extra_dirs": "额外技能目录",
    "fld_extract_categories": "提取分类",
    "fld_extraction_model": "提取模型",
    "fld_extraction_threshold": "提取阈值",
    "fld_fold_min_batch_size": "折叠最小批量",
    "fld_github_client_id": "GitHub 客户端 ID",
    "fld_google_chat": "Google Chat",
    "fld_google_client_id": "Google 客户端 ID",
    "fld_hash_prompts": "对提示词计算哈希",
    "fld_headless": "无头模式",
    "fld_health_check_interval_secs": "健康检查间隔（秒）",
    "fld_history_fold_after_turns": "历史折叠轮数",
    "fld_http_proxy": "HTTP 代理",
    "fld_https_proxy": "HTTPS 代理",
    "fld_idle_timeout_secs": "空闲超时（秒）",
    "fld_image": "镜像",
    "fld_image_description": "图片描述",
    "fld_image_provider": "图片提供商",
    "fld_issuer_url": "签发者 URL",
    "fld_keep_recent": "保留最近条数",
    "fld_language": "语言",
    "fld_listen_addresses": "监听地址",
    "fld_listen_path": "监听路径",
    "fld_load_user": "加载用户技能",
    "fld_lock_dir": "锁目录",
    "fld_log_level": "日志级别",
    "fld_matrix": "Matrix",
    "fld_mattermost": "Mattermost",
    "fld_max_age_secs": "最大存活时间（秒）",
    "fld_max_artifact_bytes": "制品最大字节数",
    "fld_max_bytes_per_turn": "每轮最大字节数",
    "fld_max_chunk_chars": "最大分块字符数",
    "fld_max_concurrency": "最大并发数",
    "fld_max_concurrent": "最大并发数",
    "fld_max_content_bytes": "最大内容字节数",
    "fld_max_cron_jobs": "最大定时任务数",
    "fld_max_daily_usd": "每日最大花费（美元）",
    "fld_max_depth": "最大深度",
    "fld_max_depth_global": "全局最大队列深度",
    "fld_max_depth_per_agent": "每个 Agent 最大队列深度",
    "fld_max_devices": "最大设备数",
    "fld_max_hourly_usd": "每小时最大花费（美元）",
    "fld_max_html_bytes": "最大 HTML 字节数",
    "fld_max_links": "最大链接数",
    "fld_max_memories_per_agent": "每个 Agent 最大记忆数",
    "fld_max_message_length": "最大消息长度",
    "fld_max_monthly_usd": "每月最大花费（美元）",
    "fld_max_output_bytes": "最大输出字节数",
    "fld_max_payload_bytes": "最大负载字节数",
    "fld_max_peers": "最大节点数",
    "fld_max_per_event": "每事件最大触发数",
    "fld_max_retries": "最大重试次数",
    "fld_max_retrieve": "最大检索数",
    "fld_max_sessions": "最大会话数",
    "fld_max_sessions_per_agent": "每个 Agent 最大会话数",
    "fld_max_summary_tokens": "摘要最大 Token 数",
    "fld_max_text_length": "最大文本长度",
    "fld_max_versions_per_agent": "每个 Agent 最大版本数",
    "fld_max_workflow_secs": "最大工作流时间（秒）",
    "fld_max_ws_per_ip": "每 IP 最大 WebSocket 连接数",
    "fld_mcp_default_safety": "MCP 默认安全级别",
    "fld_mcp_readonly_allowlist": "MCP 只读允许列表",
    "fld_mdns_enabled": "mDNS 启用",
    "fld_memory_limit": "内存限制",
    "fld_microsoft_client_id": "Microsoft 客户端 ID",
    "fld_min_hours": "最小间隔（小时）",
    "fld_min_sessions": "最小会话数",
    "fld_mode": "模式",
    "fld_model": "模型",
    "fld_network": "网络",
    "fld_network_enabled": "网络启用",
    "fld_no_output_timeout_secs": "无输出超时（秒）",
    "fld_no_proxy": "不走代理的地址",
    "fld_ntfy_topic": "Ntfy 主题",
    "fld_ntfy_url": "Ntfy URL",
    "fld_otlp_endpoint": "OTLP 端点",
    "fld_path": "路径",
    "fld_pids_limit": "PID 限制",
    "fld_plugin": "插件",
    "fld_plugin_stack": "插件栈",
    "fld_plugin_stack_weights": "插件栈权重",
    "fld_poll_interval_secs": "轮询间隔（秒）",
    "fld_project_id": "项目 ID",
    "fld_prometheus_enabled": "启用 Prometheus",
    "fld_prompt_caching": "提示缓存",
    "fld_provider": "提供商",
    "fld_push_provider": "推送提供商",
    "fld_rate_limit_per_minute": "每分钟速率限制",
    "fld_read_only_root": "只读根目录",
    "fld_redact_patterns": "脱敏正则模式",
    "fld_reconnect_max_attempts": "最大重连次数",
    "fld_reconnect_max_backoff_secs": "最大重连退避时间（秒）",
    "fld_redirect_url": "重定向 URL",
    "fld_region": "区域",
    "fld_registry_mirror": "注册表镜像 URL",
    "fld_require_approval": "需要审批",
    "fld_retention_days": "保留天数",
    "fld_retry_after_secs": "限流重试等待（秒）",
    "fld_reuse_cool_secs": "复用冷却时间（秒）",
    "fld_routes": "路由",
    "fld_safe_bins": "安全二进制文件",
    "fld_sample_rate": "采样率",
    "fld_scopes": "权限范围",
    "fld_search_provider": "搜索提供商",
    "fld_service_name": "服务名称",
    "fld_session_ttl_hours": "会话 TTL（小时）",
    "fld_session_ttl_secs": "会话 TTL（秒）",
    "fld_shared_secret": "共享密钥",
    "fld_signal": "Signal",
    "fld_slack": "Slack",
    "fld_slack_client_id": "Slack 客户端 ID",
    "fld_sqlite_path": "SQLite 路径",
    "fld_spill_threshold_bytes": "溢出阈值字节数",
    "fld_stable_prefix_mode": "稳定前缀模式",
    "fld_strategy": "策略",
    "fld_stream_thinking": "流式思考",
    "fld_subagent_max_concurrent": "最大并发子 Agent 数",
    "fld_subagent_max_depth": "子 Agent 最大嵌套深度",
    "fld_suppress_patterns": "抑制模式",
    "fld_sweep_interval_secs": "扫描间隔（秒）",
    "fld_task_ttl_secs": "任务 TTL（秒）",
    "fld_teams": "Teams",
    "fld_telegram": "Telegram",
    "fld_threshold_messages": "触发压缩的消息数",
    "fld_timeout_secs": "超时（秒）",
    "fld_token_env": "Token 环境变量",
    "fld_token_expiry_secs": "Token 过期时间（秒）",
    "fld_token_threshold_ratio": "Token 阈值比例",
    "fld_totp_issuer": "TOTP 签发方名称",
    "fld_usage_footer": "使用量页脚",
    "usage_footer_off": "关闭",
    "usage_footer_tokens": "Token 数",
    "usage_footer_cost": "费用",
    "usage_footer_full": "完整（Token + 费用）",
    "fld_video_description": "视频描述",
    "fld_viewport_height": "视口高度",
    "fld_viewport_width": "视口宽度",
    "fld_whatsapp": "WhatsApp",
    "fld_workdir": "工作目录",
    "fld_workspaces_dir": "工作区目录",
    "fld_ws_debounce_chars": "WS 防抖字符数",
    "fld_ws_debounce_ms": "WS 防抖时间（毫秒）",
    "fld_ws_idle_timeout_secs": "WS 空闲超时（秒）",
    "fld_ws_messages_per_minute": "WS 每分钟消息数",
    "fld_ws_terminal_messages_per_minute": "WS 终端每分钟消息数",
    "desc_api_listen": "API 服务器监听地址和端口，如 127.0.0.1:4545（仅本机）或 0.0.0.0:4545（所有网卡）",
    "desc_api_key": "用于验证 Dashboard 和 API 请求的密钥",
    "desc_api_key_env": "存放提供商 API 密钥的环境变量名",
    "desc_log_level": "日志输出级别",
    "desc_network_enabled": "启用 P2P 网络，支持多节点通信",
    "desc_mode": "内核运行模式 — stable（稳定）、default（默认）或 dev（开发）",
    "desc_language": "Agent 回复的默认语言",
    "desc_usage_footer": "每次回复后显示的使用量信息",
    "desc_stable_prefix_mode": "使用稳定的消息 ID 前缀以实现确定性缓存",
    "desc_prompt_caching": "启用提示缓存以降低重复前缀的 API 成本",
    "desc_max_cron_jobs": "每个 Agent 的最大定时任务数",
    "desc_workspaces_dir": "Agent 工作区数据存储目录",
    "desc_provider": "用于此模型的 LLM 提供商",
    "desc_model": "用于推理的模型标识符",
    "desc_base_url": "自定义 API 基础 URL（留空使用提供商默认值）",
    "desc_sqlite_path": "记忆存储的 SQLite 数据库文件路径",
    "desc_embedding_model": "用于生成文本向量的模型",
    "desc_consolidation_threshold": "触发记忆合并的记忆数量阈值",
    "desc_decay_rate": "记忆相关性随时间衰减的速率（0-1）",
    "desc_embedding_provider": "向量生成提供商（auto = 自动探测）",
    "desc_embedding_api_key_env": "向量提供商 API 密钥的环境变量",
    "desc_consolidation_interval_hours": "自动记忆合并的运行间隔",
    "desc_enabled": "启用或禁用此功能",
    "desc_auto_memorize": "自动从对话中提取并存储事实",
    "desc_auto_retrieve": "对话时自动召回相关记忆",
    "desc_max_retrieve": "每次查询最多检索的记忆条数",
    "desc_extraction_threshold": "自动记忆提取的置信度阈值（0-1）",
    "desc_extraction_model": "用于记忆提取的模型（留空使用默认模型）",
    "desc_extract_categories": "要提取的信息类别（如事实、偏好）",
    "desc_session_ttl_hours": "会话不活跃多少小时后过期",
    "desc_confidence_decay_rate": "记忆置信度随时间降低的速率",
    "desc_duplicate_threshold": "记忆去重的相似度阈值（0-1）",
    "desc_max_memories_per_agent": "每个 Agent 的最大存储记忆数",
    "desc_search_provider": "Agent 研究任务使用的网络搜索提供商",
    "desc_cache_ttl_minutes": "网络搜索结果的缓存时间（分钟）",
    "desc_headless": "以无头模式运行浏览器（无可见窗口）",
    "desc_viewport_width": "浏览器视口宽度（像素）",
    "desc_viewport_height": "浏览器视口高度（像素）",
    "desc_timeout_secs": "操作超时时间（秒）",
    "desc_idle_timeout_secs": "资源空闲多少秒后释放",
    "desc_max_sessions": "最大并发浏览器会话数",
    "desc_chromium_path": "自定义 Chromium 二进制文件路径（留空使用内置版本）",
    "desc_listen_addresses": "P2P 网络监听地址，使用 multiaddr 格式（如 /ip4/0.0.0.0/tcp/4001）",
    "desc_bootstrap_peers": "启动时连接的初始节点地址",
    "desc_mdns_enabled": "启用 mDNS 自动发现局域网内的节点",
    "desc_max_peers": "P2P 网络最大连接节点数",
    "desc_shared_secret": "P2P 网络认证的共享密钥",
    "desc_auto_reconnect": "MCP 服务器断开后自动重连",
    "desc_reconnect_max_attempts": "最大重连尝试次数",
    "desc_reconnect_max_backoff_secs": "重连尝试之间的最大退避时间",
    "desc_health_check_interval_secs": "向 MCP 服务器发送健康检查的间隔（秒）",
    "desc_image_description": "使用视觉模型自动描述图片",
    "desc_audio_transcription": "启用音频自动转写",
    "desc_video_description": "启用视频自动描述",
    "desc_max_concurrency": "最大并发媒体处理任务数",
    "desc_image_provider": "图片生成/分析提供商",
    "desc_audio_model": "音频转录使用的模型（留空使用提供商默认值）",
    "desc_audio_provider": "音频转写提供商",
    "desc_max_links": "每条消息最多提取的链接数",
    "desc_max_content_bytes": "从链接获取内容的最大字节数",
    "desc_budget_tokens": "扩展思考分配的最大 Token 数",
    "desc_stream_thinking": "实时流式传输思考过程 Token",
    "desc_max_hourly_usd": "每小时最大花费（美元，0 = 不限）",
    "desc_max_daily_usd": "每天最大花费（美元，0 = 不限）",
    "desc_max_monthly_usd": "每月最大花费（美元，0 = 不限）",
    "desc_alert_threshold": "预算使用百分比达到多少时告警（0-1）",
    "desc_default_max_llm_tokens_per_hour": "每个 Agent 每小时的默认 Token 速率限制",
    "desc_require_approval": "需要人工审批才能执行的工具类别",
    "desc_auto_approve_autonomous": "自主模式下自动批准工具调用",
    "desc_auto_approve": "自动批准所有工具调用（覆盖 require_approval）",
    "desc_safe_bins": "允许列表模式下允许执行的二进制文件",
    "desc_allowed_commands": "允许列表模式下允许的 Shell 命令",
    "desc_max_output_bytes": "命令执行的最大输出字节数",
    "desc_no_output_timeout_secs": "命令无输出多少秒后终止",
    "desc_strategy": "多频道广播的消息投递策略",
    "desc_routes": "广播消息的频道路由规则",
    "desc_max_concurrent": "最大并发自动回复处理任务数",
    "desc_suppress_patterns": "匹配时不自动回复的正则表达式",
    "desc_max_html_bytes": "Canvas HTML 内容的最大字节数",
    "desc_allowed_tags": "Canvas 内容中允许的 HTML 标签",
    "desc_max_text_length": "语音合成的最大文本长度",
    "desc_image": "用于沙箱执行的 Docker 镜像",
    "desc_container_prefix": "Docker 容器名称前缀",
    "desc_workdir": "Docker 容器内的工作目录",
    "desc_network": "Docker 容器连接的网络",
    "desc_memory_limit": "Docker 容器内存限制（如 512m、1g）",
    "desc_cpu_limit": "Docker 容器 CPU 限制（如 1.0 = 1 核）",
    "desc_read_only_root": "将容器根文件系统挂载为只读",
    "desc_pids_limit": "容器内最大进程数",
    "desc_reuse_cool_secs": "停止的容器多少秒后可被复用",
    "desc_max_age_secs": "容器最大存活时间（秒）",
    "desc_max_devices": "远程审批的最大配对设备数",
    "desc_token_expiry_secs": "配对令牌过期时间（秒）",
    "desc_push_provider": "移动端审批推送通知提供商",
    "desc_ntfy_url": "Ntfy 推送通知服务器 URL",
    "desc_ntfy_topic": "Ntfy 推送通知主题名称",
    "desc_totp_issuer": "TOTP 验证器中显示的签发方名称",
    "desc_token_env": "存放 Webhook 认证令牌的环境变量",
    "desc_max_payload_bytes": "Webhook 负载最大字节数",
    "desc_rate_limit_per_minute": "每分钟最大 Webhook 请求数",
    "desc_project_id": "Vertex AI 的 Google Cloud 项目 ID",
    "desc_region": "Vertex AI 的 Google Cloud 区域（如 us-central1）",
    "desc_credentials_path": "Google Cloud 服务账号凭证 JSON 文件路径",
    "desc_google_client_id": "Google OAuth 客户端 ID",
    "desc_github_client_id": "GitHub OAuth 客户端 ID",
    "desc_microsoft_client_id": "Microsoft OAuth 客户端 ID",
    "desc_slack_client_id": "Slack OAuth 客户端 ID",
    "desc_retention_days": "会话历史保留天数",
    "desc_max_sessions_per_agent": "每个 Agent 的最大保存会话数",
    "desc_cleanup_interval_hours": "会话清理运行间隔（小时）",
    "desc_max_depth_per_agent": "每个 Agent 的最大排队任务数",
    "desc_max_depth_global": "所有 Agent 的全局最大排队任务数",
    "desc_task_ttl_secs": "排队任务过期时间（秒）",
    "desc_issuer_url": "外部认证的 OIDC 签发者 URL",
    "desc_client_id": "外部认证提供商的 OAuth 客户端 ID",
    "desc_client_secret_env": "存放 OAuth 客户端密钥的环境变量",
    "desc_redirect_url": "OAuth 回调 URL",
    "desc_scopes": "请求的 OAuth 权限范围",
    "desc_allowed_domains": "允许通过外部认证登录的邮箱域名",
    "desc_audience": "JWT Token 中期望的 audience 声明",
    "desc_session_ttl_secs": "外部认证会话有效期（秒）",
    "desc_listen_path": "A2A 协议端点的 URL 路径",
    "desc_debounce_ms": "配置文件变更检测的防抖时间（毫秒）",
    "desc_allowlist": "可通过 REST 端点调用的工具名 glob 模式（需同时设置 enabled = true）",
    "desc_anchor_path": "用于防篡改检测的外部 Merkle 锚点文件路径；留空则使用默认的 data_dir/audit.anchor",
    "desc_api_requests_per_minute": "每个 IP 每分钟的 API Token 配额，采用 GCRA 算法",
    "desc_api_version": "Azure OpenAI API 版本（如 2024-02-01）",
    "desc_artifact_max_age_days": "守护进程启动时清理超过此天数的溢出制品；设为 0 禁用清理",
    "desc_auth_rate_limit_per_ip": "每个 IP 在 15 分钟窗口内的最大登录尝试次数；设为 0 禁用",
    "desc_auto_start_observability_stack": "守护进程启动时自动拉起捆绑的 Grafana/Prometheus/Tempo/OTel Docker 栈",
    "desc_cache_ttl_secs": "注册表缓存被视为过期并重新下载前的秒数",
    "desc_claim_ttl_secs": "进行中任务最长认领秒数，超时后扫描器将其重置为待处理；设为 0 禁用",
    "desc_cooldown_secs": "触发器两次触发之间的默认冷却时间（秒）",
    "desc_custom_block_patterns": "在输入过滤时触发拦截或警告的额外正则表达式",
    "desc_default_agent": "收件箱文件中没有 agent: 指令时，将文件发送给该 Agent",
    "desc_default_timeout_secs": "Agent 被判定为无响应的默认阈值（秒）",
    "desc_deployment": "Azure OpenAI 部署名称（如 gpt-4o）；回退到 AZURE_OPENAI_DEPLOYMENT 环境变量或默认模型名",
    "desc_directory": "监听传入文件的目录",
    "desc_disable_input_sanitizer": "紧急关闭开关——禁用所有输入过滤；建议用 mode = warn 进行监控而非完全关闭",
    "desc_disabled": "在不删除目录的情况下跳过加载的技能名称列表",
    "desc_emit_caller_trace_headers": "在出站 LLM 请求中发送 x-librefang-agent/session/step-id 头，便于可观测性系统关联请求",
    "desc_endpoint": "Azure 资源端点 URL（如 https://my-resource.openai.azure.com）",
    "desc_engine": "内置上下文引擎：default（默认）、summary（LLM 压缩）或 no_compact（禁用自动压缩）",
    "desc_env_passthrough_denied_patterns": "阻止技能传递匹配环境变量的 glob 模式；可通过 env_passthrough_per_skill 按技能覆盖",
    "desc_extra_dirs": "除 ~/.librefang/skills/ 外额外扫描的技能目录",
    "desc_fold_min_batch_size": "触发折叠前需要积累的过期工具结果消息数，减少每轮辅助 LLM 调用次数",
    "desc_hash_prompts": "使用 SHA-256 对提示词计算哈希以标识版本",
    "desc_history_fold_after_turns": "超过此轮数的工具结果将通过辅助 LLM 压缩为摘要，保持上下文精简",
    "desc_http_proxy": "HTTP 代理 URL（如 http://proxy:8080）；回退到 HTTP_PROXY 环境变量",
    "desc_https_proxy": "HTTPS 代理 URL（如 http://proxy:8080）；回退到 HTTPS_PROXY 环境变量",
    "desc_keep_recent": "压缩或心跳上下文修剪时保留的最近条目数",
    "desc_load_user": "从技能目录加载用户安装的技能",
    "desc_max_artifact_bytes": "单个制品写入的最大字节数；超过此限制的结果回退到截断处理",
    "desc_max_bytes_per_turn": "单轮 LLM 调用中所有工具结果的累计字节上限，超出后触发溢出或截断",
    "desc_max_chunk_chars": "压缩期间每个 LLM 摘要分块的最大字符数",
    "desc_max_depth": "触发器最大递归深度",
    "desc_max_message_length": "允许的输入消息最大字节数",
    "desc_max_per_event": "单个事件最多可触发的触发器数量",
    "desc_max_retries": "压缩期间 LLM 摘要的最大重试次数，或卡住任务被标记为失败前的最大自动重置次数",
    "desc_max_summary_tokens": "LLM 生成压缩摘要的最大 Token 数",
    "desc_max_versions_per_agent": "每个 Agent 保留的最大提示词版本数",
    "desc_max_workflow_secs": "工作流最长执行时间（秒）",
    "desc_max_ws_per_ip": "每个 IP 地址最大并发 WebSocket 连接数",
    "desc_mcp_default_safety": "无 readOnlyHint 注解的 MCP 工具的默认安全级别：read_only 或 write_shared",
    "desc_mcp_readonly_allowlist": "无论 mcp_default_safety 如何，被视为只读的 MCP 工具名称（使用完整命名空间形式）",
    "desc_no_proxy": "不走代理的主机或域名列表（逗号分隔）；回退到 NO_PROXY 环境变量",
    "desc_otlp_endpoint": "OpenTelemetry 追踪导出的 OTLP gRPC 端点",
    "desc_path": "密钥库文件存储路径",
    "desc_plugin": "上下文引擎插件名称，解析自 ~/.librefang/plugins/<name>/plugin.toml",
    "desc_plugin_stack": "以多层上下文引擎方式堆叠的插件名称有序列表",
    "desc_plugin_stack_weights": "插件栈中每一层的优先级权重；权重越高，召回的记忆越靠前",
    "desc_poll_interval_secs": "收件箱目录扫描的间隔秒数",
    "desc_prometheus_enabled": "在 /api/metrics 路径暴露 Prometheus 指标端点",
    "desc_redact_patterns": "除内置 PII 模式外，需额外脱敏或假名化的正则表达式",
    "desc_registry_mirror": "GitHub URL 的镜像/代理前缀（如 https://ghproxy.cn），用于改善受限网络下的访问",
    "desc_retry_after_secs": "请求被限流时 Retry-After 响应头的值（秒）",
    "desc_sample_rate": "追踪采样率，0.0 表示不采样，1.0 表示全量采样",
    "desc_service_name": "上报给 OTel Collector 的服务名称",
    "desc_spill_threshold_bytes": "工具结果超过此字节数时写入制品存储，Agent 收到存根句柄",
    "desc_subagent_max_concurrent": "最大并发子 Agent 数量",
    "desc_subagent_max_depth": "子 Agent 调用的最大嵌套深度",
    "desc_sweep_interval_secs": "任务看板扫描器检查卡住的进行中任务的间隔秒数",
    "desc_threshold_messages": "触发上下文压缩的消息数阈值",
    "desc_token_threshold_ratio": "触发基于 Token 的压缩时，已用 Token 占模型上下文窗口的比例（0.0–1.0）",
    "desc_ws_debounce_chars": "文本缓冲区超过此字符数时立即刷新",
    "desc_ws_debounce_ms": "文本增量推送给客户端前的防抖时间（毫秒）",
    "desc_ws_idle_timeout_secs": "WebSocket 连接无活动多少秒后关闭",
    "desc_ws_messages_per_minute": "每个连接每分钟最大 WebSocket 消息数",
    "desc_ws_terminal_messages_per_minute": "每个连接每分钟最大终端 WebSocket 输入消息数",
    "saved_restart": "已保存（需要重启）",
    "saved_reload_failed": "已保存但重载失败",
    "load_error": "无法加载配置",
    "reload_success": "配置已重新加载",
    "search_placeholder": "搜索字段...",
    "unsaved": "未保存",
    "discard": "丢弃",
    "save_all": "全部保存",
    "no_results": "没有匹配的字段",
    "reset_default": "恢复默认值",
    "unsaved_warning": "有未保存的修改，确定要丢弃吗？",
    "save_failed": "保存失败",
    "changes": "未保存的更改",
    "reset_all": "全部重置",
    "reset_section": "重置本节",
    "searching_all": "搜索所有配置项..."
  },
  "chat": {
    "title": "对话",
    "neural_terminal": "智能终端",
    "group_standalone": "独立",
    "hand_coordinator": "协调者",
    "web_search_tooltip": "网络搜索: {{mode}}。需要在 config.toml [web] 中配置搜索 API key（Tavily、Brave、Jina 或 Perplexity）。",
    "web_search_key_hint": "需要在配置中设置搜索 API key",
    "web_search_no_key": "未配置搜索 API key，点击打开设置页面",
    "web_search_setup": "搜索",
    "web_search_configure": "配置 API key",
    "select_agent": "选择智能体",
    "select_agent_desc": "从列表中选择一个智能体以建立通信链路。",
    "transmit_command": "输入消息...",
    "send": "发送",
    "secure_link": "已连接",
    "standby": "待机中",
    "end_history": "历史记录末尾",
    "welcome_system": "连接已建立。",
    "load_earlier_messages": "加载更早的 {{count}} 条消息",
    "input_placeholder_with_agent": "向 {{name}} 发送消息...",
    "generating": "生成中...",
    "clear_chat": "清空对话",
    "session": "会话",
    "session_unpinned": "未固定",
    "sessions_title": "会话列表",
    "send_hint": "Enter 发送 · ⌘+↵ 换行",
    "stop_hint": "停止生成",
    "voice_input": "语音输入",
    "voice_stop": "停止录音",
    "voice_recording": "正在聆听...",
    "voice_transcribing": "正在转写...",
    "voice_not_configured": "语音输入需要配置 STT 服务商，请在 配置 → Tools → Media 中配置",
    "deep_thinking": "深度思考",
    "deep_thinking_hint": "启用后请求模型进行深度推理（仅支持 reasoning 模型）",
    "show_thinking": "显示思考过程",
    "show_thinking_hint": "在回复中展示模型的思考过程",
    "thinking_label": "思考过程",
    "you": "你",
    "bot": "Bot",
    "ws_connected": "WS",
    "ws_streaming": "流式",
    "auth_missing": "供应商 \"{{provider}}\" 的 API Key 未配置，请在 设置 > 供应商 中设置后再对话。",
    "provider_offline": "本地供应商 \"{{provider}}\" 未运行，请先启动服务。",
    "approval_required": "需要审批",
    "approval_tool": "工具",
    "approval_agent": "Agent {{agent}} 请求执行",
    "approval_risk_high": "高风险",
    "approval_risk_medium": "中风险",
    "approval_risk_low": "低风险",
    "switch_model": "切换模型",
    "search_models": "搜索模型...",
    "loading_models": "加载中…",
    "no_models_found": "未找到模型。",
    "unable_to_load_models": "无法加载模型",
    "model_update_failed": "更新模型失败，请重试。",
    "retry": "重试",
    "no_model": "无模型",
    "copy": "复制",
    "copied": "已复制",
    "speak": "朗读",
    "pause": "暂停",
    "resume": "继续",
    "tts_unavailable": "未配置 TTS 供应商",
    "tts_generating": "正在生成语音...",
    "tts_error": "语音生成失败",
    "tts_empty": "没有可朗读的文本",
    "cmd_help": "显示可用命令",
    "cmd_clear": "清除聊天记录",
    "cmd_agents": "列出可用 Agent",
    "cmd_info": "显示当前 Agent 信息",
    "cmd_new": "新建会话（生成新会话 ID）",
    "cmd_compact": "压缩上下文以节省空间",
    "cmd_reset": "重置会话（清除历史）",
    "cmd_reboot": "重启会话（清除上下文）",
    "cmd_stop": "取消当前运行",
    "cmd_model": "显示或切换模型",
    "cmd_usage": "显示会话 Token 使用量",
    "cmd_context": "显示上下文压力",
    "cmd_verbose": "切换详细日志级别",
    "cmd_budget": "显示预算状态",
    "cmd_peers": "显示已连接节点",
    "cmd_a2a": "显示 A2A Agent",
    "cmd_queue": "显示 Agent 队列状态",
    "cmd_col_command": "命令",
    "cmd_col_desc": "说明",
    "no_agents_available": "没有可用的 Agent。",
    "no_agent_selected": "未选择 Agent。",
    "info_model": "模型",
    "info_provider": "提供商",
    "info_state": "状态",
    "ws_not_connected": "WebSocket 未连接，请刷新页面。",
    "command_timeout": "命令超时或连接已断开 — 请重试。",
    "delete_session": "删除会话",
    "export": "导出",
    "export_markdown": "导出为 Markdown",
    "new_session": "新建会话",
    "search_providers": "搜索供应商...",
    "select_provider": "选择供应商",
    "tool_calls": "{{count}} 个工具调用",
    "tool_error": "错误",
    "tool_input": "输入",
    "tool_result": "结果",
    "tool_running": "执行中…"
  },
  "goals": {
    "title": "目标",
    "subtitle": "战略规划和任务跟踪。",
    "total": "总目标",
    "pending": "待处理",
    "in_progress": "进行中",
    "completed": "已完成",
    "create_goal": "创建目标",
    "goal_title_placeholder": "目标标题",
    "goal_desc_placeholder": "描述",
    "goal_tree": "目标树",
    "title_label": "标题",
    "desc_label": "描述",
    "add_examples": "添加示例",
    "add_example_goals": "添加示例目标",
    "toggle_reset": "完成/重置",
    "delete_confirm": "确定要删除此目标吗？",
    "pick_template": "选择模板",
    "pick_template_desc": "选择一个模板，快速创建预定义的目标。",
    "use_template": "使用模板",
    "apply_template_partial": "已创建 {{succeeded}}/{{total}} 个目标，失败 {{failed}} 个。",
    "overall_progress": "总体进度",
    "clear_all": "清空全部",
    "clear_all_confirm": "确认删除所有目标？",
    "clear_all_partial": "已删除 {{succeeded}}/{{total}} 个目标，失败 {{failed}} 个。",
    "help": "Goals 是战略规划面——一棵 agent（或你）正在追的目标树，含进度、状态和父子关系。模板播种常见目标形状；树视图展示层级和向上汇总的进度。\n\n使用步骤：\n\n1. 创建。\"Create goal\" 打开表单填标题、描述、父目标、状态。或 \"Pick template\" 一次性铺开预置目标树（如 \"ship a feature\"、\"research a topic\"）。\n\n2. 跟踪。每个节点显示 pending / in-progress / completed。父节点进度由子节点汇总。点节点可内联编辑状态或描述。\n\n3. 清理。\"Clear all\" 整棵清空（带二次确认）——开新阶段时常用。\n\n跟 Scheduler / Workflows 的区别：\n\n  · Goals —— 想做什么。长期意图，可被 agent 读取。\n  · Scheduler / Workflows —— 怎么做。具体的触发与步骤。\n\n典型场景：\n\n  · 给 agent 一个长期方向，规划时可以参考。\n  · 跟踪一个跨周项目，人和 agent 都看同一棵树。\n\n注意事项：\n\n  · 模板是起点，应用后随便改。\n  · 删父节点会带走子节点，\"Clear all\" 前请确认。"
  },
  "sessions": {
    "title": "会话",
    "subtitle": "智能体的对话记录和历史会话。",
    "active_count": "活跃",
    "total": "总计",
    "search_placeholder": "按智能体名称搜索...",
    "empty_title": "暂无会话",
    "empty_desc": "智能体开始对话时会话将出现在这里。",
    "unknown_agent": "未知智能体",
    "just_now": "刚刚",
    "help": "Sessions 是每个 agent 的活跃和历史会话上下文。每个 session 是一条绑定到 agent + 来源（channel、cron、A2A peer 或人工）的消息 + 工具调用线程。本页可浏览、贴标签、清理。\n\n使用步骤：\n\n1. 搜索与筛选。输入文本按 agent、标签或最近消息搜索。Active vs. idle 由最近活动自动判定。\n\n2. 贴标签。\"Set label\" 给 session 打标签，方便日后找到——长时运行的线程里特别有用。\n\n3. 删除。删除不再需要的旧 session。该线程下 agent 的完整消息历史会一同删除。\n\n典型场景：\n\n  · 找 agent 跟某用户解决某问题的那条 session。\n  · 修剪繁忙一周后堆积的 channel session。\n  · 调试前先确认某 (channel, chat) 对应的是预期 session。\n\n注意事项：\n\n  · Channel 消息总是用规范 session id —— `(agent, \"<channel>:<chat>\")` ——所以同一用户始终落在同一线程。\n  · Cron 触发共享 per-agent 单一 session；这是有意为之（复用 prompt cache），但 cron 历史会一直增长。\n  · 删 session 不可逆。该 session 创建的 memory 条目仍保留（Memory 页是独立的）。",
    "set_label": "设置标签",
    "no_label": "添加标签",
    "label_placeholder": "标签...",
    "open_in_chat": "在聊天页打开此会话"
  },
  "approvals": {
    "title": "审批",
    "subtitle": "在执行前审查并授权关键操作。",
    "pending_review": "等待审查",
    "skill_candidates_pending": "{{count}} 个技能候选等待审查",
    "approve": "批准",
    "reject": "拒绝",
    "approvedToast": "已批准",
    "rejectedToast": "已拒绝",
    "totpRequired": "需要 TOTP 验证码，请前往审批页面操作。",
    "status": {
      "pending": "待审批",
      "approved": "已批准",
      "rejected": "已拒绝",
      "expired": "已过期"
    },
    "queue_clear": "队列清空",
    "queue_clear_desc": "没有需要您审批的操作。",
    "help": "Approvals 是人审队列。当 agent 调用一个标记 \"需要审批\" 的工具（破坏性 shell、大额 LLM 调用、敏感 HTTP 等）时，调用会暂停并产生一条请求落到这里。你批准、修改或拒绝；agent 拿到决策后继续执行。\n\n使用步骤：\n\n1. 分类。每张卡片显示 agent、工具、参数和需要审批的原因。用筛选按状态（pending / approved / rejected / expired）收窄。\n\n2. 决策。\"Approve\" 原样放行；\"Modify\" 在批准前编辑参数（例如收紧 SQL 的 WHERE）；\"Reject\" 取消调用，向 agent 返回错误。\n\n3. 批量处理。选中多条 pending 一起 approve / reject。如果你已绑定 TOTP，批量批准会被禁用（每次都要输新验证码）。\n\n4. 启用 TOTP。如果策略要求二次因素，走 TOTP setup 流程。绑定后单次审批需要 6 位验证码；批量批准不可用。\n\n典型场景：\n\n  · 让 agent 自治改代码，但所有 `rm -rf` / `git push` 必须人审。\n  · 第一次有 agent 想花超过 $X 做单次 LLM 调用时拦下来。\n  · 试运行阶段，所有渠道机器人回复都先过审一遍。\n\n注意事项：\n\n  · pending 请求有 TTL——超时未决策会自动过期，agent 拿到 \"rejected by timeout\"。TTL 在审批策略里可调。\n  · Modify 是可审计的：原参数和修改后参数的 diff 会写进审计日志。\n  · TOTP 是 per-operator 的。绑定与解绑也会进审计日志。",
    "selectAll": "全选",
    "approveSelected": "批量批准",
    "rejectSelected": "批量拒绝",
    "selected": "已选 {{count}} 项",
    "modify": "修改",
    "modifyTitle": "修改并重试",
    "modifyPlaceholder": "提供反馈让智能体重新尝试...",
    "modifySubmit": "提交反馈",
    "modifiedToast": "反馈已提交",
    "batchSuccess": "批量操作完成",
    "tabPending": "待审批",
    "tabAuditLog": "审计日志",
    "auditLog": {
      "title": "审批审计日志",
      "tool": "工具",
      "agent": "智能体",
      "decision": "决定",
      "decidedBy": "决定者",
      "decidedAt": "决定时间",
      "requestedAt": "请求时间",
      "feedback": "反馈",
      "noEntries": "暂无审计记录。",
      "showing": "显示第 {{from}}-{{to}} 条，共 {{total}} 条"
    },
    "loadError": "加载审批列表失败，请检查网络连接。",
    "batch_disabled_totp": "TOTP 强制启用时不可批量审批",
    "goToAgent": "跳转到 Agent",
    "totpPlaceholder": "000000 / 0000-0000",
    "totpLabel": "TOTP",
    "tabHistory": "历史",
    "pendingCount": "{{count}} 个待处理",
    "filter": "筛选",
    "filterPlaceholder": "按智能体、工具或操作筛选…",
    "noFilterMatch": "没有匹配此筛选的请求。",
    "autoRules": "自动规则",
    "timeAgo": {
      "seconds": "{{count}}秒",
      "minutes": "{{count}}分钟",
      "hours": "{{count}}小时",
      "days": "{{count}}天"
    },
    "totpBadge": "TOTP",
    "requestedAgo": "{{ago}} 前请求",
    "approveWithTotp": "使用 TOTP 批准",
    "editApprove": "编辑并批准",
    "editApproveTitle": "编辑并批准",
    "editApproveSubmit": "提交并批准",
    "deny": "拒绝",
    "risk": {
      "high": "高风险",
      "medium": "中风险",
      "low": "低风险"
    },
    "history": {
      "empty": "暂无历史",
      "emptyDesc": "已处理的审批将显示在这里。",
      "decisions": {
        "approved": "已批准",
        "denied": "已拒绝",
        "edited": "已修改"
      },
      "cols": {
        "decision": "决定",
        "agent": "智能体",
        "action": "操作",
        "risk": "风险",
        "resolvedBy": "处理者",
        "when": "时间"
      }
    },
    "totp": {
      "modalTitle": "TOTP 确认",
      "modalSubtitle": "高风险操作需要二次验证",
      "modalContext": "想要执行：{{action}}。请输入身份验证器中的 6 位验证码（或 8 位恢复码）。",
      "expiresHint": "验证码每 30 秒刷新。",
      "confirm": "确认并批准"
    }
  },
  "wizard": {
    "welcome": "欢迎使用 LibreFang",
    "subtitle": "连接一个模型供应商后即可开始聊天、编程和编排 Agent。",
    "step_1": "第一步",
    "connect_provider": "连接模型供应商",
    "step_1_desc": "选择一个 LLM 供应商作为 Agent 的推理引擎。之后可以在「供应商」页面添加更多。",
    "add_api_key": "添加 API Key",
    "step_2_desc": "粘贴您的 {{provider}} API Key。密钥会加密存储在本地保险库中。",
    "api_key_label": "API Key",
    "no_key_needed": "此供应商无需 API Key（本地或自托管）。",
    "env_hint": "提示：您也可以在环境变量中设置 {{env}}，向导会自动识别。",
    "provider_ready": "就绪",
    "needs_key": "需要密钥",
    "no_key": "无需密钥",
    "no_providers": "未加载到任何供应商，请确认守护进程是否在运行。",
    "already_configured": "已配置",
    "already_configured_desc": "此供应商已有可用密钥。您可以直接下一步，或在下方替换密钥。",
    "provider_connected": "供应商连接成功",
    "provider_failed": "连接失败：{{message}}",
    "connect": "连接并测试",
    "finish_title": "一切就绪",
    "step_3_desc": "确认后将把该供应商设为默认，并初始化一个入门 Agent。",
    "step_3_hint": "入门 Agent 使用均衡模型与安全默认配置。之后可在「代理」与「设置」页面自定义。",
    "summary_provider": "供应商",
    "summary_status": "状态",
    "finish_action": "启动 LibreFang",
    "finalize_failed": "初始化失败：{{message}}",
    "done_title": "LibreFang 已就绪",
    "done_desc": "默认供应商已配置，入门 Agent 已创建。现在可以开始聊天或进入控制台。",
    "go_overview": "进入总览",
    "start_chat": "开始聊天",
    "skip": "跳过向导",
    "replace_key_warning": "该供应商已连接一个有效密钥。提交后将覆盖旧密钥——测试失败无法恢复原密钥。勾选以确认。",
    "api_key_placeholder": "sk-...",
    "model_count": "{{count}} 个模型"
  },
  "models": {
    "section": "模型管理",
    "title": "模型目录",
    "subtitle": "浏览所有供应商的可用 LLM 模型。",
    "search_placeholder": "搜索模型...",
    "all_providers": "所有供应商",
    "all_tiers": "全部",
    "available_only": "仅可用",
    "available": "可用",
    "availability": "可用性",
    "results": "个模型",
    "free": "免费",
    "no_results": "没有匹配的模型。",
    "no_models": "未加载任何模型。守护进程是否在运行？",
    "load_error": "加载模型失败。请检查守护进程是否在运行。",
    "no_key": "未配置",
    "tier_all": "全部",
    "tier_frontier": "前沿",
    "tier_smart": "智能",
    "tier_balanced": "均衡",
    "tier_fast": "快速",
    "tier_local": "本地",
    "tier_basic": "基础",
    "tier_standard": "标准",
    "tier_advanced": "高级",
    "tier_enterprise": "企业",
    "col_model": "模型",
    "col_provider": "供应商",
    "col_tier": "等级",
    "col_context": "上下文",
    "col_input": "输入 $/M",
    "col_output": "输出 $/M",
    "col_tools": "工具",
    "col_vision": "视觉",
    "col_streaming": "流式",
    "col_thinking": "思考",
    "help": "模型目录是本实例对所有已配置 provider 上可用 LLM 模型的视图——ID、能力（tools / vision / streaming / thinking）、上下文窗口、输入 / 输出价格、tier。目录喂给每个 agent 的模型选择器和 Analytics 页的成本计算。\n\n使用步骤：\n\n1. 筛选与排序。按 provider、tier 或 \"available only\"（排除未配置 provider 的模型）过滤。按名字 / 别名搜索。\n\n2. 比较。列并排：上下文、输入价、输出价、tools、vision、thinking。给 agent 分配前先选合适的。\n\n3. 添加自定义。\"Add custom model\" 注册目录里没有的模型——适合刚发布的新模型或自托管端点。填 ID、显示名、provider、价格。\n\n4. 编辑 / 删除。微调显示名或价格。删除只对你添加的自定义条目可用。\n\n典型场景：\n\n  · 给做截图分析的 agent 选 vision-capable 模型。\n  · 在 LibreFang 还没出更新前，模型一发布就先注册进来。\n  · 在分配 agent 前审计哪些模型支持 tool-use。\n\n注意事项：\n\n  · \"available\" 取决于 provider 是否已配置且可达。先去 Providers 页配。\n  · 这里的价格就是成本计算器认为的——不准确就会让预算数字漂移。\n  · Aliases 让一个底层模型挂多个名字（例如 \"smart\" → claude-opus）。",
    "add_model": "添加模型",
    "add_custom_model": "添加自定义模型",
    "model_id": "模型 ID",
    "model_id_placeholder": "例如 my-custom-model",
    "display_name": "显示名称",
    "display_name_placeholder": "例如 我的自定义模型",
    "provider": "供应商",
    "provider_placeholder": "例如 openai",
    "context_window": "上下文窗口",
    "max_output": "最大输出 Token",
    "input_cost": "输入价格 ($/M tokens)",
    "output_cost": "输出价格 ($/M tokens)",
    "supports_tools": "工具调用",
    "supports_vision": "视觉能力",
    "supports_streaming": "流式输出",
    "supports_thinking": "推理",
    "custom": "自定义",
    "delete_model": "删除自定义模型",
    "model_added": "模型添加成功",
    "model_deleted": "模型已删除",
    "hide_model": "隐藏模型",
    "unhide_model": "取消隐藏",
    "show_hidden": "已隐藏",
    "hidden_count": "{{count}} 个已隐藏",
    "model_hidden": "模型已隐藏",
    "model_unhidden": "模型已取消隐藏",
    "expand_all": "全部展开",
    "collapse_all": "全部折叠",
    "aliases": "别名",
    "max_output_tokens": "最大输出",
    "cost_range": "价格",
    "settings_title": "模型设置",
    "model_type": "模型类型",
    "type_chat": "对话",
    "type_speech": "语音",
    "type_embedding": "向量",
    "capabilities": "模型能力",
    "capabilities_override_hint": "当 provider 元数据缺失或不准确时,可手动覆盖能力。\"自动\"使用 catalog 默认值。",
    "cap_auto": "自动",
    "cap_force_on": "强制开",
    "cap_force_off": "强制关",
    "cap_on": "开",
    "cap_off": "关",
    "parameters": "模型参数",
    "temperature": "温度",
    "top_p": "Top P",
    "max_tokens_param": "最大 Tokens",
    "frequency_penalty": "频率惩罚",
    "presence_penalty": "存在惩罚",
    "reasoning_effort": "思维参数风格",
    "effort_low": "低",
    "effort_medium": "中",
    "effort_high": "高",
    "flags": "标志",
    "use_max_completion_tokens": "使用 max_completion_tokens",
    "no_system_role": "不支持 System 角色",
    "force_max_tokens": "强制 Max Tokens",
    "overrides_saved": "模型设置已保存",
    "overrides_reset": "模型设置已重置为默认值",
    "overrides_error": "保存模型设置失败",
    "reset_defaults": "重置"
  },
  "media": {
    "section": "媒体生成",
    "title": "媒体生成",
    "subtitle": "通过各供应商生成图片、语音、视频和音乐。",
    "help": "媒体生成是图像、语音、视频、音乐的跨 provider 入口。所有端点共享同一套 provider 抽象——选能力，可选指定 provider，写 prompt，生成。\n\n使用步骤：\n\n1. 选能力。Image / TTS / video / music 标签结构相同：prompt + 参数 + 生成。\n\n2. Provider 自动检测。provider 留在 auto，后端会按能力选第一个配置好的驱动；只在想锁定某个 provider 时手动覆盖。\n\n3. 调参数。Aspect ratio、数量、格式（wav / opus / flac 等）、有 / 无人声——每种能力暴露相应旋钮。\n\n4. 生成与下载。结果内联展示，\"Download\" 存到本地。\n\n典型场景：\n\n  · 不离开 dashboard 的快速一次性出图 / 配音。\n  · 切换 provider 下拉框，对同一个 prompt 跨 provider 比较结果。\n  · 生成短音频片段用于 channel bot 回复。\n\n注意事项：\n\n  · 成本走和 LLM 调用同一套 metering——大视频 / 长音乐可能很贵。\n  · 如果 \"auto\" 报 \"no provider configured\"，先去 Providers 页配一个。\n  · 输出文件存在 daemon 的媒体目录里；dashboard 流式展示，源文件以磁盘为准。",
    "load_error": "加载 provider 列表失败。",
    "configured": "已配置",
    "not_configured": "未配置",
    "no_providers": "未发现任何媒体 provider。",
    "no_capabilities": "无支持能力",
    "cap_image": "图片",
    "cap_speech": "语音",
    "cap_video": "视频",
    "cap_music": "音乐",
    "tab_image": "图片",
    "tab_speech": "语音",
    "tab_video": "视频",
    "tab_music": "音乐",
    "provider": "Provider",
    "model": "模型",
    "model_placeholder": "留空使用默认",
    "auto_detect": "自动检测",
    "prompt": "Prompt",
    "text": "文本",
    "voice": "声线",
    "voice_placeholder": "如 alloy",
    "format": "格式",
    "speed": "语速",
    "count": "数量",
    "aspect_ratio": "宽高比",
    "lyrics": "歌词",
    "music_prompt": "风格描述",
    "instrumental": "纯音乐",
    "instrumental_desc": "不生成人声",
    "generate": "生成",
    "synthesize": "合成",
    "compose": "创作",
    "generate_video": "提交视频任务",
    "polling": "轮询中...",
    "download": "下载",
    "result": "结果",
    "status": "状态",
    "task_id": "任务 ID",
    "revised_prompt": "优化后的 prompt",
    "image_title": "图片生成",
    "image_desc": "基于文本描述生成图像。",
    "image_prompt_placeholder": "描述你想要的画面...",
    "image_done": "图片生成完成",
    "speech_title": "文本转语音",
    "speech_desc": "将文本合成为自然语音。",
    "speech_text_placeholder": "要合成的文本...",
    "speech_done": "语音合成完成",
    "video_title": "视频生成",
    "video_desc": "视频生成为异步任务，提交后需要轮询结果。",
    "video_prompt_placeholder": "描述视频内容...",
    "video_submitted": "视频任务已提交",
    "video_done": "视频生成完成",
    "video_polling": "任务处理中，每 5 秒轮询一次...",
    "music_title": "音乐生成",
    "music_desc": "根据风格提示或歌词创作音乐。",
    "music_prompt_placeholder": "如「欢快的流行钢琴曲」...",
    "lyrics_placeholder": "输入歌词（可选）...",
    "music_done": "音乐生成完成",
    "no_provider_image": "没有配置支持图片生成的 provider",
    "no_provider_speech": "没有配置支持 TTS 的 provider",
    "no_provider_video": "没有配置支持视频生成的 provider",
    "no_provider_music": "没有配置支持音乐生成的 provider",
    "aspect_ratio_placeholder": "1:1",
    "generated_alt": "生成结果 {{index}}",
    "format_mp3": "mp3",
    "format_wav": "wav",
    "format_flac": "flac",
    "format_ogg": "ogg",
    "format_opus": "opus",
    "format_aac": "aac",
    "status_submitted": "已提交",
    "status_completed": "已完成",
    "status_failed": "失败"
  },
  "auth": {
    "title": "需要 API Key",
    "description": "此实例需要身份验证才能访问。",
    "credentials_title": "需要登录",
    "credentials_description": "请输入 Dashboard 用户名和密码以继续。",
    "credentials_tab": "密码登录",
    "api_key_tab": "API Key",
    "placeholder": "输入 API Key...",
    "username_placeholder": "输入用户名...",
    "password_placeholder": "输入密码...",
    "submit": "认证",
    "verify_totp": "验证",
    "totp_prompt": "请输入验证器应用中的 6 位动态码。",
    "invalid": "认证失败，请重试。",
    "invalid_api_key": "无效的 API Key，请重试。",
    "invalid_credentials": "用户名或密码无效，请重试。",
    "invalid_totp": "动态码无效，请重试。"
  },
  "network": {
    "section": "OFP 网络",
    "title": "网络",
    "subtitle": "开放联邦协议网络状态和连接的节点。",
    "status_label": "状态",
    "node_id": "节点 ID",
    "protocol": "协议",
    "peers": "已连接节点",
    "connected": "已连接",
    "no_peers": "暂无连接节点",
    "no_peers_desc": "当前没有 OFP 节点连接到此实例。",
    "identity_fingerprint": "身份指纹",
    "identity_fingerprint_hint": "在 pin 之前先和远端运维做带外（OOB）比对。",
    "identity_missing": "未加载 Ed25519 身份。OFP 正在以 HMAC-only 兼容模式运行；针对节点冒充的防御 (#3873) 暂未激活。",
    "pinned_peers_count_one": "{{count}} 个 TOFU 已固定节点",
    "pinned_peers_count_other": "{{count}} 个 TOFU 已固定节点",
    "trusted_peers": "已信任节点",
    "trusted_peers_pinned": "已 pin {{count}} 个",
    "trusted_peer_fingerprint_hint": "已 pin 的 Ed25519 公钥 SHA-256 指纹。请带外比对确认。",
    "no_trusted_peers": "暂无已信任节点",
    "no_trusted_peers_desc": "尚未通过 TOFU 固定任何节点。先 pin 一个节点的指纹，才能启用针对节点冒充的防御 (#3873)。",
    "ofp_disabled": "OFP 网络未启用。在 config.toml 设置 `network_enabled = true` 并配置非空 `shared_secret`，Ed25519 身份会在首次启动时自动生成并持久化。",
    "help": "Network 显示本实例在开放联邦协议（OFP）中的状态——已发现或被发现的对等 LibreFang 节点、本节点身份、使用的 OFP 版本。OFP 是 A2A 之下那一层：节点互相找到对方靠 OFP；连上之后说什么靠 A2A。\n\n使用步骤：\n\n1. 身份。node-id 和协议版本是本 LibreFang 实例对联邦的标识。\n\n2. 节点。显示每个已连接的对等节点和 online / offline 状态。空列表说明你还没在和任何人联邦。\n\n3. 状态。Online 表示 OFP 可达，本节点正在向外宣告自己。\n\n跟 A2A 的区别：\n\n  · Network —— 节点级联邦：外面有谁、连上了谁。\n  · A2A —— agent 级对话：那些节点上的 agent 能为彼此做什么。\n\n典型场景：\n\n  · 调试 A2A 前先确认两个 LibreFang 实例确实互相能看到。\n  · 读 node-id 发给对端做直连。\n\n注意事项：\n\n  · 联邦是可选且配置控制的。默认 \"no peers\" 是预期，除非你已配 peers。\n  · 网络状态是实时读，刷新即重新拉，无缓存。"
  },
  "a2a": {
    "section": "智能体互联",
    "title": "A2A",
    "subtitle": "发现并与外部 A2A 智能体通信。",
    "discover": "发现",
    "discover_agent": "发现智能体",
    "discover_placeholder": "https://example.com/.well-known/agent.json",
    "external_agents": "外部智能体",
    "no_agents": "暂无外部智能体",
    "no_agents_desc": "输入 URL 以发现 A2A 智能体。",
    "send_task": "发送任务",
    "send_to": "发送任务到",
    "task_placeholder": "描述此智能体要完成的任务...",
    "send": "发送",
    "tracked_tasks": "任务追踪",
    "status_pending": "等待中",
    "status_completed": "已完成",
    "status_failed": "失败",
    "status_working": "处理中",
    "help": "A2A（Agent-to-Agent）是 Google 推出的开放协议，让不同的 agent 运行时之间可以互相发现并调用。每个 A2A agent 在 /.well-known/agent.json 暴露一张\"agent card\"，描述自己的名字、能做的事（skills）以及如何接受任务。LibreFang 自己也在同一路径暴露 agent card，所以其他 A2A 客户端也能发现这个实例。\n\n使用步骤：\n\n1. 发现（Discover）。点右上角 \"Discover\"（快捷键：n），粘贴对方 agent 的 URL（例如 https://example.com/agents/research-bot）。LibreFang 会拉取 /.well-known/agent.json 并把对方加入\"外部智能体\"列表，显示它的能力和在线状态。\n\n2. 发送任务（Send task）。在任何 agent 卡片上点 \"Send task\"，用自然语言描述任务，提交。LibreFang 通过 JSON-RPC 发出任务并收到 task_id，新任务出现在\"任务追踪\"区。\n\n3. 追踪（Track）。点击任务上的 \"Refresh\" 查询状态：pending → completed / failed。远端完成后返回的结果会内嵌显示。\n\n跟 Channels 和 MCP 的区别：\n\n  · Channels —— 用户通过 Telegram / Slack / 等通讯软件跟你的 agent 聊天。方向：人 → agent。\n  · MCP —— 你的 agent 调用外部工具服务器。方向：agent → 工具。\n  · A2A —— 你的 agent 跟别人的 agent 对等通信。方向：agent ↔ agent。\n\n典型场景：\n\n  · 两台 LibreFang 实例（你 + 同事，或家里 + 公司）互相分发任务。\n  · 订阅某个专精的公开 A2A agent（研究 / 翻译 / 搜索等），把合适的任务转发出去。\n  · 内部多个 LibreFang 实例按领域分工，互相路由任务。\n\n注意事项：\n\n  · \"任务追踪\" 列表只保存在浏览器内存里——刷新页面会丢。远端有自己的任务存储，需要长期查询请记下 task_id。\n  · LibreFang 默认的 SSRF 防护会拦截 localhost / 内网地址的 discover。如果要发现局域网内的 agent，在 config.toml 把对方 host 加到 ssrf_allowed_hosts。\n  · A2A 生态还很年轻，公开的 A2A endpoint 目前很少。最直接的试用方式是再起一台 LibreFang 实例，互相 discover。"
  },
  "plugins": {
    "section": "扩展",
    "title": "插件",
    "subtitle": "通过自定义插件扩展智能体能力。",
    "new_plugin": "新建插件",
    "install": "安装",
    "installed_tab": "已安装",
    "registry_tab": "插件市场",
    "no_plugins": "未安装任何插件",
    "no_plugins_desc": "从插件市场安装或创建你自己的插件。",
    "loading_registries": "正在加载插件市场...",
    "no_registries": "未配置插件市场。",
    "no_available": "无可用插件。",
    "installed": "已安装",
    "plugin_name": "插件名称",
    "description": "描述",
    "install_title": "安装插件",
    "source": "来源",
    "source_registry": "插件市场",
    "source_local": "本地",
    "source_git": "Git",
    "registry_optional": "注册表（可选）",
    "registry_placeholder": "owner/repo",
    "path": "路径",
    "url": "URL",
    "branch": "分支",
    "scaffold_title": "创建新插件",
    "scaffold_desc": "这个插件做什么？",
    "create": "创建",
    "deps": "依赖",
    "help": "Plugins 是运行时扩展——由你（或别人）写的代码，挂进 kernel 增加工具、hooks 或行为，超出核心自带的范围。跟 skills（声明式能力文档）和 hands（受管能力包）不同：plugin 是有完整运行时访问权限的裸代码。\n\n使用步骤：\n\n1. 浏览。\"Installed\" 标签列已启用的 plugins，含版本、hooks、依赖、大小、元数据；marketplace 标签列可装的。\n\n2. 安装。\"Install\" 可从 marketplace、本地路径或 Git 仓库 / 分支安装。依赖安装是流程的一部分；结果面板显示成功或失败步骤。\n\n3. 检视。点击 plugin 看 hooks、依赖、元数据——调试某个工具名归谁所有时很有用。\n\n4. 移除。Delete 卸载——删除代码并取消它注册的所有 hook。\n\n典型场景：\n\n  · 加一个把内部 API 暴露成 agent 工具的自定义 plugin。\n  · 从 Git URL 拉社区 plugin，固定到某个已知好的分支 / commit。\n  · 移除跟另一个 plugin 同名工具冲突的 plugin。\n\n注意事项：\n\n  · Plugin 以 daemon 权限运行——只装你信任的。\n  · 从 Git 装会锁分支；上游分支变了要重新 install 才会更新。\n  · 依赖安装失败会让 plugin 处于无效状态——面板会显示缺什么。",
    "deps_failed": "依赖安装失败",
    "deps_installed": "依赖已安装",
    "install_failed": "安装失败",
    "install_success": "插件已安装",
    "no_description": "暂无描述。",
    "runtime": "运行时",
    "scaffold_failed": "创建失败",
    "scaffold_success": "插件已创建",
    "uninstall_failed": "卸载失败",
    "uninstall_success": "插件已移除",
    "invalid": "无效",
    "hooks": "钩子",
    "hook_ingest": "摄取",
    "hook_after_turn": "回合后",
    "hook_invalid": "无效",
    "runtime_python": "Python",
    "runtime_node": "Node.js",
    "runtime_deno": "Deno (TypeScript)",
    "runtime_bun": "Bun (TypeScript)",
    "runtime_go": "Go",
    "runtime_v": "V (vlang)",
    "runtime_ruby": "Ruby",
    "runtime_php": "PHP",
    "runtime_lua": "Lua",
    "runtime_bash": "Bash",
    "runtime_native": "原生二进制"
  },
  "telemetry": {
    "badge": "可观测性",
    "title": "遥测",
    "subtitle": "系统指标、LLM 用量和 HTTP 可观测性数据。",
    "total_requests": "总请求数",
    "endpoints": "端点",
    "avg_latency": "平均延迟",
    "status": "状态",
    "collecting": "收集中",
    "top_endpoints": "热门端点",
    "latency": "延迟分布",
    "prometheus_endpoint": "Prometheus 端点",
    "view_raw": "查看原始数据",
    "help": "Telemetry 是系统级可观测性面——uptime、panic 数、重启次数、请求速率、错误率、活跃 session、LLM token 总量、Top HTTP 端点。数据来自 daemon 暴露的同一个 Prometheus 端点；本页只是渲染。\n\n使用步骤：\n\n1. 健康分区。Uptime、panics、restarts ——daemon 是不是稳定。\n\n2. 活动分区。活跃 agent、活跃 session、LLM 调用总量、今日成本——当下在发生什么。\n\n3. 可靠性分区。请求总量、错误率、Top 端点——API 是否在稳定服务流量。\n\n4. 查看原始数据。\"View raw\" 打开底层 Prometheus 文本端点，方便临时抓取或人工调试。\n\n典型场景：\n\n  · 早上扫一眼：uptime 正常、无 panic、错误率正常。\n  · 排查变慢：Top 端点列表直接指出元凶。\n  · 接外部 Prometheus / Grafana ——把它指向 \"View raw\" 链接的同一端点。\n\n注意事项：\n\n  · 数字是实时计数器；重启大多归零。要长期保留请外部抓取 Prometheus 端点。\n  · \"今日成本\" 按 daemon 时区的本地一天计。\n  · Per-agent 拆分在 Analytics / Budget 页；这里是系统全局视图。",
    "no_data": "暂无遥测数据。发起一些 API 请求以查看指标。",
    "llm_usage": "LLM 与 Token 用量",
    "total_tokens": "总 Token",
    "input_tokens": "输入 Token",
    "output_tokens": "输出 Token",
    "llm_calls": "LLM 调用",
    "tool_calls": "工具调用",
    "cost_today": "今日费用",
    "active_sessions": "会话数",
    "uptime": "运行时间",
    "agents_active": "活跃 Agent",
    "panics": "Panic 次数",
    "restarts": "重启次数",
    "system_health": "系统健康",
    "per_agent": "按 Agent",
    "http_metrics": "HTTP 指标",
    "tokens_1h": "1小时窗口",
    "section_health": "健康",
    "section_activity": "活动",
    "section_reliability": "稳定性",
    "error_rate": "错误率",
    "input_short": "入",
    "output_short": "出",
    "calls": "次调用",
    "tools": "次工具",
    "last_updated": "更新于",
    "truncated": "...已截断",
    "unit_tokens": "tok"
  },
  "schema_form": {
    "select_option": "请选择...",
    "comma_separated": "逗号分隔",
    "add_item": "添加",
    "load_error": "加载表单定义失败",
    "required_missing": "请填写所有必填字段",
    "from_schema": "从 Schema"
  },
  "command_palette": {
    "search_placeholder": "搜索页面...",
    "navigate": "导航",
    "open": "打开",
    "close": "关闭",
    "registry": "注册表 (librefang.ai)",
    "all_shortcuts": "所有快捷键"
  },
  "terminal": {
    "badge": "终端",
    "title": "终端",
    "subtitle_connected": "已连接",
    "subtitle_disconnected": "未连接",
    "subtitle_connecting": "连接中…",
    "subtitle_reconnecting": "重连中… ({{attempt}}/{{max}})",
    "subtitle_error": "错误: {{error}}",
    "connect": "连接",
    "disconnect": "断开",
    "started": "[终端已启动: {{shell}} (PID: {{pid}})]",
    "exited": "[进程已退出，代码 {{code}}]",
    "error_unknown": "未知错误",
    "websocket_error": "WebSocket 连接错误",
    "connection_closed_non_recoverable": "由于不可恢复的错误，连接已关闭",
    "max_reconnect_exceeded": "已达到最大重连次数，请手动连接。",
    "fast_exit_giveup": "终端启动失败 — Shell 未能启动（或启动后立刻退出）。请检查守护进程主机的 Shell 可执行文件、TERM / terminfo（必须安装 `xterm-256color` 条目：Debian/Ubuntu 上是 `ncurses-term`，Alpine 上是 `ncurses-terminfo-base`，RHEL/Fedora 上是 `ncurses-base`）以及 tmux 配置；底层错误未修复前重连无效。",
    "root_warning": "警告：守护进程以 root 身份运行。终端命令将以完整权限执行。",
    "enter_fullscreen": "全屏",
    "exit_fullscreen": "退出全屏（Esc）",
    "dismiss_error": "关闭",
    "search_placeholder": "搜索… (Enter: 下一个，Shift+Enter: 上一个)",
    "search_prev": "上一个匹配",
    "search_next": "下一个匹配",
    "search_close": "关闭搜索",
    "font_decrease": "减小字号",
    "font_increase": "增大字号",
    "copy_paste_hint": "提示：在终端中使用 Ctrl+Shift+C / Ctrl+Shift+V 复制和粘贴",
    "tabs": {
      "new": "新标签页",
      "unnamed": "未命名",
      "close": "关闭标签",
      "limit_reached": "已达窗口上限",
      "switch_failed": "切换窗口失败",
      "create_failed": "创建窗口失败",
      "delete_failed": "关闭窗口失败",
      "rename_failed": "重命名窗口失败",
      "rename_hint": "双击可重命名",
      "tmux_unavailable": "此主机不支持 tmux",
      "name_label": "窗口名称",
      "name_invalid": "名称须为 1–64 个字符，不能包含 | 或控制字符。",
      "counter": "{{used}} / {{total}}",
      "help": "快捷操作说明",
      "help_title": "标签页快捷操作",
      "help_switch": "切换标签",
      "help_switch_key": "单击",
      "help_rename": "重命名标签",
      "help_rename_key": "双击",
      "help_close": "关闭标签",
      "help_close_key": "中键单击 / ✕",
      "help_new": "新建标签",
      "help_new_key": "＋"
    },
    "install_tmux": "安装 tmux",
    "reconnected": "已重新连接"
  },
  "mcp": {
    "badge": "MCP",
    "title": "MCP 服务器",
    "subtitle": "管理模型上下文协议服务器连接",
    "empty": "未配置 MCP 服务器",
    "empty_desc": "添加 MCP 服务器以通过外部工具扩展智能体能力。",
    "add_server": "添加服务器",
    "edit_server": "编辑服务器",
    "delete_server": "删除服务器",
    "delete_confirm": "确定要删除此 MCP 服务器吗？此操作不可撤销。",
    "name": "名称",
    "name_placeholder": "my-server",
    "transport_type": "传输方式",
    "command": "命令",
    "command_placeholder": "npx",
    "args": "参数",
    "args_placeholder": "每行一个参数",
    "add_argument": "添加参数",
    "remove_argument": "移除参数",
    "url": "URL",
    "url_placeholder": "http://localhost:3000/sse",
    "timeout": "超时（秒）",
    "env": "环境变量",
    "env_placeholder": "KEY=VALUE",
    "add_variable": "添加变量",
    "remove_variable": "移除变量",
    "headers": "请求头",
    "headers_placeholder": "Header: value（每行一个）",
    "connected": "已连接",
    "disconnected": "未连接",
    "tools": "工具",
    "tools_count": "{{count}} 个工具",
    "no_tools": "无工具",
    "configured": "已配置",
    "total_configured": "{{count}} 个已配置",
    "total_connected": "{{count}} 个已连接",
    "add_success": "MCP 服务器已添加",
    "add_failed": "添加 MCP 服务器失败",
    "update_success": "MCP 服务器已更新",
    "update_failed": "更新 MCP 服务器失败",
    "delete_success": "MCP 服务器已删除",
    "delete_failed": "删除 MCP 服务器失败",
    "show_tools": "显示工具",
    "hide_tools": "隐藏工具",
    "help": "MCP（Model Context Protocol）服务器是你的 agent 可以调用的外部工具提供方。协议标准化了工具发现和调用方式，所以任何符合 MCP 的服务器一旦加进来，都能被本实例的 agent 用上。\n\n支持的传输方式：\n  · stdio —— 运行本地命令（如 `npx`、`python`）\n  · SSE —— 通过 Server-Sent Events 连接\n  · HTTP —— 通过 HTTP Streamable 连接\n\n使用步骤：\n\n1. 从目录安装。在目录页找到已知服务器点 \"Install\"，传输、参数、env 都会预填。\n\n2. 自定义添加。\"Add server\" 可以接入任意 MCP 服务器——选传输、填 command / URL、加参数和 env。\n\n3. 鉴权。需要 OAuth 的服务器会显示 \"Authorize\"，点击进入 PKCE 流程。token 过期时 re-authorize；要回收时 revoke。\n\n4. 验证。添加 / 连接成功后，卡片会列出该服务器的工具列表。Agent 通过工具策略申请使用。\n\n典型场景：\n\n  · 接一个文件系统 MCP，让 agent 能读写一个沙盒目录。\n  · 接 SaaS MCP（Notion、Linear 等）做 ticket / doc 流。\n  · 跑一个内部 MCP 服务器，把业务 API 暴露给 agent。\n\n注意事项：\n\n  · OAuth 流程是 UI 驱动的——daemon 检测 401，API 服务器跑 PKCE 与 callback。服务器支持时使用 Dynamic Client Registration（RFC 7591）。\n  · env 变量值按你填的存；当作机密对待。\n  · 失败的服务器会以 auth-pending / failed 留在列表上；调试工具前先确认鉴权和传输。",
    "auth_authorized": "已授权",
    "auth_pending": "授权中...",
    "auth_authorize": "授权",
    "auth_reauthorize": "重新授权",
    "auth_revoke": "撤销",
    "auth_started": "授权已开始 — 请在新标签页中完成",
    "auth_revoked": "授权已撤销",
    "auth_failed": "认证失败",
    "auth_start_failed": "启动认证失败",
    "auth_revoke_failed": "撤销认证失败",
    "tab_my_servers": "服务器",
    "tab_catalog": "MCP 市场",
    "catalog_subtitle": "浏览并安装预配置的 MCP 服务器模板",
    "catalog_empty": "暂无可用的 MCP 服务器模板",
    "catalog_empty_desc": "MCP 服务器模板将在 Registry 同步后显示。",
    "catalog_installed": "已安装",
    "catalog_install": "安装",
    "catalog_search_placeholder": "搜索 MCP 服务器...",
    "reload": "重新加载",
    "reload_success": "MCP 服务器已重新加载",
    "reload_failed": "重新加载 MCP 服务器失败",
    "health_ok": "健康",
    "health_degraded": "降级",
    "search_placeholder": "搜索服务器...",
    "filter_all": "全部",
    "filter_connected": "已连接",
    "filter_disconnected": "未连接",
    "no_results": "没有匹配的服务器",
    "no_results_desc": "请尝试其他搜索词或筛选条件。",
    "show_more_tools": "显示另外 {{count}} 个...",
    "stdio_config": "Stdio 配置",
    "connection": "连接",
    "url_hint": "URL 必须以 http:// 或 https:// 开头",
    "env_setup_title": "配置 {{name}}",
    "env_setup_desc": "输入所需的 API 密钥和环境变量以完成安装。",
    "requires_env_count_one": "{{count}} 个密钥",
    "requires_env_count_other": "{{count}} 个密钥",
    "wizard": {
      "eyebrow": "安装 · MCP 服务器",
      "step_permissions": "概览",
      "step_configure": "配置",
      "step_installing": "安装中",
      "step_done": "完成",
      "requires": "需要",
      "get_credential": "获取凭证",
      "review_notice": "安装后该服务器的工具会先受审批策略管控 —— 破坏性调用需要人工签字，直到你在策略中放宽。",
      "confirm_review": "我已了解此服务器能做什么。",
      "creds_note": "凭证加密存储在本地保险库，仅在该服务器进程连接时释放。",
      "installing": "正在安装 {{name}}…",
      "installing_sub": "持久化配置，注册到运行时。",
      "done_title": "已安装",
      "done_body": "{{name}} 已连接，工具已对智能体开放。",
      "view_servers": "查看服务器"
    },
    "edit_taint_policy": "污点策略",
    "taint_policy_short": "污点",
    "taint_policy_title": "污点策略 — {{name}}",
    "taint_policy_saved": "已保存污点策略",
    "taint_policy_save_failed": "保存污点策略失败",
    "taint_scanning_label": "出站污点扫描",
    "taint_scanning_help": "关闭后，本服务器的工具参数将不再执行内容启发式扫描。开启时，敏感键名拦截与下方的逐工具规则仍然生效。",
    "taint_scanning_off_warning": "服务器级扫描关闭时，下方逐工具豁免会被忽略。重新开启扫描以启用细粒度策略。",
    "taint_tools_heading": "逐工具豁免",
    "taint_add_tool": "添加工具策略",
    "taint_remove_tool": "移除工具策略",
    "taint_no_tool_policies": "尚未配置逐工具豁免。新增一项可为已知安全的参数跳过特定规则。",
    "taint_tool": "工具",
    "taint_paths_heading": "路径豁免",
    "taint_add_path": "新增路径",
    "taint_remove_path": "移除路径豁免",
    "taint_no_paths": "无路径豁免，完整规则集合将作用于所有参数。",
    "taint_default_skip_hint": "default = skip — 该工具已绕过扫描，下方路径配置将被忽略。",
    "taint_skip_rule_sets_hint": "default = skip 会完全跳过扫描——上方 rule_sets 不会触发（包括 Log）。如需仅审计，请改回 default = scan。",
    "taint_rule_sets_placeholder": "[[taint_rules]] 中定义的名称，逗号分隔",
    "taint_rule_sets_overlap_hint": "多个集合覆盖同一规则时，最宽松的动作生效（log > warn > block）——仅审计的集合会静默使同规则上的 block 失效。",
    "taint_rule_sets_unknown_hint": "未知 rule_set 名称：{{names}} —— 未在任何 [[taint_rules]] 中定义，扫描器会按 no-op 处理。",
    "view_detail": "查看服务器详情",
    "transport": "传输",
    "required_env": "必需环境变量",
    "setup_instructions": "设置说明",
    "taint_rule_label": {
      "authorization_literal": "拦截 `Authorization:` 请求头前缀",
      "key_value_secret": "拦截 `key=value` / `key: value` 格式的密钥",
      "well_known_prefix": "拦截 `sk-` / `ghp_` / `AKIA` / `AIza` 前缀",
      "opaque_token": "拦截长混合字母数字的不透明令牌",
      "pii_email": "拦截电子邮箱地址",
      "pii_phone": "拦截电话号码",
      "pii_credit_card": "拦截信用卡号",
      "pii_ssn": "拦截社会安全号码",
      "sensitive_key_name": "拦截名为 `authorization`/`api_key`/… 的 JSON 键"
    }
  },
  "toml_viewer": {
    "tab_toml": "TOML",
    "tab_markdown": "Markdown",
    "copy": "复制到剪贴板",
    "copied": "已复制",
    "copy_failed": "复制失败",
    "download": "下载",
    "loading": "加载中…"
  },
  "audit": {
    "title": "审计日志",
    "subtitle": "按用户 / 动作 / Agent 检索的可筛选审计记录。",
    "help": "审计轨迹是这个实例每一次特权操作（agent spawn、审批、配置变更、RBAC 改动、密钥轮换等）的 hash 链防篡改日志。每条记录通过 SHA hash 链向前一条，事后改动旧记录会破坏链条，可被检测到。\n\n使用步骤：\n\n1. 筛选。按用户、agent、操作类型、channel 或时间区间收窄。筛选作用于内存窗口（服务端硬上限 5000 条）；更深历史需要导出。\n\n2. 检视。点击某行查看完整 payload、hash、prev-hash、时间戳。详情面板可复制 hash / JSON / 跳转链接，方便事故报告。\n\n3. 验证。Runtime 页有 \"Audit verify\" 按钮，会走完整链并报告 valid / invalid。可疑事件后或导出证据前跑一遍。\n\n4. 导出。CSV 用于报告；JSON 保留完整 payload 与 hashes，可离线验证链条（或喂给外部 SIEM）。\n\n典型场景：\n\n  · 事后回查：03:14 UTC 那次破坏性调用是谁批准的，参数是什么？\n  · 合规：每月导出所有 RBAC 与配置变更。\n  · 取证：通过离线重新验证链来检测某条记录是否被改过。\n\n注意事项：\n\n  · 5000 条内存窗口是热区上限，不是存储上限。旧记录还在磁盘上；导出从磁盘拉。\n  · 筛选只改变显示行数，不改变链条本身——验证总是对完整链做。\n  · 不要原地改记录。链条完整性依赖每条记录每个字节都和写入时一致。",
    "export_csv": "导出 CSV",
    "exporting": "导出中…",
    "export_error_title": "导出失败",
    "filters": "筛选",
    "quick_range": "快捷区间",
    "clear_all": "清除全部",
    "reset": "重置",
    "apply": "应用筛选",
    "f_user": "用户",
    "f_user_placeholder": "UUID 或名称",
    "f_action": "动作",
    "f_agent": "Agent",
    "f_agent_placeholder": "agent id",
    "f_channel": "渠道",
    "f_channel_placeholder": "api / telegram / …",
    "f_from": "起始时间",
    "f_to": "结束时间",
    "any": "（全部）",
    "forbidden_title": "需要管理员权限",
    "forbidden_body": "/api/audit/query 仅限管理员访问。请用 Admin 或 Owner api_key 登录。",
    "error_title": "加载审计日志失败",
    "empty_title": "没有匹配的审计记录",
    "empty_filtered": "尝试放宽筛选条件，或清除筛选查看最新记录。",
    "empty_unfiltered": "暂无记录。Agent 执行特权操作后会显示在此。",
    "filter_by_action": "按 {{action}} 筛选",
    "filter_by_user": "按此用户筛选",
    "filter_by_channel": "按此渠道筛选",
    "filter_by_agent": "按此 Agent 筛选",
    "hash_tooltip": "chain hash {{hash}}",
    "show_more": "展开",
    "show_less": "收起",
    "today": "今天",
    "yesterday": "昨天",
    "unknown_date": "未知日期",
    "range_custom": "自定义…",
    "export_json": "JSON",
    "export_csv_short": "CSV",
    "detail_title": "审计条目",
    "detail_seq": "序号",
    "detail_timestamp": "时间戳",
    "detail_action": "动作",
    "detail_outcome": "结果",
    "detail_agent": "Agent",
    "detail_user": "用户",
    "detail_channel": "渠道",
    "detail_payload": "详情",
    "detail_hash": "Hash",
    "detail_prev_hash": "Previous hash",
    "detail_copy_json": "复制 JSON",
    "detail_copy_hash": "复制 hash",
    "detail_copy_link": "复制永久链接",
    "detail_copied": "已复制",
    "open_detail": "查看详情",
    "preset_1h": "1小时",
    "preset_24h": "24小时",
    "preset_today": "今天",
    "preset_7d": "7天",
    "preset_30d": "30天"
  },
  "users": {
    "title": "用户与权限",
    "subtitle": "管理操作员账号、渠道绑定，并通过 CSV 批量导入。",
    "badge": "Phase 4 / M6",
    "help": "Users & RBAC 管理操作员账户和外部身份——每行是一个人或服务账户，含一个或多个 channel binding（Telegram / Discord / Slack / 邮箱）映射到 LibreFang 角色（admin / operator / viewer 等）。程序化访问的 API key 也在这里发放。仅管理员可访问。\n\n使用步骤：\n\n1. 创建。\"Create user\" → 填 ID、名字、角色；可选地加 channel binding 和 API key。保存。\n\n2. 编辑。点击行更新角色、增删 binding，设 per-user 预算 / memory / policy 提示（行上的徽标显示已设的项）。\n\n3. 批量入职。\"Paste CSV\" 一次导入多个用户——团队首日入职很方便。\n\n4. 轮换 / 撤销。Rotate 流程换 API key（旧 key 立即失效）。Delete 移除用户及所有 binding。\n\n典型场景：\n\n  · 加一个同事，让他在 Slack 上 DM 时按本人和正确角色路由。\n  · 给 CI 机器人发 API key 做程序化 agent 调用。\n  · 通过 CSV 批量入职一个团队 / 班级。\n\n注意事项：\n\n  · Rotate 对在途客户端是破坏性的——它们会立刻拿到 401。轮换生产 key 前要协调。\n  · Channel binding 在 (channel, identity) 上唯一——同一个 Telegram id 不能映射到两个 LibreFang 用户。\n  · per-user policy / 预算覆盖单独存放；行上的徽标告诉你哪个用户配了什么。",
    "simulator_link": "权限模拟器",
    "import_csv": "批量导入 (CSV)",
    "create": "新建用户",
    "create_title": "新建用户",
    "edit_title": "编辑用户",
    "search_label": "搜索",
    "search_placeholder": "用户名或 platform_id…",
    "role_filter_label": "角色",
    "all_roles": "全部角色",
    "role_label": "角色",
    "name_label": "用户名",
    "bindings_label": "渠道绑定",
    "bindings_empty": "暂无绑定。可使用身份绑定向导，按平台格式提示填写 platform_id。",
    "bindings_suffix": "条渠道绑定",
    "empty_title": "暂无用户",
    "empty_desc": "添加用户后再绑定平台身份，聊天事件才能归属到对应角色。",
    "api_key": "API 密钥",
    "has_policy_badge": "策略",
    "has_policy_title": "该用户配置了独立的工具策略 / 类别 / 渠道规则。",
    "has_memory_badge": "记忆",
    "has_memory_title": "该用户配置了自定义的记忆命名空间 ACL。",
    "has_budget_badge": "预算",
    "has_budget_title": "该用户配置了独立的支出上限。",
    "link": "绑定身份",
    "rotate_key": "轮换 API 密钥",
    "rotate_key_confirm": "立即轮换",
    "view_budget": "预算 →",
    "view_policy": "权限 →",
    "user": "用户",
    "confirm_delete_title": "删除用户？",
    "confirm_delete_body": "将从 config.toml 中移除该用户并重建 RBAC 渠道索引。此前映射到该用户的平台身份将回落到默认拒绝路径。",
    "confirm_rotate_title": "轮换 API 密钥？",
    "confirm_rotate_body": "为该用户生成新的 API 密钥。旧密钥立即失效，仍在使用旧密钥的客户端在下次请求时会收到 401 错误。新的明文密钥仅在下一屏显示一次，服务器之后无法再次还原。",
    "rotate_key_error_title": "轮换失败",
    "rotate_key_done_title": "新 API 密钥 — 请立即复制",
    "rotate_key_done_warning": "明文密钥仅显示这一次，请立即复制并妥善保存，服务器之后无法再次还原。",
    "rotate_key_done_user": "用户",
    "rotate_key_done_close": "我已复制密钥",
    "err_name_required": "用户名不能为空。",
    "err_id_required": "platform_id 不能为空。",
    "wizard_title": "绑定平台身份",
    "wizard_step1": "用户",
    "wizard_step2": "平台",
    "wizard_step3": "标识",
    "wizard_step4": "确认",
    "wizard_user_desc": "将为该用户新增一条绑定。此向导不会创建新用户 — 如需切换目标，请在列表中选择其他用户。",
    "wizard_platform": "平台",
    "wizard_platform_desc": "选择需要绑定的平台标识来源。",
    "wizard_id_desc": "粘贴平台标识，格式提示会随所选渠道变化。",
    "wizard_id_label": "platform_id",
    "wizard_example": "示例",
    "wizard_confirm_desc": "确认后将写入 config.toml。内核会就地重建 RBAC 渠道索引，无需重启。",
    "wizard_unverified_title": "无自动归属校验",
    "wizard_unverified_body": "LibreFang 暂未通过平台回查该 id 是否真正属于 {{user}}。具备 Owner 权限的人可以将任意 id 绑定到任意用户，导致后续 RBAC 与限流决策被悄悄改向。请在保存前与用户线下核对 platform_id。",
    "wizard_unverified_ack": "我已通过线下渠道核实 {{platformId}} 属于 {{user}}。",
    "wizard_ack_required": "请先确认归属警告再保存。",
    "wizard_commit": "保存绑定",
    "csv_read_failed": "无法读取文件 — 请尝试直接粘贴内容。",
    "csv_paste": "或粘贴 CSV",
    "csv_drop": "将 CSV 拖拽到此处，或点击选择文件。",
    "import_title": "批量导入用户",
    "import_desc": "上传包含 name,role,telegram,discord,slack,email 列的 CSV。角色必须为 owner / admin / user / viewer 之一。",
    "import_preview": "预览",
    "import_dry_summary": "演练结果",
    "import_summary": "导入完成",
    "import_dry_run": "演练导入",
    "import_commit": "提交导入",
    "import_bindings_count": "{{count}} 条绑定",
    "import_result_counts": "新建 {{created}} · 更新 {{updated}} · 失败 {{failed}}",
    "import_row_error": "第 {{row}} 行（{{name}}）：{{error}}",
    "roles": {
      "owner": "所有者",
      "admin": "管理员",
      "user": "用户",
      "viewer": "访客"
    },
    "platforms": {
      "telegram": {
        "label": "Telegram",
        "hint": "Telegram 数字用户 ID（可通过 @userinfobot 查看）。",
        "example": "123456789"
      },
      "discord": {
        "label": "Discord",
        "hint": "Discord 数字用户 ID（开发者模式下右键 → 复制用户 ID）。",
        "example": "987654321098765432"
      },
      "slack": {
        "label": "Slack",
        "hint": "Slack 成员 ID（个人资料 → 更多 → 复制成员 ID）。",
        "example": "U01ABCDEFGH"
      },
      "email": {
        "label": "邮箱",
        "hint": "发件邮箱地址（用于 IMAP / Mailgun 渠道）。",
        "example": "alice@example.com"
      },
      "wechat": {
        "label": "微信",
        "hint": "已配置企业的企业微信 / 微信 OpenID。",
        "example": "abc123@im.wechat"
      }
    },
    "row_actions": "更多操作",
    "view_budget_chip": "预算",
    "view_policy_chip": "权限",
    "rotate_key_only_chance": "这是复制此密钥的唯一机会。关闭此对话框后，明文将丢失，服务器无法再次生成。",
    "rotate_key_must_copy": "请先点击「复制」。复制到剪贴板后，关闭按钮才会启用。",
    "rotate_key_failed_toast": "轮换失败：{{message}}",
    "rotate_key_copy_failed": "复制失败，请手动选中并复制密钥后再关闭对话框。",
    "rotate_key_copied_confirm": "已复制，可以关闭",
    "csv_drop_aria": "上传 CSV 文件：拖放到此处或激活以浏览",
    "csv_paste_placeholder": "alice,user,telegram=123456789;email=alice@example.com",
    "wizard_step_platform": "平台",
    "wizard_step_identity": "标识",
    "wizard_user_chip": "正在关联标识到",
    "wizard_show_warning": "为什么重要",
    "wizard_hide_warning": "隐藏警告",
    "wizard_step_back_aria": "返回第 {{n}} 步"
  },
  "userBudget": {
    "fields": {
      "max_hourly": "每小时上限（美元）",
      "max_daily": "每日上限（美元）",
      "max_monthly": "每月上限（美元）",
      "alert_threshold": "告警阈值（0–1）"
    },
    "errors": {
      "non_negative": "{{field}} 必须是有限的非负数",
      "threshold_range": "alert_threshold 必须在 0.0..=1.0 范围内"
    },
    "toast": {
      "saved": "支出上限已保存"
    }
  },
  "userPolicy": {
    "toggle": {
      "configured": "已配置",
      "not_set": "未设置"
    },
    "errors": {
      "empty_entry": "{{field}} 中存在空白条目",
      "duplicate_entry": "{{field}} 中存在重复条目 '{{item}}'",
      "writable_not_subset": "memory_access.writable_namespaces['{{ns}}'] 不在 readable_namespaces 中（可写必须是可读的子集）"
    },
    "discard": "放弃更改",
    "no_changes": "无未保存的更改",
    "unsaved_changes": "有未保存的更改",
    "save_disabled_invalid": "请先修正上方的校验错误才能保存",
    "discard_confirm_title": "放弃未保存的更改？",
    "discard_confirm_body": "将所有字段恢复为上次从服务器加载的值。自上次保存以来的修改将会丢失。"
  },
  "permissionSimulator": {
    "status": {
      "configured": "已配置",
      "not_configured": "未配置"
    },
    "budget": {
      "unlimited_window": "该窗口不限"
    },
    "actions": {
      "ChatWithAgent": {
        "label": "与 Agent 对话",
        "description": "向运行中的 Agent 发送消息。"
      },
      "ViewConfig": {
        "label": "查看配置",
        "description": "读取内核配置（敏感信息已脱敏）。"
      },
      "ViewUsage": {
        "label": "查看用量 / 账单",
        "description": "查看 token / 成本仪表盘。"
      },
      "SpawnAgent": {
        "label": "启动 Agent",
        "description": "创建并启动新的 Agent 进程。"
      },
      "KillAgent": {
        "label": "终止 Agent",
        "description": "停止正在运行的 Agent。"
      },
      "InstallSkill": {
        "label": "安装技能",
        "description": "安装 ClawHub / Skillhub / 本地技能。"
      },
      "ModifyConfig": {
        "label": "修改配置",
        "description": "将变更写回 config.toml。"
      },
      "ManageUsers": {
        "label": "管理用户",
        "description": "创建 / 删除用户并重新绑定身份。"
      }
    }
  },
  "user_budget": {
    "title": "用户预算",
    "back": "返回用户列表",
    "loading": "加载中…",
    "fetch_error": "加载预算失败",
    "set_limits": "设置消费上限",
    "current_spend": "当前消费 (USD)",
    "alert_breach": "已触发告警",
    "enforced": "已强制执行",
    "deferred": "强制执行已延迟",
    "save": "保存",
    "saving": "保存中…",
    "clear": "清除上限",
    "clearing": "清除中…",
    "discard": "放弃更改",
    "zero_means_unlimited": "将任意时间窗口设为 0 表示该窗口不限额。阈值是任一限额触发 BudgetExceeded 审计事件时的比例。",
    "help": "单个用户的开销上限。这个用户在所有 agent、所有 channel 上的总花销都计入这个上限。给同事或外人开放你的 LibreFang 实例又不想被刷爆 provider 额度时用。\n\n预算如何叠加：\n\n  · 全局预算（/dashboard/runtime 设置）——kernel 整体上限。撞到了所有 agent 都停。\n  · 单 agent 预算（agent.toml 里设）——限制某个 agent。\n  · 单用户预算（本页）——限制某个用户的总花销。\n  · **最严格的限额生效**。全局还剩 $5、用户还剩 $50，那这个用户就只能再花 $5。\n\n本页显示：\n\n  · 当前周期花销、上限、已用百分比、滚动窗口（日 / 周 / 月）。\n  · 跨过告警阈值但未撞硬上限时显示 \"alert breach\" 徽章。\n  · 按 provider 拆分：每家 provider 在这个用户身上花了多少。\n\n注意事项：\n\n  · 没配预算的用户是无限额（仍受全局和 agent 级上限约束）。\n  · 改动在用户下一次请求时生效，正在跑的 LLM 调用不会被中断。\n  · 花销历史持久化在 SQLite，删用户不会删历史（审计需要）。",
    "of_cap": "/ {{cap}}",
    "over_threshold": "已超阈值",
    "no_cap": "本窗口未设上限"
  },
  "user_policy": {
    "title": "权限矩阵",
    "back": "返回用户列表",
    "save": "保存",
    "saved": "策略已保存。",
    "load_error_title": "加载策略失败",
    "load_error_body": "守护进程在获取该用户的策略切片时返回了错误。",
    "section_tool_policy": "工具允许 / 拒绝",
    "tool_policy_desc": "针对单个用户的允许 + 拒绝模式。叠加在 Agent 和渠道规则之上。拒绝优先。",
    "allowed_tools": "允许的工具",
    "denied_tools": "拒绝的工具",
    "glob_hint": "每行一个模式。允许使用 `*` 通配符。",
    "glob_hint_deny": "始终优先于允许列表。",
    "section_categories": "工具分类",
    "categories_desc": "按工具组名称批量允许 / 拒绝（在 `KernelConfig.tool_policy.groups` 中定义）。",
    "allowed_groups": "允许的组",
    "denied_groups": "拒绝的组",
    "group_hint": "每行一个组名（例如 `web_tools`）。",
    "section_memory": "记忆访问",
    "memory_desc": "命名空间 ACL + PII 脱敏开关。可写命名空间必须是可读命名空间的子集。",
    "readable_ns": "可读命名空间",
    "writable_ns": "可写命名空间",
    "ns_hint": "每行一个命名空间。`*` 匹配全部。",
    "writable_hint": "必须是可读命名空间的子集。",
    "pii_access": "PII 访问",
    "export_allowed": "允许导出",
    "delete_allowed": "允许删除",
    "section_channels": "按渠道的工具规则",
    "channels_desc": "按渠道适配器（telegram / discord / …）覆盖用户的工具范围。使用下方输入框添加自定义适配器。",
    "custom_channel": "自定义",
    "remove_channel": "移除渠道",
    "add_channel_label": "添加渠道",
    "add_channel_placeholder": "wechat, matrix, …",
    "add_channel_hint": "渠道适配器名称（小写）。必须与桥接器发出的键匹配。",
    "add_channel_err_empty": "渠道名称必填。",
    "add_channel_err_duplicate": "渠道 '{{key}}' 已存在规则。",
    "help": "单个用户的 RBAC 全貌：能调哪些工具、放行哪些 category、哪些 channel 规则套在他身上、能跟哪些 agent 对话。**只读视图**——要改值请去 Users 页编辑用户，或者直接改 kernel 配置。\n\n三层叠加产生最终判定：\n\n  · 用户级 tool_policy / tool_categories——本页显示的覆盖。\n  · agent 级 ToolPolicy——agent.toml 里配。\n  · channel 级规则——[channels.<name>] 配置里设。\n\n使用步骤：\n\n  1. 顶部选用户。本页所有区段都按这个用户筛选。\n  2. 每一层显示：已配规则 + \"未配置\"标记（意思是\"穿透到下一层\"）。\n  3. 想看一次具体调用的最终判定，去 Permission Simulator (/dashboard/permission-simulator)，它会按 (user, agent, tool, channel) 跑完整交集。\n\n权限矩阵（本页）vs 权限模拟器：\n\n  · 矩阵——原始配置切片，不做决策逻辑。\n  · 模拟器——按具体场景跑三层交集，告诉你结果。\n\n注意事项：\n\n  · \"未配置\" 不等于\"拒绝\"，意思是\"穿透到其他层\"。某用户没配 tool_policy，仍然受 agent 和 channel 层规则约束。\n  · channel 规则只在请求经由该 channel 时才生效；web dashboard 和 CLI 调用绕过 channel 规则。\n  · 本页只读，编辑入口在 /dashboard/users → 点用户 → 编辑弹窗。"
  },
  "tool_policy": {
    "allowed_tools": "允许的工具",
    "denied_tools": "拒绝的工具"
  },
  "tool_categories": {
    "allowed_groups": "允许的组",
    "denied_groups": "拒绝的组"
  },
  "memory_access": {
    "readable_namespaces": "可读命名空间",
    "writable_namespaces": "可写命名空间"
  },
  "simulator": {
    "title": "权限模拟器",
    "subtitle": "选择一名用户，查看所有影响其权限的 RBAC 输入。",
    "badge": "实时",
    "user_label": "用户",
    "choose_user": "选择用户…",
    "empty_title": "没有可模拟的用户",
    "empty_desc": "请先在用户页面添加用户。",
    "not_found_title": "未找到用户",
    "not_found_desc": "所选用户未在 AuthManager 中注册。该用户可能在用户列表缓存之后已从 config.toml 中移除。",
    "error_title": "无法加载有效权限",
    "role_matrix_caption": "角色级粗粒度权限",
    "requires": "需要",
    "help": "权限模拟器选定一个用户后展示构成其有效权限的所有 RBAC 输入——角色、tool policy、允许 / 拒绝工具列表、允许 / 拒绝分组、channel 规则与 binding、memory namespace、预算上限、PII 访问、删除 / 导出权限。这是 \"为什么用户 X 有 / 没有访问 Y\" 的调试面。\n\n使用步骤：\n\n1. 选用户。用选择器，页面会铺开该用户的各分区。\n\n2. 看每个分区。每个分区显示该用户的原始配置切片——角色矩阵、tool policy、channel binding、memory 权限、预算等。\"未配置\" 表示该层对此用户保持沉默。\n\n3. 跟实际比对。运行时在调用时把这些切片做交集；本页不显示单次调用的网关判定，只显示输入。\n\n跟实际跑 agent 的区别：\n\n  · 模拟器 —— 快速静态查看所有输入，无需 LLM 调用。\n  · 实际 agent 调用 —— 唯一能反映真实行为的事实来源。\n\n典型场景：\n\n  · \"为什么用户 @bob 不能删记忆？\" ——分区显示 delete_off。\n  · \"新 tool policy 是不是真的对 @alice 生效了？\" ——看允许 / 拒绝列表。\n  · 给新外部用户开权限前审计 channel 规则覆盖。\n\n注意事项：\n\n  · 各分区显示原始切片，不是网关判定。运行时网关取 per-agent ToolPolicy + per-user tool_policy / tool_categories + per-channel 规则的交集；\"未配置\" 交给其他层决定。\n  · 模拟器读当前配置——你在 Users / Policy 页改完，刷新就立刻反映。",
    "tool_policy_title": "工具策略（按用户）",
    "tool_policy_unset": "交由 Agent ToolPolicy 和渠道规则决定。",
    "allowed_tools": "允许",
    "denied_tools": "拒绝",
    "no_allow_list": "未设置允许列表",
    "no_deny_list": "未设置拒绝列表",
    "tool_categories_title": "工具分类（按 ToolGroup 批量）",
    "tool_categories_unset": "该用户没有分类级别的覆盖。",
    "allowed_groups": "允许的组",
    "denied_groups": "拒绝的组",
    "memory_title": "记忆访问",
    "memory_unset": "回退到角色默认 ACL（Owner/Admin = 完全访问，User = proactive + kv:*，Viewer = proactive 只读）。",
    "readable_namespaces": "可读命名空间",
    "writable_namespaces": "可写命名空间",
    "no_namespaces": "无命名空间",
    "pii_access_on": "PII 访问 已开启",
    "pii_access_off": "PII 已脱敏",
    "export_on": "允许导出",
    "export_off": "禁止导出",
    "delete_on": "允许删除",
    "delete_off": "禁止删除",
    "budget_title": "按用户的预算上限",
    "budget_unset": "未设置用户级上限。仅受全局 / Agent / 提供商预算约束。",
    "budget_hourly": "每小时",
    "budget_daily": "每天",
    "budget_monthly": "每月",
    "alert_threshold_label": "告警阈值",
    "channel_bindings_title": "渠道绑定",
    "bindings_unset": "未绑定平台 ID。来自任何渠道的入站消息都将无法识别。",
    "channel_rules_title": "按渠道的工具覆盖",
    "channel_rules_unset": "未配置渠道级覆盖。全局 ApprovalPolicy.channel_rules 仍生效。"
  },
  "offline_banner": {
    "label": "守护进程不可达",
    "retry": "重试"
  },
  "connect_wizard": {
    "title": "连接守护进程",
    "subtitle": "输入守护进程 URL 与 API Key，或扫描配对 QR 码。",
    "tab_manual": "手动",
    "tab_qr": "扫描 QR",
    "field_url": "守护进程 URL",
    "field_api_key": "API Key",
    "field_device_name": "设备名称",
    "device_name_placeholder": "我的 iPhone",
    "device_name_help": "桌面端会显示此名称，用于后续撤销该设备。",
    "qr_card_title": "打开桌面 Dashboard",
    "qr_card_body": "前往 <strong>设置 → 移动配对</strong>，点击下方 <strong>扫描 QR</strong>。",
    "btn_connect": "连接",
    "btn_connecting": "连接中…",
    "btn_scan": "扫描 QR 码",
    "btn_scanning": "扫描中…",
    "btn_pairing": "配对中…",
    "done_title": "已连接！",
    "done_subtitle": "正在打开 Dashboard…",
    "error_title": "连接失败",
    "error_url_scheme": "URL 必须以 http:// 或 https:// 开头",
    "error_default_connect": "连接失败",
    "error_default_pairing": "配对失败",
    "btn_try_again": "重试",
    "device_name_default": "LibreFang Mobile"
  },
  "mobile_pairing": {
    "title": "移动配对",
    "subtitle": "打开 LibreFang 移动 App，点击 <strong>扫描 QR</strong> 即可连接到本守护进程。",
    "expired_message": "QR 码已过期 — 点击刷新获取新码。",
    "refresh": "刷新",
    "expired_label": "已过期",
    "paired_devices_heading": "已配对设备",
    "paired_at": "{{platform}} · 配对于 {{date}}",
    "remove_title": "移除设备",
    "remove_failed": "移除设备失败：{{reason}}",
    "remove_unknown_error": "未知错误",
    "error_disabled_title": "设备配对已禁用",
    "error_disabled_body": "请在 <link>配置 → 安全</link> 中启用配对（<code>pairing.enabled = true</code>）。",
    "error_generic_title": "无法生成配对码",
    "qr_aria_label": "用于与移动设备配对的二维码",
    "btn_try_again": "重试"
  },
  "shortcuts_help": {
    "title": "键盘快捷键",
    "general_heading": "通用",
    "nav_heading_prefix": "导航（按",
    "nav_heading_suffix": "后再按…）",
    "general": {
      "cmd_k": "打开命令面板",
      "focus_search": "聚焦当前页面搜索框",
      "create_new": "新建（智能体 / 工作流 / 插件，按页面区分）",
      "show_help": "显示本快捷键速查表",
      "close_dialog": "关闭对话框 / 模态窗"
    },
    "nav": {
      "overview": "总览",
      "chat": "聊天",
      "agents": "智能体",
      "hands": "工具手",
      "skills": "技能",
      "workflows": "工作流",
      "models": "模型",
      "providers": "提供商",
      "channels": "频道（网络）",
      "goals": "目标",
      "logs": "日志",
      "runtime": "运行时",
      "memory": "记忆",
      "analytics": "分析",
      "settings": "设置",
      "plugins": "插件",
      "scheduler": "调度器",
      "approvals": "审批",
      "sessions": "会话"
    }
  },
  "prompts_experiments": {
    "subtitle": "提示词与实验",
    "tab_versions": "版本",
    "tab_experiments": "实验",
    "new_version": "新建版本",
    "no_versions": "暂无提示词版本",
    "active": "当前生效",
    "activate": "激活",
    "created_label": "创建时间：",
    "create_version_title": "创建提示词版本",
    "system_prompt_label": "系统提示词",
    "system_prompt_placeholder": "你是一个有用的 AI 助手...",
    "description_optional": "描述（可选）",
    "description_placeholder": "这个版本有什么不同？",
    "creating": "创建中...",
    "create": "创建",
    "cancel": "取消",
    "new_experiment": "新建实验",
    "no_experiments": "暂无实验",
    "start": "开始",
    "pause": "暂停",
    "complete": "完成",
    "metrics": "指标",
    "experiment_metrics": "实验指标",
    "requests": "请求数",
    "avg_latency": "平均延迟",
    "avg_cost": "平均费用",
    "close_metrics": "关闭指标",
    "create_experiment_title": "创建实验",
    "experiment_name_label": "实验名称",
    "experiment_name_placeholder": "我的 A/B 测试",
    "select_versions_label": "选择提示词版本（至少 2 个）",
    "min_versions_warning": "请先创建至少 2 个提示词版本。",
    "control": "对照组",
    "variant_label": "变体 {{letter}}",
    "create_with_count": "创建（{{count}} 个变体）"
  }
}
