 JianMiauandClaude Fable 5
|
7e2f689f26
|
修正開啟追視後 renderer 崩潰,追視改為只在待機時生效
摘要:
startAnim 對 look 會丟 TypeError 導致動畫迴圈整個死掉;另把追視改成只在 idle 時覆蓋。
根本原因:
1. 追視是單一靜態擺姿,TIMINGS 裡沒有 look 這個動作。但序列模型改寫後,
tick 在動畫改變時無條件呼叫 startAnim(anim),傳入 "look" 時會走到
cycleOf("look") → TIMINGS["look"].map → TypeError。
例外從 requestAnimationFrame 的 callback 拋出,迴圈就此中止,
整隻寵物凍結,也不再回應任何 hook 事件——就是使用者回報的「直接沒反應」。
2. 對照 Codex 時把 lookFrame 改成覆蓋所有狀態。但 Codex 的追視來源是 quick chat 的
文字游標,只有使用者真的在打字時才存在;滑鼠卻是一直都在,照搬會讓工作中的
running / waiting / review 動畫永遠被靜態擺姿蓋掉,寵物失去反映狀態的作用。
影響:
選單一勾「跟著游標看」,游標一動寵物就完全凍結,且不會恢復。
修法:
- startAnim 開頭對 look 早退,直接設成空的幀序列(靜態擺姿),
不進入 cycleOf / baseSequence。draw 本來就單獨處理 look,tick 的推幀也已排除 look。
- resolveAnim 先取 baseState(),只有 base 為 idle 時才回傳 look;
一併避免原本重複呼叫 baseState() 的副作用。
- README 的特色、行為對照表、與 Codex 的對照三處同步更新,
對照表把「追視」拆成來源與優先序兩列並說明為何刻意不同。
不動的部分:
hover 跳躍維持進入時播 3 次、之後停住不再跳(使用者確認就是要這個行為)。
另已確認跳躍結束後會回到當下的基礎狀態而非一律 idle。
驗證:
- 單元測試(抽出實際程式碼執行):修正前 startAnim("look") 拋
TypeError: Cannot read properties of undefined (reading 'map'),修正後回傳空序列;
idle 6 幀、running 24 幀正常;resolveAnim 在追視開啟下
idle→look、running→running、waiting→waiting、review→review,
hover 跳躍優先於 look 與 running,跳躍結束回到 running 而非 idle,共 11 項全過。
- 實機開啟 followCursor 啟動:/state 持續回應且 anim 為 look(修正前此處即崩潰),
log 無任何例外;灌入事件後 running / waiting 正確蓋過追視。
- 以 ELECTRON_RUN_AS_NODE 讀打包後 app.asar:版本 2.0.2、崩潰修正與追視優先序都在,
hover 跳躍、矩形判定、右鍵選單未受影響;exe FileVersion 為 2.0.2。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 16:48:43 +08:00 |
|
 JianMiauandClaude Fable 5
|
538b379dff
|
package-lock 版號同步為 2.0.1
根本原因:
npm version patch 會同時改 package.json 與 package-lock.json,
上一個 commit 只提交了 package.json,lock 的版號留在工作區未提交。
影響:
lock 與 package.json 的版號不一致,且工作區殘留未提交變更。
修法:
補上 package-lock.json 的版號變更。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 16:29:32 +08:00 |
|
 JianMiauandClaude Fable 5
|
56fd8448ba
|
用 electron-builder 打包成 Windows exe
摘要:
加上 electron-builder 設定,`npm run dist` 產出 NSIS 安裝檔與免安裝版,並修正打包後才會出現的路徑問題。
根本原因:
原本三處路徑都假設程式是攤在資料夾裡跑的,打包成 asar 後會壞:
1. hook 腳本路徑會落在 app.asar 內,而 Claude Code 是用 `node <路徑>` 執行它,node 讀不到 asar 裡的檔案,hook 會直接失敗。
2. pets 資料夾同樣在 asar 內,使用者無法自己丟寵物進去,選單「開啟寵物資料夾」也開不起來。
3. 開機自動啟動寫入的是 `electron.exe + 專案路徑`,打包後沒有 node_modules,登錄值會指向不存在的檔案。
影響:
沒有可散佈的執行檔;直接打包的話 hook、換寵物、開機啟動三個功能都會壞掉。
修法:
- 新增 lib/paths.js:unpacked() 把 app.asar 換成 app.asar.unpacked,isPackaged() 以 process.defaultApp 判斷是否為打包版。
- build.asarUnpack 把 hook/ 與 pets/ 解到 asar 外,hooks-installer 與 main.js 的 PETS_DIR 都改走 unpacked()。
- autostart 打包後改用 process.execPath,並跳過開發版才需要的 electron.exe 存在檢查。
- NSIS 設為 per-user、可改安裝路徑、建立桌面與開始選單捷徑,解除安裝不刪 ~/.claude-pet。
- 新增 build/icon.ico(16–256,七種尺寸),取自小念 spritesheet 第 0 列第 6 欄的頭肩方形裁切。
- dist/ 加入 .gitignore;README 補上「打包成 exe」一節與安裝檔的使用方式。
驗證:
以 ELECTRON_RUN_AS_NODE 執行打包後的 exe(不開視窗)載入打包內的 lib,確認 isPackaged 為 true、hook 路徑指到 app.asar.unpacked 且檔案存在、autostart 指到 exe 本身、pets 掃得到 xiao-nian、renderer 讀得到 asar 內的 index.html;另確認 exe 版本資訊與七種尺寸圖示皆已嵌入。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 11:03:11 +08:00 |
|
 JianMiauandClaude Fable 5
|
b1d57249f8
|
初始提交:Codex Pets 相容的 Claude Code 桌面寵物
摘要:
Electron 桌面寵物,透過 Claude Code hooks 即時反映工作狀態(思考、等待授權、失敗、完成),並支援 16 方向追視游標。
根本原因:
專案尚未納入版控,需要建立初始 repo 以便後續追蹤與協作。
影響:
建立 main 分支的第一個版本,包含完整可執行的程式碼與內附寵物「小念」。
修法:
納入以下內容:
- main.js / preload.js:Electron 主程序、透明置頂視窗、系統匣選單、HTTP 事件伺服器、游標輪詢與拖曳
- renderer/:Codex V2 spritesheet 幀動畫播放器、session 狀態機、氣泡、alpha 點穿判定
- hook/claude-pet-hook.js:Claude Code hook 端,stdin → POST /event,永遠 exit 0
- lib/、scripts/:hooks 安裝/移除、Windows 開機自動啟動
- pets/xiao-nian:內附寵物包(pet.json + spritesheet.webp)
- README.md、docs/states.png:使用說明與狀態總覽圖
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-08-21 10:32:39 +08:00 |
|