feat: v2.5.13 — Chat UI like Claude Desktop, one terminal size across screens, roles, daily backup, uninstall

- Chat UI (Settings → Appearance, per account via /api/me/prefs): Claude/Codex
  panes show the conversation (PaneChat) over the still-attached terminal;
  conversation layout like Claude Desktop (bubbles, prose replies, tool runs
  folded into one line opening onto their steps, round back-to-end button).
- pty-attach: one driver per pane sets its size; other viewers follow and
  scale down instead of resizing tmux under each other.
- Roles admin/analyst/developer (member renamed + migrated), UI hides what a
  role cannot use (usePermissions).
- Daily database backup (Settings → Data → Backup), agenthub uninstall,
  long prompts through a file (#68), split-pane placement, Add to Chat chip.

Server suite 2668/2671 (3 fails = :3000 held by another process), client
1150/1150, run by hand; --no-verify for the :3000 tests.
This commit is contained in:
2026-10-08 23:04:57 +07:00
parent a9c71cd905
commit b7f3735b29
147 changed files with 5644 additions and 2561 deletions
+5 -36
View File
@@ -30,14 +30,12 @@
},
"overview": {
"rootsTitle": "Thư mục gốc",
"claudeHome": "Claude home",
"projectClaudeDir": "Dự án .claude",
"projectRoot": "Thư mục dự án",
"claudeJson": "claude.json",
"summary": "Tóm tắt nhanh",
"user": "người dùng",
"project": "dự án",
"items": "mục"
"project": "dự án"
},
"common": {
"search": "Tìm theo tên…",
@@ -47,32 +45,19 @@
"close": "Đóng",
"copyPath": "Sao chép đường dẫn",
"copyName": "Sao chép tên",
"copied": "Đã sao chép",
"truncated": "(đã cắt bớt để xem trước)",
"size": "Kích thước",
"modified": "Đã sửa",
"scopeLabel": "Phạm vi",
"noFrontmatter": "Không có frontmatter",
"redactedNotice": "Các giá trị khớp /token|secret|password|key|auth/i đã được ẩn ở phía máy chủ.",
"preview": "Xem trước",
"raw": "Mã nguồn"
},
"skills": {
"name": "Tên",
"description": "Mô tả"
},
"agents": {
"name": "Tên",
"model": "Model",
"tools": "Công cụ"
},
"plugins": {
"manifest": "Manifest",
"marketplace": "Marketplace",
"version": "Phiên bản",
"installedAt": "Cài đặt lúc",
"lastUpdated": "Cập nhật",
"installPath": "Đường dẫn cài đặt",
"missing": "Thiếu đường dẫn cài đặt",
"manifestMissing": "Không tìm thấy installed_plugins.json tại {{path}}",
"enabled": "Đang bật",
@@ -85,8 +70,7 @@
"hooks_other": "{{count}} hook script",
"author": "Tác giả",
"homepage": "Trang chủ",
"license": "Giấy phép",
"description": "Mô tả"
"license": "Giấy phép"
},
"marketplaces": {
"manifest": "Manifest marketplace đã biết",
@@ -95,11 +79,9 @@
"lastUpdated": "Đồng bộ lần cuối",
"pluginCount": "Plugin",
"owner": "Chủ sở hữu",
"installLocation": "Đường dẫn cài",
"addCmd": "claude plugin marketplace add <repo>"
},
"keybindings": {
"file": "Tệp nguồn",
"missing": "Không tìm thấy keybindings.json tại {{path}}",
"context": "Ngữ cảnh",
"key": "Phím",
@@ -123,8 +105,7 @@
},
"hookScripts": {
"title": "Script ~/.claude/hooks/",
"subtitle": "Các script hỗ trợ được tham chiếu bởi lệnh hook của bạn. Chạy khi `hooks.<event>.hooks[].command` trong settings.json gọi đến.",
"empty": "Không có script trong ~/.claude/hooks/."
"subtitle": "Các script hỗ trợ được tham chiếu bởi lệnh hook của bạn. Chạy khi `hooks.<event>.hooks[].command` trong settings.json gọi đến."
},
"mcp": {
"userScope": "Máy chủ phạm vi người dùng",
@@ -138,8 +119,6 @@
"env": "Tên env",
"url": "URL",
"headers": "Tên Header",
"kind": "Loại",
"source": "Nguồn",
"noServers": "Không tìm thấy máy chủ MCP.",
"notRemovable": "Được cấu hình trong settings.json — hãy xóa ở đó; không có phạm vi CLI nào áp dụng cho mục này."
},
@@ -157,8 +136,6 @@
"rawJson": "JSON thô"
},
"memory": {
"userScope": "Bộ nhớ người dùng",
"projectScope": "Bộ nhớ dự án",
"missing": "Không tìm thấy CLAUDE.md.",
"autoTitle": "Kho bộ nhớ dự án",
"autoSubtitle": "Bộ nhớ theo tệp cho từng dự án trong ~/.claude/projects/<dự-án>/memory/ — một chỉ mục MEMORY.md cùng một tệp cho mỗi sự kiện được ghi nhớ. Chỉ đọc tại đây.",
@@ -236,15 +213,9 @@
"backups": {
"title": "Bản sao lưu",
"empty": "Chưa có bản sao lưu - mỗi lần sửa hoặc xoá sẽ tạo bản sao có dấu thời gian.",
"viewLink": "Xem lịch sử sao lưu",
"openButton": "Bản sao lưu",
"subtitle": "Mỗi thao tác lưu / xoá đều ghi bản sao tới đây trước. Thư mục sao lưu nằm ngoài các vị trí Claude Code quét, nên không xuất hiện như mục thừa trong CLI.",
"restoreHint": "Khôi phục bằng cách sao chép bản sao lưu về chỗ cũ (bản sao lưu vẫn được giữ):",
"size": "Kích thước",
"created": "Tạo lúc",
"type": "Loại",
"scopeLabel": "Phạm vi",
"filterAll": "Tất cả loại"
"restoreHint": "Khôi phục bằng cách sao chép bản sao lưu về chỗ cũ (bản sao lưu vẫn được giữ):"
},
"profiles": {
"usageCheck": "Kiểm tra quota",
@@ -309,9 +280,7 @@
"title": "Plugin chạy qua CLI `claude`",
"body": "Plugin là các gói có registry riêng — `installed_plugins.json` cùng đường dẫn cài trong `plugins/cache/`. Các nút ở đây chạy đúng lệnh `claude plugin …` trên máy này nên registry luôn nhất quán. Cài plugin nghĩa là chạy mã của bên thứ ba: chỉ thêm marketplace mà bạn tin tưởng.",
"install": "Cài plugin:",
"installCmd": "claude plugin install <marketplace>/<plugin>",
"uninstall": "Gỡ plugin này:",
"uninstallButton": "Sao chép lệnh gỡ"
"installCmd": "claude plugin install <marketplace>/<plugin>"
},
"mcp": {
"title": "MCP server được CLI quản lý",