инструмент proxy_switch, переключатель в подвале панели и своя страница в настройках: адрес по частям, HTTP(S)/SOCKS5, проверка по пингу со страной выхода
заливает прямоугольник {x, y, w, h, color, alpha?}
dump
возвращает холст сеткой символов и легендой палитры (текстом)
preview
возвращает холст картинкой PNG (по умолчанию ×5, для крупных ×3)
save
пишет итоговый PNG (1:1), с scale — ещё и увеличенную копию
Цвета: #rgb, #rrggbb, #rrggbbaa, "r,g,b[,a]", имя (red, teal, skin)
или массив [r,g,b,a]. Альфа — 0…255.
Несколько холстов сразу — через необязательное имя canvas.
Прокси: инструмент proxy_switch
Прокси по умолчанию НЕ вписан и НЕ включён. Ни адреса, ни логина, ни пароля: пока
пользователь не задаст свой, всё идёт напрямую, как будто инструмента нет. Это сделано
намеренно — чужой прокси в общем пакете не нужен никому.
Части адреса вводятся раздельно — у каждого прокси они свои: protocol, host,
port, user, password. Можно и одной строкой (proxy), если так удобнее.
action
Что делает
status
текущий маршрут: режим, адрес (логин скрыт), список обхода, кандидаты, результат последней проверки, доступен ли undici, что в переменных окружения
check
проверка по пингу: идёт через каждого кандидата настоящим запросом и показывает время ответа, внешний IP и страну; "choose": true — переключиться на быстрейшего
set
включить свой прокси — по частям (host, port, user, password, protocol) или одной строкой proxy
env
взять адрес из переменных окружения (HTTPS_PROXY/HTTP_PROXY/ALL_PROXY)
off
вернуться к прямому выходу
help
отдать инструкцию (lang: "ru" или "en")
Поддерживаются HTTP(S) и SOCKS5 (у SOCKS5 нет списка обхода). Есть отдельная страница настроек в интерфейсе: Настройки → Прокси.
Логин и пароль в ответах скрываются (http://***@host:8080). Переключение действует
сразу для всех внутрипроцессных запросов (модели, поиск, HTTP-MCP) и, если не выключить
export_env, уходит в переменные дочерних процессов (curl/git, stdio-MCP).
Чтобы адрес применялся при каждом запуске DSH, а кандидатов было удобно проверять
по пингу, впишите их в конфиг записи плагина (по умолчанию там пусто):
Проверка прокси (2):
1. Домашний — http://***@proxy-a.example.com:8080 — живой, 412 мс, внешний IP 38.154.185.97, страна United States (US)
2. Рабочий — http://***@proxy-b.example.com:3128 — нет ответа за 5000 мс (no answer within 5000 ms)
Быстрейший: Домашний — http://***@proxy-a.example.com:8080 (412 мс, United States).
Если в профиле уже стоит отдельный плагин прокси с карточкой настроек (например
@memef1f1y/dsh-plugin-proxy) — держите включённым только один: оба пишут один и тот же
глобальный диспетчер.
Для внутрипроцессного прокси нужен пакет undici (объявлен в зависимостях, при
установке из npm ставится сам). Если его нет, set/env/check честно скажут об этом.
Установка
# из локальной папки
dsh plugin --profile desktop add <путь-к-папке-плагина>
# или из npm / git, когда пакет опубликован
dsh plugin --profile desktop add rus-image-percent-gen
dsh plugin --profile desktop add github:Pro12447890/rus-image-percent-gen
В интерфейсе DSH то же самое делается через Настройки → Плагины (установка
бандла). После установки плагин виден в перечне бандлов профиля, а инструмент
pixel_art появляется у агента без перезапуска — достаточно нового запроса.
Совместимость: собран и проверен на DSH 0.2.0-rc.2, профиль desktop (Windows).
Лицензия — MIT, исходники целиком в репозитории, внешних сервисов плагин не требует.
Внешних зависимостей ровно одна — undici (нужна только для прокси; при установке из
npm ставится сама). PNG кодируется встроенным node:zlib, определение инструментов
собирается вручную. Нужны сервисы tools и (для показа картинок) attachments.
Код разложен по трём файлам: plugin.js — точка входа и пиксель-арт, proxy.js — выбор
прокси, shared.js — чтение инструкций.
Как этим пользуется ИИ
help — читает инструкцию instructions/pixel-art.<язык>.md;
new — выбирает разрешение;
pixels / draw / fill — рисует;
preview — смотрит на себя картинкой и правит, пока не понравится;
dump — когда нужно посчитать пиксели или сверить координаты без зрения;
save — отдаёт итоговый PNG человеку.
Инструкция лежит в двух файлах — instructions/pixel-art.ru.md и
instructions/pixel-art.en.md; она же возвращается действием help.
Ограничения
Холсты живут в процессе хоста до перезапуска DSH (в файлы они не пишутся,
пока не вызван save).
Увеличение предпросмотра упирается в лимиты сервиса вложений: если предел
меньше запрошенного, инструмент сам уменьшит масштаб и скажет об этом.
Инструмент помечен как небезопасный для параллельных вызовов: холст — общее
состояние.
Лицензия
MIT.
English
One DeepSeek Harness bundle that does four things:
What
How it shows up
Russian UI
the whole shell translated (2310 strings), switched on automatically
Element scaling
an A+ / A− control in the sidebar foot, 80 % to 220 % (5 % steps, 10 % above 160 %)
Drawing
the pixel_art tool: a 4×4…256×256 canvas, per-pixel painting, ×5/×3 previews, PNG export
Proxy
the proxy_switch tool, a switch in the sidebar foot and its own settings page: address parts, HTTP(S)/SOCKS5, latency check with the exit country
creates/resets a canvas: width, height (4…256), optional background
pixels
paints individual pixels: [{x, y, color, alpha?}]
draw
paints an ASCII grid by palette: rows + palette (character → colour)
fill
fills a rectangle {x, y, w, h, color, alpha?}
dump
returns the canvas as a character grid with a palette legend
preview
returns the canvas as a PNG (×5 by default, ×3 for large canvases)
save
writes the final 1:1 PNG; with scale also an upscaled copy
Colours: #rgb, #rrggbb, #rrggbbaa, "r,g,b[,a]", a name (red, teal,
skin) or [r,g,b,a]. Alpha runs 0…255. Several canvases at once via the
optional canvas name.
Proxy: the proxy_switch tool
No proxy is filled in and none is enabled by default. No address, no login, no
password: until the user supplies their own, everything goes out directly, exactly as if
the tool were not there. That is deliberate — somebody else's proxy has no place in a
shared package.
The parts of an address are entered separately — every proxy differs here:
protocol, host, port, user, password. A single proxy URL string still works.
action
What it does
status
the current route: mode, address (credentials hidden), bypass list, candidates, the last check, whether undici is available, what the environment holds
check
latency check: walks each candidate with a real request through it and reports the round trip, the exit address and the country; "choose": true switches to the fastest one
set
switch to your own proxy — by parts (host, port, user, password, protocol) or as one proxy URL
env
take the address from the environment (HTTPS_PROXY/HTTP_PROXY/ALL_PROXY)
HTTP(S) and SOCKS5 are supported (a SOCKS5 proxy has no bypass list). There is a
dedicated settings page: Settings -> Proxy. Credentials are hidden in answers (http://***@host:8080). A switch applies at
once to every in-process request (models, search, HTTP MCP) and, unless export_env is
off, reaches the environment of child processes (curl/git, stdio MCP).
To apply an address on every DSH start, and to keep a candidate list for the latency
check, put both into the plugin entry config (empty by default):
{"action":"check"} // who answers, and how fast
{"action":"check","choose":true} // and switch to the fastest
If the profile already carries a dedicated proxy plugin with a settings card (for example
@memef1f1y/dsh-plugin-proxy), keep only one of them enabled: both write the same global
dispatcher.
The in-process proxy needs the undici package (declared as a dependency, installed
automatically from npm). When it is missing, set/env/check say so plainly.
There is exactly one external dependency, undici (needed only for the proxy; npm installs
it automatically). PNG encoding uses the built-in node:zlib and the tool definitions are
assembled by hand. Only the tools service is required, plus attachments for showing
pictures. The instructions live in instructions/*.md and are also returned by
action: "help". The code is split into plugin.js (entry plus pixel art), proxy.js
(the proxy tool) and shared.js (instruction loading).