dsh-composer-plus 1.9.0 → 1.10.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 +236 -0
- package/README.es.md +236 -0
- package/README.fr.md +236 -0
- package/README.hi.md +236 -0
- package/README.id.md +236 -0
- package/README.ja.md +236 -0
- package/README.ko.md +236 -0
- package/README.md +20 -14
- package/README.pt-BR.md +236 -0
- package/README.ru.md +236 -0
- package/README.tr.md +236 -0
- package/README.vi.md +236 -0
- package/README.zh.md +236 -0
- package/assets/features/featureIdeas.webp +0 -0
- package/assets/features/projectName.webp +0 -0
- package/assets/features/turnRollback.webp +0 -0
- package/client.js +259 -47
- package/index.js +122 -33
- package/package.json +2 -2
package/README.ru.md
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# dsh-composer-plus — Composer Plus для DeepSeek Harness
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-composer-plus)
|
|
4
|
+
[](https://github.com/furkancak1r/dsh-composer-plus/actions/workflows/test.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
[English](README.md) · [中文](README.zh.md) · [Türkçe](README.tr.md) · [Español](README.es.md) · [Português (Brasil)](README.pt-BR.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · **Русский** · [日本語](README.ja.md) · [한국어](README.ko.md) · [Bahasa Indonesia](README.id.md) · [Tiếng Việt](README.vi.md) · [हिन्दी](README.hi.md)
|
|
8
|
+
|
|
9
|
+
Это перевод. Эталонная версия — английский [README.md](README.md).
|
|
10
|
+
|
|
11
|
+
Удобные функции в стиле Codex для настольного и веб-интерфейса [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh): панель изменений, идеи функций в виде карточек, которые можно смахивать, поиск по тексту сообщений на боковой панели, откат хода с восстановлением файлов, удаление чата в Корзину, название проекта под полем ввода, статус проекта на боковой панели, история ввода, быстрое переключение режима плана, продолжение в один клик, продолжение работающих чатов после перезапуска, перетаскивание в очереди, ссылки на сеансы, разрешения автопроверки для отдельного чата, фоновые уведомления, доступ с iPhone через приложение Tether и автоматические обновления.
|
|
12
|
+
|
|
13
|
+
**Коротко:** это один плагин для DeepSeek Harness (npm `dsh-composer-plus`, в разделе Настройки → Плагины он называется **Composer Plus**). Он добавляет панель изменений git, карточки идей функций в стиле Tinder, поиск на боковой панели, который находит и слова в сообщениях, откат хода ↶ (только чат или чат и файлы), удаление чата, название проекта под полем ввода, историю ввода по ↑/↓, переключатель `/plan` по Shift+Tab, кнопку ▶ «Продолжить» в один клик, продолжение после перезапуска, изменение порядка очереди перетаскиванием, копирование ссылки на сеанс, «Разрешить для этого чата» для автопроверки, фоновые уведомления, доступ с iPhone (мобильное подключение, приложение Tether), 11 дополнительных языков интерфейса и автоматические обновления.
|
|
14
|
+
|
|
15
|
+
<p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness с Composer Plus: у работающего проекта на боковой панели крутится индикатор, а панель изменений показывает git diff"></p>
|
|
16
|
+
|
|
17
|
+
Неофициальный плагин сообщества. Сетевые запросы плагин делает только для проверки обновлений (выпуски GitHub и реестр npm). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
|
|
18
|
+
|
|
19
|
+
## Установка
|
|
20
|
+
|
|
21
|
+
**Настольное приложение:** Настройки → Плагины → **Добавить плагин** → введите `dsh-composer-plus` → **Включить сейчас**.
|
|
22
|
+
Вместо имени npm-пакета можно вставить `https://github.com/furkancak1r/dsh-composer-plus`.
|
|
23
|
+
|
|
24
|
+
**Профиль Web / CLI:**
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
dsh plugin --profile web add dsh-composer-plus
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Затем перезапустите dsh. (CLI не может устанавливать плагины в профиль настольного приложения: им управляет само приложение.)
|
|
31
|
+
|
|
32
|
+
> pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.10.0`.
|
|
33
|
+
|
|
34
|
+
## Функции
|
|
35
|
+
|
|
36
|
+
| Функция | Как пользоваться | Снимок экрана |
|
|
37
|
+
|---|---|---|
|
|
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> |
|
|
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
|
+
| **Откат хода** | Наведите указатель на своё сообщение и нажмите **↶** (рядом с кнопкой «Копировать»). **Только чат** убирает это сообщение и всё, что было после него (ответы, вызовы инструментов), из чата и из контекста модели. Само сообщение возвращается в поле ввода: измените его и отправьте снова. **Чат и файлы** сначала показывает файлы проекта, которые изменились после этого сообщения, а затем возвращает и их в прежнее состояние. Это касается и изменений, сделанных командами (`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
|
+
| **Удалить чат** | Боковая панель → меню **…** чата (или правый щелчок) → **Удалить…** → **Удалить**. Сам dsh умеет только архивировать. Чат останавливается (его ход, задания, субагенты и расписания — так же, как при встроенной архивации dsh). Его сохранённая история вместе с чатами субагентов перемещается в Корзину macOS (в других системах — в `$DSH_HOME/trash`). Чтобы вернуть чат, верните папку на место и перезапустите dsh: чат появится в фильтре **Только архивные** на боковой панели. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Снимок экрана: Удалить чат"></a> |
|
|
43
|
+
| **Название проекта в поле ввода** | Строка под полем ввода (ходы, токены, попадания в кеш, контекст) начинается с названия проекта чата. Так вы всегда видите, в каком проекте работает чат. Это встроенное название проекта в dsh или имя папки, если у проекта нет названия. Наведите на него указатель, чтобы увидеть полный путь к папке. Нажмите на него, чтобы найти чат на боковой панели, в виде списка или по проектам: открываются боковая панель и проект (в том числе свёрнутый проект и его **Показать ещё**), список прокручивается к чату, и чат мигает 5 секунд. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Снимок экрана: Название проекта в поле ввода"></a> |
|
|
44
|
+
| **История ввода** | В пустом поле ввода нажимайте `↑` / `↓`, чтобы листать отправленные сообщения, как в терминале. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Снимок экрана: История ввода"></a> |
|
|
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
|
+
| **Сохранять фокус в поле ввода** | После отправки команды `/` или навыка курсор остаётся в поле ввода, и можно сразу печатать дальше. Это работает и для клавиатурных макросов, которые вводят команду и нажимают `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> |
|
|
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
|
+
| **Перетаскивание в очереди** | У сообщений в очереди появляется маркер (⠿). Перетащите его, чтобы изменить порядок, или переведите на него фокус и нажмите `↑` / `↓`. `Esc` отменяет перемещение. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Снимок экрана: Перетаскивание в очереди"></a> |
|
|
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
|
+
| **Копировать путь проекта** | Правый щелчок по проекту на боковой панели → **Копировать путь** копирует полный путь к его папке. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Снимок экрана: Копировать путь проекта"></a> |
|
|
52
|
+
| **Разрешить для этого чата** | Когда автопроверка спрашивает вас, на карточке одобрения появляется кнопка **Разрешить для этого чата**. После этого тот же инструмент в том же чате разрешён с любыми аргументами. Значок в заголовке показывает список разрешений и позволяет их отозвать. Разрешения сохраняются после перезапуска. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Снимок экрана: Разрешить для этого чата"></a> |
|
|
53
|
+
| **Статус проекта** | Строка проекта на боковой панели показывает ту же метку, что и его чаты: индикатор выполнения, ожидание или «готово». Поэтому даже свёрнутый проект сообщает, что чат внутри работает или ждёт вас. Сначала показывается чат, который ждёт вас, затем завершённый чат, который вы ещё не открыли (зелёная точка, даже пока другой чат ещё выполняется), затем индикатор выполнения. Наведите на метку указатель, чтобы увидеть подробности. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Снимок экрана: Статус проекта"></a> |
|
|
54
|
+
| **Активные проекты сверху** | Когда чат начинает работать или ждёт вас, его проект перемещается в начало боковой панели со встроенной анимацией строк dsh (так же, как при перетаскивании). Завершённые проекты остаются на месте; их можно перетаскивать как обычно. Перемещения сохраняются в порядке проектов dsh, поэтому при отключении функции текущий порядок остаётся. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Снимок экрана: Активные проекты сверху"></a> |
|
|
55
|
+
| **Фильтр недавних проектов** | Боковая панель → параметры просмотра (значок с ползунками) → **Активные за последние 2 часа**. Пока этот пункт выбран, боковая панель показывает только проекты с чатом, активным за последние 2 часа. Это чат, обновлённый за это время, выполняющийся или ожидающий чат, открытый чат или завершённый чат, который вы ещё не открыли (зелёная точка dsh «готово»), — такой чат оставляет проект на виду и после 2 часов. Проекты без такого чата скрыты, в том числе новые и пустые. Выберите пункт ещё раз, чтобы показать все проекты. Выбор сохраняется на этом устройстве. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Снимок экрана: Фильтр недавних проектов"></a> |
|
|
56
|
+
| **Свернуть все проекты** | Пока на боковой панели открыт хотя бы один проект, рядом с параметрами просмотра (значок с ползунками) есть кнопка. Нажмите её, чтобы сразу закрыть все открытые проекты, например 3 открытых из 5. Когда открытых проектов нет, кнопка снова скрывается. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Снимок экрана: Свернуть все проекты"></a> |
|
|
57
|
+
| **Сортировка по состоянию** | Боковая панель → параметры просмотра → **Сортировать** → **По состоянию** (вместе с **Одним списком**). Сначала идут завершённые чаты (с точкой dsh «готово»; её получает и ход, который закончился ошибкой), затем выполняющиеся или ожидающие чаты, затем чаты с активной автоматизацией (расписанием), затем остальные в порядке dsh. Когда вы открываете завершённый чат, он опускается ниже. Меняется только вид: чтобы вернуться, выберите **Вручную** или **По дате изменения**. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Снимок экрана: Сортировка по состоянию"></a> |
|
|
58
|
+
| **Фоновые уведомления** | Пока dsh работает в фоне, вы получаете уведомление, когда ход завершён (первая строка ответа) или когда чат действительно ждёт вас: одобрения (имя инструмента), ответа (сам вопрос) или проверки плана. Запрос должен оставаться открытым и через 1,5 с. Поэтому одобрения, на которые ответили автоматически (разрешения автопроверки, другие плагины), не вызывают уведомлений. Уведомление убирается, как только на его запрос ответили. Значок в Dock или на панели задач показывает число ожидающих чатов. Щелчок по уведомлению открывает этот чат. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Снимок экрана: Фоновые уведомления"></a> |
|
|
59
|
+
| **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> |
|
|
61
|
+
| **Автоматические обновления** | При запуске 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
|
+
|
|
63
|
+
Кнопки, подсказки, сообщения и уведомления показываются на выбранном языке dsh (см. «Язык приложения» ниже).
|
|
64
|
+
|
|
65
|
+
## Настройки
|
|
66
|
+
|
|
67
|
+
Каждую функцию можно включить или выключить отдельно: dsh **Настройки → Composer Plus**. В каждой строке есть маленький снимок экрана: наведите на него указатель, чтобы увидеть его крупнее, или нажмите, чтобы открыть в полном размере (`Esc` закрывает). Поле **Поиск функций** вверху фильтрует страницу по названию или описанию (на любом языке, без учёта регистра и диакритических знаков); `Esc` очищает его. В каждой строке есть переключатель и короткое описание. Изменения применяются сразу, без перезапуска, и запоминаются на этом устройстве. По умолчанию включено всё, кроме **Мобильное подключение** и **Продолжать после перезапуска**. Переключатели этих двух функций, а также **Поиск по содержимому** и **Откат хода** хранит Host dsh, поэтому они действуют во всех окнах и сохраняются после перезапуска. **Поиск по содержимому** меняется только после перезапуска dsh (dsh читает эту настройку при запуске). До этого в его строке написано **Перезапустите dsh, чтобы применить это изменение.**
|
|
68
|
+
|
|
69
|
+
<p align="center"><img src="docs/images/settings.webp" width="720" alt="Настройки → Composer Plus: поиск функций, выбор языка, строка обновлений и переключатель для каждой функции; при наведении показывается снимок экрана"></p>
|
|
70
|
+
|
|
71
|
+
### Язык приложения
|
|
72
|
+
|
|
73
|
+
Откройте **Настройки → Composer Plus → Язык приложения** и выберите **Язык системы** или один из 13 языков:
|
|
74
|
+
|
|
75
|
+
English · 中文 · Türkçe · Español · Português (Brasil) · Français · Deutsch · Русский · 日本語 · 한국어 · Bahasa Indonesia · Tiếng Việt · हिन्दी
|
|
76
|
+
|
|
77
|
+
<p align="center"><img src="docs/images/language-tr.webp" width="720" alt="Интерфейс DeepSeek Harness переключён на Türkçe"></p>
|
|
78
|
+
|
|
79
|
+
Всё приложение переключается сразу. Выбор хранится в собственной настройке dsh `locale.preference` (той же, что и в Общие → Язык), поэтому он сохраняется после перезапуска. **Язык системы** сбрасывает этот выбор: настольное приложение следует языку ОС, веб-интерфейс — языку браузера, а вместо неподдерживаемого языка показывается английский. Установка плагина никогда не меняет язык, который вы уже выбрали.
|
|
80
|
+
|
|
81
|
+
В каждом пакете 3 143 текста: все тексты интерфейса dsh `0.2.0-rc.2` и `0.2.1-rc.2` (чаты, боковая панель, настройки, одобрения, расписания, предпросмотр файлов, менеджер плагинов, маркетплейс плагинов), собственные элементы управления плагина и популярный плагин [dsh-rewind](https://github.com/SiriLee/dsh-rewind). Не переводятся: ваши сообщения, ответы модели, код, имена слеш-команд (`/plan`, `/compact`), метки провайдеров, например уровень рассуждений `High`, тексты других плагинов, а также системные меню и окна обновления настольного приложения (dsh поставляет их только на английском и китайском). Строки, которые добавила более новая версия dsh, показываются на английском, пока пакеты не обновлены. Если другой плагин уже предоставляет язык, этот язык остаётся за тем плагином.
|
|
82
|
+
|
|
83
|
+
## Сочетания клавиш
|
|
84
|
+
|
|
85
|
+
| Клавиша | Где | Действие |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `↑` / `↓` | пустое поле ввода | предыдущее / следующее отправленное сообщение |
|
|
88
|
+
| `Shift+Tab` | поле ввода | добавить/убрать `/plan ` или выйти из режима плана |
|
|
89
|
+
| `↑` / `↓` | маркер очереди в фокусе | переместить сообщение в очереди |
|
|
90
|
+
| `Esc` | во время перетаскивания | отменить перемещение |
|
|
91
|
+
| `→` / `←` | страница «Идеи функций» | создать / пропустить верхнюю карточку |
|
|
92
|
+
| `↓` | страница «Идеи функций» | сохранить верхнюю карточку в списке проекта «На потом» |
|
|
93
|
+
| `↑` | страница «Идеи функций» | создать верхнюю карточку сразу, без плана |
|
|
94
|
+
| `Z` | страница «Идеи функций» | вернуть последнюю пропущенную карточку |
|
|
95
|
+
|
|
96
|
+
Открытое меню `/` или `@` забирает эти клавиши себе.
|
|
97
|
+
|
|
98
|
+
## Совместимость
|
|
99
|
+
|
|
100
|
+
Проверено на dsh `0.2.0-rc.2` (настольное приложение и веб) и `0.2.1-rc.2` (веб). CI запускает тесты при каждом push.
|
|
101
|
+
|
|
102
|
+
## Конфиденциальность и безопасность
|
|
103
|
+
|
|
104
|
+
- **Продолжить:** аутентифицированная локальная конечная точка возобновляет только последний прерванный ход, отклоняет устаревшие и повторные запросы и сохраняет существующие хуки одобрения. Новое сообщение пользователя она не отправляет.
|
|
105
|
+
- **Продолжать после перезапуска:** выключено, пока вы его не включите. Host-часть хранит только ID чатов и время их запуска в `$DSH_HOME/storages/dsh-composer-plus/resume.json` (доступ только для владельца), и ничего не покидает ваш компьютер. Чат продолжается, только если собственный журнал dsh показывает, что последний ход остановил dsh, а не вы. Одобрения и автопроверка действуют для продолженного хода как обычно.
|
|
106
|
+
|
|
107
|
+
- **Панель изменений:** git работает только на чтение на вашем компьютере, в папке самого чата, через аутентифицированный канал dsh `/api`. Он никогда не выполняет commit, stage или fetch и показывает только пути, которые перечислил сам git.
|
|
108
|
+
- **Идеи функций:** ничего не запускается, пока вы не нажмёте **Предложить функции**. Затем 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
|
+
- **Поиск по содержимому:** никакой новый код не ищет по вашим чатам. Плагин только включает встроенный индекс сообщений 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
|
+
- **Откат хода:** перед каждым вашим сообщением 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`.
|
|
111
|
+
- **Удалить чат:** перемещает в Корзину только папки журнала самого чата (`$DSH_HOME/sessions/<project>/<chat>`). Папку проекта функция не трогает.
|
|
112
|
+
- **Разрешить для этого чата:** разрешения хранятся в `$DSH_HOME/storages/dsh-composer-plus/grants.json` (доступ только для владельца). Разрешение действует для **одного конкретного инструмента в одном чате**. Если этот инструмент может выполнять запись, разрешение покрывает и любую запись. Отозвать его можно через значок в заголовке.
|
|
113
|
+
- Автопроверка по-прежнему выполняется при каждом вызове. Если проверка завершилась сбоем, вызов никогда не разрешается автоматически.
|
|
114
|
+
- **Мобильное подключение:** выключено, пока вы его не включите. Когда оно включено, 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
|
+
- **Обновления:** 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: реестр, скрипты и совместимость версий. Предварительные выпуски и более старые версии никогда не устанавливаются.
|
|
116
|
+
|
|
117
|
+
## Устранение неполадок
|
|
118
|
+
|
|
119
|
+
- **Нет уведомлений в macOS:** Системные настройки → Уведомления → DeepSeek Harness → разрешить. Выберите **Предупреждения**, чтобы уведомления оставались на экране.
|
|
120
|
+
- **После обновления dsh пропали ▶, маркеры очереди, статус проекта, фильтр недавних проектов, «Свернуть все проекты», «Копировать путь», «Разрешить для этого чата» или меню правого щелчка:** эти элементы привязаны к текущей HTML-разметке dsh, потому что в dsh пока нет для них отдельного места. Если dsh меняет эту разметку, они скрываются сами; больше ничего не ломается. Пожалуйста, откройте [issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
|
|
121
|
+
- **«Не удалось обновить» или «установлена не из npm»:** копия, подключённая из локальной папки или переименованная, не может обновиться сама. Переустановите `dsh-composer-plus` в разделе Настройки → Плагины. В остальных случаях сообщение показывает первую строку ошибки pnpm; **Проверить обновления** повторяет попытку.
|
|
122
|
+
- **Мобильное подключение сообщает, что шлюз не запущен:** «no IPv4 address on en0» означает, что у этого Mac нет адреса Wi-Fi/Ethernet. «EADDRINUSE» означает, что порт 19390 или 19391 занят другим dsh (или приложением). Мобильное подключение может работать одновременно только в одном dsh.
|
|
123
|
+
- **Мобильное подключение, «Продолжать после перезапуска» или «Поиск по содержимому» просит «Перезапустите dsh»:** плагин обновился, пока dsh работал (или, для поиска по содержимому, вы изменили переключатель). Новое состояние загрузится после перезапуска.
|
|
124
|
+
- **Поиск находит только названия:** поиск по содержимому выключен, dsh не перезапускался после того, как вы включили функцию или установили плагин, или слово есть только в выводе инструмента (см. «Ограничения»).
|
|
125
|
+
- **На моих сообщениях нет кнопки ↶:** откат хода выключен, это чат субагента, или установлен dsh-rewind-plugin (пользуйтесь его кнопкой ↶). После обновления перезапустите dsh.
|
|
126
|
+
- **Пункт «Чат и файлы» недоступен (серый):** проект не является репозиторием git, нет снимка до этого сообщения (сообщение старше плагина, или его снимок вытеснили 50 более новых), или ни один файл не изменился.
|
|
127
|
+
- **При удалении появляется сообщение, что этот чат открыт в другом dsh:** второй dsh с той же домашней папкой dsh удерживает блокировку чата. Закройте это окно или dsh и удалите чат снова. До этого чат остаётся в архиве.
|
|
128
|
+
- **Чат не продолжился после перезапуска:** функция «Продолжать после перезапуска» была выключена, когда dsh завершил работу; вы сами остановили этот ход; ход уже закончился (готово или сбой); чат был в архиве; или работало больше 20 чатов (продолжаются 20 самых новых).
|
|
129
|
+
- **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.10.0`), см. примечание об установке выше.
|
|
130
|
+
|
|
131
|
+
## Ограничения
|
|
132
|
+
|
|
133
|
+
- Продолжение без сообщения опирается на жизненный цикл dsh `agent/pre-step` → `agent/request`. Проверяйте совместимость при обновлении dsh.
|
|
134
|
+
- **Идеи функций** хранит карточки в памяти для каждого чата, пока не перезагрузится dsh или страница. После этого **Предложить функции** снова обращается к модели. Карточки приходят на том языке интерфейса dsh, который выбран в момент нажатия. Если вы смените язык, карточки, которые уже лежат в стопке, сохранят свой язык, а **Ещё идеи** использует новый. Модель видит только краткую сводку проекта, а не код, поэтому идея может повторять то, что в проекте уже есть: просто пропустите её. Новый чат запускается в режиме плана, только если в профиле есть команда dsh `/plan`; иначе идея уходит как обычное первое сообщение. Список **На потом** привязан к пути папки чата: та же папка, открытая через символическую ссылку, получает свой список. В нём хранится не более 50 идей на проект (удалите одну, чтобы добавить новые), и каждый заголовок только один раз. Перетаскивание карточки решает только «влево» или «вправо»; чтобы отложить её, используйте **↓**, а чтобы создать её сразу — **▶**. Повтор определяется только по заголовку: модель всё равно может предложить прежнюю идею под новым названием; пропустите её. Если модель отвечает только прежними идеями, ничего нового не появляется: нажмите ещё раз.
|
|
135
|
+
- **Продолжать после перезапуска** продолжает ход, а не повторяет его. Вызов инструмента, который выполнялся в момент выхода, завершается результатом dsh «outcome unknown» (результат неизвестен). Модели сообщается, что не нужно повторять сделанную работу, но команда, которую небезопасно запускать дважды, может выполниться снова. Субагенты, одобрения и вопросы, которые были открыты, не восстанавливаются: их родительский чат продолжает работу и спрашивает снова. За один запуск продолжается не более 20 чатов.
|
|
136
|
+
|
|
137
|
+
- **Поиск по содержимому** — это встроенный поиск dsh, поэтому у него те же ограничения. Он ищет только в сообщениях пользователя и ассистента: не в выводе инструментов (команды, содержимое файлов, результаты) и не в рассуждениях. Фильтра по сообщениям пользователя, ассистента или инструментов нет. Он находит целые слова, а не части слов (`deploy` не находит `deployment`); буквы с диакритикой совпадают с буквами без неё (`seker` находит `şeker`). На каждый чат одна строка с фрагментом dsh длиной 240 символов, всего не более 20 строк.
|
|
138
|
+
- **Поиск по содержимому**: затраты измерены на копии 247 реальных журналов чатов (159 МБ, dsh 0.2.1-rc.2, Apple Silicon, 32 ГБ). Первый поиск после запуска строит индекс примерно за 15 с. В это время Host dsh около 7 с ничего не отвечает, поэтому другие чаты на этот момент перестают выводить ответ (сама страница не зависает). Память Host на пике вырастает примерно на 1,1 ГБ; через минуту она всё ещё примерно на 0,5–0,6 ГБ выше начальной и остаётся такой до выхода из dsh. Файл индекса занимает около 165 МБ. Следующие поиски занимают около 0,5 с. После перезапуска первый поиск занимает около 1 с (добавляются только новые или изменённые чаты) и добавляет около 70 МБ. Если на компьютере мало памяти, выключите эту функцию.
|
|
139
|
+
- **Поиск по содержимому** начинает действовать только после перезапуска dsh. Файл индекса общий для всех dsh, которые используют одну домашнюю папку dsh: запускайте одновременно только один такой dsh (dsh допускает одного владельца на файл индекса).
|
|
140
|
+
- **Откат хода** возвращает файлы только в репозитории 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
|
+
- **Удалить чат** требует архивации dsh (dsh 0.2.0 и новее). Если чат (или один из чатов его субагентов) не останавливается за 15 с или его удерживает другой dsh, он остаётся в архиве, и ничего не перемещается. В системах, отличных от macOS, папка корзины должна быть на том же диске, что и история чатов. Открытый чат, который вы удалили, остаётся в памяти dsh (в архиве и скрытым) до перезапуска dsh. Очищайте Корзину сами: dsh этого не делает.
|
|
142
|
+
- В очереди dsh нет действия `move`, поэтому при изменении порядка текст затронутых строк перезаписывается. Если агент заберёт строку посреди перемещения, перемещение отменяется, и ничего не теряется. Сообщения с изображениями или файлами перемещать нельзя.
|
|
143
|
+
- dsh 0.2.1 загружает обновление сразу, если новая версия не меняет никаких настроек dsh; в остальных случаях, а также в dsh 0.2.0, перезапустите dsh, чтобы загрузить его. Плагин никогда не перезапускает dsh за вас. Профили Web/CLI без менеджера плагинов dsh только сообщают о новой версии.
|
|
144
|
+
- **Сохранять фокус в поле ввода** возвращает фокус только после команды `/` или навыка. Пока dsh обрабатывает команду, поле ввода несколько миллисекунд доступно только для чтения, поэтому клавиши, нажатые в это время, теряются. Если меню `/` в dsh ещё открыто, `Enter` выбирает выделенную строку и ничего не отправляет.
|
|
145
|
+
- **Мобильное подключение** работает только в macOS (оно использует `en0`, `openssl`, `swift` и `dns-sd`). Оно использует фиксированные порты 19390 и 19391, поэтому на каждом Mac его может одновременно запускать только один dsh (каждый Mac — одна запись в списке Mac на телефоне). Телефон получает уведомления, только пока Tether открыт или только что ушёл в фон (сервиса push-уведомлений нет). Приложения для iOS пока нет в App Store: соберите его из `tether/ios` в Xcode.
|
|
146
|
+
- Ссылка на сеанс работает внутри чатов; щелчок по ней не открывает чат.
|
|
147
|
+
- Уведомление, отправленное до перезапуска, при щелчке только выводит dsh на передний план.
|
|
148
|
+
- Активные проекты перемещаются через сохранённый порядок проектов dsh, поэтому новый порядок сохраняется после перезапуска. Чаты вне проектов («Без группы») перемещать нельзя; dsh всегда показывает их последними.
|
|
149
|
+
- В меню параметров просмотра на боковой панели у dsh нет точки расширения, поэтому пункт фильтра недавних проектов добавляется во встроенное меню dsh. Если обновление dsh изменит это меню, пункт не появится, и все проекты останутся видны. Фильтр работает со строками проектов, поэтому режим **Одним списком** не фильтруется. Используйте фильтр с **По рабочей области**: в режиме **Дерево рабочих областей** скрытая родительская папка скрывает и активные проекты внутри неё. У **По состоянию** ограничение того же рода: в dsh нет места для своего порядка сортировки, поэтому пункт и порядок строк привязаны к разметке меню и списка dsh.
|
|
150
|
+
- В dsh нет ни меню строки проекта, ни места в заголовке «Рабочие области». **Копировать путь** находит строку проекта по разметке строк dsh, а **Свернуть все проекты** встраивается в заголовок dsh и закрывает каждый открытый проект тем же щелчком, что и строка проекта. Если обновление dsh изменит эту разметку, правый щелчок покажет меню браузера, а кнопка не появится.
|
|
151
|
+
- Встроенную поддержку запросили у разработчиков dsh: `move` для очереди в [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), состояние «Продолжить» в [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
|
|
152
|
+
|
|
153
|
+
## Частые вопросы
|
|
154
|
+
|
|
155
|
+
**Как добавить в DeepSeek Harness панель изменений / git diff?** Установите `dsh-composer-plus`, затем: правая боковая панель → `+` → **Изменения**.
|
|
156
|
+
|
|
157
|
+
**Может ли dsh предлагать функции для моего проекта, как карточки в Tinder?** Да: правая боковая панель → `+` → **Идеи функций** → **Предложить функции**. Смахните вправо, чтобы начать новый чат, который спланирует функцию; нажмите **▶ Создать сразу**, чтобы начать чат, который сразу создаст её без плана; смахните влево, чтобы пропустить её.
|
|
158
|
+
|
|
159
|
+
**Может ли поиск на боковой панели dsh найти чат по слову из сообщений, а не только по названию?** Да, с функцией **Поиск по содержимому** (включена по умолчанию): после установки плагина один раз перезапустите dsh, затем нажмите лупу рядом с **Рабочие области**. Под найденными чатами показывается текст вокруг слова.
|
|
160
|
+
|
|
161
|
+
**Можно ли отменить ход и изменить запрос, как в OpenCode или Claude Code?** Да, с функцией **Откат хода**: нажмите **↶** на сообщении, выберите **Чат и файлы**, измените текст, который вернулся в поле ввода, и отправьте его.
|
|
162
|
+
|
|
163
|
+
**Можно ли удалить чат, а не архивировать его?** Да, с функцией **Удалить чат**: **…** → **Удалить…**. История попадает в Корзину, поэтому ошибку можно исправить.
|
|
164
|
+
|
|
165
|
+
**Как узнать, к какому проекту относится чат?** Посмотрите на строку под полем ввода: с функцией **Название проекта в поле ввода** (включена по умолчанию) она начинается с названия проекта. Наведите на него указатель, чтобы увидеть путь к папке.
|
|
166
|
+
|
|
167
|
+
**Как получить историю сообщений по ↑/↓ в поле ввода dsh?** Установите этот плагин: в пустом поле ввода `↑` / `↓` листают отправленные сообщения.
|
|
168
|
+
|
|
169
|
+
**Как продолжить остановленный или завершившийся сбоем ход dsh, не печатая «continue»?** С этим плагином кнопка отправки превращается в **▶** после остановленного, завершившегося сбоем или оборванного хода. Один щелчок продолжает его.
|
|
170
|
+
|
|
171
|
+
**Продолжает ли dsh работающие чаты после выхода и повторного запуска?** Сам по себе нет: dsh помечает такой ход как прерванный и ждёт (цель тоже ждёт команды `/goal resume`). Включите **Настройки → Composer Plus → Продолжать после перезапуска**: тогда чаты, которые работали в момент выхода из dsh, сами продолжат работу при следующем запуске.
|
|
172
|
+
|
|
173
|
+
**Как изменить порядок сообщений в очереди dsh?** Перетащите маркер ⠿ на сообщении в очереди или переведите на него фокус и нажмите `↑` / `↓`.
|
|
174
|
+
|
|
175
|
+
**Как сделать, чтобы автопроверка не спрашивала об одном и том же инструменте в одном чате?** Нажмите **Разрешить для этого чата** на карточке одобрения. Разрешение действует только для этого инструмента в этом чате; отозвать его можно через значок в заголовке.
|
|
176
|
+
|
|
177
|
+
**Как показать на боковой панели dsh только проекты, с которыми я работал сегодня?** Боковая панель → параметры просмотра (значок с ползунками) → **Активные за последние 2 часа**. Выберите пункт ещё раз, чтобы показать все проекты.
|
|
178
|
+
|
|
179
|
+
**Как скопировать путь к папке проекта в dsh?** Правый щелчок по проекту на боковой панели → **Копировать путь**.
|
|
180
|
+
|
|
181
|
+
**Как свернуть сразу все проекты на боковой панели dsh?** Нажмите кнопку сворачивания рядом с параметрами просмотра (значок с ползунками). Она видна, пока открыт хотя бы один проект.
|
|
182
|
+
|
|
183
|
+
**Как получать уведомления macOS / Windows, когда задача dsh завершилась или ждёт одобрения?** Оставьте включёнными **Фоновые уведомления** (по умолчанию) и разрешите уведомления для DeepSeek Harness в настройках ОС.
|
|
184
|
+
|
|
185
|
+
**Как переключить интерфейс DeepSeek Harness на турецкий, испанский, японский…?** Настройки → Composer Plus → **Язык приложения**.
|
|
186
|
+
|
|
187
|
+
**Как пользоваться dsh с iPhone?** Соберите приложение Tether из `tether/ios` (Xcode), включите **Настройки → Composer Plus → Мобильное подключение (iPhone)**, нажмите **Мобильное подключение** внизу слева, отсканируйте QR-код в Tether и нажмите **Approve**. Вне дома используйте Tailscale на обоих устройствах.
|
|
188
|
+
|
|
189
|
+
**Работает ли плагин с настольным приложением?** Да: Настройки → Плагины → **Добавить плагин** → `dsh-composer-plus`. Проверено на dsh 0.2.0-rc.2 (настольное приложение и веб) и 0.2.1-rc.2 (веб).
|
|
190
|
+
|
|
191
|
+
## Разработка
|
|
192
|
+
|
|
193
|
+
Снимки экрана создаются заново в одноразовом dsh с фальшивой моделью и выдуманными демо-проектами (`acme-web`, `weather-cli`, `docs-site`), поэтому в них нет реальных данных. Миниатюры функций лежат в `assets/features/` (входят в пакет и показываются в настройках); картинки только для README лежат в `docs/images/` (не входят в npm-пакет):
|
|
194
|
+
|
|
195
|
+
```sh
|
|
196
|
+
PLAYWRIGHT=/path/to/playwright node scripts/capture-screenshots.mjs /path/to/dsh/lib/bin.js
|
|
197
|
+
# sidebar project features (recent filter, Copy path, Collapse all): real-app test + their thumbnails
|
|
198
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /path/to/dsh/lib/bin.js
|
|
199
|
+
# recent filter + a finished chat older than 2 hours (fake model): the project stays until you open the chat
|
|
200
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
201
|
+
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
202
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
203
|
+
# every Settings feature row shows a loading screenshot
|
|
204
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
205
|
+
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
206
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
207
|
+
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
208
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-mobile-connect.mjs /path/to/dsh/lib/bin.js
|
|
209
|
+
# Resume after restart (fake slow model, real quit and start): a running chat and a goal continue, a stopped chat does not
|
|
210
|
+
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
|
|
212
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-feature-ideas.mjs /path/to/dsh/lib/bin.js
|
|
213
|
+
# 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
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
|
|
215
|
+
# Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
|
|
216
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
```sh
|
|
220
|
+
npm run build:locales # after editing locales/<id>.json
|
|
221
|
+
npm test
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Правило для новых функций:** каждая строка функции в Настройки → Composer Plus показывает снимок экрана. Добавьте id функции в `SHOT_OF` в `client.js` и в `SHOTS` в `index.js` и включите в пакет `assets/features/<id>.webp` (снимок из одноразового демо-dsh с английским интерфейсом, около 60 КБ или меньше). Добавьте функцию в таблицу README с тем же изображением — в `README.md` и в каждый переведённый `README.<id>.md`. `test/shots.test.mjs` завершается ошибкой, если у функции нет снимка экрана, а `test/browser-settings-shots.mjs` проверяет настоящую страницу настроек. Полный список проверок для каждого изменения находится в [AGENTS.md](AGENTS.md).
|
|
225
|
+
|
|
226
|
+
Тесты запускают настоящий `client.js` с фальшивым React/DOM и настоящий `index.js` (Host-часть) с временным репозиторием git. Тесты шлюза Tether (`test/tether-gateway.test.mjs`) используют имитацию хоста dsh и настоящий TLS-шлюз. Приложение для iPhone находится в `tether/ios` (см. [tether/README.md](tether/README.md) и [tether/AGENTS.md](tether/AGENTS.md)). `node test/browser-history.mjs '<dsh web URL with ?token=…>'` проверяет историю ввода в настоящем браузере с одноразовым `dsh web`, у которого свой `DSH_HOME`.
|
|
227
|
+
|
|
228
|
+
Языковые пакеты — это JSON-файлы только с данными в `locales/<id>.json`. `npm run build:locales` встраивает их в единственную клиентскую точку входа (без сервиса перевода и без загрузки во время работы). `npm test` проверяет, что каждый пакет покрывает все ключи и сохраняет те же подстановки и переносы строк, а также проверяет работу системного языка и ручного выбора. Для изолированных проверок в настоящем приложении с локально установленным Playwright:
|
|
229
|
+
|
|
230
|
+
```sh
|
|
231
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-language.mjs /path/to/dsh/lib/bin.js
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## License
|
|
235
|
+
|
|
236
|
+
MIT
|