| 1 | import type { LocalizedText } from "./vocabulary"; |
| 2 | |
| 3 | export const PLUGINS_COPY = { |
| 4 | metaTitle: { en: "Plugins and marketplace · Codewhale", zh: "插件与市场 · Codewhale" }, |
| 5 | metaDescription: { |
| 6 | en: "Computer Use puts the agent's eyes and hands on your real desktop — plus a plugin marketplace where any GitHub repository can become a reviewed, trusted capability.", |
| 7 | zh: "Computer Use 让代理的眼睛和手触及你的真实桌面——插件市场中任何 GitHub 仓库都可以成为经审阅、受信任的能力。", |
| 8 | }, |
| 9 | kicker: { en: "Plugins and marketplace", zh: "插件与市场" }, |
| 10 | title: { en: "Your agent, on your actual computer.", zh: "你的代理,就在你真实的电脑上。" }, |
| 11 | lead: { |
| 12 | en: "Codewhale plugins add reviewed capabilities to the agent you already run — from the first-party Codewhale catalog, a GitHub repository, or a tarball. Nothing executes until you read the manifest and trust it yourself.", |
| 13 | zh: "Codewhale 插件为你已在运行的代理添加经审阅的能力——来自官方 Codewhale 目录、GitHub 仓库或压缩包。在你亲自阅读清单并信任之前,不会执行任何内容。", |
| 14 | }, |
| 15 | marketplaceCta: { en: "Browse the Codewhale catalog", zh: "浏览 Codewhale 目录" }, |
| 16 | docsCta: { en: "Plugin authoring guide", zh: "插件编写指南" }, |
| 17 | |
| 18 | cuLabel: { en: "First-party plugin · macOS beta", zh: "官方插件 · macOS Beta" }, |
| 19 | cuTitle: { en: "Computer Use: eyes and hands for the agent.", zh: "Computer Use:代理的眼睛与手。" }, |
| 20 | cuLead: { |
| 21 | en: "The agent stops being blind to your desktop. It observes the apps you choose, reads their controls through the accessibility tree, types and clicks where you point it — then reports every action with a receipt. macOS is the qualified beta platform; Windows, Linux and HarmonyOS backends remain experimental and source-only.", |
| 22 | zh: "代理不再对你的桌面视而不见。它观察你选择的应用,通过无障碍树读取控件,在你指定的地方输入与点击——然后用回执报告每一步操作。macOS 是完成认证的 Beta 平台;Windows、Linux 与 HarmonyOS 后端仍为实验性、仅提供源码。", |
| 23 | }, |
| 24 | cuInstall: { en: "/plugin marketplace install codewhale computer-use", zh: "/plugin marketplace install codewhale computer-use" }, |
| 25 | cuFeatures: [ |
| 26 | { |
| 27 | title: { en: "Works in the background", zh: "后台工作" }, |
| 28 | detail: { |
| 29 | en: "On macOS the agent can drive a selected app without touching your pointer or stealing focus — process-directed input while you keep using the machine. Foreground control is a separate, explicit grant.", |
| 30 | zh: "在 macOS 上,代理可以驱动指定应用而不移动你的指针或抢占焦点——你在前台继续工作,它在后台定向输入。前台控制是独立的显式授权。", |
| 31 | }, |
| 32 | }, |
| 33 | { |
| 34 | title: { en: "Reads the UI, not just pixels", zh: "读懂界面,而非只看像素" }, |
| 35 | detail: { |
| 36 | en: "The accessibility tree (macOS AX, Windows UIA, Linux AT-SPI) returns controls, values, and advertised actions — a text-only model can drive a whole app without a single screenshot.", |
| 37 | zh: "无障碍树(macOS AX、Windows UIA、Linux AT-SPI)返回控件、值与可执行动作——纯文本模型无需任何截图即可驱动整个应用。", |
| 38 | }, |
| 39 | }, |
| 40 | { |
| 41 | title: { en: "Sees when it has to", zh: "必要时才看" }, |
| 42 | detail: { |
| 43 | en: "Screenshots and zoom feed compatible vision models; on macOS, local OCR reads window text on-device — no remote service, no vision model required.", |
| 44 | zh: "截图与缩放供视觉模型使用;在 macOS 上,本地 OCR 直接在设备上读取窗口文字——无需远程服务,也无需视觉模型。", |
| 45 | }, |
| 46 | }, |
| 47 | { |
| 48 | title: { en: "One agent, many computers", zh: "一个代理,多台计算机" }, |
| 49 | detail: { |
| 50 | en: "Control the local machine, registered SSH hosts (the remote agent installs itself), or HarmonyOS devices over hdc. Every receipt names the computer it happened on.", |
| 51 | zh: "控制本机、已注册的 SSH 主机(远程代理自动安装)或通过 hdc 连接的 HarmonyOS 设备。每条回执都标明它发生在哪台计算机上。", |
| 52 | }, |
| 53 | }, |
| 54 | { |
| 55 | title: { en: "Permissions stay yours", zh: "权限仍归你所有" }, |
| 56 | detail: { |
| 57 | en: "Accessibility and Screen Recording grants live in System Settings under your control. The agent asks once what it is missing — it never pops dialogs.", |
| 58 | zh: "辅助功能与屏幕录制权限由你在系统设置中掌控。代理只会询问一次缺少什么——绝不弹出对话框。", |
| 59 | }, |
| 60 | }, |
| 61 | { |
| 62 | title: { en: "Fails closed, with receipts", zh: "失败即停,回执为证" }, |
| 63 | detail: { |
| 64 | en: "Stale observations, unexpected foreground changes, and unavailable capabilities refuse with a receipt instead of guessing. Each task owns its session; stopping releases every held input.", |
| 65 | zh: "过期的观察结果、意外的前台变化与不可用的能力都会携带回执拒绝执行,而非猜测。每个任务独占自己的会话;停止即释放所有按住的输入。", |
| 66 | }, |
| 67 | }, |
| 68 | { |
| 69 | title: { en: "Drives a browser, in its own profile", zh: "以独立配置文件驱动浏览器" }, |
| 70 | detail: { |
| 71 | en: "A Chromium-family browser is driven over the DevTools protocol in a self-owned profile — clicked by CSS selector or page pixel, screenshotted from the page itself. Your own profile, tabs and logins are never attached to.", |
| 72 | zh: "通过 DevTools 协议在独立配置文件中驱动 Chromium 系浏览器——按 CSS 选择器或页面像素点击,直接截取页面画面。你自己的配置文件、标签页与登录信息绝不会被连接。", |
| 73 | }, |
| 74 | }, |
| 75 | { |
| 76 | title: { en: "Watch it, bound it, replay it", zh: "可看、可限、可重放" }, |
| 77 | detail: { |
| 78 | en: "A live preview shows the bound app while a session works, and list_sessions names every live session on the machine. The stop switch halts input, kill_app quits a named app by exact identity, trajectories record every call — refusals included — for faithful replay, and a launch-time capability grant fixes what a session may ever call.", |
| 79 | zh: "会话工作时,实时预览持续显示所绑定的应用;list_sessions 列出机器上的每个活动会话。停止开关终止输入,kill_app 按精确身份退出指定应用,轨迹记录包括被拒绝调用在内的每一步以供忠实重放,启动时的能力授权固定会话可调用的范围。", |
| 80 | }, |
| 81 | }, |
| 82 | ], |
| 83 | cuToolsNote: { |
| 84 | en: "36 MCP tools: observation, actions, screenshots and zoom, keyboard and pointer, clipboard, recording, browser control over CDP, window frames, the installed-app catalog, sessions and computer switching.", |
| 85 | zh: "36 个 MCP 工具:观察、操作、截图与缩放、键盘与指针、剪贴板、录制、基于 CDP 的浏览器控制、窗口边框、已安装应用目录、会话以及计算机切换。", |
| 86 | }, |
| 87 | |
| 88 | catalogLabel: { en: "First-party catalog", zh: "官方目录" }, |
| 89 | catalogTitle: { en: "The Codewhale marketplace.", zh: "Codewhale 市场。" }, |
| 90 | catalogLead: { |
| 91 | en: "An offline snapshot of the Codewhale catalog ships with the terminal and the app, so browsing never fetches or executes anything. Install from it with one command.", |
| 92 | zh: "终端与应用内置 Codewhale 目录的离线快照,浏览不会拉取或执行任何内容。一条命令即可安装。", |
| 93 | }, |
| 94 | catalogBrowse: { en: "/plugin marketplace list", zh: "/plugin marketplace list" }, |
| 95 | catalogEntries: [ |
| 96 | { |
| 97 | title: { en: "WhaleWiki", zh: "WhaleWiki" }, |
| 98 | detail: { |
| 99 | en: "Repository and concept documentation the agent can consult while it works.", |
| 100 | zh: "供代理在工作时查阅的仓库与概念文档。", |
| 101 | }, |
| 102 | reference: "/plugin marketplace install codewhale whalewiki", |
| 103 | }, |
| 104 | { |
| 105 | title: { en: "Cloudflare Docs", zh: "Cloudflare 文档" }, |
| 106 | detail: { |
| 107 | en: "Cloudflare documentation lookup inside a session.", |
| 108 | zh: "在会话内查询 Cloudflare 文档。", |
| 109 | }, |
| 110 | reference: "/plugin marketplace install codewhale cloudflare-docs", |
| 111 | }, |
| 112 | { |
| 113 | title: { en: "Skill bundle", zh: "技能包" }, |
| 114 | detail: { |
| 115 | en: "The bundled Codewhale skills the terminal ships with, kept in sync with the catalog.", |
| 116 | zh: "终端内置的 Codewhale 技能集,与目录保持同步。", |
| 117 | }, |
| 118 | reference: "#path=skills", |
| 119 | }, |
| 120 | ], |
| 121 | catalogNote: { |
| 122 | en: "Catalog source: github.com/Hmbown/codewhale-plugin-marketplace. A local catalog named codewhale takes precedence over the bundled snapshot.", |
| 123 | zh: "目录来源:github.com/Hmbown/codewhale-plugin-marketplace。名为 codewhale 的本地目录优先于内置快照。", |
| 124 | }, |
| 125 | |
| 126 | sourcesLabel: { en: "Install sources", zh: "安装来源" }, |
| 127 | sourcesTitle: { en: "Any GitHub repository can be a plugin.", zh: "任何 GitHub 仓库都可以是插件。" }, |
| 128 | sourcesLead: { |
| 129 | en: "Point /plugin install at a directory, a repository, or a tarball. The fetched tree must hold exactly one bundle root — a plugin.json, a compatible kimi.plugin.json or .claude-plugin/plugin.json, or a legacy plugin.toml.", |
| 130 | zh: "/plugin install 可以指向目录、仓库或压缩包。获取的目录树必须恰好包含一个 bundle 根——plugin.json、兼容的 kimi.plugin.json 或 .claude-plugin/plugin.json,或旧版 plugin.toml。", |
| 131 | }, |
| 132 | sources: [ |
| 133 | { |
| 134 | title: { en: "GitHub repository", zh: "GitHub 仓库" }, |
| 135 | detail: { |
| 136 | en: "Archive of the repository’s default branch — the marketplace catalog uses the same mechanism.", |
| 137 | zh: "仓库默认分支的归档——市场目录使用同一机制。", |
| 138 | }, |
| 139 | reference: "/plugin install github:owner/repo", |
| 140 | }, |
| 141 | { |
| 142 | title: { en: "Local directory", zh: "本地目录" }, |
| 143 | detail: { |
| 144 | en: "Copied from disk. The fastest loop while authoring your own bundle.", |
| 145 | zh: "从磁盘复制。编写自己的 bundle 时最快的迭代方式。", |
| 146 | }, |
| 147 | reference: "/plugin install ./path/to/bundle", |
| 148 | }, |
| 149 | { |
| 150 | title: { en: "Tarball URL", zh: "压缩包 URL" }, |
| 151 | detail: { |
| 152 | en: "Direct archive download, gated by the per-domain network policy — an unknown host is refused until you allow it.", |
| 153 | zh: "直接下载归档,受按域网络策略约束——未知主机会被拒绝,直到你允许它。", |
| 154 | }, |
| 155 | reference: "/plugin install https://example.com/x.tar.gz", |
| 156 | }, |
| 157 | ], |
| 158 | |
| 159 | trustLabel: { en: "Trust lifecycle", zh: "信任生命周期" }, |
| 160 | trustTitle: { en: "Installed is not enabled.", zh: "已安装不等于已启用。" }, |
| 161 | trustLead: { |
| 162 | en: "Every bundle lands disabled and untrusted. Review the manifest and declared capabilities, then trust and enable it. An update with changed bytes requires review again.", |
| 163 | zh: "每个 bundle 安装后均为未启用、未信任状态。审阅清单与声明的能力后,再信任并启用。内容有变更的更新需要重新审阅。", |
| 164 | }, |
| 165 | trustSteps: [ |
| 166 | { |
| 167 | title: { en: "Review", zh: "审阅" }, |
| 168 | detail: { |
| 169 | en: "/plugin show <name> prints the manifest, declared capabilities, and install receipt — including the source and bundle selector.", |
| 170 | zh: "/plugin show <name> 打印清单、声明的能力与安装回执——包括来源与 bundle 选择器。", |
| 171 | }, |
| 172 | }, |
| 173 | { |
| 174 | title: { en: "Trust", zh: "信任" }, |
| 175 | detail: { |
| 176 | en: "/plugin trust <name> marks your decision. Official catalog provenance grants no execution or network permission on its own.", |
| 177 | zh: "/plugin trust <name> 记录你的决定。官方目录来源本身不授予任何执行或网络权限。", |
| 178 | }, |
| 179 | }, |
| 180 | { |
| 181 | title: { en: "Enable", zh: "启用" }, |
| 182 | detail: { |
| 183 | en: "/plugin enable <name> activates the bundle. Plugin-contributed MCP servers run under namespaced <plugin>-<server> identities with the stricter boundary.", |
| 184 | zh: "/plugin enable <name> 激活 bundle。插件提供的 MCP 服务以 <plugin>-<server> 命名空间身份运行,适用更严格的边界。", |
| 185 | }, |
| 186 | }, |
| 187 | ], |
| 188 | trustNote: { |
| 189 | en: "Downloads are tarball-only with a size cap and no symlinks; traversal, ambiguous roots, and changed plugin identities are rejected. /plugin suggest ranks installed and catalog bundles against a task without installing anything.", |
| 190 | zh: "下载仅限压缩包,有大小限制且不允许符号链接;路径穿越、模糊根目录与插件身份变更都会被拒绝。/plugin suggest 仅对已安装与目录中的 bundle 按任务排序,不会安装任何内容。", |
| 191 | }, |
| 192 | |
| 193 | commandsTitle: { en: "Command reference", zh: "命令参考" }, |
| 194 | commandsLead: { |
| 195 | en: "The full lifecycle lives in the terminal. The documented commands:", |
| 196 | zh: "完整生命周期在终端中进行。已记录的命令:", |
| 197 | }, |
| 198 | } satisfies Record< |
| 199 | string, |
| 200 | | LocalizedText |
| 201 | | { title: LocalizedText; detail: LocalizedText; reference: string }[] |
| 202 | | { title: LocalizedText; detail: LocalizedText }[] |
| 203 | >; |
| 204 | |
| 205 | export const PLUGIN_COMMANDS = [ |
| 206 | "/plugin marketplace list", |
| 207 | "/plugin marketplace show codewhale", |
| 208 | "/plugin marketplace install codewhale <name>", |
| 209 | "/plugin install github:owner/repo", |
| 210 | "/plugin show <name>", |
| 211 | "/plugin trust <name>", |
| 212 | "/plugin enable <name>", |
| 213 | "/plugin update <name>", |
| 214 | "/plugin suggest <task>", |
| 215 | ] as const; |
| 216 |