Files
clawpanel/src/locales/modules/agents.js
晴天 e710db6ffb feat(ux): 小白 UX 全面改造 - 错误友好度 + 致命操作强确认 + 空状态 + 新手引导 + 术语表
面向小白用户的产品定位重塑,从七大 UX 痛点逐一改造:

## U1 错误友好度(59 处改造)
- 新工具 src/lib/humanize-error.js:自动把后端原始错误(fetch failed、ENETUNREACH、ENOENT 等)
  映射成「主行 + hint 行动建议 + 折叠技术详情」三段式结构化对象
- toast 组件升级支持 { message, hint, raw } 结构化入参,向后完全兼容
- 14 个 page 文件中所有 toast(t('xxx.failed') + ': ' + e, 'error') 替换为 toast(humanizeError(e, t(...)), 'error')
- common.js 加 error.* / errorHint.* 共 13 个新 i18n 键(11 语言):
  网络/Gateway 未启动/命令缺失/权限/超时/限流/未找到/鉴权/服务繁忙/通用

## U2 致命操作强确认(14 处改造)
- showConfirm 升级支持结构化对象 { message, impact[], title, confirmText, cancelText, variant }
- 加 .modal-impact-list 红边样式(让小白看清楚删了会丢什么)
- 14 处致命操作改造,每处显示影响列表 + 红色「删除/移除/重置」按钮 + 灰色「保留」取消:
  · agents.js 删除 Agent(动态显示 N 个绑定影响)
  · channels.js 移除平台(动态算 N 个 binding)+ 移除 Agent binding
  · memory.js 删除记忆文件
  · services.js 卸载 Gateway(3 段影响)+ 删除备份
  · models.js 批量删模型
  · chat.js 删除会话 + 重置会话
  · dreaming.js 重置梦境日记 + 清空 grounded 短期记忆
  · agent-detail.js 解除渠道绑定
  · cron.js 删除任务(OpenClaw + Hermes 两端)
- skills.js 原生 confirm() 改 showConfirm
- hermes-cron.js 原生 confirm() 改 showConfirm,顺手修末尾多余 `}` 的 syntax 残留

## U3-C 空状态 emoji+CTA(5 页面)
- 通用 .empty-state 组件(大 emoji + 标题 + 副本 + CTA 按钮 + 紧凑变体)
- agents.js: 🤖 + 「+ 新建 Agent」CTA
- memory.js: 🧠 + 「+ 新建记忆文件」CTA(紧凑版)
- cron.js:  + 「+ 新建任务」CTA
- skills.js: 🛠️ + 「技能商店」CTA(点击切 Tab)
- channels.js: 💬 + 紧凑提示
- CTA 巧妙复用页面顶部已有按钮的 click,零重复逻辑

## U3-B Dashboard 新手任务卡片
- 蓝紫渐变卡片,4 步任务自动检测:启动 Gateway / 添加模型 / 创建 Agent / 第一次聊天
- 已完成:✓ 徽章 + 删除线 + 60% 透明
- 未完成:编号徽章 + 蓝色 CTA 按钮跳对应页面
- 全部完成 → 庆祝条「🎉 全部搞定!」+ 关闭按钮
- localStorage 标记,用户主动关闭后永久隐藏
- 14 个新 i18n 键,文案小白化(Gateway 是「发动机」/ Agent 是「分身」/ 模型给 AI 装「大脑」)

## U3-A 术语表页(/glossary)
- 25 个核心术语 × 4 大分类(核心 8 / 模型 6 / 接入 5 / 进阶 6)
- 搜索框实时过滤 + Tab 切换分类 + 卡片网格布局
- 每条术语:「比喻 + 一句话」描述(避免循环引用)+ 「打开页面 →」CTA 直达配置
- 3 语言(zh-CN / en / zh-TW)完整翻译,其他 8 语言 fallback
- 双引擎(OpenClaw + Hermes)共用路由
- dashboard quick-actions 加「📖 面板术语」入口

## U3-D 术语 ⓘ tooltip
- 通用 src/lib/term-tooltip.js helper:termHelpHtml(id) + attachTermTooltips(root)
- 8 个高频术语精简表(OAuth / Webhook / Bot Token / API Key / Token / Context Window / Binding / Scope)
- channels.js 字段 label 智能匹配关键词自动追加 ⓘ(覆盖 8 个渠道全部敏感字段)
- models.js 添加/编辑 provider 的 API Key label 也加 ⓘ
- 点 ⓘ → 弹小型 modal 含解释 + 「打开术语表 →」CTA
- attachTermTooltips 内部去重,可安全多次调用

## 累计交付
- 4 个新文件(humanize-error.js / term-tooltip.js / glossary.js page / glossary.js i18n)
- 6 个升级文件(toast / modal / components.css / dashboard / channels / models)
- 14 个 page 错误 toast 友好化(59 处)
- 14 处致命操作强确认
- 5 处空状态升级 + Dashboard 新手卡片 + 术语表 + ⓘ tooltip
- 109 个新 i18n 键(11 语言)
- Build 全程通过
2026-05-14 03:38:47 +08:00

55 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { _ } from '../helper.js'
export default {
title: _('Agent 管理', 'Agents', '', 'Agent 管理', 'Agent 관리', 'Quản lý Agent', 'Gestión de Agentes', 'Gestão de Agentes', 'Управление агентами', 'Gestion des Agents', 'Agenten-Verwaltung'),
desc: _('创建和管理 OpenClaw Agent配置身份、模型和工作区', 'Create and manage OpenClaw Agents, configure identity, model and workspace', '建立和管理 OpenClaw Agent設定身份、模型和工作區', 'OpenClaw Agent の作成と管理、ID・モデル・ワークスペースの設定', 'OpenClaw Agent 생성 및 관리, ID·모델·워크스페이스 설정', 'Tạo và quản lý OpenClaw Agent', 'Crear y gestionar OpenClaw Agents', 'Criar e gerenciar OpenClaw Agents', 'Создание и управление агентами OpenClaw', 'Créer et gérer les Agents OpenClaw', 'OpenClaw-Agenten erstellen und verwalten'),
addAgent: _('+ 新建 Agent', '+ New Agent', '', '+ 新規 Agent', '+ 새 Agent', '+ Agent mới', '+ Nuevo Agent', '+ Novo Agent', '+ Новый агент', '+ Nouvel Agent', '+ Neuer Agent'),
noAgents: _('暂无 Agent', 'No agents', '暫無 Agent', 'Agent なし', 'Agent 없음', 'Không có Agent', 'Sin Agentes', 'Sem Agentes', 'Нет агентов', 'Aucun Agent', 'Keine Agenten'),
loadFailed: _('加载失败', 'Load failed', '載入失敗', '読み込み失敗', '로드 실패', 'Tải thất bại', 'Error al cargar', 'Falha ao carregar', 'Ошибка загрузки', 'Échec du chargement', 'Laden fehlgeschlagen'),
loadListFailed: _('加载 Agent 列表失败', 'Failed to load agent list', '載入 Agent 列表失敗', 'Agent リストの読み込みに失敗', 'Agent 목록 로드 실패'),
noDesc: _('无描述', 'No description', '無描述', '説明なし', '설명 없음'),
default: _('默认', 'Default', '預設', 'デフォルト', '기본', 'Mặc định', 'Predeterminado', 'Padrão', 'По умолчанию', 'Par défaut', 'Standard'),
backup: _('备份', 'Backup', '備份', 'バックアップ', '백업', 'Sao lưu', 'Respaldo', '', 'Резервная копия', 'Sauvegarde'),
detail: _('详情', 'Details', '詳情', '詳細', '상세', 'Chi tiết', 'Detalles', 'Detalhes', 'Подробности', 'Détails', 'Details'),
edit: _('编辑', 'Edit', '編輯', '編集', '편집', 'Sửa', 'Editar', 'Editar', 'Редактировать', 'Modifier', 'Bearbeiten'),
delete: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xóa', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
labelName: _('名称:', 'Name:', '名稱:', '名前:', '이름:'),
labelModel: _('模型:', 'Model:', '', 'モデル:', '모델:'),
labelWorkspace: _('工作区:', 'Workspace:', '工作區:', 'ワークスペース:', '워크스페이스:'),
labelBindings: _('绑定渠道:', 'Bindings:', '綁定頻道:', 'バインドチャンネル:', '바인딩 채널:'),
notSet: _('未设置', 'Not set', '未設定', '未設定', '미설정', 'Chưa đặt', 'No configurado', 'Não definido', 'Не задано', 'Non défini', 'Nicht gesetzt'),
noBinding: _('未绑定渠道', 'No channel bound', '未綁定頻道', 'チャンネル未バインド', '채널 미바인딩'),
addModelsFirst: _('请先在模型配置页面添加模型', 'Please add models in the Models page first', '請先在模型設定頁面新增模型', '先にモデル設定ページでモデルを追加してください', '먼저 모델 설정 페이지에서 모델을 추가하세요'),
addTitle: _('新建 Agent', 'New Agent', '', '新規 Agent', '새 Agent', 'Agent mới', 'Nuevo Agent', 'Novo Agent', 'Новый агент', 'Nouvel Agent', 'Neuer Agent'),
agentId: _('Agent ID', 'Agent ID', '', '', '', '', '', '', 'ID агента', 'ID Agent', 'Agent-ID'),
agentIdPlaceholder: _('例如translator小写字母、数字、下划线、连字符', 'e.g. translator (lowercase, digits, underscore, hyphen)', '例如translator小写字母、數字、下劃線、連字符', '例: translator小文字、数字、アンダースコア、ハイフン', '예: translator (소문자, 숫자, 밑줄, 하이픈)'),
agentName: _('名称', 'Name', '名稱', '名前', '이름', 'Tên', 'Nombre', 'Nome', 'Имя', 'Nom'),
agentNamePlaceholder: _('例如:翻译助手', 'e.g. Translation Assistant', '', '例: 翻訳アシスタント', '예: 번역 도우미'),
agentEmoji: _('Emoji', 'Emoji'),
agentEmojiPlaceholder: _('例如:🌐(可选)', 'e.g. 🌐 (optional)', '例如:🌐(可選)', '例: 🌐(任意)', '예: 🌐 (선택)'),
agentModel: _('模型', 'Model', '', 'モデル', '모델', 'Mô hình', 'Modelo', 'Modelo', 'Модель', 'Modèle', 'Modell'),
agentWorkspace: _('工作区路径', 'Workspace Path', '工作區路徑', 'ワークスペースパス', '워크스페이스 경로'),
agentWorkspacePlaceholder: _('留空则自动创建(可选,绝对路径)', 'Leave empty to auto-create (optional, absolute path)', '留空則自動建立(可選,绝对路徑)', '空欄で自動作成(任意、絶対パス)', '비워두면 자동 생성 (선택, 절대 경로)'),
idRequired: _('请输入 Agent ID', 'Please enter an Agent ID', '請輸入 Agent ID', 'Agent ID を入力してください', 'Agent ID를 입력하세요'),
idInvalid: _('Agent ID 只能包含小写字母、数字、下划线和连字符', 'Agent ID can only contain lowercase letters, digits, underscores and hyphens', 'Agent ID 只能包含小写字母、數字、下劃線和連字符', 'Agent ID は小文字、数字、アンダースコア、ハイフンのみ使用可能です', 'Agent ID는 소문자, 숫자, 밑줄, 하이픈만 사용 가능합니다'),
created: _('Agent 已创建', 'Agent created', 'Agent 已建立', 'Agent 作成済み', 'Agent 생성됨', 'Agent đã tạo', 'Agent creado', 'Agent criado', 'Агент создан', 'Agent créé', 'Agent erstellt'),
createdNameFailed: _('Agent 已创建,但名称设置失败,可稍后编辑', 'Agent created, but name setting failed. You can edit it later.', 'Agent 已建立,但名稱設定失敗,可稍后編輯', 'Agent は作成されましたが名前の設定に失敗しました。後で編集できます。'),
createFailed: _('创建失败', 'Creation failed', '建立失敗', '作成失敗', '생성 실패', 'Tạo thất bại', 'Error al crear', 'Falha ao criar', 'Ошибка создания', 'Échec de la création', 'Erstellen fehlgeschlagen'),
editTitle: _('编辑 Agent — {id}', 'Edit Agent — {id}', '編輯 Agent — {id}', 'Agent 編集 — {id}', 'Agent 편집 — {id}', 'Sửa Agent — {id}', 'Editar Agent — {id}', 'Editar Agent — {id}', 'Редактировать агента — {id}', 'Modifier l\'Agent — {id}', 'Agent bearbeiten — {id}'),
workspaceReadonly: _('创建时指定,不可修改', 'Set at creation, cannot be changed', '建立時指定,不可修改', '作成時に設定、変更不可', '생성 시 설정, 변경 불가'),
updated: _('已更新', 'Updated', '', '更新済み', '업데이트됨', 'Đã cập nhật', 'Actualizado', 'Atualizado', 'Обновлено', 'Mis à jour', 'Aktualisiert'),
updateFailed: _('更新失败', 'Update failed', '更新失敗', '更新失敗', '업데이트 실패', 'Cập nhật thất bại', 'Error al actualizar', 'Falha ao atualizar', 'Ошибка обновления', 'Échec de la mise à jour', 'Aktualisierung fehlgeschlagen'),
confirmDelete: _('确定删除 Agent「{id}」?\n\n此操作将删除该 Agent 的所有数据和会话。', 'Delete Agent "{id}"?\n\nThis will delete all data and conversations for this agent.', '確定刪除 Agent「{id}」?\n\n此操作將刪除該 Agent 的所有資料和對話。', 'Agent「{id}」を削除しますか?\\n\\nこの Agent のすべてのデータと会話が削除されます。', 'Agent「{id}」를 삭제하시겠습니까?\\n\\n이 Agent의 모든 데이터와 대화가 삭제됩니다.'),
deleted: _('已删除', 'Deleted', '已刪除', '削除済み', '삭제됨', 'Đã xóa', 'Eliminado', 'Excluído', 'Удалён', 'Supprimé', 'Gelöscht'),
deleteFailed: _('删除失败', 'Delete failed', '刪除失敗', '削除失敗', '삭제 실패', 'Xóa thất bại', 'Error al eliminar', 'Falha ao excluir', 'Ошибка удаления', 'Échec de la suppression', 'Löschen fehlgeschlagen'),
deleteConfirmTitle: _('删除 Agent', 'Delete Agent', '刪除 Agent', 'Agent を削除', 'Agent 삭제', 'Xóa Agent', 'Eliminar Agent', 'Excluir Agent', 'Удалить Agent', 'Supprimer l\u2019Agent', 'Agent löschen'),
deleteConfirmBtn: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xóa', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
deleteCancelBtn: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
deleteImpactBindings: _('将解除该 Agent 的 {n} 个渠道绑定', 'Will unbind the {n} channel binding(s) of this Agent', '將解除該 Agent 的 {n} 個頻道綁定', 'この Agent の {n} 件のチャンネル連携が解除されます', '이 Agent의 {n}개 채널 연결이 해제됩니다', 'Sẽ huỷ {n} liên kết kênh của Agent này', 'Se desvincularán los {n} canales de este Agent', 'As {n} vinculações de canal deste Agent serão removidas', '{n} привязок каналов этого Agent будут отменены', 'Les {n} liaisons de canal de cet Agent seront supprimées', 'Die {n} Kanalverknüpfungen dieses Agent werden aufgehoben'),
deleteImpactConfig: _('Agent 配置文件将被删除(无法恢复)', 'Agent config files will be deleted (cannot be recovered)', 'Agent 設定檔案將被刪除(無法復原)', 'Agent の設定ファイルが削除されます(復元できません)', 'Agent 설정 파일이 삭제됩니다 (복구할 수 없음)', 'Tệp cấu hình của Agent sẽ bị xóa (không thể khôi phục)', 'Los archivos de configuración del Agent se eliminarán (irreversible)', 'Os arquivos de configuração do Agent serão excluídos (irreversível)', 'Файлы конфигурации Agent будут удалены (без возможности восстановления)', 'Les fichiers de configuration de l\u2019Agent seront supprimés (irréversible)', 'Die Konfigurationsdateien des Agent werden gelöscht (nicht wiederherstellbar)'),
backingUp: _('正在备份 Agent「{id}」...', 'Backing up Agent "{id}"...', '正在備份 Agent「{id}」...', 'Agent「{id}」をバックアップ中...', 'Agent「{id}」 백업 중...'),
backupDone: _('备份完成: {file}', 'Backup done: {file}', '備份完成: {file}', 'バックアップ完了: {file}', '백업 완료: {file}'),
backupFailed: _('备份失败', 'Backup failed', '備份失敗', 'バックアップ失敗', '백업 실패'),
detailHint: _('点击卡片空白区域或“详情”按钮,进入新的 Agent 详情页。', 'Click a card or the Details button to open the new Agent detail page.', '點擊卡片空白區域或「詳情」按鈕,進入新的 Agent 詳情頁。', 'カード余白または「詳細」ボタンから Agent 詳細へ移動します。', '카드 빈 영역 또는 상세 버튼으로 Agent 상세 페이지로 이동합니다.'),
}