* 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
69 KiB
JSON
670 lines
69 KiB
JSON
{
|
||
"meta": {
|
||
"title": "cmux — Терминал для многозадачности",
|
||
"description": "Нативный терминал macOS на базе Ghostty. Работает с Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider и любым CLI-инструментом. Вертикальные вкладки, кольца уведомлений, разделённые панели и socket API.",
|
||
"ogDescription": "Нативный терминал 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": "код-агентов",
|
||
"typingMultitasking": "многозадачности",
|
||
"subtitle": "Нативное macOS-приложение на базе Ghostty. Вертикальные вкладки, кольца уведомлений когда агенты ждут внимания, разделённые панели и socket API для автоматизации.",
|
||
"features": "Возможности",
|
||
"faq": "FAQ",
|
||
"communitySection": "Сообщество",
|
||
"feature": {
|
||
"verticalTabs": "Вертикальные вкладки",
|
||
"verticalTabsDesc": ": боковая панель показывает ветку git, рабочую директорию, порты и текст уведомлений",
|
||
"notificationRings": "Кольца уведомлений",
|
||
"notificationRingsDesc": ": панели подсвечиваются когда агенты ждут внимания",
|
||
"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. Он использует <link>libghostty</link> как библиотеку для рендеринга терминала, так же как приложения используют WebKit для веб-представлений. Ghostty это самостоятельный терминал; cmux это другое приложение, построенное на его движке рендеринга.",
|
||
"faqPlatformQ": "Какие платформы поддерживаются?",
|
||
"faqPlatformA": "Только macOS, пока что. cmux это нативное приложение на Swift + AppKit.",
|
||
"faqAgentsQ": "С какими агентами для кода работает cmux?",
|
||
"faqAgentsA": "Со всеми. cmux это терминал, поэтому любой агент, работающий в терминале, работает из коробки: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent и всё остальное, что можно запустить из командной строки.",
|
||
"faqNotificationsQ": "Как работают уведомления?",
|
||
"faqNotificationsA": "Когда процесс требует внимания, cmux показывает кольца уведомлений вокруг панелей, бейджи непрочитанных на боковой панели, поповер уведомлений и десктопное уведомление macOS. Они срабатывают автоматически через стандартные escape-последовательности терминала (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 это нативное macOS-приложение с GUI: вертикальные вкладки, разделённые панели, встроенный браузер и socket API уже встроены. Не нужны конфиг-файлы или prefix-клавиши.",
|
||
"faqFreeQ": "cmux бесплатный?",
|
||
"faqFreeA": "Да, cmux бесплатный. Исходный код доступен на <link>GitHub</link>."
|
||
},
|
||
"community": {
|
||
"title": "Сообщество",
|
||
"description": "Свяжись с другими пользователями cmux и командой разработки.",
|
||
"discord": "Discord",
|
||
"discordAction": "Присоединяйся к Discord",
|
||
"discordDesc": "Общайся с сообществом, получай помощь и делись обратной связью",
|
||
"githubAction": "Смотреть на GitHub",
|
||
"githubDesc": "Поставь звезду репозиторию, сообщай об ошибках и вноси вклад",
|
||
"twitter": "Twitter",
|
||
"twitterAction": "Подписаться на X",
|
||
"twitterDesc": "Обновления, анонсы и советы",
|
||
"youtube": "YouTube",
|
||
"youtubeAction": "Подписаться",
|
||
"youtubeDesc": "Демо, обучающие материалы и пошаговые руководства",
|
||
"linkedin": "LinkedIn",
|
||
"linkedinAction": "Подписаться",
|
||
"linkedinDesc": "Новости компании и инженерные обновления",
|
||
"metaTitle": "Сообщество — cmux",
|
||
"metaDescription": "Присоединяйтесь к сообществу cmux в Discord, Twitter, GitHub и других платформах"
|
||
},
|
||
"blog": {
|
||
"title": "Блог",
|
||
"layoutTitle": "cmux blog",
|
||
"metaTitle": "Блог",
|
||
"metaDescription": "Новости и обновления от команды cmux",
|
||
"description": "Новости и обновления от команды cmux",
|
||
"posts": {
|
||
"cmdShiftU": {
|
||
"title": "Cmd+Shift+U",
|
||
"summary": "Как Cmd+Shift+U навигирует между завершёнными агентами в рабочих пространствах cmux.",
|
||
"date": "4 марта 2026",
|
||
"p1": "Моя любимая функция cmux это Cmd+Shift+U. У меня сейчас открыто 17 рабочих пространств, каждое запускает агента. Раньше я кликал по вкладкам и панели уведомлений, чтобы понять, что завершилось. Печатать быстрее.",
|
||
"p2": "Cmd+Shift+U прыгает к самому свежему непрочитанному <link>уведомлению</link>. На практике это значит последний завершивший работу агент. Переключает на нужное рабочее пространство, фокусирует нужную панель, мигает ей чтобы ты увидел куда смотреть и помечает как прочитанное. Если уведомление пришло из другого окна, то окно выходит на передний план."
|
||
},
|
||
"zenOfCmux": {
|
||
"title": "Дзен cmux",
|
||
"summary": "cmux это примитив, а не решение. Он даёт тебе составные части, а рабочий процесс ты определяешь сам.",
|
||
"date": "27 февраля 2026",
|
||
"p1": "cmux не навязывает разработчикам как использовать инструменты. Это терминал и браузер с CLI, а дальше решаешь ты.",
|
||
"p2": "cmux это примитив, а не решение. Он даёт тебе терминал, браузер, уведомления, рабочие пространства, разделения, вкладки и CLI для управления всем этим. cmux не заставляет использовать агентов для кода каким-то определённым образом. То, что ты построишь из примитивов, принадлежит тебе.",
|
||
"p3": "Лучшие разработчики всегда создавали собственные инструменты. Никто пока не нашёл лучший способ работы с агентами, и команды, создающие закрытые продукты, тем более нет. Разработчики, ближе всего к своим кодовым базам, разберутся первыми.",
|
||
"p4": "Дай миллиону разработчиков составные примитивы, и они коллективно найдут самые эффективные рабочие процессы быстрее, чем любая продуктовая команда смогла бы спроектировать сверху вниз."
|
||
},
|
||
"showHnLaunch": {
|
||
"title": "Запуск cmux на Show HN",
|
||
"summary": "cmux попал на #2 на Hacker News, его расшарил Mitchell Hashimoto, и он стал вирусным в Японии.",
|
||
"date": "21 февраля 2026",
|
||
"intro": "Мы опубликовали cmux на <link>Show HN</link> 19 февраля:",
|
||
"blockquote1": "Я запускаю много сессий Claude Code и Codex параллельно. Использовал Ghostty с кучей разделённых панелей и полагался на нативные уведомления macOS, чтобы знать когда агент меня ждёт. Но тело уведомления Claude Code это всегда просто \"Claude is waiting for your input\" без контекста, а с достаточным количеством открытых вкладок я уже не мог прочитать даже заголовки.",
|
||
"blockquote2": "Я попробовал несколько оркестраторов для кода, но большинство были Electron/Tauri приложениями и производительность меня раздражала. Я просто предпочитаю терминал, потому что GUI-оркестраторы привязывают к своему рабочему процессу. Поэтому я сделал cmux как нативное macOS-приложение на Swift/AppKit. Оно использует libghostty для рендеринга терминала и читает твой существующий конфиг Ghostty для тем, шрифтов, цветов и прочего.",
|
||
"blockquote3": "Основные дополнения это боковая панель и система уведомлений. Боковая панель имеет вертикальные вкладки, показывающие ветку git, рабочую директорию, слушающие порты и последний текст уведомления для каждого рабочего пространства. Система уведомлений ловит терминальные последовательности (OSC 9/99/777) и имеет CLI (cmux notify), который можно подключить к хукам агентов для Claude Code, OpenCode и т.д. Когда агент ждёт, его панель получает синее кольцо и вкладка подсвечивается на боковой панели, так что я вижу какой из них меня ждёт среди разделений и вкладок. Cmd+Shift+U прыгает к самому свежему непрочитанному.",
|
||
"blockquote4": "Встроенный браузер имеет скриптуемый API. Агенты могут сделать снимок дерева доступности, получить ссылки на элементы, кликать, заполнять формы, выполнять JS и читать логи консоли. Можно разделить панель браузера рядом с терминалом и дать Claude Code взаимодействовать с твоим dev-сервером напрямую.",
|
||
"blockquote5": "Всё скриптуется через CLI и socket API: создание рабочих пространств/вкладок, разделение панелей, отправка нажатий клавиш, открытие URL-ов в браузере.",
|
||
"hitNumber2": "На пике попал на #2 на Hacker News. Mitchell Hashimoto расшарил его:",
|
||
"favoriteComment": "Мой любимый комментарий из <link>ветки HN</link>:",
|
||
"viralJapan": "Неожиданно cmux стал вирусным в Японии:",
|
||
"translation": "Перевод: \"Выглядит хорошо. Терминальное приложение на базе Ghostty, спроектированное чтобы не потеряться при параллельном запуске нескольких CLI вроде Claude Code. Панель ожидающая ввода получает синюю рамку, и есть собственная система уведомлений.\"",
|
||
"viralChina": "И полу-вирусный в Китае:",
|
||
"extensions": "Ещё одна крутая штука, это видеть как люди строят поверх cmux CLI. sasha сделал расширение pi-cmux, которое показывает информацию о модели, использование токенов и состояние агента на боковой панели:",
|
||
"scriptable": "Всё в cmux скриптуется через CLI: создание рабочих пространств, отправка нажатий клавиш, управление браузером, чтение уведомлений. Часть философии cmux это быть программируемым и составным, чтобы люди могли настроить работу с агентами для кода под себя. Состояние дел с агентами для кода меняется быстро, и ты не хочешь быть привязанным к негибкому GUI-оркестратору, который не успевает за изменениями.",
|
||
"cta": "Если запускаешь несколько агентов для кода, <link>попробуй cmux</link>."
|
||
},
|
||
"introducingCmux": {
|
||
"title": "Представляем cmux",
|
||
"summary": "Нативный macOS-терминал на базе Ghostty, спроектированный для параллельного запуска нескольких AI-агентов для кода.",
|
||
"date": "12 февраля 2026",
|
||
"p1": "cmux это нативное терминальное macOS-приложение на базе Ghostty, спроектированное с нуля для разработчиков, которые запускают несколько AI-агентов для кода одновременно.",
|
||
"whyTitle": "Зачем cmux?",
|
||
"whyP": "Современные рабочие процессы разработки часто включают запуск нескольких агентов одновременно. Claude Code, Codex и другие инструменты, каждый в своём терминале. Отслеживание того, какие из них ждут внимания и быстрое переключение между ними это проблема, которую cmux решает.",
|
||
"featuresTitle": "Ключевые возможности",
|
||
"getStartedTitle": "Начни",
|
||
"getStartedP": "Установи cmux через Homebrew или скачай DMG из <link>руководства по началу работы</link>.",
|
||
"featureVerticalTabsLabel": "Вертикальные вкладки",
|
||
"featureVerticalTabsDesc": "видишь все терминалы одним взглядом на боковой панели",
|
||
"featureNotificationsLabel": "Кольца уведомлений",
|
||
"featureNotificationsDesc": "вкладки мигают когда агент ждёт твоего ввода",
|
||
"featureSplitPanesLabel": "Разделённые панели",
|
||
"featureSplitPanesDesc": "горизонтальные и вертикальные разделения внутри каждого рабочего пространства",
|
||
"featureSocketApiLabel": "Socket API",
|
||
"featureSocketApiDesc": "программное управление для создания вкладок и отправки ввода",
|
||
"featureGpuLabel": "GPU-ускорение",
|
||
"featureGpuDesc": "на базе libghostty для плавного рендеринга"
|
||
}
|
||
},
|
||
"zenOfCmux": {
|
||
"metaTitle": "Дзен cmux",
|
||
"metaDescription": "cmux — это примитив, а не решение. Он даёт вам комбинируемые компоненты, а рабочий процесс — за вами."
|
||
},
|
||
"cmdShiftU": {
|
||
"metaTitle": "Cmd+Shift+U",
|
||
"metaDescription": "Новая комбинация клавиш, которая меняет взаимодействие с cmux."
|
||
},
|
||
"showHnLaunch": {
|
||
"metaTitle": "Запуск cmux на Show HN",
|
||
"metaDescription": "История запуска cmux на Hacker News."
|
||
},
|
||
"introducingCmux": {
|
||
"metaTitle": "Представляем cmux",
|
||
"metaDescription": "Почему мы создали cmux — новый терминал для macOS."
|
||
}
|
||
},
|
||
"docs": {
|
||
"layoutTitle": "cmux docs",
|
||
"gettingStarted": {
|
||
"title": "Начало работы",
|
||
"metaDescription": "Установи cmux, нативный macOS-терминал для AI-агентов. Homebrew, скачивание DMG, настройка CLI и автообновления через Sparkle.",
|
||
"intro": "cmux это лёгкий нативный macOS-терминал на базе Ghostty для управления несколькими AI-агентами. Вертикальные вкладки, панель уведомлений и API управления на базе socket.",
|
||
"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 она работает автоматически. Чтобы использовать CLI извне cmux, создай символическую ссылку:",
|
||
"cliThen": "Затем можно запускать команды вроде:",
|
||
"autoUpdates": "Автообновления",
|
||
"autoUpdatesDesc": "cmux проверяет обновления автоматически через Sparkle. Когда обновление доступно, ты увидишь значок обновления в заголовке окна. Можно также проверить вручную через cmux > Check for Updates в строке меню.",
|
||
"sessionRestore": "Восстановление сессии (текущее поведение)",
|
||
"sessionRestoreDesc": "После перезапуска cmux восстанавливает только компоновку и метаданные:",
|
||
"sessionItem1": "Компоновка окон, рабочих пространств и панелей",
|
||
"sessionItem2": "Рабочие директории",
|
||
"sessionItem3": "Scrollback терминала (по возможности)",
|
||
"sessionItem4": "URL браузера и история навигации",
|
||
"sessionCallout": "cmux пока не восстанавливает состояние живых процессов. Активные сессии терминальных приложений, таких как Claude Code, tmux и vim, не возобновляются после перезапуска приложения.",
|
||
"requirements": "Требования",
|
||
"reqItem1": "macOS 14.0 или новее",
|
||
"reqItem2": "Apple Silicon или Intel Mac",
|
||
"metaTitle": "Начало работы"
|
||
},
|
||
"concepts": {
|
||
"title": "Концепции",
|
||
"metaDescription": "Как cmux организует терминалы: окна, рабочие пространства, панели и поверхности. Иерархия за боковой панелью, разделениями и socket API.",
|
||
"intro": "cmux организует терминалы в четырёхуровневую иерархию. Понимание этих уровней помогает при работе с socket API, CLI и горячими клавишами.",
|
||
"hierarchy": "Иерархия",
|
||
"windowTitle": "Окно",
|
||
"windowDesc": "Окно macOS. Открой несколько окон с помощью {shortcut}. У каждого окна своя боковая панель с независимыми рабочими пространствами.",
|
||
"workspaceTitle": "Рабочее пространство",
|
||
"workspaceDesc": "Элемент боковой панели. Каждое рабочее пространство содержит одну или более разделённых панелей. Рабочие пространства это то, что ты видишь на левой боковой панели.",
|
||
"workspaceNote": "В интерфейсе и горячих клавишах рабочие пространства часто называются \"вкладками\", потому что ведут себя как вкладки на боковой панели. Socket API и переменные окружения используют термин \"workspace\".",
|
||
"contextHeader": "Контекст",
|
||
"termUsedHeader": "Используемый термин",
|
||
"sidebarUI": "Интерфейс боковой панели",
|
||
"tab": "Вкладка",
|
||
"keyboardShortcuts": "Горячие клавиши",
|
||
"workspaceOrTab": "Рабочее пространство или вкладка",
|
||
"socketAPI": "Socket API",
|
||
"environmentVariable": "Переменная окружения",
|
||
"workspaceShortcuts": "Шорткаты: {new} (новый), {jump} (прыжок), {close} (закрыть), {prevNext} (пред./след.)",
|
||
"paneTitle": "Панель",
|
||
"paneDesc": "Разделённая область внутри рабочего пространства. Создаётся разделением с помощью {right} (вправо) или {down} (вниз). Навигация между панелями: {nav} + стрелки.",
|
||
"paneNote": "Каждая панель может содержать несколько поверхностей (вкладок внутри панели).",
|
||
"surfaceTitle": "Поверхность",
|
||
"surfaceDesc": "Вкладка внутри панели. У каждой панели своя полоса вкладок и она может содержать несколько поверхностей. Создаётся через {new}, навигация через {prev} / {next} или {jump}.",
|
||
"surfaceNote": "Поверхности это отдельные сессии терминала или браузера, с которыми ты взаимодействуешь. У каждой поверхности своя переменная окружения CMUX_SURFACE_ID.",
|
||
"panelTitle": "Панель",
|
||
"panelDesc": "Содержимое внутри поверхности. Сейчас два типа:",
|
||
"panelTerminal": "Терминал: сессия терминала Ghostty",
|
||
"panelBrowser": "Браузер: встроенный веб-вид",
|
||
"panelNote": "Панель это в основном внутренняя концепция. В socket API и CLI ты взаимодействуешь с поверхностями, а не напрямую с панелями.",
|
||
"visualExample": "Визуальный пример",
|
||
"visualExampleDesc": "В этом примере:",
|
||
"visualItem1": "Окно содержит боковую панель с тремя рабочими пространствами (dev, server, logs)",
|
||
"visualItem2": "Рабочее пространство \"dev\" выбрано, показывает две панели рядом",
|
||
"visualItem3": "Панель 1 имеет две поверхности ([S1] и [S2] на полосе вкладок), с активной S1",
|
||
"visualItem4": "Панель 2 имеет одну поверхность",
|
||
"visualItem5": "Каждая поверхность содержит панель (в данном случае терминал)",
|
||
"summary": "Итого",
|
||
"levelHeader": "Уровень",
|
||
"whatItIsHeader": "Что это",
|
||
"createdByHeader": "Создаётся",
|
||
"identifiedByHeader": "Идентифицируется",
|
||
"macosWindow": "Окно macOS",
|
||
"sidebarEntry": "Элемент боковой панели",
|
||
"splitRegion": "Разделённая область",
|
||
"tabWithinPane": "Вкладка в панели",
|
||
"terminalOrBrowser": "Терминал или браузер",
|
||
"automatic": "Автоматически",
|
||
"paneIdSocket": "ID панели (socket API)",
|
||
"panelIdInternal": "ID панели (внутренний)",
|
||
"metaTitle": "Концепции"
|
||
},
|
||
"configuration": {
|
||
"title": "Конфигурация",
|
||
"metaDescription": "Настрой cmux через конфиг-файлы Ghostty. Шрифт, тема, цвета, стиль разделённых панелей, scrollback и настройки приложения для режима автоматизации.",
|
||
"intro": "cmux читает конфигурацию из конфиг-файлов Ghostty, предоставляя знакомые опции если ты переходишь с Ghostty.",
|
||
"configLocations": "Расположение конфиг-файлов",
|
||
"configLocationsDesc": "cmux ищет конфигурацию в этих расположениях (по порядку):",
|
||
"createConfig": "Создай конфиг-файл если он не существует:",
|
||
"appearance": "Внешний вид",
|
||
"font": "Шрифт",
|
||
"colors": "Цвета",
|
||
"splitPanes": "Разделённые панели",
|
||
"behavior": "Поведение",
|
||
"scrollback": "Scrollback",
|
||
"workingDirectory": "Рабочая директория",
|
||
"appSettings": "Настройки приложения",
|
||
"appSettingsDesc": "Настройки в приложении доступны через cmux > Settings ({shortcut}):",
|
||
"themeMode": "Режим темы",
|
||
"themeSystem": "Системный: следует за внешним видом macOS",
|
||
"themeLight": "Светлый: всегда светлая тема",
|
||
"themeDark": "Тёмный: всегда тёмная тема",
|
||
"automationMode": "Режим автоматизации",
|
||
"automationModeDesc": "Уровень доступа к сокету:",
|
||
"automationOff": "Выключен: нет управления через socket (самый безопасный)",
|
||
"automationCmux": "Только процессы cmux: только процессы, запущенные внутри терминалов cmux, могут подключаться",
|
||
"automationAll": "allowAll: любой локальный процесс может подключиться (CMUX_SOCKET_MODE=allowAll, только через переменную окружения)",
|
||
"automationCallout": "На общих машинах используй режим \"Выключен\" или \"Только процессы cmux\".",
|
||
"browserLinkBehavior": "Поведение ссылок браузера",
|
||
"browserLinkDesc": "В Настройки > Браузер, cmux предоставляет два списка хостов с разными целями:",
|
||
"browserHostsEmbed": "Хосты для открытия во встроенном браузере: применяется к ссылкам, нажатым в выводе терминала. Хосты из этого списка открываются в cmux; остальные хосты открываются в твоём браузере по умолчанию. Поддерживает один хост или wildcard на строку (например: 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": "Определяйте пользовательские команды и макеты рабочего пространства, добавив файл cmux.json в корень вашего проекта или ~/.config/cmux/. Команды отображаются в палитре команд.",
|
||
"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": "Листовой узел, содержащий одну или несколько поверхностей (вкладки внутри панели).",
|
||
"surfaceDefinition": "Определение поверхности",
|
||
"surfaceDefinitionDesc": "Каждая поверхность в панели может быть терминалом или браузером:",
|
||
"surfaceName": "Пользовательский заголовок вкладки",
|
||
"surfaceCommand": "Команда shell для автоматического запуска при создании (только терминал)",
|
||
"surfaceCwd": "Рабочий каталог для этой поверхности",
|
||
"surfaceEnv": "Переменные среды в виде пар ключ-значение",
|
||
"surfaceUrl": "URL для открытия (только браузер)",
|
||
"surfaceFocus": "Сфокусироваться на этой поверхности после создания",
|
||
"cwdResolution": "Определение рабочего каталога",
|
||
"omitted": "опущено",
|
||
"cwdRelative": "рабочий каталог рабочего пространства",
|
||
"cwdSubdir": "относительно рабочего каталога рабочего пространства",
|
||
"cwdHome": "расширено до домашнего каталога",
|
||
"absolutePath": "Абсолютный путь",
|
||
"cwdAbsolute": "используется как есть",
|
||
"fullExample": "Полный пример"
|
||
},
|
||
"keyboardShortcuts": {
|
||
"title": "Горячие клавиши",
|
||
"description": "Все горячие клавиши в cmux, сгруппированные по категориям.",
|
||
"metaDescription": "Все горячие клавиши cmux для рабочих пространств, поверхностей, разделённых панелей, браузера, уведомлений, поиска и управления окнами на macOS.",
|
||
"searchPlaceholder": "Поиск по горячим клавишам...",
|
||
"searchLabel": "Поиск горячих клавиш",
|
||
"noResults": "Горячие клавиши не найдены",
|
||
"noResultsHint": "Попробуйте другой запрос",
|
||
"cat": {
|
||
"workspaces": "Рабочие пространства",
|
||
"workspacesBlurb": "Рабочие пространства находятся на боковой панели. У каждого свой набор панелей и поверхностей.",
|
||
"surfaces": "Поверхности",
|
||
"surfacesBlurb": "Поверхности — это вкладки внутри панели.",
|
||
"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": "Новая поверхность",
|
||
"sf-prev-1": "Предыдущая поверхность",
|
||
"sf-prev-2": "Предыдущая поверхность",
|
||
"sf-jump-1-8": "Перейти к поверхности 1–8",
|
||
"sf-jump-last": "Перейти к последней поверхности",
|
||
"sf-close": "Закрыть поверхность",
|
||
"sp-right": "Разделить вправо",
|
||
"sp-down": "Разделить вниз",
|
||
"sp-focus": "Фокус на панель по направлению",
|
||
"sp-browser-right": "Разделить браузер вправо",
|
||
"sp-browser-down": "Разделить браузер вниз",
|
||
"br-open": "Открыть поверхность браузера",
|
||
"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": "Очистить scrollback",
|
||
"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": "Интерфейс настроек или CMUX_SOCKET_MODE=off",
|
||
"cmuxOnlyMode": "Только процессы, запущенные внутри терминалов cmux, могут подключаться.",
|
||
"cmuxOnlyEnable": "Режим по умолчанию в интерфейсе настроек",
|
||
"allowAllMode": "Любой локальный процесс может подключиться (без проверки происхождения).",
|
||
"allowAllEnable": "Только через переменную окружения: CMUX_SOCKET_MODE=allowAll",
|
||
"accessCallout": "На общих машинах используй Выключен или Только процессы cmux.",
|
||
"cliOptions": "Опции CLI",
|
||
"flagHeader": "Флаг",
|
||
"customSocketPath": "Пользовательский путь к сокету",
|
||
"outputJson": "Вывод в формате JSON",
|
||
"targetWindow": "Указать конкретное окно",
|
||
"targetWorkspace": "Указать конкретное рабочее пространство",
|
||
"targetSurface": "Указать конкретную поверхность",
|
||
"idFormat": "Формат идентификаторов в JSON-выводе",
|
||
"workspaceCommands": "Команды рабочих пространств",
|
||
"listWorkspacesDesc": "Список всех открытых рабочих пространств.",
|
||
"newWorkspaceDesc": "Создать новое рабочее пространство.",
|
||
"selectWorkspaceDesc": "Переключиться на конкретное рабочее пространство.",
|
||
"currentWorkspaceDesc": "Получить текущее активное рабочее пространство.",
|
||
"closeWorkspaceDesc": "Закрыть рабочее пространство.",
|
||
"splitCommands": "Команды разделения",
|
||
"newSplitDesc": "Создать новую разделённую панель. Направления: left, right, up, down.",
|
||
"listSurfacesDesc": "Список всех поверхностей в текущем рабочем пространстве.",
|
||
"focusSurfaceDesc": "Сфокусировать конкретную поверхность.",
|
||
"inputCommands": "Команды ввода",
|
||
"sendDesc": "Отправить текст в сфокусированный терминал.",
|
||
"sendKeyDesc": "Отправить нажатие клавиши. Клавиши: enter, tab, escape, backspace, delete, up, down, left, right.",
|
||
"sendSurfaceDesc": "Отправить текст в конкретную поверхность.",
|
||
"sendKeySurfaceDesc": "Отправить нажатие клавиши в конкретную поверхность.",
|
||
"notificationCommands": "Команды уведомлений",
|
||
"notifyDesc": "Отправить уведомление.",
|
||
"listNotificationsDesc": "Список всех уведомлений.",
|
||
"clearNotificationsDesc": "Очистить все уведомления.",
|
||
"sidebarMetadata": "Команды метаданных боковой панели",
|
||
"sidebarMetadataDesc": "Устанавливай значки статуса, прогресс-бары и записи лога на боковой панели для любого рабочего пространства. Полезно для скриптов сборки, CI-интеграций и AI-агентов, которые хотят показать состояние на одном взгляде.",
|
||
"setStatusDesc": "Установить значок статуса на боковой панели. Используй уникальный ключ, чтобы разные инструменты могли управлять своими записями.",
|
||
"clearStatusDesc": "Удалить запись статуса боковой панели по ключу.",
|
||
"listStatusDesc": "Список всех записей статуса боковой панели для рабочего пространства.",
|
||
"setProgressDesc": "Установить прогресс-бар на боковой панели (0.0 до 1.0).",
|
||
"clearProgressDesc": "Очистить прогресс-бар боковой панели.",
|
||
"logDesc": "Добавить запись лога на боковую панель. Уровни: info, progress, success, warning, error.",
|
||
"clearLogDesc": "Очистить все записи лога боковой панели.",
|
||
"listLogDesc": "Список записей лога боковой панели.",
|
||
"sidebarStateDesc": "Дамп всех метаданных боковой панели (cwd, ветка git, порты, статус, прогресс, логи).",
|
||
"utilityCommands": "Служебные команды",
|
||
"pingDesc": "Проверить работает ли cmux и отвечает.",
|
||
"capabilitiesDesc": "Список доступных методов сокета и текущего режима доступа.",
|
||
"identifyDesc": "Показать контекст сфокусированного окна/рабочего пространства/панели/поверхности.",
|
||
"envVariables": "Переменные окружения",
|
||
"variableHeader": "Переменная",
|
||
"socketPathDesc": "Переопределить путь к сокету для CLI и интеграций",
|
||
"socketEnableDesc": "Принудительно включить/отключить сокет (1/0, true/false, on/off)",
|
||
"socketModeDesc": "Переопределить режим доступа (cmuxOnly, allowAll, off). Также принимает cmux-only/cmux_only и allow-all/allow_all",
|
||
"workspaceIdDesc": "Устанавливается автоматически: ID текущего рабочего пространства",
|
||
"surfaceIdDesc": "Устанавливается автоматически: 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": "Отправляй десктопные уведомления из AI-агентов и скриптов в cmux. CLI, escape-последовательности OSC 99/777 и интеграция с Claude Code hooks.",
|
||
"intro": "cmux поддерживает десктопные уведомления, позволяя AI-агентам и скриптам оповещать тебя когда им нужно внимание.",
|
||
"lifecycle": "Жизненный цикл",
|
||
"received": "Получено: уведомление появляется в панели, десктопный алерт срабатывает (если не подавлен)",
|
||
"unread": "Непрочитанное: бейдж показан на вкладке рабочего пространства",
|
||
"read": "Прочитанное: убирается когда ты просматриваешь это рабочее пространство",
|
||
"cleared": "Очищено: удалено из панели",
|
||
"suppression": "Подавление",
|
||
"suppressionDesc": "Десктопные алерты подавляются когда:",
|
||
"suppressItem1": "Окно cmux сфокусировано",
|
||
"suppressItem2": "Конкретное рабочее пространство, отправляющее уведомление, активно",
|
||
"suppressItem3": "Панель уведомлений открыта",
|
||
"notificationPanel": "Панель уведомлений",
|
||
"notificationPanelDesc": "Нажми <openShortcut>⌘⇧I</openShortcut> чтобы открыть панель уведомлений. Кликни на уведомление чтобы перейти к этому рабочему пространству. Нажми <jumpShortcut>⌘⇧U</jumpShortcut> чтобы перейти напрямую к рабочему пространству с самым свежим непрочитанным уведомлением.",
|
||
"customCommand": "Пользовательская команда",
|
||
"customCommandDesc": "Запускай shell-команду каждый раз когда уведомление запланировано. Задай её в Настройки > Приложение > Команда уведомления. Команда запускается через /bin/sh -c с этими переменными окружения:",
|
||
"customCommandNote": "Команда работает независимо от системного выбора звуков. Установи выбор на \"Нет\" чтобы использовать только пользовательскую команду, или оставь оба для системного звука плюс пользовательского действия.",
|
||
"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 для простых уведомлений. Используй OSC 99 когда нужны подзаголовки или ID уведомлений. Используй CLI (cmux notify) для самой простой интеграции.",
|
||
"claudeCodeHooks": "Claude Code hooks",
|
||
"claudeCodeHooksDesc": "cmux интегрируется с <link>Claude Code</link> через hooks чтобы уведомлять тебя когда задачи завершаются.",
|
||
"createHookScript": "1. Создай скрипт хука",
|
||
"configureClaude": "2. Настрой Claude Code",
|
||
"restartNote": "Перезапусти Claude Code чтобы применить хуки.",
|
||
"copilotCliHooks": "GitHub Copilot CLI",
|
||
"copilotCliHooksDesc": "Copilot CLI поддерживает <link>хуки</link>, которые выполняют shell-команды при событиях жизненного цикла, таких как отправка промпта, остановка агента и ошибки.",
|
||
"copilotCliRepoHooks": "Для хуков на уровне репозитория создайте файл .github/hooks/notify.json с аналогичной структурой:",
|
||
"integrationExamples": "Примеры интеграций",
|
||
"notifyAfterLong": "Уведомление после долгой команды",
|
||
"python": "Python",
|
||
"nodejs": "Node.js",
|
||
"tmuxPassthrough": "tmux passthrough",
|
||
"tmuxDesc": "Если используешь tmux внутри cmux, включи passthrough:",
|
||
"metaTitle": "Уведомления"
|
||
},
|
||
"browserAutomation": {
|
||
"title": "Автоматизация браузера",
|
||
"metaDescription": "Справочник команд cmux browser для навигации, взаимодействия с DOM, ожидания, инспекции, выполнения JavaScript, вкладок, диалогов, фреймов, загрузок и состояния браузера.",
|
||
"intro": "Группа команд cmux browser предоставляет автоматизацию браузера над поверхностями браузера cmux. Используй для навигации, взаимодействия с DOM-элементами, инспекции состояния страницы, выполнения JavaScript и управления данными сессии браузера.",
|
||
"commandIndex": "Индекс команд",
|
||
"categoryHeader": "Категория",
|
||
"subcommandsHeader": "Подкоманды",
|
||
"navAndTargeting": "Навигация и таргетинг",
|
||
"waiting": "Ожидание",
|
||
"domInteraction": "Взаимодействие с DOM",
|
||
"inspection": "Инспекция",
|
||
"jsAndInjection": "JavaScript и инъекция",
|
||
"framesDialogsDownloads": "Фреймы, диалоги, загрузки",
|
||
"stateAndSession": "Состояние и данные сессии",
|
||
"tabsAndLogs": "Вкладки и логи",
|
||
"targetingSurface": "Указание поверхности браузера",
|
||
"targetingDesc": "Большинство подкоманд требуют целевую поверхность. Можно передать позиционно или через --surface.",
|
||
"navigation": "Навигация",
|
||
"waitingSection": "Ожидание",
|
||
"waitingDesc": "Используй wait для блокировки до выполнения условия: селекторы, текст, фрагменты URL, состояние загрузки или JavaScript-условие.",
|
||
"domSection": "Взаимодействие с DOM",
|
||
"domDesc": "Мутирующие действия поддерживают --snapshot-after для быстрой верификации в скриптах.",
|
||
"inspectionSection": "Инспекция",
|
||
"inspectionDesc": "Используй структурированные геттеры для скриптов и снапшоты/скриншоты для просмотра человеком.",
|
||
"jsSection": "Выполнение и инъекция JavaScript",
|
||
"stateSection": "Состояние",
|
||
"stateDesc": "Команды данных сессии покрывают куки, локальное/сессионное хранилище и полные снапшоты состояния браузера.",
|
||
"tabsSection": "Вкладки",
|
||
"tabsDesc": "Операции с вкладками браузера отображаются на поверхности браузера в активной группе вкладок.",
|
||
"consoleSection": "Консоль и ошибки",
|
||
"dialogsSection": "Диалоги",
|
||
"framesSection": "Фреймы",
|
||
"downloadsSection": "Загрузки",
|
||
"commonPatterns": "Типичные паттерны",
|
||
"patternNavigate": "Навигация, ожидание, инспекция",
|
||
"patternForm": "Заполнение формы и проверка текста успеха",
|
||
"patternDebug": "Захват debug-артефактов при ошибке",
|
||
"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 с вертикальными вкладками, лучшей организацией/уведомлениями, встроенным/скриптуемым браузером, специально для тех, кто активно использует агентские workflow из терминала.",
|
||
"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 и ресурсами с другой, переключаюсь между задачами и остаюсь организованным. Сочетай это со скиллами чтобы 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": "Скачать NIGHTLY для Mac",
|
||
"warning": "Ночные сборки могут содержать ошибки или незавершённые функции. Если что-то сломалось, сообщите на <githubLink>GitHub</githubLink> или в <discordLink>#nightly-bugs в Discord</discordLink> и переключитесь на стабильную версию."
|
||
},
|
||
"languageSwitcher": {
|
||
"label": "Язык"
|
||
}
|
||
}
|