dsh-composer-plus 1.19.1 → 1.20.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 +8 -8
- package/README.es.md +8 -8
- package/README.fr.md +8 -8
- package/README.hi.md +8 -8
- package/README.id.md +8 -8
- package/README.ja.md +8 -8
- package/README.ko.md +8 -8
- package/README.md +8 -8
- package/README.pt-BR.md +8 -8
- package/README.ru.md +8 -8
- package/README.tr.md +8 -8
- package/README.vi.md +8 -8
- package/README.zh.md +8 -8
- package/assets/features/taskBoard.webp +0 -0
- package/client.js +327 -134
- package/index.js +165 -58
- package/package.json +1 -1
- package/release-notes.json +14 -14
- package/tether/gateway/server.mjs +1 -1
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**. **Дополнение при вводе** (по умолчанию выключено) после включения обращается к выбранной для него модели (по умолчанию это модель предсказания) при каждой паузе в наборе. **Улучшить промпт** обращается к модели, только когда вы нажимаете волшебную палочку. **Доска задач** обращается к модели нового чата один раз для тегов каждой задачи, которую вы начинаете на доске. **Проверка цели** (по умолчанию включена) обращается к модели один раз каждый раз, когда агент в автоматическом раунде отмечает `/goal` как выполненную. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
|
|
17
|
+
Неофициальный плагин сообщества. Сетевые запросы плагин делает только для проверки обновлений (выпуски GitHub и реестр npm). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Предсказание следующего сообщения** (по умолчанию включено) обращается к модели, выбранной в настройках (по умолчанию это модель dsh, если вы не выберете другую), один раз после каждого завершённого хода, без нажатия. Чтобы остановить эти запросы, выключите его в **Настройки → Composer Plus**. **Дополнение при вводе** (по умолчанию выключено) после включения обращается к выбранной для него модели (по умолчанию это модель предсказания) при каждой паузе в наборе. **Улучшить промпт** обращается к модели, только когда вы нажимаете волшебную палочку. **Доска задач** обращается к модели нового чата один раз для тегов каждой задачи, которую вы начинаете на доске. В режиме **Сводка ИИ** (по умолчанию **Быстро (без ИИ)**) она также обращается к модели работающего чата за короткой заметкой о ходе работы, пока вы смотрите ход этой задачи на доске или в Tether. **Проверка цели** (по умолчанию включена) обращается к модели один раз каждый раз, когда агент в автоматическом раунде отмечает `/goal` как выполненную. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
|
|
18
18
|
|
|
19
19
|
## Установка
|
|
20
20
|
|
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Затем перезапустите dsh. (CLI не может устанавливать плагины в профиль настольного приложения: им управляет само приложение.)
|
|
31
31
|
|
|
32
|
-
> pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.
|
|
32
|
+
> pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.20.0`.
|
|
33
33
|
|
|
34
34
|
## Функции
|
|
35
35
|
|
|
@@ -71,7 +71,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
71
71
|
| **Запланированные шаги** | <a id="feature-plannedsteps"></a>По умолчанию выключено: включите функцию в **Настройки → Composer Plus**. Агент получает инструмент `plan_next_steps`: в том же сообщении, что и команда, он может спланировать следующие команды с точными аргументами и условием, например «запусти `npm test`, если сборка прошла». Когда результат выполняет условие, Composer Plus сам запускает следующий шаг без нового вызова модели, и длинный чат расходует меньше токенов. Шаг видно в чате как короткую строку «Composer Plus · Planned steps: ran `test` … without a model call», за ней идут вызов инструмента и результат. Только шаги `bash`, `read`, `grep` и `glob`; подтверждения, песочница и «Защищённые файлы» действуют на каждый шаг как обычно. Модель отвечает снова, когда условие не выполнено, когда два шага готовы одновременно, после последнего шага и когда вы отправляете сообщение. Идея взята из HarnessMM (arXiv 2610.32813). | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Снимок экрана: Запланированные шаги"></a> |
|
|
72
72
|
| **Защищённые файлы** | <a id="feature-protectedfiles"></a>Включено по умолчанию. Собственные файловые инструменты агента не могут читать или изменять файлы, подходящие под ваши шаблоны: `read`, `read_image` и `grep` по файлу отклоняются для шаблонов **чтение и запись**, а `write`, `edit` и `str_replace_editor` — для обоих видов. Агент читает причину, и ему предлагается спросить вас. Шаблоны по умолчанию: `.env*`, `*.pem` и `*.key`. Настройки → Composer Plus → **Защищённые файлы**: добавьте шаблон (например, `published/**` или `config/*.yml`), нажмите на его вид, чтобы переключить между **чтение и запись** и **только запись**, удалите его кнопкой ✕ или нажмите **Использовать значения по умолчанию**. Шаблон без `/` подходит к имени файла в любой папке. Это ограждение, а не песочница: команда оболочки (`cat .env`), скрипт или инструмент MCP всё равно могут добраться до файла (см. «Ограничения»). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Снимок экрана: Защищённые файлы"></a> |
|
|
73
73
|
| **Заблокированные команды** | <a id="feature-blockedcommands"></a>Включено по умолчанию, список изначально пуст. Команды оболочки агента (`bash`, `pwsh`) не могут запустить команду, подходящую под ваши правила: правило **блокировать** отклоняет вызов (агент читает причину, и ему предлагается спросить вас), правило **сначала спросить** показывает карточку одобрения dsh, и команда запускается, только когда вы её разрешите. Настройки → Composer Plus → **Заблокированные команды**: введите правило (например, `npm publish`, `git push --force` или `ssh *192.168.2.19`), нажмите на вид, чтобы переключить между **блокировать** и **сначала спросить**, затем нажмите **Добавить**; нажмите на вид правила, чтобы изменить его, удалите правило кнопкой ✕. Правило — это имя команды и слова, которые должны идти после него в этом порядке; `*` подходит к любому тексту. Функция также находит команду после `&&`, `;`, `\|`, внутри `$(…)`, `bash -c "…"` или `eval`, а также после `sudo` или `env`. Это ограждение, а не песочница: переменная (`$CMD`), файл скрипта или другая программа всё равно могут запустить команду (см. «Ограничения»). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Снимок экрана: Заблокированные команды"></a> |
|
|
74
|
-
| **Доска задач** | <a id="feature-taskboard"></a>Левая боковая панель → **Доска задач**. Канбан-доска ваших чатов dsh с тем же живым состоянием, что показывает боковая панель: чат, который ждёт вашего одобрения, ответа или проверки плана, находится в **На проверке** с оранжевой точкой, работающий чат — в **В работе**, завершённый чат — в **Готово** (зелёный, пока вы его не откроете). Выберите слева проект или **Все проекты**; папка ветки для каждого чата считается частью своего проекта. Введите текст в **Поиск проектов** над списком, чтобы найти проект по названию (регистр и диакритические знаки не важны; `Esc` очищает поле), и нажмите **Активные за последние 2 часа**, чтобы показать только проекты с чатом, который ждёт, работает, завершился и ещё не просмотрен или изменился за последние 2 часа (настройка хранится на этом устройстве). **Новая задача** (или `n`)
|
|
74
|
+
| **Доска задач** | <a id="feature-taskboard"></a>Левая боковая панель → **Доска задач**. Канбан-доска ваших чатов dsh с тем же живым состоянием, что показывает боковая панель: чат, который ждёт вашего одобрения, ответа или проверки плана, находится в **На проверке** с оранжевой точкой, работающий чат — в **В работе**, завершённый чат — в **Готово** (зелёный, пока вы его не откроете). Выберите слева проект или **Все проекты**; папка ветки для каждого чата считается частью своего проекта. Введите текст в **Поиск проектов** над списком, чтобы найти проект по названию (регистр и диакритические знаки не важны; `Esc` очищает поле), и нажмите **Активные за последние 2 часа**, чтобы показать только проекты с чатом, который ждёт, работает, завершился и ещё не просмотрен или изменился за последние 2 часа (настройка хранится на этом устройстве). **Новая задача** (или `n`) открывает собственный новый чат dsh в проекте, который показывает доска (при **Все проекты** — в проекте, который выбирает «Новый сеанс» dsh), поэтому вы можете добавлять файлы, использовать команды и выбирать модель, как в любом чате. Когда ваше первое сообщение отправлено, доска возвращается сама. До этого чат ждёт в **К выполнению** как **Новая задача**: нажмите на него, чтобы написать первое сообщение. Столбец **К выполнению** показывается только в это время. У проекта с чатом, который ждёт вас, в списке проектов есть оранжевая точка. dsh даёт чату название, а модель чата пишет до 3 тегов по этому сообщению. Нажмите на карточку, чтобы открыть её чат. На оранжевой карточке нажмите **Ответить**, чтобы ответить прямо на доске: **Отклонить** или **Разрешить один раз**, **Одобрить** или **Запросить изменения** для плана, либо варианты и ваш собственный текст для вопроса. **Скрыть завершённые** скрывает **Готово** на этом устройстве. Наведите указатель на карточку в **В работе** (или переведите на неё фокус клавиатуры), чтобы увидеть ход работы: сколько времени работает чат, шаг его списка задач, инструмент, который работает сейчас, и последнюю строку агента. В разделе Настройки → Composer Plus → Доска задач параметр **Ход работы при наведении** выбирает **Быстро (без ИИ)** (по умолчанию: только читает чат) или **Сводка ИИ** (один короткий вызов модели чата дополнительно пишет одно-два предложения). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Снимок экрана: Доска задач"></a> |
|
|
75
75
|
| **Память проекта** | <a id="feature-projectmemory"></a>По умолчанию выключено: включите функцию в **Настройки → Composer Plus**. У каждой папки проекта своя память, которую читают следующие чаты этого проекта, так же как DS Bot хранит память для каждого бота. После каждого завершённого хода один вызов модели чата читает новые сообщения (без отменённых откатом), сохраняет ваши постоянные предпочтения, решения и факты как короткие заметки и изменяет или удаляет старые. Агент также может сам сохранять, удалять и искать заметки (`memory_remember`, `memory_forget`, `memory_recall`). Заметка может быть и глобальной: её читают все проекты. Новый чат получает заметки в системном промпте; заметка, сохранённая позже, появляется со следующего чата. Файлы хранятся в формате Markdown в домашней папке dsh (`storages/dsh-composer-plus/memory/`), никогда в папке проекта. Кнопка **Открыть память** в той же строке показывает все сохранённые заметки по проектам (и глобальную память), с фильтром. Опишите своими словами, что изменить (например, «я перешёл с yarn на pnpm»), затем нажмите **Предпросмотр изменений**: модель dsh по умолчанию предлагает изменения, а сохраняет их только **Применить**. В Tether: меню заголовка чата → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Снимок экрана: Память проекта"></a> |
|
|
76
76
|
| **Разрешить для этого чата** | <a id="feature-allowforchat"></a>Когда автопроверка спрашивает вас, на карточке одобрения появляется кнопка **Разрешить для этого чата**. После этого тот же инструмент в том же чате разрешён с любыми аргументами, пока не истечёт лимит времени (по умолчанию 1 час; выберите его в **Настройки → Composer Plus → Разрешить для этого чата**). Затем агент снова спрашивает. Значок в заголовке показывает список разрешений со временем их окончания и позволяет их отозвать. Разрешения сохраняются после перезапуска. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Снимок экрана: Разрешить для этого чата"></a> |
|
|
77
77
|
| **Статус проекта** | <a id="feature-projectstatus"></a>Строка проекта на боковой панели показывает ту же метку, что и его чаты: индикатор выполнения, ожидание или «готово». Поэтому даже свёрнутый проект сообщает, что чат внутри работает или ждёт вас. Сначала показывается чат, который ждёт вас, затем завершённый чат, который вы ещё не открыли (зелёная точка, даже пока другой чат ещё выполняется), затем индикатор выполнения. Наведите на метку указатель, чтобы увидеть подробности. В режиме **Дерево рабочих областей** строка родительской папки также показывает чаты каждого проекта внутри неё (например, каждой папки ветки в `.worktrees/`), даже когда папка свёрнута. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Снимок экрана: Статус проекта"></a> |
|
|
@@ -169,7 +169,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
169
169
|
- **Проверка цели:** запускается, только когда агент в автоматическом раунде отмечает `/goal` как выполненную (или когда вы нажимаете **Запустить сейчас**). Host-часть запускает тестовую команду в папке чата в режиме песочницы этого чата (как собственный инструмент `bash` в dsh: та же политика доступа к файлам; если эта песочница не может запуститься, тест не запускается и проверка не пройдена). Чтобы найти команду, она читает только `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml` и `pytest.ini`, как обычные файлы внутри папки (без символических ссылок за пределы папки, без FIFO). Затем она одним запросом без инструментов отправляет модели, выбранной для **Проверка цели** (по умолчанию это модель самого чата), цель, чат с момента начала цели (ваши сообщения, ответы агента, вызовы инструментов, обрезанные до 1 000 символов, и последние 2 000 символов каждого результата инструмента; без рассуждений и шагов, убранных откатом; не более примерно 60 000 символов, самую новую часть), `git status --short` и конец вывода теста. Вывод инструментов может содержать то, что прочитал агент, поэтому в этом запросе могут быть части ваших файлов, как и в самом чате. В чат и в проект ничего не записывается. Ваша тестовая команда, лимиты, последний результат (с концом его вывода) и выбранная модель хранятся в `$DSH_HOME/storages/dsh-composer-plus/goal-check.json` (файл доступен только владельцу, последние 500 чатов).
|
|
170
170
|
- **Продолжить в новом чате:** ничего не запускается, пока вы не нажмёте этот пункт. Затем Host-часть отправляет чат (так, как его читает Проверка цели: без рассуждений и шагов, убранных откатом) собственной модели чата и показывает заметку для передачи; новый чат создаёт только **Начать новый чат**. В проект ничего не записывается.
|
|
171
171
|
- **Состав контекста:** Host-часть читает только журнал чата; без вызова модели и без файлов проекта.
|
|
172
|
-
- **Доска задач:** доска показывает чаты dsh из собственных списков dsh в этом окне; своих данных о чатах она не добавляет.
|
|
172
|
+
- **Доска задач:** доска показывает чаты dsh из собственных списков dsh в этом окне; своих данных о чатах она не добавляет. **Новая задача** открывает собственный новый чат dsh, и вы пишете первое сообщение в поле ввода dsh, поэтому подтверждения, песочница и модель чата действуют как обычно. Host-часть сохраняет первое сообщение этого чата как промпт карточки и отправляет его (первые 4 000 символов, больше ничего) модели этого чата ещё одним запросом, без инструментов, чтобы получить до 3 тегов. Промпт, теги и время запуска каждой задачи хранятся в `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` (файл доступен только владельцу, последние 2 000); переключатель хранится рядом, в `board-switch.json`. В папку проекта ничего не записывается. **Ответить** отправляет ваш ответ в ожидающий запрос dsh так же, как это делает карточка в самом чате. Старый список задач прежних версий (`board.json`) остаётся на диске без изменений и не читается. **Ход работы при наведении** читает журнал чата на этом Mac. В режиме **Быстро (без ИИ)** (по умолчанию) ничего не отправляется. В режиме **Сводка ИИ**, пока видно окно хода работы у работающей карточки (или пока доска в Tether открыта, не более чем для 8 работающих карточек), часть Host отправляет самую новую часть этого чата (не более примерно 6 000 символов: ваши сообщения, текстовые ответы агента, его вызовы инструментов и конец их результатов; без рассуждений и сообщений, убранных откатом) модели чата одним запросом без инструментов. Снова она отправляет только после того, как чат продвинулся, и не чаще одного раза в 20 секунд для каждого чата. Заметка хранится только в памяти; настройка хранится в `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` (файл доступен только владельцу).
|
|
173
173
|
- **Защищённые файлы:** список и переключатель хранятся в `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` (файл доступен только владельцу). Проверка читает только путь каждого вызова файлового инструмента (и его реальный путь), но никогда не сам файл.
|
|
174
174
|
- **Заблокированные команды:** правила и переключатель хранятся в `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` (файл доступен только владельцу). Проверка читает только текст команды каждого вызова `bash` и `pwsh`; она ничего не запускает и ничего не отправляет.
|
|
175
175
|
- **Память проекта:** выключена, пока вы её не включите. Когда она включена, после каждого завершённого хода чата верхнего уровня часть Host отправляет новые сообщения этого чата с момента последнего разбора (ваши сообщения и текстовые ответы агента; без вывода инструментов, рассуждений, скрытого контекста и сообщений, убранных откатом; в ответвлённом чате копия родительского чата не учитывается; не больше примерно 16 000 символов) и сохранённые заметки модели этого чата, одним запросом без инструментов. Заметки — это файлы Markdown в `$DSH_HOME/storages/dsh-composer-plus/memory/` (доступны только владельцу): `projects/<id>/` для каждой папки проекта (`<id>` — хеш реального пути папки; `project.json` указывает папку), `global/`, `journal.jsonl` (каждое изменение со строкой до и после) и `reviewed.json` (до какого места прочитан каждый чат). В папку проекта ничего не записывается. Заметки, похожие на ключ, токен, пароль или номер документа, отклоняются. Заметки проекта попадают в системный промпт каждого нового чата в этой папке, поэтому уходят модели с каждым запросом этого чата. Переключатель хранится в `memory.json` там же. **Открыть память** ничего не отправляет, пока вы не нажмёте **Предпросмотр изменений**; тогда она отправляет показанные заметки и ваш текст модели dsh по умолчанию одним запросом без инструментов. Изменения записываются только по **Применить**, в журнале с `editor`. Tether читает и изменяет заметки через тот же маршрут.
|
|
@@ -194,7 +194,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
194
194
|
- **На строке чата нет метки ветки:** боковая панель не в режиме «Одним списком» (в режимах «По рабочей области» и «Дерево рабочих областей» ни одна строка чата не показывает метку), у чата не было хода с момента установки этой версии, его папка не является репозиторием git, или функция **Ветка Git в строках чатов** выключена. После обновления перезапустите dsh (ветку записывает Host-часть).
|
|
195
195
|
- **Проверка цели сообщает, что тест завершился с кодом 127 или «not found»:** у dsh, запущенного из Finder или Dock, PATH может быть короче, чем в вашем терминале, поэтому он не находит `npm`, `pnpm` или `cargo`. Запустите dsh из терминала или задайте свою тестовую команду с полным путём в **Проверка цели** → **Изменить**. **Запустить сейчас** сразу показывает результат.
|
|
196
196
|
- **Цель не закрывается, и агент продолжает работать:** **Проверка цели** нашла непройденный тест или недоделанную работу; строка под целью показывает причину (наведите указатель на результат, чтобы увидеть подробности). Исправьте причину или тестовую команду либо завершите цель сами командой `/goal` или через панель цели (это не проверяется).
|
|
197
|
-
- **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.
|
|
197
|
+
- **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.20.0`), см. примечание об установке выше.
|
|
198
198
|
- **Кнопка «Создать копию сейчас» сообщает «Уже выполняется другое действие с резервными копиями»:** действие выполняется в другом окне dsh или в аварийной консоли (они используют общий файл блокировки `.composer-plus.lock` в папке резервных копий). Дождитесь его окончания. Если никакое действие не выполняется, блокировку закрытого процесса перехватит следующее нажатие.
|
|
199
199
|
- **Аварийная консоль сообщает «dsh is running»:** сначала выйдите из dsh. Если dsh действительно закрыт, файл, названный в сообщении, остался после сбоя: удалите его и повторите попытку.
|
|
200
200
|
- **После восстановления dsh не запускается или не хватает плагина:** пакеты плагинов профиля нужно установить заново. Аварийная консоль предлагает это после восстановления; или выполните `pnpm install` в каждой папке внутри `$DSH_HOME/profiles/`, которую она перечисляет. Секреты, которых не было в vault (другой компьютер), нужно ввести заново: консоль перечисляет их.
|
|
@@ -249,7 +249,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
249
249
|
- **Продолжить в новом чате** отправляет чат (сообщения, вызовы инструментов и конец каждого результата инструмента, не более примерно 60 000 символов, самую новую часть) собственной модели чата. Заметка для передачи может пропустить решение или файл: прочитайте её перед запуском. Новый чат знает только заметку и связанный чат (dsh прикрепляет старый чат как контекст только для чтения); его контекст модели начинается с малого, а старый чат остаётся как есть. Для одного чата одновременно идёт только одна заметка или один запуск.
|
|
250
250
|
- **Состав контекста** показывает оценки по собственному правилу dsh (около 4 символов на токен), тому же правилу, что и у кольца контекста dsh; собственный подсчёт модели может отличаться. Определения инструментов взяты из самого нового запроса. Функция показывает контекст так, как он записан в журнале чата; ход, который идёт сейчас, появляется после своего следующего шага.
|
|
251
251
|
- **Запланированные шаги** экономят токены, только когда модель действительно планирует: пока функция включена, каждый запрос несёт инструмент `plan_next_steps` и короткую инструкцию (около 500 токенов), даже в чатах, где модель никогда не планирует. Условие доказывает только то, что в нём сказано (например: код выхода сборки был 0), а не то, что работа сделана верно. `ok` читает собственные отметки результата dsh (`[exit code: N]`, тайм-ауты, отказы песочницы); команда, которая завершилась неудачей без ненулевого кода выхода, считается успешной. Шаги выполняются по одному; два шага, готовые одновременно, возвращаются модели. Сообщение шага сохраняется как сообщение ассистента модели чата (в dsh нет отметки для сообщения, написанного плагином), поэтому его текст говорит, что шаг запустил Composer Plus. В Tether нет.
|
|
252
|
-
- **Доска задач** показывает чаты, которые dsh перечисляет в этом окне: чат вне проекта виден только в **Все проекты**, а папка ветки для каждого чата (`<project>/.worktrees/<name>`) считается частью своего проекта. Колонка карточки — это живое состояние чата, поэтому карточки нельзя перетаскивать: чат переходит в **Готово**, когда его ход заканчивается, в том числе после ошибки или остановки, и возвращается в **В работе**, когда снова запускается. Зелёная точка — это собственная точка завершения dsh, которую dsh хранит только в этом окне: после перезагрузки завершённые чаты показываются без неё. **Готово** показывает 50 последних чатов (**Показать более старые: N** показывает остальные). **Поиск проектов** находит проект только по названию, а не по пути к его папке. **Активные за последние 2 часа** скрывает проект, если каждый его чат старше 2 часов, неактивен и прочитан; доска всё равно показывает выбранный вами проект. Теги берутся из одного вызова модели на каждую
|
|
252
|
+
- **Доска задач** показывает чаты, которые dsh перечисляет в этом окне: чат вне проекта виден только в **Все проекты**, а папка ветки для каждого чата (`<project>/.worktrees/<name>`) считается частью своего проекта. Колонка карточки — это живое состояние чата, поэтому карточки нельзя перетаскивать: чат переходит в **Готово**, когда его ход заканчивается, в том числе после ошибки или остановки, и возвращается в **В работе**, когда снова запускается. Зелёная точка — это собственная точка завершения dsh, которую dsh хранит только в этом окне: после перезагрузки завершённые чаты показываются без неё. **Готово** показывает 50 последних чатов (**Показать более старые: N** показывает остальные). **Поиск проектов** находит проект только по названию, а не по пути к его папке. **Активные за последние 2 часа** скрывает проект, если каждый его чат старше 2 часов, неактивен и прочитан; доска всё равно показывает выбранный вами проект. **Новая задача** помнит только последний новый чат этого окна: если вы открываете другой чат до первого сообщения, тот чат остаётся в **К выполнению** как **Новая задача**, пока вы в нём не напишете, но доска возвращается сама только для последнего. После перезагрузки новый чат без сообщения не показывается на доске (dsh хранит его как свой пустой «Новый сеанс»). Теги берутся из одного вызова модели на каждую задачу, по её первому сообщению: они могут быть ошибочными, а у чата, который вы начали не на доске, их нет. Название — это собственное название чата в dsh (служба названий dsh, с моделью чата); пока его нет, карточка показывает первую строку первого сообщения. **Ответить** отвечает только на последний запрос чата: если на него уже ответили в другом месте (другое окно, Tether, автопроверка) или чат спрашивает что-то новое, панель сообщает об этом и ничего не отправляет. В прежних версиях был список задач с комментариями и инструментами для агентов; их больше нет, а старый `board.json` не показывается. Идея и внешний вид взяты из [Kanzo](https://github.com/emanuele-em/kanzo) от emanuele-em (AGPL-3.0); Composer Plus не использует его код.
|
|
253
253
|
- **Приоритет сообщения после остановки** работает только после того, как вы остановили чат (или после хода с ошибкой, или когда вы открываете чат, у которого ещё есть очередь): сообщение, отправленное во время хода, по-прежнему ждёт в конце очереди. Оно обгоняет только ваши собственные сообщения в очереди: если в очереди ждёт раунд цели или ответ на вопрос, остаётся порядок dsh. Функция читает часть dsh, которая не является публичным API (завершается ли ещё остановленный ход); если обновление dsh её переименует, сообщение встанет первым только после завершения этого хода. Чаты субагентов сохраняют порядок dsh.
|
|
254
254
|
- **Память проекта** принадлежит первой папке чата (папке проекта dsh): чат, который меняет папку командой `cd`, сохраняет память своего первого проекта, а та же папка, открытая по другому пути к тем же файлам, использует ту же память. Чат замораживает свой раздел памяти при запуске, поэтому заметка, сохранённая позже, появляется со следующего чата (`memory_recall` находит её сразу). Разбор сохраняет только то, что решила сохранить модель: он может пропустить факт или сохранить неверный; проверьте их в **Открыть память** и измените там, или правьте файлы вручную, когда dsh закрыт. **Открыть память** отправляет заметки выбранного проекта и глобальные заметки (все проекты, если выбрано «Все заметки»; не больше примерно 60 000 символов, остальные только считаются и не могут измениться в этом запросе) и ваш текст модели dsh по умолчанию, а не модели чата. Предпросмотр хранится на Mac 30 минут и до перезапуска dsh; если за это время разбор или агент изменят заметки, **Применить** откажет, и нужно запросить предпросмотр снова. **Применить** сохраняет все изменения предпросмотра или ни одного: если одно изменение нельзя сохранить (например, MEMORY.md заполнен), заметки остаются как были, и показывается причина. Каждый завершённый ход с вашим сообщением стоит одного вызова модели; неудачный вызов перечитывает те же сообщения после следующего хода. Чаты субагентов не разбираются. Идея и формат файлов взяты из [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); Composer Plus не использует его код и никогда не читает и не записывает собственную память DS Bot.
|
|
255
255
|
- **Резервное копирование** использует одну постоянную папку, `~/Desktop/dsh-backups` (папку dsh-backup по умолчанию, поэтому его архивы остаются пригодными); настройки для другой папки нет. Архив примерно такого же размера, как домашняя папка dsh без `cache/` и `dsh-runtimes/` (измерено: из 1,6 ГБ файлов получился архив 830 МБ примерно за 30 с на Apple Silicon; dsh при этом отвечал). Файл, который меняется во время чтения, сохраняется в том виде, в каком он был, когда резервное копирование его открыло, поэтому журнал открытого чата может заканчиваться обрезанной записью, которую dsh исправляет при следующей записи. Скрытие находит секрет в файле yml по имени ключа в одной строке (`token:`, `apiKey:`, …); секрет в потоковом словаре (`{token: x}`), в списке под таким ключом, в файле JSON (например, `apiKey` сервера MCP в файле `.json`) или под другим именем остаётся в архиве. Архивы dsh-backup по типам (`dsh-t-…`) не показываются в списке. **Для другого компьютера** копирует архив (в APFS — клон, без дополнительного места); vault с ним не копируется. **Создать копию сейчас** не удаляет ни одной резервной копии. Автоматическое резервное копирование хранит самые новые резервные копии, которые создал Composer Plus (настройка **Хранить** функции **Автоматическое резервное копирование**), и удаляет более старые из них; снимки перед обновлением считаются отдельно (остаются 2 самых новых). Архивы dsh-backup не удаляются никогда: уберите их кнопкой **Удалить**. Пока dsh-backup ещё установлен, он учитывает архивы Composer Plus в своём лимите хранимых копий и может их удалить.
|
|
@@ -286,7 +286,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
|
|
|
286
286
|
|
|
287
287
|
**Может ли агент помнить мои предпочтения между чатами, как память DS Bot?** Да, с функцией **Память проекта** (по умолчанию выключена): включите её в **Настройки → Composer Plus**. После каждого хода ваши постоянные предпочтения и решения сохраняются короткими заметками для проекта чата, и каждый новый чат этого проекта их читает. Попросите агента что-то запомнить, и он сразу сохранит это. Чтобы посмотреть или изменить заметки, нажмите **Открыть память** в той же строке и напишите, что изменить.
|
|
288
288
|
|
|
289
|
-
**Можно ли видеть все мои чаты в виде канбан-доски и начинать с неё новые?** Да, с функцией **Доска задач** (по умолчанию включена): откройте её на левой боковой панели. Каждый чат — это карточка в **В работе**, **На проверке** (он ждёт вас) или **Готово**. **Новая задача**
|
|
289
|
+
**Можно ли видеть все мои чаты в виде канбан-доски и начинать с неё новые?** Да, с функцией **Доска задач** (по умолчанию включена): откройте её на левой боковой панели. Каждый чат — это карточка в **В работе**, **На проверке** (он ждёт вас) или **Готово**. **Новая задача** открывает новый чат dsh в проекте, а доска возвращается, когда ваше первое сообщение отправлено; нажмите **Ответить** на оранжевой карточке, чтобы ответить, не открывая чат.
|
|
290
290
|
|
|
291
291
|
**Может ли dsh создавать резервные копии моих чатов и настроек, как dsh-backup?** Да: **Настройки → Composer Plus → Резервное копирование → Создать копию сейчас**. Он записывает архив того же формата в ту же папку (`~/Desktop/dsh-backups`), поэтому архивы dsh-backup тоже показываются и восстанавливаются, а dsh-backup можно удалить. Чтобы копии создавались по расписанию, включите **Автоматическое резервное копирование**.
|
|
292
292
|
|
|
@@ -408,7 +408,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
408
408
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
409
409
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
410
410
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
411
|
-
# Task board:
|
|
411
|
+
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, Hide finished, the switch
|
|
412
412
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
413
413
|
```
|
|
414
414
|
|
package/README.tr.md
CHANGED
|
@@ -14,7 +14,7 @@ Bu sayfa bir çeviridir. Esas alınan sürüm, İngilizce [README.md](README.md)
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="Composer Plus ile DeepSeek Harness: çalışan proje kenar çubuğunda dönen bir simge gösteriyor, Değişiklikler paneli bir git farkı gösteriyor"></p>
|
|
16
16
|
|
|
17
|
-
Resmî olmayan bir topluluk eklentisidir. Eklentinin yaptığı tek ağ çağrısı güncelleme denetimidir (GitHub sürümleri ve npm kayıt defteri). Açılışta bu çağrıları durdurmak için **Otomatik güncellemeler** ayarını kapatın. **Özellik fikirleri**, sohbetin kendi modelini yalnızca **Özellik öner** düğmesine tıkladığınızda çağırır. **Sonraki mesaj tahmini** (varsayılan olarak açık), biten her turdan sonra Ayarlar’da seçilen modeli (siz başka bir model seçmediyseniz dsh’nin varsayılan modelini) tıklama olmadan bir kez çağırır. Bu çağrıları durdurmak için özelliği **Ayarlar → Composer Plus** içinden kapatın. **Yazarken tamamla** (varsayılan olarak kapalı), siz açtıktan sonra yazarken her duraklamada kendisi için seçilen modeli (varsayılan olarak tahminin modelini) çağırır. **İstemi iyileştir**, bir modeli yalnızca sihirli değnek düğmesine tıkladığınızda çağırır. **Görev panosu**, panoda başlattığınız her görevin etiketleri için yeni sohbetin modelini bir kez çağırır. **Hedef kontrolü** (varsayılan olarak açık), ajan otomatik bir turda bir `/goal` hedefini tamamlandı olarak her işaretlediğinde bir modeli bir kez çağırır. **Mobil bağlantı** (varsayılan olarak kapalı), yerel ağınızdan veya tailnet’inizden gelen iPhone bağlantılarını yalnızca siz açtıktan sonra kabul eder.
|
|
17
|
+
Resmî olmayan bir topluluk eklentisidir. Eklentinin yaptığı tek ağ çağrısı güncelleme denetimidir (GitHub sürümleri ve npm kayıt defteri). Açılışta bu çağrıları durdurmak için **Otomatik güncellemeler** ayarını kapatın. **Özellik fikirleri**, sohbetin kendi modelini yalnızca **Özellik öner** düğmesine tıkladığınızda çağırır. **Sonraki mesaj tahmini** (varsayılan olarak açık), biten her turdan sonra Ayarlar’da seçilen modeli (siz başka bir model seçmediyseniz dsh’nin varsayılan modelini) tıklama olmadan bir kez çağırır. Bu çağrıları durdurmak için özelliği **Ayarlar → Composer Plus** içinden kapatın. **Yazarken tamamla** (varsayılan olarak kapalı), siz açtıktan sonra yazarken her duraklamada kendisi için seçilen modeli (varsayılan olarak tahminin modelini) çağırır. **İstemi iyileştir**, bir modeli yalnızca sihirli değnek düğmesine tıkladığınızda çağırır. **Görev panosu**, panoda başlattığınız her görevin etiketleri için yeni sohbetin modelini bir kez çağırır. **AI özeti** ayarıyla (varsayılan **Hızlı (AI’sız)**), çalışan bir görevin ilerlemesine panoda ya da Tether'da baktığınızda kısa bir ilerleme notu için o sohbetin modelini de çağırır. **Hedef kontrolü** (varsayılan olarak açık), ajan otomatik bir turda bir `/goal` hedefini tamamlandı olarak her işaretlediğinde bir modeli bir kez çağırır. **Mobil bağlantı** (varsayılan olarak kapalı), yerel ağınızdan veya tailnet’inizden gelen iPhone bağlantılarını yalnızca siz açtıktan sonra kabul eder.
|
|
18
18
|
|
|
19
19
|
## Kurulum
|
|
20
20
|
|
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz; bu profili uygulama yönetir.)
|
|
31
31
|
|
|
32
|
-
> dsh’nin pnpm’i, yayımlanmasının üzerinden 24 saat geçmemiş sürümleri atlar. Bir yayından hemen sonra sürümü ekleyin: `dsh-composer-plus@1.
|
|
32
|
+
> dsh’nin pnpm’i, yayımlanmasının üzerinden 24 saat geçmemiş sürümleri atlar. Bir yayından hemen sonra sürümü ekleyin: `dsh-composer-plus@1.20.0`.
|
|
33
33
|
|
|
34
34
|
## Özellikler
|
|
35
35
|
|
|
@@ -71,7 +71,7 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
|
|
|
71
71
|
| **Planlı adımlar** | <a id="feature-plannedsteps"></a>Varsayılan olarak kapalıdır: **Ayarlar → Composer Plus** içinden açın. Ajan `plan_next_steps` aracını alır: bir komutla aynı mesajda, sonraki komutları kesin argümanları ve bir koşulla planlayabilir; örneğin "derleme geçince `npm test` çalıştır". Sonuç koşulu karşılarsa Composer Plus sonraki adımı yeni bir model çağrısı yapmadan kendisi çalıştırır; böylece uzun bir sohbet daha az token harcar. Adım sohbette kısa bir satırla görünür: "Composer Plus · Planned steps: ran `test` … without a model call"; ardından araç çağrısı ve sonucu gelir. Yalnız `bash`, `read`, `grep` ve `glob` adımları; onaylar, sandbox ve Korunan dosyalar her adımda her zamanki gibi geçerlidir. Koşul tutmazsa, aynı anda iki adım hazırsa, son adımdan sonra ve siz mesaj yazınca model yeniden yanıt verir. Fikir HarnessMM'den (arXiv 2610.32813) gelir. | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Ekran görüntüsü: Planlı adımlar"></a> |
|
|
72
72
|
| **Korunan dosyalar** | <a id="feature-protectedfiles"></a>Varsayılan olarak açık. Ajanın kendi dosya araçları, desenlerinizle eşleşen dosyaları okuyamaz ve değiştiremez: **okuma ve yazma** desenlerinde bir dosya üzerindeki `read`, `read_image` ve `grep` reddedilir; her iki türde de `write`, `edit` ve `str_replace_editor` reddedilir. Ajan nedenini okur ve size sorması söylenir. Varsayılan desenler `.env*`, `*.pem` ve `*.key`. Ayarlar → Composer Plus → **Korunan dosyalar**: bir desen ekleyin (örneğin `published/**` ya da `config/*.yml`), türüne tıklayarak **okuma ve yazma** ile **yalnızca yazma** arasında geçin, ✕ ile kaldırın ya da **Varsayılanları kullan**. `/` içermeyen bir desen, her klasördeki dosya adıyla eşleşir. Bu bir korkuluktur, korumalı alan değildir: bir kabuk komutu (`cat .env`), bir betik ya da bir MCP aracı dosyaya yine erişebilir (bkz. Sınırlar). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Ekran görüntüsü: Korunan dosyalar"></a> |
|
|
73
73
|
| **Engellenen komutlar** | <a id="feature-blockedcommands"></a>Varsayılan olarak açık, liste başta boştur. Ajanın kabuk komutları (`bash`, `pwsh`) kurallarınızla eşleşen bir komutu çalıştıramaz: bir **engelle** kuralı çağrıyı reddeder (ajan nedenini okur ve size sorması söylenir), bir **önce sor** kuralı dsh’nin onay kartını gösterir ve komut yalnızca siz izin verince çalışır. Ayarlar → Composer Plus → **Engellenen komutlar**: bir kural yazın (örneğin `npm publish`, `git push --force` ya da `ssh *192.168.2.19`), türüne tıklayarak **engelle** ile **önce sor** arasında geçin, sonra **Ekle** düğmesine tıklayın; bir kuralın türünü değiştirmek için türüne tıklayın, kuralı ✕ ile kaldırın. Bir kural, bir komut adı ve ondan sonra bu sırayla gelmesi gereken sözcüklerdir; `*` herhangi bir metinle eşleşir. Kontrol, komutu `&&`, `;`, `\|` sonrasında, `$(…)`, `bash -c "…"` ya da `eval` içinde ve `sudo` ya da `env` sonrasında da bulur. Bu bir korkuluktur, korumalı alan değildir: bir değişken (`$CMD`), bir betik dosyası ya da başka bir program komutu yine çalıştırabilir (bkz. Sınırlar). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Ekran görüntüsü: Engellenen komutlar"></a> |
|
|
74
|
-
| **Görev panosu** | <a id="feature-taskboard"></a>Sol kenar çubuğu → **Görev panosu**. Kenar çubuğunun gösterdiği canlı durumla dsh sohbetlerinizin kanban panosu: onayınızı, yanıtınızı ya da plan incelemenizi bekleyen sohbet turuncu bir noktayla **İncelemede** sütunundadır, çalışan sohbet **Yapılıyor** sütunundadır, biten sohbet **Bitti** sütunundadır (siz açana kadar yeşil). Soldan bir proje ya da **Tüm projeler** seçin; “Sohbet başına dal” klasörü kendi projesinden sayılır. Bir projeyi adıyla bulmak için listenin üstündeki **Projelerde ara** kutusuna yazın (büyük/küçük harf ve aksanlar fark etmez; `Esc` kutuyu boşaltır) ve yalnız bekleyen, çalışan, görülmeden biten ya da son 2 saatte değişen bir sohbeti olan projeleri göstermek için **Son 2 saatte aktif olanlar** seçeneğine tıklayın (bu seçim bu cihazda saklanır). **Yeni görev** (ya da `n`)
|
|
74
|
+
| **Görev panosu** | <a id="feature-taskboard"></a>Sol kenar çubuğu → **Görev panosu**. Kenar çubuğunun gösterdiği canlı durumla dsh sohbetlerinizin kanban panosu: onayınızı, yanıtınızı ya da plan incelemenizi bekleyen sohbet turuncu bir noktayla **İncelemede** sütunundadır, çalışan sohbet **Yapılıyor** sütunundadır, biten sohbet **Bitti** sütunundadır (siz açana kadar yeşil). Soldan bir proje ya da **Tüm projeler** seçin; “Sohbet başına dal” klasörü kendi projesinden sayılır. Bir projeyi adıyla bulmak için listenin üstündeki **Projelerde ara** kutusuna yazın (büyük/küçük harf ve aksanlar fark etmez; `Esc` kutuyu boşaltır) ve yalnız bekleyen, çalışan, görülmeden biten ya da son 2 saatte değişen bir sohbeti olan projeleri göstermek için **Son 2 saatte aktif olanlar** seçeneğine tıklayın (bu seçim bu cihazda saklanır). **Yeni görev** (ya da `n`), panonun gösterdiği projede dsh’nin kendi yeni sohbetini açar (**Tüm projeler** seçiliyken dsh’nin Yeni oturum düğmesinin seçtiği projede); böylece her sohbette olduğu gibi dosya ekleyebilir, komut kullanabilir ve modeli seçebilirsiniz. İlk mesajınız gidince pano kendiliğinden geri gelir. O zamana kadar sohbet **Yapılacak** sütununda **Yeni görev** olarak bekler: ilk mesajı yazmak için ona tıklayın. **Yapılacak** sütunu yalnız bu sırada görünür. Sizi bekleyen bir sohbeti olan projenin yanında, proje listesinde turuncu bir nokta görünür. Sohbete dsh ad verir ve sohbetin modeli o mesajdan en çok 3 etiket yazar. Sohbetini açmak için bir karta tıklayın. Turuncu bir kartı panoda yanıtlamak için kartta **Yanıtla** düğmesine tıklayın: **Reddet** ya da **Bir kez izin ver**, plan için **Onayla** ya da **Değişiklik iste**, soru için seçenekler ve kendi metniniz. **Bitenleri gizle**, bu cihazda **Bitti** sütununu gizler. İlerlemesini görmek için **Yapılıyor** sütunundaki bir kartın üzerine gelin (ya da klavye odağını karta taşıyın): sohbetin ne kadar süredir çalıştığı, yapılacaklar listesindeki adımı, şu an çalışan araç ve ajanın son satırı. Ayarlar → Composer Plus → Görev panosu bölümünde **Üzerine gelince ilerleme** ile **Hızlı (AI’sız)** (varsayılan: yalnız sohbeti okur) ya da **AI özeti** (sohbetin modeline yapılan kısa bir çağrı bir iki cümle de yazar) seçilir. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Ekran görüntüsü: Görev panosu"></a> |
|
|
75
75
|
| **Proje hafızası** | <a id="feature-projectmemory"></a>Varsayılan olarak kapalıdır: **Ayarlar → Composer Plus** içinden açın. Her proje klasörünün kendi hafızası olur ve o projenin sonraki sohbetleri bu hafızayı okur. DS Bot da her Bot için böyle bir hafıza tutar. Her tur bittikten sonra sohbetin modeline bir çağrı yapılır: yeni mesajları okur (geri alınanları okumaz), kalıcı tercihlerinizi, kararlarınızı ve olguları kısa notlar olarak saklar, eski notları değiştirir ya da siler. Ajan da notları kendisi kaydedebilir, silebilir ve arayabilir (`memory_remember`, `memory_forget`, `memory_recall`). Bir not genel de olabilir: o notu her proje okur. Yeni bir sohbet notları sistem isteminde alır; sonra kaydedilen bir not bir sonraki sohbette görünür. Dosyalar dsh ana klasöründe Markdown dosyalarıdır (`storages/dsh-composer-plus/memory/`), hiçbir zaman proje klasöründe değildir. Aynı satırdaki **Hafızayı aç**, kaydedilen tüm notları proje proje (ve genel hafızayı) gösterir; notları filtreleyebilirsiniz. Neyin değişeceğini kendi sözlerinizle yazın (örneğin "yarn yerine artık pnpm kullanıyorum"), sonra **Değişiklikleri önizle**: değişiklikleri dsh’nin varsayılan modeli önerir, yalnız **Uygula** onları kaydeder. Tether’de: sohbet başlığı menüsü → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Ekran görüntüsü: Proje hafızası"></a> |
|
|
76
76
|
| **Sohbet boyunca izin** | <a id="feature-allowforchat"></a>Otomatik inceleme size sorduğunda onay kartında **Bu sohbet boyunca izin ver** düğmesi görünür. Bundan sonra aynı sohbette aynı araca, parametreleri ne olursa olsun, süre sınırı dolana kadar izin verilir (varsayılan olarak 1 saat; süreyi **Ayarlar → Composer Plus → Sohbet boyunca izin** içinden seçin). Sonra ajan yeniden sorar. Başlıktaki küçük bir etiket izinleri bitiş saatleriyle listeler ve kaldırır. İzinler yeniden başlatmadan sonra da korunur. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Ekran görüntüsü: Sohbet boyunca izin"></a> |
|
|
77
77
|
| **Proje durumu** | <a id="feature-projectstatus"></a>Kenar çubuğundaki proje satırı, sohbetlerindeki dönen simge / bekliyor / tamamlandı işaretinin aynısını gösterir. Böylece daraltılmış bir proje de içindeki bir sohbetin çalıştığını ya da sizi beklediğini gösterir. Önce sizi bekleyen bir sohbet gösterilir, sonra henüz açmadığınız tamamlanmış bir sohbet (yeşil nokta, başka bir sohbet hâlâ çalışırken de), sonra dönen simge. Ayrıntılar için üzerine gelin. **Çalışma alanı ağacı** görünümünde üst klasörün satırı, içindeki her projenin (örneğin `.worktrees/` içindeki her dal klasörünün) sohbetlerini de gösterir. Bu, klasör daraltılmışken de geçerlidir. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ekran görüntüsü: Proje durumu"></a> |
|
|
@@ -169,7 +169,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
169
169
|
- **Hedef kontrolü:** yalnızca ajan otomatik bir turda bir `/goal` hedefini tamamlandı olarak işaretlediğinde (ya da siz **Şimdi çalıştır** düğmesine tıkladığınızda) çalışır. Host tarafı test komutunu sohbetin klasöründe, sohbetin korumalı alan moduyla çalıştırır (dsh’nin kendi `bash` aracı gibi: aynı dosya erişimi politikası; bu korumalı alan başlayamazsa test çalışmaz ve kontrol başarısız olur). Komutu bulmak için yalnızca `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml` ve `pytest.ini` dosyalarını, klasörün içindeki normal dosyalar olarak okur (klasörün dışını gösteren sembolik bağlantılar ve FIFO’lar okunmaz). Sonra **Hedef kontrolü** için seçilen modele (varsayılan olarak sohbetin kendi modeline), araç içermeyen tek bir istek gönderir. İstekte şunlar vardır: hedef; hedef başladığından beri sohbet (mesajlarınız, ajanın yanıtları, 1.000 karaktere kısaltılmış araç çağrıları ve her araç sonucunun son 2.000 karakteri; akıl yürütme metni ve geri alınan adımlar yoktur; en çok yaklaşık 60.000 karakter, en yeni kısım); `git status --short` çıktısı ve test çıktısının sonu. Araç çıktısı ajanın okuduklarını içerebilir. Bu yüzden bu istek, sohbetin kendisi gibi, dosyalarınızın parçalarını içerebilir. Sohbete ve projeye hiçbir şey yazılmaz. Test komutunuz, sınırlar, son sonuç (çıktısının sonuyla) ve model seçimi `$DSH_HOME/storages/dsh-composer-plus/goal-check.json` dosyasındadır (yalnızca sahibin erişebildiği dosya, en yeni 500 sohbet).
|
|
170
170
|
- **Yeni sohbette devam et:** siz tıklayana kadar hiçbir şey çalışmaz. Sonra Host tarafı sohbeti (Hedef kontrolü'nün okuduğu gibi: akıl yürütme yok, geri alınan adımlar yok) sohbetin kendi modeline gönderir ve notu gösterir; yalnız **Yeni sohbet başlat** yeni bir sohbet açar. Projeye hiçbir şey yazılmaz.
|
|
171
171
|
- **Bağlam dökümü:** Host'ta yalnız sohbet günlüğünü okur; model çağrısı yapmaz, proje dosyası okumaz.
|
|
172
|
-
- **Görev panosu:** pano, bu penceredeki dsh'nin kendi listelerinden dsh'nin kendi sohbetlerini gösterir; kendi sohbet verisi eklemez.
|
|
172
|
+
- **Görev panosu:** pano, bu penceredeki dsh'nin kendi listelerinden dsh'nin kendi sohbetlerini gösterir; kendi sohbet verisi eklemez. **Yeni görev**, dsh'nin kendi yeni sohbetini açar ve ilk mesajı dsh'nin mesaj alanına siz yazarsınız. Bu yüzden onaylar, sandbox ve sohbetin modeli her zamanki gibi uygulanır. Host tarafı o sohbetin ilk mesajını kartın istemi olarak tutar ve onu (ilk 4.000 karakterini, başka hiçbir şeyi) araç olmadan bir istekle daha o sohbetin modeline gönderir ve en çok 3 etiket ister. Her görevin istemi, etiketleri ve başlama zamanı `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` dosyasında tutulur (yalnız sahibinin okuyabildiği dosya, en yeni 2.000 görev); anahtar, yanındaki `board-switch.json` dosyasındadır. Hiçbir proje klasörüne bir şey yazılmaz. **Yanıtla**, yanıtınızı dsh'nin kendi bekleyen isteğine, sohbetin kendi kartının yaptığı gibi gönderir. Önceki sürümlerin eski görev listesi (`board.json`) diskte olduğu gibi kalır ve okunmaz. **Üzerine gelince ilerleme**, sohbetin kaydını bu Mac'te okur. **Hızlı (AI’sız)** ile (varsayılan) hiçbir şey gönderilmez. **AI özeti** ile, çalışan bir kartın ilerleme kutusu açıkken (ya da Tether'ın panosu açıkken, en çok 8 çalışan kart için) Host tarafı o sohbetin en yeni kısmını (en çok yaklaşık 6.000 karakter: sizin mesajlarınız, ajanın metin yanıtları, araç çağrıları ve sonuçlarının son kısmı; akıl yürütme ve geri alınan mesajlar yok) araçsız tek bir istekle sohbetin modeline gönderir. Yalnız sohbette yeni bir adım olunca yeniden gönderir; her sohbet için en sık 20 saniyede bir. Not yalnız bellekte tutulur; ayar, `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya).
|
|
173
173
|
- **Korunan dosyalar:** liste ve anahtar `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya). Kontrol, her dosya aracı çağrısının yalnız yolunu (ve gerçek yolunu) okur, dosyanın kendisini okumaz.
|
|
174
174
|
- **Engellenen komutlar:** kurallar ve anahtar `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya). Kontrol, her `bash` ve `pwsh` çağrısının yalnız komut metnini okur; hiçbir şey çalıştırmaz ve hiçbir şey göndermez.
|
|
175
175
|
- **Proje hafızası:** siz açana kadar kapalıdır. Açıkken, üst düzey bir sohbetin her turu bittikten sonra Host tarafı, sohbetin son incelemeden bu yana gelen kendi yeni mesajlarını (sizin mesajlarınız ve ajanın metin yanıtları; araç çıktısı, akıl yürütme, gizli bağlam ve geri alınan mesajlar yok; çatallanmış bir sohbette üst sohbetten gelen kopya dışarıda kalır; en çok yaklaşık 16.000 karakter) ve kayıtlı notları, araç içermeyen tek bir istek olarak sohbetin kendi modeline gönderir. Notlar `$DSH_HOME/storages/dsh-composer-plus/memory/` altındaki Markdown dosyalarıdır (yalnız sahibinin erişebildiği dosyalar): her proje klasörü için `projects/<id>/` (`<id>`, klasörün gerçek yolunun bir özetidir; `project.json` klasörün yolunu yazar), `global/`, `journal.jsonl` (her değişiklik, öncesi ve sonrasındaki satırla) ve `reviewed.json` (her sohbetin nereye kadar okunduğu). Proje klasörüne hiçbir şey yazılmaz. Anahtar, token, parola ya da kimlik numarasına benzeyen notlar reddedilir. Bir projenin notları o klasördeki her yeni sohbetin sistem istemine girer, bu yüzden o sohbetin her isteğiyle modele gider. Anahtar, aynı yerdeki `memory.json` dosyasındadır. **Hafızayı aç**, siz **Değişiklikleri önizle** düğmesine basana kadar hiçbir şey göndermez; basınca gösterdiği notları ve metninizi araçsız tek bir istek olarak dsh’nin varsayılan modeline gönderir. Değişiklikler yalnız **Uygula** ile yazılır, günlükte `editor` olarak görünür. Tether notları aynı yoldan okur ve değiştirir.
|
|
@@ -194,7 +194,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
194
194
|
- **Bir sohbet satırında dal etiketi yok:** kenar çubuğu “Tek listede” görünümünde değil (“Çalışma alanı” ve “Çalışma alanı ağacı” görünümlerinde hiçbir sohbet satırında etiket görünmez), bu sürümü yüklediğinizden beri sohbette hiç tur olmadı, sohbetin klasörü bir git deposu değil ya da **Sohbet satırlarında Git dalı** kapalı. Bir güncellemeden sonra dsh’yi yeniden başlatın (dalı Host tarafı kaydeder).
|
|
195
195
|
- **Hedef kontrolü, testin 127 koduyla ya da "not found" ile çıktığını söylüyor:** Finder’dan veya Dock’tan başlatılan dsh’nin PATH’i terminalinizdekinden daha kısa olabilir. Bu yüzden dsh `npm`, `pnpm` veya `cargo` aracını bulamaz. dsh’yi bir terminalden başlatın ya da **Hedef kontrolü** → **Düzenle** içinde tam yolu olan kendi test komutunuzu belirleyin. **Şimdi çalıştır** sonucu hemen gösterir.
|
|
196
196
|
- **Hedef kapanmıyor ve ajan çalışmaya devam ediyor:** **Hedef kontrolü** başarısız bir test ya da eksik bir iş buldu. Hedefin altındaki satır nedenini gösterir (ayrıntılar için imleci sonucun üzerine getirin). Nedeni ya da test komutunu düzeltin veya hedefi `/goal` ya da hedef çubuğuyla kendiniz tamamlayın (bu tamamlama kontrol edilmez).
|
|
197
|
-
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.
|
|
197
|
+
- **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.20.0`) ve yukarıdaki kurulum notuna bakın.
|
|
198
198
|
- **Şimdi yedekle, "Başka bir yedekleme işlemi sürüyor" diyor:** başka bir dsh penceresinde ya da kurtarma konsolunda bir işlem çalışıyor (ikisi, yedek klasöründeki `.composer-plus.lock` kilit dosyasını paylaşır). İşlemin bitmesini bekleyin. Çalışan bir işlem yoksa, kapanmış bir sürecin kilidi bir sonraki tıklamada devralınır.
|
|
199
199
|
- **Kurtarma konsolu "dsh is running" diyor:** önce dsh’den çıkın. dsh gerçekten kapalıysa mesajda adı geçen dosya bir çökmeden kalmıştır: dosyayı silin ve yeniden deneyin.
|
|
200
200
|
- **Geri yüklemeden sonra dsh açılmıyor ya da bir eklenti eksik:** bir profilin eklenti paketlerinin yeniden yüklenmesi gerekir. Kurtarma konsolu bunu geri yüklemeden sonra önerir. Ya da konsolun listelediği, `$DSH_HOME/profiles/` altındaki her klasörde `pnpm install` komutunu çalıştırın. Vault’ta olmayan gizli bilgiler (başka bir bilgisayar) yeniden girilmelidir: konsol bunları listeler.
|
|
@@ -249,7 +249,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
249
249
|
- **Yeni sohbette devam et** sohbeti (mesajlar, araç çağrıları ve her araç sonucunun sonu; en çok yaklaşık 60.000 karakter, en yeni kısım) sohbetin kendi modeline gönderir. Not bir kararı ya da dosyayı atlayabilir: başlatmadan önce okuyun. Yeni sohbet yalnız notu ve bağlantılı sohbeti bilir (dsh eski sohbeti salt okunur bağlam olarak ekler); model bağlamı küçük başlar, eski sohbet olduğu gibi kalır. Her sohbet için aynı anda tek not ya da başlatma çalışır.
|
|
250
250
|
- **Bağlam dökümü** dsh'nin kendi kuralıyla tahmin gösterir (token başına yaklaşık 4 karakter), dsh'nin bağlam halkasıyla aynı kural; modelin kendi sayımı farklı olabilir. Araç tanımları en yeni isteğinkilerdir. Bağlamı sohbet günlüğündeki hâliyle gösterir; şu anda çalışan bir tur bir sonraki adımından sonra görünür.
|
|
251
251
|
- **Planlı adımlar** yalnız model plan yaptığında token kazandırır: açıkken her istek `plan_next_steps` aracını ve kısa bir talimatı (yaklaşık 500 token) taşır; modelin hiç plan yapmadığı sohbetlerde de. Koşul yalnız yazdığını kanıtlar (örneğin: derlemenin çıkış kodu 0 oldu); işin doğru olduğunu kanıtlamaz. `ok`, dsh'nin kendi sonuç işaretlerini okur (`[exit code: N]`, zaman aşımı, sandbox reddi); sıfırdan farklı çıkış kodu vermeden başarısız olan bir komut geçmiş sayılır. Adımlar tek tek çalışır; aynı anda hazır olan iki adım modele geri döner. Adımın mesajı, sohbetin modelinin bir asistan mesajı olarak kaydedilir (dsh'de bir eklentinin yazdığı mesaj için işaret yok); bu yüzden metni, adımı Composer Plus'ın çalıştırdığını söyler. Tether'de yok.
|
|
252
|
-
- **Görev panosu** bu pencerede dsh'nin listelediği sohbetleri gösterir: proje dışındaki bir sohbet yalnız **Tüm projeler** içinde görünür ve “Sohbet başına dal” klasörü (`<project>/.worktrees/<name>`) kendi projesinden sayılır. Bir kartın sütunu sohbetin canlı durumudur, bu yüzden kartlar sürüklenemez: bir sohbet, turu bitince (bir hatadan ya da durdurmadan sonra da) **Bitti** sütununa geçer ve yeniden çalışınca **Yapılıyor** sütununa döner. Yeşil nokta dsh'nin kendi “bitti” noktasıdır ve dsh onu yalnız bu pencerede tutar: sayfa yeniden yüklenince biten sohbetler noktasız görünür. **Bitti** en yeni 50 sohbeti gösterir (**Daha eski N görevi göster** kalanları gösterir). **Projelerde ara** bir projeyi yalnız adıyla bulur, klasör yoluyla bulmaz. **Son 2 saatte aktif olanlar**, bir projenin her sohbeti 2 saatten eski, boşta ve okunmuş olduğunda o projeyi gizler; pano, seçtiğiniz projeyi yine gösterir. Etiketler,
|
|
252
|
+
- **Görev panosu** bu pencerede dsh'nin listelediği sohbetleri gösterir: proje dışındaki bir sohbet yalnız **Tüm projeler** içinde görünür ve “Sohbet başına dal” klasörü (`<project>/.worktrees/<name>`) kendi projesinden sayılır. Bir kartın sütunu sohbetin canlı durumudur, bu yüzden kartlar sürüklenemez: bir sohbet, turu bitince (bir hatadan ya da durdurmadan sonra da) **Bitti** sütununa geçer ve yeniden çalışınca **Yapılıyor** sütununa döner. Yeşil nokta dsh'nin kendi “bitti” noktasıdır ve dsh onu yalnız bu pencerede tutar: sayfa yeniden yüklenince biten sohbetler noktasız görünür. **Bitti** en yeni 50 sohbeti gösterir (**Daha eski N görevi göster** kalanları gösterir). **Projelerde ara** bir projeyi yalnız adıyla bulur, klasör yoluyla bulmaz. **Son 2 saatte aktif olanlar**, bir projenin her sohbeti 2 saatten eski, boşta ve okunmuş olduğunda o projeyi gizler; pano, seçtiğiniz projeyi yine gösterir. **Yeni görev**, bu penceredeki yeni sohbetlerden yalnız en yenisini hatırlar: ilk mesajdan önce başka bir sohbet açarsanız o sohbet, siz içine yazana kadar **Yapılacak** sütununda **Yeni görev** olarak kalır, ama pano yalnız en yenisi için kendiliğinden geri gelir. Sayfa yeniden yüklenince mesajı olmayan yeni sohbet panoda görünmez (dsh onu kendi boş Yeni oturumu olarak tutar). Etiketler, her görev için ilk mesajından yapılan tek bir model çağrısından gelir: yanlış olabilirler ve panoda başlatmadığınız bir sohbetin etiketi yoktur. Başlık, dsh'nin kendi sohbet başlığıdır (dsh'nin başlık hizmeti, sohbetin modeliyle); başlık gelene kadar kart ilk mesajın ilk satırını gösterir. **Yanıtla** yalnız sohbetin en yeni isteğini yanıtlar: sohbet o isteği başka bir yerde yanıtladıysa (başka bir pencere, Tether, Otomatik inceleme) ya da yeni bir şey soruyorsa panel bunu söyler ve hiçbir şey göndermez. Önceki sürümlerde yorumlu bir görev listesi ve ajan araçları vardı; bunlar kaldırıldı ve eski `board.json` gösterilmez. Fikir ve görünüm emanuele-em'in [Kanzo](https://github.com/emanuele-em/kanzo) projesinden gelir (AGPL-3.0); Composer Plus onun kodunu kullanmaz.
|
|
253
253
|
- **Durdurduktan sonra gönderilen önce gider** yalnız sohbeti durdurduktan sonra çalışır (ya da bir tur hata verdikten sonra veya hâlâ kuyruğu olan bir sohbeti açtığınızda): bir tur çalışırken gönderdiğiniz mesaj yine kuyruğun sonunda bekler. Mesaj yalnız sizin kuyruktaki mesajlarınızın önüne geçer: kuyrukta bir hedef turu ya da bir soru yanıtı bekliyorsa dsh’nin kendi sırası kalır. dsh’nin herkese açık API olmayan bir bölümünü okur (durdurulan turun hâlâ bitip bitmediğini); bir dsh güncellemesi bunun adını değiştirirse mesaj, o tur bittikten sonra öne alınır. Alt ajan sohbetleri dsh’nin kendi sırasını korur.
|
|
254
254
|
- **Proje hafızası** sohbetin ilk klasörüne (dsh'nin proje klasörüne) aittir: klasörünü `cd` ile değiştiren bir sohbet ilk projesinin hafızasını kullanmaya devam eder; aynı klasör aynı dosyalara giden başka bir yoldan açılırsa hafızayı paylaşır. Bir sohbet, başladığında hafıza bölümünü dondurur; bu yüzden sonra kaydedilen bir not bir sonraki sohbette görünür (`memory_recall` onu hemen bulur). İnceleme yalnız modelin saklamaya karar verdiği şeyi saklar: bir olguyu kaçırabilir ya da yanlış bir şeyi saklayabilir. Notları **Hafızayı aç** içinde kontrol edip orada değiştirin ya da dsh kapalıyken dosyaları elle düzenleyin. **Hafızayı aç**, seçili projenin notlarını ve genel notları (Tüm notlar seçiliyse bütün projeleri; en çok yaklaşık 60.000 karakter, kalanı yalnız sayılır ve o istekte değişemez) ve yazdığınız metni sohbetin modeline değil, dsh’nin varsayılan modeline gönderir. Önizleme Mac’te 30 dakika ve dsh yeniden başlayana kadar tutulur; bu arada bir inceleme ya da ajan notları değiştirirse **Uygula** reddeder ve yeniden önizlersiniz. **Uygula** bir önizlemenin ya bütün değişikliklerini ya hiçbirini kaydeder: bir değişiklik kaydedilemezse (örneğin MEMORY.md doluysa) notlar olduğu gibi kalır ve nedeni görünür. Sizden bir mesaj içeren her bitmiş tur bir model çağrısına mal olur; başarısız bir çağrı, sonraki turdan sonra aynı mesajları yeniden okur. Alt ajan sohbetleri incelenmez. Fikir ve dosya biçimi [DS Bot](https://github.com/Fei2411/DS-Bot) projesinden gelir (Apache-2.0); Composer Plus onun kodunu kullanmaz ve DS Bot'un kendi hafızasını hiçbir zaman okumaz ya da yazmaz.
|
|
255
255
|
- **Yedekleme** tek ve sabit bir klasör kullanır: `~/Desktop/dsh-backups` (dsh-backup’ın varsayılan klasörü; böylece onun arşivleri kullanılabilir kalır). Başka bir klasör için ayar yoktur. Bir arşiv, `cache/` ve `dsh-runtimes/` olmadan dsh ana klasörü kadar büyüktür (ölçüm: Apple Silicon’da 1,6 GB dosya, yaklaşık 30 sn’de 830 MB’lık bir arşiv oldu; dsh bu sırada yanıt vermeye devam etti). Okunurken değişen bir dosya, yedeklemenin onu açtığı andaki hâliyle saklanır. Bu yüzden açık bir sohbetin günlüğü kesik bir kayıtla bitebilir; dsh bunu bir sonraki yazmada onarır. Maskeleme, yml dosyasındaki bir gizli bilgiyi tek satırdaki anahtar adından bulur (`token:`, `apiKey:`, …). Akış eşlemindeki (`{token: x}`), böyle bir anahtarın altındaki bir listedeki, bir JSON dosyasındaki (örneğin bir `.json` dosyasındaki bir MCP sunucusunun `apiKey` değeri) ya da başka bir ad altındaki gizli bilgi arşivde kalır. dsh-backup’ın türe göre aldığı arşivler (`dsh-t-…`) listelenmez. **Başka bir bilgisayar için** arşivi kopyalar (APFS’te bir klon: ek yer kaplamaz); vault onunla gitmez. **Şimdi yedekle** hiçbir yedeği silmez. Otomatik yedekleme, Composer Plus’ın aldığı en yeni yedekleri tutar (**Otomatik yedekleme** içindeki **Sakla** ayarı) ve kendi aldığı daha eski yedekleri siler. Yükseltme öncesi anlık görüntüler ayrı sayılır (en yeni 2 tanesi kalır). dsh-backup’ın arşivleri hiçbir zaman silinmez: onları **Sil** ile kaldırın. dsh-backup hâlâ yüklüyse Composer Plus arşivlerini kendi saklama sayısına katar ve onları silebilir.
|
|
@@ -286,7 +286,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
|
|
|
286
286
|
|
|
287
287
|
**Ajan, DS Bot'un hafızası gibi tercihlerimi sohbetler arasında hatırlayabilir mi?** Evet, **Proje hafızası** ile (varsayılan olarak kapalı): **Ayarlar → Composer Plus** içinden açın. Her turdan sonra kalıcı tercihleriniz ve kararlarınız, sohbetin projesi için kısa notlar olarak saklanır; o projedeki her yeni sohbet bunları okur. Ajandan bir şeyi hatırlamasını isterseniz onu hemen kaydeder. Notları görmek ya da değiştirmek için aynı satırdaki **Hafızayı aç** düğmesine basın ve neyin değişeceğini yazın.
|
|
288
288
|
|
|
289
|
-
**Tüm sohbetlerimi bir kanban panosu olarak görüp panodan yeni sohbet başlatabilir miyim?** Evet, **Görev panosu** ile (varsayılan olarak açık): sol kenar çubuğundan açın. Her sohbet **Yapılıyor**, **İncelemede** (sizi bekler) ya da **Bitti** sütununda bir karttır. **Yeni görev**
|
|
289
|
+
**Tüm sohbetlerimi bir kanban panosu olarak görüp panodan yeni sohbet başlatabilir miyim?** Evet, **Görev panosu** ile (varsayılan olarak açık): sol kenar çubuğundan açın. Her sohbet **Yapılıyor**, **İncelemede** (sizi bekler) ya da **Bitti** sütununda bir karttır. **Yeni görev** projede dsh'nin yeni sohbetini açar ve ilk mesajınız gidince pano geri gelir; bir sohbeti açmadan yanıtlamak için turuncu karttaki **Yanıtla** düğmesine tıklayın.
|
|
290
290
|
|
|
291
291
|
**dsh, dsh-backup gibi sohbetlerimi ve ayarlarımı yedekleyebilir mi?** Evet: **Ayarlar → Composer Plus → Yedekleme → Şimdi yedekle**. Aynı arşiv biçimini aynı klasöre (`~/Desktop/dsh-backups`) yazar. Bu yüzden dsh-backup’ın arşivleri de görünür ve geri yüklenebilir; dsh-backup’ı kaldırabilirsiniz. Zamanlanmış yedekleme için **Otomatik yedekleme** ayarını açın.
|
|
292
292
|
|
|
@@ -408,7 +408,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
408
408
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
409
409
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
410
410
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
411
|
-
# Task board:
|
|
411
|
+
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, Hide finished, the switch
|
|
412
412
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
413
413
|
```
|
|
414
414
|
|
package/README.vi.md
CHANGED
|
@@ -14,7 +14,7 @@ Các tính năng tiện ích kiểu Codex cho ứng dụng desktop và giao di
|
|
|
14
14
|
|
|
15
15
|
<p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness với Composer Plus: dự án đang chạy hiện biểu tượng xoay trên thanh bên và Bảng thay đổi hiện một git diff"></p>
|
|
16
16
|
|
|
17
|
-
Đây là plugin cộng đồng, không chính thức. Lệnh gọi mạng duy nhất là việc kiểm tra cập nhật (GitHub releases và npm registry). Tắt **Tự động cập nhật** để dừng các lệnh gọi này khi khởi động. **Ý tưởng tính năng** chỉ gọi mô hình của chính cuộc trò chuyện khi bạn nhấp **Đề xuất tính năng**. **Dự đoán tin nhắn tiếp theo** (mặc định bật) gọi mô hình đã chọn trong Cài đặt (mô hình mặc định của dsh, trừ khi bạn chọn mô hình khác) một lần sau mỗi lượt đã xong, không cần nhấp. Tắt tính năng này trong **Cài đặt → Composer Plus** để dừng các lệnh gọi này. **Hoàn thành khi gõ** (mặc định tắt) gọi mô hình đã chọn cho tính năng này (mặc định là mô hình của dự đoán) mỗi lần bạn dừng gõ, sau khi bạn bật tính năng này. **Cải thiện prompt** chỉ gọi mô hình khi bạn nhấp vào đũa thần. **Bảng tác vụ** gọi mô hình của cuộc trò chuyện mới một lần để tạo nhãn cho mỗi tác vụ mà bạn bắt đầu trên bảng. **Kiểm tra mục tiêu** (mặc định bật) gọi mô hình một lần mỗi khi tác tử đánh dấu một `/goal` là hoàn tất trong một vòng tự động. **Kết nối di động** (mặc định tắt) chỉ nhận kết nối iPhone từ mạng cục bộ hoặc tailnet của bạn sau khi bạn bật tính năng này.
|
|
17
|
+
Đây là plugin cộng đồng, không chính thức. Lệnh gọi mạng duy nhất là việc kiểm tra cập nhật (GitHub releases và npm registry). Tắt **Tự động cập nhật** để dừng các lệnh gọi này khi khởi động. **Ý tưởng tính năng** chỉ gọi mô hình của chính cuộc trò chuyện khi bạn nhấp **Đề xuất tính năng**. **Dự đoán tin nhắn tiếp theo** (mặc định bật) gọi mô hình đã chọn trong Cài đặt (mô hình mặc định của dsh, trừ khi bạn chọn mô hình khác) một lần sau mỗi lượt đã xong, không cần nhấp. Tắt tính năng này trong **Cài đặt → Composer Plus** để dừng các lệnh gọi này. **Hoàn thành khi gõ** (mặc định tắt) gọi mô hình đã chọn cho tính năng này (mặc định là mô hình của dự đoán) mỗi lần bạn dừng gõ, sau khi bạn bật tính năng này. **Cải thiện prompt** chỉ gọi mô hình khi bạn nhấp vào đũa thần. **Bảng tác vụ** gọi mô hình của cuộc trò chuyện mới một lần để tạo nhãn cho mỗi tác vụ mà bạn bắt đầu trên bảng. Với thiết lập **Tóm tắt bằng AI** (mặc định là **Nhanh (không dùng AI)**), bảng cũng gọi mô hình của cuộc trò chuyện đang chạy để viết một ghi chú tiến độ ngắn khi bạn xem tiến độ của tác vụ đó trên bảng hoặc trong Tether. **Kiểm tra mục tiêu** (mặc định bật) gọi mô hình một lần mỗi khi tác tử đánh dấu một `/goal` là hoàn tất trong một vòng tự động. **Kết nối di động** (mặc định tắt) chỉ nhận kết nối iPhone từ mạng cục bộ hoặc tailnet của bạn sau khi bạn bật tính năng này.
|
|
18
18
|
|
|
19
19
|
## Cách cài đặt
|
|
20
20
|
|
|
@@ -29,7 +29,7 @@ dsh plugin --profile web add dsh-composer-plus
|
|
|
29
29
|
|
|
30
30
|
Sau đó khởi động lại dsh. (CLI không cài được vào profile desktop; ứng dụng tự quản lý profile này.)
|
|
31
31
|
|
|
32
|
-
> pnpm của dsh bỏ qua các phiên bản ra mắt chưa đủ 24 giờ. Ngay sau một bản phát hành, hãy thêm số phiên bản: `dsh-composer-plus@1.
|
|
32
|
+
> pnpm của dsh bỏ qua các phiên bản ra mắt chưa đủ 24 giờ. Ngay sau một bản phát hành, hãy thêm số phiên bản: `dsh-composer-plus@1.20.0`.
|
|
33
33
|
|
|
34
34
|
## Tính năng
|
|
35
35
|
|
|
@@ -71,7 +71,7 @@ Sau đó khởi động lại dsh. (CLI không cài được vào profile deskto
|
|
|
71
71
|
| **Các bước đã lên kế hoạch** | <a id="feature-plannedsteps"></a>Mặc định tắt: hãy bật trong **Cài đặt → Composer Plus**. Tác tử nhận công cụ `plan_next_steps`: trong cùng tin nhắn với một lệnh, tác tử có thể lên kế hoạch cho các lệnh tiếp theo với đối số chính xác và một điều kiện, ví dụ “chạy `npm test` khi bản dựng thành công”. Khi kết quả đáp ứng điều kiện, Composer Plus tự chạy bước tiếp theo mà không gọi lại mô hình, nhờ đó cuộc trò chuyện dài tốn ít token hơn. Bước đó hiện trong cuộc trò chuyện thành một dòng ngắn “Composer Plus · Planned steps: ran `test` … without a model call”, sau đó là lời gọi công cụ và kết quả. Chỉ các bước `bash`, `read`, `grep` và `glob`; phê duyệt, sandbox và Tệp được bảo vệ vẫn áp dụng cho từng bước như thường lệ. Mô hình trả lời lại khi điều kiện không đạt, khi hai bước cùng sẵn sàng, sau bước cuối cùng và khi bạn gửi tin nhắn. Ý tưởng đến từ HarnessMM (arXiv 2610.32813). | <a href="assets/features/plannedSteps.webp"><img src="assets/features/plannedSteps.webp" width="160" alt="Ảnh chụp màn hình: Các bước đã lên kế hoạch"></a> |
|
|
72
72
|
| **Tệp được bảo vệ** | <a id="feature-protectedfiles"></a>Bật theo mặc định. Các công cụ tệp riêng của tác tử không thể đọc hoặc thay đổi các tệp khớp với mẫu của bạn: `read`, `read_image` và `grep` trên một tệp bị từ chối với mẫu **đọc và ghi**, còn `write`, `edit` và `str_replace_editor` bị từ chối với cả hai loại. Tác tử đọc lý do và được yêu cầu hỏi bạn. Mẫu mặc định là `.env*`, `*.pem` và `*.key`. Cài đặt → Composer Plus → **Tệp được bảo vệ**: thêm một mẫu (ví dụ `published/**` hoặc `config/*.yml`), nhấp vào loại của mẫu để chuyển giữa **đọc và ghi** và **chỉ ghi**, xóa mẫu bằng ✕, hoặc nhấp **Dùng giá trị mặc định**. Mẫu không có `/` khớp với tên tệp trong bất kỳ thư mục nào. Đây là rào chắn bảo vệ, không phải sandbox: lệnh shell (`cat .env`), script hoặc công cụ MCP vẫn có thể truy cập tệp (xem Giới hạn). | <a href="assets/features/protectedFiles.webp"><img src="assets/features/protectedFiles.webp" width="160" alt="Ảnh chụp màn hình: Tệp được bảo vệ"></a> |
|
|
73
73
|
| **Lệnh bị chặn** | <a id="feature-blockedcommands"></a>Bật theo mặc định, với danh sách trống. Các lệnh shell của tác tử (`bash`, `pwsh`) không thể chạy lệnh khớp với quy tắc của bạn: quy tắc **chặn** từ chối lệnh gọi (tác tử đọc lý do và được yêu cầu hỏi bạn), quy tắc **hỏi trước** hiện thẻ phê duyệt của dsh, và lệnh chỉ chạy khi bạn cho phép. Cài đặt → Composer Plus → **Lệnh bị chặn**: nhập một quy tắc (ví dụ `npm publish`, `git push --force` hoặc `ssh *192.168.2.19`), nhấp vào loại để chuyển giữa **chặn** và **hỏi trước**, rồi nhấp **Thêm**; nhấp vào loại của một quy tắc để đổi loại, xóa quy tắc bằng ✕. Một quy tắc là tên lệnh và các từ phải đứng sau nó theo đúng thứ tự này; `*` khớp với mọi văn bản. Tính năng cũng tìm thấy lệnh sau `&&`, `;`, `\|`, bên trong `$(…)`, `bash -c "…"` hoặc `eval`, và sau `sudo` hoặc `env`. Đây là rào chắn bảo vệ, không phải sandbox: một biến (`$CMD`), một tệp script hoặc một chương trình khác vẫn có thể chạy lệnh (xem Giới hạn). | <a href="assets/features/blockedCommands.webp"><img src="assets/features/blockedCommands.webp" width="160" alt="Ảnh chụp màn hình: Lệnh bị chặn"></a> |
|
|
74
|
-
| **Bảng tác vụ** | <a id="feature-taskboard"></a>Thanh bên trái → **Bảng tác vụ**. Bảng kanban các cuộc trò chuyện dsh của bạn với trạng thái trực tiếp giống thanh bên: cuộc trò chuyện đang chờ bạn phê duyệt, trả lời hoặc xem xét kế hoạch nằm ở **Đang duyệt** với chấm cam, cuộc trò chuyện đang chạy nằm ở **Đang làm**, cuộc trò chuyện đã xong nằm ở **Xong** (màu xanh lá cho đến khi bạn mở). Chọn một dự án hoặc **Tất cả dự án** ở bên trái; thư mục branch riêng của từng cuộc trò chuyện được tính là thuộc dự án của nó. Gõ vào **Tìm dự án** phía trên danh sách để tìm dự án theo tên (không phân biệt chữ hoa, chữ thường và dấu; `Esc` xóa trống ô), và nhấp **Hoạt động trong 2 giờ qua** để chỉ hiện các dự án có cuộc trò chuyện đang chờ, đang chạy, đã xong mà chưa xem hoặc đã thay đổi trong 2 giờ qua (được lưu trên thiết bị này). **Tác vụ mới** (hoặc `n`)
|
|
74
|
+
| **Bảng tác vụ** | <a id="feature-taskboard"></a>Thanh bên trái → **Bảng tác vụ**. Bảng kanban các cuộc trò chuyện dsh của bạn với trạng thái trực tiếp giống thanh bên: cuộc trò chuyện đang chờ bạn phê duyệt, trả lời hoặc xem xét kế hoạch nằm ở **Đang duyệt** với chấm cam, cuộc trò chuyện đang chạy nằm ở **Đang làm**, cuộc trò chuyện đã xong nằm ở **Xong** (màu xanh lá cho đến khi bạn mở). Chọn một dự án hoặc **Tất cả dự án** ở bên trái; thư mục branch riêng của từng cuộc trò chuyện được tính là thuộc dự án của nó. Gõ vào **Tìm dự án** phía trên danh sách để tìm dự án theo tên (không phân biệt chữ hoa, chữ thường và dấu; `Esc` xóa trống ô), và nhấp **Hoạt động trong 2 giờ qua** để chỉ hiện các dự án có cuộc trò chuyện đang chờ, đang chạy, đã xong mà chưa xem hoặc đã thay đổi trong 2 giờ qua (được lưu trên thiết bị này). **Tác vụ mới** (hoặc `n`) mở cuộc trò chuyện mới của chính dsh trong dự án mà bảng đang hiện (với **Tất cả dự án**, đó là dự án mà Phiên mới của dsh chọn), nên bạn có thể thêm tệp, dùng lệnh và chọn mô hình như trong mọi cuộc trò chuyện. Khi tin nhắn đầu tiên của bạn được gửi, bảng tự quay lại. Trước đó, cuộc trò chuyện chờ ở **Cần làm** dưới tên **Tác vụ mới**: nhấp vào nó để viết tin nhắn đầu tiên. Cột **Cần làm** chỉ hiện vào lúc đó. Dự án có cuộc trò chuyện đang chờ bạn có một chấm cam trong danh sách dự án. dsh đặt tên cho cuộc trò chuyện và mô hình của cuộc trò chuyện viết tối đa 3 nhãn từ tin nhắn đó. Nhấp vào thẻ để mở cuộc trò chuyện của nó. Trên thẻ màu cam, nhấp **Trả lời** để trả lời ngay trên bảng: **Từ chối** hoặc **Cho phép một lần**, **Phê duyệt** hoặc **Yêu cầu thay đổi** cho một kế hoạch, hoặc các lựa chọn và văn bản của riêng bạn cho một câu hỏi. **Ẩn mục đã xong** ẩn **Xong** trên thiết bị này. Trỏ vào một thẻ ở **Đang làm** (hoặc chuyển tiêu điểm bàn phím đến thẻ đó) để xem tiến độ: cuộc trò chuyện đã chạy bao lâu, bước trong danh sách việc cần làm, công cụ đang chạy và dòng cuối của tác tử. Trong Cài đặt → Composer Plus → Bảng tác vụ, **Tiến độ khi di chuột** chọn **Nhanh (không dùng AI)** (mặc định: chỉ đọc cuộc trò chuyện) hoặc **Tóm tắt bằng AI** (một lệnh gọi ngắn tới mô hình của cuộc trò chuyện viết thêm một hoặc hai câu). | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Ảnh chụp màn hình: Bảng tác vụ"></a> |
|
|
75
75
|
| **Bộ nhớ dự án** | <a id="feature-projectmemory"></a>Mặc định tắt: hãy bật trong **Cài đặt → Composer Plus**. Mỗi thư mục dự án có bộ nhớ riêng, các cuộc trò chuyện sau này của dự án đó sẽ đọc, giống như DS Bot giữ một bộ nhớ cho mỗi Bot. Sau mỗi lượt kết thúc, một lần gọi mô hình của cuộc trò chuyện đọc các tin nhắn mới (không đọc tin nhắn đã hoàn tác), lưu sở thích, quyết định và dữ kiện lâu dài của bạn thành ghi chú ngắn, đồng thời sửa hoặc xóa ghi chú cũ. Tác tử cũng có thể tự lưu, xóa và tìm ghi chú (`memory_remember`, `memory_forget`, `memory_recall`). Ghi chú cũng có thể là ghi chú chung: mọi dự án đều đọc. Cuộc trò chuyện mới nhận các ghi chú trong system prompt; ghi chú lưu sau đó hiện từ cuộc trò chuyện tiếp theo. Các tệp là Markdown trong thư mục home của dsh (`storages/dsh-composer-plus/memory/`), không bao giờ nằm trong thư mục dự án. **Mở bộ nhớ** ở cùng hàng hiển thị mọi ghi chú đã lưu, nhóm theo dự án (và bộ nhớ chung), có bộ lọc. Viết bằng lời của bạn điều cần thay đổi (ví dụ "tôi đã chuyển từ yarn sang pnpm"), rồi bấm **Xem trước thay đổi**: mô hình mặc định của dsh đề xuất các thay đổi, và chỉ **Áp dụng** mới lưu chúng. Trong Tether: menu tiêu đề cuộc trò chuyện → Project memory. | <a href="assets/features/projectMemory.webp"><img src="assets/features/projectMemory.webp" width="160" alt="Ảnh chụp màn hình: Bộ nhớ dự án"></a> |
|
|
76
76
|
| **Cho phép trong cuộc trò chuyện này** | <a id="feature-allowforchat"></a>Khi Đánh giá tự động hỏi bạn, thẻ phê duyệt có thêm nút **Cho phép trong cuộc trò chuyện này**: từ đó trở đi, cùng công cụ đó trong cùng cuộc trò chuyện được cho phép, với mọi đối số, cho đến khi hết giới hạn thời gian (mặc định 1 giờ; chọn trong **Cài đặt → Composer Plus → Cho phép trong cuộc trò chuyện này**). Sau đó, agent sẽ hỏi lại. Một nhãn nhỏ ở phần đầu liệt kê các quyền đã cấp kèm thời điểm kết thúc và cho phép thu hồi. Quyền vẫn còn sau khi khởi động lại. | <a href="assets/features/allowForChat.webp"><img src="assets/features/allowForChat.webp" width="160" alt="Ảnh chụp màn hình: Cho phép trong cuộc trò chuyện này"></a> |
|
|
77
77
|
| **Trạng thái dự án** | <a id="feature-projectstatus"></a>Dòng dự án trên thanh bên hiện cùng dấu đang chạy / đang chờ / xong như các cuộc trò chuyện của nó. Vì vậy, dự án đã thu gọn vẫn cho bạn biết có cuộc trò chuyện bên trong đang làm việc hoặc cần bạn. Cuộc trò chuyện đang chờ bạn được hiện trước, sau đó là cuộc trò chuyện đã xong mà bạn chưa mở (chấm xanh, kể cả khi một cuộc trò chuyện khác vẫn đang chạy), rồi đến dấu đang chạy. Di chuột lên để xem chi tiết. Trong **Cây không gian làm việc**, dòng của thư mục cha cũng hiện các cuộc trò chuyện của từng dự án bên trong (ví dụ mỗi thư mục nhánh trong `.worktrees/`), kể cả khi thư mục đã thu gọn. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ảnh chụp màn hình: Trạng thái dự án"></a> |
|
|
@@ -169,7 +169,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
169
169
|
- **Kiểm tra mục tiêu:** chỉ chạy khi tác tử đánh dấu một `/goal` là hoàn tất trong một vòng tự động (hoặc khi bạn nhấp **Chạy ngay**). Phần Host chạy lệnh kiểm thử trong thư mục của cuộc trò chuyện theo chế độ sandbox của cuộc trò chuyện (giống công cụ `bash` của chính dsh: cùng chính sách truy cập tệp; khi sandbox đó không khởi động được, bài kiểm thử không chạy và bước kiểm tra thất bại). Để tìm lệnh, phần Host chỉ đọc `package.json`, `Makefile`, `Cargo.toml`, `go.mod`, `pyproject.toml` và `pytest.ini`, dưới dạng tệp thông thường bên trong thư mục (không có symlink trỏ ra ngoài thư mục, không có FIFO). Sau đó phần Host gửi mục tiêu, cuộc trò chuyện kể từ khi mục tiêu bắt đầu (tin nhắn của bạn, câu trả lời của tác tử, các lệnh gọi công cụ cắt còn 1.000 ký tự và 2.000 ký tự cuối của mỗi kết quả công cụ; không có phần suy luận, không có bước đã bị hoàn tác; tối đa khoảng 60.000 ký tự, phần mới nhất), `git status --short` và phần cuối đầu ra kiểm thử đến mô hình đã chọn trong **Kiểm tra mục tiêu** (mặc định là mô hình của chính cuộc trò chuyện), dưới dạng một yêu cầu duy nhất không có công cụ. Đầu ra công cụ có thể chứa những gì tác tử đã đọc, nên yêu cầu này có thể chứa một phần tệp của bạn, giống như chính cuộc trò chuyện. Không có gì được ghi vào cuộc trò chuyện hay dự án. Lệnh kiểm thử của bạn, các giới hạn, kết quả gần nhất (kèm phần cuối đầu ra) và mô hình đã chọn nằm trong `$DSH_HOME/storages/dsh-composer-plus/goal-check.json` (tệp chỉ chủ sở hữu truy cập được, 500 cuộc trò chuyện mới nhất).
|
|
170
170
|
- **Tiếp tục trong cuộc trò chuyện mới:** không có gì chạy cho đến khi bạn nhấp. Sau đó phần Host gửi cuộc trò chuyện (như Kiểm tra mục tiêu đọc: không có phần suy luận, không có bước đã bị hoàn tác) đến mô hình của chính cuộc trò chuyện và hiện ghi chú bàn giao; chỉ **Bắt đầu cuộc trò chuyện mới** mới tạo cuộc trò chuyện mới. Không có gì được ghi vào dự án.
|
|
171
171
|
- **Phân tích ngữ cảnh:** phần Host chỉ đọc nhật ký cuộc trò chuyện; không gọi mô hình, không đọc tệp dự án.
|
|
172
|
-
- **Bảng tác vụ:** bảng hiện các cuộc trò chuyện của chính dsh từ các danh sách của chính dsh trong cửa sổ này; bảng không thêm dữ liệu trò chuyện riêng nào.
|
|
172
|
+
- **Bảng tác vụ:** bảng hiện các cuộc trò chuyện của chính dsh từ các danh sách của chính dsh trong cửa sổ này; bảng không thêm dữ liệu trò chuyện riêng nào. **Tác vụ mới** mở cuộc trò chuyện mới của chính dsh, và bạn viết tin nhắn đầu tiên trong khung soạn thảo của dsh, nên phê duyệt, sandbox và mô hình của cuộc trò chuyện áp dụng như bình thường. Phần Host giữ tin nhắn đầu tiên của cuộc trò chuyện đó làm prompt của thẻ và gửi nó (4.000 ký tự đầu tiên, không gì khác) đến mô hình của cuộc trò chuyện đó trong thêm một yêu cầu, không có công cụ, để lấy tối đa 3 nhãn. Prompt, nhãn và thời điểm bắt đầu của mỗi tác vụ được lưu trong `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` (tệp chỉ chủ sở hữu truy cập được, 2.000 mục mới nhất); công tắc nằm trong `board-switch.json` bên cạnh. Không có gì được ghi vào thư mục dự án. **Trả lời** gửi câu trả lời của bạn đến yêu cầu đang chờ của chính dsh, giống như thẻ của chính cuộc trò chuyện. Danh sách tác vụ cũ của các phiên bản trước (`board.json`) vẫn nằm trên đĩa như cũ và không được đọc. **Tiến độ khi di chuột** đọc nhật ký của cuộc trò chuyện trên máy Mac này. Với **Nhanh (không dùng AI)** (mặc định), không có gì được gửi đi. Với **Tóm tắt bằng AI**, trong lúc hộp tiến độ của một thẻ đang chạy hiện ra (hoặc trong lúc bảng của Tether đang mở, cho tối đa 8 thẻ đang chạy), phần Host gửi phần mới nhất của cuộc trò chuyện đó (tối đa khoảng 6.000 ký tự: tin nhắn của bạn, câu trả lời dạng văn bản của tác tử, các lệnh gọi công cụ và phần cuối kết quả của chúng; không có phần suy luận hay tin nhắn đã bị hoàn tác) đến mô hình của cuộc trò chuyện, trong một yêu cầu không dùng công cụ. Phần Host chỉ gửi lại sau khi cuộc trò chuyện có bước mới, tối đa một lần mỗi 20 giây cho mỗi cuộc trò chuyện. Ghi chú chỉ được giữ trong bộ nhớ; thiết lập nằm trong `$DSH_HOME/storages/dsh-composer-plus/board-progress.json` (tệp chỉ chủ sở hữu truy cập được).
|
|
173
173
|
- **Tệp được bảo vệ:** danh sách và công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/protected-files.json` (tệp chỉ chủ sở hữu truy cập được). Bước kiểm tra chỉ đọc đường dẫn của mỗi lệnh gọi công cụ tệp (và đường dẫn thật của nó), không bao giờ đọc tệp.
|
|
174
174
|
- **Lệnh bị chặn:** các quy tắc và công tắc nằm trong `$DSH_HOME/storages/dsh-composer-plus/blocked-commands.json` (tệp chỉ chủ sở hữu truy cập được). Bước kiểm tra chỉ đọc văn bản lệnh của mỗi lệnh gọi `bash` và `pwsh`; nó không chạy gì và không gửi gì.
|
|
175
175
|
- **Bộ nhớ dự án:** tắt cho đến khi bạn bật. Khi bật, sau mỗi lượt kết thúc của một cuộc trò chuyện cấp cao nhất, phần Host gửi các tin nhắn mới của chính cuộc trò chuyện đó kể từ lần xem xét trước (tin nhắn của bạn và câu trả lời dạng văn bản của tác tử; không có đầu ra công cụ, suy luận, ngữ cảnh ẩn hay tin nhắn đã hoàn tác; trong cuộc trò chuyện rẽ nhánh, bản sao từ cuộc trò chuyện cha bị bỏ qua; tối đa khoảng 16.000 ký tự) và các ghi chú đã lưu tới mô hình của chính cuộc trò chuyện, trong một yêu cầu không có công cụ. Ghi chú là các tệp Markdown trong `$DSH_HOME/storages/dsh-composer-plus/memory/` (chỉ chủ sở hữu đọc/ghi): `projects/<id>/` cho mỗi thư mục dự án (`<id>` là mã băm của đường dẫn thật của thư mục; `project.json` ghi tên thư mục), `global/`, `journal.jsonl` (mỗi thay đổi kèm dòng trước và sau) và `reviewed.json` (đã đọc mỗi cuộc trò chuyện đến đâu). Không có gì được ghi vào thư mục dự án. Ghi chú trông giống khóa, token, mật khẩu hoặc số giấy tờ tùy thân bị từ chối. Ghi chú của một dự án đi vào system prompt của mỗi cuộc trò chuyện mới trong thư mục đó, nên chúng tới mô hình cùng mọi yêu cầu của cuộc trò chuyện đó. Công tắc nằm trong `memory.json` ở cùng chỗ. **Mở bộ nhớ** không gửi gì cho đến khi bạn bấm **Xem trước thay đổi**; khi đó nó gửi các ghi chú đang hiển thị và văn bản của bạn tới mô hình mặc định của dsh, trong một yêu cầu không có công cụ. Các thay đổi chỉ được ghi khi **Áp dụng**, với `editor` trong nhật ký. Tether đọc và thay đổi ghi chú qua cùng một tuyến.
|
|
@@ -194,7 +194,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
194
194
|
- **Dòng cuộc trò chuyện không có nhãn branch:** thanh bên không ở chế độ xem “Trong một danh sách” (trong “Không gian làm việc” và “Cây không gian làm việc”, không dòng cuộc trò chuyện nào hiển thị nhãn), cuộc trò chuyện chưa có lượt nào kể từ khi bạn cài phiên bản này, thư mục của nó không phải repository git, hoặc **Branch Git trên dòng cuộc trò chuyện** đang tắt. Sau khi cập nhật, hãy khởi động lại dsh (phần Host ghi lại branch).
|
|
195
195
|
- **Kiểm tra mục tiêu báo bài kiểm thử thoát với mã 127 hoặc "not found":** dsh khởi động từ Finder hoặc Dock có thể có PATH ngắn hơn terminal của bạn, nên không tìm thấy `npm`, `pnpm` hoặc `cargo`. Hãy khởi động dsh từ terminal, hoặc đặt lệnh kiểm thử của riêng bạn với đường dẫn đầy đủ trong **Kiểm tra mục tiêu** → **Sửa**. **Chạy ngay** hiện kết quả ngay lập tức.
|
|
196
196
|
- **Mục tiêu không đóng và tác tử tiếp tục làm việc:** **Kiểm tra mục tiêu** đã tìm thấy một bài kiểm thử thất bại hoặc phần việc còn thiếu; dòng bên dưới mục tiêu cho biết lý do (di chuột lên kết quả để xem chi tiết). Hãy sửa nguyên nhân hoặc lệnh kiểm thử, hoặc tự hoàn tất mục tiêu bằng `/goal` hoặc thanh mục tiêu (việc này không được kiểm tra).
|
|
197
|
-
- **Cài đặt thất bại ngay sau một bản phát hành:** thêm số phiên bản (`dsh-composer-plus@1.
|
|
197
|
+
- **Cài đặt thất bại ngay sau một bản phát hành:** thêm số phiên bản (`dsh-composer-plus@1.20.0`), xem ghi chú cài đặt ở trên.
|
|
198
198
|
- **Sao lưu ngay báo "Một thao tác sao lưu khác đang chạy":** một thao tác đang chạy trong cửa sổ dsh khác hoặc trong bảng điều khiển cứu hộ (chúng dùng chung tệp khóa `.composer-plus.lock` trong thư mục sao lưu). Hãy chờ thao tác đó xong. Nếu không có thao tác nào đang chạy, khóa của tiến trình đã đóng sẽ được tiếp quản ở lần nhấp tiếp theo.
|
|
199
199
|
- **Bảng điều khiển cứu hộ báo "dsh is running":** trước tiên hãy thoát dsh. Nếu dsh thật sự đã đóng, tệp được nêu trong thông báo là phần còn sót lại sau một sự cố: hãy xóa tệp đó rồi thử lại.
|
|
200
200
|
- **Sau khi khôi phục, dsh không khởi động hoặc thiếu một plugin:** cần cài lại các gói plugin của profile. Bảng điều khiển cứu hộ đề nghị việc này sau khi khôi phục; hoặc chạy `pnpm install` trong từng thư mục dưới `$DSH_HOME/profiles/` mà nó liệt kê. Các thông tin bí mật không có trong vault (máy tính khác) phải được nhập lại: bảng điều khiển liệt kê chúng.
|
|
@@ -249,7 +249,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
249
249
|
- **Tiếp tục trong cuộc trò chuyện mới** gửi cuộc trò chuyện (tin nhắn, lệnh gọi công cụ và phần cuối của mỗi kết quả công cụ, tối đa khoảng 60.000 ký tự, phần mới nhất) đến mô hình của chính cuộc trò chuyện. Ghi chú bàn giao có thể bỏ sót một quyết định hoặc một tệp: hãy đọc ghi chú trước khi bắt đầu. Cuộc trò chuyện mới chỉ biết ghi chú và cuộc trò chuyện được liên kết (dsh đính kèm cuộc trò chuyện cũ làm ngữ cảnh chỉ đọc); ngữ cảnh mô hình của nó bắt đầu nhỏ, cuộc trò chuyện cũ vẫn giữ nguyên. Mỗi cuộc trò chuyện chỉ có một lần viết ghi chú hoặc bắt đầu tại một thời điểm.
|
|
250
250
|
- **Phân tích ngữ cảnh** hiện số ước tính theo quy tắc của chính dsh (khoảng 4 ký tự cho mỗi token), cùng quy tắc với vòng ngữ cảnh của dsh; số đếm của chính mô hình có thể khác. Định nghĩa công cụ là định nghĩa của yêu cầu mới nhất. Tính năng hiện ngữ cảnh như nhật ký cuộc trò chuyện ghi lại; một lượt đang chạy xuất hiện sau bước tiếp theo của lượt đó.
|
|
251
251
|
- **Các bước đã lên kế hoạch** chỉ tiết kiệm token khi mô hình thực sự lên kế hoạch: khi đang bật, mỗi yêu cầu đều mang công cụ `plan_next_steps` và một chỉ dẫn ngắn (khoảng 500 token), kể cả trong những cuộc trò chuyện mà mô hình không bao giờ lên kế hoạch. Một điều kiện chỉ chứng minh đúng điều nó nêu (ví dụ: mã thoát của bản dựng là 0), không chứng minh công việc là đúng. `ok` đọc các dấu kết quả riêng của dsh (`[exit code: N]`, hết thời gian, sandbox từ chối); một lệnh thất bại mà không có mã thoát khác 0 vẫn được tính là đạt. Các bước chạy lần lượt từng bước; hai bước cùng sẵn sàng sẽ được trả lại cho mô hình. Tin nhắn của bước được lưu dưới dạng tin nhắn trợ lý của mô hình trong cuộc trò chuyện (dsh không có dấu cho tin nhắn do plugin viết), nên nội dung của nó ghi rằng Composer Plus đã chạy bước đó. Không có trong Tether.
|
|
252
|
-
- **Bảng tác vụ** hiện các cuộc trò chuyện mà dsh liệt kê trong cửa sổ này: cuộc trò chuyện nằm ngoài dự án chỉ hiện trong **Tất cả dự án**, và thư mục branch riêng của từng cuộc trò chuyện (`<project>/.worktrees/<name>`) được tính là thuộc dự án của nó. Cột của một thẻ là trạng thái trực tiếp của cuộc trò chuyện, nên không thể kéo thẻ: cuộc trò chuyện chuyển sang **Xong** khi lượt của nó kết thúc, kể cả sau lỗi hoặc khi bị dừng, và quay lại **Đang làm** khi chạy lại. Chấm xanh lá là chấm hoàn tất của chính dsh, mà dsh chỉ giữ trong cửa sổ này: sau khi trang được tải lại, các cuộc trò chuyện đã xong hiện không có chấm này. **Xong** hiện 50 cuộc trò chuyện mới nhất (**Hiện N tác vụ cũ hơn** hiện phần còn lại). **Tìm dự án** chỉ tìm dự án theo tên, không theo đường dẫn thư mục. **Hoạt động trong 2 giờ qua** ẩn một dự án khi mọi cuộc trò chuyện của nó đều cũ hơn 2 giờ, không hoạt động và đã đọc; bảng vẫn hiện dự án mà bạn đã chọn. Nhãn đến từ một lệnh gọi mô hình cho mỗi tác
|
|
252
|
+
- **Bảng tác vụ** hiện các cuộc trò chuyện mà dsh liệt kê trong cửa sổ này: cuộc trò chuyện nằm ngoài dự án chỉ hiện trong **Tất cả dự án**, và thư mục branch riêng của từng cuộc trò chuyện (`<project>/.worktrees/<name>`) được tính là thuộc dự án của nó. Cột của một thẻ là trạng thái trực tiếp của cuộc trò chuyện, nên không thể kéo thẻ: cuộc trò chuyện chuyển sang **Xong** khi lượt của nó kết thúc, kể cả sau lỗi hoặc khi bị dừng, và quay lại **Đang làm** khi chạy lại. Chấm xanh lá là chấm hoàn tất của chính dsh, mà dsh chỉ giữ trong cửa sổ này: sau khi trang được tải lại, các cuộc trò chuyện đã xong hiện không có chấm này. **Xong** hiện 50 cuộc trò chuyện mới nhất (**Hiện N tác vụ cũ hơn** hiện phần còn lại). **Tìm dự án** chỉ tìm dự án theo tên, không theo đường dẫn thư mục. **Hoạt động trong 2 giờ qua** ẩn một dự án khi mọi cuộc trò chuyện của nó đều cũ hơn 2 giờ, không hoạt động và đã đọc; bảng vẫn hiện dự án mà bạn đã chọn. **Tác vụ mới** chỉ nhớ cuộc trò chuyện mới gần nhất của cửa sổ này: khi bạn mở một cuộc trò chuyện khác trước tin nhắn đầu tiên, cuộc trò chuyện đó vẫn ở **Cần làm** dưới tên **Tác vụ mới** cho đến khi bạn viết vào, nhưng bảng chỉ tự quay lại cho cuộc trò chuyện gần nhất. Sau khi tải lại, cuộc trò chuyện mới chưa có tin nhắn không có trên bảng (dsh giữ nó làm Phiên mới trống của dsh). Nhãn đến từ một lệnh gọi mô hình cho mỗi tác vụ, dựa trên tin nhắn đầu tiên của tác vụ: nhãn có thể sai, và cuộc trò chuyện mà bạn không bắt đầu trên bảng thì không có nhãn. Tiêu đề là tiêu đề cuộc trò chuyện của chính dsh (dịch vụ đặt tiêu đề của dsh, với mô hình của cuộc trò chuyện); cho đến khi có tiêu đề, thẻ hiện dòng đầu tiên của tin nhắn đầu tiên. **Trả lời** chỉ trả lời yêu cầu mới nhất của cuộc trò chuyện: khi yêu cầu đó đã được trả lời ở nơi khác (cửa sổ khác, Tether, Đánh giá tự động) hoặc cuộc trò chuyện hỏi điều mới, khung chi tiết báo điều đó và không gửi gì. Các phiên bản trước có danh sách tác vụ với bình luận và công cụ cho tác tử; chúng đã bị bỏ, và `board.json` cũ không được hiển thị. Ý tưởng và giao diện lấy từ [Kanzo](https://github.com/emanuele-em/kanzo) của emanuele-em (AGPL-3.0); Composer Plus không dùng mã của nó.
|
|
253
253
|
- **Ưu tiên tin nhắn gửi sau khi Dừng** chỉ hoạt động sau khi bạn dừng cuộc trò chuyện (hoặc sau một lượt bị lỗi, hoặc khi bạn mở một cuộc trò chuyện vẫn còn hàng đợi): tin nhắn bạn gửi khi một lượt đang chạy vẫn chờ ở cuối hàng đợi. Nó chỉ vượt lên trước các tin nhắn của chính bạn trong hàng đợi: nếu trong hàng đợi có một vòng mục tiêu hoặc một câu trả lời cho câu hỏi đang chờ, thứ tự của dsh được giữ nguyên. Nó đọc một phần của dsh không phải là API công khai (lượt đã dừng có còn đang kết thúc không); nếu một bản cập nhật dsh đổi tên phần đó, tin nhắn chỉ được đưa lên đầu sau khi lượt đó kết thúc. Cuộc trò chuyện của subagent giữ thứ tự của dsh.
|
|
254
254
|
- **Bộ nhớ dự án** thuộc về thư mục đầu tiên của cuộc trò chuyện (thư mục dự án của dsh): cuộc trò chuyện đổi thư mục bằng `cd` vẫn giữ bộ nhớ của dự án đầu tiên, và cùng thư mục được mở qua một đường dẫn khác tới cùng các tệp sẽ dùng chung bộ nhớ. Cuộc trò chuyện cố định phần bộ nhớ khi bắt đầu, nên ghi chú lưu sau đó hiện từ cuộc trò chuyện tiếp theo (`memory_recall` tìm thấy ngay). Việc xem xét chỉ giữ những gì mô hình quyết định giữ: có thể bỏ sót một dữ kiện hoặc giữ một dữ kiện sai; hãy kiểm tra trong **Mở bộ nhớ** và sửa ở đó, hoặc sửa các tệp bằng tay khi dsh đã đóng. **Mở bộ nhớ** gửi ghi chú của dự án được chọn và ghi chú chung (mọi dự án khi bạn chọn Tất cả ghi chú; tối đa khoảng 60.000 ký tự, phần còn lại chỉ được đếm và không thể thay đổi trong yêu cầu đó) cùng văn bản của bạn tới mô hình mặc định của dsh, không phải mô hình của cuộc trò chuyện. Bản xem trước được giữ trên Mac trong 30 phút và cho đến khi dsh khởi động lại; nếu việc xem xét hoặc tác tử thay đổi ghi chú trong lúc đó, **Áp dụng** sẽ từ chối và bạn xem trước lại. **Áp dụng** lưu tất cả thay đổi của một bản xem trước hoặc không lưu gì: nếu một thay đổi không lưu được (ví dụ MEMORY.md đã đầy), ghi chú giữ nguyên và lý do được hiển thị. Mỗi lượt kết thúc có tin nhắn của bạn tốn một lần gọi mô hình; lần gọi thất bại sẽ đọc lại cùng các tin nhắn sau lượt tiếp theo. Cuộc trò chuyện của tác tử con không được xem xét. Ý tưởng và định dạng tệp lấy từ [DS Bot](https://github.com/Fei2411/DS-Bot) (Apache-2.0); Composer Plus không dùng mã của nó và không bao giờ đọc hay ghi bộ nhớ riêng của DS Bot.
|
|
255
255
|
- **Sao lưu** dùng một thư mục cố định duy nhất, `~/Desktop/dsh-backups` (thư mục mặc định của dsh-backup, nên các tệp lưu trữ của nó vẫn dùng được); không có cài đặt cho thư mục khác. Một tệp lưu trữ lớn gần bằng thư mục home của dsh khi không tính `cache/` và `dsh-runtimes/` (đo thực tế: 1,6 GB tệp tạo ra tệp lưu trữ 830 MB trong khoảng 30 giây trên Apple Silicon; dsh vẫn phản hồi bình thường). Một tệp thay đổi trong lúc được đọc sẽ được lưu ở trạng thái lúc quá trình sao lưu mở nó, nên nhật ký của một cuộc trò chuyện đang mở có thể kết thúc bằng một bản ghi bị cắt, và dsh sửa bản ghi đó ở lần ghi tiếp theo. Việc che tìm thông tin bí mật trong tệp yml theo tên khóa trên một dòng (`token:`, `apiKey:`, …); thông tin bí mật trong flow map (`{token: x}`), trong một danh sách dưới khóa như vậy, trong tệp JSON (ví dụ `apiKey` của một máy chủ MCP trong tệp `.json`) hoặc dưới tên khác vẫn nằm trong tệp lưu trữ. Các tệp lưu trữ theo loại của dsh-backup (`dsh-t-…`) không được liệt kê. **Cho máy tính khác** sao chép tệp lưu trữ (trên APFS là bản clone: không tốn thêm dung lượng); vault không đi kèm. **Sao lưu ngay** không xóa bản sao lưu nào. Một lần sao lưu tự động giữ các bản sao lưu mới nhất do Composer Plus tạo (cài đặt **Giữ** của **Tự động sao lưu**) và xóa các bản cũ hơn do nó tạo; các snapshot trước khi nâng cấp được đếm riêng (giữ lại 2 bản mới nhất). Các tệp lưu trữ của dsh-backup không bao giờ bị xóa: hãy xóa chúng bằng **Xóa**. Khi dsh-backup vẫn còn được cài, nó tính các tệp lưu trữ của Composer Plus vào số bản giữ lại của riêng nó và có thể xóa chúng.
|
|
@@ -286,7 +286,7 @@ Khi menu `/` hoặc `@` đang mở, menu đó giữ các phím này cho riêng n
|
|
|
286
286
|
|
|
287
287
|
**Tác tử có thể nhớ sở thích của tôi giữa các cuộc trò chuyện, như bộ nhớ của DS Bot không?** Có, với **Bộ nhớ dự án** (mặc định tắt): hãy bật trong **Cài đặt → Composer Plus**. Sau mỗi lượt, sở thích và quyết định lâu dài của bạn được lưu thành ghi chú ngắn cho dự án của cuộc trò chuyện, và mọi cuộc trò chuyện mới trong dự án đó đều đọc chúng. Hãy bảo tác tử nhớ một điều, nó sẽ lưu ngay. Để xem hoặc thay đổi ghi chú, bấm **Mở bộ nhớ** ở cùng hàng và viết điều cần thay đổi.
|
|
288
288
|
|
|
289
|
-
**Tôi có thể xem tất cả cuộc trò chuyện của mình dưới dạng bảng kanban và bắt đầu cuộc trò chuyện mới từ đó không?** Có, với **Bảng tác vụ** (mặc định bật): mở nó ở thanh bên trái. Mỗi cuộc trò chuyện là một thẻ trong **Đang làm**, **Đang duyệt** (đang chờ bạn) hoặc **Xong**. **Tác vụ mới**
|
|
289
|
+
**Tôi có thể xem tất cả cuộc trò chuyện của mình dưới dạng bảng kanban và bắt đầu cuộc trò chuyện mới từ đó không?** Có, với **Bảng tác vụ** (mặc định bật): mở nó ở thanh bên trái. Mỗi cuộc trò chuyện là một thẻ trong **Đang làm**, **Đang duyệt** (đang chờ bạn) hoặc **Xong**. **Tác vụ mới** mở cuộc trò chuyện mới của dsh trong dự án, và bảng quay lại khi tin nhắn đầu tiên của bạn được gửi; nhấp **Trả lời** trên thẻ màu cam để trả lời mà không cần mở cuộc trò chuyện.
|
|
290
290
|
|
|
291
291
|
**dsh có thể sao lưu các cuộc trò chuyện và cài đặt của tôi như dsh-backup không?** Có: **Cài đặt → Composer Plus → Sao lưu → Sao lưu ngay**. Nó ghi cùng định dạng tệp lưu trữ vào cùng thư mục (`~/Desktop/dsh-backups`), nên các tệp lưu trữ của dsh-backup cũng hiện ra và khôi phục được, và bạn có thể gỡ dsh-backup. Bật **Tự động sao lưu** để sao lưu theo lịch.
|
|
292
292
|
|
|
@@ -408,7 +408,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
|
|
|
408
408
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
|
|
409
409
|
# Edit queued message in place with images and files (slow fake model) + its thumbnail
|
|
410
410
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
|
|
411
|
-
# Task board:
|
|
411
|
+
# Task board: New task opens dsh's new chat and comes back after the first message, AI tags, live columns, Answer on the board, Hide finished, the switch
|
|
412
412
|
SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
|
|
413
413
|
```
|
|
414
414
|
|