Releases: Tai-ch0802/capy-music
Releases · Tai-ch0802/capy-music
Release list
v0.1.0
Changelog
- 77f1e61 chore: MIT LICENSE(README 補授權一節;release-dry-run 斷言壓縮檔附 LICENSE)
- 2fce611 fix(release): PR #22 review — dry-run 驗 secret 注入、release 前跑測試、下載有 Timeout、新 binary 沿用舊檔權限
- 4aa1018 style: gofmt update_test.go
- a729e4a fix(release): checksums 行 hash 要 64 字元(截斷不 panic)、yaml 契約多驗三行 -X、dry-run 斷言版本有注入
- cbe4d18 feat(release): T10 發行流程(決策 9)— GoReleaser、release.yml、CI 注入檢查與 snapshot dry-run、capy update 正式版路徑、README 重寫
- 3634c87 fix(cli,store): PR #21 review — 逃生口改唯讀開法不自癒、Dump 包成一個交易、drive init manifest 最後上傳並檢全部 schema
- 0b7291c test(store): 升版覆蓋保留檔的案例要關掉 store(Windows 的 TempDir 清理會咬住開著的 db)
- bb316e9 fix(cli): drive init 的 manifest 同名多份取最新、--yes 路徑也印目標 Google 帳號;store 測試改名 IsRetained
- e154806 feat(cli): P3 T9 — export 與 drive init --from-local 兩個逃生口;store 升版不再刪舊檔
- faca4de fix(cli): PR #20 review — 有列出但 404 = 空清單、link 用與 gone 相同的存在定義、--force 只能配單一清單、pid 判斷用 ulid.Time
- ded406b docs(spec): §6.5.1 規則 9 的快照描述補平台清單 id;exit 3 訊息講明 T9 尚未實作、請保留 state.db
- 207b767 feat(cli): P3 T8 — pl link / unlink / pull:GATE、exit code 0/1/2/3、COMMIT Drive 先 SQLite 後
- aa42fa5 fix(canon): PR #19 review — 配對交給 LCS 決定(重複曲目換序一輪就穩)、LCS 改 Hunt–Szymanski(萬首不再吃 855 MB)
- 6baba45 fix(canon): base 快照同時記觀測當時的 cid,移除計數不再經 mapping 反查
- 4aee8dc feat(canon): P3 T7 — pl pull 的 DERIVE(spec §6.5.1):cid 對齊、只在 base 存在時移除、LCS 最少搬動、純函式
- e575a79 docs(spec): §6.5.1 P3 的 DERIVE 規則定案(T7 先寫規則再寫程式)
- 0fe3b68 fix(store): PR #18 review — 壞掉的 state.db 自癒、Dump 孤兒列回錯不 panic、路徑含 ? 拒絕、Load 失敗後 Save 不蓋空、決策 14 改寫、兩個 nit
- 282b1f3 docs(canon): Encode 會原地 normalize,註解講明
- 3485a3d feat(store): P3 T6 — SQLite cache(modernc.org/sqlite)、canonical 鏡像 Hydrate/Dump 無損重建、cache.json 併入 state.db
- fee470f fix(canon): 測試檔字串裡的 \n 被工具展開成真換行,main 上 go test 編譯失敗(PR #16 review 修正的退步)
- cf51f82 fix(canon): PR #16 review — Decode/Encode 補齊缺欄位容器、RankBetween 驗字元集與無空間組合、manifest devices 排序、MergeBase 不共用記憶體、prov 命名
- a9b6a25 fix(canon): Playlist.Links 不 omitempty——空清單解回來是 nil map,T7 第一次賦值就 panic
- 5148460 feat(canon): P3 T5 — canonical model 與 Drive 佈局(型別、編解碼、決定性 cid、base LWW 合併、fractional rank)
- ae11fe6 feat(cli): capy update --dev — 從 main 最新節點 go install 重建並覆蓋自己
- d196db1 fix(drive): PR #14 review — Find 同毫秒用 ID 決勝、Update 擋空內容、403 insufficientPermissions 映射、list 一律 trashed = false、錯誤頁截 300 字、newDriveClient 早退
- 2d81e54 fix(drive): 授權錯誤去掉 *url.Error 的請求 URL 噪音(cron log 會看),純網路錯誤仍保留 URL
- cf1ae95 feat(drive): P3 T4 — 手寫 Drive appdata client、假 Drive、錯誤映射、退避擴充、debug drive-ls
- fb56493 fix(auth,cli): PR #13 review — logout 後互動使用者可只重貼 secret、成功後寫入失敗講明授權已成功、invalid_client 講下一步、issued_at 零值措辭、logout 讀不到 config 要提醒
- aa00cf4 fix(cli): auth login google 只給 client secret 時配 config 的 client id 或報錯(不靜默丟掉);精靈路徑的來源標籤改為「精靈」
- b7551a3 feat(auth): Google 登入(P3 T3)— PKCE + 動態 loopback、三 scope 逐字、downscope 拒絕、invalid_grant 依 token 年齡歸因;config 加 google_client_id/google_email/device_id;內建 client 由 ldflags 注入
- 7fc3813 test: cli 與 auth 套件的 TestMain 全域把 CAPY_CONFIG_DIR 指到暫存目錄(測試曾把使用者真實 cache.json 蓋成夾具)
- 901c896 fix(cli,provider): PR #11 review — 輪詢逾時蓋住退避且限流當狀態、控制錯誤不吃失敗預算、哨兵改 provider.ErrPlayerNotRunning、esc 進鍵位說明
- 8c57343 Merge branch 'feat/ux-play-picker' into feat/ux-now-watch
- 96a6154 fix(cli,provider): PR #10 review — 旗標互斥與 --pick 前置過濾、藝人/曲目相關性過濾、3a 不打網路、候選去重、補全跳脫、Apple 藝人標籤誠實、備案過濾與提示、歧義原因印到 stderr
- 030d790 Merge branch 'feat/ux-tables-config' into feat/ux-play-picker
- 6df9394 fix(cli,ui): PR #9 review — default_provider 驗證+每 process 讀一次、合法 provider 單一清單、config list/get 列三個欄位、壞檔提示、表格不丟多出來的欄
- 0546a0f test(cli): watch 測試的 tea.Tick cmd 只執行一次(timer 建立即啟動,第二次執行會永遠等,CI 會卡到逾時)
- e0e336d fix(cli): watch 把 Apple「Music 未執行」當狀態持續輪詢(不算失敗);單次 now 印訊息回 0;watch 期間 429 退避提示靜音
- fde28c1 feat(cli): capy now --watch(bubbletea 即時播放畫面:進度條、space/n/p/q);Apple State 不再啟動未執行的 Music.app(UX-3 T7)
- 5e23f2d fix(cli): 挑選器把不可播的清單標明(Apple,R4);標題改成「/ 過濾,Ctrl-C 取消」;§1.1 補 top-tracks 403 約束
- 00e868c fix(spotify): 開發模式 app 打 top-tracks 一律 403,退回 artist:"" 搜尋;SPI ArtistTopTracks 改收整個 Artist
- ae10cd0 feat(cli): play 統一搜尋(曲目/藝人/清單)+ 歧義挑選器 + 非 TTY exit 2;shell 補全只讀快取;history clear(UX-2 T5/T6)
- 400a117 feat(cache): 本機非機密快取 cache.json(播放清單 id/name、最近 50 筆搜尋/挑選;壞檔視同空;暫時性,P3 T6 併入 SQLite)(UX-2 T4)
- 5c1c0b7 feat(provider): SPI 加藝人搜尋/熱門歌曲與清單播放;Spotify、Apple 實作(UX-2 T3)
- b875c95 feat(ui,cli): 表格依顯示寬度對齊並依終端寬度截斷;新增 default_provider 設定與 capy config
- ec9fb8e docs: UX 打磨計畫(表格對齊、預設 provider、play 統一搜尋+挑選器、shell 補全、now --watch)+ 附錄 A/C 決策 14–17
- bd1b704 fix(auth): 寫回重試被 ctx 取消時只跳過等待、不跳過寫入(修上一個 commit 引入的退步)
- 8700d5d fix(auth): PR #8 review — doctor 不吞錯、寫回重試加間隔並講明已登出、等鎖會出聲、每命令只讀一次 keychain
- 055051a fix(auth): 鎖改吃 context(Ctrl-C 殺得掉)、登入/登出的寫入進鎖、寫回失敗重試一次;spec 補三處缺口
- 775a049 fix(auth): 遷移整段進跨程序鎖(升級窗口會蓋掉已輪替的 RT),寫回失敗補真的測試
- 0ca4ae2 fix(auth): Spotify 遷到共用 token store,一個程序不再每次啟動就輪替 RT(issue #3)
- 992d3bd test(auth): T1 review I-1 — 慢路徑取鎖、refresh 送鎖內重讀 RT 兩條不變量補出貨測試
- d35c225 feat(auth): T1 共用單元 — 跨程序檔案鎖 + keychain JSON token store + 鎖內雙重檢查的 TokenSource(決策 11)
- bae0585 docs: T0 review fix — ISRC 衝突記錄寫進 Drive tracks.json 的 conflicts[] + stderr 警告,不落 SQLite(ruling F)
- 738df3b docs: T0 spec 對齊 — pl pull 方向、扁平佈局、cid 與 item 保真、SQLite 兩張表、quota units、§4.5 憑證表;CLAUDE.md 決策 9 措辭
- 24b8b10 docs: 依 PR #7 review 修正計畫 — 假綠燈的驗收 grep、錯的決策引用、閘的缺口
- 069bff1 docs: §0 補一句提醒 spec 有幾處會被 T0 改掉,別照舊文字寫
- e10422c docs: 依批判者審查修正 P3 計畫 — 補上缺的機制、拆開不成立的任務、消除內部矛盾
- 486832d docs: P3 交接與實作計畫(Google 登入 + Drive 同步基礎設施 + pl pull)
- 8c2058b fix: PR #6 review — .gitignore 保留 *.p8 防呆、Preflight 404 視為未驗證並在 storefront 失敗時提示 API base、keychain 非 NotFound 錯誤保留原因、user-only token 報錯、flag/env 與 --auto 非 TTY 路徑印出揭露、applePersist 註解對齊
- 8cd2c59 fix: 最終 review — applePersist 先讀 config、runOSA 帶出 stderr、Preflight 403 歸因、--auto 揭露補句;spec 附錄 C 第 8 列/P0-3/§10 交叉引用對齊;newAppleProvider 成功路徑測試
- a86df41 feat(apple): 隱藏 --auto(AppleScript 讀已登入分頁的 MusicKit.getInstance();失敗回退手動)+ spec §4.3(c)(d) 對齊
- 5ec214d feat(apple): auth login apple TTY 精靈(揭露 Confirm 預設否、只更新 developer token 路徑、貼上即驗證)
- 2749c4b refactor(apple)!: 移除 .p8 簽章、Cloudflare Worker、MusicKit 橋接(快照 3649b7b);auth login apple 改為非互動 token 登入核心(三段驗證、--i-understand 揭露閘)
- ddf2c49 feat(apple): keychain-only token 層(JWT exp 解析、不驗簽)+ client 改 amp-api base 與 Origin/Media-User-Token 標頭
- 6f627e0 docs: Apple web token BYO 實作計畫(4 tasks:token 層+amp-api 標頭 → 拆除官方路徑+非互動登入核心 → TTY 精靈 → 隱藏 --auto;附錄 A 驗收 C-0~C-6)
- 71e4080 docs: v0.5 — Apple 改為使用者自抓 web token BYO(.p8/Worker/MusicKit 橋接移除,快照 3649b7b);CLAUDE.md 新鐵則+隱藏 --auto 例外;README BYO 指引
- 22b3c12 fix: library 分頁補「空 data + 有 next」防呆(回應 review 追加項)
- 1970592 fix: P2 whole-branch review 十項 — login 清壞快取+preflight、401/403 分辨、Worker cache key 併 KID/版本與 margin 3900、library 分頁看 next+404→ErrNotFound、musickitloaded guard;附錄 C 與 §4.3/§9 修正
- 9e24528 fix: pl show 以 provider 自己的 ID 格式(Apple p.xxx)查找
- 404d771 feat: --provider apple 端到端接線(search/pl/play --id)+ spec 註記
- c62cbc6 feat: Cloudflare Worker 派發 Apple developer token(WebCrypto ES256、Cache API 合成 key、Rate Limiting binding)+ CI node job
- 6db7863 feat: capy doctor --provider apple(dev token 來源/MUT/storefront/API/osascript)
- 10a99ce feat: capy auth login/status/logout apple(來源鏈 → MusicKit 橋接 → storefront)+ newAppleProvider
- 456a11a fix: Task 6 review — osascript 毫秒整數化避開 locale 小數點、%q 跳脫加註解與回歸測試
- 3b612b8 feat: macOS 以 osascript 遙控 Music.app(雙候選播放機制,附錄 C-4 決勝)
- f45f5f0 feat: Apple Provider wrapper(Caps 依平台)+ 播放能力 build tag 骨架
- 7e7fdfa feat: Apple Music REST client(storefront/search/song/library playlists,401/403→AuthExp...