7.7 KiB
dsh-vk-group — Плагин управления группой ВКонтакте для DeepSeek Harness
Что это
DSH-плагин (bundle), который даёт агенту внутри DeepSeek Harness полный набор инструментов для управления сообществом ВКонтакте: постинг, модерация, участники, сообщения, обсуждения, статистика, медиа.
Почему
DeepSeek Harness — открытый харнес от DeepSeek (репозиторий deepseek-ai/deepseek-harness, ~256k звёзд) с архитектурой «всё есть плагин». Плагины — это TypeScript-модули, экспортирующие apply(ctx), регистрирующие инструменты через ctx.tools.register(defineTool(...)). ВКонтакте имеет развитое REST API (dev.vk.com/method) для управления сообществами. Соединить оба — значит дать одному агенту автономно вести сообщество целиком.
Технологии
- TypeScript / ESM
@deepseek-ai/cordis— фреймворк плагинов@deepseek-ai/dsh-tools—defineTool, типизированная схема инструментов@deepseek-ai/schemastery— конфигурация- VK API v5.199+ — REST, LongPoll API, Callback API
- Node fetch — HTTP-клиент VK API
Архитектура плагина
dsh-vk-group/
├── package.json # dsh.bundle, engines.dsh
├── cordis.patch.yml # слой плагина
├── src/
│ ├── index.ts # apply(ctx) — точка входа
│ ├── config.ts # Config (Schemastery schema)
│ ├── vk/
│ │ ├── client.ts # VK API клиент: retry, rate-limit, captcha-hook
│ │ ├── methods.ts # типизированные обёртки методов
│ │ ├── errors.ts # коды ошибок VK → типизированные ошибки
│ │ └── longpoll.ts # LongPoll-цикл (ctx.jobs + ctx.effect)
│ ├── tools/ # ~22 инструмента vk_*
│ │ ├── community.ts # info / update settings
│ │ ├── members.ts # list / manage / status
│ │ ├── moderation.ts # ban / requests / managers
│ │ ├── wall.ts # post / edit / delete / pin / list
│ │ ├── comments.ts # list / manage
│ │ ├── media.ts # photos / docs / video / stories upload
│ │ ├── board.ts # topics + comments
│ │ ├── market.ts # products
│ │ ├── messages.ts # community messages
│ │ ├── analytics.ts # stats / shortlink
│ │ ├── callback.ts # Callback API servers
│ │ ├── longpoll-control.ts
│ │ └── moderation-rules.ts
│ ├── events/
│ │ └── inbound.ts # LongPoll → agent.followup()
│ ├── policy/
│ │ └── moderation.ts # rule engine + tools/pre-execute gate
│ ├── skill/
│ │ └── vk-group-ops/SKILL.md
│ └── ui/
│ └── settings.tsx # карточки инструментов + панель настроек
└── tests/
├── client.test.ts
├── tools.test.ts
└── integration.test.ts
Инструменты (22)
| Инструмент | Назначение |
|---|---|
vk_community_info |
Информация о сообществе + счётчики + права токена |
vk_community_update |
Изменение настроек (dry-run diff, whitelist полей) |
vk_members_list |
Список участников (пагинация, фильтр, сортировка) |
vk_members_manage |
Исключить / одобрить / отклонить / пригласить |
vk_member_status |
isMember + ban_info + member_status |
vk_ban_list |
Список заблокированных |
vk_ban_manage |
Бан / разбан (причина, срок) |
vk_requests_list |
Заявки на вступление |
vk_requests_handle |
Одобрить / отклонить заявки (пакетно) |
vk_managers_list |
Список руководителей |
vk_manager_set |
Назначить / разжаловать / изменить полномочия |
vk_wall_post |
Создать запись (текст, вложения, from_group, signed) |
vk_wall_edit |
Редактировать запись |
vk_wall_delete |
Удалить / восстановить запись |
vk_wall_pin |
Закрепить / открепить запись |
vk_wall_list |
Лента записей (фильтры: owner, others, suggested, postponed) |
vk_comments_list |
Комментарии к записи |
vk_comment_manage |
Удалить / восстановить / пожаловаться |
vk_media_upload |
Загрузка фото / docs / video (возвращает attachment-строку) |
vk_board_topic |
Создать / закрыть / закрепить / удалить обсуждение |
vk_board_comment |
Комментарий в обсуждении (создать / удалить) |
vk_market_manage |
Добавить / редактировать / удалить товар |
vk_messages_send |
Сообщение от имени сообщества |
vk_messages_list |
Список диалогов сообщества |
vk_stats_get |
Статистика сообщества (период, интервал) |
vk_shortlink |
Короткая ссылка (utils.getShortLink) |
vk_callback_manage |
Серверы Callback API (add / edit / delete / settings) |
vk_longpoll_control |
Старт / стоп / статус LongPoll-цикла |
vk_moderation_rules |
Чтение / запись правил модерации |
События (LongPoll → агент)
LongPoll-цикл работает как фоновая задача (ctx.jobs). События VK доставляются агенту через agent.followup():
MESSAGE_NEW— новое сообщение в сообществоWALL_REPLY_NEW— новый комментарий на стенеWALL_POST_NEW— новая запись (от участника, если стена открытая)GROUP_JOIN/GROUP_LEAVEMESSAGE_TYPING_STATEBOARD_REPLY_NEW— ответ в обсужденииMARKET_COMMENT_NEW
Конфигурация (Schemastery)
interface Config {
accessToken: string // community or user token
groupId: number // negative or positive
apiVersion: string // default '5.199'
language: string // 'ru' | 'en' | 'uk'
rateLimit: { rps: number; burst: number }
retry: { maxAttempts: number; baseDelayMs: number }
captcha: { autoSolve: boolean; solverTool?: string }
longpoll: { enabled: boolean; mode: number; timeoutSec: number }
callback: { enabled: boolean; serverUrl?: string; confirmToken?: string }
moderation: { autoBanKeywords: string[]; autoApprove: boolean; warnThreshold: number }
defaultFromGroup: boolean
defaultSigned: boolean
ui: { settingsTab: boolean }
}
Вики (14 страниц)
См. вики репозитория Gitea.
Статус
План и архитектура готовы. Код не написан — ожидаю решения.