Skip to content

v0.1.0-alpha.117

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Sep 12:00
· 40 commits to main since this release

Windows 預設下載 AI-Sister-Setup.exe。這是 current-user 安裝包,內嵌 WebView2
offline installer 與同版 sister.exe,設計為安裝時不需連網;代價是安裝包顯著變大,
exact 大小以該 tag 的 asset 為準。正式 artifact 的斷網安裝仍待實測。Release 也保留
sister.exe
sister-desktop.exe,只想跑 CLI、
免安裝使用或診斷 installer 問題時,請把兩個檔放在同一個資料夾。

目前 installer 沒有 code signing,也沒有內建自動 updater。升級是使用者手動下載新版
AI-Sister-Setup.exe,先自行結束 desktop 並停止 recorder,再重新執行。alpha.115 起,Setup
使用 pinned tauri-bundler 2.9.4 custom NSIS template;它不再巢狀執行已安裝的 NSIS
uninstaller。同版 repair 或舊版升新版會在 Setup 持有 lifecycle mutex 時,綁定 current-user
產品鍵所記的 exact install root 原地覆蓋,並與 uninstall key 交叉核對;GUI、/P/S 都會在 WebView2、payload
或安裝登錄 mutation 前重新核對 DisplayVersion、root 與 quoted UninstallString。若 Setup
版本比已安裝版本舊,請關閉 Setup,再從 Windows「已安裝的應用程式」分開移除目前版本。
direct uninstaller 在 PREUNINSTALL 取得 mutex 後,也會重新核對 exact version、root 與
uninstall string,避免使用者確認移除後已有新版覆蓋,舊確認卻接著刪除新版。

本版產生的 sections 繼續覆寫 Tauri stock running-app macro;legacy current-user scanner
回報 sister-desktop.exesister.exe 命中時只拒絕,不提供或執行 forced kill。帶協定的
desktop/CLI 仍以 product event + mutex/event/mutex handshake 在產品狀態前和 installer
交接,無關的第二份 Setup 也不能同時進入 lifecycle。

alpha.117 起,Setup 與 uninstaller 在覆寫或刪除程式檔之前,還會對已安裝的
sister-desktop.exesister.exe 做檔案層獨佔開檔:只要有任何行程正在執行它(不論行程
名字、版本、有沒有 product event),開檔就會失敗,Setup/uninstaller 以 exit 32 拒絕、不
kill、不動任何檔案或登錄;拿到 handle 後舊檔先改名、handle 持到收尾,所以最後一次 scan 到
NSIS File 之間沒有窗。已經出貨或已複製到 temp 的舊 uninstaller 仍無法由新版 retroactively
改寫。

sister.exe doctor                 # 先看這個:她在這台機器上做得到什麼
sister.exe consent --grant local-recording --grant frame-storage
                                  # 沒簽第一張,下一行會直接拒絕
sister.exe record --duration 60   # 錄一分鐘(省略 --duration 就錄到 Ctrl-C)
sister.exe stats                  # 記了多少
sister.exe query 電話             # 查,每筆都附出處
sister.exe prune --dry-run        # 保留期現在會刪掉什麼

第二行不是形式。沒簽第一張同意書,record 不會開始錄——不是印個
警告然後照錄。少簽第三張(frame-storage)她照樣記,但只記螢幕上的
字、一張截圖都不寫。sister.exe consent 不帶參數就是看現在簽了哪幾張。
使用者自己開桌面姊妹(sister-desktop.exe)的話,它會把那一頁跳出來。
alpha.107 的 Windows login mode 是窄例外:它不在登入背景啟動時自動彈同意頁。

記憶資料放在 %APPDATA%\ted-h\AI-Sister\data\,刪掉那個資料夾就等於
把記憶全部忘掉;config.toml 裡的機器設定(包括 alpha.100 的 URL 答案)不在其中。
也可以用 --data-dir .\test 錄到別的地方,測完直接刪。

這一版收掉 installer late-start 的跨版本窄窗:Setup 與 uninstaller 在覆寫或刪除程式檔之前,
改用 Windows 檔案層的獨佔開檔判定「這個 exe 現在有沒有被任何行程執行」,不再只靠行程名字
或 alpha.113 才有的版本協定。

Setup 在 product event 與 legacy image-name scan 之後、NSIS File 之前,對已安裝的
sister-desktop.exesister.exe 各開一個不分享讀取的寫入 handle。正在執行的 image 會讓
這個開檔以 sharing violation 失敗,與行程叫什麼名字、是哪個版本、有沒有持 product event
無關;Setup 因此以 exit 32 拒絕,不替使用者 kill,零 payload/安裝登錄 mutation。拒絕的位置
與既有「程式仍在執行」拒絕相同:在 WebView2 section 之後、任何產品檔或登錄改動之前。防毒
軟體短暫獨佔會先重試八次(約兩秒),之後照實拒絕,重跑 Setup 即可。

拿到 handle 之後,舊檔先改名成 .ai-sister-previous,handle 一直持到 POSTINSTALL 才刪掉
舊檔、關閉 handle;File 寫入失敗或中止時由 .onInstFailed 把舊檔搬回原路徑再關 handle(這條
只有 makensis 編譯檢查,沒有 CI lane)。改名到 File 寫完之間,原路徑不存在、舊檔又被 handle 擋著讀取,Windows
loader 沒有任何一刻能映射到舊的或寫到一半的 exe;成功後 install root 仍是 exact 三檔。direct
uninstaller 在 PREUNINSTALL 重驗 metadata 之後、刪檔之前做同一道開檔,拿不到就拒絕並保留
三檔與 uninstall 登錄。

這就是先前路線圖寫的 old-binary bridge。Windows CI 把公開 alpha.110 的舊 recorder 用 hard
link 別名執行——它不持 product event、image-name scan 也看不到那個名字——current Setup 仍
拒絕,舊 bytes 與 alpha.110 metadata 原封不動;另兩條 lane 證明只持一個讀取 handle(無名、
無 event)就會被拒絕,以及改名之後、File 之前試圖啟動任一個 exe 都以 Win32 error 2/32
失敗。這些是 /S automation,不是 GUI 訊息框的肉眼證據。

仍擋不住、照實留著的:已經出貨或複製到 temp 的舊 uninstaller(不能 retroactively 改寫)、
安裝根目錄之外的 portable 副本(installer 不管它)。code signing 與跨層 master stop 仍未完成。

隱私承諾與邊界見
PRIVACY.md
THREAT_MODEL.md

最有價值的回報是:「這條規則在我的機器上沒有生效。」

Full Changelog: v0.1.0-alpha.116...v0.1.0-alpha.117