From cd4b618be059ef6b0ce48711906e3a5c7aef62c5 Mon Sep 17 00:00:00 2001 From: JianMiau Date: Mon, 24 Aug 2026 14:06:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=9C=E4=B8=8A=E9=81=BA=E6=BC=8F=E7=9A=84?= =?UTF-8?q?=E6=B0=A3=E6=B3=A1=E6=A8=99=E9=A1=8C=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 摘要: 整理記憶中、需要你授權、工具失敗、錯誤訊息、一般通知、掰掰這六個氣泡補上第一行標題。 根本原因: 上一版把氣泡改成兩行時,是以「原本帶(專案名)尾綴」為線索去改呼叫點, 但這六個訊息本來就沒有尾綴,所以整批漏掉,顯示出來只有單行、沒有專案或對話名稱。 影響: 壓縮記憶、等授權、出錯這些最需要知道是哪個 session 的時候,反而看不到來源。 修法: - handleEvent 內六個 say() 補上 title 參數。 - 選單「動作測試」的氣泡給標題「動作測試」,才分得出是測試不是真的事件。 - first-awake 的「嗨,我是〈寵物名〉」維持沒有標題:它不屬於任何 session, 訊息本身已含寵物名,CSS 的 :empty 會把空標題整行收起來,不會留空白。 驗證: 以 DOM stub 載入完整 renderer.js 驅動 handleEvent,11 項全過: PreCompact 的標題與訊息、其餘五個補上的事件都帶標題、原本就有的「完成」仍正常、 對話名稱優先於專案名、無 cwd 也無對話名時標題為空字串、滑鼠停留提示為兩行。 另以靜態掃描確認 handleEvent 內全部 13 個 say() 都帶 title, 並在打包後的 app.asar 上重跑同一項掃描。 Co-Authored-By: Claude Fable 5 --- package-lock.json | 4 ++-- package.json | 2 +- renderer/renderer.js | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 49e34f6..63f058f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "claude-pet", - "version": "2.0.6", + "version": "2.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "claude-pet", - "version": "2.0.6", + "version": "2.0.7", "devDependencies": { "electron": "^43.4.1", "electron-builder": "^26.0.12" diff --git a/package.json b/package.json index 4831901..79aecb5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claude-pet", - "version": "2.0.6", + "version": "2.0.7", "description": "Codex Pets 相容的 Claude Code 桌面寵物(spriteVersionNumber 2:9 個動作列 + 16 方向追視)", "main": "main.js", "private": true, diff --git a/renderer/renderer.js b/renderer/renderer.js index 8b8d553..b59cc73 100644 --- a/renderer/renderer.js +++ b/renderer/renderer.js @@ -429,11 +429,11 @@ function handleEvent(p) { case "PostToolUseFailure": // Codex:單一工具失敗不會改變 turn 的狀態(turn 還在跑),寵物維持 running,只給個氣泡 setState(s, "running"); - say(`😵 ${p.toolName || "工具"} 失敗了`, 4000); + say(`😵 ${p.toolName || "工具"} 失敗了`, 4000, false, title); break; case "PermissionRequest": setState(s, "waiting"); - say(`🔐 需要你授權${p.toolName ? `:${p.toolName}` : ""}`, 0, true); + say(`🔐 需要你授權${p.toolName ? `:${p.toolName}` : ""}`, 0, true, title); break; case "Notification": { const t = p.notificationType; @@ -447,7 +447,7 @@ function handleEvent(p) { setState(s, "waiting"); say("❓ 有問題想問你", 0, true, title); } else if (p.message) { - say(`💬 ${p.message}`, 4000); + say(`💬 ${p.message}`, 4000, false, title); } break; } @@ -461,7 +461,7 @@ function handleEvent(p) { case "StopFailure": // Codex:turn 失敗 → failed 狀態(播 failed 3 次後沉澱),維持到下一個 turn 或 1 小時到期 setState(s, "failed"); - say(`❌ ${p.error || "出錯了"}`, 8000); + say(`❌ ${p.error || "出錯了"}`, 8000, false, title); break; case "SubagentStart": case "SubagentStop": @@ -469,13 +469,13 @@ function handleEvent(p) { break; case "PreCompact": setState(s, "running"); - say("🗜️ 整理記憶中…", 3000); + say("🗜️ 整理記憶中…", 3000, false, title); break; case "SessionEnd": sessions.delete(p.sessionId || "default"); if (sessions.size === 0) { hideBubble(); - say("👋 掰掰", 2000); + say("👋 掰掰", 2000, false, title); } break; default: @@ -495,7 +495,7 @@ function handleTest(p) { } else if (anim in PRIORITY) { const s = session("test"); setState(s, anim); - if (anim === "waiting") say("🔐(測試)需要你授權", 0, true); + if (anim === "waiting") say("🔐(測試)需要你授權", 0, true, "動作測試"); else if (anim === "idle") hideBubble(); } report();