c946b73d11
Remote clients (docs/plans/remote-clients/README.md, B1–B3 for the Claude pool): - server/hub/ holds the hub-only code (devices, remote sessions, upload ingest, LAN gateway), required only in server mode; hub-boundary.test.js keeps local code from importing it. - A local install enrolls with `agenthub remote login` or Settings → AI tools → Company hub; the "Company account" AI Proxy (reserved name agenthub.company) sends a session through the hub's gateway, which adds a pool account's token — no credential reaches the machine. Only those sessions are uploaded, hourly and at their end; secret-shaped strings are redacted on the client. - Gateway refuses: unknown device (401), a message without a session id, an unregistered session under AGENTHUB_REMOTE_GATE=block, a user over quota (EQUOTA), a purged session (410). Device tokens 90 days, conversations 30. - New alert rule type remote_unmonitored: a company-account session its device never registered; a late registration clears the flag instead. - The hub imports a session once per upload round (chunks carry `more`), not once per chunk. Artifacts: - Share an artifact with chosen people (artifact_shares, PATCH sharedWith, GET /api/artifacts/people) besides everyone; a "Shared with you" tab. Only the owner or an admin sees or edits who it is shared with; audited. - Folders: each account's own arrangement (agenthub.artifacts.folders pref). - A claude.ai page keeps a copy viewable without the publishing account: its HTML file (and supporting files) snapshotted at publish, or the copy Claude saves for a Doc / Slides / Design in artifacts-export/ (a synchronous PostToolUse hint hook, scripts/artifact-export-hint.js, admin switch), attached to the page at Stop. Viewed in HtmlFrame's sandbox, Markdown, or pdf.js (pdfjs-dist 6.4.299, legacy build, loaded only for a PDF). Fixes: - tmux: a cached /proc/<pid>/exe of an exited server falls back to PATH's tmux (stop the last pane, start again within 10 s failed with ENOENT). - shelves: a shelf restores beside changes in other files. - chat: a finished reply ends the turn even with no hook at all. - Settings → AI tools: profile list display tweaks.
280 lines
15 KiB
JSON
280 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. Put an artifact here with ⋯ → 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. 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."
|
|
}
|