dsh-composer-plus 1.18.0 → 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ru.md CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  <p align="center"><img src="docs/images/hero.webp" width="820" alt="DeepSeek Harness с Composer Plus: у работающего проекта на боковой панели крутится индикатор, а панель изменений показывает git diff"></p>
16
16
 
17
- Неофициальный плагин сообщества. Сетевые запросы плагин делает только для проверки обновлений (выпуски GitHub и реестр npm). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Предсказание следующего сообщения** (по умолчанию включено) обращается к модели, выбранной в настройках (по умолчанию это модель dsh, если вы не выберете другую), один раз после каждого завершённого хода, без нажатия. Чтобы остановить эти запросы, выключите его в **Настройки → Composer Plus**. **Дополнение при вводе** (по умолчанию выключено) после включения обращается к выбранной для него модели (по умолчанию это модель предсказания) при каждой паузе в наборе. **Улучшить промпт** обращается к модели, только когда вы нажимаете волшебную палочку. **Проверка цели** (по умолчанию включена) обращается к модели один раз каждый раз, когда агент в автоматическом раунде отмечает `/goal` как выполненную. **Мобильное подключение** (по умолчанию выключено) принимает подключения iPhone из вашей локальной сети или tailnet только после того, как вы его включите.
17
+ Неофициальный плагин сообщества. Сетевые запросы плагин делает только для проверки обновлений (выпуски GitHub и реестр npm). Чтобы при запуске их не было, выключите **Автоматические обновления**. **Идеи функций** обращается к модели вашего чата, только когда вы нажимаете **Предложить функции**. **Предсказание следующего сообщения** (по умолчанию включено) обращается к модели, выбранной в настройках (по умолчанию это модель dsh, если вы не выберете другую), один раз после каждого завершённого хода, без нажатия. Чтобы остановить эти запросы, выключите его в **Настройки → Composer Plus**. **Дополнение при вводе** (по умолчанию выключено) после включения обращается к выбранной для него модели (по умолчанию это модель предсказания) при каждой паузе в наборе. **Улучшить промпт** обращается к модели, только когда вы нажимаете волшебную палочку. **Доска задач** обращается к модели нового чата один раз для тегов каждой задачи, которую вы начинаете на доске. **Проверка цели** (по умолчанию включена) обращается к модели один раз каждый раз, когда агент в автоматическом раунде отмечает `/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.18.0`.
32
+ > pnpm в dsh пропускает версии, которые вышли меньше 24 часов назад. Сразу после выпуска укажите версию: `dsh-composer-plus@1.19.0`.
33
33
 
34
34
  ## Функции
35
35
 
@@ -71,11 +71,11 @@ 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 для вас и агентов: **К выполнению**, **В работе**, **На проверке** и **Готово** (и **Бэклог**, см. ниже). Выберите слева проект или **Все проекты**. **Новая задача** (или `n`) открывает новую карточку: введите её название и нажмите `Enter`. Перетащите карточку в другую колонку или между двумя карточками. Нажмите на карточку, чтобы увидеть и изменить её поля **Статус**, **Теги**, **Ручная** (агенты её пропускают), описание (Markdown) и комментарии. `/` ищет во всех проектах, `h` показывает только ручные задачи, кнопка экспорта сохраняет доску в Markdown или JSON. Агенты получают инструменты доски: попросите чат «взять следующую задачу с доски», и агент переместит верхнюю карточку из **К выполнению** в **В работе**, напишет комментарий о сделанном и переместит её в **На проверке**; в **Готово** её перемещаете вы. В проекте с открытыми задачами каждый чат получает это правило сам. Настройки → Composer Plus → **Доска задач**: здесь есть переключатель колонки **Бэклог**; её карточки агенты оставляют вам. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Снимок экрана: Доска задач"></a> |
74
+ | **Доска задач** | <a id="feature-taskboard"></a>Левая боковая панель → **Доска задач**. Канбан-доска ваших чатов dsh с тем же живым состоянием, что показывает боковая панель: чат, который ждёт вашего одобрения, ответа или проверки плана, находится в **На проверке** с оранжевой точкой, работающий чат — в **В работе**, завершённый чат — в **Готово** (зелёный, пока вы его не откроете). Выберите слева проект или **Все проекты**; папка ветки для каждого чата считается частью своего проекта. **Новая задача** (или `n`) просит только промпт: `Enter` начинает новый чат в проекте, карточка появляется в **К выполнению**, dsh даёт чату название, а модель чата пишет до 3 тегов. Нажмите на карточку, чтобы открыть её чат. На оранжевой карточке нажмите **Ответить**, чтобы ответить прямо на доске: **Отклонить** или **Разрешить один раз**, **Одобрить** или **Запросить изменения** для плана, либо варианты и ваш собственный текст для вопроса. **Скрыть завершённые** скрывает **Готово** на этом устройстве. | <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> |
78
- | **Ветка Git в строках чатов** | <a id="feature-sessionbranch"></a>Каждая строка чата на боковой панели показывает маленькую серую метку с веткой git, на которой была папка проекта чата в его последнем ходе (например, `main` или `feature/login`; при отсоединённом HEAD ветки нет, и метка не показывается). Два чата одного проекта на разных ветках больше не выглядят одинаково, и вы сразу видите, если собираетесь продолжить чат не на той ветке. Наведите указатель на метку, чтобы увидеть полное имя. Host-часть читает ветку (`git branch --show-current`, только чтение), когда ход начинается и когда заканчивается; у чата без хода с момента установки этой функции или у папки, которая не является репозиторием git, метки нет. Если строка проекта над чатом называется так же, как ветка (например, папка «Ветка для каждого чата»), строка чата не показывает метку, но в режиме «Одним списком» метка по-прежнему видна. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Снимок экрана: Ветка Git в строках чатов"></a> |
78
+ | **Ветка Git в строках чатов** | <a id="feature-sessionbranch"></a>В режиме «Одним списком» на боковой панели каждая строка чата показывает маленькую серую метку с веткой git, на которой была папка проекта чата в его последнем ходе (например, `main` или `feature/login`; при отсоединённом HEAD ветки нет, и метка не показывается). Два чата одного проекта на разных ветках больше не выглядят одинаково, и вы сразу видите, если собираетесь продолжить чат не на той ветке. Наведите указатель на метку, чтобы увидеть полное имя. Host-часть читает ветку (`git branch --show-current`, только чтение), когда ход начинается и когда заканчивается; у чата без хода с момента установки этой функции или у папки, которая не является репозиторием git, метки нет. В режимах «По рабочей области» и «Дерево рабочих областей» ни одна строка чата не показывает метку, потому что чат уже находится под строкой своего проекта. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Снимок экрана: Ветка Git в строках чатов"></a> |
79
79
  | **Отметить все как прочитанные** | <a id="feature-markprojectread"></a>На боковой панели нажмите кнопку **…** проекта → **Отметить все как прочитанные**. У всех чатов этого проекта сразу пропадает зелёная точка непрочитанного. У других проектов точки остаются. Если в проекте нет непрочитанных чатов, пункт показан серым (**Нет непрочитанных чатов**). | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Снимок экрана: Отметить все как прочитанные"></a> |
80
80
  | **Активные проекты сверху** | <a id="feature-activeprojectsfirst"></a>Когда чат начинает работать или ждёт вас, его проект перемещается в начало боковой панели со встроенной анимацией строк dsh (так же, как при перетаскивании). Завершённые проекты остаются на месте; их можно перетаскивать как обычно. Перемещения сохраняются в порядке проектов dsh, поэтому при отключении функции текущий порядок остаётся. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Снимок экрана: Активные проекты сверху"></a> |
81
81
  | **Фильтр недавних проектов** | <a id="feature-recentprojects"></a>Боковая панель → параметры просмотра (значок с ползунками) → **Активные за последние 2 часа**. Пока этот пункт выбран, боковая панель показывает только проекты с чатом, активным за последние 2 часа. Это чат, обновлённый за это время, выполняющийся или ожидающий чат, открытый чат или завершённый чат, который вы ещё не открыли (зелёная точка dsh «готово»), — такой чат оставляет проект на виду и после 2 часов. Проекты без такого чата скрыты, в том числе новые и пустые. В режиме **Дерево рабочих областей** родительская папка остаётся на виду, пока активен проект внутри неё, а чаты, которые не были активны за последние 2 часа, тоже скрыты, поэтому видны только недавние чаты. Выберите пункт ещё раз, чтобы показать все проекты. Выбор сохраняется на этом устройстве. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Снимок экрана: Фильтр недавних проектов"></a> |
@@ -85,7 +85,7 @@ dsh plugin --profile web add dsh-composer-plus
85
85
  | **Открывать ожидающий чат при бездействии** | <a id="feature-idleswitch"></a>Когда чат задаёт вопрос, ждёт одобрения или проверки плана (оранжевая точка) или завершает ход, который вы ещё не прочитали (зелёная точка), а вы не пользуетесь dsh 30 секунд, dsh открывает этот чат. Оранжевые чаты открываются раньше зелёных. В каждой группе первым открывается тот, что ждёт дольше всех; следующий открывается ещё через 30 секунд бездействия. Нажатие клавиши, щелчок, движение мыши, колесо прокрутки или касание запускают отсчёт 30 секунд заново. Текст в поле с фокусом, выделенный текст или открытое меню либо диалог тоже не дают переключиться. Пока ожидающий чат на экране, ничего не меняется. Если вы ушли из ожидающего чата, не ответив, он может открыться снова после следующих 30 секунд бездействия. Когда открывается зелёный чат, его точка исчезает; следующий зелёный чат откроется только после того, как вы снова воспользуетесь dsh, а затем 30 секунд не будете им пользоваться. Функция работает и когда dsh в фоне, но окно dsh не выходит на передний план. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Снимок экрана: Открывать ожидающий чат при бездействии"></a> |
86
86
  | **Язык приложения** | <a id="feature-language"></a>Настройки → Composer Plus → **Язык приложения** переключает весь интерфейс dsh на Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt или हिन्दी (см. ниже). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Снимок экрана: Язык приложения"></a> |
87
87
  | **Мобильное подключение (iPhone)** | <a id="feature-mobileconnect"></a>Работайте с dsh на iPhone через приложение [Tether](tether/) в той же сети Wi-Fi или через [Tailscale](https://tailscale.com). Включите функцию в **Настройки → Composer Plus** (по умолчанию она выключена, потому что открывает сетевой порт на этом Mac). Затем нажмите **Мобильное подключение** внизу слева на боковой панели, отсканируйте QR-код камерой iPhone (коснитесь **Open in Tether**) или кнопкой **Scan code** в Tether, коснитесь **Connect** и нажмите **Approve**. Сначала установите Tether: без него камера не сможет открыть код. Телефон показывает ваши чаты, отправляет сообщения (с фото: **+** в поле ввода → Camera, Photos или Paste image), отвечает на запросы одобрения и вопросы, переключает модели и агентов. Можно связать сколько угодно Mac: имя Mac вверху слева в приложении переключает между ними. Панель **Мобильное подключение** показывает связанные iPhone и время их последнего подключения: **Remove** сразу отключает любой из них. «Tailscale only» отклоняет подключения из локальной сети (для общей сети Wi-Fi), а журнал доступа показывает, кто пытался подключиться. В Tether «Settings → Privacy» блокирует приложение с помощью Face ID. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Снимок экрана: Мобильное подключение (iPhone)"></a> |
88
- | **Автоматические обновления** | <a id="feature-autoupdate"></a>При запуске dsh плагин проверяет [последний выпуск на GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Если он новее и уже есть в npm, плагин устанавливает именно эту версию через встроенный менеджер плагинов dsh (тем же путём, что и Настройки → Плагины) и уведомляет вас. Перезапустите dsh, чтобы загрузить её. **Настройки → Composer Plus → Обновления Composer Plus** показывает версию и кнопки **Проверить обновления** / **Обновить сейчас**. При первом запуске dsh с новой версией окно **Что нового в Composer Plus N** один раз показывает примечания к этой версии (из той же проверки обновлений, без нового сетевого запроса); **Закрыть** или `Esc` закрывает его. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Снимок экрана: Автоматические обновления"></a> |
88
+ | **Автоматические обновления** | <a id="feature-autoupdate"></a>При запуске dsh плагин проверяет [последний выпуск на GitHub](https://github.com/furkancak1r/dsh-composer-plus/releases/latest). Если он новее и уже есть в npm, плагин устанавливает именно эту версию через встроенный менеджер плагинов dsh (тем же путём, что и Настройки → Плагины) и уведомляет вас. Перезапустите dsh, чтобы загрузить её. **Настройки → Composer Plus → Обновления Composer Plus** показывает версию и кнопки **Проверить обновления** / **Обновить сейчас**. При первом запуске dsh с новой версией окно **Что нового в Composer Plus N** один раз показывает примечания к этой версии на языке из **Язык приложения** (они приходят вместе с новой версией, без нового сетевого запроса; для языка без примечаний показываются английские); **Закрыть** или `Esc` закрывает его. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Снимок экрана: Автоматические обновления"></a> |
89
89
  | **Резервное копирование** | <a id="feature-backup"></a>Настройки → Composer Plus → **Резервное копирование** → **Создать копию сейчас** записывает всю домашнюю папку dsh (чаты, настройки, плагины, MCP, навыки) в один архив в `~/Desktop/dsh-backups` вместе с контрольной суммой. Секреты в архиве скрыты: файлы учётных данных, файлы ключей (`.pem`, `.key`) и значения token, secret и password в настройках yml остаются только на этом компьютере, в `vault` этой папки. `cache/`, `dsh-runtimes/` и `node_modules` в архив не входят (dsh создаёт их заново). У каждой резервной копии в списке есть **Проверить** (читает её целиком), **Для другого компьютера** (папка для копирования на новый компьютер, вместе с аварийной консолью) и **Удалить**. Архивы dsh-backup в той же папке тоже показываются и работают. Чтобы восстановить данные, выйдите из dsh и используйте аварийную консоль. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Снимок экрана: Резервное копирование"></a> |
90
90
  | **Автоматическое резервное копирование** | <a id="feature-autobackup"></a>Включите **Автоматическое резервное копирование** (по умолчанию выключено: каждая копия занимает примерно столько же места, сколько ваша домашняя папка dsh без кеша). Выберите, как часто создавать копии (**Каждые**: от 6 часов до 7 дней, по умолчанию 24 часа), и сколько резервных копий хранить (**Хранить**: от 3 до 14, по умолчанию 7). Время следующей копии показано под переключателем; неудачная копия тоже показывается там, и через 30 минут будет новая попытка. Когда dsh или Composer Plus запускается с новой версией, вскоре после запуска создаётся снимок, пока новая версия ещё недолго работала с вашими данными (хранятся два самых новых, с пометкой **Перед обновлением**). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Снимок экрана: Автоматическое резервное копирование"></a> |
91
91
  | **Проверка журналов сеансов** | <a id="feature-sessiondoctor"></a>**Проверить журналы сеансов** читает журнал каждого чата и показывает те, которые dsh не может открыть (повреждённый фрейм, обрезанная запись, неверный порядковый номер). Оборванный конец журнала в список не попадает: dsh исправляет его сам. **Исправить из резервных копий** возвращает копию из самой новой резервной копии, где она не повреждена, и оставляет повреждённый файл рядом (`.corrupt-<время>`). Сообщений, написанных после этой резервной копии, в копии нет. Чат, открытый в этом dsh, здесь не исправляется: выйдите из dsh и исправьте его в аварийной консоли. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Снимок экрана: Проверка журналов сеансов"></a> |
@@ -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
- - **Доска задач:** доска (названия, описания, теги и комментарии ваших задач, пути папок проектов и их короткие id) хранится в `$DSH_HOME/storages/dsh-composer-plus/board.json` (файл доступен только владельцу); переключатель хранится рядом, в `board-switch.json`. Ничего не покидает ваш компьютер, и ничего не записывается в папку проекта. Инструменты доски передают агентам то, что вы написали на доске, поэтому текст задачи попадает к модели чата, когда агент его читает. Повреждённый файл доски сохраняется как `board.json.broken-<time>`, и доска начинается пустой.
172
+ - **Доска задач:** доска показывает чаты dsh из собственных списков dsh в этом окне; своих данных о чатах она не добавляет. Когда вы начинаете задачу, Host-часть создаёт новый чат в выбранном проекте и отправляет ему ваш промпт первым сообщением, как если бы вы ввели его там, поэтому подтверждения, песочница и модель чата действуют как обычно. Затем она отправляет промпт (его первые 4 000 символов, больше ничего) модели этого чата ещё одним запросом, без инструментов, чтобы получить до 3 тегов. Промпт, теги и время запуска каждой задачи хранятся в `$DSH_HOME/storages/dsh-composer-plus/board-chats.json` (файл доступен только владельцу, последние 2 000); переключатель хранится рядом, в `board-switch.json`. В папку проекта ничего не записывается. **Ответить** отправляет ваш ответ в ожидающий запрос dsh так же, как это делает карточка в самом чате. Старый список задач прежних версий (`board.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 читает и изменяет заметки через тот же маршрут.
@@ -191,10 +191,10 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
191
191
  - **Чат не продолжился после перезапуска:** функция «Продолжать после перезапуска» была выключена, когда dsh завершил работу; вы сами остановили этот ход; ход уже закончился (готово или сбой); чат был в архиве; или работало больше 20 чатов (продолжаются 20 самых новых).
192
192
  - **После перезапуска очередь пуста:** очередь очищает сам dsh при завершении. Функция «Продолжать после перезапуска» возвращает её только в чате, который продолжается; в других чатах отправьте сообщения снова. Сообщение, удалённое прямо перед выходом, может вернуться: удалите его снова.
193
193
  - **Открыть issue на GitHub сообщает «gh could not open the issue»:** это первая строка вывода самого `gh`. Выполните `gh auth status` в терминале и войдите с помощью `gh auth login`; у папки чата должен быть удалённый репозиторий GitHub (`git remote -v`). «not installed or not on the PATH of dsh» означает, что dsh не нашёл `gh`: установите его или запустите dsh из терминала, в котором `gh` работает.
194
- - **На строке чата нет метки ветки:** у чата не было хода с момента установки этой версии, его папка не является репозиторием git, или функция **Ветка Git в строках чатов** выключена. После обновления перезапустите dsh (ветку записывает Host-часть).
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.18.0`), см. примечание об установке выше.
197
+ - **Установка не удаётся сразу после выпуска:** укажите версию (`dsh-composer-plus@1.19.0`), см. примечание об установке выше.
198
198
  - **Кнопка «Создать копию сейчас» сообщает «Уже выполняется другое действие с резервными копиями»:** действие выполняется в другом окне dsh или в аварийной консоли (они используют общий файл блокировки `.composer-plus.lock` в папке резервных копий). Дождитесь его окончания. Если никакое действие не выполняется, блокировку закрытого процесса перехватит следующее нажатие.
199
199
  - **Аварийная консоль сообщает «dsh is running»:** сначала выйдите из dsh. Если dsh действительно закрыт, файл, названный в сообщении, остался после сбоя: удалите его и повторите попытку.
200
200
  - **После восстановления dsh не запускается или не хватает плагина:** пакеты плагинов профиля нужно установить заново. Аварийная консоль предлагает это после восстановления; или выполните `pnpm install` в каждой папке внутри `$DSH_HOME/profiles/`, которую она перечисляет. Секреты, которых не было в vault (другой компьютер), нужно ввести заново: консоль перечисляет их.
@@ -214,6 +214,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
214
214
  - **Удалить чат** требует архивации dsh (dsh 0.2.0 и новее). Если чат (или один из чатов его субагентов) не останавливается за 15 с или его удерживает другой dsh, он остаётся в архиве, и ничего не перемещается. В системах, отличных от macOS, папка корзины должна быть на том же диске, что и история чатов. Открытый чат, который вы удалили, остаётся в памяти dsh (в архиве и скрытым) до перезапуска dsh. Очищайте Корзину сами: dsh этого не делает.
215
215
  - В очереди dsh нет действия `move`, поэтому Host-часть плагина перемещает само сообщение в очереди dsh (одно изменение, то же самое сообщение). Сообщения с изображениями или файлами тоже перемещаются. Перемещаются только ваши собственные сообщения: раунд цели или ответ на вопрос в очереди остаётся на своём месте. Если сообщение начинает отправляться, пока вы перетаскиваете, ничего не перемещается, и об этом сообщает уведомление.
216
216
  - dsh 0.2.1 загружает обновление сразу, если новая версия не меняет никаких настроек dsh; в остальных случаях, а также в dsh 0.2.0, перезапустите dsh, чтобы загрузить его. Плагин никогда не перезапускает dsh за вас. Профили Web/CLI без менеджера плагинов dsh только сообщают о новой версии.
217
+ - **Что нового в Composer Plus N** показывает примечания на языке из **Язык приложения**. Язык интерфейса с другим регионом получает примечания своего основного языка (`en-GB` — английские, `zh-TW` — китайские примечания `zh`). Для языка без примечаний (его добавляет другой языковой пакет, или это `pt-PT`, а не `pt-BR`) показываются английские примечания. Примечания приходят вместе с новой версией. Если у запущенной копии нет читаемого файла примечаний (`release-notes.json`), окно показывает английские примечания с GitHub.
217
218
  - **Разрешить для этого чата** отсчитывает лимит времени с момента выдачи разрешения. Новый лимит времени сразу применяется к действующим разрешениям, поэтому более короткий лимит может сразу их завершить. У разрешений из версии 1.12 и более ранних нет времени: после обновления агент ещё раз спросит об этих инструментах.
218
219
  - **Сохранять фокус в поле ввода** возвращает фокус только после команды `/` или навыка. Пока dsh обрабатывает команду, поле ввода несколько миллисекунд доступно только для чтения, поэтому клавиши, нажатые в это время, теряются. Если меню `/` в dsh ещё открыто, `Enter` выбирает выделенную строку и ничего не отправляет.
219
220
  - **Подгонять карточку вопроса под окно** меняет только карточку вопроса dsh, а не карточку проверки плана. Она находит карточку по разметке dsh (`data-question-key`, `data-question-scroll`); если обновление dsh изменит эту разметку, карточка будет выглядеть так, как её рисует dsh. Высота карточки следует за окном, а не за чатом: в чате в узкой боковой панели высокая карточка всё ещё может выходить выше чата.
@@ -227,7 +228,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
227
228
  - **Этот чат** учитывает только файлы, которые записали файловые инструменты dsh (`write`, `edit`, `str_replace_editor`). Файлов, которые изменила команда (`bash`), в этом представлении нет; они показаны в разделе **Незафиксированные**. Без снимка отката хода для чата (откат хода выключен, установлен dsh-rewind-plugin или чат старше плагина) представление сравнивает с последним коммитом и сообщает об этом. Откат хода хранит 50 последних снимков чата: в более длинном чате представление сравнивает с самым старым сохранённым снимком, сообщает, с какого сообщения, и не учитывает более ранние изменения. **Скрыть изменения пробелов** — это `git diff -w`: строка, в которой изменились только пробелы внутри неё, тоже скрывается.
228
229
  - **Открыть issue на GitHub** требует GitHub CLI (`gh`) в PATH dsh и удалённый репозиторий GitHub в папке чата. Команда работает не дольше 60 с; если `gh` работает дольше, issue может уже существовать на GitHub без ссылки в списке (прежде чем нажать ещё раз, проверьте GitHub: список читает ссылку только из завершённого запуска, поэтому новое нажатие может открыть вторую issue). Папка с несколькими удалёнными репозиториями GitHub использует значение по умолчанию самого `gh` (`gh repo set-default`).
229
230
  - **Чаты, которые изменили этот файл**, как и **Этот чат**, знают только файловые инструменты dsh (`write`, `edit`, `str_replace_editor`): изменение, сделанное командой (`bash`), в списке не появляется. Список читает 300 самых новых чатов репозитория (по времени создания) и сообщает, если их больше; он показывает не более 100 строк. Переименованный файл показан под тем именем, которое записал инструмент. Чат, папка которого находится вне репозитория (в том числе через другой путь к тем же файлам), не учитывается. Первое открытие после запуска dsh читает все журналы чатов репозитория (около 4 с для 275 чатов); последующие открытия читают только чаты, изменившиеся с тех пор.
230
- - **Ветка Git в строках чатов** показывает ветку папки чата на момент начала или конца его последнего хода, а не текущую ветку: переключение ветки вне хода появится после следующего хода. У чатов, созданных до этой версии, метки нет до их следующего хода. Метка встроена в разметку строк чатов dsh (в dsh нет для неё отдельного места); если обновление dsh изменит эту разметку, метка не появится. Если строка проекта над чатом называется так же, как ветка (например, папка «Ветка для каждого чата»), строка чата не показывает метку, но в режиме «Одним списком» метка по-прежнему видна.
231
+ - **Ветка Git в строках чатов** показывает ветку папки чата на момент начала или конца его последнего хода, а не текущую ветку: переключение ветки вне хода появится после следующего хода. У чатов, созданных до этой версии, метки нет до их следующего хода. Метка встроена в разметку строк чатов dsh (в dsh нет для неё отдельного места); если обновление dsh изменит эту разметку, метка не появится. Метка видна только в режиме «Одним списком».
231
232
  - **Ветка для каждого чата** в режиме плана: dsh отправляет `/plan <сообщение>` как команду, а не как сообщение, поэтому Composer Plus перехватывает отправку команды в поле ввода dsh (это не публичный API). Если обновление dsh это изменит, `/plan <сообщение>` при выбранном пункте **Новая ветка** выполнится на открытом экране нового чата как собственная команда dsh. Если Host не может включить режим плана в новом чате, папка ветки остаётся, а сообщение не отправляется, поэтому новый чат не меняет файлы в режиме по умолчанию.
232
233
  - **Ветка для каждого чата**: когда папка ветки чата (`<project>/.worktrees/<name>`) удалена, например когда агент самого чата удаляет worktree и ветку, следующий шаг чата выводит чат из этой папки. Проект папки ветки исчезает с боковой панели, а чат появляется в разделе «Без группы» и остаётся открытым. В dsh 0.2.1 и новее чат продолжается в основной папке проекта, и модель получает заметку о новой папке. В dsh 0.2.0 чат остаётся в удалённой папке: команда там завершается с ошибкой, пока вы не начнёте новый чат. Проект удалённой ветки, который не использует ни один чат, тоже исчезает с боковой панели: Composer Plus проверяет папки веток при запуске и каждые 30 секунд, также без фильтра боковой панели. Пока чат переносится, **Новая ветка** в том же репозитории отвечает «попробуйте ещё раз». Если переключатель выключен, снова показывается собственная ошибка dsh («working-directory: directory does not exist»).
233
234
  - **Ветки в дереве рабочих областей** пишет в git без клика: при переносе чата он возвращает папку проекта на прежнюю ветку (`git switch`) и добавляет worktree (`git worktree add`). Он никогда не удаляет ветку, worktree или файл. dsh не может сменить папку чата, поэтому перенесённый чат — это копия (собственный форк dsh с новым id), а старый чат архивируется. Копия продолжает остановленную задачу; вызов инструмента, который шёл в момент появления ветки, завершается отказом, и агент запускает его снова в новой папке. Цель старого чата не переносится. Переносится только чат, чья папка — главная папка репозитория, и только ради ветки, которую он создал и на которую переключился в этом ходе (`git switch -c`, `git checkout -b`): ветка, созданная только через `git branch`, папка с незакоммиченными изменениями, связанный worktree или подпапка ничего не переносят. В дереве показываются только worktree прямо в `<project>/.worktrees/` с веткой; отсоединённый (detached) worktree или worktree в другом месте не показывается. Копия открывается сама, только если её чат был открытым (плагин читает это из строки боковой панели dsh); иначе она находится в проекте ветки.
@@ -248,7 +249,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
248
249
  - **Продолжить в новом чате** отправляет чат (сообщения, вызовы инструментов и конец каждого результата инструмента, не более примерно 60 000 символов, самую новую часть) собственной модели чата. Заметка для передачи может пропустить решение или файл: прочитайте её перед запуском. Новый чат знает только заметку и связанный чат (dsh прикрепляет старый чат как контекст только для чтения); его контекст модели начинается с малого, а старый чат остаётся как есть. Для одного чата одновременно идёт только одна заметка или один запуск.
249
250
  - **Состав контекста** показывает оценки по собственному правилу dsh (около 4 символов на токен), тому же правилу, что и у кольца контекста dsh; собственный подсчёт модели может отличаться. Определения инструментов взяты из самого нового запроса. Функция показывает контекст так, как он записан в журнале чата; ход, который идёт сейчас, появляется после своего следующего шага.
250
251
  - **Запланированные шаги** экономят токены, только когда модель действительно планирует: пока функция включена, каждый запрос несёт инструмент `plan_next_steps` и короткую инструкцию (около 500 токенов), даже в чатах, где модель никогда не планирует. Условие доказывает только то, что в нём сказано (например: код выхода сборки был 0), а не то, что работа сделана верно. `ok` читает собственные отметки результата dsh (`[exit code: N]`, тайм-ауты, отказы песочницы); команда, которая завершилась неудачей без ненулевого кода выхода, считается успешной. Шаги выполняются по одному; два шага, готовые одновременно, возвращаются модели. Сообщение шага сохраняется как сообщение ассистента модели чата (в dsh нет отметки для сообщения, написанного плагином), поэтому его текст говорит, что шаг запустил Composer Plus. В Tether нет.
251
- - **Доска задач** знает только проекты dsh: чат вне проекта показывает **Все проекты**, а папка ветки для каждого чата (`<project>/.worktrees/<name>`) считается частью своего проекта. Id проектов (`acme#12`) берутся из имени папки и не меняются, когда вы переименовываете проект в dsh. Правило «держите доску в актуальном состоянии» попадает в чат, только когда в его проекте есть открытые задачи; чат, который его получил, сохраняет его. Агентам сказано оставлять вам **Готово**, **Бэклог** и ручные задачи, но инструменты этого не запрещают: агент всё равно может переместить такую карточку. Инструменты доски есть в списке инструментов каждого чата, пока функция включена (около 1 000 токенов на запрос); выключите её, если не пользуетесь доской. Пока страница открыта, она читает доску каждые 2 секунды; изменение от агента появляется за это время. Текст, который вы редактируете, пока агент меняет то же поле, не сохраняется: панель показывает новый текст и причину. Нет изображений, нет синхронизации через git между компьютерами и нет общего доступа по сети (в Kanzo всё это есть). Идея и внешний вид взяты из [Kanzo](https://github.com/emanuele-em/kanzo) от emanuele-em (AGPL-3.0); Composer Plus не использует его код.
252
+ - **Доска задач** показывает чаты, которые dsh перечисляет в этом окне: чат вне проекта виден только в **Все проекты**, а папка ветки для каждого чата (`<project>/.worktrees/<name>`) считается частью своего проекта. Колонка карточки — это живое состояние чата, поэтому карточки нельзя перетаскивать: чат переходит в **Готово**, когда его ход заканчивается, в том числе после ошибки или остановки, и возвращается в **В работе**, когда снова запускается. Зелёная точка — это собственная точка завершения dsh, которую dsh хранит только в этом окне: после перезагрузки завершённые чаты показываются без неё. **Готово** показывает 50 последних чатов (**Показать более старые: N** показывает остальные). Теги берутся из одного вызова модели на каждую начатую задачу: они могут быть ошибочными, а у чата, который вы начали не на доске, их нет. Название — это собственное название чата в dsh (служба названий dsh, с моделью чата); пока его нет, карточка показывает первую строку промпта. Промпт, который начинается с известной dsh команды `/` (`/plan`, `/goal`), выполняется как эта команда. **Ответить** отвечает только на последний запрос чата: если на него уже ответили в другом месте (другое окно, Tether, автопроверка) или чат спрашивает что-то новое, панель сообщает об этом и ничего не отправляет. В прежних версиях был список задач с комментариями и инструментами для агентов; их больше нет, а старый `board.json` не показывается. Идея и внешний вид взяты из [Kanzo](https://github.com/emanuele-em/kanzo) от emanuele-em (AGPL-3.0); Composer Plus не использует его код.
252
253
  - **Приоритет сообщения после остановки** работает только после того, как вы остановили чат (или после хода с ошибкой, или когда вы открываете чат, у которого ещё есть очередь): сообщение, отправленное во время хода, по-прежнему ждёт в конце очереди. Оно обгоняет только ваши собственные сообщения в очереди: если в очереди ждёт раунд цели или ответ на вопрос, остаётся порядок dsh. Функция читает часть dsh, которая не является публичным API (завершается ли ещё остановленный ход); если обновление dsh её переименует, сообщение встанет первым только после завершения этого хода. Чаты субагентов сохраняют порядок dsh.
253
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.
254
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 в своём лимите хранимых копий и может их удалить.
@@ -285,7 +286,7 @@ English · 中文 · Türkçe · Español · Português (Brasil) · Français ·
285
286
 
286
287
  **Может ли агент помнить мои предпочтения между чатами, как память DS Bot?** Да, с функцией **Память проекта** (по умолчанию выключена): включите её в **Настройки → Composer Plus**. После каждого хода ваши постоянные предпочтения и решения сохраняются короткими заметками для проекта чата, и каждый новый чат этого проекта их читает. Попросите агента что-то запомнить, и он сразу сохранит это. Чтобы посмотреть или изменить заметки, нажмите **Открыть память** в той же строке и напишите, что изменить.
287
288
 
288
- **Можем ли мы с агентами вести одну общую доску задач, как в Kanzo?** Да, с функцией **Доска задач** (по умолчанию включена): откройте её на левой боковой панели и добавляйте задачи кнопкой **Новая задача**. В чате попросите агента «взять следующую задачу с доски»: он переместит карточку в **В работе**, напишет комментарий о сделанном и переместит её в **На проверке**. Отметьте задачу как **Ручная**, чтобы оставить её себе.
289
+ **Можно ли видеть все мои чаты в виде канбан-доски и начинать с неё новые?** Да, с функцией **Доска задач** (по умолчанию включена): откройте её на левой боковой панели. Каждый чат — это карточка в **В работе**, **На проверке** (он ждёт вас) или **Готово**. **Новая задача** просит только промпт и начинает с ним новый чат; нажмите **Ответить** на оранжевой карточке, чтобы ответить, не открывая чат.
289
290
 
290
291
  **Может ли dsh создавать резервные копии моих чатов и настроек, как dsh-backup?** Да: **Настройки → Composer Plus → Резервное копирование → Создать копию сейчас**. Он записывает архив того же формата в ту же папку (`~/Desktop/dsh-backups`), поэтому архивы dsh-backup тоже показываются и восстанавливаются, а dsh-backup можно удалить. Чтобы копии создавались по расписанию, включите **Автоматическое резервное копирование**.
291
292
 
@@ -407,7 +408,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
407
408
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
408
409
  # Edit queued message in place with images and files (slow fake model) + its thumbnail
409
410
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
410
- # Task board: the page, the agent tools (fake model), drag and drop, search, the switch
411
+ # Task board: a prompt starts a chat, AI tags, live columns, Answer on the board, Hide finished, the switch
411
412
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
412
413
  ```
413
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. **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. **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.18.0`.
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.19.0`.
33
33
 
34
34
  ## Özellikler
35
35
 
@@ -71,11 +71,11 @@ 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**. Sizin ve ajanların birlikte kullandığı, dsh projelerinizin kanban panosu: **Yapılacak**, **Yapılıyor**, **İncelemede** ve **Bitti** (ve **Bekleyenler**, aşağıya bakın). Soldan bir proje ya da **Tüm projeler** seçin. **Yeni görev** (ya da `n`) yeni bir kart açar: başlığını yazın ve `Enter` tuşuna basın. Bir kartı başka bir sütuna ya da iki kartın arasına sürükleyin. Bir karta tıklayınca kartın **Durum**, **Etiketler**, **İnsan** (ajanlar bunu atlar), açıklama (Markdown) ve yorum alanlarını görür ve değiştirirsiniz. `/` her projede arar, `h` yalnız insan görevlerini gösterir, dışa aktarma düğmesi panoyu Markdown ya da JSON olarak kaydeder. Ajanlar pano araçlarını alır: bir sohbetten "panodaki sonraki görevi al" isteyin; ajan en üstteki **Yapılacak** kartını **Yapılıyor** sütununa taşır, yaptığı işi yorum olarak yazar ve kartı **İncelemede** sütununa taşır; kartı **Bitti** sütununa siz taşırsınız. Açık görevi olan bir projede her sohbet bu kuralı kendiliğinden alır. Ayarlar → Composer Plus → **Görev panosu** satırında **Bekleyenler** sütununun anahtarı vardır: ajanlar bu sütundaki kartları size bırakır. | <a href="assets/features/taskBoard.webp"><img src="assets/features/taskBoard.webp" width="160" alt="Ekran görüntüsü: Görev panosu"></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. **Yeni görev** (ya da `n`) yalnız bir istem alır: `Enter` projede yeni bir sohbet başlatır, kart **Yapılacak** sütununda görünür, sohbete dsh ad verir ve sohbetin modeli 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. | <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> |
78
- | **Sohbet satırlarında Git dalı** | <a id="feature-sessionbranch"></a>Kenar çubuğundaki her sohbet satırı, küçük gri bir etiketle sohbetin proje klasörünün sohbetin son turunda bulunduğu git dalını gösterir (örneğin `main` ya da `feature/login`; ayrık HEAD durumunda dal olmadığından etiket görünmez). Böylece bir projenin farklı dallardaki iki sohbeti artık aynı görünmez ve bir sohbeti yanlış dalda sürdürmek üzereyken bunu hemen görürsünüz. Dalın tam adını görmek için etiketin üzerine gelin. Host tarafı dalı bir tur başlarken ve biterken okur (`git branch --show-current`, salt okunur). Bu özelliği yükledikten sonra hiç turu olmayan bir sohbette ya da Git deposu olmayan bir klasörde etiket görünmez. Sohbetin üstündeki proje satırının adı dalın adıyla aynıysa (örneğin bir “Sohbet başına dal” klasöründe), sohbet satırında dal etiketi görünmez; “Tek listede” görünümünde etiket yine görünür. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Ekran görüntüsü: Sohbet satırlarında Git dalı"></a> |
78
+ | **Sohbet satırlarında Git dalı** | <a id="feature-sessionbranch"></a>Kenar çubuğunun “Tek listede” görünümünde her sohbet satırı, küçük gri bir etiketle sohbetin proje klasörünün sohbetin son turunda bulunduğu git dalını gösterir (örneğin `main` ya da `feature/login`; ayrık HEAD durumunda dal olmadığından etiket görünmez). Böylece bir projenin farklı dallardaki iki sohbeti artık aynı görünmez ve bir sohbeti yanlış dalda sürdürmek üzereyken bunu hemen görürsünüz. Dalın tam adını görmek için etiketin üzerine gelin. Host tarafı dalı bir tur başlarken ve biterken okur (`git branch --show-current`, salt okunur). Bu özelliği yükledikten sonra hiç turu olmayan bir sohbette ya da Git deposu olmayan bir klasörde etiket görünmez. “Çalışma alanı” ve “Çalışma alanı ağacı” görünümlerinde sohbet zaten proje satırının altında olduğu için hiçbir sohbet satırında etiket görünmez. | <a href="assets/features/sessionBranch.webp"><img src="assets/features/sessionBranch.webp" width="160" alt="Ekran görüntüsü: Sohbet satırlarında Git dalı"></a> |
79
79
  | **Tümünü okundu işaretle** | <a id="feature-markprojectread"></a>Kenar çubuğunda bir projenin **…** düğmesine tıklayın → **Tümünü okundu işaretle**. O projedeki her sohbetin yeşil okunmamış noktası hemen kalkar. Diğer projelerin noktaları kalır. Projede okunmamış sohbet yoksa öğe soluk görünür (**Okunmamış sohbet yok**). | <a href="assets/features/markProjectRead.webp"><img src="assets/features/markProjectRead.webp" width="160" alt="Ekran görüntüsü: Tümünü okundu işaretle"></a> |
80
80
  | **Etkin projeler üstte** | <a id="feature-activeprojectsfirst"></a>Bir sohbet çalışmaya başladığında ya da sizi beklediğinde, projesi dsh’nin kendi satır animasyonuyla kenar çubuğunun en üstüne taşınır (projeyi oraya sürüklediğinizdeki hareketin aynısı). Tamamlanan projeler yerinde kalır. Onları her zamanki gibi istediğiniz yere sürükleyebilirsiniz. Taşımalar dsh’nin proje sırasına kaydedilir. Bu yüzden özelliği kapatmak mevcut sırayı korur. | <a href="assets/features/projectStatus.webp"><img src="assets/features/projectStatus.webp" width="160" alt="Ekran görüntüsü: Etkin projeler üstte"></a> |
81
81
  | **Yakın zamanda aktif proje filtresi** | <a id="feature-recentprojects"></a>Kenar çubuğu → görünüm seçenekleri (kaydırıcı simgesi) → **Son 2 saatte aktif olanlar**. Bu seçenek seçiliyken kenar çubuğu yalnızca son 2 saatte etkin bir sohbeti olan projeleri gösterir. Etkin sohbet şunlardan biridir: bu sürede güncellenen bir sohbet, çalışan ya da bekleyen bir sohbet, açık olan sohbet veya henüz açmadığınız tamamlanmış bir sohbet (dsh’nin yeşil “tamamlandı” noktası). Sonuncusu 2 saat geçtikten sonra da geçerlidir. Böyle bir sohbeti olmayan projeler gizlenir; yeni ve boş projeler de gizlenir. **Çalışma alanı ağacı** görünümünde, içindeki bir proje etkin olduğu sürece üst klasör görünür kalır ve son 2 saatte etkin olmayan sohbetler de gizlenir; böylece yalnızca yakın zamandaki sohbetler görünür. Tüm projeleri göstermek için seçeneği yeniden seçin. Seçim bu cihazda saklanır. | <a href="assets/features/recentProjects.webp"><img src="assets/features/recentProjects.webp" width="160" alt="Ekran görüntüsü: Yakın zamanda aktif proje filtresi"></a> |
@@ -85,7 +85,7 @@ Sonra dsh’yi yeniden başlatın. (CLI, masaüstü profiline yükleme yapamaz;
85
85
  | **Boştayken bekleyen sohbeti aç** | <a id="feature-idleswitch"></a>Bir sohbet soru sorduğunda, bir onay veya plan incelemesi beklediğinde (turuncu nokta) ya da henüz okumadığınız bir turu bitirdiğinde (yeşil nokta) ve siz dsh'yi 30 saniye kullanmadığınızda, dsh o sohbeti açar. Turuncu sohbetler yeşillerden önce açılır. Her grupta en uzun süredir bekleyen önce açılır. Sonraki, yine 30 saniye kullanılmadığında açılır. Bir tuş, tıklama, fare hareketi, kaydırma tekerleği veya dokunma 30 saniyeyi yeniden başlatır. Odaktaki alanda metin olması, seçili metin ya da açık bir menü veya iletişim kutusu da geçişi durdurur. Bekleyen bir sohbet ekrandayken hiçbir şey değişmez. Bekleyen bir sohbetten yanıt vermeden ayrılırsanız, sohbet bir sonraki 30 saniyelik boşlukta yeniden açılabilir. Yeşil bir sohbet açılınca noktası kalkar. Sonraki yeşil sohbet, siz dsh'yi yeniden kullandıktan sonra 30 saniye boşta kalınca açılır. Bu, dsh arka plandayken de çalışır ama dsh öne gelmez. | <a href="assets/features/idleSwitch.webp"><img src="assets/features/idleSwitch.webp" width="160" alt="Ekran görüntüsü: Boştayken bekleyen sohbeti aç"></a> |
86
86
  | **Uygulama dili** | <a id="feature-language"></a>Ayarlar → Composer Plus → **Uygulama dili**, dsh arayüzünün tamamını Türkçe, Español, Português (Brasil), Français, Deutsch, Русский, 日本語, 한국어, Bahasa Indonesia, Tiếng Việt veya हिन्दी diline geçirir (aşağıya bakın). | <a href="assets/features/language.webp"><img src="assets/features/language.webp" width="160" alt="Ekran görüntüsü: Uygulama dili"></a> |
87
87
  | **Mobil bağlantı (iPhone)** | <a id="feature-mobileconnect"></a>dsh’yi iPhone’unuzdan [Tether](tether/) uygulamasıyla, aynı Wi-Fi ağında ya da [Tailscale](https://tailscale.com) üzerinden kullanın. Özelliği **Ayarlar → Composer Plus** içinden açın (varsayılan olarak kapalıdır, çünkü bu Mac’te bir ağ portu açar). Sonra kenar çubuğunun sol altındaki **Mobil bağlantı** düğmesine tıklayın. QR kodunu iPhone’un Kamera uygulamasıyla (**Open in Tether** düğmesine dokunun) ya da Tether’deki **Scan code** ile tarayın. **Connect** düğmesine dokunun ve **Approve** düğmesine tıklayın. Önce Tether’i yükleyin: Tether yüklü değilse Kamera bu kodu açamaz. Telefon sohbetlerinizi gösterir, mesaj gönderir (fotoğraflarla birlikte: mesaj alanındaki **+** → Camera, Photos ya da Paste image), onayları ve soruları yanıtlar, modelleri ve ajanları değiştirir. İstediğiniz kadar Mac eşleştirebilirsiniz: uygulamanın sol üstündeki Mac adıyla Mac’ler arasında geçiş yaparsınız. **Mobil bağlantı** paneli eşleştirilmiş iPhone’ları son bağlantı zamanlarıyla listeler: **Remove** ile birinin bağlantısını hemen kesersiniz. “Tailscale only” yerel ağı reddeder (paylaşılan bir Wi-Fi için) ve erişim günlüğü kimin bağlanmayı denediğini gösterir. Tether’de “Settings → Privacy” uygulamayı Face ID ile kilitler. | <a href="assets/features/mobileConnect.webp"><img src="assets/features/mobileConnect.webp" width="160" alt="Ekran görüntüsü: Mobil bağlantı (iPhone)"></a> |
88
- | **Otomatik güncellemeler** | <a id="feature-autoupdate"></a>dsh açıldığında eklenti [en son GitHub sürümünü](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) denetler. Bu sürüm daha yeniyse ve npm’de de varsa, tam olarak o sürümü dsh’nin kendi eklenti yöneticisiyle yükler (Ayarlar → Eklentiler ile aynı yol) ve size bildirir. Yeni sürümü yüklemek için dsh’yi yeniden başlatın. **Ayarlar → Composer Plus → Composer Plus güncellemeleri** sürümü gösterir. **Güncellemeleri denetle** / **Şimdi güncelle** düğmeleri de buradadır. dsh yeni sürümle ilk kez açıldığında **Composer Plus N sürümündeki yenilikler** penceresi o sürümün sürüm notlarını bir kez gösterir (notlar aynı güncelleme denetiminden gelir, ek ağ çağrısı yapılmaz). **Kapat** düğmesi ya da `Esc` pencereyi kapatır. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Ekran görüntüsü: Otomatik güncellemeler"></a> |
88
+ | **Otomatik güncellemeler** | <a id="feature-autoupdate"></a>dsh açıldığında eklenti [en son GitHub sürümünü](https://github.com/furkancak1r/dsh-composer-plus/releases/latest) denetler. Bu sürüm daha yeniyse ve npm’de de varsa, tam olarak o sürümü dsh’nin kendi eklenti yöneticisiyle yükler (Ayarlar → Eklentiler ile aynı yol) ve size bildirir. Yeni sürümü yüklemek için dsh’yi yeniden başlatın. **Ayarlar → Composer Plus → Composer Plus güncellemeleri** sürümü gösterir. **Güncellemeleri denetle** / **Şimdi güncelle** düğmeleri de buradadır. dsh yeni sürümle ilk kez açıldığında **Composer Plus N sürümündeki yenilikler** penceresi o sürümün sürüm notlarını **Uygulama dili** ayarındaki dilde bir kez gösterir (notlar yeni sürümle birlikte gelir, ek ağ çağrısı yapılmaz; notu olmayan bir dilde İngilizce notlar görünür). **Kapat** düğmesi ya da `Esc` pencereyi kapatır. | <a href="assets/features/autoUpdate.webp"><img src="assets/features/autoUpdate.webp" width="160" alt="Ekran görüntüsü: Otomatik güncellemeler"></a> |
89
89
  | **Yedekleme** | <a id="feature-backup"></a>Ayarlar → Composer Plus → **Yedekleme** → **Şimdi yedekle**, dsh ana klasörünüzün tamamını (sohbetler, ayarlar, eklentiler, MCP, beceriler) sağlama toplamıyla birlikte `~/Desktop/dsh-backups` içindeki tek bir arşive yazar. Gizli bilgiler arşivde maskelenir: kimlik bilgisi dosyaları, anahtar dosyaları (`.pem`, `.key`) ve yml ayarlarındaki token, secret ve password değerleri yalnızca bu bilgisayarda, klasördeki `vault` içinde kalır. `cache/`, `dsh-runtimes/` ve `node_modules` arşive girmez (dsh bunları yeniden oluşturur). Listedeki her yedekte **Kontrol et** (yedeği baştan sona okur), **Başka bir bilgisayar için** (yeni bilgisayara kopyalanacak, kurtarma konsolunu da içeren bir klasör) ve **Sil** vardır. Aynı klasördeki dsh-backup arşivleri de listede görünür ve kullanılabilir. Geri yüklemek için dsh’den çıkın ve kurtarma konsolunu kullanın. | <a href="assets/features/backup.webp"><img src="assets/features/backup.webp" width="160" alt="Ekran görüntüsü: Yedekleme"></a> |
90
90
  | **Otomatik yedekleme** | <a id="feature-autobackup"></a>**Otomatik yedekleme** özelliğini açın (varsayılan olarak kapalıdır: her kopya, önbelleği hariç dsh ana klasörünüz kadar yer kaplar). Ne sıklıkla yedekleneceğini (**Sıklık**: 6 saatten 7 güne kadar, varsayılan 24 saat) ve kaç yedeğin saklanacağını (**Sakla**: 3 ile 14 arası, varsayılan 7) seçin. Sonraki yedekleme zamanı anahtarın altında görünür. Başarısız bir yedekleme de orada görünür ve 30 dakika sonra yeniden denenir. dsh ya da Composer Plus yeni bir sürümle açıldığında, açılıştan kısa süre sonra, yeni sürüm verilerinizi uzun süre kullanmadan önce bir anlık görüntü alınır (en yeni ikisi saklanır ve **Yükseltmeden önce** olarak işaretlenir). | <a href="assets/features/autoBackup.webp"><img src="assets/features/autoBackup.webp" width="160" alt="Ekran görüntüsü: Otomatik yedekleme"></a> |
91
91
  | **Oturum günlüğü kontrolü** | <a id="feature-sessiondoctor"></a>**Oturum günlüklerini kontrol et**, her sohbetin günlüğünü okur ve dsh’nin açamadığı günlükleri listeler (bozuk bir çerçeve, kesik bir kayıt, yanlış bir sıra numarası). Sonu yarım kalmış bir günlük listelenmez: dsh onu kendisi onarır. **Yedeklerden onar**, sağlam kopyası olan en yeni yedekteki kopyayı geri koyar ve hasarlı dosyayı yanında saklar (`.corrupt-<zaman>`). O yedekten sonra yazılan mesajlar kopyada yoktur. Bu dsh’de açık olan bir sohbet burada onarılmaz: dsh’den çıkın ve sohbeti kurtarma konsolunda onarın. | <a href="assets/features/sessionDoctor.webp"><img src="assets/features/sessionDoctor.webp" width="160" alt="Ekran görüntüsü: Oturum günlüğü kontrolü"></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 (görevlerinizin başlıkları, açıklamaları, etiketleri ve yorumları, proje klasörlerinin yolları ve kısa kimlikleri) `$DSH_HOME/storages/dsh-composer-plus/board.json` dosyasındadır (yalnız sahibinin okuyabildiği dosya); anahtar, yanındaki `board-switch.json` dosyasındadır. Hiçbir şey bilgisayarınızdan çıkmaz ve hiçbir proje klasörüne bir şey yazılmaz. Pano araçları, panoya yazdıklarınızı ajanlara verir. Bu yüzden bir ajan bir görevi okuduğunda görevin metni sohbetin modeline ulaşır. Bozuk bir pano dosyası `board.json.broken-<time>` olarak saklanır ve pano boş başlar.
172
+ - **Görev panosu:** pano, bu penceredeki dsh'nin kendi listelerinden dsh'nin kendi sohbetlerini gösterir; kendi sohbet verisi eklemez. Bir görev başlattığınızda Host tarafı, seçtiğiniz projede yeni bir sohbet oluşturur ve isteminizi ona ilk mesaj olarak, sanki oraya siz yazmışsınız gibi gönderir. Bu yüzden onaylar, sandbox ve sohbetin modeli her zamanki gibi uygulanır. Sonra istemi (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.
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.
@@ -191,10 +191,10 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
191
191
  - **Bir sohbet yeniden başlatmadan sonra devam etmedi:** dsh kapandığında Yeniden açılışta sürdür kapalıydı, o turu kendiniz durdurdunuz, tur bitmişti (tamamlandı ya da hata verdi), sohbet arşivlenmişti veya 20’den fazla sohbet çalışıyordu (en yeni 20 sohbet devam eder).
192
192
  - **Yeniden başlatmadan sonra kuyruk boş:** Kuyruğu dsh kapanırken kendisi boşaltır. Yeniden açılışta sürdür kuyruğu yalnız sürdürdüğü sohbette geri koyar; diğer sohbetlerde mesajları yeniden gönderin. Kapanıştan hemen önce kaldırdığınız bir mesaj geri gelebilir: Onu yeniden kaldırın.
193
193
  - **GitHub’da issue aç "gh could not open the issue" diyor:** bu mesaj, `gh` aracının kendi ilk satırıdır. Bir terminalde `gh auth status` komutunu çalıştırın ve `gh auth login` ile oturum açın. Sohbetin klasöründe bir GitHub uzak deposu (remote) olmalıdır (`git remote -v`). "not installed or not on the PATH of dsh", dsh’nin `gh` aracını bulamadığı anlamına gelir: aracı yükleyin ya da dsh’yi `gh` aracının çalıştığı bir terminalden başlatın.
194
- - **Bir sohbet satırında dal etiketi yok:** 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).
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.18.0`) ve yukarıdaki kurulum notuna bakın.
197
+ - **Bir yayından hemen sonra yükleme başarısız oluyor:** sürümü ekleyin (`dsh-composer-plus@1.19.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.
@@ -214,6 +214,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
214
214
  - **Sohbeti sil** için dsh’nin arşivleme özelliği gerekir (dsh 0.2.0 ve sonrası). 15 sn içinde durmayan ya da başka bir dsh’nin tuttuğu bir sohbet (veya alt ajan sohbetlerinden biri) arşivlenmiş olarak kalır ve hiçbir şey taşınmaz. macOS dışındaki sistemlerde çöp klasörü, sohbet geçmişiyle aynı diskte olmalıdır. Sildiğiniz açık bir sohbet, dsh yeniden başlayana kadar dsh’nin belleğinde arşivlenmiş ve gizli olarak kalır. Çöp Sepeti’ni kendiniz boşaltın; dsh bunu yapmaz.
215
215
  - dsh’nin kuyruğunda `move` işlemi yoktur. Bu yüzden eklentinin Host tarafı, sıradaki mesajın kendisini dsh’nin kuyruğunda taşır (tek bir değişiklik, aynı mesaj). Görsel veya dosya içeren mesajlar da taşınır. Yalnızca kendi mesajlarınız taşınır: kuyruktaki bir hedef turu veya bir soruya verilen yanıt yerinde kalır. Siz sürüklerken bir mesajın gönderimi başlarsa hiçbir şey taşınmaz ve bunu bildiren bir uyarı görünür.
216
216
  - dsh 0.2.1, yeni sürüm hiçbir dsh ayarını değiştirmiyorsa güncellemeyi hemen yükler. Aksi durumda ve dsh 0.2.0’da güncellemeyi yüklemek için dsh’yi yeniden başlatın. Eklenti dsh’yi sizin yerinize hiçbir zaman yeniden başlatmaz. dsh’nin eklenti yöneticisi olmayan web/CLI profilleri yalnızca yeni sürümü bildirir.
217
+ - **Composer Plus N sürümündeki yenilikler** penceresi notları **Uygulama dili** ayarındaki dilde gösterir. Başka bir bölgeye ait bir arayüz dili, ana dilinin notlarını alır (`en-GB` İngilizce notları, `zh-TW` ise `zh` Çince notlarını gösterir). Notu olmayan bir dil (başka bir dil paketinin eklediği bir dil ya da `pt-BR` olmayan `pt-PT`) İngilizce notları gösterir. Notlar yeni sürümle birlikte gelir. Çalışan kopyada okunabilir bir not dosyası (`release-notes.json`) yoksa pencere GitHub’daki İngilizce notları gösterir.
217
218
  - **Sohbet boyunca izin**, süre sınırını iznin verildiği andan başlayarak sayar. Yeni bir süre sınırı, geçerli izinlere hemen uygulanır. Bu yüzden daha kısa bir süre sınırı bu izinleri hemen bitirebilir. 1.12 ve önceki sürümlerden kalan izinlerin bir süresi yoktur: güncellemeden sonra ajan bu araçlar için bir kez daha sorar.
218
219
  - **Mesaj alanında odağı koru**, odağı yalnızca bir `/` komutundan veya beceriden sonra geri verir. dsh komutu çözümlerken mesaj alanı birkaç milisaniye salt okunur kalır. Bu sürede basılan tuşlar kaybolur. dsh’nin `/` menüsü hâlâ açıksa `Enter` vurgulanan satırı seçer ve mesajı göndermez.
219
220
  - **Soru kartını pencereye sığdır** yalnız dsh'nin soru kartını değiştirir, plan inceleme kartını değiştirmez. Kartı dsh'nin işaretlemesiyle bulur (`data-question-key`, `data-question-scroll`). Bir dsh güncellemesi bu işaretlemeyi değiştirirse kart dsh'nin çizdiği gibi görünür. Kartın yüksekliği sohbeti değil pencereyi izler: dar bir yan paneldeki sohbette uzun bir kart sohbetin üstüne taşabilir.
@@ -227,7 +228,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
227
228
  - **Bu sohbet** yalnızca dsh’nin dosya araçlarının (`write`, `edit`, `str_replace_editor`) yazdığı dosyaları sayar. Bir komutun (`bash`) değiştirdiği dosyalar bu görünümde yoktur. Bu dosyalar **Commit edilmemiş** altında görünür. Sohbetin Tur geri alma anlık görüntüsü yoksa (Tur geri alma kapalı, dsh-rewind-plugin yüklü ya da sohbet eklentiden daha eski), görünüm son commit ile karşılaştırır ve bunu belirtir. Tur geri alma bir sohbetin en yeni 50 anlık görüntüsünü saklar. Daha uzun bir sohbette görünüm, saklanan en eski anlık görüntüyle karşılaştırır, hangi mesajdan başladığını söyler ve daha önceki değişiklikleri saymaz. **Boşluk değişikliklerini gizle**, `git diff -w` ile aynıdır: yalnızca satır içindeki boşlukları değişen bir satır da gizlenir.
228
229
  - **GitHub’da issue aç** için dsh’nin PATH’inde GitHub CLI (`gh`) ve sohbetin klasöründe bir GitHub uzak deposu (remote) gerekir. En çok 60 sn çalışır. `gh` daha uzun sürerse issue GitHub’da açılmış olabilir, ama bağlantısı listede görünmez. Yeniden tıklamadan önce GitHub’a bakın: liste bağlantıyı yalnızca tamamlanan bir çalıştırmadan okur, bu yüzden yeni bir tıklama ikinci bir issue açabilir. Birden çok GitHub uzak deposu olan bir klasör, `gh` aracının kendi varsayılanını kullanır (`gh repo set-default`).
229
230
  - **Bu dosyayı değiştiren sohbetler**, **Bu sohbet** gibi yalnızca dsh’nin dosya araçlarını (`write`, `edit`, `str_replace_editor`) tanır: bir komutun (`bash`) yaptığı değişiklik listelenmez. Deponun en yeni 300 sohbetini okur (oluşturulma zamanına göre) ve daha fazlası varsa bunu belirtir. En çok 100 satır gösterir. Yeniden adlandırılan bir dosya, aracın yazdığı adla listelenir. Klasörü deponun dışında olan bir sohbet (aynı dosyalara başka bir yoldan ulaşsa bile) sayılmaz. dsh açıldıktan sonraki ilk açılış, deponun tüm sohbet günlüklerini okur (275 sohbet için yaklaşık 4 sn). Sonraki açılışlar yalnızca o zamandan beri değişen sohbetleri okur.
230
- - **Sohbet satırlarında Git dalı**, şu anki dalı değil, sohbetin son turu başladığında ya da bittiğinde sohbetin klasörünün bulunduğu dalı gösterir: bir tur dışında yapılan dal değişikliği bir sonraki turdan sonra görünür. Bu sürümden önceki sohbetlerde bir sonraki turlarına kadar etiket görünmez. Etiket, dsh’nin sohbet satırı yapısına yerleşir (dsh’de orada bir yuva yoktur). Bir dsh güncellemesi bu yapıyı değiştirirse etiket görünmez. Sohbetin üstündeki proje satırının adı dalın adıyla aynıysa (örneğin bir “Sohbet başına dal” klasöründe), sohbet satırında dal etiketi görünmez; “Tek listede” görünümünde etiket yine görünür.
231
+ - **Sohbet satırlarında Git dalı**, şu anki dalı değil, sohbetin son turu başladığında ya da bittiğinde sohbetin klasörünün bulunduğu dalı gösterir: bir tur dışında yapılan dal değişikliği bir sonraki turdan sonra görünür. Bu sürümden önceki sohbetlerde bir sonraki turlarına kadar etiket görünmez. Etiket, dsh’nin sohbet satırı yapısına yerleşir (dsh’de orada bir yuva yoktur). Bir dsh güncellemesi bu yapıyı değiştirirse etiket görünmez. Etiket yalnızca “Tek listede” görünümünde görünür.
231
232
  - **Sohbet başına dal** plan modunda: dsh, `/plan <mesaj>` metnini mesaj olarak değil, komut olarak gönderir. Bu yüzden Composer Plus, komutun gönderilmesini dsh’nin mesaj alanında yakalar (herkese açık API değildir). Bir dsh güncellemesi bunu değiştirirse **Yeni dal** seçiliyken `/plan <mesaj>`, açık Yeni sohbet ekranında dsh’nin kendi komutu olarak çalışır. Host yeni sohbette plan modunu açamazsa dal klasörü kalır ve mesaj gönderilmez. Böylece yeni sohbet, varsayılan modda dosyaları değiştirmez.
232
233
  - **Sohbet başına dal**: bir sohbetin dal klasörü (`<project>/.worktrees/<name>`) silinince (örneğin sohbetin kendi ajanı worktree'yi kaldırıp dalı silince) sohbetin bir sonraki adımı sohbeti bu klasörden çıkarır. Dal klasörünün projesi kenar çubuğundan kalkar; sohbet Gruplanmamış altında görünür ve açık kalır. dsh 0.2.1 ve sonrasında sohbet ana proje klasöründe devam eder ve model yeni klasörü bildiren bir not alır. dsh 0.2.0'da sohbet silinen klasörde kalır: orada çalışan bir komut, yeni bir sohbet başlatana kadar hata verir. Hiçbir sohbetin kullanmadığı, silinmiş bir dalın projesi de kenar çubuğundan kalkar: Composer Plus dal klasörlerini açılışta ve 30 saniyede bir denetler. Bunun için kenar çubuğu filtresi gerekmez. Bir sohbet taşınırken aynı depodaki **Yeni dal** "yeniden deneyin" yanıtını verir. Anahtar kapalıyken dsh'nin kendi hatası yine görünür ("working-directory: directory does not exist").
233
234
  - **Çalışma alanı ağacında dallar** tıklama olmadan git’e yazar: bir sohbeti taşırken proje klasörünü önceki dalına geri alır (`git switch`) ve bir worktree ekler (`git worktree add`). Hiçbir dalı, worktree’yi veya dosyayı silmez. dsh bir sohbetin klasörünü değiştiremez. Bu yüzden taşınan sohbet bir kopyadır (dsh’nin kendi çatallaması, yeni bir kimlikle) ve eski sohbet arşivlenir. Kopya, durdurulan işe devam eder. Dal ortaya çıktığında çalışan araç çağrısı reddedilerek biter ve ajan onu yeni klasörde yeniden çalıştırır. Eski sohbetin hedefi kopyaya geçmez. Yalnızca klasörü deponun ana klasörü olan sohbet taşınır. Bu da yalnızca o turda oluşturup geçtiği dal için olur (`git switch -c`, `git checkout -b`). Yalnızca `git branch` ile yapılan dal, commit edilmemiş değişikliği olan klasör, bağlı bir worktree veya alt klasör hiçbir şeyi taşımaz. Ağaçta yalnızca doğrudan `<project>/.worktrees/` içinde olan ve dalı olan worktree’ler görünür. Ayrık (detached) bir worktree veya başka yerdeki bir worktree görünmez. Kopya, yalnızca eski sohbet açık olan sohbetse kendiliğinden açılır (eklenti bunu dsh’nin kenar çubuğu satırından okur). Aksi halde kopya dal projesindedir.
@@ -248,7 +249,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
248
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.
249
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.
250
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.
251
- - **Görev panosu** yalnız dsh'nin projelerini bilir: proje dışındaki bir sohbette **Tüm projeler** görünür ve sohbet başına dal klasörü (`<project>/.worktrees/<name>`) kendi projesinden sayılır. Proje kimlikleri (`acme#12`) klasör adından gelir ve projeyi dsh'de yeniden adlandırdığınızda değişmez. "Panoyu güncel tut" kuralı bir sohbete yalnız projesinin açık görevleri varsa eklenir; kuralı almış bir sohbet onu korur. Ajanlara **Bitti**, **Bekleyenler** ve insan görevlerini size bırakmaları söylenir, ama araçlar bunu reddetmez: bir ajan böyle bir kartı yine de taşıyabilir. Özellik açıkken pano araçları her sohbetin araç listesindedir (istek başına yaklaşık 1.000 token); panoyu kullanmıyorsanız özelliği kapatın. Sayfa görünürken panoyu 2 saniyede bir okur; bir ajanın değişikliği bu süre içinde görünür. Bir ajan aynı alanı değiştirirken düzenlediğiniz metin kaydedilmez: panel yeni metni ve nedenini gösterir. Görsel, bilgisayarlar arasında git eşitlemesi ve ağ üzerinden paylaşım yoktur (Kanzo'da bunlar vardır). 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.
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). Etiketler, başlatılan her görev için 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 istemin ilk satırını gösterir. dsh'nin bildiği bir `/` komutuyla (`/plan`, `/goal`) başlayan istem o komut olarak çalışır. **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.
252
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.
253
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.
254
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.
@@ -285,7 +286,7 @@ dsh `0.2.0-rc.2` (masaüstü ve web) ve `0.2.1-rc.2` (web) üzerinde test edildi
285
286
 
286
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.
287
288
 
288
- **Ajanlarım ve ben, Kanzo'daki gibi tek bir görev panosunu paylaşabilir miyiz?** Evet, **Görev panosu** ile (varsayılan olarak açık): sol kenar çubuğundan açın ve **Yeni görev** ile görev ekleyin. Bir sohbette ajandan "panodaki sonraki görevi al" isteyin: ajan kartı **Yapılıyor** sütununa taşır, yaptığı işi yorum olarak yazar ve kartı **İncelemede** sütununa taşır. Bir görevi kendinize ayırmak için onu **İnsan** olarak işaretleyin.
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** yalnız bir istem alır ve onunla yeni bir sohbet başlatır; bir sohbeti açmadan yanıtlamak için turuncu karttaki **Yanıtla** düğmesine tıklayın.
289
290
 
290
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.
291
292
 
@@ -407,7 +408,7 @@ PLAYWRIGHT=/path/to/playwright node test/browser-continue-queue.mjs /path/to/dsh
407
408
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-stop-send.mjs /path/to/dsh/lib/bin.js
408
409
  # Edit queued message in place with images and files (slow fake model) + its thumbnail
409
410
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-queue-edit.mjs /path/to/dsh/lib/bin.js
410
- # Task board: the page, the agent tools (fake model), drag and drop, search, the switch
411
+ # Task board: a prompt starts a chat, AI tags, live columns, Answer on the board, Hide finished, the switch
411
412
  SHOT=1 PLAYWRIGHT=/path/to/playwright node test/browser-task-board.mjs /path/to/dsh/lib/bin.js
412
413
  ```
413
414