摘要: 氣泡上方加一行標題(/rename 設的對話名稱,沒設就用專案資料夾名),訊息移到第二行。 根本原因: 原本把專案名以「(專案名)」的形式接在訊息尾巴,訊息本身就短, 加了括號後更容易被氣泡的單行省略號截掉,而且同時開多個 session 時 要看到最後才知道是哪一個在叫你。 影響: 多 session 並行時不容易分辨氣泡是哪個專案發出的;訊息也被括號擠掉。 修法: - index.html 氣泡內加 #bubble-title;style.css 把單行限制從 #bubble 移到 #bubble-title 與 #bubble-text 各自身上,兩行各自省略, 並以 :empty 讓沒有標題時整行收起來,不留空白。 - say() 增加第四個參數 title,事件處理處的八個呼叫點改傳標題、移除 suffix。 - main.js 的 latestNarration 改名為 readTranscript,同一次反向掃描同時取出 助理說明與 custom-title(/rename 會把它寫進 transcript),兩者都拿到就提早結束; 收到事件時把 sessionTitle 一併併進 payload。 - 標題優先序:對話名稱 > 專案資料夾名 > 不顯示。 驗證: - 單元測試以真實 transcript 執行 readTranscript:取到對話名稱 "claude-pet"、 同時取到助理說明、快取一致、路徑不存在或為 null 時回 null,6 項全過。 - 實機截圖確認兩行版面正確。截圖當下剛好收到另一個 session 的真實事件, 標題顯示 "telegram-codex-bot"、第二行是該 session 的助理說明, 等於用實際流量驗證了多 session 下的標題辨識。 - 以 ELECTRON_RUN_AS_NODE 讀打包後 app.asar,確認版本 2.0.5 與十項改動都在出貨檔案裡, 包含舊的 suffix 已完全移除。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
85 lines
1.5 KiB
CSS
85 lines
1.5 KiB
CSS
html, body {
|
|
margin: 0;
|
|
height: 100%;
|
|
background: transparent;
|
|
overflow: hidden;
|
|
user-select: none;
|
|
-webkit-user-select: none;
|
|
cursor: default;
|
|
font-family: "Segoe UI", "Microsoft JhengHei", "PingFang TC", system-ui, sans-serif;
|
|
}
|
|
|
|
#stage {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: flex-end;
|
|
padding-bottom: 8px;
|
|
}
|
|
|
|
#bubble {
|
|
position: relative;
|
|
max-width: calc(100% - 12px);
|
|
margin-bottom: 10px;
|
|
padding: 6px 11px;
|
|
background: rgba(255, 255, 255, 0.97);
|
|
color: #222;
|
|
border-radius: 12px;
|
|
font-size: 13px;
|
|
line-height: 1.35;
|
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.28);
|
|
overflow: hidden;
|
|
transition: opacity 0.18s ease, transform 0.18s ease;
|
|
cursor: pointer;
|
|
}
|
|
|
|
/* 標題與內文各自佔一行,各自省略;沒有標題時整行收起來 */
|
|
#bubble-title,
|
|
#bubble-text {
|
|
display: block;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
#bubble-title {
|
|
font-size: 11px;
|
|
line-height: 1.3;
|
|
color: #6b7280;
|
|
}
|
|
|
|
#bubble-title:empty {
|
|
display: none;
|
|
}
|
|
|
|
#bubble::after {
|
|
content: "";
|
|
position: absolute;
|
|
left: 50%;
|
|
bottom: -6px;
|
|
transform: translateX(-50%);
|
|
border: 6px solid transparent;
|
|
border-top-color: rgba(255, 255, 255, 0.97);
|
|
border-bottom: 0;
|
|
}
|
|
|
|
#bubble.hidden {
|
|
opacity: 0;
|
|
transform: translateY(4px);
|
|
pointer-events: none;
|
|
}
|
|
|
|
#sprite {
|
|
display: block;
|
|
}
|
|
|
|
#sprite.grab {
|
|
cursor: grab;
|
|
}
|
|
|
|
#sprite.grabbing {
|
|
cursor: grabbing;
|
|
}
|