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": "What your agents produced — claude.ai pages, files, skills and plugins — kept in one place.",
"subtitleServer": "What your agents produced — claude.ai pages, files, skills and plugins. Share one and it appears in the Hub for everyone.",
"tab.mine": "My library",
"tab.hub": "Hub",
"kind.all": "All",
"kind.page": "Pages",
"kind.file": "Files",
"kind.skill": "Skills",
"kind.plugin": "Plugins",
"kindOne.page": "Page",
"kindOne.file": "File",
"kindOne.skill": "Skill",
"kindOne.plugin": "Plugin",
"search": "Search artifacts…",
"add": "Add",
"add.page": "claude.ai link",
"add.file": "File from a workspace",
"add.skill": "Skill",
"add.plugin": "Plugin",
"empty.mine": "Nothing here yet. Pages your sessions publish appear on their own; add files, skills and plugins with Add.",
"empty.hub": "Nobody has shared anything yet.",
"loading": "Loading…",
"by": "by {{name}}",
"shared": "Shared",
"share": "Share",
"unshare": "Unshare",
"shareDone": "Shared to the Hub",
"unshareDone": "Removed from the Hub",
"open": "Open",
"preview": "Preview",
"download": "Download",
"install": "Install",
"installs": "{{count}} installs",
"installed": "Installed to {{path}}",
"installedPlugin": "Installed {{name}} — start a new session (or /reload-plugins) to use it",
"rename": "Rename",
"delete": "Delete",
"deleteTitle": "Delete “{{title}}”?",
"deleteBody": "It is removed from your library and the Hub. Anything already installed from it stays installed.",
"deleteConfirm": "Delete",
"installTitle": "Install “{{title}}”?",
"installSkillBody": "These files are written to your own ~/.claude/skills/{{name}}/. A skill can carry scripts your agent will run — only install what you trust:",
"installPluginBody": "Runs, as your account: claude plugin marketplace add {{market}} and claude plugin install {{name}} --scope user. Only install what you trust.",
"installConfirm": "Install",
"replaceTitle": "Replace your skill “{{name}}”?",
"replaceBody": "You already have a skill with that name. Yours is moved to ~/.claude/agenthub-replaced-skills/, not deleted.",
"replaceConfirm": "Replace",
"installsOff": "Installs are off",
"installsSwitch": "Allow installing from the Hub",
"installsSwitchHint": "Off: nobody can install a shared skill or plugin into their account.",
"form.url": "claude.ai link",
"form.title": "Title (optional)",
"form.description": "Description (optional)",
"form.workspace": "Workspace",
"form.pickWorkspace": "Pick a workspace…",
"form.noCandidates": "No documents written by this workspace's sessions yet.",
"form.pinned": "Pinned",
"form.pin": "Pin",
"form.missing": "gone",
"form.skillFrom": "Skill",
"form.fromUser": "mine",
"form.fromWorkspace": "workspace",
"form.noSkills": "No skills found in your ~/.claude/skills or this workspace's .claude/skills.",
"form.pluginKey": "Plugin (name@marketplace)",
"form.market": "Marketplace (owner/repo or git URL)",
"form.save": "Add",
"form.cancel": "Cancel",
"added": "Added",
"files": "{{count}} files",
"close": "Close",
"fromSession": "From a session",
"form.saveEdit": "Save"
}
+8 -1
View File
@@ -417,6 +417,12 @@
"home.addFolder": "Add folder",
"home.folderPath": "Absolute folder path",
"home.add": "Add",
"home.cloneFolders": "Or clone repositories",
"home.cloneHint": "One URL per line — each is cloned into {{path}} with your own git login (Settings → Git) and added here.",
"home.clonePlaceholder": "https://host/owner/repo.git\ngit@host:owner/other.git",
"home.cloneRun": "Clone",
"home.cloneRetry": "Retry the failed ones",
"home.cloneDone": "Added",
"home.suggested": "Untracked worktrees",
"home.remove": "Remove",
"home.missing": "missing",
@@ -606,5 +612,6 @@
"fx.userHomes": "Users' homes",
"fx.readOnlyHome": "Another user's home — view and download only",
"fx.readOnly": "Read-only",
"fx.readOnlyHint": "This is another user's home: you can view, copy and download, not change it."
"fx.readOnlyHint": "This is another user's home: you can view, copy and download, not change it.",
"fx.homeEmpty": "Nothing in your home yet — its hidden files (.bashrc, .claude…) are not shown here. Your workspaces are on the left."
}
+1
View File
@@ -1,5 +1,6 @@
{
"activityFeed": "Activity Feed",
"artifacts": "Artifacts",
"agents": "Agents",
"analytics": "Analytics",
"avg": "avg",
+6 -4
View File
@@ -57,8 +57,7 @@
"attention": "Needs you",
"attentionError": "errored",
"attentionWaiting": "waiting on you",
"attentionMore": "+{{count}} more in Sessions",
"chat": "Chat with {{name}}"
"attentionMore": "+{{count}} more in Sessions"
},
"bubbleDismiss": "Dismiss",
"open": "Open {{name}} companion",
@@ -911,11 +910,14 @@
"removeKeyConfirm": "Delete this SSH key? Clones that use it can no longer fetch or push.",
"publicKey": "Public key",
"copy": "Copy public key",
"addKeyHint": "Add this public key to your account on the git host (GitHub: Settings → SSH and GPG keys; GitLab: Preferences → SSH Keys). The private key never leaves the server.",
"addKeyHint": "Add this public key to your account on the git host (GitHub: Settings → SSH and GPG keys; GitLab: Preferences → SSH Keys; AWS: IAM → Security credentials → SSH public keys — RSA only). Paste the whole line as one line. The private key never leaves the server.",
"noKey": "No SSH key yet. Without one, an SSH clone uses the account's default ~/.ssh keys.",
"httpsTitle": "HTTPS logins",
"noLogins": "No HTTPS login saved. A clone asks for one when a host needs it.",
"removeLoginConfirm": "Delete the login for {{host}}? Clones from that host will ask for a login again."
"removeLoginConfirm": "Delete the login for {{host}}? Clones from that host will ask for a login again.",
"keyType": "Key type",
"keyEd25519": "ED25519 (GitHub, GitLab, Gitea)",
"keyRsa": "RSA 4096 (AWS CodeCommit, older servers)"
},
"gitCreds": {
"title": "Git credentials",
+11 -2
View File
@@ -57,7 +57,8 @@
"enabled": "{{name}} enabled",
"password": "{{name}}'s password reset",
"workspace": "Workspace given to {{name}}",
"updated": "{{name}} updated"
"updated": "{{name}} updated",
"deleted": "{{name}} was deleted."
},
"errors": {
"EREAUTH": "Your password is wrong.",
@@ -72,7 +73,8 @@
"ENOTOWNED": "That workspace is not this user's any more.",
"EOWNERFOLDER": "That workspace's folder belongs to another user's account.",
"EBADROLE": "Unknown role.",
"ELOCALMODE": "Accounts are managed in server mode only."
"ELOCALMODE": "Accounts are managed in server mode only.",
"ELASTADMIN": "The last admin cannot be deleted."
},
"readOnly": "Analysts can view accounts but not change them.",
"auditTitle": "Audit log",
@@ -187,5 +189,12 @@
"codex": "An OpenAI API key (sk-…), or the whole ~/.codex/auth.json after `codex login` with a ChatGPT account."
},
"refreshFailed": "refresh failed"
},
"delete": {
"button": "Delete user",
"title": "Delete {{name}}?",
"body": "This deletes {{name}} for good: their login, {{count}} workspace(s), and their Linux account with the whole home folder (/srv/agenthub/users/{{user}}) — every file and all source code in it. It cannot be undone. Session history and the audit log stay.",
"confirm": "Delete for good",
"needsPassword": "Enter your own password below first."
}
}