3 Commits
Author SHA1 Message Date
JianMiauandClaude Fable 5 4e4563e861 完成時氣泡改顯示最後一句回覆,不再延到下一輪才出現
根本原因:
Stop 事件時 main.js 已從 transcript 附上最後一句助理訊息(narration),
但 renderer 的 Stop 分支寫死顯示「完成!」沒使用它,也沒把 narrationId
標記為已顯示;下一輪第一個工具事件呼叫 sayActivity 時,transcript 裡
最新的助理訊息仍是上一輪結尾、id 又沒被消費過,就被當成新話顯示出來。

影響:
對話收尾只看得到「完成!」,看不到 AI 的最後一句回覆;等使用者送出
下一句指令後,寵物反而冒出上一輪的舊訊息,時序錯亂。

修法:
Stop 時若帶有 narration,氣泡直接顯示「 最後一句」並消費 narrationId,
沒有才退回「完成!」;UserPromptSubmit 也先把當下 narrationId 標記為已
顯示,雙重保險。另修 release.js 只挑檔名含當前版本的產物,避免 dist/
殘留的舊版檔案混進新 release。版號 2.0.9。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 16:40:32 +08:00
JianMiauandClaude Fable 5 f1e7aca797 新增發佈到 Gitea Releases 的腳本
摘要:
scripts/release.js 建立 tag v<版本> 的 release 並上傳 dist 的 .exe / .zip,
附帶 --dry-run 與伺服器設定預檢。

根本原因:
產物有 345 MB 且不進版控,需要一個散布管道。Gitea 有 Releases 與附件 API,
但目前伺服器設定會擋下全部三個檔:
  - [attachment] max_size 為 100 MB,portable 101.7 / setup 102.0 / zip 141.3 都超過
  - allowed_types 白名單只有文件與圖片類,沒有 .exe
另外 .npmrc 裡現有的 token 只有套件庫權限,呼叫 repo API 會回 403。

影響:
沒有腳本就得手動上傳三個上百 MB 的檔;直接上傳也會因上述設定而失敗。

修法:
- 新增 scripts/release.js 與 npm script release:
  owner/repo 由 git remote 推導,網址可用 GITEA_URL 覆寫(SSH 埠與網頁埠不同時)。
  release 說明取自上一個 tag 之後的 commit 標題;沒有舊 tag 就取最近 30 筆。
  release 已存在則重用,同名附件先刪再傳,可重複執行。
- 上傳採用手動組裝的 multipart 並以串流送出,不把上百 MB 的檔案讀進記憶體。
- 發佈前先讀 /api/v1/settings/attachment 做預檢,超過上限或副檔名不允許時
  直接列出是哪個檔案卡在哪一條並中止,不會傳到一半才失敗。
- --dry-run 只做讀取,印出將建立或重用的 release 與變更說明。
- git() 關閉 stderr:releaseNotes 會刻意 describe 一個可能不存在的舊 tag,
  否則 git 的 fatal 訊息會被誤認成發佈失敗。
- README 新增「發佈到 Gitea Releases」一節,寫明所需的 app.ini 設定與 token 權限。

驗證:
- 對真實伺服器執行 --dry-run:正確推導出 AI/claude-pet 與 tag v2.0.3,
  並列出三個檔各自違反的限制後中止,全程只有 GET。
- 另寫一個假的 Gitea(本機 http)跑完整流程:建立 release 的 tag、名稱、
  target_commitish 與說明皆正確;三個附件的 Content-Length 與實收位元組相符、
  multipart 邊界與 Content-Disposition 正確、結尾正確,
  且收到的檔案內容 SHA256 與磁碟上的完全一致(共 345 MB)。

未執行:
實際發佈需要伺服器調整設定與一個有 write:repository 權限的 token,兩者都在使用者手上。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 08:30:07 +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