c356cf96a1
The Artifact tool writes a page into the session's own Claude Code scratchpad by default (<tmp>/claude-<uid>/<project>/<session>/scratchpad), but pageCopy took the file only from the workspace folder, so such a page got no copy and Preview said "the file ... is gone" while it was still there. pageCopy now also accepts that ONE scratchpad, named from the publishing session's id, its cwd and the workspace account's uid; before reading, each of its four folders must be a real directory of that account, and each file is realpath-confined, opened O_NOFOLLOW and must be a regular file of that uid. Supporting files come only from the page's own root. The older- page backfill (POST /api/artifacts/:id/copy) uses the session's cwd too. The noCopy message now says the file may also lie outside both.
284 lines
15 KiB
JSON
284 lines
15 KiB
JSON
{
|
|
"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": "No longer shared",
|
|
"reshare": "Share again",
|
|
"reshareDone": "New version shared — people who installed it are offered Update",
|
|
"reshareSame": "Already the newest version — shared",
|
|
"reshareAskTitle": "Choose the {{name}} folder again",
|
|
"reshareAskBody": "This server has no copy of {{name}}. Choose the skill's folder (the one holding SKILL.md): it replaces this version, and people who installed it are offered Update. For a .zip, upload it through Add skill → Upload: a skill with the same name updates your existing one.",
|
|
"resharePick": "Choose folder",
|
|
"open": "Open",
|
|
"copyLink": "Copy link",
|
|
"preview": "Preview",
|
|
"download": "Download",
|
|
"noPreview": "This file type cannot be shown here — download it to open it.",
|
|
"install": "Install",
|
|
"installed": "Installed to {{path}}",
|
|
"installedPlugin": "Installed {{name}} — start a new session (or /reload-plugins) to use it",
|
|
"rename": "Edit",
|
|
"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}}/ and ~/.agents/skills/{{name}}/, so every AI tool and session finds it. 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_one": "{{count}} file",
|
|
"files_other": "{{count}} files",
|
|
"close": "Close",
|
|
"fromSession": "From a session",
|
|
"form.saveEdit": "Save",
|
|
"skill.tab.upload": "Upload files",
|
|
"skill.tab.write": "Write new",
|
|
"skill.tab.existing": "From my skills",
|
|
"skill.name": "Skill name",
|
|
"skill.slugHint": "Installs as ~/.claude/skills/{{slug}}/ (and ~/.agents/skills/) and runs as /{{slug}}",
|
|
"skill.slugBad": "Use letters, digits, '.', '_' or '-'",
|
|
"skill.description": "Description — when Claude should use this skill",
|
|
"skill.descriptionHint": "e.g. Use when writing release notes from the git log",
|
|
"skill.content": "Instructions (the body of SKILL.md)",
|
|
"skill.contentHint": "Write the steps Claude should follow. You can also paste a whole SKILL.md, frontmatter included.",
|
|
"skill.dropHint": "Drop a SKILL.md, any Markdown file, a skill folder, several files or a .zip/.skill here",
|
|
"skill.pickFiles": "Choose files",
|
|
"skill.pickFolder": "Choose folder",
|
|
"skill.clear": "Clear",
|
|
"skill.uploading": "Uploading…",
|
|
"skill.shape.none": "Nothing to upload",
|
|
"skill.shape.single-md": "This Markdown file becomes the skill's SKILL.md",
|
|
"skill.shape.archive": "An archive — it is unpacked; each folder with a SKILL.md becomes a skill",
|
|
"skill.shape.one": "One skill folder",
|
|
"skill.shape.many": "{{count}} skills — each is added on its own, named by its folder",
|
|
"skill.shape.no-skill-md": "No SKILL.md here — add one, or upload a single Markdown file",
|
|
"skill.manyHint": "Several skills: each keeps its own folder name and the description in its SKILL.md.",
|
|
"skill.addedMany": "Added {{count}} skills",
|
|
"plugin.link": "Marketplace link",
|
|
"plugin.linkHint": "A git repository with .claude-plugin/marketplace.json (https link, the forge's web link, or owner/repo for GitHub), or a link to a marketplace.json.",
|
|
"plugin.read": "Read plugins",
|
|
"plugin.reading": "Reading…",
|
|
"plugin.none": "This marketplace lists no plugins.",
|
|
"plugin.all": "Select all",
|
|
"plugin.have": "already added",
|
|
"plugin.addPicked": "Add {{count}} plugin(s)",
|
|
"plugin.addedMany": "Added {{count}} plugin(s)",
|
|
"plugin.manual": "Type name@marketplace by hand (ssh link, private repository…)",
|
|
"file.fromComputer": "From your computer (≤ 25 MB)",
|
|
"file.upload": "Upload",
|
|
"file.tooBig": "The file is larger than 25 MB.",
|
|
"file.fromWorkspace": "Or pin a document a workspace's sessions wrote",
|
|
"editTitle": "Edit “{{title}}”",
|
|
"edit.title": "Title",
|
|
"edit.description": "Description",
|
|
"previewFailed": "Could not load this file.",
|
|
"truncated": "Showing the first 1 MB — download the file to see all of it.",
|
|
"section.hub.own": "Shared by me",
|
|
"section.hub.ownHint": "Yours, visible to every user",
|
|
"section.hub.others": "Shared by others",
|
|
"section.hub.othersHint": "What other users shared — install what you need",
|
|
"section.mine.own": "Mine",
|
|
"section.mine.ownHint": "What you added",
|
|
"section.mine.others": "Installed from others",
|
|
"section.mine.othersHint": "Shared by other users, installed in your account",
|
|
"section.all.others": "Shared by others",
|
|
"section.all.othersHint": "What other users shared",
|
|
"section.all.own": "Mine",
|
|
"section.all.ownHint": "What you added, shared or not",
|
|
"pages": "Pages",
|
|
"section.empty": "Nothing here yet.",
|
|
"tab.all": "All",
|
|
"installedBadge": "Installed",
|
|
"installsTitle": "Installs",
|
|
"installsYou": "You",
|
|
"installsUnknown": "A removed user",
|
|
"installsReplaced": "replaced an older copy",
|
|
"versionAt": "Updated {{ago}}",
|
|
"versionAtFull": "Last updated {{date}}",
|
|
"installState.latest": "Latest",
|
|
"installState.outdated": "Old version",
|
|
"installState.removed": "Removed",
|
|
"installsPluginWhere": "claude plugin install --scope user",
|
|
"installsUnrecorded": "{{count}} earlier installs were counted before details were kept",
|
|
"installsNoneOfYours": "You have not installed it — only your own installs are listed.",
|
|
"uninstall": "Uninstall",
|
|
"uninstallTitle": "Uninstall “{{title}}”?",
|
|
"uninstallSkillBody": "~/.claude/skills/{{name}}/ and ~/.agents/skills/{{name}}/ are moved to ~/.claude/agenthub-replaced-skills/, not deleted. Sessions already open keep it until they reload.",
|
|
"uninstallPluginBody": "Runs claude plugin uninstall {{name}} for your account; the plugin's data folder is kept. Open sessions keep it until /reload-plugins.",
|
|
"uninstalled": "Uninstalled {{name}}",
|
|
"deleteBodyShared": "It is shared, so it also disappears from the Hub for everyone. To keep it but stop sharing, use Unshare instead. Anything already installed from it stays installed.",
|
|
"deleteBodyKeep": "It leaves your library but stays in the Hub, because it is shared. To take it off the Hub too, use Remove from Hub afterwards (or Unshare first).",
|
|
"deleteKept": "Removed from your library — still in the Hub",
|
|
"hubOnly": "Hub only",
|
|
"hubOnlyHint": "You removed it from your library; it stays shared in the Hub",
|
|
"hubRemove": "Remove from Hub",
|
|
"hubRemoveTitle": "Remove “{{title}}” from the Hub?",
|
|
"hubRemoveBody": "It is no longer in your library, so it is deleted for good. Anything already installed from it stays installed.",
|
|
"edit.otherFiles": "Its other {{count}} file(s) are kept as they are.",
|
|
"edit.reinstallNote": "Your installed copy keeps the old version until you uninstall it and install it again.",
|
|
"preview.instructions": "Instructions",
|
|
"preview.frontmatter": "Frontmatter (SKILL.md header)",
|
|
"preview.whenUsed": "When Claude uses it",
|
|
"preview.noDescription": "No description",
|
|
"preview.installsAs": "Installs as ~/.claude/skills/{{slug}}/ and ~/.agents/skills/{{slug}}/",
|
|
"blurb.skill": "Reusable instructions Claude follows",
|
|
"blurb.plugin": "Bundles of skills, commands and hooks",
|
|
"blurb.page": "Pages your sessions published on claude.ai",
|
|
"blurb.file": "Documents and outputs worth keeping",
|
|
"clearSearch": "Clear search",
|
|
"categories": "Categories",
|
|
"seeAll": "See all",
|
|
"results_one": "{{count}} result",
|
|
"results_other": "{{count}} results",
|
|
"empty.title": "Your library is empty",
|
|
"empty.hubTitle": "The Hub is quiet",
|
|
"empty.searchTitle": "No matches",
|
|
"empty.search": "Nothing matches this search or category — try other words, or pick All.",
|
|
"details": "Details",
|
|
"more": "More actions",
|
|
"about": "About",
|
|
"stat.kind": "Type",
|
|
"stat.installs": "Installs",
|
|
"stat.files": "Files",
|
|
"stat.size": "Size",
|
|
"stat.updated": "Last updated",
|
|
"detail.runAs": "Run it as",
|
|
"detail.market": "Marketplace",
|
|
"detail.added": "Added {{date}}",
|
|
"tab.unowned": "Unowned",
|
|
"tab.suggested": "Is this yours?",
|
|
"auto": "Auto",
|
|
"autoHint": "Added when its session stopped: a document the session created or changed",
|
|
"unowned.hint": "Items no workspace owns that were made in your folders — confirm whether they are yours",
|
|
"unowned.hintAdmin": "Items with no owner: sessions outside any workspace, run as the host account",
|
|
"unowned.mine": "It's mine",
|
|
"unowned.takeIt": "Take it",
|
|
"unowned.notMine": "Not mine",
|
|
"unowned.assign": "Assign to…",
|
|
"unowned.claimed": "Added to your library",
|
|
"unowned.declined": "Removed from your list",
|
|
"unowned.assigned": "Owner assigned",
|
|
"unowned.empty": "Nothing without an owner.",
|
|
"installs_one": "{{count}} install",
|
|
"installs_other": "{{count}} installs",
|
|
"private": "Private",
|
|
"privateHint": "Not shared: only you (and admins) see it. Share puts it in the Hub.",
|
|
"showMore": "Show {{count}} more",
|
|
"view.label": "Layout",
|
|
"view.list": "List view",
|
|
"view.grid": "Grid view",
|
|
"pack.title": "{{prefix}}-* pack",
|
|
"pack.count_one": "{{count}} skill",
|
|
"pack.count_other": "{{count}} skills",
|
|
"pack.installAll": "Install all",
|
|
"pack.installRest": "Install {{count}} more",
|
|
"pack.installTitle": "Install {{count}} skills of {{prefix}}-*?",
|
|
"pack.installBody": "Each one is written into your own account. A skill you already have under the same name is left as it is:",
|
|
"pack.installed": "Installed {{ok}} · already there {{skipped}} · failed {{failed}}",
|
|
"section.unshared": "Not shared by their owners",
|
|
"section.unsharedHint": "Other users' private items — only admins see these",
|
|
"update": "Update",
|
|
"updateHint": "Its owner changed it since you installed it",
|
|
"updateTitle": "Update “{{title}}”?",
|
|
"updateBody": "Your copy of {{name}} is replaced by the newest version. The current one is moved to ~/.claude/agenthub-replaced-skills/, not deleted.",
|
|
"updated": "Updated {{name}}",
|
|
"pack.updateN": "Update {{count}}",
|
|
"pack.updateTitle": "Update {{count}} skills of {{prefix}}-*?",
|
|
"pack.updateBody": "Each copy is replaced by the newest version; the current ones are moved to ~/.claude/agenthub-replaced-skills/:",
|
|
"pack.updated": "Updated {{ok}} · failed {{failed}}",
|
|
"tab.withme": "Shared with you",
|
|
"sharing": "Sharing…",
|
|
"shareTitle": "Share “{{title}}”",
|
|
"shareMode.people": "Only the people I pick",
|
|
"shareMode.peopleHint": "Only them (and admins) see it; nobody else finds it in the Hub.",
|
|
"shareMode.everyone": "Everyone (the Hub)",
|
|
"shareMode.everyoneHint": "Every user sees it in the Hub.",
|
|
"shareMode.nobody": "Stop sharing",
|
|
"shareMode.nobodyHint": "Only you (and admins) see it again.",
|
|
"sharePeople.search": "Find a person",
|
|
"sharePeople.none": "Nobody matches.",
|
|
"sharePeople.picked_one": "{{count}} person picked",
|
|
"sharePeople.picked_other": "{{count}} people picked",
|
|
"shareSave": "Save",
|
|
"sharePeopleDone_one": "Shared with {{count}} person",
|
|
"sharePeopleDone_other": "Shared with {{count}} people",
|
|
"sharedWithCount_one": "Shared with {{count}} person",
|
|
"sharedWithCount_other": "Shared with {{count}} people",
|
|
"sharedWithMe": "Shared with you",
|
|
"withme.empty": "Nothing has been shared with you by name yet.",
|
|
"folders.all": "All folders",
|
|
"folders.new": "New folder",
|
|
"folders.newName": "Folder name",
|
|
"folders.rename": "Rename",
|
|
"folders.delete": "Delete folder",
|
|
"folders.deleteTitle": "Delete the folder “{{name}}”?",
|
|
"folders.deleteBody": "Only the folder goes; its artifacts stay where they are.",
|
|
"folders.empty": "This folder is empty. Drag an artifact onto the folder, or use ⋯ → Move to folder.",
|
|
"folders.move": "Move to folder…",
|
|
"folders.moveTitle": "Move “{{title}}” to a folder",
|
|
"folders.private": "Your folders are yours alone: nobody else sees them.",
|
|
"folders.createHere": "New folder",
|
|
"folders.takeOut": "Take it out of its folder",
|
|
"page.view": "View",
|
|
"page.viewHint": "Its copy, viewable here without the claude.ai account that published it",
|
|
"page.noCopy": "No viewable copy: the file this page was published from is gone, or lies outside this workspace and its session's scratchpad. Open it on claude.ai instead.",
|
|
"pdf.page": "Page {{n}}",
|
|
"pdf.failed": "This PDF could not be shown. Download it instead.",
|
|
"pdf.more": "Showing the first {{shown}} of {{total}} pages — download it for the rest.",
|
|
"exportsSwitch": "Keep a viewable copy of Docs and Slides",
|
|
"exportsSwitchHint": "When Claude publishes a Claude Docs doc, a deck or a design from an AgentHub session, it is asked to also save a copy (Markdown, PDF or HTML) that the Hub shows to the people it is shared with — they need no claude.ai access. Applies to sessions started afterwards.",
|
|
"folders.moved": "Moved to “{{name}}”",
|
|
"folders.takenOut": "Taken out of its folder",
|
|
"folders.dropHint": "Drop an artifact here to put it in this folder",
|
|
"folders.dropOutHint": "Drop an artifact here to take it out of its folder"
|
|
}
|