84 lines
5.7 KiB
Markdown
84 lines
5.7 KiB
Markdown
# dsh (DeepSeek Harness) — сборка archeon
|
|
|
|
Самодостаточный репозиторий: Docker-образ [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)
|
|
(`@deepseek-ai/dsh`) + **обновление кода dsh прямо из работающего контейнера**
|
|
(как плагины, без пересборки) + **path/user-агностичный docker-compose** как
|
|
пример для разработчиков.
|
|
|
|
## Что внутри
|
|
|
|
| Путь | Что это |
|
|
|---|---|
|
|
| `upstream/` | вендоренный исходник Docker-образа ([yjrszcq/dsh-docker](https://github.com/yjrszcq/dsh-docker), MIT; см. `upstream/PROVENANCE.md`) |
|
|
| `docker-compose.yml` | path/user-агностичный стенд: dsh + вложенный dind + воркспейс |
|
|
| `.env.example` | все настройки в одном месте (пути, порты, ключи) |
|
|
| `scripts/update-dsh.sh` | **обновление dsh изнутри контейнера** до npm latest (пробация + автокат) |
|
|
| `scripts/update-plugins.sh` | установка/обновление плагинов профиля web + фикс code-server |
|
|
| `scripts/build-image.sh` | пересборка образа под конкретную версию dsh |
|
|
| `docs/UPDATE-MECHANISM.md` | как работает обновление изнутри (анатомия платформы) |
|
|
|
|
## Быстрый старт
|
|
|
|
```sh
|
|
cp .env.example .env # вписать DEEPSEEK_API_KEY
|
|
docker compose -p dsh up -d
|
|
docker compose -p dsh exec dsh dsh-platform access generate-key # одноразовый ключ админа
|
|
xdg-open http://127.0.0.1:3080
|
|
```
|
|
|
|
Все пути по умолчанию относительные: данные — `./data/`, проекты — `./workspace/`
|
|
(рядом с compose-файлом). Перенос на другой хост/пользователя: `cp -r` всего
|
|
каталога (или переопределите `DSH_DATA_DIR`/`DSH_WORKSPACE_DIR` в `.env`).
|
|
Контейнер работает под uid 1000; если ваш uid другой:
|
|
`docker compose -p dsh --profile fix-perms run --rm fixperms`.
|
|
|
|
## Обновление dsh «как плагины» (главная фича)
|
|
|
|
```sh
|
|
scripts/update-dsh.sh # до npm latest: download → probation → commit
|
|
scripts/update-dsh.sh check # только посмотреть installed / available
|
|
```
|
|
|
|
- Ставится в персистентный volume `/data/platform` → переживает `down/up` и
|
|
пересоздание контейнера.
|
|
- **Важно**: механизм обновления живёт в stage0/management из **образа**, поэтому
|
|
работает только у живого контейнера (обновлять «выключенный» контейнер нельзя —
|
|
сначала `up -d`). При переходе на существенно новый образ заново проверьте
|
|
патчи окружения (`upstream/container/environment/resources/patches/`) против
|
|
новой версии dsh: образ собирается с dev-патчами, которые якорятся на
|
|
внутренности `bin.js`/`profile-boot` (в upstream пин версий стоит именно
|
|
поэтому). Наши патчи толерантны к 0.1.x и 0.2.x — проверены на обеих ветках.
|
|
- Experimental-канал платформы качает **официальный tarball с npm** (canonical
|
|
URL, sha256, без редиректов) и активирует новую версию с **пробацией**
|
|
(`DSH_EXPERIMENTAL_PROBATION_SECONDS`, по умолчанию 120 c) и **автооткатом**
|
|
при провале здоровья.
|
|
- Тот же механизм в UI: Management Console `/_dsh_platform/console/`
|
|
(Update → channel experimental → Update).
|
|
- Плагины профиля web живут в `/data/dsh` и обновляются отдельно
|
|
(`scripts/update-plugins.sh`).
|
|
|
|
### Пересборка образа под конкретную версию
|
|
|
|
Community-пин `latestSupportedDsh` (в upstream-исходнике = `0.1.5-rc.2`) в
|
|
dev-режиме сборки не проверяется — версию можно задать напрямую:
|
|
|
|
```sh
|
|
scripts/build-image.sh 0.2.0-rc.2 --push # тегирует <repo>:<версия> + :latest и пушит
|
|
```
|
|
|
|
## Почему не официальный образ
|
|
|
|
Официального образа у DeepSeek Harness нет; community-образ `szcq/deepseek-harness`
|
|
застрял на 0.1.5-rc.2 (пин автора). Этот репозиторий собирает свой образ из
|
|
того же исходника с актуальной версией и держит механизм обновления изнутри,
|
|
не дожидаясь пересборки.
|
|
|
|
## Изоляция песочниц агента
|
|
|
|
Контейнеры, которые запускает агент dsh, живут во **вложенном dind**
|
|
(`DOCKER_HOST=tcp://dind:2375`) — отдельный демон, отдельные образы/тома
|
|
(`./data/dind/`). Каталог проектов смонтирован в dind под тем же путём
|
|
`/workspace`, поэтому агент может бинд-маунтить свои песочницы на файлы
|
|
воркспейса. Порт web UI по умолчанию слушает только `127.0.0.1` — для доступа
|
|
из LAN настройте `DSH_LISTEN_ADDRESS` + `DSH_TRUSTED_HOSTS`.
|