* Add `cmux omo` command for OpenCode + oh-my-openagent integration Same pattern as `cmux claude-teams`: creates a tmux shim so oh-my-openagent's TmuxSessionManager spawns agents as native cmux splits instead of tmux panes. Sets TMUX/TMUX_PANE env vars, prepends shim to PATH, and execs into opencode. Closes https://github.com/manaflow-ai/cmux/issues/2085 * Auto-install oh-my-opencode plugin when running cmux omo Before launching opencode, cmux omo now: - Checks if oh-my-opencode is registered in ~/.config/opencode/opencode.json - If not, creates/updates the config with the plugin entry - Checks if the npm package is installed in node_modules - If not, runs bun add (or npm install) to install it - Then proceeds with tmux shim setup and exec * Use shadow config dir to avoid modifying user's opencode setup Instead of writing directly to ~/.config/opencode/opencode.json, cmux omo now creates a shadow config at ~/.cmuxterm/omo-config/ that layers oh-my-opencode on top of the user's existing config. Symlinks node_modules, package.json, bun.lock, and plugin config from the original dir. Sets OPENCODE_CONFIG_DIR to the shadow directory. Running plain `opencode` remains unaffected. * Add Agent Integrations docs section with Claude Code Teams and oh-my-opencode pages Adds sectioned sidebar navigation to the docs site. The new Agent Integrations section contains separate pages for cmux claude-teams and cmux omo, documenting usage, tmux shim mechanics, directory layout, environment variables, and the shadow config approach. Both pages include a nightly-only warning. Full English and Japanese translations, nav item keys added to all 19 locales. * Remove uppercase from sidebar section headers * Add more spacing above and below sidebar section headers * Enable tmux mode in oh-my-opencode config, improve docs - cmux omo now writes tmux.enabled=true to the shadow oh-my-opencode.json config. Without this, oh-my-openagent's TmuxSessionManager won't spawn visual panes even though $TMUX is set (the config defaults to false). - Nightly warnings now link to /nightly instead of generic text. - Added "What you get" section to oh-my-opencode docs explaining the visual pane behavior (auto-layout, idle cleanup, queueing). - Added tmux.enabled step to first-run and how-it-works sections. * Add terminal-notifier shim to route oh-my-openagent notifications to cmux oh-my-openagent sends macOS notifications via terminal-notifier (args: -title <t> -message <m> [-activate <id>]). The shim in ~/.cmuxterm/omo-bin/terminal-notifier intercepts these calls and routes them through cmux notify, so notifications appear in cmux's sidebar panel instead of as raw macOS notifications. * Add pane geometry to tmux-compat for oh-my-openagent grid planning oh-my-openagent's TmuxSessionManager needs pane geometry (columns, rows, position, window dimensions) to decide where to spawn agent panes. Without this data, agents run headlessly. Server side: - pane.list v2 response now includes pixel_frame, cell_size, columns, rows per pane, plus container_frame at the top level - Uses BonsplitController.layoutSnapshot() for pixel geometry and ghostty_surface_size() for terminal grid dimensions CLI side: - tmuxEnrichContextWithGeometry() computes character-cell positions from pixel frames and cell dimensions for tmux format variables (pane_width, pane_height, pane_left, pane_top, pane_active, window_width, window_height) - list-panes now resolves pane targets (%uuid) via tmuxResolvePaneTarget instead of failing with "Workspace not found" - display-message enriched with geometry for format strings like #{pane_width},#{window_width} - tmux -V now returns "tmux 3.4" (needed by oh-my-openagent's tmux-path-resolver verification) * Add socket tests for tmux-compat pane geometry 6 tests verifying the geometry enrichment works end-to-end: - pane.list returns pixel_frame, columns, rows, cell_size, container_frame - tmux -V returns version string - list-panes -F renders geometry format variables as integers - list-panes -t %<uuid> resolves pane targets - display -p renders pane_width and window_width - After split, two panes have different positions and halved widths All 6 pass on macmini (cmux-macmini). * Handle tmux -V in shim script directly (no socket needed) oh-my-openagent's tmux-path-resolver runs tmux -V to verify the binary works. The __tmux-compat handler requires a socket connection, which may not be established at verification time. Handle -V in the bash shim directly to avoid the socket dependency. * Lower default tmux pane min widths for cmux omo oh-my-openagent defaults: main_pane_min_width=120, agent_pane_min_width=40, requiring 161+ columns. Most terminal windows are narrower, causing decideSpawnActions to return canSpawn=false and defer agents forever. cmux omo now sets: main_pane_min_width=60, agent_pane_min_width=30, main_pane_size=50, requiring only 91 columns. Also moved tmux -V handling into the bash shim to avoid needing a socket connection for the version check. * Resolve merge conflicts with main (main-vertical layout, focus param) - Keep upstream main-vertical layout anchoring from #2119 - Keep upstream focus param (v2Bool) instead of no_focus - Combine with our -d flag handling: -d sets focus=false - Include customCommands nav item from main * Implement select-layout equalize and resize-pane absolute width When oh-my-openagent spawns agent panes, it calls select-layout main-vertical after each split to redistribute panes evenly, then resize-pane -x <columns> to set the main pane width. Both were previously no-ops, causing cascading uneven splits. Server side: - Add workspace.equalize_splits v2 API that calls the existing TabManager.equalizeSplits (sets all dividers to 0.5) CLI side: - select-layout now calls workspace.equalize_splits before tracking main-vertical state - resize-pane -x <columns> without directional flags now computes the pixel delta from current to desired width and resizes accordingly * Fix equalize to use proportional divider positions The previous equalize set all dividers to 0.5, which in a right- recursive binary tree (from successive splits) gives 50/25/12.5/6.25% instead of equal sizes. New algorithm counts leaf panes on each side of each split and sets the divider to N_left / (N_left + N_right). For 5 panes in a chain: 1/5, 1/4, 1/3, 1/2, giving each pane exactly 20%. * Fix select-layout main-vertical to only equalize vertical splits The proportional equalize was treating the top-level horizontal split (main vs agent column) the same as vertical splits, setting the main pane to 1/6 of the window with 5 agents. For main-vertical layout, only equalize vertical splits (the agent column), leaving the horizontal main/agent divider untouched. The subsequent resize-pane -x handles the main pane width. workspace.equalize_splits now accepts an optional orientation filter ("vertical" or "horizontal") to scope which splits get equalized. * Re-equalize agent column after kill-pane * Address PR review comments - Fix cmux omo --help: remove omo from the help-bypass guard so --help shows usage text instead of trying to launch opencode - Don't overwrite unreadable opencode.json: fail with an error instead of silently resetting to empty config - Drain installer pipes concurrently before waitUntilExit to prevent deadlock from full pipe buffers during bun/npm install --------- Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
670 lines
42 KiB
JSON
670 lines
42 KiB
JSON
{
|
||
"meta": {
|
||
"title": "cmux — 专为多任务打造的终端",
|
||
"description": "基于 Ghostty 的原生 macOS 终端。支持 Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider 及任何 CLI 工具。垂直标签页、通知环、分割面板和 socket API。",
|
||
"ogDescription": "面向 AI 编程 agent 的原生 macOS 终端。支持 Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider 及任何 CLI 工具。"
|
||
},
|
||
"common": {
|
||
"downloadForMac": "下载 Mac 版",
|
||
"viewOnGitHub": "在 GitHub 上查看",
|
||
"closeMenu": "关闭菜单",
|
||
"openMenu": "打开菜单",
|
||
"toggleTheme": "切换主题",
|
||
"backToBlog": "返回博客",
|
||
"readTheDocs": "阅读文档",
|
||
"viewChangelog": "查看更新日志"
|
||
},
|
||
"nav": {
|
||
"docs": "文档",
|
||
"blog": "博客",
|
||
"changelog": "更新日志",
|
||
"community": "社区",
|
||
"github": "GitHub"
|
||
},
|
||
"footer": {
|
||
"product": "产品",
|
||
"resources": "资源",
|
||
"legal": "法律",
|
||
"social": "社交",
|
||
"blog": "博客",
|
||
"community": "社区",
|
||
"docs": "文档",
|
||
"changelog": "更新日志",
|
||
"privacy": "隐私政策",
|
||
"terms": "服务条款",
|
||
"eula": "EULA",
|
||
"github": "GitHub",
|
||
"twitter": "X / Twitter",
|
||
"discord": "Discord",
|
||
"contact": "联系我们",
|
||
"nightly": "每夜构建",
|
||
"copyright": "© {year} Manaflow",
|
||
"language": "语言"
|
||
},
|
||
"home": {
|
||
"taglinePrefix": "开源终端,专为 ",
|
||
"typingCodingAgents": "编程 agent",
|
||
"typingMultitasking": "多任务",
|
||
"subtitle": "基于 Ghostty 构建的原生 macOS 终端应用。开源免费。支持垂直标签页、agent 需要关注时的通知提醒环、分屏面板,以及用于自动化的 socket API。",
|
||
"features": "功能特性",
|
||
"faq": "常见问题",
|
||
"communitySection": "社区",
|
||
"feature": {
|
||
"verticalTabs": "垂直标签页",
|
||
"verticalTabsDesc": ":侧边栏显示 git 分支、工作目录、端口和通知文本",
|
||
"notificationRings": "通知提醒环",
|
||
"notificationRingsDesc": ":当 agent 需要关注时,面板会亮起提示",
|
||
"inAppBrowser": "内置浏览器",
|
||
"inAppBrowserDesc": ":在终端旁边分屏打开浏览器,支持可编程 API",
|
||
"splitPanes": "分屏面板",
|
||
"splitPanesDesc": ":每个标签页内支持水平和垂直分屏",
|
||
"scriptable": "可编程",
|
||
"scriptableDesc": ":CLI 和 socket API,支持自动化和脚本控制",
|
||
"gpuAccelerated": "GPU 加速",
|
||
"gpuAcceleratedDesc": ":由 libghostty 驱动,渲染流畅",
|
||
"lightweight": "轻量级",
|
||
"lightweightDesc": ":原生 Swift + AppKit,无 Electron",
|
||
"keyboardShortcuts": "快捷键",
|
||
"keyboardShortcutsDesc": ":<link>丰富的快捷键</link>,覆盖工作区、分屏、浏览器等操作"
|
||
},
|
||
"faqGhosttyQ": "cmux 和 Ghostty 是什么关系?",
|
||
"faqGhosttyA": "cmux 不是 Ghostty 的 fork。它使用 <link>libghostty</link> 作为终端渲染库,就像应用使用 WebKit 来渲染网页一样。Ghostty 是一个独立的终端;cmux 是基于其渲染引擎构建的不同应用。",
|
||
"faqPlatformQ": "支持哪些平台?",
|
||
"faqPlatformA": "目前仅支持 macOS。cmux 是原生 Swift + AppKit 应用。",
|
||
"faqAgentsQ": "cmux 支持哪些 coding agent?",
|
||
"faqAgentsA": "全部都支持。cmux 是一个终端,所以任何在终端中运行的 agent 都可以直接使用:Claude Code、Codex、OpenCode、Gemini CLI、Kiro、Aider、Goose、Amp、Cline、Cursor Agent,以及任何可以从命令行启动的工具。",
|
||
"faqNotificationsQ": "通知是如何工作的?",
|
||
"faqNotificationsA": "当进程需要关注时,cmux 会在面板周围显示通知提醒环、在侧边栏显示未读标记、弹出通知面板,以及发送 macOS 桌面通知。这些通过标准终端转义序列(OSC 9/99/777)自动触发,你也可以通过 <cliLink>cmux CLI</cliLink> 和 <hooksLink>Claude Code hooks</hooksLink> 手动触发。",
|
||
"faqShortcutsQ": "可以自定义快捷键吗?",
|
||
"faqShortcutsA": "终端键位绑定从你的 Ghostty 配置文件(<configPath>~/.config/ghostty/config</configPath>)中读取。cmux 特有的快捷键(工作区、分屏、浏览器、通知)可以在设置中自定义。完整列表请参阅<link>默认快捷键</link>。",
|
||
"faqTmuxQ": "和 tmux 相比如何?",
|
||
"faqTmuxA": "tmux 是在任何终端内运行的终端复用器。cmux 是一个带 GUI 的原生 macOS 应用:垂直标签页、分屏面板、内置浏览器和 socket API 全部内置。无需配置文件或前缀键。",
|
||
"faqFreeQ": "cmux 免费吗?",
|
||
"faqFreeA": "是的,cmux 免费使用。源代码在 <link>GitHub</link> 上公开。"
|
||
},
|
||
"community": {
|
||
"title": "社区",
|
||
"description": "与其他 cmux 用户和开发团队交流。",
|
||
"discord": "Discord",
|
||
"discordAction": "加入 Discord",
|
||
"discordDesc": "与社区交流、获取帮助、分享反馈",
|
||
"githubAction": "在 GitHub 上查看",
|
||
"githubDesc": "Star 仓库、报告问题、参与贡献",
|
||
"twitter": "Twitter",
|
||
"twitterAction": "在 X 上关注",
|
||
"twitterDesc": "动态、公告和使用技巧",
|
||
"youtube": "YouTube",
|
||
"youtubeAction": "订阅",
|
||
"youtubeDesc": "演示、教程和使用指南",
|
||
"linkedin": "LinkedIn",
|
||
"linkedinAction": "关注我们",
|
||
"linkedinDesc": "公司动态和工程更新",
|
||
"metaTitle": "社区 — cmux",
|
||
"metaDescription": "在 Discord、Twitter、GitHub 等平台加入 cmux 社区"
|
||
},
|
||
"blog": {
|
||
"title": "博客",
|
||
"layoutTitle": "cmux blog",
|
||
"metaTitle": "博客",
|
||
"metaDescription": "cmux 团队的新闻和更新",
|
||
"description": "来自 cmux 团队的新闻和更新",
|
||
"posts": {
|
||
"cmdShiftU": {
|
||
"title": "Cmd+Shift+U",
|
||
"summary": "Cmd+Shift+U 如何在 cmux 中跨工作区跳转到已完成的 agent。",
|
||
"date": "2026年3月4日",
|
||
"p1": "我最喜欢的 cmux 功能是 Cmd+Shift+U。我现在开着 17 个工作区,每个都在运行一个 agent。以前我需要逐个点击标签页和通知面板来查看哪些已经完成。用键盘更快。",
|
||
"p2": "Cmd+Shift+U 跳转到最新的未读<link>通知</link>。实际上就是最后一个完成的 agent。它会切换到对应的工作区,聚焦到确切的面板,闪烁提示你查看的位置,并标记为已读。如果通知来自另一个窗口,那个窗口会自动前置。"
|
||
},
|
||
"zenOfCmux": {
|
||
"title": "cmux 之道",
|
||
"summary": "cmux 是基础组件,不是完整方案。它提供可组合的模块,工作流由你决定。",
|
||
"date": "2026年2月27日",
|
||
"p1": "cmux 不会规定开发者应该如何使用工具。它是一个终端加浏览器,配有 CLI,剩下的由你决定。",
|
||
"p2": "cmux 是基础组件,不是完整方案。它提供终端、浏览器、通知、工作区、分屏、标签页,以及控制这一切的 CLI。cmux 不会强制你用某种固定方式使用 coding agent。你用这些基础组件构建什么,完全取决于你。",
|
||
"p3": "最优秀的开发者一直在构建自己的工具。目前还没有人找到与 agent 协作的最佳方式,那些构建封闭产品的团队当然也没有。最接近自己代码库的开发者会最先找到答案。",
|
||
"p4": "给一百万开发者可组合的基础组件,他们集体找到最高效工作流的速度会比任何产品团队自上而下设计的都快。"
|
||
},
|
||
"showHnLaunch": {
|
||
"title": "在 Show HN 发布 cmux",
|
||
"summary": "cmux 登上 Hacker News 第二名,被 Mitchell Hashimoto 分享,并在日本走红。",
|
||
"date": "2026年2月21日",
|
||
"intro": "我们于 2 月 19 日在 <link>Show HN</link> 上发布了 cmux:",
|
||
"blockquote1": "我同时运行大量 Claude Code 和 Codex 会话。之前我用 Ghostty 开了一堆分屏面板,靠 macOS 原生通知来判断哪个 agent 需要我。但 Claude Code 的通知内容永远只有「Claude is waiting for your input」,没有上下文,标签页多了之后连标题都看不全。",
|
||
"blockquote2": "我试过一些 coding 编排工具,但大多是 Electron/Tauri 应用,性能让我不满意。而且我更喜欢终端,因为 GUI 编排工具会把你锁定在它们的工作流里。所以我用 Swift/AppKit 构建了 cmux 作为原生 macOS 应用。它使用 libghostty 进行终端渲染,并读取你现有的 Ghostty 配置来加载主题、字体、颜色等。",
|
||
"blockquote3": "主要新增的是侧边栏和通知系统。侧边栏有垂直标签页,显示每个工作区的 git 分支、工作目录、监听端口和最新通知文本。通知系统可以捕获终端序列(OSC 9/99/777),还有一个 CLI(cmux notify)可以接入 Claude Code、OpenCode 等的 agent hooks。当 agent 等待时,它的面板会显示蓝色提醒环,标签页在侧边栏中亮起,这样我就能在分屏和标签页之间一眼看出哪个需要我。Cmd+Shift+U 跳转到最近的未读通知。",
|
||
"blockquote4": "内置浏览器有一个可编程 API。Agent 可以获取无障碍树的快照、获取元素引用、点击、填写表单、执行 JS 和读取控制台日志。你可以在终端旁边分屏打开浏览器面板,让 Claude Code 直接与你的开发服务器交互。",
|
||
"blockquote5": "所有功能都可以通过 CLI 和 socket API 编程控制:创建工作区/标签页、分屏、发送按键、在浏览器中打开 URL。",
|
||
"hitNumber2": "峰值时登上了 Hacker News 第二名。Mitchell Hashimoto 分享了它:",
|
||
"favoriteComment": "我最喜欢的 <link>HN 帖子</link>评论:",
|
||
"viralJapan": "出乎意料的是,cmux 在日本走红了:",
|
||
"translation": "翻译:「这个看起来不错。一个基于 Ghostty 的终端应用,专为并行运行多个 Claude Code 等 CLI 时不迷失方向而设计。等待输入的面板会显示蓝色边框,还有自己的通知系统。」",
|
||
"viralChina": "在中国也引起了一定关注:",
|
||
"extensions": "另一件令人兴奋的事是看到大家基于 cmux CLI 进行扩展开发。sasha 构建了一个 pi-cmux 扩展,在侧边栏显示模型信息、token 用量和 agent 状态:",
|
||
"scriptable": "cmux 中的一切都可以通过 CLI 编程控制:创建工作区、发送按键、控制浏览器、读取通知。cmux 的理念之一就是可编程和可组合,让开发者可以自定义与 coding agent 的协作方式。Coding agent 的前沿在快速变化,你不会想被锁定在一个跟不上节奏的僵化 GUI 编排工具里。",
|
||
"cta": "如果你在同时运行多个 coding agent,<link>试试 cmux</link>。"
|
||
},
|
||
"introducingCmux": {
|
||
"title": "cmux 介绍",
|
||
"summary": "一个基于 Ghostty 构建的原生 macOS 终端,专为并行运行多个 AI coding agent 而设计。",
|
||
"date": "2026年2月12日",
|
||
"p1": "cmux 是一个基于 Ghostty 构建的原生 macOS 终端应用,从底层为同时运行多个 AI coding agent 的开发者而设计。",
|
||
"whyTitle": "为什么选择 cmux?",
|
||
"whyP": "现代开发工作流常常需要同时运行多个 agent。Claude Code、Codex 和其他工具各自在独立的终端中运行。追踪哪些需要关注并在它们之间快速切换,正是 cmux 要解决的问题。",
|
||
"featuresTitle": "核心功能",
|
||
"getStartedTitle": "开始使用",
|
||
"getStartedP": "通过 Homebrew 安装 cmux 或从<link>入门指南</link>下载 DMG。",
|
||
"featureVerticalTabsLabel": "垂直标签页",
|
||
"featureVerticalTabsDesc": "在侧边栏一览所有终端",
|
||
"featureNotificationsLabel": "通知提醒环",
|
||
"featureNotificationsDesc": "agent 需要输入时标签页会闪烁提示",
|
||
"featureSplitPanesLabel": "分屏面板",
|
||
"featureSplitPanesDesc": "每个工作区内支持水平和垂直分屏",
|
||
"featureSocketApiLabel": "Socket API",
|
||
"featureSocketApiDesc": "可编程控制,用于创建标签页和发送输入",
|
||
"featureGpuLabel": "GPU 加速",
|
||
"featureGpuDesc": "由 libghostty 驱动,渲染流畅"
|
||
}
|
||
},
|
||
"zenOfCmux": {
|
||
"metaTitle": "cmux 之禅",
|
||
"metaDescription": "cmux 是原语而非解决方案。它提供可组合的部件,工作流由你决定。"
|
||
},
|
||
"cmdShiftU": {
|
||
"metaTitle": "Cmd+Shift+U",
|
||
"metaDescription": "改变你与 cmux 交互方式的新键盘快捷键。"
|
||
},
|
||
"showHnLaunch": {
|
||
"metaTitle": "在 Show HN 上发布 cmux",
|
||
"metaDescription": "在 Hacker News 上发布 cmux 的故事。"
|
||
},
|
||
"introducingCmux": {
|
||
"metaTitle": "cmux 介绍",
|
||
"metaDescription": "我们为什么要做 cmux,一个全新的 macOS 终端。"
|
||
}
|
||
},
|
||
"docs": {
|
||
"layoutTitle": "cmux docs",
|
||
"gettingStarted": {
|
||
"title": "入门指南",
|
||
"metaDescription": "安装 cmux,专为 AI coding agent 打造的原生 macOS 终端。支持 Homebrew、DMG 下载、CLI 设置和 Sparkle 自动更新。",
|
||
"intro": "cmux 是一个基于 Ghostty 构建的轻量级原生 macOS 终端,用于管理多个 AI coding agent。支持垂直标签页、通知面板和基于 socket 的控制 API。",
|
||
"install": "安装",
|
||
"dmgRecommended": "DMG(推荐)",
|
||
"dmgDesc": "打开 .dmg 文件,将 cmux 拖到「应用程序」文件夹。cmux 通过 Sparkle 自动更新,只需下载一次。",
|
||
"homebrew": "Homebrew",
|
||
"updateLater": "后续更新:",
|
||
"firstLaunchCallout": "首次启动时,macOS 可能会要求确认打开来自已识别开发者的应用。点击<strong>打开</strong>即可继续。",
|
||
"verifyTitle": "验证安装",
|
||
"verifyDesc": "打开 cmux,你应该会看到:",
|
||
"verifyItem1": "左侧有垂直标签页侧边栏的终端窗口",
|
||
"verifyItem2": "一个已打开的初始工作区",
|
||
"verifyItem3": "由 Ghostty 驱动的终端已就绪,可以输入",
|
||
"cliSetup": "CLI 设置",
|
||
"cliDesc": "cmux 包含一个用于自动化的命令行工具。在 cmux 终端内会自动生效。如果要在 cmux 外部使用 CLI,请创建符号链接:",
|
||
"cliThen": "之后你就可以运行以下命令:",
|
||
"autoUpdates": "自动更新",
|
||
"autoUpdatesDesc": "cmux 通过 Sparkle 自动检查更新。有可用更新时,标题栏会显示更新提示。你也可以通过菜单栏的 cmux > Check for Updates 手动检查。",
|
||
"sessionRestore": "会话恢复(当前行为)",
|
||
"sessionRestoreDesc": "重新启动后,cmux 仅恢复布局和元数据:",
|
||
"sessionItem1": "窗口、工作区和面板布局",
|
||
"sessionItem2": "工作目录",
|
||
"sessionItem3": "终端回滚缓冲区(尽力恢复)",
|
||
"sessionItem4": "浏览器 URL 和导航历史",
|
||
"sessionCallout": "cmux 暂不支持恢复实时进程状态。活跃的终端应用会话(如 Claude Code、tmux、vim)在应用重启后不会恢复。",
|
||
"requirements": "系统要求",
|
||
"reqItem1": "macOS 14.0 或更高版本",
|
||
"reqItem2": "Apple Silicon 或 Intel Mac",
|
||
"metaTitle": "快速开始"
|
||
},
|
||
"concepts": {
|
||
"title": "核心概念",
|
||
"metaDescription": "cmux 如何组织终端:窗口、工作区、面板和 surface。侧边栏、分屏和 socket API 背后的层级结构。",
|
||
"intro": "cmux 以四层层级结构组织你的终端。理解这些层级有助于使用 socket API、CLI 和快捷键。",
|
||
"hierarchy": "层级结构",
|
||
"windowTitle": "窗口(Window)",
|
||
"windowDesc": "一个 macOS 窗口。使用 {shortcut} 打开多个窗口。每个窗口有独立的侧边栏和独立的工作区。",
|
||
"workspaceTitle": "工作区(Workspace)",
|
||
"workspaceDesc": "侧边栏中的一个条目。每个工作区包含一个或多个分屏面板。工作区就是你在左侧侧边栏中看到的条目。",
|
||
"workspaceNote": "在 UI 和快捷键中,工作区通常被称为「标签页」,因为它们的行为类似侧边栏中的标签页。Socket API 和环境变量使用「workspace」这个术语。",
|
||
"contextHeader": "上下文",
|
||
"termUsedHeader": "使用的术语",
|
||
"sidebarUI": "侧边栏 UI",
|
||
"tab": "标签页",
|
||
"keyboardShortcuts": "快捷键",
|
||
"workspaceOrTab": "工作区或标签页",
|
||
"socketAPI": "Socket API",
|
||
"environmentVariable": "环境变量",
|
||
"workspaceShortcuts": "快捷键:{new}(新建)、{jump}(跳转)、{close}(关闭)、{prevNext}(上一个/下一个)",
|
||
"paneTitle": "面板(Pane)",
|
||
"paneDesc": "工作区内的一个分屏区域。通过 {right}(向右)或 {down}(向下)创建分屏。使用 {nav} + 方向键在面板间导航。",
|
||
"paneNote": "每个面板可以包含多个 surface(面板内的标签页)。",
|
||
"surfaceTitle": "Surface",
|
||
"surfaceDesc": "面板内的一个标签页。每个面板有自己的标签栏,可以包含多个 surface。使用 {new} 创建,使用 {prev} / {next} 或 {jump} 导航。",
|
||
"surfaceNote": "Surface 是你直接交互的终端或浏览器会话。每个 surface 有自己的 CMUX_SURFACE_ID 环境变量。",
|
||
"panelTitle": "Panel",
|
||
"panelDesc": "Surface 内部的内容。目前有两种类型:",
|
||
"panelTerminal": "终端:一个 Ghostty 终端会话",
|
||
"panelBrowser": "浏览器:一个内嵌的 web 视图",
|
||
"panelNote": "Panel 主要是内部概念。在 socket API 和 CLI 中,你与 surface 交互,而不是直接与 panel 交互。",
|
||
"visualExample": "示例图解",
|
||
"visualExampleDesc": "在这个示例中:",
|
||
"visualItem1": "窗口包含一个带有三个工作区(dev、server、logs)的侧边栏",
|
||
"visualItem2": "工作区「dev」被选中,显示两个并排的面板",
|
||
"visualItem3": "面板 1 有两个 surface(标签栏中的 [S1] 和 [S2]),S1 处于激活状态",
|
||
"visualItem4": "面板 2 有一个 surface",
|
||
"visualItem5": "每个 surface 包含一个 panel(在本例中是终端)",
|
||
"summary": "总结",
|
||
"levelHeader": "层级",
|
||
"whatItIsHeader": "描述",
|
||
"createdByHeader": "创建方式",
|
||
"identifiedByHeader": "标识方式",
|
||
"macosWindow": "macOS 窗口",
|
||
"sidebarEntry": "侧边栏条目",
|
||
"splitRegion": "分屏区域",
|
||
"tabWithinPane": "面板内的标签页",
|
||
"terminalOrBrowser": "终端或浏览器",
|
||
"automatic": "自动",
|
||
"paneIdSocket": "Pane ID(socket API)",
|
||
"panelIdInternal": "Panel ID(内部)",
|
||
"metaTitle": "概念"
|
||
},
|
||
"configuration": {
|
||
"title": "配置",
|
||
"metaDescription": "通过 Ghostty 配置文件配置 cmux。字体、主题、颜色、分屏样式、回滚缓冲区和自动化模式的应用设置。",
|
||
"intro": "cmux 从 Ghostty 配置文件中读取配置,如果你之前使用 Ghostty,这些选项会很熟悉。",
|
||
"configLocations": "配置文件位置",
|
||
"configLocationsDesc": "cmux 按以下顺序查找配置:",
|
||
"createConfig": "如果配置文件不存在,请创建:",
|
||
"appearance": "外观",
|
||
"font": "字体",
|
||
"colors": "颜色",
|
||
"splitPanes": "分屏面板",
|
||
"behavior": "行为",
|
||
"scrollback": "回滚缓冲区",
|
||
"workingDirectory": "工作目录",
|
||
"appSettings": "应用设置",
|
||
"appSettingsDesc": "应用内设置可通过 cmux > Settings({shortcut})打开:",
|
||
"themeMode": "主题模式",
|
||
"themeSystem": "System:跟随 macOS 外观",
|
||
"themeLight": "Light:始终使用浅色模式",
|
||
"themeDark": "Dark:始终使用深色模式",
|
||
"automationMode": "自动化模式",
|
||
"automationModeDesc": "控制 socket 访问级别:",
|
||
"automationOff": "Off:禁用 socket 控制(最安全)",
|
||
"automationCmux": "cmux processes only:仅允许在 cmux 终端内启动的进程连接",
|
||
"automationAll": "allowAll:允许任何本地进程连接(CMUX_SOCKET_MODE=allowAll,仅通过环境变量覆盖)",
|
||
"automationCallout": "在共享机器上,建议使用「Off」或「cmux processes only」模式。",
|
||
"browserLinkBehavior": "浏览器链接行为",
|
||
"browserLinkDesc": "在 Settings > Browser 中,cmux 提供两个用途不同的主机列表:",
|
||
"browserHostsEmbed": "在内嵌浏览器中打开的主机:适用于从终端输出点击的链接。此列表中的主机在 cmux 中打开;其他主机在默认浏览器中打开。支持单个主机或通配符,每行一个(例如:example.com、*.internal.example)。",
|
||
"browserHostsHttp": "内嵌浏览器允许的 HTTP 主机:仅适用于 HTTP(非 HTTPS)URL。此列表中的主机可以在 cmux 中打开而不显示警告提示。默认包括 localhost、127.0.0.1、::1、0.0.0.0 和 *.localtest.me。",
|
||
"exampleConfig": "配置示例",
|
||
"metaTitle": "配置"
|
||
},
|
||
"customCommands": {
|
||
"title": "自定义命令",
|
||
"metaTitle": "自定义命令",
|
||
"metaDescription": "在 cmux.json 中定义自定义命令和工作区布局。支持按项目配置和全局配置,并具有实时文件监视功能。",
|
||
"intro": "通过在项目根目录或 ~/.config/cmux/ 中添加 cmux.json 文件来定义自定义命令和工作区布局。命令将显示在命令面板中。",
|
||
"fileLocations": "文件位置",
|
||
"fileLocationsDesc": "cmux 在两个地方查找配置:",
|
||
"localConfig": "按项目:",
|
||
"localConfigDesc": "位于项目目录中,优先级更高",
|
||
"globalConfig": "全局:",
|
||
"globalConfigDesc": "适用于所有项目,补充本地未定义的命令",
|
||
"precedenceNote": "本地命令会覆盖同名的全局命令。",
|
||
"liveReload": "更改会自动生效 — 无需重启。",
|
||
"schema": "架构",
|
||
"schemaDesc": "cmux.json 文件包含一个 commands 数组。每个命令要么是简单的 shell 命令,要么是完整的工作区定义:",
|
||
"simpleCommands": "简单命令",
|
||
"simpleCommandsDesc": "简单命令在当前聚焦的终端中运行 shell 命令:",
|
||
"simpleCommandFields": "字段",
|
||
"fieldName": "在命令面板中显示(必填)",
|
||
"fieldDescription": "可选描述",
|
||
"fieldKeywords": "命令面板的额外搜索词",
|
||
"fieldCommand": "在聚焦终端中运行的 shell 命令",
|
||
"fieldConfirm": "运行前显示确认对话框",
|
||
"simpleCommandCwdNote": "简单命令在当前聚焦终端的工作目录中运行。如果命令依赖于项目相对路径,请在前面加上",
|
||
"simpleCommandCwdRepoRoot": "以从仓库根目录运行,或使用",
|
||
"simpleCommandCwdCustomPath": "指定任意目录。",
|
||
"workspaceCommands": "工作区命令",
|
||
"workspaceCommandsDesc": "工作区命令会创建一个新工作区,具有自定义的分屏、终端和浏览器面板布局:",
|
||
"workspaceFields": "工作区字段",
|
||
"wsFieldName": "工作区标签页名称(默认为命令名称)",
|
||
"wsFieldCwd": "工作区的工作目录",
|
||
"wsFieldColor": "工作区标签页颜色",
|
||
"wsFieldLayout": "定义分屏和面板的布局树",
|
||
"restartBehavior": "重启行为",
|
||
"restartBehaviorDesc": "控制当同名工作区已存在时的行为:",
|
||
"restartIgnore": "切换到现有工作区(默认)",
|
||
"restartRecreate": "无需询问直接关闭并重新创建",
|
||
"restartConfirm": "重新创建前询问用户",
|
||
"layoutTree": "布局树",
|
||
"layoutTreeDesc": "布局树使用递归分割节点定义面板的排列方式:",
|
||
"splitNode": "分割节点",
|
||
"splitNodeDesc": "将空间分割为两个子节点:",
|
||
"or": "或",
|
||
"splitPosition": "分割线位置,从 0.1 到 0.9(默认 0.5)",
|
||
"splitChildren": "恰好两个子节点(分割或面板)",
|
||
"paneNode": "面板节点",
|
||
"paneNodeDesc": "包含一个或多个 surface(面板内标签页)的叶节点。",
|
||
"surfaceDefinition": "Surface 定义",
|
||
"surfaceDefinitionDesc": "面板中的每个 surface 可以是终端或浏览器:",
|
||
"surfaceName": "自定义标签页标题",
|
||
"surfaceCommand": "创建时自动运行的 shell 命令(仅限终端)",
|
||
"surfaceCwd": "此 surface 的工作目录",
|
||
"surfaceEnv": "以键值对形式表示的环境变量",
|
||
"surfaceUrl": "要打开的 URL(仅限浏览器)",
|
||
"surfaceFocus": "创建后聚焦此 surface",
|
||
"cwdResolution": "工作目录解析",
|
||
"omitted": "省略",
|
||
"cwdRelative": "工作区工作目录",
|
||
"cwdSubdir": "相对于工作区工作目录",
|
||
"cwdHome": "展开到主目录",
|
||
"absolutePath": "绝对路径",
|
||
"cwdAbsolute": "按原样使用",
|
||
"fullExample": "完整示例"
|
||
},
|
||
"keyboardShortcuts": {
|
||
"title": "快捷键",
|
||
"description": "cmux 中所有可用的快捷键,按类别分组。",
|
||
"metaDescription": "cmux 的所有 macOS 快捷键,涵盖工作区、surface、分屏面板、浏览器、通知、查找和窗口管理。",
|
||
"searchPlaceholder": "搜索快捷键...",
|
||
"searchLabel": "搜索键盘快捷键",
|
||
"noResults": "未找到快捷键",
|
||
"noResultsHint": "请尝试其他搜索词",
|
||
"cat": {
|
||
"workspaces": "工作区",
|
||
"workspacesBlurb": "工作区位于侧边栏中。每个工作区有自己的面板和 surface。",
|
||
"surfaces": "Surface",
|
||
"surfacesBlurb": "Surface 是面板内的标签页。",
|
||
"splitPanes": "分屏面板",
|
||
"browser": "浏览器",
|
||
"notifications": "通知",
|
||
"find": "查找",
|
||
"terminal": "终端",
|
||
"window": "窗口"
|
||
},
|
||
"sc": {
|
||
"ws-new": "新建工作区",
|
||
"ws-prev": "上一个工作区",
|
||
"ws-next": "下一个工作区",
|
||
"ws-jump-1-8": "跳转到工作区 1–8",
|
||
"ws-jump-last": "跳转到最后一个工作区",
|
||
"ws-close": "关闭工作区",
|
||
"ws-rename": "重命名工作区",
|
||
"sf-new": "新建 surface",
|
||
"sf-prev-1": "上一个 surface",
|
||
"sf-prev-2": "上一个 surface",
|
||
"sf-jump-1-8": "跳转到 surface 1–8",
|
||
"sf-jump-last": "跳转到最后一个 surface",
|
||
"sf-close": "关闭 surface",
|
||
"sp-right": "向右分屏",
|
||
"sp-down": "向下分屏",
|
||
"sp-focus": "按方向聚焦面板",
|
||
"sp-browser-right": "向右分屏浏览器",
|
||
"sp-browser-down": "向下分屏浏览器",
|
||
"br-open": "打开浏览器 surface",
|
||
"br-addr": "聚焦地址栏",
|
||
"br-forward": "前进",
|
||
"br-reload": "刷新页面",
|
||
"br-devtools": "打开开发者工具",
|
||
"nt-panel": "显示通知面板",
|
||
"nt-latest": "跳转到最新未读",
|
||
"nt-flash": "触发闪烁",
|
||
"fd-find": "查找",
|
||
"fd-next-prev": "查找下一个 / 上一个",
|
||
"fd-hide": "隐藏查找栏",
|
||
"fd-selection": "使用选中内容查找",
|
||
"tm-clear": "清除回滚缓冲区",
|
||
"tm-copy": "复制(选中内容)",
|
||
"tm-paste": "粘贴",
|
||
"tm-font": "增大 / 减小字体",
|
||
"tm-reset": "重置字体大小",
|
||
"wn-new": "新建窗口",
|
||
"wn-settings": "设置",
|
||
"wn-reload": "重新加载配置",
|
||
"wn-quit": "退出"
|
||
},
|
||
"metaTitle": "键盘快捷键"
|
||
},
|
||
"api": {
|
||
"title": "API 参考",
|
||
"metaDescription": "cmux CLI 和 Unix socket API 参考文档。工作区管理、分屏面板、输入控制、通知、侧边栏元数据、环境变量和检测方法。",
|
||
"intro": "cmux 提供 CLI 工具和 Unix socket 两种编程控制方式。每个命令都可以通过两种接口使用。",
|
||
"socket": "Socket",
|
||
"buildHeader": "构建版本",
|
||
"pathHeader": "路径",
|
||
"release": "Release",
|
||
"debug": "Debug",
|
||
"taggedDebug": "带标签的 Debug 构建",
|
||
"socketOverride": "可通过 CMUX_SOCKET_PATH 环境变量覆盖。每次调用发送一个以换行符结尾的 JSON 请求:",
|
||
"socketCallout": "JSON socket 请求必须使用 method 和 params。不支持旧版 v1 JSON 格式(如 <legacy>'{'\"command\":\"...\"'}'</legacy>)。",
|
||
"accessModes": "访问模式",
|
||
"modeHeader": "模式",
|
||
"descriptionHeader": "描述",
|
||
"howToEnableHeader": "启用方式",
|
||
"offMode": "禁用 Socket",
|
||
"offEnable": "Settings UI 或 CMUX_SOCKET_MODE=off",
|
||
"cmuxOnlyMode": "仅允许在 cmux 终端内启动的进程连接。",
|
||
"cmuxOnlyEnable": "Settings UI 中的默认模式",
|
||
"allowAllMode": "允许任何本地进程连接(不检查进程来源)。",
|
||
"allowAllEnable": "仅通过环境变量覆盖:CMUX_SOCKET_MODE=allowAll",
|
||
"accessCallout": "在共享机器上,请使用 Off 或 cmux processes only。",
|
||
"cliOptions": "CLI 选项",
|
||
"flagHeader": "Flag",
|
||
"customSocketPath": "自定义 socket 路径",
|
||
"outputJson": "以 JSON 格式输出",
|
||
"targetWindow": "指定目标窗口",
|
||
"targetWorkspace": "指定目标工作区",
|
||
"targetSurface": "指定目标 surface",
|
||
"idFormat": "控制 JSON 输出中的标识符格式",
|
||
"workspaceCommands": "工作区命令",
|
||
"listWorkspacesDesc": "列出所有打开的工作区。",
|
||
"newWorkspaceDesc": "创建新工作区。",
|
||
"selectWorkspaceDesc": "切换到指定工作区。",
|
||
"currentWorkspaceDesc": "获取当前活跃的工作区。",
|
||
"closeWorkspaceDesc": "关闭工作区。",
|
||
"splitCommands": "分屏命令",
|
||
"newSplitDesc": "创建新的分屏面板。方向:left、right、up、down。",
|
||
"listSurfacesDesc": "列出当前工作区中的所有 surface。",
|
||
"focusSurfaceDesc": "聚焦到指定 surface。",
|
||
"inputCommands": "输入命令",
|
||
"sendDesc": "向当前聚焦的终端发送文本输入。",
|
||
"sendKeyDesc": "发送按键。可用按键:enter、tab、escape、backspace、delete、up、down、left、right。",
|
||
"sendSurfaceDesc": "向指定 surface 发送文本。",
|
||
"sendKeySurfaceDesc": "向指定 surface 发送按键。",
|
||
"notificationCommands": "通知命令",
|
||
"notifyDesc": "发送通知。",
|
||
"listNotificationsDesc": "列出所有通知。",
|
||
"clearNotificationsDesc": "清除所有通知。",
|
||
"sidebarMetadata": "侧边栏元数据命令",
|
||
"sidebarMetadataDesc": "为任意工作区设置侧边栏中的状态标签、进度条和日志条目。适用于构建脚本、CI 集成和希望快速展示状态的 AI coding agent。",
|
||
"setStatusDesc": "设置侧边栏状态标签。使用唯一的 key,让不同工具管理各自的条目。",
|
||
"clearStatusDesc": "按 key 移除侧边栏状态条目。",
|
||
"listStatusDesc": "列出工作区的所有侧边栏状态条目。",
|
||
"setProgressDesc": "设置侧边栏进度条(0.0 到 1.0)。",
|
||
"clearProgressDesc": "清除侧边栏进度条。",
|
||
"logDesc": "向侧边栏追加日志条目。级别:info、progress、success、warning、error。",
|
||
"clearLogDesc": "清除所有侧边栏日志条目。",
|
||
"listLogDesc": "列出侧边栏日志条目。",
|
||
"sidebarStateDesc": "导出所有侧边栏元数据(cwd、git 分支、端口、状态、进度、日志)。",
|
||
"utilityCommands": "工具命令",
|
||
"pingDesc": "检查 cmux 是否正在运行并响应。",
|
||
"capabilitiesDesc": "列出可用的 socket 方法和当前访问模式。",
|
||
"identifyDesc": "显示当前聚焦的窗口/工作区/面板/surface 上下文。",
|
||
"envVariables": "环境变量",
|
||
"variableHeader": "变量",
|
||
"socketPathDesc": "覆盖 CLI 和集成使用的 socket 路径",
|
||
"socketEnableDesc": "强制启用/禁用 socket(1/0、true/false、on/off)",
|
||
"socketModeDesc": "覆盖访问模式(cmuxOnly、allowAll、off)。也接受 cmux-only/cmux_only 和 allow-all/allow_all",
|
||
"workspaceIdDesc": "自动设置:当前工作区 ID",
|
||
"surfaceIdDesc": "自动设置:当前 surface ID",
|
||
"termProgramDesc": "设置为 ghostty",
|
||
"termDesc": "设置为 xterm-ghostty",
|
||
"envCallout": "旧版 CMUX_SOCKET_MODE 值 full 和 notifications 仍然兼容。",
|
||
"detectingCmux": "检测 cmux",
|
||
"examples": "示例",
|
||
"pythonClient": "Python 客户端",
|
||
"shellScript": "Shell 脚本",
|
||
"buildScriptNotification": "带通知的构建脚本",
|
||
"metaTitle": "API 参考"
|
||
},
|
||
"notifications": {
|
||
"title": "通知",
|
||
"metaDescription": "在 cmux 中从 AI agent 和脚本发送桌面通知。CLI、OSC 99/777 转义序列和 Claude Code hooks 集成。",
|
||
"intro": "cmux 支持桌面通知,让 AI agent 和脚本在需要关注时提醒你。",
|
||
"lifecycle": "生命周期",
|
||
"received": "已接收:通知出现在面板中,触发桌面提醒(如果未被抑制)",
|
||
"unread": "未读:工作区标签页上显示未读标记",
|
||
"read": "已读:查看该工作区时清除",
|
||
"cleared": "已清除:从面板中移除",
|
||
"suppression": "抑制",
|
||
"suppressionDesc": "以下情况桌面提醒会被抑制:",
|
||
"suppressItem1": "cmux 窗口处于聚焦状态",
|
||
"suppressItem2": "发送通知的工作区正处于活跃状态",
|
||
"suppressItem3": "通知面板已打开",
|
||
"notificationPanel": "通知面板",
|
||
"notificationPanelDesc": "按 <openShortcut>⌘⇧I</openShortcut> 打开通知面板。点击通知跳转到对应工作区。按 <jumpShortcut>⌘⇧U</jumpShortcut> 直接跳转到最近有未读通知的工作区。",
|
||
"customCommand": "自定义命令",
|
||
"customCommandDesc": "每次调度通知时运行一个 shell 命令。在 Settings > App > Notification Command 中设置。命令通过 /bin/sh -c 运行,可使用以下环境变量:",
|
||
"customCommandNote": "该命令独立于系统声音选择器运行。将选择器设为「None」可仅使用自定义命令,或同时保留两者以获得系统声音加自定义操作。",
|
||
"sending": "发送通知",
|
||
"cli": "CLI",
|
||
"osc777Title": "OSC 777(简单)",
|
||
"osc777Desc": "RXVT 协议使用固定格式,包含标题和正文:",
|
||
"osc99Title": "OSC 99(丰富)",
|
||
"osc99Desc": "Kitty 协议支持副标题和通知 ID:",
|
||
"variableHeader": "变量",
|
||
"descriptionHeader": "描述",
|
||
"envTitle": "通知标题(工作区名称或应用名称)",
|
||
"envSubtitle": "通知副标题",
|
||
"envBody": "通知正文内容",
|
||
"cmpTitleBody": "标题 + 正文",
|
||
"cmpSubtitle": "副标题",
|
||
"cmpNotificationId": "通知 ID",
|
||
"cmpComplexity": "复杂度",
|
||
"cmpYes": "是",
|
||
"cmpNo": "否",
|
||
"cmpHigher": "较高",
|
||
"cmpLower": "较低",
|
||
"featureHeader": "功能",
|
||
"comparisonCallout": "简单通知用 OSC 777。需要副标题或通知 ID 时用 OSC 99。最简单的集成方式是用 CLI(cmux notify)。",
|
||
"claudeCodeHooks": "Claude Code hooks",
|
||
"claudeCodeHooksDesc": "cmux 通过 <link>Claude Code</link> 的 hooks 集成,在任务完成时通知你。",
|
||
"createHookScript": "1. 创建 hook 脚本",
|
||
"configureClaude": "2. 配置 Claude Code",
|
||
"restartNote": "重启 Claude Code 以应用 hooks。",
|
||
"copilotCliHooks": "GitHub Copilot CLI",
|
||
"copilotCliHooksDesc": "Copilot CLI 支持<link>hooks</link>,可在提示提交、代理停止和错误等生命周期事件中运行 shell 命令。",
|
||
"copilotCliRepoHooks": "对于仓库级别的 hooks,使用相同结构创建 .github/hooks/notify.json 文件:",
|
||
"integrationExamples": "集成示例",
|
||
"notifyAfterLong": "长时间命令后发送通知",
|
||
"python": "Python",
|
||
"nodejs": "Node.js",
|
||
"tmuxPassthrough": "tmux 透传",
|
||
"tmuxDesc": "如果在 cmux 内使用 tmux,启用透传:",
|
||
"metaTitle": "通知"
|
||
},
|
||
"browserAutomation": {
|
||
"title": "浏览器自动化",
|
||
"metaDescription": "cmux 浏览器命令参考,涵盖导航、DOM 交互、等待、检查、JavaScript 执行、标签页、对话框、框架、下载和浏览器状态。",
|
||
"intro": "cmux browser 命令组提供针对 cmux 浏览器 surface 的自动化功能。可用于导航、与 DOM 元素交互、检查页面状态、执行 JavaScript 和管理浏览器会话数据。",
|
||
"commandIndex": "命令索引",
|
||
"categoryHeader": "类别",
|
||
"subcommandsHeader": "子命令",
|
||
"navAndTargeting": "导航和目标定位",
|
||
"waiting": "等待",
|
||
"domInteraction": "DOM 交互",
|
||
"inspection": "检查",
|
||
"jsAndInjection": "JavaScript 和注入",
|
||
"framesDialogsDownloads": "框架、对话框、下载",
|
||
"stateAndSession": "状态和会话数据",
|
||
"tabsAndLogs": "标签页和日志",
|
||
"targetingSurface": "指定浏览器 surface",
|
||
"targetingDesc": "大多数子命令需要指定目标 surface。可以通过位置参数或 --surface 传入。",
|
||
"navigation": "导航",
|
||
"waitingSection": "等待",
|
||
"waitingDesc": "使用 wait 命令阻塞等待,直到选择器、文本、URL 片段、加载状态或 JavaScript 条件满足。",
|
||
"domSection": "DOM 交互",
|
||
"domDesc": "变更操作支持 --snapshot-after 用于脚本中的快速验证。",
|
||
"inspectionSection": "检查",
|
||
"inspectionDesc": "使用结构化 getter 用于脚本,快照/截图用于人工审查。",
|
||
"jsSection": "JavaScript 执行和注入",
|
||
"stateSection": "状态",
|
||
"stateDesc": "会话数据命令涵盖 cookie、local/session storage 和完整的浏览器状态快照。",
|
||
"tabsSection": "标签页",
|
||
"tabsDesc": "浏览器标签页操作对应活跃浏览器标签组中的浏览器 surface。",
|
||
"consoleSection": "控制台和错误",
|
||
"dialogsSection": "对话框",
|
||
"framesSection": "框架",
|
||
"downloadsSection": "下载",
|
||
"commonPatterns": "常见模式",
|
||
"patternNavigate": "导航、等待、检查",
|
||
"patternForm": "填写表单并验证成功文本",
|
||
"patternDebug": "失败时捕获调试信息",
|
||
"patternSession": "持久化和恢复浏览器会话",
|
||
"metaTitle": "浏览器自动化"
|
||
},
|
||
"changelog": {
|
||
"title": "更新日志",
|
||
"metaDescription": "cmux 发布说明和版本历史。原生 macOS 终端的新功能、问题修复和变更记录。",
|
||
"metaTitle": "更新日志"
|
||
},
|
||
"navItems": {
|
||
"gettingStarted": "入门指南",
|
||
"concepts": "核心概念",
|
||
"configuration": "配置",
|
||
"customCommands": "自定义命令",
|
||
"keyboardShortcuts": "快捷键",
|
||
"apiReference": "API 参考",
|
||
"browserAutomation": "浏览器自动化",
|
||
"notifications": "通知",
|
||
"agentIntegrations": "Agent Integrations",
|
||
"claudeCodeTeams": "Claude Code Teams",
|
||
"ohMyOpenCode": "oh-my-opencode",
|
||
"changelog": "更新日志"
|
||
}
|
||
},
|
||
"legal": {
|
||
"privacyPolicy": "隐私政策",
|
||
"termsOfService": "服务条款",
|
||
"eula": "EULA"
|
||
},
|
||
"wallOfLove": {
|
||
"title": "用户好评",
|
||
"description": "大家对 cmux 的评价。"
|
||
},
|
||
"testimonials": {
|
||
"mitchellh": "又一个基于 libghostty 的项目,这次是一个带垂直标签页、更好的组织/通知、内置可编程浏览器的 macOS 终端,专门面向大量使用终端 agent 工作流的用户。",
|
||
"schrockn": "这正是我一直在找的产品。用了两小时就爱上了。",
|
||
"egrefen": "整个周末都在用,太棒了。",
|
||
"max4c": "过去两周最喜欢的工具",
|
||
"asaza": "cmux 看起来太棒了,也许终于到了告别 VSCode 的时候",
|
||
"johnthedebs": "看起来真的很厉害。喜欢这些想法:可编程性、分层 UI、带 API 的浏览器。期待试用。也想说非常感谢 Mitchell Hashimoto 创建了 libghostty,作为终端用户感觉现在是个令人兴奋的时代。",
|
||
"joeriddles": "终端里的垂直标签页!之前从没想过。我用 Firefox 垂直标签页用得很开心。",
|
||
"dchu17": "试了一下,很直观。做得好!",
|
||
"afruth": "很喜欢,过去一天在三个并行项目上用了,每个都有多个 worktree。配合 lazygit 和 yazi/nvim,比以前高效多了,不用在多个 Ghostty/iTerm 实例之间切换。比 tmux 也更自然。",
|
||
"northprint": "试了 cmux,确实不错",
|
||
"indykish": "cmux 挺好用的。",
|
||
"kataring": "换到 cmux.dev 了",
|
||
"scottw": "非常有用的发现。强烈推荐。",
|
||
"johnblythe": "周末用了,很喜欢。一直在等这样的工具。",
|
||
"bchris91": "这正是我想要的。做得太好了,谢谢!",
|
||
"connorelsea": "用了一周,非常棒。每个进行中的任务一个垂直标签页。里面一边是 Claude,另一边是浏览器看 PR 和资料,在任务之间切换保持有序。配合 skill 让 Claude 递归监控 CI 等等。感觉开悟了。",
|
||
"tonkotsuboy": "年初从 Warp 换到 Ghostty,现在又换到了 cmux。垂直标签页很方便,Claude Code 任务完成时收到通知很实用。基于 Ghostty 所以依然飞快。之前在 Ghostty 里设置的分支显示和补全也都能用。"
|
||
},
|
||
"nightly": {
|
||
"title": "cmux NIGHTLY",
|
||
"subtitle": "来自 main 分支的最新构建",
|
||
"metaTitle": "cmux NIGHTLY — 每夜构建",
|
||
"metaDescription": "下载 cmux NIGHTLY,从最新 main 提交自动构建的独立应用。与稳定版并行运行,拥有独立的自动更新。",
|
||
"description": "cmux NIGHTLY 从 main 的最新提交自动构建。它拥有独立的 Bundle ID,因此可以与稳定版并行运行,互不冲突。用它来测试尚未发布的新功能。",
|
||
"download": "下载 Mac 版 NIGHTLY",
|
||
"warning": "每夜构建可能包含错误或不完整的功能。如果遇到问题,请在 <githubLink>GitHub</githubLink> 或 <discordLink>Discord 的 #nightly-bugs</discordLink> 上报告,并切换回稳定版。"
|
||
},
|
||
"languageSwitcher": {
|
||
"label": "语言"
|
||
}
|
||
}
|