csc собирался без /win32icon, поэтому у exe не было значка вовсе, а окно
пыталось сделать значок из icon.png через GetHicon — тот теряет альфу
и не даёт нужных размеров. Теперь многоразмерный icon.ico вшит в exe,
а окно берёт значок из себя же.
Маленькое окно на C#, собирается компилятором из состава Windows: ставить
нечего, зависимостей нет — как и у всего остального в проекте. Запускает
node дочерним процессом, показывает его вывод, прячется в трей, красит
значок по /api/state.
Node теперь уходит вместе с окном: окно держит его stdin, server.mjs при
DEEPSEEK_TRAY=1 слушает close на этой трубе. Job Object не подошёл бы —
он забрал бы с собой и браузер, который человеку нужен.
Окно смотрит на checked, а не только на ready: снимок обновляет сторож,
и без этой проверки окно показывало бы «готов» через секунду после смерти
браузера. Поэтому /api/state отдаёт ещё и watchdogSec.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>