Unlaw 3.12.3: ul zip сжимает лучше, плюс аудит безопасности

Что я сделал в Unlaw 3.12.3. Ужал архивы в ul zip и добавил флаг --best, закрыл дыры в агенте, desk и сервере моделей, исправил почти сорок ошибок.

Langue d’origine : russe

Вышел Unlaw 3.12.3. Обновиться можно командой ul update.

ul zip: меньше архивы, проще выбор

Сначала я ничего не менял, а замерил каждый вариант на папке исходников в 30 МБ. В релиз попало только то, что на замере реально помогло.

  • tar.zst стал на 7–9% меньше при той же скорости. Я разрешил zstd искать повторы на расстоянии до 128 МБ. Распаковать такой архив можно любым zstd, лишние флаги не нужны.
  • tar.xz теперь сжимается внешним многопоточным xz, если он установлен, а на максимальном уровне я включил -9e. На обычном уровне вышло примерно на 12% быстрее, на максимальном архив чуть меньше.
  • tar.gz на уровне --ultra я перевёл на deflate из 7-Zip: архив на 5% меньше, но заметно медленнее, поэтому только на этом уровне.
  • zip через 7-Zip теперь грузит все ядра.
  • 7z я оставил как был. Попробовал «продвинутые» флаги из интернета, и на замере они только ухудшили результат. Настройки 7-Zip по умолчанию и так лучшие, это было для меня главным открытием этого релиза.
  • Добавил флаг --best для тех, кто не хочет разбираться в форматах: ul zip project --best делает 7z на максимальном уровне (или tar.xz, если 7-Zip нет).
  • Починил распаковку .tar.zst с очень большим окном сжатия, раньше она падала с ошибкой.
  • В справку дописал, какой формат когда брать: zip открывается везде, 7z на тексте и коде обычно в два раза меньше, tar.zst быстрее всех.

Безопасность

Я прошёл весь проект по частям: ядро, сервер моделей, команды на Python, игры с редактором и отдельно безопасность. Вот что нашёл и закрыл.

  • Агент. Диск на Mac не различает регистр букв, а моя проверка защищённых путей различала, так что .SSH вместо .ssh проходил мимо неё. Теперь сравнение идёт без учёта регистра. Вывод себе на будущее: на macOS любые проверки путей надо делать именно так. Ещё я закрыл агенту токены GitHub CLI, Hugging Face, cargo, Docker и npm, SSH-ключи в любой папке и истории команд оболочки.
  • ul desk. Запрос с полным адресом в первой строке проходил без токена. Закрыл.
  • ul lm serve. Любой сайт, открытый в браузере, мог незаметно запускать локальные модели. Теперь запросы с чужих сайтов отклоняются, если явно не включить --cors.

Исправления

  • ul doctor --fix больше не может затереть ~/.zshrc, если не смог его прочитать, и не превращает символическую ссылку на dotfiles в обычный файл.
  • --dry-run теперь правда ничего не выполняет. Раньше ul --dry-run remove удалял по-настоящему, и это, пожалуй, самый неприятный баг из всех.
  • ul config set telegram.chat_id 123456789 работает без кавычек вокруг числа.
  • ul remove удаляет токен из Keychain, даже если конфиг сломан.
  • Сломанный шаблон проекта больше не роняет ul list и подсказки для неизвестных команд: он пропускается с предупреждением.
  • Агент: обрыв Wi-Fi больше не останавливает ula server и не теряет напоминания. На слишком большой срок агент отвечает понятной ошибкой, а «через 700 дней» работает. Записи расписания, которые агент не смог прочитать, больше не стираются.
  • todo и desk: архив доски из Obsidian Kanban не ломается при перемещении карточек, переводы строк Windows и права файла сохраняются. ul tg setup больше не стирает комментарии в config.toml.
  • ul lm: если клиент Ollama просит выгрузить модель, она больше не загружается. После аварийного завершения сервера не остаётся висящих процессов моделей. Два аудиофайла, загруженные одновременно, больше не путаются.
  • Редактор ule: очищенный файл сохраняется пустым, Ctrl-A на огромном числе не превращает его в 1, правки от языкового сервера применяются в правильном порядке.
  • Игры: повреждённый файл рекордов я теперь откладываю в сторону, а не перезаписываю.

На каждое исправление я написал тест: 516 тестов на Python и около 285 на Rust, все зелёные.

Что не изменилось

Я ничего не удалял, старые команды и конфиги работают. Команды, которые вы отредактировали вручную, обновление не трогает.

Дальше

В планах по-прежнему локальная модель ul lm laya и память агента.

Ссылки

← Tous les articles