Команда duo
Тот же движок в виде инструмента командной строки — и две вещи, которые он отказывается делать наполовину
У того же движка есть командная строка. duo подключается к настоящему
DuoUpdaterCore, поэтому использует те же источники в том же порядке, ту же
политику установки и те же правила игнорирования и пропуска, что и строка
меню, — расхождение между ними двумя — это баг, а не разница во мнениях.
make cli # → ~/.local/libexec/duo, симлинк в ~/.local/bin/duo
duo list # что установлено, без обращения к сети
duo check --json # что имеет обновление, один JSON-объект на строку
duo install Cursor # применить одно, или --all
duo doctor # может ли эта машина вообще что-то установить
duo backups # список точек отката, или восстановление одной из них
duo check и duo list также принимают --source sparkle,github,… и
--include-hidden. duo ignore и duo skip записывают те же самые
настройки, которые читает приложение, поэтому скрытое в одном месте скрыто и
в другом.
Две вещи, которые он отказывается делать наполовину
Обновления App Store. Этот путь требует либо привилегированного
помощника — чья регистрация SMAppService требует bundle приложения, —
либо API «Универсальный доступ», управляющего App Store.app. У инструмента
командной строки нет ни того, ни другого, поэтому он сообщает об этом прямо,
вместо того чтобы наполовину провалить попытку.
Захват блокировки установки силой. Если приложение в строке меню сейчас
выполняет установку, duo завершает работу и называет того, кто держит
блокировку, вместо того чтобы подменить bundle прямо у него из-под рук.
Обслуживающая сторона
duo verify, duo triage и duo reconcile проверяют каждый написанный
вручную рецепт по его действующей конечной точке, спрашивают у модели, почему
сломался неисправный, и превращают результат в issue. Именно это выполняет
ночная проверка. Для обычного использования они не нужны.