duo 指令

同一套引擎化身為命令列工具,以及它拒絕半途而廢的兩件事。

← 所有文件

同一套引擎,也有一個命令列版本。duo 連結的是真正的 DuoUpdaterCore,所以它用的更新來源與順序、安裝政策,以及忽略與略過規則,都和選單列版本完全一樣⁠——兩者之間如果出現分歧,那是 bug,不是各有各的看法。

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 讀取的同一份偏好設定,所以在其中一邊隱藏某個項目,另一邊也會跟著隱藏。

它寧可拒絕、也不做到一半的兩件事

App Store 更新。 這條路線需要具權限的輔助程式⁠——它的 SMAppService 註冊需要一個 App 套件⁠——或是靠輔助使用 API 操作 App Store.app。命令列工具兩者都沒有,所以它會直接說明,而不是半途失敗。

強行取得安裝鎖。 如果選單列版的 App 正在進行安裝,duo 會結束並說出目前持有安裝鎖的是誰,而不是從它手上硬把套件換掉。

維護面向

duo verify、duo triage 和 duo reconcile 會針對每一條手寫規則,對照它的即時端點逐一檢查,向模型詢問某條失效的規則為什麼會失效,再把結果轉成議題(issue)。這就是夜間檢查在做的事。一般使用並不需要用到它們。