Документ декомпозиции и поэтапного плана реализации нативной утилиты FreeIt на Rust 2021 + Tauri v2 + Svelte 5.
-
1.1. Интеграция Win32 Restart Manager API
- Подключение
windows-sysс crate-фичамиWin32_System_RestartManager,Win32_Foundation,Win32_System_Threading,Win32_System_ProcessStatus,Win32_UI_WindowsAndMessaging. - Реализация функции Rust:
get_locking_processes(path: &str) -> Vec<ProcessInfo>. - Поочерёдный вызов
RmStartSession,RmRegisterResources(регистрация пути к файлу/папке) иRmGetListдля получения списка PIDs и имён процессов.
- Подключение
-
1.2. Низкоуровневый системный инспектор (
NtQuerySystemInformation)- Вызов
ntdll.dllс классомSystemExtendedHandleInformationдля детекта скрытых системных дескрипторов и заблокированных папок, которые не определяются через Restart Manager. - Извлечение заголовка окна (через
EnumWindows/GetWindowTextW) и иконки приложения (.exe) для отображения в UI.
- Вызов
-
1.3. Логика разблокировки и выселения дескрипторов (Release Engine)
- Реализация
graceful_close_process(pid: u32) -> bool: отправка системных сигналовWM_CLOSE/WM_QUERYENDSESSIONс таймаутом 3 секунды. - Реализация
force_kill_process(pid: u32) -> Result<()>: закрытие хэндлов черезNtDuplicateObject(DUPLICATE_CLOSE_SOURCE) или принудительное завершениеTerminateProcess. - Реализация
delete_on_reboot(path: &str) -> Result<()>: вызовMoveFileExWс флагомMOVEFILE_DELAY_UNTIL_REBOOTдля системных файлов.
- Реализация
-
2.1. Создание модуля Safe Vault (
vault.rs)- Реализация безопасного копирования заблокированного файла перед удалением через сырой бинарный поток
FILE_SHARE_READ | FILE_SHARE_WRITEво временный каталог%LOCALAPPDATA%\Kobalt\FreeIt\Vault\. - Запись метаданных операции (
vault_manifest.json: исходный путь, дата удаления, размер, список блокировавших процессов).
- Реализация безопасного копирования заблокированного файла перед удалением через сырой бинарный поток
-
2.2. Нативное удаление в Корзину Windows и интеграция с MiniBin
- Удаление разблокированных файлов и папок через
SHFileOperationW(FOF_ALLOWUNDO), чтобы элемент штатно попадал в системную Корзину Windows для возможности отмены/восстановления. - Оповещение оболочки Windows через
SHChangeNotify(SHCNE_DELETE, ...)для синхронизации и мгновенного обновления статуса в MiniBin.
- Удаление разблокированных файлов и папок через
-
3.1. Разработка очереди ожидания (
watcher.rs)- Использование асинхронного вотчера
notify(на базе Win32ReadDirectoryChangesW) для отслеживания момента высвобождения заблокированного файла с 0% CPU.
- Использование асинхронного вотчера
-
3.2. Автоматическое удаление и уведомления
- Автоматическое выселение файла при закрытии удерживающего процесса.
- Отправка нативного Windows 11 Toast notification через
tauri-plugin-notification: "Файл X удалён после закрытия Y".
-
4.1. Разработка UI компонентов
- Сетка карточек заблокированных процессов с иконками приложений, PID, кнопками «Мягко закрыть» и «Убить процесс».
- Цветовой индикатор риска (🟢 Безопасно, 🟡 Служба синхронизации, 🔴 Системный сервис Windows).
- Кнопки быстрых действий: «Разблокировать все», «Удалить в Корзину», «Отложить удаление».
-
4.2. Адаптивная стилизация Fluent Design
- Эффект матового стекла Mica / Acrylic, поддержка тёмной и светлой темы Windows 11.
- Drag-and-Drop зона для перетаскивания упрямых файлов прямо в окно программы.
-
4.3. Интеграция предпросмотра PeekIt
- Обработка нажатия клавиши
Space: вызов CLI-командыpeekit "C:\path\to\file"для предпросмотра заблокированного файла в режиме чтения.
- Обработка нажатия клавиши
-
4.4. Человекочитаемые имена процессов (Human-Friendly Names)
- Интеллектуальный маппер системных .exe в понятные описания (например,
node.exe➔ «Локальный dev-сервер Vite / Next.js»).
- Интеллектуальный маппер системных .exe в понятные описания (например,
-
4.5. ИИ-Консультант (Gemini API) и Настройки ключа / модели
- Кнопка вызова краткого понятного объяснения причины удержания файла процессом («Почему заблокировано?»).
- Автоматическое чтение общего API-ключа и выбранной модели из реестра Windows с DPAPI (
HKCU\Software\KobaltTools\API). - Окно настроек FreeIt: ввод собственного Gemini API ключа и селектор модели (
gemini-2.0-flash,gemini-1.5-flashи др.), если PolyShift не установлен. - Сохранение настроек в общий реестр
HKCU\Software\KobaltTools\APIдля сквозного подхвата будущими утилитами Kobalt.
-
5.1. Регистрация Shell Extension (Контекстное меню ПКМ)
- Автоматическое добавление пункта "Разблокировать через FreeIt" в реестр Windows (
HKCU\Software\Classes\*\shell\FreeIt). - Обработка аргументов командной строки при запуске
freeit.exe "C:\path\to\file".
- Автоматическое добавление пункта "Разблокировать через FreeIt" в реестр Windows (
-
5.2. Интеграция с плавающим карманом StashIt
- Передача статуса блокировки файла в визитный виджет StashIt при перетаскивании.
-
6.1. Разработка лендинга (
website/)- Оформление промо-страницы на Flutter Web с подключенным пакетом
kobalt_ui(шапкаKobaltNavBar, 3-колоночный футерKobaltFooter, сравнительные таблицы с конкурентами).
- Оформление промо-страницы на Flutter Web с подключенным пакетом
-
6.2. Настройка GitHub Actions (.github/workflows)
- Автоматическая сборка релизов Windows (
.msi,Setup.exe,.zipportable). - Автопубликация промо-сайта на GitHub Pages.
- Автоматическая сборка релизов Windows (
| Модуль | Описание | Статус |
|---|---|---|
| Ядро Rust / Restart Manager | get_locking_processes |
⏳ В очереди |
| Release Engine | Graceful close / Force kill / Delete on reboot | ⏳ В очереди |
| Safe Vault | Теневой бэкап и отмена | ⏳ В очереди |
| Watcher Engine | Отложенное удаление на notify |
⏳ В очереди |
| Svelte 5 UI | Карточки процессов, риск-индикаторы | ⏳ В очереди |
| Shell Integration | Контекстное меню ПКМ | ⏳ В очереди |
| Flutter Web Site | Промо-лендинг на kobalt_ui |
⏳ В очереди |