dsh-composer-plus 1.11.3 → 1.13.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 +81 -42
- package/README.es.md +81 -42
- package/README.fr.md +81 -42
- package/README.hi.md +81 -42
- package/README.id.md +81 -42
- package/README.ja.md +81 -42
- package/README.ko.md +81 -42
- package/README.md +81 -42
- package/README.pt-BR.md +81 -42
- package/README.ru.md +81 -42
- package/README.tr.md +81 -42
- package/README.vi.md +81 -42
- package/README.zh.md +81 -42
- package/assets/features/changesPanel.webp +0 -0
- package/assets/features/copyMessageLink.webp +0 -0
- package/assets/features/markProjectRead.webp +0 -0
- package/assets/features/promptImprove.webp +0 -0
- package/assets/features/queueEdit.webp +0 -0
- package/client.js +1215 -144
- package/index.js +696 -116
- package/package.json +8 -3
- package/tether/gateway/admin.html +47 -3
- package/tether/gateway/server.mjs +114 -35
package/README.ru.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness с Composer Plus: у работающего проекта на боковой панели крутится индикатор, а панель изменений показывает git diff"></p>
|
|
16
16
|
|
|
17
|
-
Неофициальный плагин сообщества. Сетевые запросы плагин делает только для проверки обновлений (выпуски GitHub и реестр npm). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Предсказание следующего сообщения** (по умолчанию включено) обращается к модели, выбранной в настройках (по умолчанию это модель dsh, если вы не выберете другую), один раз после каждого завершённого хода, без нажатия. Чтобы остановить эти запросы, выключите его в **Настройки → Composer Plus**. **Дополнение при вводе** (по умолчанию выключено) после включения обращается к выбранной для него модели (по умолчанию это модель предсказания) при каждой паузе в наборе. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
|
|
17
|
+
Неофициальный плагин сообщества. Сетевые запросы плагин делает только для проверки обновлений (выпуски GitHub и реестр npm). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Предсказание следующего сообщения** (по умолчанию включено) обращается к модели, выбранной в настройках (по умолчанию это модель dsh, если вы не выберете другую), один раз после каждого завершённого хода, без нажатия. Чтобы остановить эти запросы, выключите его в **Настройки → Composer Plus**. **Дополнение при вводе** (по умолчанию выключено) после включения обращается к выбранной для него модели (по умолчанию это модель предсказания) при каждой паузе в наборе. **Улучшить промпт** обращается к модели, только когда вы нажимаете волшебную палочку. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
|
|
18
18
|
|
|
19
19
|
## Установка
|
|
20
20
|
|
|
@@ -29,46 +29,54 @@ 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.13.0`.
|
|
33
33
|
|
|
34
34
|
## Функции
|
|
35
35
|
|
|
36
|
+
<!-- BEGIN GENERATED FEATURES: edit docs/features.json, then run npm run build:readme -->
|
|
37
|
+
|
|
36
38
|
| Функция | Как пользоваться | Снимок экрана |
|
|
37
39
|
|---|---|---|
|
|
38
|
-
| **Панель изменений** |
|
|
39
|
-
| **Идеи функций** |
|
|
40
|
-
| **Поиск по содержимому** |
|
|
41
|
-
| **Откат хода** |
|
|
42
|
-
| **Удалить чат** |
|
|
43
|
-
| **Название проекта в поле ввода** |
|
|
44
|
-
| **История ввода** |
|
|
45
|
-
| **Режим плана по Shift+Tab** |
|
|
46
|
-
| **Сохранять фокус в поле ввода** |
|
|
47
|
-
| **Продолжение в один клик** |
|
|
48
|
-
| **Продолжать после перезапуска** |
|
|
49
|
-
| **Перетаскивание в очереди** |
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
| **Копировать
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
|
40
|
+
| **Панель изменений** | <a id="feature-changespanel"></a>Правая боковая панель → `+` → **Изменения**. Выберите **Незафиксированные**, **Непроиндексированные**, **Проиндексированные** или **Ветка**: вы увидите изменённые файлы со счётчиками `+/-`. Нажмите на файл, чтобы открыть его diff. **Последний ход** открывает встроенный обзор dsh для последнего хода. Нажмите на имя ветки (или выберите **Дерево**), чтобы увидеть дерево веток. Нажмите на ветку над ним, чтобы перейти к ней, или на коммит, чтобы увидеть его файлы и их diff. **Этот чат** показывает только файлы, которые записали файловые инструменты открытого чата (write, edit) во всех его ходах, и их общий diff с первого сообщения. Кнопка **␣** скрывает изменения пробелов (`git diff -w`): строки, в которых изменились только отступы или концы строк, не показываются. | <a href="assets/features/changesPanel.webp"><img src="assets/features/changesPanel.webp" width="160" alt="Снимок экрана: Панель изменений"></a> |
|
|
41
|
+
| **Идеи функций** | <a id="feature-featureideas"></a>Правая боковая панель → `+` → **Идеи функций** → **Предложить функции**. Модель чата читает краткую сводку проекта этого чата (файлы верхнего уровня, начало 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> |
|
|
42
|
+
| **Поиск по содержимому** | <a id="feature-contentsearch"></a>Встроенный поиск 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> |
|
|
43
|
+
| **Откат хода** | <a id="feature-turnrollback"></a>Наведите указатель на своё сообщение и нажмите **↶** (рядом с кнопкой «Копировать»). **Только чат** убирает это сообщение и всё, что было после него (ответы, вызовы инструментов), из чата и из контекста модели. Само сообщение возвращается в поле ввода: измените его и отправьте снова. **Чат и файлы** сначала показывает файлы проекта, которые изменились после этого сообщения, а затем возвращает и их в прежнее состояние. Это касается и изменений, сделанных командами (`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> |
|
|
44
|
+
| **Удалить чат** | <a id="feature-deletechat"></a>Боковая панель → меню **…** чата (или правый щелчок) → **Удалить…** → **Удалить**. Сам dsh умеет только архивировать. Чат останавливается (его ход, задания, субагенты и расписания — так же, как при встроенной архивации dsh). Его сохранённая история вместе с чатами субагентов перемещается в Корзину macOS (в других системах — в `$DSH_HOME/trash`). Чтобы вернуть чат, верните папку на место и перезапустите dsh: чат появится в фильтре **Только архивные** на боковой панели. | <a href="assets/features/deleteChat.webp"><img src="assets/features/deleteChat.webp" width="160" alt="Снимок экрана: Удалить чат"></a> |
|
|
45
|
+
| **Название проекта в поле ввода** | <a id="feature-projectname"></a>Строка под полем ввода (ходы, токены, попадания в кеш, контекст) начинается с названия проекта чата. Так вы всегда видите, в каком проекте работает чат. Это встроенное название проекта в dsh или имя папки, если у проекта нет названия. Наведите на него указатель, чтобы увидеть полный путь к папке. Нажмите на него, чтобы найти чат на боковой панели, в виде списка или по проектам: открываются боковая панель и проект (в том числе свёрнутый проект и его **Показать ещё сеансов: N**), список прокручивается к чату, и чат мигает 5 секунд. | <a href="assets/features/projectName.webp"><img src="assets/features/projectName.webp" width="160" alt="Снимок экрана: Название проекта в поле ввода"></a> |
|
|
46
|
+
| **История ввода** | <a id="feature-inputhistory"></a>В пустом поле ввода нажимайте `↑` / `↓`, чтобы листать отправленные сообщения, как в терминале. | <a href="assets/features/inputHistory.webp"><img src="assets/features/inputHistory.webp" width="160" alt="Снимок экрана: История ввода"></a> |
|
|
47
|
+
| **Режим плана по Shift+Tab** | <a id="feature-plantoggle"></a>`Shift+Tab` добавляет `/plan ` в начало черновика (нажмите ещё раз, чтобы убрать). Если чат уже в режиме плана, `Shift+Tab` выходит из него. | <a href="assets/features/planToggle.webp"><img src="assets/features/planToggle.webp" width="160" alt="Снимок экрана: Режим плана по Shift+Tab"></a> |
|
|
48
|
+
| **Сохранять фокус в поле ввода** | <a id="feature-keepfocus"></a>После отправки команды `/` или навыка курсор остаётся в поле ввода, и можно сразу печатать дальше. Это работает и для клавиатурных макросов, которые вводят команду и нажимают `Enter`. Пока dsh обрабатывает команду, поле ввода доступно только для чтения, и браузер снимает с него фокус. Эта функция возвращает фокус, если он не занят меню, диалогом или другим полем. | <a href="assets/features/keepFocus.webp"><img src="assets/features/keepFocus.webp" width="160" alt="Снимок экрана: Сохранять фокус в поле ввода"></a> |
|
|
49
|
+
| **Продолжение в один клик** | <a id="feature-continuebutton"></a>После остановленного, завершившегося сбоем или оборванного хода в пустом поле ввода появляется **▶**. Один щелчок продолжает работу с текущего разговора. Ничего не нужно писать в поле ввода, и в чате не появляется новое сообщение. (Модель получает короткую скрытую заметку «продолжи с того места, где остановился», потому что некоторые провайдеры, например Claude, отклоняют запрос, который заканчивается ответом ассистента.) Сообщения в очереди остаются в ней: ▶ продолжает только остановленную задачу, а потом выполняется очередь. После завершённого хода остаётся обычная кнопка отправки. | <a href="assets/features/continueButton.webp"><img src="assets/features/continueButton.webp" width="160" alt="Снимок экрана: Продолжение в один клик"></a> |
|
|
50
|
+
| **Продолжать после перезапуска** | <a id="feature-resumeafterrestart"></a>По умолчанию выключено: включите функцию в **Настройки → Composer Plus**. Если выйти из dsh (или он закроется), пока чат работает, этот чат сам продолжит работу, когда вы снова откроете dsh. Он получает ту же скрытую заметку, что и при продолжении в один клик. Если выполнялся раунд цели (`/goal`), цель продолжается со следующего раунда (при каждом запуске dsh приостанавливает цели, пока вы их не возобновите). Чаты, которые вы остановили, которые завершились или завершились сбоем, не продолжаются. В самом dsh такой настройки нет: он только помечает такой ход как прерванный. | <a href="assets/features/resumeAfterRestart.webp"><img src="assets/features/resumeAfterRestart.webp" width="160" alt="Снимок экрана: Продолжать после перезапуска"></a> |
|
|
51
|
+
| **Перетаскивание в очереди** | <a id="feature-queuereorder"></a>У сообщений в очереди появляется маркер (⠿). Перетащите его, чтобы изменить порядок, или переведите на него фокус и нажмите `↑` / `↓`. `Esc` отменяет перемещение. | <a href="assets/features/queueReorder.webp"><img src="assets/features/queueReorder.webp" width="160" alt="Снимок экрана: Перетаскивание в очереди"></a> |
|
|
52
|
+
| **Правка сообщения в очереди на месте** | <a id="feature-queueedit"></a>Дважды щёлкните по сообщению в очереди. Оно превращается во встроенное поле редактирования dsh: измените текст и нажмите `Enter`, чтобы сохранить, или `Esc`, чтобы отменить. Сообщение остаётся на своём месте в очереди. Сообщения с изображениями или файлами так изменить нельзя (очередь dsh редактирует только текст). | <a href="assets/features/queueEdit.webp"><img src="assets/features/queueEdit.webp" width="160" alt="Снимок экрана: Правка сообщения в очереди на месте"></a> |
|
|
53
|
+
| **Копировать ссылку на сеанс** | <a id="feature-copydeeplink"></a>Правый щелчок по чату на боковой панели → **Копировать ссылку на сеанс**. Вставьте ссылку `dsh-session:…` в другой чат, чтобы прикрепить этот чат как контекст только для чтения. В dsh 0.2.1 есть свой пункт **Копировать ID сеанса**, но он копирует только сам идентификатор. Пункт плагина стоит сразу после него. | <a href="assets/features/copyDeeplink.webp"><img src="assets/features/copyDeeplink.webp" width="160" alt="Снимок экрана: Копировать ссылку на сеанс"></a> |
|
|
54
|
+
| **Копировать ссылку на сообщение** | <a id="feature-copymessagelink"></a>Наведите указатель на сообщение и нажмите **🔗** (в строке действий сообщения; у ответа — рядом со временем). Ссылка — это ссылка на сеанс плюс номер сообщения: `dsh-session:…#42`. Вставьте её в сообщение и отправьте. В dsh 0.2.1 и новее ссылка показывается как значок. Щелчок по нему открывает тот чат, прокручивает его до сообщения и подсвечивает сообщение на 2 секунды. Как и ссылка на сеанс, она также прикрепляет тот чат как контекст только для чтения. | <a href="assets/features/copyMessageLink.webp"><img src="assets/features/copyMessageLink.webp" width="160" alt="Снимок экрана: Копировать ссылку на сообщение"></a> |
|
|
55
|
+
| **Экспорт чата в Markdown** | <a id="feature-exportmarkdown"></a>Правый щелчок по чату на боковой панели (или его меню **…**) → **Экспорт в Markdown…**. Диалог показывает, сколько сообщений в чате. **Копировать в буфер обмена** копирует чат как Markdown, а **Сохранить файл .md** сохраняет его как `<chat title>.md` через загрузку браузера (в настольном dsh — в папку «Загрузки» или через диалог сохранения, как настроено в системе). В файле есть название чата, название проекта и дата, а затем по одному разделу `## Вы` или `## Ассистент` на каждое сообщение. Блоки кода остаются как есть; блок кода, который сообщение оставило открытым, закрывается. | <a href="assets/features/exportMarkdown.webp"><img src="assets/features/exportMarkdown.webp" width="160" alt="Снимок экрана: Экспорт чата в Markdown"></a> |
|
|
56
|
+
| **Копировать путь проекта** | <a id="feature-copyprojectpath"></a>Правый щелчок по проекту на боковой панели → **Копировать путь** копирует полный путь к его папке. | <a href="assets/features/copyProjectPath.webp"><img src="assets/features/copyProjectPath.webp" width="160" alt="Снимок экрана: Копировать путь проекта"></a> |
|
|
57
|
+
| **Поиск проекта в новом чате** | <a id="feature-projectpicker"></a>Новый чат → кнопка проекта над полем ввода. Проекты показаны в порядке A–Z, а сверху есть поле **Поиск проектов**. Введите часть названия (регистр и диакритические знаки не важны) и нажмите `Enter`, чтобы выбрать первое совпадение. Если ничего не подходит, появляется **Нет подходящих проектов**. Сохранённый порядок проектов dsh на боковой панели не меняется. | <a href="assets/features/projectPicker.webp"><img src="assets/features/projectPicker.webp" width="160" alt="Снимок экрана: Поиск проекта в новом чате"></a> |
|
|
58
|
+
| **Предсказание следующего сообщения** | <a id="feature-nextprediction"></a>По умолчанию включено: выключить функцию можно в **Настройки → 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> |
|
|
59
|
+
| **Дополнение при вводе** | <a id="feature-typingcompletion"></a>По умолчанию выключено: включить функцию можно в **Настройки → Composer Plus**. Пока вы печатаете, серый текст сразу после курсора показывает, как может продолжиться ваше сообщение. `Tab` добавляет его в сообщение, но не отправляет. `Esc` скрывает его. Функция предлагает только ваши собственные следующие слова: никогда не ответ вам и без выдуманных текстов ошибок или имён. Если сообщение выглядит законченным или модель не уверена, ничего не появляется. Если вы набираете следующие буквы серого текста, он остаётся, без нового вызова модели. Под её переключателем есть своё меню **Модель**. Первый пункт, **Как у предсказания следующего сообщения**, использует модель **Предсказание следующего сообщения** (выбран по умолчанию). Выберите другую модель, чтобы у каждой функции была своя, например более быстрая модель для дополнений. Она делает один вызов модели при каждой паузе в наборе, поэтому расходует намного больше токенов, чем предсказание: выберите быструю и недорогую модель. Она не работает для слеш-команды, для сообщения со значком файла и когда курсор стоит не в конце. В Tether остаток текста появляется над полем, пока вы печатаете: коснитесь его, чтобы добавить. | <a href="assets/features/typingCompletion.webp"><img src="assets/features/typingCompletion.webp" width="160" alt="Снимок экрана: Дополнение при вводе"></a> |
|
|
60
|
+
| **Улучшить промпт** | <a id="feature-promptimprove"></a>Напишите черновой запрос, затем нажмите волшебную палочку (**Улучшить промпт**) рядом с меню моделей. Один вызов модели переписывает его в более понятный промпт: сначала цель, короткие пронумерованные шаги, если частей несколько, и проверка, которую нужно запустить. Функция читает этот чат (без сообщений, убранных откатом), README, AGENTS.md и манифест проекта, изменённые файлы и файлы, имена которых совпадают с вашими словами, и сохраняет ваш язык. Она никогда не выдумывает имена файлов. Новый текст заменяет ваш черновик, но не отправляется: прочитайте его, отредактируйте, затем нажмите `Enter`. `Cmd/Ctrl+Z` возвращает ваш текст за один шаг, как и кнопка (**Отменить улучшение**). Если вы печатаете, пока она работает, ваш новый текст остаётся. `Esc` или повторное нажатие отменяет. У неё есть своё меню **Модель** в настройках (по умолчанию: **Как модель чата**). Не работает для слеш-команд и для сообщения со значком файла. В Tether палочка находится рядом с полем. | <a href="assets/features/promptImprove.webp"><img src="assets/features/promptImprove.webp" width="160" alt="Снимок экрана: Улучшить промпт"></a> |
|
|
61
|
+
| **Разрешить для этого чата** | <a id="feature-allowforchat"></a>Когда автопроверка спрашивает вас, на карточке одобрения появляется кнопка **Разрешить для этого чата**. После этого тот же инструмент в том же чате разрешён с любыми аргументами, пока не истечёт лимит времени (по умолчанию 1 час; выберите его в **Настройки → Composer Plus → Разрешить для этого чата**). Затем агент снова спрашивает. Значок в заголовке показывает список разрешений со временем их окончания и позволяет их отозвать. Разрешения сохраняются после перезапуска. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Снимок экрана: Разрешить для этого чата"></a> |
|
|
62
|
+
| **Статус проекта** | <a id="feature-projectstatus"></a>Строка проекта на боковой панели показывает ту же метку, что и его чаты: индикатор выполнения, ожидание или «готово». Поэтому даже свёрнутый проект сообщает, что чат внутри работает или ждёт вас. Сначала показывается чат, который ждёт вас, затем завершённый чат, который вы ещё не открыли (зелёная точка, даже пока другой чат ещё выполняется), затем индикатор выполнения. Наведите на метку указатель, чтобы увидеть подробности. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Снимок экрана: Статус проекта"></a> |
|
|
63
|
+
| **Отметить все как прочитанные** | <a id="feature-markprojectread"></a>На боковой панели нажмите кнопку **…** проекта → **Отметить все как прочитанные**. У всех чатов этого проекта сразу пропадает зелёная точка непрочитанного. У других проектов точки остаются. Если в проекте нет непрочитанных чатов, пункт показан серым (**Нет непрочитанных чатов**). | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Снимок экрана: Отметить все как прочитанные"></a> |
|
|
64
|
+
| **Активные проекты сверху** | <a id="feature-activeprojectsfirst"></a>Когда чат начинает работать или ждёт вас, его проект перемещается в начало боковой панели со встроенной анимацией строк dsh (так же, как при перетаскивании). Завершённые проекты остаются на месте; их можно перетаскивать как обычно. Перемещения сохраняются в порядке проектов dsh, поэтому при отключении функции текущий порядок остаётся. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Снимок экрана: Активные проекты сверху"></a> |
|
|
65
|
+
| **Фильтр недавних проектов** | <a id="feature-recentprojects"></a>Боковая панель → параметры просмотра (значок с ползунками) → **Активные за последние 2 часа**. Пока этот пункт выбран, боковая панель показывает только проекты с чатом, активным за последние 2 часа. Это чат, обновлённый за это время, выполняющийся или ожидающий чат, открытый чат или завершённый чат, который вы ещё не открыли (зелёная точка dsh «готово»), — такой чат оставляет проект на виду и после 2 часов. Проекты без такого чата скрыты, в том числе новые и пустые. Выберите пункт ещё раз, чтобы показать все проекты. Выбор сохраняется на этом устройстве. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Снимок экрана: Фильтр недавних проектов"></a> |
|
|
66
|
+
| **Свернуть все проекты** | <a id="feature-collapseprojects"></a>Пока на боковой панели открыт хотя бы один проект, рядом с параметрами просмотра (значок с ползунками) есть кнопка. Нажмите её, чтобы сразу закрыть все открытые проекты, например 3 открытых из 5. Когда открытых проектов нет, кнопка снова скрывается. | <a href="assets/features/collapseProjects.webp"><img src="assets/features/collapseProjects.webp" width="160" alt="Снимок экрана: Свернуть все проекты"></a> |
|
|
67
|
+
| **Сортировка по состоянию** | <a id="feature-statusorder"></a>Боковая панель → параметры просмотра → **Сортировать** → **По состоянию** (вместе с **Одним списком**). Сначала идут завершённые чаты (с точкой dsh «готово»; её получает и ход, который закончился ошибкой), затем выполняющиеся или ожидающие чаты, затем чаты с активной автоматизацией (расписанием), затем остальные в порядке dsh. Когда вы открываете завершённый чат, он опускается ниже. Меняется только вид: чтобы вернуться, выберите **Вручную** или **По дате изменения**. | <a href="assets/features/statusOrder.webp"><img src="assets/features/statusOrder.webp" width="160" alt="Снимок экрана: Сортировка по состоянию"></a> |
|
|
68
|
+
| **Фоновые уведомления** | <a id="feature-notifications"></a>Пока dsh работает в фоне, вы получаете уведомление, когда ход завершён (первая строка ответа) или когда чат действительно ждёт вас: одобрения (имя инструмента), ответа (сам вопрос) или проверки плана. Запрос должен оставаться открытым и через 1,5 с. Поэтому одобрения, на которые ответили автоматически (разрешения автопроверки, другие плагины), не вызывают уведомлений. Уведомление убирается, как только на его запрос ответили. Значок в Dock или на панели задач показывает число ожидающих чатов. Щелчок по уведомлению открывает этот чат. | <a href="assets/features/notifications.webp"><img src="assets/features/notifications.webp" width="160" alt="Снимок экрана: Фоновые уведомления"></a> |
|
|
69
|
+
| **Язык приложения** | <a id="feature-language"></a>Настройки → Composer Plus → **Язык приложения** переключает весь интерфейс dsh на Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt или हिन्दी (см. ниже). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Снимок экрана: Язык приложения"></a> |
|
|
70
|
+
| **Мобильное подключение (iPhone)** | <a id="feature-mobileconnect"></a>Работайте с dsh на iPhone через приложение [Tether](tether/) в той же сети Wi-Fi или через [Tailscale](https://tailscale.com). Включите функцию в **Настройки → Composer Plus** (по умолчанию она выключена, потому что открывает сетевой порт на этом Mac). Затем нажмите **Мобильное подключение** внизу слева на боковой панели, отсканируйте QR-код камерой iPhone (коснитесь **Open in Tether**) или кнопкой **Scan code** в Tether, коснитесь **Connect** и нажмите **Approve**. Сначала установите Tether: без него камера не сможет открыть код. Телефон показывает ваши чаты, отправляет сообщения, отвечает на запросы одобрения и вопросы, переключает модели и агентов. Можно связать сколько угодно Mac: имя Mac вверху слева в приложении переключает между ними. Панель **Мобильное подключение** показывает связанные iPhone и время их последнего подключения: **Remove** сразу отключает любой из них. «Tailscale only» отклоняет подключения из локальной сети (для общей сети Wi-Fi), а журнал доступа показывает, кто пытался подключиться. В Tether «Settings → Privacy» блокирует приложение с помощью Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Снимок экрана: Мобильное подключение (iPhone)"></a> |
|
|
71
|
+
| **Автоматические обновления** | <a id="feature-autoupdate"></a>При запуске dsh плагин проверяет [последний выпуск на GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Если он новее и уже есть в npm, плагин устанавливает именно эту версию через встроенный менеджер плагинов dsh (тем же путём, что и Настройки → Плагины) и уведомляет вас. Перезапустите dsh, чтобы загрузить её. **Настройки → Composer Plus → Обновления Composer Plus** показывает версию и кнопки **Проверить обновления** / **Обновить сейчас**. При первом запуске dsh с новой версией окно **Что нового в Composer Plus N** один раз показывает примечания к этой версии (из той же проверки обновлений, без нового сетевого запроса); **Закрыть** или `Esc` закрывает его. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Снимок экрана: Автоматические обновления"></a> |
|
|
72
|
+
|
|
73
|
+
<!-- END GENERATED FEATURES -->
|
|
66
74
|
|
|
67
75
|
Кнопки, подсказки, сообщения и уведомления показываются на выбранном языке dsh (см. «Язык приложения» ниже).
|
|
68
76
|
|
|
69
77
|
## Настройки
|
|
70
78
|
|
|
71
|
-
Каждую функцию можно включить или выключить отдельно: dsh **Настройки → Composer Plus**. В каждой строке есть маленький снимок экрана: наведите на него указатель, чтобы увидеть его крупнее, или нажмите, чтобы открыть в полном размере (`Esc` закрывает). Поле **Поиск функций** вверху фильтрует страницу по названию или описанию (на любом языке, без учёта регистра и диакритических знаков); `Esc` очищает его. В каждой строке есть переключатель и короткое описание. Изменения применяются сразу, без перезапуска, и запоминаются на этом устройстве. По умолчанию включено всё, кроме **Мобильное подключение**, **Продолжать после перезапуска** и **Дополнение при вводе**. Переключатели этих трёх функций, а также **Поиск по содержимому**, **Откат хода** и **Предсказание следующего сообщения** хранит Host dsh, поэтому они действуют во всех окнах и сохраняются после перезапуска. Выбор в меню **Модель** для **Предсказание следующего
|
|
79
|
+
Каждую функцию можно включить или выключить отдельно: dsh **Настройки → Composer Plus**. В каждой строке есть маленький снимок экрана: наведите на него указатель, чтобы увидеть его крупнее, или нажмите, чтобы открыть в полном размере (`Esc` закрывает). Поле **Поиск функций** вверху фильтрует страницу по названию или описанию (на любом языке, без учёта регистра и диакритических знаков); `Esc` очищает его. В каждой строке есть переключатель и короткое описание. Маленький **?** после названия строки открывает часть README с описанием этой функции, в README на языке интерфейса dsh. Изменения применяются сразу, без перезапуска, и запоминаются на этом устройстве. По умолчанию включено всё, кроме **Мобильное подключение**, **Продолжать после перезапуска** и **Дополнение при вводе**. Переключатели этих трёх функций, а также **Поиск по содержимому**, **Откат хода** и **Предсказание следующего сообщения** хранит Host dsh, поэтому они действуют во всех окнах и сохраняются после перезапуска. Выбор в меню **Модель** для **Предсказание следующего сообщения**, для **Дополнение при вводе** (по умолчанию **Как у предсказания следующего сообщения**) и для **Улучшить промпт** (по умолчанию **Как модель чата**) тоже хранит Host. **Поиск по содержимому** меняется только после перезапуска dsh (dsh читает эту настройку при запуске). До этого в его строке написано **Перезапустите dsh, чтобы применить это изменение.**
|
|
72
80
|
|
|
73
81
|
<p align="center"><img src="docs/images/settings.webp" width="720" alt="Настройки → Composer Plus: поиск функций, выбор языка, строка обновлений и переключатель для каждой функции; при наведении показывается снимок экрана"></p>
|
|
74
82
|
|
|
@@ -114,22 +122,23 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
114
122
|
- **Продолжить:** аутентифицированная локальная конечная точка возобновляет только последний прерванный ход, отклоняет устаревшие и повторные запросы и сохраняет существующие хуки одобрения. Новое сообщение пользователя она не отправляет.
|
|
115
123
|
- **Продолжать после перезапуска:** выключено, пока вы его не включите. Host-часть хранит только ID чатов и время их запуска в `$DSH_HOME/storages/dsh-composer-plus/resume.json` (доступ только для владельца), и ничего не покидает ваш компьютер. Чат продолжается, только если собственный журнал dsh показывает, что последний ход остановил dsh, а не вы. Одобрения и автопроверка действуют для продолженного хода как обычно.
|
|
116
124
|
|
|
117
|
-
- **Панель изменений:** git работает только на чтение на вашем компьютере, в папке самого чата, через аутентифицированный канал dsh `/api`. Он никогда не выполняет commit, stage или fetch и показывает только пути, которые перечислил сам git.
|
|
125
|
+
- **Панель изменений:** git работает только на чтение на вашем компьютере, в папке самого чата, через аутентифицированный канал dsh `/api`. Он никогда не выполняет commit, stage или fetch и показывает только пути, которые перечислил сам git. Дерево показывает последние 300 коммитов локальных и удалённых веток и никогда не переключает ветку (checkout). В очень большом репозитории без файла commit-graph дерево может открываться несколько секунд. **Этот чат** читает собственный журнал чата, чтобы найти файлы, которые записали его файловые инструменты, и сравнивает их со снимком отката хода этого чата во временной папке, которая сразу удаляется; он ничего не записывает ни в ваш репозиторий, ни в хранилище снимков.
|
|
118
126
|
- **Идеи функций:** ничего не запускается, пока вы не нажмёте **Предложить функции**. Затем 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 на проект (первыми удаляются самые старые); её заголовки уходят модели при следующем нажатии **Предложить функции** в этом проекте.
|
|
119
127
|
- **Поиск по содержимому:** никакой новый код не ищет по вашим чатам. Плагин только включает встроенный индекс сообщений 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`.
|
|
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`.
|
|
128
|
+
- **Откат хода:** перед каждым вашим сообщением Host делает git-снимок папки чата в собственном хранилище `$DSH_HOME/cache/composer-plus/rollback/<chat>.git` (папка доступна только владельцу). В нём хранятся копии тех файлов этой папки, которые видит git (кроме игнорируемых), поэтому оно так же конфиденциально, как сам проект. Хранилище читает объекты вашего репозитория (то, что уже есть в git, не копируется) и никогда не записывает индекс, `HEAD`, ветки, теги, stash или конфигурацию вашего репозитория. Единственное, что git там меняет, — более новая отметка времени у файлов объектов, которые он использует повторно (из-за этого `git gc` удаляет их позже). Откат с файлами записывает только обычные файлы внутри папки чата; символические ссылки, каналы (pipes) и всё за пределами папки он пропускает. Ничего не покидает ваш компьютер. Хранилище можно удалить, пока dsh закрыт (тогда откат работает только для чата, пока не появятся новые сообщения). **Удалить чат** удаляет и хранилище чата. Переключатель хранится в `$DSH_HOME/storages/dsh-composer-plus/rollback.json`. Откат с файлами также сохраняет файлы в том виде, в каком они были непосредственно перед ним (`refs/r/…` в том же хранилище), для кнопки **Повторить**; повторённые откаты перечислены в `$DSH_HOME/storages/dsh-composer-plus/redone.json` (доступ только для владельца).
|
|
121
129
|
- **Экспорт чата в Markdown:** Host-часть читает только журнал самого чата (те же сообщения, которые показывает dsh) и передаёт их странице; она не читает файлы проекта и ничего не отправляет по сети. Markdown попадает только в ваш буфер обмена или в файл, который вы сохраняете.
|
|
122
130
|
- **Удалить чат:** перемещает в Корзину только папки журнала самого чата (`$DSH_HOME/sessions/<project>/<chat>`). Папку проекта функция не трогает.
|
|
123
|
-
- **Разрешить для этого чата:** разрешения хранятся в `$DSH_HOME/storages/dsh-composer-plus/grants.json` (доступ только для владельца). Разрешение действует для
|
|
131
|
+
- **Разрешить для этого чата:** разрешения хранятся вместе со временем выдачи в `$DSH_HOME/storages/dsh-composer-plus/chat-grants.json` (доступ только для владельца). Разрешение действует для одного конкретного инструмента в одном чате, пока не истечёт лимит времени (по умолчанию 1 час). Если этот инструмент может выполнять запись, разрешение покрывает и любую запись. Отозвать его можно через значок в заголовке.
|
|
124
132
|
- Автопроверка по-прежнему выполняется при каждом вызове. Если проверка завершилась сбоем, вызов никогда не разрешается автоматически.
|
|
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 дней, срок продлевается при использовании); **
|
|
133
|
+
- **Мобильное подключение:** выключено, пока вы его не включите. Когда оно включено, Host-часть запускает шлюз Tether: HTTPS на порту 19390, который принимает подключения только из вашей подсети Wi-Fi и вашего tailnet (100.64.0.0/10), и страницу сопряжения на `127.0.0.1:19391` (только для этого Mac). Телефону нужен одноразовый код из QR-кода (действует 5 минут) и ваше подтверждение **Approve** на Mac. Телефон закрепляет сертификат шлюза. Mac хранит только хеш токена каждого телефона (30 дней, срок продлевается при использовании); **Remove** сразу закрывает подключения этого телефона. Телефоны могут вызывать только разрешённый список методов dsh (чаты, запросы, вложения, слеш-команды, одобрения, вопросы, модели, агенты, цели), но не настройки, учётные данные, обозреватель файлов или терминал. «Tailscale only» отклоняет любое подключение из локальной сети, в том числе уже открытые. Журнал доступа хранит 200 самых новых попыток подключения (время, IP-адрес, имя устройства, разрешено или отклонено и причина) в `access.json`; токенов и кодов сопряжения в нём никогда нет. Данные: `$DSH_HOME/storages/dsh-composer-plus/mobile/` (файлы доступны только владельцу). Подробности: [tether/README.md](tether/README.md).
|
|
126
134
|
- **Обновления:** 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
135
|
- **Предсказание следующего сообщения:** по умолчанию включено. Чтобы остановить эти вызовы модели, выключите его в **Настройки → Composer Plus**. После каждого завершённого хода Host-часть отправляет ваши собственные сообщения в чате и текстовые ответы агента (без вывода инструментов, скрытого контекста и рассуждений), не более примерно 6 000 символов (самую новую часть), выбранной модели (по умолчанию это модель dsh, если вы не выберете другую). Это один запрос через настройки провайдера самого dsh. В чате ничего не сохраняется: предположение не попадает в историю чата. Переключатель и выбранная модель хранятся в `$DSH_HOME/storages/dsh-composer-plus/predict.json` (файл доступен только владельцу).
|
|
128
136
|
- **Дополнение при вводе:** выключено, пока вы его не включите. Когда оно включено, при каждой паузе в наборе Host-часть отправляет уже набранный текст, а также ваши собственные сообщения в чате и текстовые ответы агента (без вывода инструментов, скрытого контекста и рассуждений), не более примерно 3 000 символов чата, модели, выбранной для **Дополнение при вводе** (по умолчанию это модель **Предсказание следующего сообщения**). Новая пауза останавливает предыдущий запрос. В чате ничего не сохраняется. Переключатель хранится в `$DSH_HOME/storages/dsh-composer-plus/complete.json` (файл доступен только владельцу).
|
|
137
|
+
- **Улучшить промпт:** ничего не запускается, пока вы не нажмёте волшебную палочку. Затем Host-часть одним запросом отправляет модели, выбранной для **Улучшить промпт** (по умолчанию это модель самого чата), ваш черновик, ваши собственные сообщения в чате и текстовые ответы агента (без вывода инструментов, скрытого контекста, рассуждений и сообщений, убранных откатом; не более примерно 6 000 символов, самую новую часть), ту же сводку проекта, что и **Идеи функций** (с теми же правилами для файлов: без `.env*` и файлов ключей, без символических ссылок за пределы папки, без FIFO), пути, которые `git status` показывает как изменённые, и до 30 отслеживаемых или неотслеживаемых (не игнорируемых) путей, в именах которых есть слова из вашего черновика. Другое содержимое файлов, кроме этой сводки, не отправляется. В чат и в проект ничего не записывается: ответ только заменяет ваш черновик в поле ввода, а отправлять ли его, решаете вы. Выбранная модель хранится в `$DSH_HOME/storages/dsh-composer-plus/improve.json` (файл доступен только владельцу).
|
|
129
138
|
|
|
130
139
|
## Устранение неполадок
|
|
131
140
|
|
|
132
|
-
- **Нет уведомлений в macOS:** Системные настройки → Уведомления → DeepSeek Harness → разрешить. Выберите
|
|
141
|
+
- **Нет уведомлений в macOS:** Системные настройки → Уведомления → DeepSeek Harness → разрешить. Выберите Предупреждения, чтобы уведомления оставались на экране.
|
|
133
142
|
- **После обновления dsh пропали ▶, маркеры очереди, статус проекта, фильтр недавних проектов, «Свернуть все проекты», «Копировать путь», поле поиска проектов, предсказание следующего сообщения, дополнение при вводе, «Разрешить для этого чата» или меню правого щелчка:** эти элементы привязаны к текущей HTML-разметке dsh, потому что в dsh пока нет для них отдельного места. Если dsh меняет эту разметку, они скрываются сами; больше ничего не ломается. Пожалуйста, откройте [issue](https://github.com/furkancak1r/dsh-composer-plus/issues).
|
|
134
143
|
- **«Не удалось обновить» или «установлена не из npm»:** копия, подключённая из локальной папки или переименованная, не может обновиться сама. Переустановите `dsh-composer-plus` в разделе Настройки → Плагины. В остальных случаях сообщение показывает первую строку ошибки pnpm; **Проверить обновления** повторяет попытку.
|
|
135
144
|
- **Мобильное подключение сообщает, что шлюз не запущен:** «no IPv4 address on en0» означает, что у этого Mac нет адреса Wi-Fi/Ethernet. «EADDRINUSE» означает, что порт 19390 или 19391 занят другим dsh (или приложением). Мобильное подключение может работать одновременно только в одном dsh.
|
|
@@ -138,8 +147,9 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
138
147
|
- **На моих сообщениях нет кнопки ↶:** откат хода выключен, это чат субагента, или установлен dsh-rewind-plugin (пользуйтесь его кнопкой ↶). После обновления перезапустите dsh.
|
|
139
148
|
- **Пункт «Чат и файлы» недоступен (серый):** проект не является репозиторием git, нет снимка до этого сообщения (сообщение старше плагина, или его снимок вытеснили 50 более новых), или ни один файл не изменился.
|
|
140
149
|
- **При удалении появляется сообщение, что этот чат открыт в другом dsh:** второй dsh с той же домашней папкой dsh удерживает блокировку чата. Закройте это окно или dsh и удалите чат снова. До этого чат остаётся в архиве.
|
|
150
|
+
- **iPhone не подключается после включения «Tailscale only»:** Tailscale должен быть включён и на Mac, и на iPhone. Панель «Мобильное подключение» предупреждает, если на Mac он выключен. Журнал доступа показывает каждую отклонённую попытку и её причину.
|
|
141
151
|
- **Чат не продолжился после перезапуска:** функция «Продолжать после перезапуска» была выключена, когда dsh завершил работу; вы сами остановили этот ход; ход уже закончился (готово или сбой); чат был в архиве; или работало больше 20 чатов (продолжаются 20 самых новых).
|
|
142
|
-
- **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.
|
|
152
|
+
- **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.13.0`), см. примечание об установке выше.
|
|
143
153
|
|
|
144
154
|
## Ограничения
|
|
145
155
|
|
|
@@ -155,9 +165,14 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
155
165
|
- **Удалить чат** требует архивации dsh (dsh 0.2.0 и новее). Если чат (или один из чатов его субагентов) не останавливается за 15 с или его удерживает другой dsh, он остаётся в архиве, и ничего не перемещается. В системах, отличных от macOS, папка корзины должна быть на том же диске, что и история чатов. Открытый чат, который вы удалили, остаётся в памяти dsh (в архиве и скрытым) до перезапуска dsh. Очищайте Корзину сами: dsh этого не делает.
|
|
156
166
|
- В очереди dsh нет действия `move`, поэтому Host-часть плагина перемещает само сообщение в очереди dsh (одно изменение, то же самое сообщение). Сообщения с изображениями или файлами тоже перемещаются. Перемещаются только ваши собственные сообщения: раунд цели или ответ на вопрос в очереди остаётся на своём месте. Если сообщение начинает отправляться, пока вы перетаскиваете, ничего не перемещается, и об этом сообщает уведомление.
|
|
157
167
|
- dsh 0.2.1 загружает обновление сразу, если новая версия не меняет никаких настроек dsh; в остальных случаях, а также в dsh 0.2.0, перезапустите dsh, чтобы загрузить его. Плагин никогда не перезапускает dsh за вас. Профили Web/CLI без менеджера плагинов dsh только сообщают о новой версии.
|
|
168
|
+
- **Разрешить для этого чата** отсчитывает лимит времени с момента выдачи разрешения. Новый лимит времени сразу применяется к действующим разрешениям, поэтому более короткий лимит может сразу их завершить. У разрешений из версии 1.12 и более ранних нет времени: после обновления агент ещё раз спросит об этих инструментах.
|
|
158
169
|
- **Сохранять фокус в поле ввода** возвращает фокус только после команды `/` или навыка. Пока dsh обрабатывает команду, поле ввода несколько миллисекунд доступно только для чтения, поэтому клавиши, нажатые в это время, теряются. Если меню `/` в dsh ещё открыто, `Enter` выбирает выделенную строку и ничего не отправляет.
|
|
159
|
-
- **Мобильное подключение** работает только в macOS (оно использует `en0`, `openssl`, `swift` и `dns-sd`). Оно использует фиксированные порты 19390 и 19391, поэтому на каждом Mac его может одновременно запускать только один dsh (каждый Mac — одна запись в списке Mac на телефоне). Телефон получает уведомления, только пока Tether открыт или только что ушёл в фон (сервиса push-уведомлений нет). Приложения для iOS пока нет в App Store: соберите его из `tether/ios` в Xcode.
|
|
160
|
-
- Ссылка на сеанс работает внутри чатов; щелчок по ней не открывает чат.
|
|
170
|
+
- **Мобильное подключение** работает только в macOS (оно использует `en0`, `openssl`, `swift` и `dns-sd`). Оно использует фиксированные порты 19390 и 19391, поэтому на каждом Mac его может одновременно запускать только один dsh (каждый Mac — одна запись в списке Mac на телефоне). Телефон получает уведомления, только пока Tether открыт или только что ушёл в фон (сервиса push-уведомлений нет). Приложения для iOS пока нет в App Store: соберите его из `tether/ios` в Xcode. «Tailscale only» всё равно требует адрес Wi-Fi или Ethernet на Mac (шлюз запускается только при таком адресе). Журнал доступа у каждого Mac свой и хранит только 200 самых новых попыток; повторная попытка в течение минуты увеличивает счётчик той же строки на один. Блокировка приложения Tether не скрывает превью уведомлений на экране блокировки iPhone: выключите их в настройках iOS. Зелёные точки в Tether следуют за Mac: у чата, который вы открыли в dsh, точка пропадает и на телефоне. У чата, который вы открыли в Tether, точка пропадает только на телефонах. Собственная точка dsh на Mac остаётся, пока вы не откроете чат на Mac.
|
|
171
|
+
- Ссылка на сеанс работает внутри чатов; щелчок по ней не открывает чат. Ссылка, созданная через **Копировать ссылку на сообщение**, открывает своё сообщение только в dsh 0.2.1 и новее и только из сообщения в чате (в dsh 0.2.0 нет правил для пользовательского текста, поэтому там ссылка копируется, но показывается как обычный текст). Сообщение, которое убрал откат или которое сжатие удалило из истории, загружаемой dsh, показать нельзя: ссылка тогда сообщает об этом. Кнопки 🔗 привязаны к строкам сообщений dsh; если обновление dsh изменит эту разметку, они не появятся.
|
|
172
|
+
- **Отметить все как прочитанные** меняет собственные точки непрочитанного dsh через часть dsh, которая не является публичным API (список `completionUnread` в состоянии сеансов dsh). Если обновление dsh переименует его, пункт не появится. Пункт добавляется в меню «…» проекта в dsh, где нет места для плагинов; если dsh изменит это меню, пункт тоже не появится.
|
|
173
|
+
- **Правка сообщения в очереди на месте** открывает встроенный редактор очереди dsh, поэтому у неё те же ограничения: сообщение с изображениями или файлами изменить нельзя, а сообщение, которое тем временем начало отправляться, не меняется (dsh показывает свою ошибку).
|
|
174
|
+
- **Повторить** никогда не меняет откаченный чат: кнопка начинает новый чат с момента непосредственно перед откатом (встроенное ответвление dsh, тот же контекст модели), поэтому у нового чата новый id и новое название. Повторить можно только самый новый откат чата, один раз и только пока после него ничего не было (новое сообщение убирает эту возможность). Файл, который вы изменили после отката, сохраняется, если вы не отметите флажок, который его перезаписывает. Для повтора нужен снимок, который сохранил откат (то же окно из 50 записей); откат, сделанный до этой версии или с вариантом **Только чат**, возвращает только сообщения.
|
|
175
|
+
- **Этот чат** учитывает только файлы, которые записали файловые инструменты dsh (`write`, `edit`, `str_replace_editor`). Файлов, которые изменила команда (`bash`), в этом представлении нет; они показаны в разделе **Незафиксированные**. Без снимка отката хода для чата (откат хода выключен, установлен dsh-rewind-plugin или чат старше плагина) представление сравнивает с последним коммитом и сообщает об этом. Откат хода хранит 50 последних снимков чата: в более длинном чате представление сравнивает с самым старым сохранённым снимком, сообщает, с какого сообщения, и не учитывает более ранние изменения. **Скрыть изменения пробелов** — это `git diff -w`: строка, в которой изменились только пробелы внутри неё, тоже скрывается.
|
|
161
176
|
- Уведомление, отправленное до перезапуска, при щелчке только выводит dsh на передний план.
|
|
162
177
|
- Активные проекты перемещаются через сохранённый порядок проектов dsh, поэтому новый порядок сохраняется после перезапуска. Чаты вне проектов («Без группы») перемещать нельзя; dsh всегда показывает их последними.
|
|
163
178
|
- В меню параметров просмотра на боковой панели у dsh нет точки расширения, поэтому пункт фильтра недавних проектов добавляется во встроенное меню dsh. Если обновление dsh изменит это меню, пункт не появится, и все проекты останутся видны. Фильтр работает со строками проектов, поэтому режим **Одним списком** не фильтруется. Используйте фильтр с **По рабочей области**: в режиме **Дерево рабочих областей** скрытая родительская папка скрывает и активные проекты внутри неё. У **По состоянию** ограничение того же рода: в dsh нет места для своего порядка сортировки, поэтому пункт и порядок строк привязаны к разметке меню и списка dsh.
|
|
@@ -165,6 +180,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
165
180
|
- В меню проектов нового чата у dsh тоже нет точки расширения, поэтому поле **Поиск проектов** и порядок A–Z привязаны к разметке меню dsh. Если обновление dsh изменит эту разметку, меню будет выглядеть так, как его рисует dsh: в сохранённом порядке и без поля поиска. Порядок A–Z — только способ показа: он не меняет сохранённый порядок проектов dsh.
|
|
166
181
|
- Для подсказки в поле ввода у dsh тоже нет точки расширения, поэтому текст **Предсказание следующего сообщения** накладывается на собственный текст-заполнитель dsh (`[data-composer-placeholder]`). Если обновление dsh изменит эту разметку, предсказание не появится. Пока функция включена, каждый завершённый ход стоит один короткий вызов модели.
|
|
167
182
|
- **Дополнение при вводе** показывает свой текст через собственную подсказку поля ввода dsh (стиль `--dsh-composer-hint`, который dsh использует для подсказки аргумента слеш-команды). Функция не работает для слеш-команды, для сообщения со значком файла или символа и когда курсор стоит не в конце сообщения. Если обновление dsh изменит этот стиль, дополнение не появится. Каждая пауза в наборе стоит один вызов модели.
|
|
183
|
+
- **Улучшить промпт** видит только краткую сводку проекта, изменённые пути и пути, имена которых совпадают с вашими словами, но не сам код. Поэтому функция может пропустить нужный файл и называет только те пути, которые получила. Прочитайте новый текст перед отправкой. Она не работает для слеш-команды и для сообщения со значком файла или символа (новый текст — обычный текст, поэтому значок бы потерялся), а в сообщении может быть не более 8 000 символов. Изображения остаются прикреплёнными: меняется только текст. Каждое нажатие стоит один вызов модели; сильной модели может понадобиться минута (`Esc` отменяет).
|
|
168
184
|
- Встроенную поддержку запросили у разработчиков dsh: `move` для очереди в [#773](https://github.com/deepseek-ai/deepseek-harness/discussions/773), состояние «Продолжить» в [#9269](https://github.com/deepseek-ai/deepseek-harness/discussions/9269).
|
|
169
185
|
|
|
170
186
|
## Частые вопросы
|
|
@@ -189,9 +205,25 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
189
205
|
|
|
190
206
|
**Какая модель пишет предсказание?** Модель, которую вы выбираете в **Настройки → Composer Plus → Предсказание следующего сообщения → Модель**. Это собственный список моделей dsh. **По умолчанию в dsh** следует модели dsh по умолчанию. Если dsh больше не показывает выбранную модель, предсказание использует модель по умолчанию. У **Дополнение при вводе** есть своё меню **Модель**: **Как у предсказания следующего сообщения** (по умолчанию) следует модели предсказания, а другой выбор действует только для дополнений. Если dsh больше не показывает эту модель, дополнения используют модель предсказания.
|
|
191
207
|
|
|
208
|
+
**Может ли dsh улучшить мой промпт перед отправкой, как кнопка Enhance prompt в Roo Code или Augment?** Да, с функцией **Улучшить промпт** (включена по умолчанию): напишите черновой запрос и нажмите волшебную палочку рядом с меню моделей. Функция переписывает текст с этим чатом и проектом в качестве контекста, на вашем языке, и не отправляет его. `Cmd/Ctrl+Z` или **Отменить улучшение** возвращает ваш текст. Модель для неё выбирается в **Настройки → Composer Plus → Улучшить промпт → Модель**.
|
|
209
|
+
|
|
192
210
|
**Как изменить порядок сообщений в очереди dsh?** Перетащите маркер ⠿ на сообщении в очереди или переведите на него фокус и нажмите `↑` / `↓`.
|
|
193
211
|
|
|
194
|
-
**Как
|
|
212
|
+
**Как исправить опечатку в сообщении в очереди?** Дважды щёлкните сообщение в очереди, измените текст и нажмите `Enter` (`Esc` отменяет). Сообщение остаётся на своём месте в очереди.
|
|
213
|
+
|
|
214
|
+
**Как сразу убрать все точки непрочитанного в проекте?** Боковая панель → кнопка **…** проекта → **Отметить все как прочитанные**.
|
|
215
|
+
|
|
216
|
+
**Можно ли дать ссылку на одно сообщение в длинном чате?** Да: наведите указатель на сообщение и нажмите **🔗**. Отправьте ссылку в чате: в dsh 0.2.1 и новее щелчок по ней открывает чат на этом сообщении.
|
|
217
|
+
|
|
218
|
+
**Я откатил ход по ошибке. Можно его вернуть?** Да, кнопкой **Повторить** над полем ввода сразу после отката: она начинает новый чат с момента непосредственно перед откатом с теми же сообщениями, а после отката с вариантом **Чат и файлы** возвращает и файлы.
|
|
219
|
+
|
|
220
|
+
**Как увидеть только файлы, которые изменил один чат?** Правая боковая панель → **Изменения** → **Этот чат**. Нажмите **␣**, чтобы скрыть изменения, которые состоят только из пробелов.
|
|
221
|
+
|
|
222
|
+
**Как сделать, чтобы автопроверка не спрашивала об одном и том же инструменте в одном чате?** Нажмите **Разрешить для этого чата** на карточке одобрения. Разрешение действует только для этого инструмента в этом чате, по умолчанию 1 час; отозвать его можно через значок в заголовке. Изменить время можно в **Настройки → Composer Plus → Разрешить для этого чата**.
|
|
223
|
+
|
|
224
|
+
**Я потерял iPhone. Как не дать ему подключаться к моему Mac?** Нажмите **Мобильное подключение** внизу слева на боковой панели и нажмите **Remove** рядом с этим iPhone. Его ключ сразу перестаёт работать; вернуться он сможет только после нового сопряжения, которое вы подтвердите на Mac.
|
|
225
|
+
|
|
226
|
+
**Можно ли заблокировать Tether с помощью Face ID?** Да: в Tether включите «Settings → Privacy → Lock with Face ID». После этого Tether запрашивает Face ID (или код-пароль) при открытии и при возврате в приложение.
|
|
195
227
|
|
|
196
228
|
**Как показать на боковой панели dsh только проекты, с которыми я работал сегодня?** Боковая панель → параметры просмотра (значок с ползунками) → **Активные за последние 2 часа**. Выберите пункт ещё раз, чтобы показать все проекты.
|
|
197
229
|
|
|
@@ -219,8 +251,12 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-sidebar-projects.mjs /pa
|
|
|
219
251
|
PLAYWRIGHT=/path/to/playwright node test/browser-recent-finished.mjs /path/to/dsh/lib/bin.js
|
|
220
252
|
# Order by status (fake model + Schedule): real-app test + its thumbnail
|
|
221
253
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-status-order.mjs /path/to/dsh/lib/bin.js
|
|
222
|
-
# every Settings feature row shows a loading screenshot
|
|
254
|
+
# every Settings feature row shows a loading screenshot and a ? link to its README row
|
|
223
255
|
PLAYWRIGHT=/path/to/playwright node test/browser-settings-shots.mjs /path/to/dsh/lib/bin.js
|
|
256
|
+
# What's new after an update: the release notes show once, Esc and Close close them
|
|
257
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-whats-new.mjs /path/to/dsh/lib/bin.js
|
|
258
|
+
# README feature anchors (the ? links) on github.com, headless: each #feature-… shows the start of its row
|
|
259
|
+
PLAYWRIGHT=/path/to/playwright node test/browser-readme-anchors.mjs
|
|
224
260
|
# Keep composer focus (fake model + demo skill): typing goes on after a / command + its thumbnail
|
|
225
261
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-keep-focus.mjs /path/to/dsh/lib/bin.js
|
|
226
262
|
# Mobile connect: switch on, QR popover, a fake iPhone pairs and calls dsh through the gateway, switch off + its thumbnail
|
|
@@ -235,14 +271,17 @@ SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-export-markdown.mjs /pat
|
|
|
235
271
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-content-search.mjs /path/to/dsh/lib/bin.js
|
|
236
272
|
# Turn rollback + Delete chat (fake model, made-up git project): bash edit → ↶ Chat and files → files back, .git unchanged; Delete… → Trash + its thumbnails
|
|
237
273
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-turn-rollback.mjs /path/to/dsh/lib/bin.js
|
|
274
|
+
# Improve prompt (fake model, made-up git project): the wand sends the draft with the chat and the project, the answer replaces the draft, Cmd+Z and Undo bring it back + its thumbnail
|
|
275
|
+
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-prompt-improve.mjs /path/to/dsh/lib/bin.js
|
|
238
276
|
```
|
|
239
277
|
|
|
240
278
|
```sh
|
|
241
279
|
npm run build:locales # after editing locales/<id>.json
|
|
280
|
+
npm run build:readme # after editing docs/features.json
|
|
242
281
|
npm test
|
|
243
282
|
```
|
|
244
283
|
|
|
245
|
-
**Правило для новых функций:** каждая строка функции в Настройки → Composer Plus показывает снимок экрана. Добавьте id функции в `SHOT_OF` в `client.js` и в `SHOTS` в `index.js` и включите в пакет `assets/features/<id>.webp` (снимок из одноразового демо-dsh с английским интерфейсом, около 60 КБ или меньше). Добавьте функцию
|
|
284
|
+
**Правило для новых функций:** каждая строка функции в Настройки → Composer Plus показывает снимок экрана. Добавьте id функции в `SHOT_OF` в `client.js` и в `SHOTS` в `index.js` и включите в пакет `assets/features/<id>.webp` (снимок из одноразового демо-dsh с английским интерфейсом, около 60 КБ или меньше). Добавьте функцию с тем же изображением в `docs/features.json` и запустите `npm run build:readme`: он записывает таблицу функций в `README.md` и в каждый переведённый `README.<id>.md`, а также список в `llms.txt`. `test/shots.test.mjs` завершается ошибкой, если у функции нет снимка экрана, а `test/browser-settings-shots.mjs` проверяет настоящую страницу настроек. Полный список проверок для каждого изменения находится в [AGENTS.md](AGENTS.md).
|
|
246
285
|
|
|
247
286
|
Тесты запускают настоящий `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`.
|
|
248
287
|
|