dsh-composer-plus 1.22.0 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ru.md CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  <p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness с Composer Plus: у работающего проекта на боковой панели крутится индикатор, а панель изменений показывает git diff"></p>
16
16
 
17
- Неофициальный плагин сообщества. Сетевые запросы плагин делает только для проверки обновлений (выпуски GitHub и реестр npm). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Предсказание следующего сообщения** (по умолчанию включено) обращается к модели, выбранной в настройках (по умолчанию это модель dsh, если вы не выберете другую), один раз после каждого завершённого хода, без нажатия. Чтобы остановить эти запросы, выключите его в **Настройки → Composer Plus**. **Дополнение при вводе** (по умолчанию выключено) после включения обращается к выбранной для него модели (по умолчанию это модель предсказания) при каждой паузе в наборе. **Улучшить промпт** обращается к модели, только когда вы нажимаете волшебную палочку. **Доска задач** обращается к модели нового чата один раз для тегов каждой задачи, которую вы начинаете на доске. В режиме **Сводка ИИ** (по умолчанию **Быстро (без ИИ)**) она также обращается к модели работающего чата за короткой заметкой о ходе работы, пока вы смотрите ход этой задачи на доске или в Tether. **Проверка цели** (по умолчанию включена) обращается к модели один раз каждый раз, когда агент в автоматическом раунде отмечает `/goal` как выполненную. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
17
+ Неофициальный плагин сообщества. Проверка обновлений делает сетевые запросы (выпуски GitHub и реестр npm). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Пакет навыка для турецкого** (включён по умолчанию) загружает turkish-anti-ai-skill с GitHub и раз в день проверяет новую версию, только пока **Язык приложения** — Türkçe; выключите его в **Настройки → Composer Plus**, чтобы остановить эти запросы. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Предсказание следующего сообщения** (по умолчанию включено) обращается к модели, выбранной в настройках (по умолчанию это модель dsh, если вы не выберете другую), один раз после каждого завершённого хода, без нажатия. Чтобы остановить эти запросы, выключите его в **Настройки → Composer Plus**. **Дополнение при вводе** (по умолчанию выключено) после включения обращается к выбранной для него модели (по умолчанию это модель предсказания) при каждой паузе в наборе. **Улучшить промпт** обращается к модели, только когда вы нажимаете волшебную палочку. **Доска задач** обращается к модели нового чата один раз для тегов каждой задачи, которую вы начинаете на доске. В режиме **Сводка ИИ** (по умолчанию **Быстро (без ИИ)**) она также обращается к модели работающего чата за короткой заметкой о ходе работы, пока вы смотрите ход этой задачи на доске или в Tether. **Проверка цели** (по умолчанию включена) обращается к модели один раз каждый раз, когда агент в автоматическом раунде отмечает `/goal` как выполненную. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
18
18
 
19
19
  ## Установка
20
20
 
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
29
29
 
30
30
  Затем перезапустите dsh. (CLI не может устанавливать плагины в профиль настольного приложения: им управляет само приложение.)
31
31
 
32
- > pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.22.0`.
32
+ > pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.23.0`.
33
33
 
34
34
  ## Функции
35
35
 
@@ -48,6 +48,7 @@ dsh plugin --profile web add dsh-composer-plus
48
48
  | **Сохранять фокус в поле ввода** | <a id="feature-keepfocus"></a>После отправки команды `/` или навыка курсор остаётся в поле ввода, и можно сразу печатать дальше. Это работает и для клавиатурных макросов, которые вводят команду и нажимают `Enter`. Пока dsh обрабатывает команду, поле ввода доступно только для чтения, и браузер снимает с него фокус. Эта функция возвращает фокус, если он не занят меню, диалогом или другим полем. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Снимок экрана: Сохранять фокус в поле ввода"></a> |
49
49
  | **Подгонять карточку вопроса под окно** | <a id="feature-questionfit"></a>Когда агент задаёт вам вопрос, вопрос и ответы прокручиваются в карточке вместе, а **Пропустить** и **Отправить** остаются видны внизу. Карточка занимает высоту окна (минус 200 px на заголовок чата и полосу чата), поэтому растёт и уменьшается вместе с окном. Без этой функции dsh ограничивает карточку 60% окна (не больше 520 px) и прокручивает только ответы: длинный вопрос может вытолкнуть из карточки свой конец, ответы и кнопки. | <a href="assets/features/questionFit.webp"><img src="assets/features/questionFit.webp" width="160" alt="Снимок экрана: Подгонять карточку вопроса под окно"></a> |
50
50
  | **Подогнать заголовок чата под окно** | <a id="feature-headerfit"></a>В узком окне кнопки в заголовке чата dsh (режим, субагенты, фоновые задачи, Открыть в, метка ветки и метка разрешений) больше не перекрывают друг друга. Название чата сохраняет не меньше 120 px; кнопки, которые не помещаются, переходят на вторую строку справа, и каждая остаётся кликабельной. Когда всё помещается в одну строку (широкое окно), заголовок точно такой же, как у dsh. Без этой функции dsh сжимает только название: при субагенте и фоновых задачах его кнопки наезжают друг на друга в узкой колонке чата. Метка ветки (**Ветка для каждого чата**) и метка разрешений (**Разрешить для этого чата**) подстраиваются под заголовок и при выключенном переключателе. | <a href="assets/features/headerFit.webp"><img src="assets/features/headerFit.webp" width="160" alt="Снимок экрана: Подогнать заголовок чата под окно"></a> |
51
+ | **Запоминать размер окна** | <a id="feature-windowsize"></a>Настольное приложение dsh при каждом запуске открывает окно размером 1280 × 820. С этой функцией окно открывается с тем размером и положением, которые были в прошлый раз. Размер сохраняется каждый раз, когда вы меняете размер окна или перемещаете его, и возвращается при следующем запуске, когда загружается плагин. Полноэкранное или свёрнутое окно не сохраняется; положение на экране, который сейчас не подключён, переносится на основной экран. Только в настольном приложении: вкладка браузера не может менять размер своего окна. | <a href="assets/features/windowSize.webp"><img src="assets/features/windowSize.webp" width="160" alt="Снимок экрана: Запоминать размер окна"></a> |
51
52
  | **Продолжение в один клик** | <a id="feature-continuebutton"></a>После остановленного, завершившегося сбоем или оборванного хода в пустом поле ввода появляется **▶**. Один щелчок продолжает работу с текущего разговора. Ничего не нужно писать в поле ввода, и в чате не появляется новое сообщение. (Модель получает короткую скрытую заметку «продолжи с того места, где остановился», потому что некоторые провайдеры, например Claude, отклоняют запрос, который заканчивается ответом ассистента.) Сообщения в очереди остаются в ней: ▶ продолжает только остановленную задачу, а потом выполняется очередь. После завершённого хода остаётся обычная кнопка отправки. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Снимок экрана: Продолжение в один клик"></a> |
52
53
  | **Продолжать после перезапуска** | <a id="feature-resumeafterrestart"></a>По умолчанию выключено: включите функцию в **Настройки → Composer Plus**. Если выйти из dsh (или он закроется), пока чат работает, этот чат сам продолжит работу, когда вы снова откроете dsh. Он получает ту же скрытую заметку, что и при продолжении в один клик. Если выполнялся раунд цели (`/goal`), цель продолжается со следующего раунда (при каждом запуске dsh приостанавливает цели, пока вы их не возобновите). Чаты, которые вы остановили, которые завершились или завершились сбоем, не продолжаются. В самом dsh такой настройки нет: он только помечает такой ход как прерванный. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Снимок экрана: Продолжать после перезапуска"></a> |
53
54
  | **Перетаскивание в очереди** | <a id="feature-queuereorder"></a>У сообщений в очереди появляется маркер (⠿). Перетащите его, чтобы изменить порядок, или переведите на него фокус и нажмите `↑` / `↓`. `Esc` отменяет перемещение. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Снимок экрана: Перетаскивание в очереди"></a> |
@@ -69,6 +70,8 @@ dsh plugin --profile web add dsh-composer-plus
69
70
  | **Продолжить в новом чате** | <a id="feature-handoffchat"></a>Правый щелчок по чату на боковой панели (или его меню **…**) → **Продолжить в новом чате…**. Один вызов собственной модели чата пишет заметку для передачи по тому, что показывает чат: Задача, Результаты, Сделано, Решения, Открытые вопросы и Следующий шаг (вызовы инструментов и их результаты служат доказательствами; шаги, которые вы откатили, не учитываются). Заметка открывается в диалоге: прочитайте и отредактируйте её. **Написать заново** пишет новую заметку. **Начать новый чат** (или `Cmd/Ctrl+Enter`) открывает новый чат в том же проекте; его первое сообщение — заметка и ссылка на старый чат. Старый чат остаётся как есть. Используйте функцию, когда длинный чат заполнен или работает медленно, или чтобы продолжить завтра. В проект ничего не записывается. | <a href="assets/features/handoffChat.webp"><img src="assets/features/handoffChat.webp" width="160" alt="Снимок экрана: Продолжить в новом чате"></a> |
70
71
  | **Состав контекста** | <a id="feature-contextbreakdown"></a>Правая боковая панель → `+` → **Контекст**. Страница показывает, что сейчас заполняет контекст модели открытого чата и какую часть контекстного окна это занимает: системный промпт, инструкции проекта (AGENTS.md), навыки, ваши сообщения, ответы агента и вызовы инструментов, результаты инструментов (по инструментам), результаты MCP (по серверам), определения инструментов, сводку сжатия и другие заметки контекста — для каждого число токенов и доля. Нажмите на часть, чтобы увидеть её инструменты или серверы. Страница читает только журнал чата, после `/compact` и откатов, и не вызывает модель; она перечитывает его после каждого хода и по кнопке **Обновить**. Используйте её, чтобы понять, почему чат медленный или заполнен, например из-за большого результата инструмента MCP или множества определений инструментов. | <a href="assets/features/contextBreakdown.webp"><img src="assets/features/contextBreakdown.webp" width="160" alt="Снимок экрана: Состав контекста"></a> |
71
72
  | **Запланированные шаги** | <a id="feature-plannedsteps"></a>По умолчанию выключено: включите функцию в **Настройки → Composer Plus**. Агент получает инструмент `plan_next_steps`: в том же сообщении, что и команда, он может спланировать следующие команды с точными аргументами и условием, например «запусти `npm test`, если сборка прошла». Когда результат выполняет условие, Composer Plus сам запускает следующий шаг без нового вызова модели, и длинный чат расходует меньше токенов. Шаг видно в чате как короткую строку «Composer Plus · Planned steps: ran `test` … without a model call», за ней идут вызов инструмента и результат. Только шаги `bash`, `read`, `grep` и `glob`; подтверждения, песочница и «Защищённые файлы» действуют на каждый шаг как обычно. Модель отвечает снова, когда условие не выполнено, когда два шага готовы одновременно, после последнего шага и когда вы отправляете сообщение. Идея взята из HarnessMM (arXiv 2610.32813). | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Снимок экрана: Запланированные шаги"></a> |
73
+ | **Пакет навыка для турецкого** | <a id="feature-turkishskill"></a>Только пока **Язык приложения** — Türkçe (включено по умолчанию; выключите в **Настройки → Composer Plus**). Composer Plus загружает с GitHub навык с открытым кодом [turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) (MIT, автор Yüce Zerey) и добавляет его в навыки dsh. Попросите агента очеловечить, переписать или написать текст на турецком: dsh загружает навык, и его правила помогают агенту писать естественный турецкий без шаблонов ИИ. Сохраняются только файлы Markdown пакета; каждый файл должен совпадать со списком файлов GitHub, и ни один скрипт пакета не запускается. Раз в день плагин спрашивает GitHub о новой версии и устанавливает её. Строка показывает установленную версию или причину, по которой она не установлена. На другом языке навык не устанавливается; верните язык Türkçe, и он вернётся. | <a href="assets/features/turkishSkill.webp"><img src="assets/features/turkishSkill.webp" width="160" alt="Снимок экрана: Пакет навыка для турецкого"></a> |
74
+ | **Распутать кодовую базу** | <a id="feature-untanglecodebase"></a>Включено по умолчанию; выключить можно в **Настройки → Composer Plus**. Добавляет в список навыков dsh навык `/untangle-codebase` из [caldoai/skills](https://github.com/caldoai/skills) (MIT, © 2026 Maze). Введите в чате `/untangle-codebase` (навык есть в меню `/`), при желании с областью, на которой нужно сосредоточиться, например `/untangle-codebase src/api`, и отправьте. Сначала агент спрашивает, удалять ли также комментарии, которые лишь повторяют код, и тесты, которые не могут поймать настоящую ошибку. Затем он перечисляет все копии, скрытые и лишние связи, обёртки, которые только передают вызов, мёртвый код и разовые особые случаи, планирует исправления с нуля, выполняет их как цель и проверяет снова с помощью субагентов, пока не останется ничего, что стоит исправлять. Запустить навык можете только вы: модель не видит его в своём списке навыков, поэтому в других чатах он не тратит токены. Навык с тем же именем в проекте или в `~/.dsh/skills` имеет приоритет. Запускайте его в чате функции **Ветка для каждого чата** и проверяйте результат в **Панель изменений**. В Tether: введите `/untangle-codebase` в поле сообщения. | <a href="assets/features/untangleCodebase.webp"><img src="assets/features/untangleCodebase.webp" width="160" alt="Снимок экрана: Распутать кодовую базу"></a> |
72
75
  | **Защищённые файлы** | <a id="feature-protectedfiles"></a>Включено по умолчанию. Собственные файловые инструменты агента не могут читать или изменять файлы, подходящие под ваши шаблоны: `read`, `read_image` и `grep` по файлу отклоняются для шаблонов **чтение и запись**, а `write`, `edit` и `str_replace_editor` — для обоих видов. Агент читает причину, и ему предлагается спросить вас. Шаблоны по умолчанию: `.env*`, `*.pem` и `*.key`. Настройки → Composer Plus → **Защищённые файлы**: добавьте шаблон (например, `published/**` или `config/*.yml`), нажмите на его вид, чтобы переключить между **чтение и запись** и **только запись**, удалите его кнопкой ✕ или нажмите **Использовать значения по умолчанию**. Шаблон без `/` подходит к имени файла в любой папке. Это ограждение, а не песочница: команда оболочки (`cat .env`), скрипт или инструмент MCP всё равно могут добраться до файла (см. «Ограничения»). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Снимок экрана: Защищённые файлы"></a> |
73
76
  | **Заблокированные команды** | <a id="feature-blockedcommands"></a>Включено по умолчанию, список изначально пуст. Команды оболочки агента (`bash`, `pwsh`) не могут запустить команду, подходящую под ваши правила: правило **блокировать** отклоняет вызов (агент читает причину, и ему предлагается спросить вас), правило **сначала спросить** показывает карточку одобрения dsh, и команда запускается, только когда вы её разрешите. Настройки → Composer Plus → **Заблокированные команды**: введите правило (например, `npm publish`, `git push --force` или `ssh *192.168.2.19`), нажмите на вид, чтобы переключить между **блокировать** и **сначала спросить**, затем нажмите **Добавить**; нажмите на вид правила, чтобы изменить его, удалите правило кнопкой ✕. Правило — это имя команды и слова, которые должны идти после него в этом порядке; `*` подходит к любому тексту. Функция также находит команду после `&&`, `;`, `\|`, внутри `$(…)`, `bash -c "…"` или `eval`, а также после `sudo` или `env`. Это ограждение, а не песочница: переменная (`$CMD`), файл скрипта или другая программа всё равно могут запустить команду (см. «Ограничения»). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Снимок экрана: Заблокированные команды"></a> |
74
77
  | **Доска задач** | <a id="feature-taskboard"></a>Левая боковая панель → **Доска задач** или `Cmd+Shift+K` (`Ctrl+Shift+K` в Windows и Linux) в любом месте dsh. Канбан-доска ваших чатов dsh с тем же живым состоянием, что показывает боковая панель: чат, который ждёт вашего одобрения, ответа или проверки плана, находится в **На проверке** с оранжевой точкой, работающий чат — в **В работе**, завершённый чат, который вы ещё не открыли, — в **Готово** (зелёный). Когда вы открываете чат, его карточка сама уходит из **Готово**; нажмите **Недавно завершённые (N)** под зелёными карточками, чтобы увидеть прочитанные завершённые чаты (10 самых новых, затем **Показать более старые: N**; открыто или закрыто — запоминается на этом устройстве). Чат, который завершился, пока был открыт за доской (**Новая задача**), остаётся зелёным, пока вы его не откроете. Нажмите на название проекта вверху доски, чтобы открыть список проектов, и выберите проект или **Все проекты**; папка ветки для каждого чата считается частью своего проекта. Список закрывается после выбора, по `Esc` или по щелчку вне его. Введите текст в **Поиск проектов** вверху списка, чтобы найти проект по названию (регистр и диакритические знаки не важны; `Esc` очищает поле), нажмите `Enter`, чтобы выбрать первое совпадение, и нажмите **Активные за последние 2 часа**, чтобы показать только проекты с чатом, который ждёт, работает, завершился и ещё не просмотрен или изменился за последние 2 часа (настройка хранится на этом устройстве). **Новая задача** (или `n`) открывает собственный новый чат dsh в проекте, который показывает доска (при **Все проекты** — в проекте, который выбирает «Новый сеанс» dsh), поэтому вы можете добавлять файлы, использовать команды и выбирать модель, как в любом чате. Когда ваше первое сообщение отправлено, доска возвращается сама. До этого чат ждёт в самом верху столбца **В работе** как **Новая задача**: нажмите на него, чтобы написать первое сообщение. У проекта с чатом, который ждёт вас, в списке проектов есть оранжевая точка (пока какой-либо чат ждёт, она есть и у названия проекта вверху). dsh даёт чату название, а модель чата пишет до 3 тегов по этому сообщению. Нажмите на карточку, чтобы открыть её чат. Нажмите на оранжевую карточку (или на её **Ответить**), чтобы ответить прямо на доске; в панели есть **Открыть чат**, чтобы увидеть весь чат: **Отклонить** или **Разрешить один раз**, **Одобрить** или **Запросить изменения** для плана, либо варианты и ваш собственный текст для вопроса. Нажмите **×** на завершённой карточке, чтобы убрать её с доски, или откройте **Недавно завершённые** и нажмите **Очистить всё** вверху столбца **Готово**, чтобы убрать эти карточки с доски: сначала окно показывает, сколько карточек какого проекта уйдёт, а непрочитанные (зелёные) карточки остаются. В течение 8 секунд после этого кнопка **Отменить** возвращает карточки; **Убранные (N)** под столбцом **Готово** показывает список карточек, убранных с доски, а **Вернуть на доску** снова показывает одну из них в **Готово**. Ни один чат не удаляется: чаты остаются на боковой панели dsh, доска помнит это и после перезапуска (Tether показывает ту же доску), а чат, который снова запускается, возвращается на доску. Наведите указатель на карточку в **В работе** (или переведите на неё фокус клавиатуры), чтобы увидеть ход работы: сколько времени работает чат, шаг его списка задач, инструмент, который работает сейчас, и последнюю строку агента. В разделе Настройки → Composer Plus → Доска задач параметр **Ход работы при наведении** выбирает **Быстро (без ИИ)** (по умолчанию: только читает чат) или **Сводка ИИ** (один короткий вызов модели чата дополнительно пишет одно-два предложения). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Снимок экрана: Доска задач"></a> |
@@ -84,6 +87,7 @@ dsh plugin --profile web add dsh-composer-plus
84
87
  | **Отклонить с примечанием** | <a id="feature-rejectnote"></a>На карточке подтверждения рядом с **Отклонить** появляется **Отклонить с примечанием…**. Нажмите её, напишите причину или что сделать вместо этого и нажмите **Отклонить** (или `Enter`; `Shift+Enter` добавляет строку, `Esc` закрывает поле). Сначала примечание уходит агенту как сообщение в ожидающий ход, затем запрос отклоняется: модель читает отказ и ваше примечание в том же ходе, без отдельного сообщения от вас. Если примечание не удалось отправить, ничего не отклоняется и поле остаётся открытым. В Tether: лист подтверждения → Reject with note. | <a href="assets/features/rejectNote.webp"><img src="assets/features/rejectNote.webp" width="160" alt="Снимок экрана: Отклонить с примечанием"></a> |
85
88
  | **Ввод секрета** | <a id="feature-secretinput"></a>Агент получает инструмент `request_secret`. Когда ему нужен пароль, токен или ключ API, он запрашивает его этим инструментом, а не в чате: в строке инструмента появляется карточка с названием, причиной, полем пароля и кнопками **Сохранить** и **Отклонить**. **Сохранить** записывает значение в файл на этом Mac, который можете читать только вы, а агент получает только путь к файлу и использует его как входные данные команды (например, `"$(cat <path>)"`). Если позже результат инструмента покажет значение, `[secret]` заменит его до того, как его увидит модель. Файл удаляется в конце хода. **Отклонить** сообщает агенту, что вы не дали значение. Выключите функцию в **Настройки → Composer Plus**, чтобы убрать инструмент. В Tether: полоса «Secret: …» над полем ввода → Enter. | <a href="assets/features/secretInput.webp"><img src="assets/features/secretInput.webp" width="160" alt="Снимок экрана: Ввод секрета"></a> |
86
89
  | **Цитата в ответе** | <a id="feature-quotereply"></a>Выделите часть ответа: над выделением появится кнопка **Цитировать**. Нажмите её: эта часть попадёт в поле ввода, в позицию курсора, как цитата Markdown (`> …`) с пустой строкой после неё, а поле ввода получит фокус, и вы напишете ответ ниже. Учитывается только текст ответа, а не рассуждения, строки инструментов или ваши собственные сообщения. Цитата содержит не больше 2 000 символов. `Cmd+Z` (`Ctrl+Z`) убирает её. В Tether: нажмите и удерживайте ответ → Quote (весь ответ). | <a href="assets/features/quoteReply.webp"><img src="assets/features/quoteReply.webp" width="160" alt="Снимок экрана: Цитата в ответе"></a> |
90
+ | **Цитата из предпросмотра файла** | <a id="feature-previewquote"></a>Откройте файл на правой боковой панели (**Файлы рабочей области** или файл, который открыл чат) и выделите в нём строки: над выделением появится кнопка **Цитировать**. Нажмите её: путь к файлу, номера строк и сами строки попадут в поле ввода, в позицию курсора, чтобы агент знал, какую часть вы имеете в виду, а поле ввода получит фокус. Файлы кода и текстовые файлы дают `src/login.js:2-3` и строки как блок кода; файлы Markdown и PDF дают путь (для PDF ещё и страницу, `docs/spec.pdf#page=3`) и цитату `> …`. Путь внутри папки чата относительный. Не больше 2 000 символов. `Cmd+Z` (`Ctrl+Z`) убирает вставку. В Tether этой функции нет. | <a href="assets/features/previewQuote.webp"><img src="assets/features/previewQuote.webp" width="160" alt="Снимок экрана: Цитата из предпросмотра файла"></a> |
87
91
  | **Побочный чат** | <a id="feature-sidechat"></a>Напишите побочный вопрос в поле ввода и нажмите кнопку с облачками (**Спросить в побочном чате**): откроется копия чата, которая ответит в режиме только чтения dsh, а чат продолжит работу. Копия знает чат до текущего момента, кроме сообщений, которые ещё ждут в очереди, и использует его модель. На панели над её полем ввода есть **Вернуть**: откроется чат, и в его поле ввода попадут ваши вопросы (как цитаты `> `) и ответы. **Назад в чат** только открывает чат. Побочный чат остаётся на боковой панели как «↳ <вопрос>»; архивируйте его там. В Tether: меню заголовка чата → Side chat…. | <a href="assets/features/sideChat.webp"><img src="assets/features/sideChat.webp" width="160" alt="Снимок экрана: Побочный чат"></a> |
88
92
  | **Заметки к diff** | <a id="feature-diffcomments"></a>В разделе **Панель изменений** откройте diff файла и нажмите **+** у строки (Shift+щелчок по второй строке того же блока — диапазон), напишите заметку и нажмите **Сохранить заметку**. Заметки чата ждут на панели сверху; **Отправить в поле ввода** помещает их в позицию курсора в формате Markdown: `path:12-14`, строки как блок `diff` и ваша заметка. **Очистить** удаляет их. Заметки хранятся в этом браузере, пока вы их не отправите или не очистите. Нужна **Панель изменений**. В Tether: diff файла → удерживайте строку → Add note…. | <a href="assets/features/diffComments.webp"><img src="assets/features/diffComments.webp" width="160" alt="Снимок экрана: Заметки к diff"></a> |
89
93
  | **Статус проекта** | <a id="feature-projectstatus"></a>Строка проекта на боковой панели показывает ту же метку, что и его чаты: индикатор выполнения, ожидание или «готово». Поэтому даже свёрнутый проект сообщает, что чат внутри работает или ждёт вас. Сначала показывается чат, который ждёт вас, затем завершённый чат, который вы ещё не открыли (зелёная точка, даже пока другой чат ещё выполняется), затем индикатор выполнения. Наведите на метку указатель, чтобы увидеть подробности. В режиме **Дерево рабочих областей** строка родительской папки также показывает чаты каждого проекта внутри неё (например, каждой папки ветки в `.worktrees/`), даже когда папка свёрнута. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Снимок экрана: Статус проекта"></a> |
@@ -95,12 +99,14 @@ dsh plugin --profile web add dsh-composer-plus
95
99
  | **Сортировка по состоянию** | <a id="feature-statusorder"></a>Боковая панель → параметры просмотра → **Сортировать** → **По состоянию** (вместе с **Одним списком**). Сначала идут завершённые чаты (с точкой dsh «готово»; её получает и ход, который закончился ошибкой), затем выполняющиеся или ожидающие чаты, затем чаты с активной автоматизацией (расписанием), затем остальные в порядке dsh. Когда вы открываете завершённый чат, он опускается ниже. Меняется только вид: чтобы вернуться, выберите **Вручную** или **По дате изменения**. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Снимок экрана: Сортировка по состоянию"></a> |
96
100
  | **Фоновые уведомления** | <a id="feature-notifications"></a>Пока dsh работает в фоне, вы получаете уведомление, когда ход завершён (первая строка ответа) или когда чат действительно ждёт вас: одобрения (имя инструмента), ответа (сам вопрос) или проверки плана. Запрос должен оставаться открытым и через 1,5 с. Поэтому одобрения, на которые ответили автоматически (разрешения автопроверки, другие плагины), не вызывают уведомлений. Уведомление убирается, как только на его запрос ответили. Значок в Dock или на панели задач показывает число ожидающих чатов. Щелчок по уведомлению открывает этот чат. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Снимок экрана: Фоновые уведомления"></a> |
97
101
  | **Открывать ожидающий чат при бездействии** | <a id="feature-idleswitch"></a>Когда чат задаёт вопрос, ждёт одобрения или проверки плана (оранжевая точка) или завершает ход, который вы ещё не прочитали (зелёная точка), а вы не пользуетесь dsh 30 секунд, dsh открывает этот чат. Оранжевые чаты открываются раньше зелёных. В каждой группе первым открывается тот, что ждёт дольше всех; следующий открывается ещё через 30 секунд бездействия. Нажатие клавиши, щелчок, движение мыши, колесо прокрутки или касание запускают отсчёт 30 секунд заново. Текст в поле с фокусом, выделенный текст или открытое меню либо диалог тоже не дают переключиться. Пока ожидающий чат на экране, ничего не меняется. Если вы ушли из ожидающего чата, не ответив, он может открыться снова после следующих 30 секунд бездействия. Когда открывается зелёный чат, его точка исчезает; следующий зелёный чат откроется только после того, как вы снова воспользуетесь dsh, а затем 30 секунд не будете им пользоваться. Функция работает и когда dsh в фоне, но окно dsh не выходит на передний план. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Снимок экрана: Открывать ожидающий чат при бездействии"></a> |
98
- | **Следующий ожидающий чат** | <a id="feature-nextwaiting"></a>Кнопка в заголовке боковой панели показывает, сколько других чатов ждут вас, и точку цвета следующего чата: оранжевую, когда он задаёт вопрос или ждёт одобрения или проверки плана, зелёную, когда он завершил ход, который вы ещё не прочитали. Нажмите на кнопку или нажмите Cmd+Shift+E (Ctrl+Shift+E в Windows и Linux), чтобы открыть этот чат. Оранжевые чаты идут раньше зелёных; в каждой группе первым идёт чат, который ждёт дольше всех. Чат на экране не считается. Если других ожидающих чатов нет, кнопка не видна, а клавиша ничего не делает. Клавишу можно изменить на странице сочетаний клавиш dsh (Следующий ожидающий чат). | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="Снимок экрана: Следующий ожидающий чат"></a> |
102
+ | **Следующий ожидающий чат** | <a id="feature-nextwaiting"></a>Кнопка в заголовке боковой панели показывает, сколько других чатов ждут вас, и точку цвета следующего чата: оранжевую, когда он задаёт вопрос или ждёт одобрения или проверки плана, зелёную, когда он завершил ход, который вы ещё не прочитали. Нажмите на кнопку или нажмите Cmd+Shift+E (Ctrl+Shift+E в Windows и Linux), чтобы открыть этот чат. Нажатие на кнопку также находит чат на боковой панели: свёрнутый проект открывается, список прокручивается к чату, и чат мигает 5 секунд. Оранжевые чаты идут раньше зелёных; в каждой группе первым идёт чат, который ждёт дольше всех. Чат на экране не считается. Если других ожидающих чатов нет, кнопка не видна, а клавиша ничего не делает. Клавишу можно изменить на странице сочетаний клавиш dsh (Следующий ожидающий чат). | <a href="assets/features/nextWaiting.webp"><img src="assets/features/nextWaiting.webp" width="160" alt="Снимок экрана: Следующий ожидающий чат"></a> |
99
103
  | **Кнопки вариантов** | <a id="feature-optionpicks"></a>Когда ответ заканчивается списком вариантов (нумерованный список из 1–9 пунктов под заголовком «Варианты» или жирной строкой «Варианты», а также «Следующие шаги» и те же слова на языках приложения), под ответом появляется кнопка для каждого варианта. Нажатие отправляет «Option N: …» с полным текстом варианта как ваше сообщение, как будто вы его напечатали. Вариант с пометкой «(рекомендуется)» выделен. Кнопки появляются только под самым новым ответом, пока чат простаивает и поле сообщения пусто; у уже выбранного ответа и у ответа, отозванного откатом, кнопок нет. Пока кнопки видны, прогноз следующего сообщения ничего не предлагает. На карточке вопроса агента клавиши 1–9 выбирают этот вариант, как нажатие (не в поле ответа и не в первые 0,8 секунды после появления вопроса). | <a href="assets/features/optionPicks.webp"><img src="assets/features/optionPicks.webp" width="160" alt="Снимок экрана: Кнопки вариантов"></a> |
100
104
  | **Язык приложения** | <a id="feature-language"></a>Настройки → Composer Plus → **Язык приложения** переключает весь интерфейс dsh на Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt или हिन्दी (см. ниже). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Снимок экрана: Язык приложения"></a> |
101
105
  | **Мобильное подключение (iPhone)** | <a id="feature-mobileconnect"></a>Работайте с dsh на iPhone через приложение [Tether](tether/) в той же сети Wi-Fi или через [Tailscale](https://tailscale.com). Включите функцию в **Настройки → Composer Plus** (по умолчанию она выключена, потому что открывает сетевой порт на этом Mac). Затем нажмите **Мобильное подключение** внизу слева на боковой панели, отсканируйте QR-код камерой iPhone (коснитесь **Open in Tether**) или кнопкой **Scan code** в Tether, коснитесь **Connect** и нажмите **Approve**. Сначала установите Tether: без него камера не сможет открыть код. Телефон показывает ваши чаты, отправляет сообщения (с фото: **+** в поле ввода → Camera, Photos или Paste image), отвечает на запросы одобрения и вопросы, переключает модели и агентов. Можно связать сколько угодно Mac: имя Mac вверху слева в приложении переключает между ними. Панель **Мобильное подключение** показывает связанные iPhone и время их последнего подключения: **Remove** сразу отключает любой из них. «Tailscale only» отклоняет подключения из локальной сети (для общей сети Wi-Fi), а журнал доступа показывает, кто пытался подключиться. В Tether «Settings → Privacy» блокирует приложение с помощью Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Снимок экрана: Мобильное подключение (iPhone)"></a> |
102
- | **Удалённые компьютеры** | <a id="feature-remotecomputers"></a>Открывайте dsh на других ваших Mac через [Tailscale](https://tailscale.com) и продолжайте их чаты здесь. Включите функцию в **Настройки → Composer Plus** на каждом Mac (по умолчанию она выключена, потому что открывает сетевые порты). На Mac, который вы хотите открыть, включите **Разрешить другим компьютерам открывать этот Mac**, нажмите **Создать ссылку для сопряжения** и скопируйте ссылку. На этом Mac выберите **Добавить компьютер…** в меню выбора компьютера слева от заголовка чата, вставьте ссылку и нажмите **Подключить**. Затем нажмите **Одобрить** на другом Mac. После этого меню показывает **Этот Mac** и ваши компьютеры. Выберите компьютер, и его dsh откроется на вкладке «Браузер» правой боковой панели (или в окне браузера) со своими чатами, инструментами и файлами. Панель настроек переименовывает и удаляет компьютеры и показывает компьютеры, которые могут открывать этот Mac (**Удалить** сразу отключает любой из них). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Снимок экрана: Удалённые компьютеры"></a> |
103
- | **Автоматические обновления** | <a id="feature-autoupdate"></a>При запуске dsh плагин проверяет [последний выпуск на GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Если он новее и уже есть в npm, плагин устанавливает именно эту версию через встроенный менеджер плагинов dsh (тем же путём, что и Настройки → Плагины) и уведомляет вас. Перезапустите dsh, чтобы загрузить её. **Настройки → Composer Plus → Обновления Composer Plus** показывает версию и кнопки **Проверить обновления** / **Обновить сейчас**. При первом запуске dsh с новой версией окно **Что нового в Composer Plus N** один раз показывает примечания к этой версии на языке из **Язык приложения** (они приходят вместе с новой версией, без нового сетевого запроса; для языка без примечаний показываются английские); **Закрыть** или `Esc` закрывает его. Окно также показывается после обновления через Настройки → Плагины или скопированную папку, один раз для каждой новой версии; при первой установке оно не показывается. **Что нового в этой версии** в строке обновлений открывает его снова. Если на диске версия новее, чем запущенная, строка просит перезапустить dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Снимок экрана: Автоматические обновления"></a> |
106
+ | **Удалённые компьютеры** | <a id="feature-remotecomputers"></a>Открывайте dsh на других ваших Mac через [Tailscale](https://tailscale.com) и работайте с ними в этом окне dsh. Включите функцию в **Настройки → Composer Plus** на каждом Mac (по умолчанию она выключена, потому что открывает сетевые порты). На Mac, который вы хотите открыть, включите **Разрешить другим компьютерам открывать этот Mac**, нажмите **Создать ссылку для сопряжения** и скопируйте ссылку. На этом Mac выберите **Добавить компьютер…** в меню выбора компьютера на левой боковой панели (справа от названия приложения, над **Новый сеанс**), вставьте ссылку, введите **Имя** (не имя этого Mac и не имя другого компьютера) и нажмите **Подключить**. Затем нажмите **Одобрить** на другом Mac. После этого меню показывает **Этот Mac** и ваши компьютеры. Выберите компьютер, и его dsh займёт это окно со своими чатами, боковой панелью, инструментами и файлами, а этот Mac продолжит работать за ним. Другой Mac показывает то же меню в том же месте: выберите там **Этот Mac**, чтобы вернуться. Панель настроек переименовывает и удаляет компьютеры и показывает компьютеры, которые могут открывать этот Mac (**Удалить** сразу отключает любой из них). | <a href="assets/features/remoteComputers.webp"><img src="assets/features/remoteComputers.webp" width="160" alt="Снимок экрана: Удалённые компьютеры"></a> |
107
+ | **Автоматические обновления** | <a id="feature-autoupdate"></a>При запуске dsh плагин проверяет [последний выпуск на GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Если он новее и уже есть в npm, плагин устанавливает именно эту версию через встроенный менеджер плагинов dsh (тем же путём, что и Настройки → Плагины) и уведомляет вас. Перезапустите dsh, чтобы загрузить её. **Настройки → Composer Plus → Обновления Composer Plus** показывает версию и кнопки **Проверить обновления** / **Обновить сейчас**. При первом запуске dsh с новой версией окно **Что нового в Composer Plus N** один раз показывает примечания к этой версии на языке из **Язык приложения** (они приходят вместе с новой версией, без нового сетевого запроса; для языка без примечаний показываются английские); **Закрыть** или `Esc` закрывает его. Под примечаниями одна строка просит поставить звезду на GitHub, не чаще одного раза в 30 дней (без сетевого запроса); после **Поставить звезду на GitHub** или **Больше не спрашивать** она больше не показывается. Окно также показывается после обновления через Настройки → Плагины или скопированную папку, один раз для каждой новой версии; при первой установке оно не показывается. **Что нового в этой версии** в строке обновлений открывает его снова. Если на диске версия новее, чем запущенная, строка просит перезапустить dsh. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Снимок экрана: Автоматические обновления"></a> |
108
+ | **Фильтр «вкл./выкл.»** | <a id="feature-featurefilter"></a>Рядом с полем **Поиск функций** в разделе **Настройки → Composer Plus**: **Все** показывает все функции, **Включённые** — только функции с включённым переключателем, **Выключенные** — только с выключенным. Решает переключатель самой строки, в том числе переключатель, который хранит Host dsh (например, **Мобильное подключение**). Фильтр работает вместе с поиском: введите слово и выберите **Выключенные**, чтобы найти функцию, которую вы выключили. Строка, которую вы переключили при выбранном фильтре **Включённые** или **Выключенные**, остаётся, пока вы снова не выберете фильтр, поэтому фокус остаётся на её переключателе. **Включённые** и **Выключенные** скрывают строки **Язык приложения** и **Обновления Composer Plus** (у них нет переключателя). Настройки каждый раз открываются с фильтром **Все**. | <a href="assets/features/featureFilter.webp"><img src="assets/features/featureFilter.webp" width="160" alt="Снимок экрана: Фильтр «вкл./выкл.»"></a> |
109
+ | **Сообщить о проблеме** | <a id="feature-issuereport"></a>Настройки → Composer Plus → **Сообщить о проблеме…** (под вводным текстом) или правый щелчок по чату на боковой панели (или его меню **…**) → **Сообщить о проблеме с Composer Plus…**. Выберите тип: **Ошибка**, **Запрос функции**, **Улучшение**, **Перевод** или **Вопрос**. Напишите описание своими словами и на своём языке, затем нажмите **Написать черновик** (или `Cmd/Ctrl+Enter`). Один вызов модели dsh по умолчанию пишет issue на английском: заголовок с префиксом типа (например, `[Bug]`) и разделы этого типа (для ошибки: What happened, Steps to reproduce, Expected, Actual), а также одну строку с версиями Composer Plus, dsh и системы. Прочитайте и отредактируйте заголовок и описание; **Написать заново** пишет новый черновик. **Открыть issue** открывает issue в репозитории Composer Plus на GitHub через ваш вход в GitHub CLI (`gh`) и показывает ссылку на неё. Issue публичная: текст, похожий на ключ или пароль, отклоняется. Если `gh` не может открыть issue, **Открыть на сайте GitHub** открывает собственную страницу GitHub с заполненным черновиком. | <a href="assets/features/issueReport.webp"><img src="assets/features/issueReport.webp" width="160" alt="Снимок экрана: Сообщить о проблеме"></a> |
104
110
  | **Резервное копирование** | <a id="feature-backup"></a>Настройки → Composer Plus → **Резервное копирование** → **Создать копию сейчас** записывает всю домашнюю папку dsh (чаты, настройки, плагины, MCP, навыки) в один архив в `~/Desktop/dsh-backups` вместе с контрольной суммой. Секреты в архиве скрыты: файлы учётных данных, файлы ключей (`.pem`, `.key`) и значения token, secret и password в настройках yml остаются только на этом компьютере, в `vault` этой папки. `cache/`, `dsh-runtimes/` и `node_modules` в архив не входят (dsh создаёт их заново). У каждой резервной копии в списке есть **Проверить** (читает её целиком), **Для другого компьютера** (папка для копирования на новый компьютер, вместе с аварийной консолью) и **Удалить**. Архивы dsh-backup в той же папке тоже показываются и работают. Чтобы восстановить данные, выйдите из dsh и используйте аварийную консоль. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Снимок экрана: Резервное копирование"></a> |
105
111
  | **Автоматическое резервное копирование** | <a id="feature-autobackup"></a>Включите **Автоматическое резервное копирование** (по умолчанию выключено: каждая копия занимает примерно столько же места, сколько ваша домашняя папка dsh без кеша). Выберите, как часто создавать копии (**Каждые**: от 6 часов до 7 дней, по умолчанию 24 часа), и сколько резервных копий хранить (**Хранить**: от 3 до 14, по умолчанию 7). Время следующей копии показано под переключателем; неудачная копия тоже показывается там, и через 30 минут будет новая попытка. Когда dsh или Composer Plus запускается с новой версией, вскоре после запуска создаётся снимок, пока новая версия ещё недолго работала с вашими данными (хранятся два самых новых, с пометкой **Перед обновлением**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Снимок экрана: Автоматическое резервное копирование"></a> |
106
112
  | **Проверка журналов сеансов** | <a id="feature-sessiondoctor"></a>**Проверить журналы сеансов** читает журнал каждого чата и показывает те, которые dsh не может открыть (повреждённый фрейм, обрезанная запись, неверный порядковый номер). Оборванный конец журнала в список не попадает: dsh исправляет его сам. **Исправить из резервных копий** возвращает копию из самой новой резервной копии, где она не повреждена, и оставляет повреждённый файл рядом (`.corrupt-<время>`). Сообщений, написанных после этой резервной копии, в копии нет. Чат, открытый в этом dsh, здесь не исправляется: выйдите из dsh и исправьте его в аварийной консоли. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Снимок экрана: Проверка журналов сеансов"></a> |
@@ -112,7 +118,7 @@ dsh plugin --profile web add dsh-composer-plus
112
118
 
113
119
  ## Настройки
114
120
 
115
- Каждую функцию можно включить или выключить отдельно: dsh **Настройки → Composer Plus**. В каждой строке есть маленький снимок экрана: наведите на него указатель, чтобы увидеть его крупнее, или нажмите, чтобы открыть в полном размере (`Esc` закрывает). Поле **Поиск функций** вверху фильтрует страницу по названию или описанию (на любом языке, без учёта регистра и диакритических знаков); `Esc` очищает его. В каждой строке есть переключатель и короткое описание. Маленький **?** после названия строки открывает часть README с описанием этой функции, в README на языке интерфейса dsh. Изменения применяются сразу, без перезапуска, и запоминаются на этом устройстве. По умолчанию включено всё, кроме **Мобильное подключение**, **Продолжать после перезапуска** и **Дополнение при вводе**. Переключатели этих трёх функций, а также **Поиск по содержимому**, **Откат хода**, **Предсказание следующего сообщения** и **Проверка цели** хранит Host dsh, поэтому они действуют во всех окнах и сохраняются после перезапуска. Выбор в меню **Модель** для **Предсказание следующего сообщения**, для **Дополнение при вводе** (по умолчанию **Как у предсказания следующего сообщения**), для **Улучшить промпт** и для **Проверка цели** (у обоих по умолчанию **Как модель чата**), а также **Лимит времени** для **Разрешить для этого чата** (по умолчанию 1 час) тоже хранит Host. **Поиск по содержимому** меняется только после перезапуска dsh (dsh читает эту настройку при запуске). До этого в его строке написано **Перезапустите dsh, чтобы применить это изменение.**
121
+ Каждую функцию можно включить или выключить отдельно: dsh **Настройки → Composer Plus**. В каждой строке есть маленький снимок экрана: наведите на него указатель, чтобы увидеть его крупнее, или нажмите, чтобы открыть в полном размере (`Esc` закрывает). Поле **Поиск функций** вверху фильтрует страницу по названию или описанию (на любом языке, без учёта регистра и диакритических знаков); `Esc` очищает его. Рядом кнопки **Все**, **Включённые** и **Выключенные** показывают все функции, только включённые или только выключенные (чтобы скрыть их, выключите **Фильтр «вкл./выкл.»**). В каждой строке есть переключатель и короткое описание. Маленький **?** после названия строки открывает часть README с описанием этой функции, в README на языке интерфейса dsh. Изменения применяются сразу, без перезапуска, и запоминаются на этом устройстве. По умолчанию включено всё, кроме **Мобильное подключение**, **Продолжать после перезапуска** и **Дополнение при вводе**. Переключатели этих трёх функций, а также **Поиск по содержимому**, **Откат хода**, **Предсказание следующего сообщения** и **Проверка цели** хранит Host dsh, поэтому они действуют во всех окнах и сохраняются после перезапуска. Выбор в меню **Модель** для **Предсказание следующего сообщения**, для **Дополнение при вводе** (по умолчанию **Как у предсказания следующего сообщения**), для **Улучшить промпт** и для **Проверка цели** (у обоих по умолчанию **Как модель чата**), а также **Лимит времени** для **Разрешить для этого чата** (по умолчанию 1 час) тоже хранит Host. **Поиск по содержимому** меняется только после перезапуска dsh (dsh читает эту настройку при запуске). До этого в его строке написано **Перезапустите dsh, чтобы применить это изменение.**
116
122
 
117
123
  <p align="center"><img src="docs/images/settings.webp" width="720" alt="Настройки → Composer Plus: поиск функций, выбор языка, строка обновлений и переключатель для каждой функции; при наведении показывается снимок экрана"></p>
118
124
 
@@ -172,6 +178,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
172
178
  - **Поиск по содержимому:** никакой новый код не ищет по вашим чатам. Плагин только включает встроенный индекс сообщений dsh (SQLite FTS5, `dsh-session-query-sqlite`) и даёт ему файл `$DSH_HOME/cache/composer-plus/session-search.db` (файл и папка доступны только владельцу). В файле хранится текст ваших сообщений и сообщений ассистента, поэтому он так же конфиденциален, как журналы чатов в `$DSH_HOME/sessions`. Ничего не покидает ваш компьютер. Это копия, которую dsh может создать заново: её можно удалить, пока dsh закрыт. Переключатель хранится в `$DSH_HOME/storages/dsh-composer-plus/content-search.json`.
173
179
  - **Откат хода:** перед каждым вашим сообщением Host делает git-снимок папки чата в собственном хранилище `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (папка доступна только владельцу). В нём хранятся копии тех файлов этой папки, которые видит git (кроме игнорируемых), поэтому оно так же конфиденциально, как сам проект. Хранилище читает объекты вашего репозитория (то, что уже есть в git, не копируется) и никогда не записывает индекс, `HEAD`, ветки, теги, stash или конфигурацию вашего репозитория. Единственное, что git там меняет, — более новая отметка времени у файлов объектов, которые он использует повторно (из-за этого `git gc` удаляет их позже). Откат с файлами записывает только обычные файлы внутри папки чата; символические ссылки, каналы (pipes) и всё за пределами папки он пропускает. Ничего не покидает ваш компьютер. Хранилище можно удалить, пока dsh закрыт (тогда откат работает только для чата, пока не появятся новые сообщения). **Удалить чат** удаляет и хранилище чата. Переключатель хранится в `$DSH_HOME/storages/dsh-composer-plus/rollback.json`. Откат с файлами также сохраняет файлы в том виде, в каком они были непосредственно перед ним (`refs/r/…` в том же хранилище), для кнопки **Повторить**; повторённые откаты перечислены в `$DSH_HOME/storages/dsh-composer-plus/redone.json` (доступ только для владельца).
174
180
  - **Открыть issue на GitHub** (Идеи функций → список **На потом**): запускается, только когда вы нажимаете эту кнопку. Host-часть запускает ваш собственный GitHub CLI (`gh issue create`) в папке чата с сохранёнными названием и кратким описанием идеи (и тем, почему она важна); `gh` использует свой вход и удалённый репозиторий GitHub этой папки, поэтому issue создаётся в этом репозитории от вашей учётной записи, и GitHub показывает её всем, кто видит этот репозиторий. dsh удаляет из запускаемых им команд переменные с именами, похожими на токен; если вы передали `gh` токен через `GH_TOKEN` или `GITHUB_TOKEN`, плагин передаёт `gh` только эти переменные. Ссылка на issue хранится вместе с идеей в `later.json`.
181
+ - **Сообщить о проблеме** (Настройки → Composer Plus → **Сообщить о проблеме…** или меню **…** чата → **Сообщить о проблеме с Composer Plus…**): ничего не запускается, пока вы не нажмёте кнопку. **Написать черновик** одним запросом отправляет модели dsh по умолчанию только тип и текст, который вы ввели (не чат и не проект). Host-часть добавляет одну строку с версиями Composer Plus, dsh и операционной системы и заменяет путь к вашей домашней папке на `~`. **Открыть issue** запускает ваш собственный GitHub CLI (`gh issue create --repo furkancak1r/dsh-composer-plus`) с вашим входом в `gh`, поэтому issue публичная и показывает вашу учётную запись GitHub. Текст, похожий на ключ, токен или пароль, отклоняется и не покидает ваш Mac.
175
182
  - **Чаты, которые изменили этот файл** (Изменения, меню «…» файла): Host-часть читает журналы чатов, папка которых находится в том же репозитории, в том виде, в каком их хранит dsh, и возвращает название каждого чата, время и первую строку запроса; сам файл она никогда не открывает.
176
183
  - **Ветка Git в строках чатов:** Host-часть запускает `git branch --show-current` (только чтение) в папке чата, когда ход начинается и когда заканчивается, и хранит только ID чата, имя ветки и время в `$DSH_HOME/storages/dsh-composer-plus/session-branches.json` (файл доступен только владельцу, 2000 самых новых чатов). Переключатель хранится рядом, в `branches.json`.
177
184
  - **Поиск в чате** работает только на странице: он читает текст, который показывает страница, и ничего не отправляет.
@@ -180,9 +187,10 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
180
187
  - **Разрешить для этого чата:** разрешения хранятся вместе со временем выдачи в `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` (доступ только для владельца). Разрешение действует для одного конкретного инструмента в одном чате, пока не истечёт лимит времени (по умолчанию 1 час). Если этот инструмент может выполнять запись, разрешение покрывает и любую запись. Отозвать его можно через значок в заголовке.
181
188
  - Автопроверка по-прежнему выполняется при каждом вызове. Если проверка завершилась сбоем, вызов никогда не разрешается автоматически.
182
189
  - **Мобильное подключение:** выключено, пока вы его не включите. Когда оно включено, Host-часть запускает шлюз Tether: HTTPS на порту 19390, который принимает подключения только из вашей подсети Wi-Fi и вашего tailnet (100.64.0.0/10), и страницу сопряжения на `127.0.0.1:19391` (только для этого Mac). Телефону нужен одноразовый код из QR-кода (действует 5 минут) и ваше подтверждение **Approve** на Mac. Телефон закрепляет сертификат шлюза. Mac хранит только хеш токена каждого телефона (30 дней, срок продлевается при использовании); **Remove** сразу закрывает подключения этого телефона. Телефоны могут вызывать только разрешённый список методов dsh (чаты, запросы, вложения, слеш-команды, одобрения, вопросы, модели, агенты, цели), но не настройки, учётные данные, обозреватель файлов или терминал. «Tailscale only» отклоняет любое подключение из локальной сети, в том числе уже открытые. Журнал доступа хранит 200 самых новых попыток подключения (время, IP-адрес, имя устройства, разрешено или отклонено и причина) в `access.json`; токенов и кодов сопряжения в нём никогда нет. Данные: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (файлы доступны только владельцу). Подробности: [tether/README.md](tether/README.md).
183
- - **Удалённые компьютеры:** функция выключена, пока вы не включите её на каждом Mac. **Разрешить другим компьютерам открывать этот Mac** открывает второй порт HTTPS (19392) только на адресе Tailscale этого Mac (не в сети Wi-Fi и без объявления через Bonjour). Другому Mac нужна одноразовая ссылка для сопряжения (действует 5 минут), соответствующий сертификат (закреплённый) и ваше подтверждение **Одобрить**. Этот Mac хранит только хеш его токена. Сопряжённый компьютер получает полный контроль над dsh на этом Mac, как если бы вы работали здесь: чаты, модели, инструменты, файлы и терминал. Удалите его на панели настроек, и его подключения сразу закроются. Mac, который открывает другой Mac, хранит токен этого компьютера в `$DSH_HOME/storages/dsh-composer-plus/computers.json` (файл доступен только владельцу). Для каждого выбранного компьютера он открывает ретранслятор (relay) на `127.0.0.1`. Страница получает одноразовую ссылку (действует 60 секунд), а ретранслятор принимает только свою страницу (свой адрес, никакой другой сайт). Страница, которую открыл другой Mac, не показывает меню выбора компьютера и не может менять компьютеры этого Mac.
190
+ - **Удалённые компьютеры:** функция выключена, пока вы не включите её на каждом Mac. **Разрешить другим компьютерам открывать этот Mac** открывает второй порт HTTPS (19392) только на адресе Tailscale этого Mac (не в сети Wi-Fi и без объявления через Bonjour). Другому Mac нужна одноразовая ссылка для сопряжения (действует 5 минут), соответствующий сертификат (закреплённый) и ваше подтверждение **Одобрить**. Этот Mac хранит только хеш его токена. Сопряжённый компьютер получает полный контроль над dsh на этом Mac, как если бы вы работали здесь: чаты, модели, инструменты, файлы и терминал. Удалите его на панели настроек, и его подключения сразу закроются. Mac, который открывает другой Mac, хранит токен этого компьютера в `$DSH_HOME/storages/dsh-composer-plus/computers.json` (файл доступен только владельцу). Для каждого выбранного компьютера он открывает ретранслятор (relay) на `127.0.0.1`. Страница получает одноразовую ссылку (действует 60 секунд), а ретранслятор принимает только свою страницу (свой адрес, никакой другой сайт). Страница другого Mac в этом окне может читать имена и состояния компьютеров этого Mac (без адресов и токенов) и может переключать это окно между ними. Она не может добавлять, переименовывать или удалять компьютеры и не может менять настройки этого Mac.
184
191
  - **Обновления:** Host-часть запрашивает у `api.github.com` последний выпуск, а у `registry.npmjs.org` — именно эту версию. Никакие данные о вас или ваших чатах не отправляются. Установка идёт через менеджер плагинов dsh (`pnpm add dsh-composer-plus@<version>`; если dsh 0.2.1 отклоняет её для уже установленного плагина, то `pnpm add https://registry.npmjs.org/dsh-composer-plus/-/dsh-composer-plus-<version>.tgz`, и тогда профиль указывает этот URL как источник плагина), поэтому действуют встроенные проверки dsh: реестр, скрипты и совместимость версий. Предварительные выпуски и более старые версии никогда не устанавливаются.
185
- - **Подсчёт использования:** раз в день Host-часть запрашивает у GitHub маленький файл `active.txt` из выпуска установленной версии (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/active.txt`). GitHub считает эти запросы для каждого файла, поэтому автор видит только, сколько копий каждой версии сделали запрос в этот день. В запросе нет идентификатора, cookie и данных о вас или ваших чатах; GitHub видит ваш IP-адрес, как и при каждой проверке обновлений. День последнего запроса хранится в `$DSH_HOME/storages/dsh-composer-plus/active.json`. Git-клон этого репозитория и переименованная копия ничего не отправляют. Переключателя для этого нет.
192
+ - **Пакет навыка для турецкого:** включён по умолчанию и работает, только пока язык приложения — Türkçe: браузер сообщает Host-части язык интерфейса dsh. Затем не чаще раза в день Host-часть запрашивает у `api.github.com` последний коммит `yucezerey/turkish-anti-ai-skill` и его список файлов и загружает изменившиеся файлы Markdown с `raw.githubusercontent.com`. GitHub видит ваш IP-адрес, как при каждой проверке обновлений; ничего о вас или ваших чатах не отправляется. Сохраняются только обычные файлы `.md` из папки `skills/turkish-anti-ai-skill/` (не больше 20 файлов и 1 МБ), и каждый файл должен совпадать со своим идентификатором в списке файлов GitHub. Копия лежит в `$DSH_HOME/cache/composer-plus/turkish-skill/<commit>` (доступ только у владельца) и попадает в список навыков dsh; ни один скрипт пакета не запускается. Переключатель и последний сообщённый язык хранятся в `$DSH_HOME/storages/dsh-composer-plus/turkish-skill.json`. Выключение удаляет навык и копию.
193
+ - **Подсчёт использования:** Host-часть запрашивает у GitHub два маленьких файла из выпуска установленной версии (`github.com/furkancak1r/dsh-composer-plus/releases/download/v<version>/<file>`): `active.txt` раз в день, а `installed.txt` только один раз для каждой домашней папки dsh. GitHub считает эти запросы для каждого файла, поэтому автор видит только, сколько копий каждой версии запросили `active.txt` в этот день и сколько копий всего запросили `installed.txt` (число копий). В запросе нет идентификатора, cookie и данных о вас или ваших чатах; GitHub видит ваш IP-адрес, как и при каждой проверке обновлений. День последнего запроса `active.txt` хранится в `$DSH_HOME/storages/dsh-composer-plus/active.json`, а отметка о том, что `installed.txt` уже засчитан, — в `$DSH_HOME/storages/dsh-composer-plus/installed.json`. Git-клон этого репозитория и переименованная копия ничего не отправляют. Переключателя для этого нет.
186
194
  - **Предсказание следующего сообщения:** по умолчанию включено. Чтобы остановить эти вызовы модели, выключите его в **Настройки → Composer Plus**. После каждого завершённого хода Host-часть отправляет ваши собственные сообщения в чате и текстовые ответы агента (без вывода инструментов, скрытого контекста и рассуждений), не более примерно 6 000 символов (самую новую часть), выбранной модели (по умолчанию это модель dsh, если вы не выберете другую). Это один запрос через настройки провайдера самого dsh. В чате ничего не сохраняется: предположение не попадает в историю чата. Переключатель и выбранная модель хранятся в `$DSH_HOME/storages/dsh-composer-plus/predict.json` (файл доступен только владельцу).
187
195
  - **Дополнение при вводе:** выключено, пока вы его не включите. Когда оно включено, при каждой паузе в наборе Host-часть отправляет уже набранный текст, а также ваши собственные сообщения в чате и текстовые ответы агента (без вывода инструментов, скрытого контекста и рассуждений), не более примерно 3 000 символов чата, модели, выбранной для **Дополнение при вводе** (по умолчанию это модель **Предсказание следующего сообщения**). Новая пауза останавливает предыдущий запрос. В чате ничего не сохраняется. Переключатель хранится в `$DSH_HOME/storages/dsh-composer-plus/complete.json` (файл доступен только владельцу).
188
196
  - **Улучшить промпт:** ничего не запускается, пока вы не нажмёте волшебную палочку. Затем Host-часть одним запросом отправляет модели, выбранной для **Улучшить промпт** (по умолчанию это модель самого чата), ваш черновик, ваши собственные сообщения в чате и текстовые ответы агента (без вывода инструментов, скрытого контекста, рассуждений и сообщений, убранных откатом; не более примерно 6 000 символов, самую новую часть), ту же сводку проекта, что и **Идеи функций** (с теми же правилами для файлов: без `.env*` и файлов ключей, без символических ссылок за пределы папки, без FIFO), пути, которые `git status` показывает как изменённые, и до 30 отслеживаемых или неотслеживаемых (не игнорируемых) путей, в именах которых есть слова из вашего черновика. Другое содержимое файлов, кроме этой сводки, не отправляется. В чат и в проект ничего не записывается: ответ только заменяет ваш черновик в поле ввода, а отправлять ли его, решаете вы. Выбранная модель хранится в `$DSH_HOME/storages/dsh-composer-plus/improve.json` (файл доступен только владельцу).
@@ -212,10 +220,11 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
212
220
  - **Чат не продолжился после перезапуска:** функция «Продолжать после перезапуска» была выключена, когда dsh завершил работу; вы сами остановили этот ход; ход уже закончился (готово или сбой); чат был в архиве; или работало больше 20 чатов (продолжаются 20 самых новых).
213
221
  - **После перезапуска очередь пуста:** очередь очищает сам dsh при завершении. Функция «Продолжать после перезапуска» возвращает её только в чате, который продолжается; в других чатах отправьте сообщения снова. Сообщение, удалённое прямо перед выходом, может вернуться: удалите его снова.
214
222
  - **Открыть issue на GitHub сообщает «gh could not open the issue»:** это первая строка вывода самого `gh`. Выполните `gh auth status` в терминале и войдите с помощью `gh auth login`; у папки чата должен быть удалённый репозиторий GitHub (`git remote -v`). «not installed or not on the PATH of dsh» означает, что dsh не нашёл `gh`: установите его или запустите dsh из терминала, в котором `gh` работает.
223
+ - **«Сообщить о проблеме» сообщает «gh could not open the issue»:** это первая строка вывода самого `gh`. Выполните `gh auth status` в терминале и войдите с помощью `gh auth login`. Или нажмите **Открыть на сайте GitHub**: откроется собственная страница новой issue на GitHub с заполненным черновиком, и вы отправите её там.
215
224
  - **На строке чата нет метки ветки:** боковая панель не в режиме «Одним списком» (в режимах «По рабочей области» и «Дерево рабочих областей» ни одна строка чата не показывает метку), у чата не было хода с момента установки этой версии, его папка не является репозиторием git, или функция **Ветка Git в строках чатов** выключена. После обновления перезапустите dsh (ветку записывает Host-часть).
216
225
  - **Проверка цели сообщает, что тест завершился с кодом 127 или «not found»:** у dsh, запущенного из Finder или Dock, PATH может быть короче, чем в вашем терминале, поэтому он не находит `npm`, `pnpm` или `cargo`. Запустите dsh из терминала или задайте свою тестовую команду с полным путём в **Проверка цели** → **Изменить**. **Запустить сейчас** сразу показывает результат.
217
226
  - **Цель не закрывается, и агент продолжает работать:** **Проверка цели** нашла непройденный тест или недоделанную работу; строка под целью показывает причину (наведите указатель на результат, чтобы увидеть подробности). Исправьте причину или тестовую команду либо завершите цель сами командой `/goal` или через панель цели (это не проверяется).
218
- - **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.22.0`), см. примечание об установке выше.
227
+ - **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.23.0`), см. примечание об установке выше.
219
228
  - **Кнопка «Создать копию сейчас» сообщает «Уже выполняется другое действие с резервными копиями»:** действие выполняется в другом окне dsh или в аварийной консоли (они используют общий файл блокировки `.composer-plus.lock` в папке резервных копий). Дождитесь его окончания. Если никакое действие не выполняется, блокировку закрытого процесса перехватит следующее нажатие.
220
229
  - **Аварийная консоль сообщает «dsh is running»:** сначала выйдите из dsh. Если dsh действительно закрыт, файл, названный в сообщении, остался после сбоя: удалите его и повторите попытку.
221
230
  - **После восстановления dsh не запускается или не хватает плагина:** пакеты плагинов профиля нужно установить заново. Аварийная консоль предлагает это после восстановления; или выполните `pnpm install` в каждой папке внутри `$DSH_HOME/profiles/`, которую она перечисляет. Секреты, которых не было в vault (другой компьютер), нужно ввести заново: консоль перечисляет их.
@@ -237,9 +246,11 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
237
246
  - dsh 0.2.1 загружает обновление сразу, если новая версия не меняет никаких настроек dsh; в остальных случаях, а также в dsh 0.2.0, перезапустите dsh, чтобы загрузить его. Плагин никогда не перезапускает dsh за вас. Профили Web/CLI без менеджера плагинов dsh только сообщают о новой версии.
238
247
  - **Что нового в Composer Plus N** показывает примечания на языке из **Язык приложения**. Язык интерфейса с другим регионом получает примечания своего основного языка (`en-GB` — английские, `zh-TW` — китайские примечания `zh`). Для языка без примечаний (его добавляет другой языковой пакет, или это `pt-PT`, а не `pt-BR`) показываются английские примечания. Примечания приходят вместе с новой версией. Если у запущенной копии нет читаемого файла примечаний (`release-notes.json`), окно показывает английские примечания с GitHub.
239
248
  - Версия, установленная во время работы dsh (обновление через Настройки → Плагины или скопированную папку), загружается только после перезапуска dsh: до этого **Обновления Composer Plus** показывает запущенную версию и просит перезапустить dsh. Её окно **Что нового в Composer Plus N** показывается один раз при первом запуске этой версии. Первый запуск после установки плагина не показывает окно; **Что нового в этой версии** открывает примечания запущенной версии.
249
+ - Строка со звездой GitHub под примечаниями не может знать, поставили ли вы звезду репозиторию: плагин не делает для этого сетевых запросов. Каждый браузер (и настольное приложение) хранит свою запись, поэтому в другом браузере строка может показаться ещё раз.
240
250
  - **Отклонить с примечанием** отправляет примечание как сообщение в ожидающий ход, а затем отклоняет запрос; dsh показывает примечание в чате как ваше сообщение. Пока поле примечания открыто, карточка показывает только **Отмена** и **Отклонить**, поэтому щелчок не может по ошибке разрешить запрос; `Esc` или **Отмена** возвращает кнопки dsh. Пустое примечание ничего не отправляет (используйте собственную кнопку **Отклонить** в dsh). Если отклонить запрос не удалось уже после отправки примечания (например, на запрос тем временем ответили в другом месте), примечание остаётся в чате, и модель прочитает его на своём следующем шаге. Кнопка встраивается в разметку карточки одобрения dsh (`data-approval-key`), потому что в dsh нет места для действий карточки; если обновление dsh изменит эту разметку, кнопка не появится, а собственная кнопка **Отклонить** в dsh работает как раньше. Примечание может содержать не более 4 000 символов.
241
251
  - **Ввод секрета** скрывает только точный текст значения: в следующих результатах инструментов того же чата его заменяет `[secret]`. Агент всё равно может прочитать файл командой shell и вывести значение в другой форме (base64, часть значения, с пробелами), и эта форма дойдёт до модели. Собственные файловые инструменты агента (read, grep, write, edit) не могут открыть папку секретов. Если значение — ещё и частое слово, другие результаты этого чата тоже покажут `[secret]`. Файл хранится до конца хода; если dsh закроется во время хода, следующий запуск удалит его. В чате может быть только один открытый запрос одновременно. Инструмент добавляет к каждому запросу к модели около 870 символов (примерно 220 токенов, оценка): выключите его, если не пользуетесь.
242
252
  - **Цитата в ответе** цитирует текст так, как его показывает страница: блок кода, таблица или список приходят простыми строками, без разметки Markdown. Если выделение начинается в одном ответе и заканчивается в другом или задевает рассуждения, строку инструмента или ваше собственное сообщение, кнопка не появится: выделяйте внутри одного ответа. Кнопка находит ответ по структуре чата dsh, потому что в dsh нет слота для выделения текста; если обновление dsh изменит эту структуру, кнопка не появится. Если цитата стоит в конце поля, после неё добавляется ещё одна пустая строка, чтобы следующая строка начиналась ниже; при отправке dsh удаляет пустые строки в конце.
253
+ - **Цитата из предпросмотра файла** читает собственный предпросмотр файлов dsh: номера строк берутся из его строк, поэтому для файлов кода и текстовых файлов они верные. Файл Markdown показывается как оформленная страница, поэтому его цитата содержит текст без разметки Markdown и без номеров строк; цитата из PDF содержит страницу, а не строку. Если выделение находится в заголовке с путём, в другом средстве просмотра (таблица, файл Office, изображение) или захватывает два открытых файла, кнопка не появится; не появится она и тогда, когда правая боковая панель развёрнута на весь экран (поля ввода тогда нет на экране). Кнопка находит предпросмотр по разметке dsh, потому что в dsh там нет слота для выделения; если обновление dsh изменит эту разметку, кнопка не появится. В поле ввода попадает только выделенный текст: если файл потом изменится, цитата не изменится.
243
254
  - **Побочный чат** работает только на чтение благодаря собственному режиму только чтения dsh: файловые инструменты не могут писать, а команды оболочки выполняются в песочнице dsh без записи (или не выполняются, если песочница не может запуститься). Агент всё же может запросить больше доступа через карточку подтверждения dsh, а сетевой вызов (например, запрос к API) всё же может изменить что-то за пределами компьютера. Копия делается на самый новый момент, когда в очереди не ждало ни одного сообщения, поэтому вопрос, заданный, пока сообщения ждут в очереди, не видит того, что было после них. Выполняемый шаг чата в копии закрывается, поэтому побочный чат знает начало этого шага, но не его результат. Побочный чат — обычный чат: он остаётся на боковой панели и учитывается в использовании модели; архивируйте его там. «Вернуть» берёт только собственные сообщения побочного чата (не более 12 000 символов) и только последний ответ на каждый вопрос; заметки агента между вызовами инструментов не попадают. dsh не даёт плагинам места для чата на правой боковой панели, поэтому побочный чат открывается в основном виде.
244
255
  - **Заметки к diff** работают только на панели изменений, а не в представлении «Последний ход» dsh. Диапазон должен оставаться в одном блоке diff (в одной части `@@`). Заметки хранятся в хранилище этого браузера, поэтому другой браузер или dsh на другом компьютере их не видит; Tether хранит свои заметки в памяти. Заметка сохраняет строки такими, какими они были в момент щелчка: если агент потом изменит файл, заметка покажет старые строки и номера. Не более 50 заметок на чат, 2 000 символов и 40 строк на заметку (дальше строка `…`).
245
256
  - **Разрешить для этого чата** отсчитывает лимит времени с момента выдачи разрешения. Новый лимит времени сразу применяется к действующим разрешениям, поэтому более короткий лимит может сразу их завершить. У разрешений из версии 1.12 и более ранних нет времени: после обновления агент ещё раз спросит об этих инструментах.
@@ -247,7 +258,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
247
258
  - **Подгонять карточку вопроса под окно** меняет только карточку вопроса dsh, а не карточку проверки плана. Она находит карточку по разметке dsh (`data-question-key`, `data-question-scroll`); если обновление dsh изменит эту разметку, карточка будет выглядеть так, как её рисует dsh. Высота карточки следует за окном, а не за чатом: в чате в узкой боковой панели высокая карточка всё ещё может выходить выше чата.
248
259
  - **Подогнать заголовок чата под окно** находит заголовок чата dsh по его сгенерированным именам классов (`_titleRow`, `_titleCluster`, `_crumbs`, `_headerActions`, `_headerUtilities`), потому что dsh не даёт точки подключения для его раскладки. Если обновление dsh переименует их, заголовок показывается так, как его рисует dsh. В очень узкой колонке чата заголовок может занять две или три строки, и места над сообщениями становится меньше.
249
260
  - **Мобильное подключение** работает только в macOS (оно использует `en0`, `openssl`, `swift` и `dns-sd`). Оно использует фиксированные порты 19390 и 19391, поэтому на каждом Mac его может одновременно запускать только один dsh (каждый Mac — одна запись в списке Mac на телефоне). С ключом APNs в `apns.json` (см. `tether/README.md`) Mac отправляет уведомления через push-сервис Apple, поэтому они приходят и при закрытом Tether; Mac должен быть активен, а dsh открыт. Без ключа телефон получает уведомления, только пока Tether открыт или только что ушёл в фон. Tether отправляет их только после того, как вы включите в Tether «Settings → Notifications → Send notifications». Tether хранит этот переключатель и его часы отдельно для каждого сопряжённого Mac. По умолчанию он выключен на каждом Mac, а разрешение iOS запрашивает в момент включения. Приложения для iOS пока нет в App Store: соберите его из `tether/ios` в Xcode. «Tailscale only» всё равно требует адрес Wi-Fi или Ethernet на Mac (шлюз запускается только при таком адресе). Журнал доступа у каждого Mac свой и хранит только 200 самых новых попыток; повторная попытка в течение минуты увеличивает счётчик той же строки на один. Каждое уведомление показывает Mac и проект чата (`Studio Mac · recipe-box`), название чата и текст: Turn finished показывает последний ответ агента. С ключом APNs этот текст проходит через push-сервис Apple. Блокировка приложения Tether не скрывает превью уведомлений на экране блокировки iPhone: выключите их в настройках iOS. Зелёные точки в Tether следуют за Mac: у чата, который вы открыли в dsh, точка пропадает и на телефоне. У чата, который вы открыли в Tether, точка пропадает только на телефонах. Собственная точка dsh на Mac остаётся, пока вы не откроете чат на Mac.
250
- - **Удалённые компьютеры** требуют Tailscale на обоих Mac и Composer Plus с включённой функцией на Mac, который вы открываете. Этот Mac не должен быть в режиме сна, и на нём должен работать dsh. Другой компьютер открывается на вкладке «Браузер» правой боковой панели чата, который сейчас на экране. Вкладка принадлежит этому чату, поэтому другой чат показывает свою боковую панель. Без чата (или в dsh web без вкладки «Браузер») компьютер открывается в окне браузера. Меню выбора компьютера видно, только когда в основной области открыт чат или экран нового чата. На доске задач его нет. Функция использует порт 19392 (на каждом Mac пускать другие компьютеры может только один dsh). У компьютера, который вы открыли внутри страницы другого компьютера, нет меню выбора, поэтому оттуда нельзя открыть третий Mac.
261
+ - **Удалённые компьютеры** требуют Tailscale на обоих Mac и Composer Plus с включённой функцией на Mac, который вы открываете. Этот Mac не должен быть в режиме сна, и на нём должен работать dsh. Меню выбора компьютера видно, только когда левая боковая панель открыта (а не свёрнута до значков). Страница другого Mac показывает меню выбора, только если на том Mac стоит эта или более новая версия Composer Plus. Если версия старее, через несколько секунд вверху появляется кнопка **Вернуться к этому Mac**. Каждый открытый вами компьютер держит свою страницу в памяти, пока вы не выключите функцию или не перезапустите dsh. В настольном приложении страница другого Mac — встроенная страница: собственные сочетания клавиш dsh (например, новый чат) в ней не работают, и загрузка файлов, микрофон и уведомления там тоже не работают. Функция использует порт 19392 (на каждом Mac пускать другие компьютеры может только один dsh). Со страницы другого Mac меню выбора переключает только между компьютерами этого Mac: открыть третий Mac через другой Mac нельзя.
251
262
  - Ссылка на сеанс работает внутри чатов; щелчок по ней не открывает чат. Ссылка, созданная через **Копировать ссылку на сообщение**, открывает своё сообщение только в dsh 0.2.1 и новее и только из сообщения в чате (в dsh 0.2.0 нет правил для пользовательского текста, поэтому там ссылка копируется, но показывается как обычный текст). Сообщение, которое убрал откат или которое сжатие удалило из истории, загружаемой dsh, показать нельзя: ссылка тогда сообщает об этом. Кнопки 🔗 привязаны к строкам сообщений dsh; если обновление dsh изменит эту разметку, они не появятся.
252
263
  - **Отметить все как прочитанные** меняет собственные точки непрочитанного dsh через часть dsh, которая не является публичным API (список `completionUnread` в состоянии сеансов dsh). Если обновление dsh переименует его, пункт не появится. Пункт добавляется в меню «…» проекта в dsh, где нет места для плагинов; если dsh изменит это меню, пункт тоже не появится.
253
264
  - **Правка сообщения в очереди на месте** не меняет сообщение, которое тем временем начало отправляться, и не перезаписывает сообщение, которое тем временем изменилось (например, в Tether на iPhone): об этом сообщает уведомление. Для нового изображения нужна модель, которая принимает изображения (действуют собственные ограничения dsh на изображения), а новый файл должен загрузиться до того, как вы сможете сохранить. Изменять можно только свои сообщения в очереди: раунд цели или ответ на вопрос в очереди изменить нельзя. После обновления плагина сразу работает только правка текста: перезапустите dsh, прежде чем сохранять сообщение с изображениями или файлами (Host-часть загружается при запуске).
@@ -255,6 +266,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
255
266
  - Карта веток в режиме **Дерево** угадывает, куда идёт каждая стрелка, потому что git не сохраняет, в какую ветку слита ветка. Слитая ветка указывает на ветку, коммит слияния которой первым принял её. Ожидающая ветка указывает на ближайшую ветку, от которой она началась (в первую очередь на основную ветку); если две ветки начались от одного коммита, карта может выбрать не ту. У ветки, которая продвинулась перемоткой вперёд (fast-forward), нет коммита слияния, поэтому её метка **Слито** ничего не открывает. Основная ветка — это ветка по умолчанию у `origin`, иначе `main` или `master`, иначе открытая ветка. Карта читает последние 20 000 коммитов и показывает не больше 60 веток; если история длиннее, она сообщает, что некоторые стрелки могут быть неверными. Ветка, слитая через squash или rebase (например, на GitHub), показывается как **Ожидает**: git не хранит связи с её коммитами.
256
267
  - **Этот чат** учитывает только файлы, которые записали файловые инструменты dsh (`write`, `edit`, `str_replace_editor`). Файлов, которые изменила команда (`bash`), в этом представлении нет; они показаны в разделе **Незафиксированные**. Без снимка отката хода для чата (откат хода выключен, установлен dsh-rewind-plugin или чат старше плагина) представление сравнивает с последним коммитом и сообщает об этом. Откат хода хранит 50 последних снимков чата: в более длинном чате представление сравнивает с самым старым сохранённым снимком, сообщает, с какого сообщения, и не учитывает более ранние изменения. **Скрыть изменения пробелов** — это `git diff -w`: строка, в которой изменились только пробелы внутри неё, тоже скрывается.
257
268
  - **Открыть issue на GitHub** требует GitHub CLI (`gh`) в PATH dsh и удалённый репозиторий GitHub в папке чата. Команда работает не дольше 60 с; если `gh` работает дольше, issue может уже существовать на GitHub без ссылки в списке (прежде чем нажать ещё раз, проверьте GitHub: список читает ссылку только из завершённого запуска, поэтому новое нажатие может открыть вторую issue). Папка с несколькими удалёнными репозиториями GitHub использует значение по умолчанию самого `gh` (`gh repo set-default`).
269
+ - **Сообщить о проблеме** открывает issue только в репозитории Composer Plus (`furkancak1r/dsh-composer-plus`), а не в вашем проекте (для проекта используйте **Открыть issue на GitHub** в списке **На потом** функции «Идеи функций»). Для черновика нужна модель по умолчанию в dsh, а чтобы открыть issue — GitHub CLI (`gh`) с выполненным входом. Черновик всегда на английском. Модель может ошибиться в деталях: прочитайте черновик, прежде чем нажать **Открыть issue**. Открытие длится не более 60 с; если в течение часа снова отправить тот же заголовок и текст, вместо копии показывается прежняя issue. **Открыть на сайте GitHub** обрезает очень длинное описание, чтобы ссылка оставалась короткой.
258
270
  - **Чаты, которые изменили этот файл**, как и **Этот чат**, знают только файловые инструменты dsh (`write`, `edit`, `str_replace_editor`): изменение, сделанное командой (`bash`), в списке не появляется. Список читает 300 самых новых чатов репозитория (по времени создания) и сообщает, если их больше; он показывает не более 100 строк. Переименованный файл показан под тем именем, которое записал инструмент. Чат, папка которого находится вне репозитория (в том числе через другой путь к тем же файлам), не учитывается. Первое открытие после запуска dsh читает все журналы чатов репозитория (около 4 с для 275 чатов); последующие открытия читают только чаты, изменившиеся с тех пор.
259
271
  - **Ветка Git в строках чатов** показывает ветку папки чата на момент начала или конца его последнего хода, а не текущую ветку: переключение ветки вне хода появится после следующего хода. У чатов, созданных до этой версии, метки нет до их следующего хода. Метка встроена в разметку строк чатов dsh (в dsh нет для неё отдельного места); если обновление dsh изменит эту разметку, метка не появится. Метка видна только в режиме «Одним списком».
260
272
  - **Ветка для каждого чата** в режиме плана: dsh отправляет `/plan <сообщение>` как команду, а не как сообщение, поэтому Composer Plus перехватывает отправку команды в поле ввода dsh (это не публичный API). Если обновление dsh это изменит, `/plan <сообщение>` при выбранном пункте **Новая ветка** выполнится на открытом экране нового чата как собственная команда dsh. Если Host не может включить режим плана в новом чате, папка ветки остаётся, а сообщение не отправляется, поэтому новый чат не меняет файлы в режиме по умолчанию.
@@ -279,6 +291,8 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
279
291
  - **Продолжить в новом чате** отправляет чат (сообщения, вызовы инструментов и конец каждого результата инструмента, не более примерно 60 000 символов, самую новую часть) собственной модели чата. Заметка для передачи может пропустить решение или файл: прочитайте её перед запуском. Новый чат знает только заметку и связанный чат (dsh прикрепляет старый чат как контекст только для чтения); его контекст модели начинается с малого, а старый чат остаётся как есть. Для одного чата одновременно идёт только одна заметка или один запуск.
280
292
  - **Состав контекста** показывает оценки по собственному правилу dsh (около 4 символов на токен), тому же правилу, что и у кольца контекста dsh; собственный подсчёт модели может отличаться. Определения инструментов взяты из самого нового запроса. Функция показывает контекст так, как он записан в журнале чата; ход, который идёт сейчас, появляется после своего следующего шага.
281
293
  - **Запланированные шаги** экономят токены, только когда модель действительно планирует: пока функция включена, каждый запрос несёт инструмент `plan_next_steps` и короткую инструкцию (около 500 токенов), даже в чатах, где модель никогда не планирует. Условие доказывает только то, что в нём сказано (например: код выхода сборки был 0), а не то, что работа сделана верно. `ok` читает собственные отметки результата dsh (`[exit code: N]`, тайм-ауты, отказы песочницы); команда, которая завершилась неудачей без ненулевого кода выхода, считается успешной. Шаги выполняются по одному; два шага, готовые одновременно, возвращаются модели. Сообщение шага сохраняется как сообщение ассистента модели чата (в dsh нет отметки для сообщения, написанного плагином), поэтому его текст говорит, что шаг запустил Composer Plus. В Tether нет.
294
+ - **Пакет навыка для турецкого** устанавливает сторонний навык: его правила приходят из репозитория автора на GitHub, а не из Composer Plus, и новая версия используется со следующей ежедневной проверки без нашего просмотра. Проверка доказывает, что файлы — те, которые GitHub перечисляет для этого коммита, но не то, что правила хороши. Когда загружать навык, решает модель (вы также можете вызвать его по имени); правила относятся только к турецким текстам. Host-часть использует язык, о котором браузер сообщил последним: если два браузера используют разные языки, действует более новый. Без входа GitHub разрешает 60 запросов к API в час; при отказе проверка сохраняет установленную копию и показывает причину в настройках.
295
+ - **Распутать кодовую базу** содержит фиксированную копию навыка (caldoai/skills, коммит f3cf477): изменение в оригинале приходит только с новой версией Composer Plus. Навык выполняет долгую цель, которая может изменить много файлов, а его субагенты и проверки тратят много токенов. Там, где у проекта нет тестов, он может незаметно изменить поведение: запускайте его в отдельной ветке и читайте diff перед слиянием. Навык с тем же именем в проекте, в своей папке навыков или в `~/.dsh/skills` заменяет его. Пока переключатель выключен, `/untangle-codebase` уходит модели как обычный текст.
282
296
  - **Доска задач** показывает чаты, которые dsh перечисляет в этом окне: чат вне проекта виден только в **Все проекты**, а папка ветки для каждого чата (`<project>/.worktrees/<name>`) считается частью своего проекта. Колонка карточки — это живое состояние чата, поэтому карточки нельзя перетаскивать: чат переходит в **Готово**, когда его ход заканчивается, в том числе после ошибки или остановки, и возвращается в **В работе**, когда снова запускается. Зелёная точка — это собственная точка завершения dsh, которую dsh хранит только в этом окне: после перезагрузки завершённые чаты показываются без неё. **Готово** показывает 50 последних чатов (**Показать более старые: N** показывает остальные). **Поиск проектов** находит проект только по названию, а не по пути к его папке. **Активные за последние 2 часа** скрывает проект, если каждый его чат старше 2 часов, неактивен и прочитан; доска всё равно показывает выбранный вами проект. **Новая задача** помнит только последний новый чат этого окна: если вы открываете другой чат до первого сообщения, тот чат остаётся в самом верху колонки **В работе** как **Новая задача**, пока вы в нём не напишете, но доска возвращается сама только для последнего. После перезагрузки новый чат без сообщения не показывается на доске (dsh хранит его как свой пустой «Новый сеанс»). Теги берутся из одного вызова модели на каждую задачу, по её первому сообщению: они могут быть ошибочными, а у чата, который вы начали не на доске, их нет. Название — это собственное название чата в dsh (служба названий dsh, с моделью чата); пока его нет, карточка показывает первую строку первого сообщения. **×** и **Очистить всё** только убирают карточки с доски: ни один чат не удаляется. Кнопка **Отменить** видна только 8 секунд и только в этом окне; позже карточку возвращает **Убранные (N)** → **Вернуть на доску**, а чат, который снова запускается, возвращается сам. **Очистить всё** сначала спрашивает и убирает прочитанные завершённые карточки показанного проекта (при **Все проекты** — всех проектов), в том числе те, что скрыты за **Показать более старые: N**; непрочитанная (зелёная) карточка остаётся. dsh хранит свою зелёную точку только в этом окне, поэтому после перезагрузки «Очистить всё» может убрать карточку, ответ в которой вы не прочитали. Список хранится на этом Mac и действует для всех окон и для Tether; когда в нём 5 000 чатов, самые старые возвращаются. **Ответить** отвечает только на последний запрос чата: если на него уже ответили в другом месте (другое окно, Tether, автопроверка) или чат спрашивает что-то новое, панель сообщает об этом и ничего не отправляет. В прежних версиях был список задач с комментариями и инструментами для агентов; их больше нет, а старый `board.json` не показывается. Идея и внешний вид взяты из [Kanzo](https://github.com/emanuele-em/kanzo) от emanuele-em (AGPL-3.0); Composer Plus не использует его код. `Cmd+Shift+K` — сочетание клавиш dsh: в браузере на Linux у него нет клавиши по умолчанию (задайте её на странице сочетаний клавиш dsh), а расширение браузера или другое приложение может перехватить её раньше. Карточка уходит из **Готово**, когда исчезает зелёная точка dsh (вы открыли чат), а для чата, который завершился за доской, будучи открытым чатом, — когда этот чат показан без панели поверх него. Это состояние «прочитано» хранится только в этом окне dsh, как и точки dsh: после перезагрузки или в другом окне каждый завершённый чат считается прочитанным и находится в **Недавно завершённые**.
283
297
  - **Приоритет сообщения после остановки** работает только после того, как вы остановили чат (или после хода с ошибкой, или когда вы открываете чат, у которого ещё есть очередь): сообщение, отправленное во время хода, по-прежнему ждёт в конце очереди. Оно обгоняет только ваши собственные сообщения в очереди: если в очереди ждёт раунд цели или ответ на вопрос, остаётся порядок dsh. Функция читает часть dsh, которая не является публичным API (завершается ли ещё остановленный ход); если обновление dsh её переименует, сообщение встанет первым только после завершения этого хода. Чаты субагентов сохраняют порядок dsh.
284
298
  - **Память проекта** принадлежит первой папке чата (папке проекта dsh): чат, который меняет папку командой `cd`, сохраняет память своего первого проекта, а та же папка, открытая по другому пути к тем же файлам, использует ту же память. Чат замораживает свой раздел памяти при запуске, поэтому заметка, сохранённая позже, появляется со следующего чата (`memory_recall` находит её сразу). Разбор сохраняет только то, что решила сохранить модель: он может пропустить факт или сохранить неверный; проверьте их в **Открыть память** и измените там, или правьте файлы вручную, когда dsh закрыт. **Открыть память** отправляет заметки выбранного проекта и глобальные заметки (все проекты, если выбрано «Все заметки»; не больше примерно 60 000 символов, остальные только считаются и не могут измениться в этом запросе) и ваш текст модели dsh по умолчанию, а не модели чата. Предпросмотр хранится на Mac 30 минут и до перезапуска dsh; если за это время разбор или агент изменят заметки, **Применить** откажет, и нужно запросить предпросмотр снова. **Применить** сохраняет все изменения предпросмотра или ни одного: если одно изменение нельзя сохранить (например, MEMORY.md заполнен), заметки остаются как были, и показывается причина. Каждый завершённый ход с вашим сообщением стоит одного вызова модели; неудачный вызов перечитывает те же сообщения после следующего хода. Чаты субагентов не разбираются. Идея и формат файлов взяты из [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); Composer Plus не использует его код и никогда не читает и не записывает собственную память DS Bot.
@@ -293,6 +307,8 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
293
307
  - **Восстановить** можно только в аварийной консоли, пока dsh закрыт: восстановление заменяет всю домашнюю папку dsh. Старая остаётся рядом как `.dsh.pre-restore-<time>`, пока вы её не удалите, поэтому на диске нужно место для обеих. Чаты сохраняют пути своих проектов: на другом компьютере проект по другому пути показывается как отсутствующий, пока вы не добавите его снова. Символические ссылки, которые указывают за пределы домашней папки dsh (например, навыки, подключённые ссылкой из другой папки), возвращаются как ссылки; их цели должны существовать на том компьютере.
294
308
  - **Проверка журналов сеансов** читает самый новый журнал каждого чата по собственным правилам dsh о том, что открывается: строка, которая не является JSON или стоит не по порядку, считается повреждением, только когда после неё идёт конец хода (иначе dsh открывает чат без строк начиная с этой, поэтому чат не попадает в список). Она не сверяет события журнала с собственными правилами событий dsh, поэтому журнал, который она считает исправным, всё равно может не открыться после обновления dsh. Исправление берёт копию из резервной копии: сообщения после этой резервной копии из чата пропадают (повреждённый файл остаётся рядом). Чат, открытый в этом dsh, в Настройках не исправляется: его удерживает dsh.
295
309
  - **Автоматическое резервное копирование** работает, только пока работает dsh: копия, срок которой наступил, пока dsh был закрыт, создаётся примерно через 45 с после следующего запуска. Снимок для новой версии создаётся после этого запуска, а не перед обновлением.
310
+ - **Запоминать размер окна** работает только в настольном приложении. При каждом запуске dsh сначала показывает окно размером 1280 × 820; окно переходит к сохранённому размеру, когда загружается плагин. У страницы нет события для перемещения окна, поэтому плагин читает окно раз в секунду: изменение за последние 2 секунды перед закрытием dsh не сохраняется. Размер хранится для каждого компьютера в собственном хранилище приложения.
311
+ - **Подсчёт использования:** считает копии, а не людей: каждая домашняя папка dsh — это одна копия. Подсчёт уникальных копий (`installed.txt`) учитывает только копии, которые обновились до первой версии с этим файлом или до более новой; копия, которая осталась на более старой версии, не учитывается. Копия, у которой удалили папку `storages`, засчитывается снова. GitHub может засчитать как один запросы с одного IP-адреса (например, с нескольких компьютеров за одним NAT-маршрутизатором), пришедшие примерно за 10 минут.
296
312
  - Встроенную поддержку запросили у разработчиков dsh: `move` для очереди в [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), состояние «Продолжить» в [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
297
313
 
298
314
  ## Частые вопросы
@@ -363,6 +379,8 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
363
379
 
364
380
  **Как ответить только на часть длинного ответа?** Выделите эту часть и нажмите **Цитировать** над выделением (**Цитата в ответе**, включена по умолчанию). Часть попадёт в поле ввода как цитата `> …`, а ниже вы напишете ответ.
365
381
 
382
+ **Как показать агенту точные строки файла?** Откройте файл на правой боковой панели (**Файлы рабочей области**), выделите строки и нажмите **Цитировать** над выделением (**Цитата из предпросмотра файла**, включена по умолчанию). В поле ввода попадут путь и номера строк (например, `src/login.js:2-3`) и сами строки как блок кода; напишите свой вопрос ниже.
383
+
366
384
  **Можно ли спросить что-то, пока агент работает, не останавливая его?** Напишите вопрос и нажмите **Спросить в побочном чате** в поле ввода (**Побочный чат**, включено по умолчанию). Копия чата только для чтения ответит, а чат продолжит работу. В побочном чате **Вернуть** помещает ответ в поле ввода чата.
367
385
 
368
386
  **Как сказать агенту, что изменить в его diff?** В разделе **Панель изменений** откройте diff файла, нажмите **+** у строки и напишите заметку (**Заметки к diff**, включено по умолчанию). Затем нажмите **Отправить в поле ввода**: заметки попадут в поле ввода вместе с файлом, номерами строк и самими строками.
@@ -371,7 +389,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
371
389
 
372
390
  **Я потерял iPhone. Как не дать ему подключаться к моему Mac?** Нажмите **Мобильное подключение** внизу слева на боковой панели и нажмите **Remove** рядом с этим iPhone. Его ключ сразу перестаёт работать; вернуться он сможет только после нового сопряжения, которое вы подтвердите на Mac.
373
391
 
374
- **Как продолжить на этом Mac чат с другого моего Mac?** На другом Mac включите **Настройки → Composer Plus → Удалённые компьютеры** и **Разрешить другим компьютерам открывать этот Mac**, нажмите **Создать ссылку для сопряжения** и скопируйте ссылку (отправьте её себе, например через AirDrop или «Заметки»). На этом Mac тоже включите **Удалённые компьютеры**, выберите **Добавить компьютер…** слева от заголовка чата, вставьте ссылку и нажмите **Подключить**. Затем нажмите **Одобрить** на другом Mac. После этого выбирайте этот компьютер в том же меню.
392
+ **Как продолжить на этом Mac чат с другого моего Mac?** На другом Mac включите **Настройки → Composer Plus → Удалённые компьютеры** и **Разрешить другим компьютерам открывать этот Mac**, нажмите **Создать ссылку для сопряжения** и скопируйте ссылку (отправьте её себе, например через AirDrop или «Заметки»). На этом Mac тоже включите **Удалённые компьютеры**, выберите **Добавить компьютер…** в меню выбора на левой боковой панели (справа от названия приложения, над **Новый сеанс**), вставьте ссылку, введите **Имя** и нажмите **Подключить**. Затем нажмите **Одобрить** на другом Mac. После этого выбирайте этот компьютер в том же меню: он займёт это окно. Чтобы вернуться, выберите **Этот Mac** в том же месте. Тем временем чаты этого Mac продолжают работать.
375
393
 
376
394
  **Можно ли заблокировать Tether с помощью Face ID?** Да: в Tether включите «Settings → Privacy → Lock with Face ID». После этого Tether запрашивает Face ID (или код-пароль) при открытии и при возврате в приложение.
377
395
 
@@ -403,6 +421,12 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
403
421
 
404
422
  **Может ли dsh выполнить следующую команду, не спрашивая модель снова?** Да, с помощью **Запланированные шаги** (по умолчанию выключено): включите функцию в Настройки → Composer Plus. Тогда модель может планировать следующие команды с условием, например «запусти тесты, если сборка прошла», и Composer Plus выполняет шаг без нового вызова модели, когда результат выполняет условие. Подтверждения и песочница остаются как есть.
405
423
 
424
+ **Откуда берётся турецкий навык и можно ли его удалить?** Из [yucezerey/turkish-anti-ai-skill](https://github.com/yucezerey/turkish-anti-ai-skill) на GitHub (MIT). Composer Plus устанавливает его, только пока **Язык приложения** — Türkçe, хранит только его файлы Markdown и не запускает ни одного его скрипта. Чтобы удалить его, выключите **Пакет навыка для турецкого** в Настройки → Composer Plus: навык и загруженная копия сразу удаляются.
425
+
426
+ **Как сообщить об ошибке в Composer Plus или попросить новую функцию?** Настройки → Composer Plus → **Сообщить о проблеме…** (или меню **…** чата → **Сообщить о проблеме с Composer Plus…**). Выберите тип, напишите описание на своём языке и нажмите **Написать черновик**. Проверьте черновик на английском, затем нажмите **Открыть issue**.
427
+
428
+ **Как агенту навести порядок в запутанном коде?** Введите `/untangle-codebase` в чате (**Распутать кодовую базу**, включено по умолчанию), при желании с областью, например `/untangle-codebase src/api`. Сначала агент перечисляет копии, скрытые связи, лишние обёртки, мёртвый код и особые случаи, затем исправляет их как цель и снова проверяет с помощью субагентов. Запускайте его в чате функции **Ветка для каждого чата**, чтобы работа осталась в отдельной ветке.
429
+
406
430
  **Работает ли плагин с настольным приложением?** Да: Настройки → Плагины → **Добавить плагин** → `dsh-composer-plus`. Проверено на dsh 0.2.0-rc.2 (настольное приложение и веб) и 0.2.1-rc.2 (веб).
407
431
 
408
432
  ## Разработка
@@ -422,6 +446,8 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/t
422
446
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-agentbox-ideas.mjs /path/to/dsh/lib/bin.js
423
447
  # Reject with note, Secret input, Quote in reply, Side chat and Diff notes (fake model + a test-only approval gate): the button on dsh's card, the note after the rejection in the next request, Esc; the secret card, Save, the value in no request, file or page, Decline, Stop; a selected part of an answer → Quote → the sent message; a side question while the chat waits on a card (read-only, no queued message in it), Bring back; notes on a diff line and range → Send to composer → the sent message; switch off + their thumbnails
424
448
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-t3code-ideas.mjs /path/to/dsh/lib/bin.js
449
+ # Quote from file preview (fake model): lines of a code, text, Markdown and PDF file in the right sidebar → Quote → the path, the line numbers and the lines in the sent message; no button for the path header; switch off + its thumbnail
450
+ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-preview-quote.mjs /path/to/dsh/lib/bin.js
425
451
  # every Settings feature row shows a loading screenshot and a ? link to its README row
426
452
  PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
427
453
  # What's new after an update: the release notes show once (also after an install through another path), Esc and Close close them; Settings → What’s new in this version opens them again
@@ -494,3 +520,5 @@ PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/b
494
520
  ## License
495
521
 
496
522
  MIT
523
+
524
+ `assets/skills/untangle-codebase/SKILL.md` — это навык `untangle-codebase` из [caldoai/skills](https://github.com/caldoai/skills), © 2026 Maze, лицензия MIT ([его лицензия](assets/skills/untangle-codebase/LICENSE)).