feat: v2.7.8 — Artifacts hub, clone related repos as extra folders, quieter resume prompt

- Artifacts (/artifacts): claude.ai pages sessions publish (captured from the
  Artifact tool's hook), pinned workspace files, skills and plugins, each
  kept as a snapshot; shared ones appear in a Hub and a skill or plugin
  installs into the viewer's own account (server/lib/artifacts.js,
  /api/artifacts, docs/plans/artifacts/).
- Workspace extra folders: clone one or more related repos beside the
  workspace and add them in one step (POST /api/lanes/:id/sources/clone).
- A pane that ended by itself while tmux kept running is no longer offered
  for resume (tmux.serverStartedAt in reconcileOrphans).
- Changes panel: a folder that is not a git repo opens on Files, and its
  files open from there.
- Plus the parallel sessions' work in this tree: File Explorer button in the
  panel header, user delete, RSA SSH keys, chat/terminal and pet fixes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-14 16:04:03 +07:00
parent e94038481e
commit 22de5009ff
79 changed files with 4617 additions and 231 deletions
+75
View File
@@ -0,0 +1,75 @@
{
"title": "Artifacts",
"subtitle": "Những gì agent đã tạo ra — trang claude.ai, file, skill và plugin — gom một chỗ.",
"subtitleServer": "Những gì agent đã tạo ra — trang claude.ai, file, skill và plugin. Chia sẻ một mục là nó hiện trong Hub cho mọi người.",
"tab.mine": "Thư viện của tôi",
"tab.hub": "Hub",
"kind.all": "Tất cả",
"kind.page": "Trang",
"kind.file": "File",
"kind.skill": "Skill",
"kind.plugin": "Plugin",
"kindOne.page": "Trang",
"kindOne.file": "File",
"kindOne.skill": "Skill",
"kindOne.plugin": "Plugin",
"search": "Tìm artifact…",
"add": "Thêm",
"add.page": "Link claude.ai",
"add.file": "File từ workspace",
"add.skill": "Skill",
"add.plugin": "Plugin",
"empty.mine": "Chưa có gì. Trang mà phiên publish sẽ tự xuất hiện; thêm file, skill và plugin bằng nút Thêm.",
"empty.hub": "Chưa ai chia sẻ gì.",
"loading": "Đang tải…",
"by": "của {{name}}",
"shared": "Đã chia sẻ",
"share": "Chia sẻ",
"unshare": "Bỏ chia sẻ",
"shareDone": "Đã chia sẻ lên Hub",
"unshareDone": "Đã gỡ khỏi Hub",
"open": "Mở",
"preview": "Xem",
"download": "Tải về",
"install": "Cài",
"installs": "{{count}} lượt cài",
"installed": "Đã cài vào {{path}}",
"installedPlugin": "Đã cài {{name}} — mở phiên mới (hoặc /reload-plugins) để dùng",
"rename": "Đổi tên",
"delete": "Xoá",
"deleteTitle": "Xoá “{{title}}”?",
"deleteBody": "Mục này bị gỡ khỏi thư viện của bạn và Hub. Những bản người khác đã cài vẫn giữ nguyên.",
"deleteConfirm": "Xoá",
"installTitle": "Cài “{{title}}”?",
"installSkillBody": "Các file này được ghi vào ~/.claude/skills/{{name}}/ của chính bạn. Skill có thể kèm script mà agent sẽ chạy — chỉ cài thứ bạn tin:",
"installPluginBody": "Chạy dưới tài khoản của bạn: claude plugin marketplace add {{market}} và claude plugin install {{name}} --scope user. Chỉ cài thứ bạn tin.",
"installConfirm": "Cài",
"replaceTitle": "Thay skill “{{name}}” của bạn?",
"replaceBody": "Bạn đã có skill trùng tên. Bản cũ được chuyển vào ~/.claude/agenthub-replaced-skills/, không bị xoá.",
"replaceConfirm": "Thay",
"installsOff": "Đang tắt cài đặt",
"installsSwitch": "Cho phép cài từ Hub",
"installsSwitchHint": "Tắt: không ai cài được skill hay plugin chia sẻ vào tài khoản của mình.",
"form.url": "Link claude.ai",
"form.title": "Tiêu đề (tuỳ chọn)",
"form.description": "Mô tả (tuỳ chọn)",
"form.workspace": "Workspace",
"form.pickWorkspace": "Chọn workspace…",
"form.noCandidates": "Các phiên của workspace này chưa ghi tài liệu nào.",
"form.pinned": "Đã ghim",
"form.pin": "Ghim",
"form.missing": "đã mất",
"form.skillFrom": "Skill",
"form.fromUser": "của tôi",
"form.fromWorkspace": "workspace",
"form.noSkills": "Không thấy skill nào trong ~/.claude/skills của bạn hay .claude/skills của workspace này.",
"form.pluginKey": "Plugin (tên@marketplace)",
"form.market": "Marketplace (owner/repo hoặc git URL)",
"form.save": "Thêm",
"form.cancel": "Huỷ",
"added": "Đã thêm",
"files": "{{count}} file",
"close": "Đóng",
"fromSession": "Từ một phiên",
"form.saveEdit": "Lưu"
}