dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DeepSeek Harness 的 Telegram 遥控器:在手机上接续正在运行的 Web 会话并回答问题,界面为俄语。hi-wenw/dsh-telegram-channel 的俄语分支(MIT)。
**Русский клон hi-wenw/dsh-telegram-channel
с доработками.** Взята база0.3.5(коммит7af6cef) и добавлено: полностью
русский интерфейс, скрытие архивных сессий в меню выбора, наименование сессии на
кнопке, чтение каталога через хост-сервисы DSH 0.2 (там, где оригинал ждал
удалённый apiProxy), и русская карточка бота. Репозиторий:. Что именно изменено и как
синхронизироваться с оригиналом — в UPSTREAM.md.
Имя пакета и имя репозитория — `dsh-telegram-channel-ru` (суффикс -ruотделяет русское ответвление от оригинала в общем пространстве имён; на npm
пакет с 0.8.1). Плагин в профиле DSH тоже называется dsh-telegram-channel-ru.Старые адреса danilinao/dsh-telegram-channel продолжают работать — GitHubредиректит их на новое имя.
Telegram-пульт для DeepSeek Harness: телефон подключается к уже идущей сессии на компьютере и продолжает её — один диалог, две стороны. Компьютер остаётся источником истины: плагин не запускает второй агент и не дублирует контекст, а работает с теми же сессиями, что открыты в Web. Плагин живёт внутри процесса dsh web и подключается в профиль как link:.
список пользователей, доступ и формат сообщений — как у cost-meter и plugin-market, без перезапуска dsh и без ручной правки YAML. Та же форма открывается и с карточки плагина (Plugins → dsh-telegram-channel-ru). Несколько человек в белом списке, добавление по @username и по id.
/sessions → рабочая область → сессия → привязка.Дальше всё, что вы пишете в Telegram, попадает в эту же сессию; ответы и работа инструментов видны и на компьютере.
/status, /compact,уведомления и карточка бота — по-русски.
оба написания id (session- и `), проекционные флаги архива и список archivedSessionIds`. Области, где не осталось ничего живого, из меню тоже исчезают.
N. ▶/▷; имя берётся из заголовкасессии, иначе из первого сообщения, иначе рабочая область · дата. ▶ — сессия в памяти, ▷ — поднимется при привязке.
альбомы склеиваются в одно сообщение) и текстовые документы — txt, md, json, yaml, csv, код (.gd, .ts, .py, …), до 128 КБ: файл приходит в сессию текстом вместе с подписью. Бинарные файлы — через Web.
вариант?» или просит разрешение на инструмент, ответить можно из Telegram: варианты приходят inline-кнопками, есть «✏️ Свой ответ» для свободного текста и «✅ Готово» для мультивыбора; разрешение — кнопками «✅ Разрешить» / «⛔ Отклонить». Буквы (A, B) и обычный текст тоже принимаются; ответ из Web закрывает канал в TG.
/model, /status, /compact, /mission,/stop, /new — из телефона.
включая пустые; в пустой области кнопка создаёт сессию. /newproject (или кнопка «➕ Новый проект») добавляет в реестр новую папку, /new создаёт диалог в текущей области, 🗄 у сессии или /archive убирают её в архив (работа останавливается, из меню и Web сессия исчезает).
приходят с полными аргументами, а рассуждения модели — отдельным блоком «🧠 Рассуждения» перед каждым ответом. И то и другое свёрнуто в «раскрывающуюся цитату» Telegram (`) и разворачивается одним тапом; /reasoning off` отключает рассуждения для конкретного чата (по умолчанию они включены).
сообщения диалога; кнопка «⬅ Раньше» листает глубже, /history [seq] — тоже вручную. В истории видны реплики пользователя, ответы ассистента и рассуждения модели («🧠 Рассуждения» спойлером), а вызовы инструментов — спойлером «🛠 имя» и их можно убрать: /history tools off или кнопка «🛠 Вызовы» под страницей (запоминается для чата, по умолчанию они показаны).
кнопка «🗂 Архивные (N)» — она открывает архив этой области с кнопкой «↩» (вернуть) и «← К сессиям». Глобальный архив тоже доступен: /archived.
берётся из её журнала на диске — первое сообщение пользователя. Поэтому в списке видно «Проект: … Synthriders — Beatmap Studio…», а не один и тот же «Synthriders» на все одиннадцать строк; рядом дата и хвост id. Пустые сессии (в журнале нет ни одного сообщения) не показываются — внизу приписка «Скрыто пустых сессий: N».
падение с текстом ошибки и подсказкой (кончились токены/квота, лимит запросов, модель недоступна, переполнен контекст, сеть, ключ), достижение лимита выходных токенов, аварийный обрыв, и вопрос агента («❓ Сессия задала вопрос и ждёт ответа») — с названием сессии и проекта. По умолчанию бот следит за всеми сессиями, включая запущенные с компьютера; /notify bound сужает до привязанной, /notify on | errors | off задаёт набор событий. Под уведомлением — кнопки: 🔁 Повторить после ошибки, ▶ Продолжить после лимита токенов, 📜 Последний ответ и 📖 История.
Из npm — dsh-telegram-channel-ru:
dsh plugin --profile web add dsh-telegram-channel-ru
systemctl restart dsh # плагин монтируется при стартеИз репозитория (разработка) — плагин подключается как link: и исполняется прямо из папки проекта:
git clone https://github.com/danilinao/dsh-telegram-channel-ru
dsh plugin --profile web add link:$PWD/dsh-telegram-channel
systemctl restart dshВ репозитории лежит уже собранный lib/, так что клон работает без сборки. Если правите код — соберите заново (src/ → lib/): см. BUILD.md (npm install && npm run check).
Конфигурация — строка - id: dsh-telegram-channel-ru в ~/.dsh/profiles/web/cordis.patch.yml (именно id-оверрайд, а не insert: id уже вставлен бандлом плагина):
- id: dsh-telegram-channel-ru
name: dsh-telegram-channel-ru
config:
token: "<токен от @BotFather>"
allowedUserIds: [<ваш числовой id из @userinfobot>]Переезд с 0.8.0 на 0.8.1. Пакет переименован в dsh-telegram-channel-ru,и вместе с ним изменился id плагина в профиле: старая строка- id: dsh-telegram-channel больше не совпадает с именем пакета, а значитконфиг (токен и белый список) не применится. Порядок: добавить в
cordis.patch.ymlстроку с новымid(иname: dsh-telegram-channel-ru) с тем
же config, затем удалить старую строку и сделатьdsh plugin --profile web remove dsh-telegram-channel; перезапуск — после этого.Ключ · Смысл token / DSH_TELEGRAM_TOKEN · токен бота allowedUserIds / DSH_TELEGRAM_ALLOWED_USER_IDS · белый список; пусто — бот не отвечает никому allowAllUsers · true только для отладки maxMessageLength · по умолчанию 4096 pollingTimeoutSec · по умолчанию 30 rendering · html (по умолчанию, любой клиент) или rich users · список людей из GUI: id, подпись (name), enabled; главнее плоского списка
Всё, что раньше правили руками в cordis.patch.yml, теперь есть в GUI — Настройки → Telegram (вкладка рядом с «Расходами» и «Plugins»): форма регистрируется в слот settings.section под id плагина, а заголовок вкладки берётся из локали (ru/en) и следует за активным языком. Та же самая форма по-прежнему открывается на карточке плагина (Plugins → dsh-telegram-channel-ru): обе стороны — один компонент и один configForms- скоуп, поэтому настройки не могут разойтись.
(.role('secret')), поэтому страница показывает лишь «сохранён» и строку статуса «Бот подключён: @имя». Пустое поле = «оставить как есть», кнопка «Проверить» заново спрашивает Telegram (getMe).
Добавление по числовому id или по @username (бот резолвит его через getChat), плюс чипсы «недавно писали боту» — один клик на того, кто уже постучался. Снятая галочка оставляет человека в списке, но бот не отвечает.
html / rich.Сохранение — одна атомарная запись в профиль: страница отправляет только изменённые поля, поэтому токен не переписывается заново при каждой правке. Перезапуск `dsh` не нужен: плагин слушает loader/volatile-update, останавливает старый мост и поднимает новый с новыми значениями; смещение getUpdates при этом сохраняется, так что уже обработанные сообщения не обрабатываются дважды.
То же самое в cordis.patch.yml (страница пишет именно это):
- id: dsh-telegram-channel-ru
name: dsh-telegram-channel-ru
config:
token: "<токен>"
users:
- id: 333041652
name: Алексей
enabled: true
- id: 777000888
enabled: false
allowAllUsers: false
rendering: htmlallowedUserIds (плоский список из 0.8.x) продолжает работать — он читается, пока users пуст. Первое сохранение из GUI пишет users и убирает allowedUserIds, чтобы не осталось второго, невидимого белого списка.
Важно про несколько человек. Бот не разделяет доступ к сессиям: каждый из
списка видит все рабочие области и может привязаться к любой сессии — ровно
так, как это делал единственный владелец. Если это не подходит, добавляйте
людей точечно и держите allowAllUsers выключенным.Страница берёт с хоста только несекретные сведения (getMe, имена из getChat) через два маршрута под /plugins/dsh-telegram-channel-ru/settings/ (info и resolve); токен по ним не ходит. Нужен DSH 0.2.x: в 0.1.x у Plugins нет форм, и раздел просто не появится.
Команда · Что делает /sessions · рабочие области → сессии → привязка (архив и пустые скрыты) /last · последний вопрос-ответ привязанной сессии /model · сменить модель (действует со следующего хода) /status · модель, глубина размышлений, контекст, TTFT, токены /compact · сжать историю сессии (когда она свободна) /rich · on — rich-рендер, off — HTML (для этого чата) /reasoning · on/off — присылать рассуждения модели спойлером (по умолчанию on, запоминается для чата) /stop · прервать текущий ход /mission · список задач и прогресс /new · новый диалог в текущей области и привязка /newproject [\ · Название] · добавить папку как проект (рабочую область) /archive · убрать привязанную сессию в архив /archived · список архива, кнопка «↩» возвращает сессию /history [seq] · предыдущие сообщения сессии: вопросы, ответы и рассуждения (листается «⬅ Раньше») /history tools on\ · off · показывать вызовы инструментов в истории (по умолчанию on, запоминается для чата) /retry · повторить последний отправленный запрос (после ошибки) /find · найти сессии по названию или папке и привязаться кнопкой /notify on\ · errors\ · off · какие события присылать (всё / только ошибки / ничего) /notify every\ · bound · за какими сессиями следить (всеми / только привязанной) /projects · список проектов и сессий (то же, что /sessions) /unbind · отвязать телефон (сессия на компьютере остаётся) /cancel · закрыть ответы/подтверждения в Telegram /help · помощь
Плагин работает с DSH 0.2.x: каталог сессий, список моделей и создание сессий читаются напрямую из хост-сервисов (sessionController.list, workspaceRegistry, sessionController.modelCatalog / selectModel / create), потому что сервис apiProxy, на который опирался оригинал 0.3.5, в 0.2 удалён. Старый путь через apiProxy сохранён и используется, если сервис доступен. Отправка изображений тоже портирована: на 0.2 вложение уходит через sessionController.prompt. Проекты и архив — через workspaceRegistry.create / archiveSession.
Начиная с 0.8.0 peer-зависимости @deepseek-ai/dsh* рассчитаны на рантайм 0.2.1-alpha.2 (^0.2.1-alpha.2), поэтому исключение allow-version не нужно. Если хост обновится до несовместимой версии, DSH откажется грузить плагин — тогда либо правятся диапазоны, либо выдаётся исключение (см. BUILD.md).