Первый выпуск SysDevCleaner

Анализ Windows и очистка кешей, мусора и остатков разработки.

Ядро:
- каталог правил: 228 правил путей (496 шаблонов) + 43 правила артефактов
  проектов — Windows, браузеры, кеши сборки, IDE, приложения, пакетные
  менеджеры;
- рекурсивный поиск node_modules, target, build, __pycache__, .venv и т.п.
  с проверкой маркеров проекта, чтобы не ловить ложные срабатывания;
- поиск крупных файлов и дубликатов (хеш по началу/середине/концу и полная
  сверка), инвентаризация установленных программ через реестр;
- ограничение области сканирования по дискам;
- рекомендации и текстовый отчёт.

Безопасность:
- четыре уровня риска, автоматически отмечается только «Безопасно»;
- список защищённых путей проверяется и при выборе, и перед удалением;
- для каталогов вроде %TEMP% удаляется содержимое, а не сам каталог;
- удаление в Корзину по умолчанию, пробный запуск, журнал очисток.

Интерфейс на Dear PyGui:
- JetBrains Mono Nerd Font: кириллица и иконки в одном шрифте;
- тёмная и светлая темы, адаптивная раскладка;
- заголовок окна ставится через SetWindowTextW — Dear PyGui отдаёт его
  в ANSI-функцию как UTF-8 и портит кириллицу;
- запуск всегда с правами администратора: манифест UAC в exe и
  самоперезапуск через ShellExecuteW при работе из исходников.

Сборка в один exe через PyInstaller со вшитым шрифтом и значком.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-11 14:55:00 +03:00
commit b01cf37e66
33 changed files with 6472 additions and 0 deletions

46
sysdevcleaner/__main__.py Normal file
View File

@@ -0,0 +1,46 @@
"""Точка входа: `python -m sysdevcleaner` открывает GUI, с аргументами — консоль."""
from __future__ import annotations
import sys
from .winui import NO_ELEVATE_ENV, ensure_admin, is_admin
def launch_gui(argv: list[str] | None = None) -> int:
"""Dear PyGui — основной интерфейс; tkinter остаётся запасным вариантом.
Перед запуском поднимаем права: без них недоступны Windows\\Temp, кеш
обновлений, Prefetch и Windows.old — а это обычно самая крупная добыча.
Отказ в UAC не фатален: приложение просто запустится с обычными правами
и честно скажет об этом в заголовке и шапке.
"""
if ensure_admin():
return 0 # работать дальше будет повышенная копия
try:
from .gui.app import main as gui_main
except ImportError as e:
print(f"Dear PyGui недоступен ({e}).", file=sys.stderr)
print("Установите его командой: python -m pip install dearpygui",
file=sys.stderr)
print("Пока запускаю запасной интерфейс на tkinter.", file=sys.stderr)
from .gui.app_tk import main as gui_main # type: ignore[assignment]
gui_main()
return 0
def main() -> int:
args = sys.argv[1:]
if not args:
return launch_gui()
if args == ["--gui"]:
return launch_gui([])
from .cli import main as cli_main
return cli_main()
__all__ = ["main", "launch_gui", "is_admin", "NO_ELEVATE_ENV"]
if __name__ == "__main__":
raise SystemExit(main())