dsh (DeepSeek Harness) — сборка archeon

Самодостаточный репозиторий: Docker-образ DeepSeek Harness (@deepseek-ai/dsh) + обновление кода dsh прямо из работающего контейнера (как плагины, без пересборки) + path/user-агностичный docker-compose как пример для разработчиков.

Что внутри

Путь Что это
upstream/ вендоренный исходник Docker-образа (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 как работает обновление изнутри (анатомия платформы)

Быстрый старт

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 «как плагины» (главная фича)

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-режиме сборки не проверяется — версию можно задать напрямую:

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.

S
Description
DeepSeek Harness (dsh) — docker image archeon: in-container updates + path-agnostic compose (зеркало до создания archeon/dsh)
Readme MIT
919 KiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 90.6%
CSS 4.5%
Shell 2.4%
HTML 2.2%
Dockerfile 0.2%
Other 0.1%