dsh-composer-plus 1.10.0 → 1.11.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.de.md +35 -14
- package/README.es.md +35 -14
- package/README.fr.md +35 -14
- package/README.hi.md +35 -14
- package/README.id.md +35 -14
- package/README.ja.md +35 -14
- package/README.ko.md +35 -14
- package/README.md +35 -14
- package/README.pt-BR.md +35 -14
- package/README.ru.md +35 -14
- package/README.tr.md +35 -14
- package/README.vi.md +35 -14
- package/README.zh.md +35 -14
- package/assets/features/exportMarkdown.webp +0 -0
- package/assets/features/featureIdeas.webp +0 -0
- package/assets/features/nextPrediction.webp +0 -0
- package/assets/features/projectPicker.webp +0 -0
- package/assets/features/typingCompletion.webp +0 -0
- package/client.js +891 -52
- package/index.js +502 -14
- package/package.json +2 -2
- package/tether/gateway/admin.html +158 -84
- package/tether/gateway/server.mjs +78 -11
package/README.ru.md
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
|
|
9
9
|
Это перевод. Эталонная версия — английский [README.md](README.md).
|
|
10
10
|
|
|
11
|
-
Удобные функции в стиле Codex для настольного и веб-интерфейса [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh): панель изменений, идеи функций в виде карточек, которые можно смахивать, поиск по тексту сообщений на боковой панели, откат хода с восстановлением файлов, удаление чата в Корзину, название проекта под полем ввода, статус проекта на боковой панели, история ввода, быстрое переключение режима плана, продолжение в один клик, продолжение работающих чатов после перезапуска, перетаскивание в очереди, ссылки на сеансы, разрешения автопроверки для отдельного чата, фоновые уведомления, доступ с iPhone через приложение Tether и автоматические обновления.
|
|
11
|
+
Удобные функции в стиле Codex для настольного и веб-интерфейса [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh): панель изменений, идеи функций в виде карточек, которые можно смахивать, поиск по тексту сообщений на боковой панели, откат хода с восстановлением файлов, удаление чата в Корзину, название проекта под полем ввода, статус проекта на боковой панели, история ввода, быстрое переключение режима плана, продолжение в один клик, продолжение работающих чатов после перезапуска, перетаскивание в очереди, ссылки на сеансы, экспорт чата в Markdown, разрешения автопроверки для отдельного чата, фоновые уведомления, доступ с iPhone через приложение Tether и автоматические обновления.
|
|
12
12
|
|
|
13
|
-
**Коротко:** это один плагин для DeepSeek Harness (npm `dsh-composer-plus`, в разделе Настройки → Плагины он называется **Composer Plus**). Он добавляет панель изменений git, карточки идей функций в стиле Tinder, поиск на боковой панели, который находит и слова в сообщениях, откат хода ↶ (только чат или чат и файлы), удаление чата, название проекта под полем ввода, историю ввода по ↑/↓, переключатель `/plan` по Shift+Tab, кнопку ▶ «Продолжить» в один клик, продолжение после перезапуска, изменение порядка очереди перетаскиванием, копирование ссылки на сеанс, «Разрешить для этого чата» для автопроверки, фоновые уведомления, доступ с iPhone (мобильное подключение, приложение Tether), 11 дополнительных языков интерфейса и автоматические обновления.
|
|
13
|
+
**Коротко:** это один плагин для DeepSeek Harness (npm `dsh-composer-plus`, в разделе Настройки → Плагины он называется **Composer Plus**). Он добавляет панель изменений git, карточки идей функций в стиле Tinder, поиск на боковой панели, который находит и слова в сообщениях, откат хода ↶ (только чат или чат и файлы), удаление чата, название проекта под полем ввода, историю ввода по ↑/↓, переключатель `/plan` по Shift+Tab, кнопку ▶ «Продолжить» в один клик, продолжение после перезапуска, изменение порядка очереди перетаскиванием, копирование ссылки на сеанс, экспорт в Markdown, «Разрешить для этого чата» для автопроверки, фоновые уведомления, доступ с iPhone (мобильное подключение, приложение Tether), 11 дополнительных языков интерфейса и автоматические обновления.
|
|
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). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
|
|
17
|
+
Неофициальный плагин сообщества. Сетевые запросы плагин делает только для проверки обновлений (выпуски GitHub и реестр npm). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Предсказание следующего сообщения** (по умолчанию включено) обращается к модели, выбранной в настройках (по умолчанию это модель dsh, если вы не выберете другую), один раз после каждого завершённого хода, без нажатия. Чтобы остановить эти запросы, выключите его в **Настройки → Composer Plus**. **Дополнение при вводе** (по умолчанию выключено) после включения обращается к выбранной для него модели (по умолчанию это модель предсказания) при каждой паузе в наборе. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
|
|
18
18
|
|
|
19
19
|
## Установка
|
|
20
20
|
|
|
@@ -29,14 +29,14 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Затем перезапустите dsh. (CLI не может устанавливать плагины в профиль настольного приложения: им управляет само приложение.)
|
|
31
31
|
|
|
32
|
-
> pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.
|
|
32
|
+
> pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.11.0`.
|
|
33
33
|
|
|
34
34
|
## Функции
|
|
35
35
|
|
|
36
36
|
| Функция | Как пользоваться | Снимок экрана |
|
|
37
37
|
|---|---|---|
|
|
38
38
|
| **Панель изменений** | Правая боковая панель → `+` → **Изменения**. Выберите **Незафиксированные**, **Непроиндексированные**, **Проиндексированные** или **Ветка**: вы увидите изменённые файлы со счётчиками `+/-`. Нажмите на файл, чтобы открыть его diff. **Последний ход** открывает встроенный обзор dsh для последнего хода. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Снимок экрана: Панель изменений"></a> |
|
|
39
|
-
| **Идеи функций** | Правая боковая панель → `+` → **Идеи функций** → **Предложить функции**. Модель чата читает краткую сводку проекта этого чата (файлы верхнего уровня, начало README и манифеста, последние 15 коммитов) и предлагает до 8 функций. Они появляются стопкой карточек на языке интерфейса dsh. Смахните карточку вправо (или нажмите **✓**, или клавишу `→`; в любом случае карточка улетает в свою сторону), чтобы начать новый чат в том же проекте. Чат начинается в режиме плана, а идея становится запросом, поэтому до одобрения плана ничего не меняется. Чтобы обойтись без плана, нажмите **▶ Создать сразу** (или клавишу `↑`; карточка улетает вверх): новый чат сразу начинается с идеей как обычным запросом, и модель вносит изменение и запускает свои проверки (одобрения действуют как обычно). Смахните влево (или **✕**, или `←`), чтобы пропустить карточку. **Отменить** (или `Z`) возвращает пропущенную карточку. Нажмите **↓** (или клавишу `↓`), чтобы отложить хорошую идею: она попадает в список проекта **На потом**. Этот список виден в каждом чате из той же папки проекта (и после перезапуска). **На потом (N)** открывает список. **Спланировать** начинает для идеи такой же чат в режиме плана, а **Создать сразу** — чат без плана; обе кнопки убирают её из списка. **Спланировать все (N)** начинает один чат в режиме плана для всех идей из списка, поэтому общие части планируются один раз. **Убрать из списка** удаляет её. **Ещё идеи** добавляет карточки. В одном проекте идея не предлагается дважды: каждая предложенная идея (пропущенная, отложенная или начатая) попадает в список проекта **История**, модель получает указание больше не предлагать эти идеи, а идея с повторным заголовком отбрасывается. **История** показывает их с пометкой **Начата** или **Предложена**; **Забыть** (или **Забыть все**) позволяет идее появиться снова; идея, которая ещё есть в списке **На потом**, не попадает в предложения, пока вы не уберёте её оттуда. Модель запускается, только когда вы нажимаете кнопку. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Снимок экрана: Идеи функций"></a> |
|
|
39
|
+
| **Идеи функций** | Правая боковая панель → `+` → **Идеи функций** → **Предложить функции**. Модель чата читает краткую сводку проекта этого чата (файлы верхнего уровня, начало README и манифеста, последние 15 коммитов) и предлагает до 8 функций. Они появляются стопкой карточек на языке интерфейса dsh. Смахните карточку вправо (или нажмите **✓**, или клавишу `→`; в любом случае карточка улетает в свою сторону), чтобы начать новый чат в том же проекте. Чат начинается в режиме плана, а идея становится запросом, поэтому до одобрения плана ничего не меняется. Чтобы обойтись без плана, нажмите **▶ Создать сразу** (или клавишу `↑`; карточка улетает вверх): новый чат сразу начинается с идеей как обычным запросом, и модель вносит изменение и запускает свои проверки (одобрения действуют как обычно). Смахните влево (или **✕**, или `←`), чтобы пропустить карточку. **Отменить** (или `Z`) возвращает пропущенную карточку. Нажмите **↓** (или клавишу `↓`), чтобы отложить хорошую идею: она попадает в список проекта **На потом**. Этот список виден в каждом чате из той же папки проекта (и после перезапуска). **На потом (N)** открывает список. **Спланировать** начинает для идеи такой же чат в режиме плана, а **Создать сразу** — чат без плана; обе кнопки убирают её из списка. **Спланировать все (N)** начинает один чат в режиме плана для всех идей из списка, поэтому общие части планируются один раз. **Убрать из списка** удаляет её. **Копировать как чек-лист** копирует весь список в буфер обмена как чек-лист Markdown (`- [ ] Title — Summary`, по одной строке на идею) для трекера задач или файла TODO; сетевых запросов при этом нет. **Ещё идеи** добавляет карточки. Чтобы получить идеи только по одной области, введите короткую тему в поле **Тема** рядом с **Предложить функции** (не более 80 символов; `Enter` тоже запускает предложение) или нажмите одну из готовых тем под ним: **Производительность**, **Доступность**, **Тесты**, **Безопасность**, **Удобство** или **Документация** (повторное нажатие очищает тему). Тогда модель предлагает только функции по этой теме; пустое поле означает любые функции. В одном проекте идея не предлагается дважды: каждая предложенная идея (пропущенная, отложенная или начатая) попадает в список проекта **История**, модель получает указание больше не предлагать эти идеи, а идея с повторным заголовком отбрасывается. **История** показывает их с пометкой **Начата** или **Предложена**; **Забыть** (или **Забыть все**) позволяет идее появиться снова; идея, которая ещё есть в списке **На потом**, не попадает в предложения, пока вы не уберёте её оттуда. Модель запускается, только когда вы нажимаете кнопку. | <a href="assets/features/featureIdeas.webp"><img src="assets/features/featureIdeas.webp" width="160" alt="Снимок экрана: Идеи функций"></a> |
|
|
40
40
|
| **Поиск по содержимому** | Встроенный поиск dsh на боковой панели (лупа рядом с **Рабочие области**; `Cmd+K` в настольном приложении, `Cmd+Alt+K` в браузере) находит чаты не только по названию, но и по словам из ваших сообщений и ответов. Под чатом он показывает совпавший текст. Такой поиск в dsh уже есть, но выключен. Эта функция включает его и хранит поисковый индекс в файле на вашем компьютере. Индекс создаётся при первом поиске после запуска (около 15 с для 250 чатов, см. «Ограничения») и сохраняется для следующих запусков. Включено по умолчанию. Изменение действует после перезапуска dsh. | <a href="assets/features/contentSearch.webp"><img src="assets/features/contentSearch.webp" width="160" alt="Снимок экрана: Поиск по содержимому"></a> |
|
|
41
41
|
| **Откат хода** | Наведите указатель на своё сообщение и нажмите **↶** (рядом с кнопкой «Копировать»). **Только чат** убирает это сообщение и всё, что было после него (ответы, вызовы инструментов), из чата и из контекста модели. Само сообщение возвращается в поле ввода: измените его и отправьте снова. **Чат и файлы** сначала показывает файлы проекта, которые изменились после этого сообщения, а затем возвращает и их в прежнее состояние. Это касается и изменений, сделанных командами (`bash`), а не только инструментами редактирования dsh. Если ход выполняется, он сначала останавливается. Журнал чата никогда не переписывается: отозванную часть прячет одна скрытая метка, так же как встроенная команда dsh `/compact` прячет старые сообщения. Если установлен [dsh-rewind-plugin](https://www.npmjs.com/package/dsh-rewind-plugin), эту работу делает он, и Composer Plus не показывает вторую кнопку. | <a href="assets/features/turnRollback.webp"><img src="assets/features/turnRollback.webp" width="160" alt="Снимок экрана: Откат хода"></a> |
|
|
42
42
|
| **Удалить чат** | Боковая панель → меню **…** чата (или правый щелчок) → **Удалить…** → **Удалить**. Сам dsh умеет только архивировать. Чат останавливается (его ход, задания, субагенты и расписания — так же, как при встроенной архивации dsh). Его сохранённая история вместе с чатами субагентов перемещается в Корзину macOS (в других системах — в `$DSH_HOME/trash`). Чтобы вернуть чат, верните папку на место и перезапустите dsh: чат появится в фильтре **Только архивные** на боковой панели. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Снимок экрана: Удалить чат"></a> |
|
|
@@ -44,11 +44,15 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
44
44
|
| **История ввода** | В пустом поле ввода нажимайте `↑` / `↓`, чтобы листать отправленные сообщения, как в терминале. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Снимок экрана: История ввода"></a> |
|
|
45
45
|
| **Режим плана по Shift+Tab** | `Shift+Tab` добавляет `/plan ` в начало черновика (нажмите ещё раз, чтобы убрать). Если чат уже в режиме плана, `Shift+Tab` выходит из него. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Снимок экрана: Режим плана по Shift+Tab"></a> |
|
|
46
46
|
| **Сохранять фокус в поле ввода** | После отправки команды `/` или навыка курсор остаётся в поле ввода, и можно сразу печатать дальше. Это работает и для клавиатурных макросов, которые вводят команду и нажимают `Enter`. Пока dsh обрабатывает команду, поле ввода доступно только для чтения, и браузер снимает с него фокус. Эта функция возвращает фокус, если он не занят меню, диалогом или другим полем. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Снимок экрана: Сохранять фокус в поле ввода"></a> |
|
|
47
|
-
| **Продолжение в один клик** | После остановленного, завершившегося сбоем или оборванного хода в пустом поле ввода появляется **▶**. Один щелчок продолжает работу с текущего разговора. Ничего не нужно писать в поле ввода, и в чате не появляется новое сообщение. (Модель получает короткую скрытую заметку «продолжи с того места, где остановился», потому что некоторые провайдеры, например Claude, отклоняют запрос, который заканчивается ответом ассистента.) После завершённого хода остаётся обычная кнопка отправки. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Снимок экрана: Продолжение в один клик"></a> |
|
|
47
|
+
| **Продолжение в один клик** | После остановленного, завершившегося сбоем или оборванного хода в пустом поле ввода появляется **▶**. Один щелчок продолжает работу с текущего разговора. Ничего не нужно писать в поле ввода, и в чате не появляется новое сообщение. (Модель получает короткую скрытую заметку «продолжи с того места, где остановился», потому что некоторые провайдеры, например Claude, отклоняют запрос, который заканчивается ответом ассистента.) Сообщения в очереди остаются в ней: ▶ продолжает только остановленную задачу, а потом выполняется очередь. После завершённого хода остаётся обычная кнопка отправки. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Снимок экрана: Продолжение в один клик"></a> |
|
|
48
48
|
| **Продолжать после перезапуска** | По умолчанию выключено: включите функцию в **Настройки → Composer Plus**. Если выйти из dsh (или он закроется), пока чат работает, этот чат сам продолжит работу, когда вы снова откроете dsh. Он получает ту же скрытую заметку, что и при продолжении в один клик. Если выполнялся раунд цели (`/goal`), цель продолжается со следующего раунда (при каждом запуске dsh приостанавливает цели, пока вы их не возобновите). Чаты, которые вы остановили, которые завершились или завершились сбоем, не продолжаются. В самом dsh такой настройки нет: он только помечает такой ход как прерванный. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Снимок экрана: Продолжать после перезапуска"></a> |
|
|
49
49
|
| **Перетаскивание в очереди** | У сообщений в очереди появляется маркер (⠿). Перетащите его, чтобы изменить порядок, или переведите на него фокус и нажмите `↑` / `↓`. `Esc` отменяет перемещение. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Снимок экрана: Перетаскивание в очереди"></a> |
|
|
50
50
|
| **Копировать ссылку на сеанс** | Правый щелчок по чату на боковой панели → **Копировать ссылку на сеанс**. Вставьте ссылку `dsh-session:…` в другой чат, чтобы прикрепить этот чат как контекст только для чтения. В dsh 0.2.1 есть свой пункт **Копировать ID сеанса**, но он копирует только сам идентификатор. Пункт плагина стоит сразу после него. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Снимок экрана: Копировать ссылку на сеанс"></a> |
|
|
51
|
+
| **Экспорт чата в Markdown** | Правый щелчок по чату на боковой панели (или его меню **…**) → **Экспорт в Markdown…**. Диалог показывает, сколько сообщений в чате. **Копировать в буфер обмена** копирует чат как Markdown, а **Сохранить файл .md** сохраняет его как `<chat title>.md` через загрузку браузера (в настольном dsh — в папку «Загрузки» или через диалог сохранения, как настроено в системе). В файле есть название чата, название проекта и дата, а затем по одному разделу `## Вы` или `## Ассистент` на каждое сообщение. Блоки кода остаются как есть; блок кода, который сообщение оставило открытым, закрывается. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Снимок экрана: Экспорт чата в Markdown"></a> |
|
|
51
52
|
| **Копировать путь проекта** | Правый щелчок по проекту на боковой панели → **Копировать путь** копирует полный путь к его папке. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Снимок экрана: Копировать путь проекта"></a> |
|
|
53
|
+
| **Поиск проекта в новом чате** | Новый чат → кнопка проекта над полем ввода. Проекты показаны в порядке A–Z, а сверху есть поле **Поиск проектов**. Введите часть названия (регистр и диакритические знаки не важны) и нажмите `Enter`, чтобы выбрать первое совпадение. Если ничего не подходит, появляется **Нет подходящих проектов**. Сохранённый порядок проектов dsh на боковой панели не меняется. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Снимок экрана: Поиск проекта в новом чате"></a> |
|
|
54
|
+
| **Предсказание следующего сообщения** | По умолчанию включено: выключить функцию можно в **Настройки → Composer Plus**. Когда агент завершает ход (не остановленный и не завершившийся сбоем), пустое поле ввода серым текстом показывает предположение о вашем следующем сообщении и подсказку **Tab — принять**. `Tab` вставляет текст в поле ввода, но не отправляет его. `Esc` скрывает предположение до конца этого хода. Ввод текста тоже скрывает его, а новый ход заменяет его новым. Меню **Модель** под переключателем показывает собственные модели dsh (тот же список, что и в меню моделей dsh). По умолчанию выбран пункт **По умолчанию в dsh**: он следует модели dsh по умолчанию. Каждый завершённый ход стоит один короткий вызов модели. В Tether предположение появляется над пустым полем ввода: коснитесь его, чтобы вставить текст в поле. | <a href="assets/features/nextPrediction.webp"><img src="assets/features/nextPrediction.webp" width="160" alt="Снимок экрана: Предсказание следующего сообщения"></a> |
|
|
55
|
+
| **Дополнение при вводе** | По умолчанию выключено: включить функцию можно в **Настройки → Composer Plus**. Пока вы печатаете, серый текст сразу после курсора показывает, как может продолжиться ваше сообщение. `Tab` добавляет его в сообщение, но не отправляет. `Esc` скрывает его. Если вы набираете следующие буквы серого текста, он остаётся, без нового вызова модели. Под её переключателем есть своё меню **Модель**. Первый пункт, **Как у предсказания следующего сообщения**, использует модель **Предсказание следующего сообщения** (выбран по умолчанию). Выберите другую модель, чтобы у каждой функции была своя, например более быстрая модель для дополнений. Она делает один вызов модели при каждой паузе в наборе, поэтому расходует намного больше токенов, чем предсказание: выберите быструю и недорогую модель. Она не работает для слеш-команды, для сообщения со значком файла и когда курсор стоит не в конце. В Tether остаток текста появляется над полем, пока вы печатаете: коснитесь его, чтобы добавить. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Снимок экрана: Дополнение при вводе"></a> |
|
|
52
56
|
| **Разрешить для этого чата** | Когда автопроверка спрашивает вас, на карточке одобрения появляется кнопка **Разрешить для этого чата**. После этого тот же инструмент в том же чате разрешён с любыми аргументами. Значок в заголовке показывает список разрешений и позволяет их отозвать. Разрешения сохраняются после перезапуска. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Снимок экрана: Разрешить для этого чата"></a> |
|
|
53
57
|
| **Статус проекта** | Строка проекта на боковой панели показывает ту же метку, что и его чаты: индикатор выполнения, ожидание или «готово». Поэтому даже свёрнутый проект сообщает, что чат внутри работает или ждёт вас. Сначала показывается чат, который ждёт вас, затем завершённый чат, который вы ещё не открыли (зелёная точка, даже пока другой чат ещё выполняется), затем индикатор выполнения. Наведите на метку указатель, чтобы увидеть подробности. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Снимок экрана: Статус проекта"></a> |
|
|
54
58
|
| **Активные проекты сверху** | Когда чат начинает работать или ждёт вас, его проект перемещается в начало боковой панели со встроенной анимацией строк dsh (так же, как при перетаскивании). Завершённые проекты остаются на месте; их можно перетаскивать как обычно. Перемещения сохраняются в порядке проектов dsh, поэтому при отключении функции текущий порядок остаётся. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Снимок экрана: Активные проекты сверху"></a> |
|
|
@@ -57,14 +61,14 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
57
61
|
| **Сортировка по состоянию** | Боковая панель → параметры просмотра → **Сортировать** → **По состоянию** (вместе с **Одним списком**). Сначала идут завершённые чаты (с точкой dsh «готово»; её получает и ход, который закончился ошибкой), затем выполняющиеся или ожидающие чаты, затем чаты с активной автоматизацией (расписанием), затем остальные в порядке dsh. Когда вы открываете завершённый чат, он опускается ниже. Меняется только вид: чтобы вернуться, выберите **Вручную** или **По дате изменения**. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Снимок экрана: Сортировка по состоянию"></a> |
|
|
58
62
|
| **Фоновые уведомления** | Пока dsh работает в фоне, вы получаете уведомление, когда ход завершён (первая строка ответа) или когда чат действительно ждёт вас: одобрения (имя инструмента), ответа (сам вопрос) или проверки плана. Запрос должен оставаться открытым и через 1,5 с. Поэтому одобрения, на которые ответили автоматически (разрешения автопроверки, другие плагины), не вызывают уведомлений. Уведомление убирается, как только на его запрос ответили. Значок в Dock или на панели задач показывает число ожидающих чатов. Щелчок по уведомлению открывает этот чат. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Снимок экрана: Фоновые уведомления"></a> |
|
|
59
63
|
| **11 дополнительных языков интерфейса** | Настройки → 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="Снимок экрана: 11 дополнительных языков интерфейса"></a> |
|
|
60
|
-
| **Мобильное подключение (iPhone)** | Работайте с dsh на iPhone через приложение [Tether](tether/) в той же сети Wi-Fi или через [Tailscale](https://tailscale.com). Включите функцию в **Настройки → Composer Plus** (по умолчанию она выключена, потому что открывает сетевой порт на этом Mac). Затем нажмите **Мобильное подключение** внизу слева на боковой панели, отсканируйте QR-код в Tether и нажмите **Approve**. Телефон показывает ваши чаты, отправляет сообщения, отвечает на запросы одобрения и вопросы, переключает модели и агентов. Можно связать сколько угодно Mac: имя Mac вверху слева в приложении переключает между ними. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Снимок экрана: Мобильное подключение (iPhone)"></a> |
|
|
64
|
+
| **Мобильное подключение (iPhone)** | Работайте с dsh на iPhone через приложение [Tether](tether/) в той же сети Wi-Fi или через [Tailscale](https://tailscale.com). Включите функцию в **Настройки → Composer Plus** (по умолчанию она выключена, потому что открывает сетевой порт на этом Mac). Затем нажмите **Мобильное подключение** внизу слева на боковой панели, отсканируйте QR-код камерой iPhone (коснитесь **Open in Tether**) или кнопкой **Scan code** в Tether, коснитесь **Connect** и нажмите **Approve**. Сначала установите Tether: без него камера не сможет открыть код. Телефон показывает ваши чаты, отправляет сообщения, отвечает на запросы одобрения и вопросы, переключает модели и агентов. Можно связать сколько угодно Mac: имя Mac вверху слева в приложении переключает между ними. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Снимок экрана: Мобильное подключение (iPhone)"></a> |
|
|
61
65
|
| **Автоматические обновления** | При запуске dsh плагин проверяет [последний выпуск на GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Если он новее и уже есть в npm, плагин устанавливает именно эту версию через встроенный менеджер плагинов dsh (тем же путём, что и Настройки → Плагины) и уведомляет вас. **Перезапустите dsh**, чтобы загрузить её. **Настройки → Composer Plus → Обновления Composer Plus** показывает версию и кнопки **Проверить обновления** / **Обновить сейчас**. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Снимок экрана: Автоматические обновления"></a> |
|
|
62
66
|
|
|
63
67
|
Кнопки, подсказки, сообщения и уведомления показываются на выбранном языке dsh (см. «Язык приложения» ниже).
|
|
64
68
|
|
|
65
69
|
## Настройки
|
|
66
70
|
|
|
67
|
-
Каждую функцию можно включить или выключить отдельно: dsh **Настройки → Composer Plus**. В каждой строке есть маленький снимок экрана: наведите на него указатель, чтобы увидеть его крупнее, или нажмите, чтобы открыть в полном размере (`Esc` закрывает). Поле **Поиск функций** вверху фильтрует страницу по названию или описанию (на любом языке, без учёта регистра и диакритических знаков); `Esc` очищает его. В каждой строке есть переключатель и короткое описание. Изменения применяются сразу, без перезапуска, и запоминаются на этом устройстве. По умолчанию включено всё, кроме **Мобильное
|
|
71
|
+
Каждую функцию можно включить или выключить отдельно: dsh **Настройки → Composer Plus**. В каждой строке есть маленький снимок экрана: наведите на него указатель, чтобы увидеть его крупнее, или нажмите, чтобы открыть в полном размере (`Esc` закрывает). Поле **Поиск функций** вверху фильтрует страницу по названию или описанию (на любом языке, без учёта регистра и диакритических знаков); `Esc` очищает его. В каждой строке есть переключатель и короткое описание. Изменения применяются сразу, без перезапуска, и запоминаются на этом устройстве. По умолчанию включено всё, кроме **Мобильное подключение**, **Продолжать после перезапуска** и **Дополнение при вводе**. Переключатели этих трёх функций, а также **Поиск по содержимому**, **Откат хода** и **Предсказание следующего сообщения** хранит Host dsh, поэтому они действуют во всех окнах и сохраняются после перезапуска. Выбор в меню **Модель** для **Предсказание следующего сообщения** и для **Дополнение при вводе** (по умолчанию **Как у предсказания следующего сообщения**) тоже хранит Host. **Поиск по содержимому** меняется только после перезапуска dsh (dsh читает эту настройку при запуске). До этого в его строке написано **Перезапустите dsh, чтобы применить это изменение.**
|
|
68
72
|
|
|
69
73
|
<p align="center"><img src="docs/images/settings.webp" width="720" alt="Настройки → Composer Plus: поиск функций, выбор языка, строка обновлений и переключатель для каждой функции; при наведении показывается снимок экрана"></p>
|
|
70
74
|
|
|
@@ -92,6 +96,12 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
92
96
|
| `↓` | страница «Идеи функций» | сохранить верхнюю карточку в списке проекта «На потом» |
|
|
93
97
|
| `↑` | страница «Идеи функций» | создать верхнюю карточку сразу, без плана |
|
|
94
98
|
| `Z` | страница «Идеи функций» | вернуть последнюю пропущенную карточку |
|
|
99
|
+
| `Enter` | меню проектов нового чата, поле поиска | выбрать первое совпадение |
|
|
100
|
+
| `↑` / `↓` | меню проектов нового чата | переходить по показанным проектам |
|
|
101
|
+
| `Esc` | меню проектов нового чата, поле поиска | очистить поиск (нажмите ещё раз, чтобы закрыть меню) |
|
|
102
|
+
| `Tab` | пустое поле ввода с предсказанием | вставить предсказание в поле ввода |
|
|
103
|
+
| `Tab` | серое дополнение после курсора | добавить дополнение в сообщение |
|
|
104
|
+
| `Esc` | пустое поле ввода с предсказанием | скрыть предсказание |
|
|
95
105
|
|
|
96
106
|
Открытое меню `/` или `@` забирает эти клавиши себе.
|
|
97
107
|
|
|
@@ -108,16 +118,19 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
108
118
|
- **Идеи функций:** ничего не запускается, пока вы не нажмёте **Предложить функции**. Затем Host-часть читает только папку самого чата (браузер никогда не отправляет путь): имена записей верхнего уровня, первые 6 КБ файлов README, AGENTS.md и манифеста (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, …) и `git log --oneline -15`, всего не более 16 КБ. Она пропускает `.env*`, файлы ключей и папки вроде `node_modules` и читает только обычные файлы внутри папки: символическая ссылка за пределы папки, FIFO или устройство пропускаются. Эта сводка уходит одним запросом к модели, которую использует чат, через настройки провайдера самого dsh. Она не добавляется ни в один чат. В проекте ничего не записывается. Идея, смахнутая вправо, начинает новый чат в режиме плана, поэтому одобрения и проверка плана действуют как обычно. **Создать сразу** начинает чат без режима плана: модель может сразу менять файлы, с обычными одобрениями чата и автопроверкой. Идеи, отложенные на потом (заголовок, описание, обоснование, объём работы), хранятся вместе с путём к папке проекта в `storages/dsh-composer-plus/later.json` в домашней папке dsh (файл доступен только владельцу); в проект ничего не попадает. История предложенных идей (заголовок, описание, обоснование, объём работы, дата, начата ли идея) хранится так же, в `storages/dsh-composer-plus/idea-history.json`, не более 200 на проект (первыми удаляются самые старые); её заголовки уходят модели при следующем нажатии **Предложить функции** в этом проекте.
|
|
109
119
|
- **Поиск по содержимому:** никакой новый код не ищет по вашим чатам. Плагин только включает встроенный индекс сообщений 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`.
|
|
110
120
|
- **Откат хода:** перед каждым вашим сообщением 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`.
|
|
121
|
+
- **Экспорт чата в Markdown:** Host-часть читает только журнал самого чата (те же сообщения, которые показывает dsh) и передаёт их странице; она не читает файлы проекта и ничего не отправляет по сети. Markdown попадает только в ваш буфер обмена или в файл, который вы сохраняете.
|
|
111
122
|
- **Удалить чат:** перемещает в Корзину только папки журнала самого чата (`$DSH_HOME/sessions/<project>/<chat>`). Папку проекта функция не трогает.
|
|
112
123
|
- **Разрешить для этого чата:** разрешения хранятся в `$DSH_HOME/storages/dsh-composer-plus/grants.json` (доступ только для владельца). Разрешение действует для **одного конкретного инструмента в одном чате**. Если этот инструмент может выполнять запись, разрешение покрывает и любую запись. Отозвать его можно через значок в заголовке.
|
|
113
124
|
- Автопроверка по-прежнему выполняется при каждом вызове. Если проверка завершилась сбоем, вызов никогда не разрешается автоматически.
|
|
114
125
|
- **Мобильное подключение:** выключено, пока вы его не включите. Когда оно включено, Host-часть запускает шлюз Tether: HTTPS на порту 19390, который принимает подключения только из вашей подсети Wi-Fi и вашего tailnet (100.64.0.0/10), и страницу сопряжения на `127.0.0.1:19391` (только для этого Mac). Телефону нужен одноразовый код из QR-кода (действует 5 минут) и ваше подтверждение **Approve** на Mac. Телефон закрепляет сертификат шлюза. Mac хранит только хеш токена каждого телефона (30 дней, срок продлевается при использовании); **Revoke** сразу закрывает подключения этого телефона. Телефоны могут вызывать только разрешённый список методов dsh (чаты, запросы, вложения, слеш-команды, одобрения, вопросы, модели, агенты, цели), но не настройки, учётные данные, обозреватель файлов или терминал. Данные: `$DSH_HOME/storages/dsh-composer-plus/mobile/`. Подробности: [tether/README.md](tether/README.md).
|
|
115
126
|
- **Обновления:** 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: реестр, скрипты и совместимость версий. Предварительные выпуски и более старые версии никогда не устанавливаются.
|
|
127
|
+
- **Предсказание следующего сообщения:** по умолчанию включено. Чтобы остановить эти вызовы модели, выключите его в **Настройки → Composer Plus**. После каждого завершённого хода Host-часть отправляет ваши собственные сообщения в чате и текстовые ответы агента (без вывода инструментов, скрытого контекста и рассуждений), не более примерно 6 000 символов (самую новую часть), выбранной модели (по умолчанию это модель dsh, если вы не выберете другую). Это один запрос через настройки провайдера самого dsh. В чате ничего не сохраняется: предположение не попадает в историю чата. Переключатель и выбранная модель хранятся в `$DSH_HOME/storages/dsh-composer-plus/predict.json` (файл доступен только владельцу).
|
|
128
|
+
- **Дополнение при вводе:** выключено, пока вы его не включите. Когда оно включено, при каждой паузе в наборе Host-часть отправляет уже набранный текст, а также ваши собственные сообщения в чате и текстовые ответы агента (без вывода инструментов, скрытого контекста и рассуждений), не более примерно 3 000 символов чата, модели, выбранной для **Дополнение при вводе** (по умолчанию это модель **Предсказание следующего сообщения**). Новая пауза останавливает предыдущий запрос. В чате ничего не сохраняется. Переключатель хранится в `$DSH_HOME/storages/dsh-composer-plus/complete.json` (файл доступен только владельцу).
|
|
116
129
|
|
|
117
130
|
## Устранение неполадок
|
|
118
131
|
|
|
119
132
|
- **Нет уведомлений в macOS:** Системные настройки → Уведомления → DeepSeek Harness → разрешить. Выберите **Предупреждения**, чтобы уведомления оставались на экране.
|
|
120
|
-
- **После обновления dsh пропали ▶, маркеры очереди, статус проекта, фильтр недавних проектов, «Свернуть все проекты», «Копировать путь», «Разрешить для этого чата» или меню правого щелчка:** эти элементы привязаны к текущей HTML-разметке dsh, потому что в dsh пока нет для них отдельного места. Если dsh меняет эту разметку, они скрываются сами; больше ничего не ломается. Пожалуйста, откройте [issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
|
|
133
|
+
- **После обновления dsh пропали ▶, маркеры очереди, статус проекта, фильтр недавних проектов, «Свернуть все проекты», «Копировать путь», поле поиска проектов, предсказание следующего сообщения, дополнение при вводе, «Разрешить для этого чата» или меню правого щелчка:** эти элементы привязаны к текущей HTML-разметке dsh, потому что в dsh пока нет для них отдельного места. Если dsh меняет эту разметку, они скрываются сами; больше ничего не ломается. Пожалуйста, откройте [issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
|
|
121
134
|
- **«Не удалось обновить» или «установлена не из npm»:** копия, подключённая из локальной папки или переименованная, не может обновиться сама. Переустановите `dsh-composer-plus` в разделе Настройки → Плагины. В остальных случаях сообщение показывает первую строку ошибки pnpm; **Проверить обновления** повторяет попытку.
|
|
122
135
|
- **Мобильное подключение сообщает, что шлюз не запущен:** «no IPv4 address on en0» означает, что у этого Mac нет адреса Wi-Fi/Ethernet. «EADDRINUSE» означает, что порт 19390 или 19391 занят другим dsh (или приложением). Мобильное подключение может работать одновременно только в одном dsh.
|
|
123
136
|
- **Мобильное подключение, «Продолжать после перезапуска» или «Поиск по содержимому» просит «Перезапустите dsh»:** плагин обновился, пока dsh работал (или, для поиска по содержимому, вы изменили переключатель). Новое состояние загрузится после перезапуска.
|
|
@@ -126,12 +139,13 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
126
139
|
- **Пункт «Чат и файлы» недоступен (серый):** проект не является репозиторием git, нет снимка до этого сообщения (сообщение старше плагина, или его снимок вытеснили 50 более новых), или ни один файл не изменился.
|
|
127
140
|
- **При удалении появляется сообщение, что этот чат открыт в другом dsh:** второй dsh с той же домашней папкой dsh удерживает блокировку чата. Закройте это окно или dsh и удалите чат снова. До этого чат остаётся в архиве.
|
|
128
141
|
- **Чат не продолжился после перезапуска:** функция «Продолжать после перезапуска» была выключена, когда dsh завершил работу; вы сами остановили этот ход; ход уже закончился (готово или сбой); чат был в архиве; или работало больше 20 чатов (продолжаются 20 самых новых).
|
|
129
|
-
- **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.
|
|
142
|
+
- **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.11.0`), см. примечание об установке выше.
|
|
130
143
|
|
|
131
144
|
## Ограничения
|
|
132
145
|
|
|
133
146
|
- Продолжение без сообщения опирается на жизненный цикл dsh `agent/pre-step` → `agent/request`. Проверяйте совместимость при обновлении dsh.
|
|
134
|
-
- **Идеи функций** хранит карточки в памяти для каждого чата, пока не перезагрузится dsh или страница. После этого **Предложить функции** снова обращается к модели. Карточки приходят на том языке интерфейса dsh, который выбран в момент нажатия. Если вы смените язык, карточки, которые уже лежат в стопке, сохранят свой язык, а **Ещё идеи** использует новый. Модель видит только краткую сводку проекта, а не код, поэтому идея может повторять то, что в проекте уже есть: просто пропустите её. Новый чат запускается в режиме плана, только если в профиле есть команда dsh `/plan`; иначе идея уходит как обычное первое сообщение. Список **На потом** привязан к пути папки чата: та же папка, открытая через символическую ссылку, получает свой список. В нём хранится не более 50 идей на проект (удалите одну, чтобы добавить новые), и каждый заголовок только один раз. Перетаскивание карточки решает только «влево» или «вправо»; чтобы отложить её, используйте **↓**, а чтобы создать её сразу — **▶**. Повтор определяется только по заголовку: модель всё равно может предложить прежнюю идею под новым названием; пропустите её. Если модель отвечает только прежними идеями, ничего нового не появляется: нажмите ещё раз.
|
|
147
|
+
- **Идеи функций** хранит карточки в памяти для каждого чата, пока не перезагрузится dsh или страница. После этого **Предложить функции** снова обращается к модели. Карточки приходят на том языке интерфейса dsh, который выбран в момент нажатия. Если вы смените язык, карточки, которые уже лежат в стопке, сохранят свой язык, а **Ещё идеи** использует новый. Модель видит только краткую сводку проекта, а не код, поэтому идея может повторять то, что в проекте уже есть: просто пропустите её. Новый чат запускается в режиме плана, только если в профиле есть команда dsh `/plan`; иначе идея уходит как обычное первое сообщение. Список **На потом** привязан к пути папки чата: та же папка, открытая через символическую ссылку, получает свой список. В нём хранится не более 50 идей на проект (удалите одну, чтобы добавить новые), и каждый заголовок только один раз. Перетаскивание карточки решает только «влево» или «вправо»; чтобы отложить её, используйте **↓**, а чтобы создать её сразу — **▶**. Повтор определяется только по заголовку: модель всё равно может предложить прежнюю идею под новым названием; пропустите её. Если модель отвечает только прежними идеями, ничего нового не появляется: нажмите ещё раз. Узкая тема делает это более вероятным: выберите тему шире или очистите её. Тема остаётся в поле для каждого чата, пока не перезагрузится dsh или страница.
|
|
148
|
+
- **Экспорт чата в Markdown** включает только ваши сообщения и текстовые ответы ассистента. Вызовы инструментов и их вывод, рассуждения, изображения (их отмечает строка `[image]`), скрытый контекст и сообщения, которые убрал откат хода или dsh-rewind-plugin, в экспорт не попадают. Ответы одного хода объединяются в один раздел. В один экспорт входит не более примерно 4 миллионов символов; для более длинного чата экспорт содержит его первую часть и примечание.
|
|
135
149
|
- **Продолжать после перезапуска** продолжает ход, а не повторяет его. Вызов инструмента, который выполнялся в момент выхода, завершается результатом dsh «outcome unknown» (результат неизвестен). Модели сообщается, что не нужно повторять сделанную работу, но команда, которую небезопасно запускать дважды, может выполниться снова. Субагенты, одобрения и вопросы, которые были открыты, не восстанавливаются: их родительский чат продолжает работу и спрашивает снова. За один запуск продолжается не более 20 чатов.
|
|
136
150
|
|
|
137
151
|
- **Поиск по содержимому** — это встроенный поиск dsh, поэтому у него те же ограничения. Он ищет только в сообщениях пользователя и ассистента: не в выводе инструментов (команды, содержимое файлов, результаты) и не в рассуждениях. Фильтра по сообщениям пользователя, ассистента или инструментов нет. Он находит целые слова, а не части слов (`deploy` не находит `deployment`); буквы с диакритикой совпадают с буквами без неё (`seker` находит `şeker`). На каждый чат одна строка с фрагментом dsh длиной 240 символов, всего не более 20 строк.
|
|
@@ -139,7 +153,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
139
153
|
- **Поиск по содержимому** начинает действовать только после перезапуска dsh. Файл индекса общий для всех dsh, которые используют одну домашнюю папку dsh: запускайте одновременно только один такой dsh (dsh допускает одного владельца на файл индекса).
|
|
140
154
|
- **Откат хода** возвращает файлы только в репозитории git и только в папке чата. Он хранит 50 самых новых снимков на чат. Игнорируемые файлы (`.gitignore`, `info/exclude`, ваш глобальный файл игнорирования), пустые папки, символические ссылки и подмодули не возвращаются. Файл, который был игнорируемым в момент снимка, никогда не удаляется, даже если ход изменил правила игнорирования. Файл, который git не может прочитать, не попадает в снимок. Каждое ваше сообщение запускает один `git add --all` папки чата в закрытое хранилище. В очень большой папке с множеством неотслеживаемых файлов это может занять несколько секунд, и следующий вызов инструмента ждёт завершения (не более 10 с; затем снимок заканчивается в фоне). Если `git gc` вашего репозитория удалит объект, который нужен старому снимку, этот файл будет показан как не возвращённый. В поле ввода возвращается только текст сообщения: добавьте его изображения или файлы снова. У чатов субагентов нет ↶ (изменения файлов субагентом считаются изменениями чата, который его запустил). Экспортированный чат (`/export`) по-прежнему содержит отозванные сообщения. Идея одной скрытой метки, которая отзывает часть чата, взята из [dsh-rewind-plugin](https://github.com/SiriLee/dsh-rewind) от SiriLee (MIT); Composer Plus не использует его код.
|
|
141
155
|
- **Удалить чат** требует архивации dsh (dsh 0.2.0 и новее). Если чат (или один из чатов его субагентов) не останавливается за 15 с или его удерживает другой dsh, он остаётся в архиве, и ничего не перемещается. В системах, отличных от macOS, папка корзины должна быть на том же диске, что и история чатов. Открытый чат, который вы удалили, остаётся в памяти dsh (в архиве и скрытым) до перезапуска dsh. Очищайте Корзину сами: dsh этого не делает.
|
|
142
|
-
- В очереди dsh нет действия `move`, поэтому
|
|
156
|
+
- В очереди dsh нет действия `move`, поэтому Host-часть плагина перемещает само сообщение в очереди dsh (одно изменение, то же самое сообщение). Сообщения с изображениями или файлами тоже перемещаются. Перемещаются только ваши собственные сообщения: раунд цели или ответ на вопрос в очереди остаётся на своём месте. Если сообщение начинает отправляться, пока вы перетаскиваете, ничего не перемещается, и об этом сообщает уведомление.
|
|
143
157
|
- dsh 0.2.1 загружает обновление сразу, если новая версия не меняет никаких настроек dsh; в остальных случаях, а также в dsh 0.2.0, перезапустите dsh, чтобы загрузить его. Плагин никогда не перезапускает dsh за вас. Профили Web/CLI без менеджера плагинов dsh только сообщают о новой версии.
|
|
144
158
|
- **Сохранять фокус в поле ввода** возвращает фокус только после команды `/` или навыка. Пока dsh обрабатывает команду, поле ввода несколько миллисекунд доступно только для чтения, поэтому клавиши, нажатые в это время, теряются. Если меню `/` в dsh ещё открыто, `Enter` выбирает выделенную строку и ничего не отправляет.
|
|
145
159
|
- **Мобильное подключение** работает только в macOS (оно использует `en0`, `openssl`, `swift` и `dns-sd`). Оно использует фиксированные порты 19390 и 19391, поэтому на каждом Mac его может одновременно запускать только один dsh (каждый Mac — одна запись в списке Mac на телефоне). Телефон получает уведомления, только пока Tether открыт или только что ушёл в фон (сервиса push-уведомлений нет). Приложения для iOS пока нет в App Store: соберите его из `tether/ios` в Xcode.
|
|
@@ -148,6 +162,9 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
148
162
|
- Активные проекты перемещаются через сохранённый порядок проектов dsh, поэтому новый порядок сохраняется после перезапуска. Чаты вне проектов («Без группы») перемещать нельзя; dsh всегда показывает их последними.
|
|
149
163
|
- В меню параметров просмотра на боковой панели у dsh нет точки расширения, поэтому пункт фильтра недавних проектов добавляется во встроенное меню dsh. Если обновление dsh изменит это меню, пункт не появится, и все проекты останутся видны. Фильтр работает со строками проектов, поэтому режим **Одним списком** не фильтруется. Используйте фильтр с **По рабочей области**: в режиме **Дерево рабочих областей** скрытая родительская папка скрывает и активные проекты внутри неё. У **По состоянию** ограничение того же рода: в dsh нет места для своего порядка сортировки, поэтому пункт и порядок строк привязаны к разметке меню и списка dsh.
|
|
150
164
|
- В dsh нет ни меню строки проекта, ни места в заголовке «Рабочие области». **Копировать путь** находит строку проекта по разметке строк dsh, а **Свернуть все проекты** встраивается в заголовок dsh и закрывает каждый открытый проект тем же щелчком, что и строка проекта. Если обновление dsh изменит эту разметку, правый щелчок покажет меню браузера, а кнопка не появится.
|
|
165
|
+
- В меню проектов нового чата у dsh тоже нет точки расширения, поэтому поле **Поиск проектов** и порядок A–Z привязаны к разметке меню dsh. Если обновление dsh изменит эту разметку, меню будет выглядеть так, как его рисует dsh: в сохранённом порядке и без поля поиска. Порядок A–Z — только способ показа: он не меняет сохранённый порядок проектов dsh.
|
|
166
|
+
- Для подсказки в поле ввода у dsh тоже нет точки расширения, поэтому текст **Предсказание следующего сообщения** накладывается на собственный текст-заполнитель dsh (`[data-composer-placeholder]`). Если обновление dsh изменит эту разметку, предсказание не появится. Пока функция включена, каждый завершённый ход стоит один короткий вызов модели.
|
|
167
|
+
- **Дополнение при вводе** показывает свой текст через собственную подсказку поля ввода dsh (стиль `--dsh-composer-hint`, который dsh использует для подсказки аргумента слеш-команды). Функция не работает для слеш-команды, для сообщения со значком файла или символа и когда курсор стоит не в конце сообщения. Если обновление dsh изменит этот стиль, дополнение не появится. Каждая пауза в наборе стоит один вызов модели.
|
|
151
168
|
- Встроенную поддержку запросили у разработчиков dsh: `move` для очереди в [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), состояние «Продолжить» в [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
|
|
152
169
|
|
|
153
170
|
## Частые вопросы
|
|
@@ -170,6 +187,8 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
170
187
|
|
|
171
188
|
**Продолжает ли dsh работающие чаты после выхода и повторного запуска?** Сам по себе нет: dsh помечает такой ход как прерванный и ждёт (цель тоже ждёт команды `/goal resume`). Включите **Настройки → Composer Plus → Продолжать после перезапуска**: тогда чаты, которые работали в момент выхода из dsh, сами продолжат работу при следующем запуске.
|
|
172
189
|
|
|
190
|
+
**Какая модель пишет предсказание?** Модель, которую вы выбираете в **Настройки → Composer Plus → Предсказание следующего сообщения → Модель**. Это собственный список моделей dsh. **По умолчанию в dsh** следует модели dsh по умолчанию. Если dsh больше не показывает выбранную модель, предсказание использует модель по умолчанию. У **Дополнение при вводе** есть своё меню **Модель**: **Как у предсказания следующего сообщения** (по умолчанию) следует модели предсказания, а другой выбор действует только для дополнений. Если dsh больше не показывает эту модель, дополнения используют модель предсказания.
|
|
191
|
+
|
|
173
192
|
**Как изменить порядок сообщений в очереди dsh?** Перетащите маркер ⠿ на сообщении в очереди или переведите на него фокус и нажмите `↑` / `↓`.
|
|
174
193
|
|
|
175
194
|
**Как сделать, чтобы автопроверка не спрашивала об одном и том же инструменте в одном чате?** Нажмите **Разрешить для этого чата** на карточке одобрения. Разрешение действует только для этого инструмента в этом чате; отозвать его можно через значок в заголовке.
|
|
@@ -184,7 +203,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
184
203
|
|
|
185
204
|
**Как переключить интерфейс DeepSeek Harness на турецкий, испанский, японский…?** Настройки → Composer Plus → **Язык приложения**.
|
|
186
205
|
|
|
187
|
-
**Как пользоваться dsh с iPhone?** Соберите приложение Tether из `tether/ios` (Xcode), включите **Настройки → Composer Plus → Мобильное подключение (iPhone)**, нажмите **Мобильное подключение** внизу слева, отсканируйте QR-код в Tether и нажмите **Approve**. Вне дома используйте Tailscale на обоих устройствах.
|
|
206
|
+
**Как пользоваться dsh с iPhone?** Соберите приложение Tether из `tether/ios` (Xcode), включите **Настройки → Composer Plus → Мобильное подключение (iPhone)**, нажмите **Мобильное подключение** внизу слева, отсканируйте QR-код (камерой iPhone или кнопкой **Scan code** в Tether), коснитесь **Connect** и нажмите **Approve**. Вне дома используйте Tailscale на обоих устройствах.
|
|
188
207
|
|
|
189
208
|
**Работает ли плагин с настольным приложением?** Да: Настройки → Плагины → **Добавить плагин** → `dsh-composer-plus`. Проверено на dsh 0.2.0-rc.2 (настольное приложение и веб) и 0.2.1-rc.2 (веб).
|
|
190
209
|
|
|
@@ -208,8 +227,10 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/
|
|
|
208
227
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
|
|
209
228
|
# Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
|
|
210
229
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-resume-restart.mjs /path/to/dsh/lib/bin.js
|
|
211
|
-
# Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list + its thumbnail
|
|
230
|
+
# Feature ideas (fake model, made-up project): suggest, drag left, Undo, ✓ starts a new chat in plan mode, ▶ Build now one without, Plan all one for the Later list, a focus topic chip, Copy as checklist + its thumbnail
|
|
212
231
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
|
|
232
|
+
# Export chat as Markdown (fake model, made-up project): right-click → Export as Markdown…, copy and save keep the code blocks, switch off + its thumbnail
|
|
233
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-export-markdown.mjs /path/to/dsh/lib/bin.js
|
|
213
234
|
# Content search (fake model, made-up chats): a message-only word finds its chat with the snippet, switch off + restart = titles only + its thumbnail
|
|
214
235
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
|
|
215
236
|
# Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
|