Files
clawpanel/src/locales/modules/memory.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

48 lines
6.9 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: _('记忆文件', 'Memory Files', '記憶檔案', 'メモリ', '메모리', 'Bộ nhớ', 'Memoria', 'Memória', 'Память', 'Mémoire', 'Speicher'),
agentLabel: _('Agent:', 'Agent:'),
newFile: _('+ 新建', '+ New'),
deleteFile: _('删除', 'Delete', '刪除'),
exportZip: _('打包下载全部', 'Export All as ZIP', '打包下載全部'),
selectFile: _('选择文件查看', 'Select a file to view', '選擇檔案查看'),
download: _('下载', 'Download', '下載', 'ダウンロード', '다운로드', 'Tải xuống', 'Descargar', 'Baixar', 'Скачать', 'Télécharger', 'Herunterladen'),
preview: _('预览', 'Preview', '預覽'),
save: _('保存', 'Save', '儲存'),
edit: _('编辑', 'Edit', '編輯'),
editorPlaceholder: _('选择左侧文件进行编辑...', 'Select a file on the left to edit...', '選擇左側檔案進行編輯...'),
catMemory: _('工作记忆', 'Working Memory', '工作記憶'),
catMemoryDesc: _('当前活跃的工作上下文、决策记录和进度追踪', 'Active working context, decision records and progress tracking', '目前活躍的工作上下文、決策紀錄和進度追踪'),
catArchive: _('记忆归档', 'Memory Archive', '記憶歸檔'),
catArchiveDesc: _('已归档的历史记忆文件,按时间周期整理', 'Archived historical memory files, organized by time period', '已歸檔的歷史記憶檔案,按時間周期整理'),
catCore: _('核心文件', 'Core Files', '核心檔案'),
catCoreDesc: _('Agent 核心配置文件,如 AGENTS.md、CLAUDE.md 等', 'Agent core configuration files like AGENTS.md, CLAUDE.md, etc.', 'Agent 核心設定檔案,如 AGENTS.md、CLAUDE.md 等'),
newFileTitle: _('新建记忆文件', 'New Memory File', '新建記憶檔案'),
newFileLabel: _('文件名', 'Filename', '檔案名'),
newFilePlaceholder: _('如 notes.md', 'e.g. notes.md'),
newFileHint: _('建议使用 .md 格式,文件将保存到当前分类目录下', 'Recommended .md format. File will be saved to the current category directory', '建議使用 .md 格式,檔案將儲存到目前分類目錄下'),
created: _('已创建 {name}', 'Created {name}', '已建立 {name}'),
createFailed: _('创建失败', 'Failed to create', '建立失敗'),
confirmDelete: _('确定删除 {name}', 'Delete {name}?', '確定刪除 {name}', 'メモリファイル「{name}」を削除しますか?', '메모리 파일「{name}」을 삭제하시겠습니까?'),
deleteConfirmTitle: _('删除记忆文件「{name}」', 'Delete memory file "{name}"', '刪除記憶檔案「{name}」', 'メモリファイル「{name}」を削除', '메모리 파일「{name}」 삭제', 'Xoá tệp ký ức "{name}"', 'Eliminar archivo de memoria "{name}"', 'Excluir arquivo de memória "{name}"', 'Удалить файл памяти "{name}"', 'Supprimer le fichier de mémoire "{name}"', 'Speicherdatei "{name}" löschen'),
deleteConfirmBtn: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xoá', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
deleteCancelBtn: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
deleteImpactPermanent: _('文件将从 Hermes 记忆库永久删除,无法恢复', 'File will be permanently removed from the Hermes memory store and cannot be recovered', '檔案將從 Hermes 記憶庫永久刪除,無法復原', 'Hermes メモリストアから永久に削除され、復元できません', 'Hermes 메모리에서 영구 삭제되며 복구할 수 없습니다', 'Tệp sẽ bị xoá vĩnh viễn khỏi kho ký ức của Hermes, không thể khôi phục', 'El archivo se eliminará permanentemente del almacén de memoria de Hermes y no se podrá recuperar', 'O arquivo será removido permanentemente do armazenamento de memória do Hermes e não poderá ser recuperado', 'Файл будет навсегда удалён из хранилища памяти Hermes и не подлежит восстановлению', 'Le fichier sera supprimé définitivement de la mémoire de Hermes et ne pourra pas être restauré', 'Die Datei wird dauerhaft aus dem Hermes-Speicher entfernt und kann nicht wiederhergestellt werden'),
deleteImpactAgent: _('该 Agent 在新对话中将不再使用此记忆', 'The Agent will no longer use this memory in new conversations', '該 Agent 在新對話中將不再使用此記憶', 'Agent は新しい会話でこのメモリを使用しなくなります', 'Agent는 새 대화에서 이 메모리를 더 이상 사용하지 않습니다', 'Agent sẽ không dùng ký ức này trong các cuộc trò chuyện mới', 'El Agent dejará de usar esta memoria en nuevas conversaciones', 'O Agent deixará de usar esta memória em novas conversas', 'Agent больше не будет использовать эту память в новых беседах', 'L\u2019Agent n\u2019utilisera plus cette mémoire dans les nouvelles conversations', 'Der Agent verwendet diesen Speicher in neuen Gesprächen nicht mehr'),
deleted: _('已删除 {name}', 'Deleted {name}', '已刪除 {name}', '削除済み', '삭제됨', 'Đã xóa', 'Eliminado', 'Excluído', 'Удалено', 'Supprimé', 'Gelöscht'),
deleteFailed: _('删除失败', 'Failed to delete', '刪除失敗', '削除失敗', '삭제 실패', 'Xóa thất bại', 'Error al eliminar', 'Falha ao excluir', 'Ошибка удаления', 'Échec de la suppression', 'Löschen fehlgeschlagen'),
noFiles: _('暂无文件', 'No files', '暫無檔案', 'メモリファイルなし', '메모리 파일 없음', 'Không có tệp', 'Sin archivos', 'Sem arquivos', 'Нет файлов', 'Aucun fichier', 'Keine Dateien'),
loadFailed: _('加载失败', 'Load failed', '載入失敗', 'メモリファイルの読み込みに失敗', '메모리 파일 로드 실패', 'Tải thất bại', 'Error al cargar', 'Falha ao carregar', 'Ошибка загрузки', 'Échec du chargement', 'Laden fehlgeschlagen'),
loadListFailed: _('加载文件列表失败', 'Failed to load file list', '載入檔案列表失敗'),
loading: _('加载中...', 'Loading...', '載入中...'),
readFailed: _('读取失败', 'Read failed', '讀取失敗'),
readFileFailed: _('读取文件失败', 'Failed to read file', '讀取檔案失敗'),
fileSaved: _('文件已保存', 'File saved', '檔案已儲存'),
saveFailed: _('保存失败', 'Save failed', '儲存失敗'),
downloaded: _('已交给浏览器下载 {name},请查看默认下载目录', 'Download started for {name}; check your default downloads folder', '已交給瀏覽器下載 {name},請查看預設下載目錄'),
downloadFailed: _('下载失败', 'Download failed', '下載失敗'),
exported: _('已导出: {label} → {path}', 'Exported: {label} → {path}'),
exportFailed: _('打包下载失败', 'Export failed', '打包下載失敗'),
}