Skip to content

Releases: danilinao/dsh-telegram-channel-ru

v0.9.0 — настройки в Web-интерфейсе, несколько пользователей

Choose a tag to compare

@danilinao danilinao released this 22 Oct 06:06

Настройки переехали в Web-интерфейс, и пользователей стало можно несколько.

Добавлено

  • Страница настроек в GUI. Plugins → dsh-telegram-channel-ru: токен,
    список пользователей, доступ, формат сообщений, лимиты. Браузерная половина
    (client/client.js, слот plugins.bundle.config) собирает правки в одну
    атомарную запись профиля и пишет только изменённые поля.
  • Живое применение без рестарта dsh. Все поля Config помечены
    .volatile(); плагин слушает loader/volatile-update, останавливает старый
    мост (long-poll теперь прерывается по AbortSignal, а не ждёт таймаута) и
    поднимает новый с новыми значениями. Смещение getUpdates переносится,
    поэтому уже обработанные сообщения не обрабатываются дважды; при смене
    токена (другой бот) смещение сбрасывается.
  • Несколько пользователей. users: [{ id, name?, enabled? }] — список из
    GUI, у каждого своя галочка «Отвечать». Плоский allowedUserIds из 0.8.x
    остаётся фолбэком, пока users пуст; первое сохранение из GUI переносит
    список и убирает старый ключ, чтобы не было второго, невидимого белого списка.
  • Добавление по @username. Страница зовёт /settings/resolve, хост
    резолвит getChat; рядом — чипсы «недавно писали боту» из запомненных имён.
  • Токен как секрет. .role('secret') — DSH вырезает токен из документа
    настроек, страница показывает «сохранён» и живой статус «Бот подключён:
    @имя» (через getMe), а не сам токен.
  • Два хост-маршрута /plugins/dsh-telegram-channel-ru/settings/{info,resolve}
    (только несекретные сведения; no-store, same-origin проверка на POST).
  • Имена людей в состоянии бота и сохранение getUpdates-смещения в
    telegram-channel-bindings.json.
  • Браузерная проверка страницы — npm run test:browser: настоящий React и
    headless Chrome, 19 проверок (рендер, статус, добавление по @username,
    пакетная запись, снятие галочки, удаление, предупреждение «разрешить всем»).
    Не входит в npm run check (нужен Chrome).

Изменено

  • npm test — 99 тестов (было 62): конфиг/белый список, маршруты настроек,
    несколько пользователей, проводка браузерной половины.
  • apply разложен на apply + applyWith(ctx, config, options): клиент
    Telegram внедряется в тестах, сеть в тестах не нужна.

Известные ограничения

  • Бот по-прежнему не разделяет доступ к сессиям между пользователями: каждый из
    списка видит все рабочие области и может привязаться к любой сессии.
  • Страница настроек требует DSH 0.2.x (в 0.1.x у Plugins нет форм).

npm: dsh-telegram-channel-ru@0.9.0 (опубликован из CI, provenance в sigstore).

Как обновить

dsh plugin --profile web add dsh-telegram-channel-ru@0.9.0
systemctl restart dsh   # плагин монтируется при старте

После обновления: Plugins → dsh-telegram-channel-ru — токен, пользователи, доступ, оформление.

v0.8.3

Choose a tag to compare

@danilinao danilinao released this 22 Oct 05:25

Проверено на живом прогоне: публикацию в npm делает CI, токенов нет.

Изменено

  • Actions обновлены до текущих мажоров — actions/checkout@v7,
    actions/setup-node@v7 (v4 предупреждал о deprecation Node 20 на раннере).
  • BUILD.md: CI-публикация описана как рабочий путь с фактами первого
    прогона (v0.8.2, provenance ушла в sigstore, версия становится публичной
    через ~1,5 минуты); добавлена грабля «пуш .github/workflows/* требует scope
    workflow у GitHub-токена».

npm

Опубликовано из CI (publish.yml, Trusted Publishing + provenance):
https://www.npmjs.com/package/dsh-telegram-channel-ru

dsh plugin --profile web add dsh-telegram-channel-ru

CI-прогон: https://github.com/danilinao/dsh-telegram-channel-ru/actions

v0.8.1 — dsh-telegram-channel-ru

Choose a tag to compare

@danilinao danilinao released this 22 Oct 05:09

Пакет и репозиторий переименованы, публикация переехала в CI.

Изменено

  • Имя пакета и репозитория: dsh-telegram-channel →
    dsh-telegram-channel-ru.
    Суффикс отделяет русское ответвление от
    оригинала (hi-wenw/dsh-telegram-channel) в общем пространстве имён npm.
    GitHub редиректит старые адреса, npm i dsh-telegram-channel@0.8.0 продолжает
    работать (старое имя осталось опубликованным). Вместе с пакетом изменился
    id плагина в профиле DSH — строка с токеном в
    ~/.dsh/profiles/web/cordis.patch.yml должна быть
    - id: dsh-telegram-channel-ru (порядок переезда — в README).
  • Публикация в npm — из GitHub Actions. Workflow
    .github/workflows/publish.yml на тег v*: npm ci → npm run check →
    npm publish --provenance через Trusted Publishing (OIDC), без токенов в
    репозитории и без секретов. Если версия уже в реестре, шаг публикации
    пропускается; расхождение тега и версии в package.json валит сборку.
    Локальный ./PUBLISH-npm.sh остаётся запасным путём (без provenance).

Добавлено

  • Тест, который сверяет имя пакета, export const name плагина и id в
    cordis.patch.yml — разъехавшиеся имена ломают id-оверрайд с токеном.

npm

Пакет переименован: dsh-telegram-channel@0.8.0 → dsh-telegram-channel-ru@0.8.1
(https://www.npmjs.com/package/dsh-telegram-channel-ru).

dsh plugin --profile web add dsh-telegram-channel-ru

Подписка на релизы: старый пакет dsh-telegram-channel больше не обновляется.

v0.8.0 — самодостаточная сборка, тесты 62/62

Choose a tag to compare

@danilinao danilinao released this 21 Oct 14:05

Проект стал самодостаточным: собирается, тестируется и пакуется на месте.

Добавлено

  • Сборка из исходников. npm install && npm run build компилирует
    src/*.ts → lib/*.js + .d.ts (tsc, strict, NodeNext). Ручное
    дублирование кода между src/ и lib/ больше не нужно.
  • npm run check — typecheck → build → тесты → проверка свежести сборки.
  • npm run test:lib — два теста, которые падают, если lib/ не собран из
    текущего src/ (паритет экспортов и текстов команд).
  • BUILD.md — сборка, проверки, упаковка, установка, релизный цикл.
  • CHANGELOG.md (этот файл).

Исправлено

  • Живые сессии больше не считаются пустыми. Сессия из catalogFromLiveAgents
    помечается названной и не скрывается, если её журнала ещё нет на диске; в
    ensureSessionNames пустой считается только «холодная» сессия без сообщений.
    Раньше сессия, запущенная только в памяти, могла исчезнуть из выбора.
  • Старт не падает на частичном клиенте. Карточка бота
    (setMyShortDescription / setMyDescription) вызывается только если метод
    есть у клиента.
  • Типы приведены в порядок: 13 ошибок tsc (сужение union событий
    assistant/chunk / todo/write, contentToText, projectionTitle,
    неопределённая cwd в resolveSessionTitleFromHost — из-за неё имя холодной
    сессии молча терялось).

Изменено

  • Тесты: 62/62. Изолированы от реального хоста (DSH_HOME и
    DSH_TELEGRAM_BINDINGS_FILE указывают в temp), ожидания переведены с
    китайских строк upstream на русские, обновлены под текущее поведение
    (кнопка «новый проект», история при привязке, форматы /status и /compact).
  • Peer-зависимости @deepseek-ai/dsh-agent|dsh-llm|dsh-session —
    ^0.2.1-alpha.2, cordis ^4.0.5-alpha.1, schemastery ^3.18.5-alpha.1:
    рантайм 0.2.1-alpha.2 удовлетворяет им, поэтому исключение
    allow-version не требуется.
  • devDependencies — точные версии, с которыми работает хост (проверка типов
    по настоящим типам, а не по заглушкам).
  • npm test использует tsx; npm run test:native — то же на нативном
    стриппинге типов Node 26.
  • .gitignore переписан (без BOM), добавлены .tmp/, *.tgz, coverage/.