LIVE 模式改為雙向對話,參考 claudecodeui 的 resume 接力機制

摘要:
側邊面板從單向任務派發升級為聊天室:每則訊息 spawn
claude -p --output-format stream-json,捕捉 session_id 後
下一則自動 --resume 接力,對話得以連續;回覆同步顯示在
聊天串與小人頭上的對話氣泡。

根本原因:
單向 /task 發出後看不到回覆內容,也無法追問;claudecodeui
證明 headless + resume 接力即可實現連續對話,無需常駐 runtime。

影響:
watcher 新增 POST /chat(每專案一個 office thread、busy 檢查、
reset 會終止進行中的執行);SSE 新增 chat_start/chat_text/chat_done。
/task API 保留。已實測兩輪對話,第二輪正確記得第一輪內容。

修法:
- watch.mjs:launchChat 解析 stream-json(init 抓 session_id、
  assistant 文字轉發、result 收尾),chatThreads 記憶 thread
- store:chats Map + chatAppend/chatSetBusy/chatClear
- live.ts:sendChat/resetChat + chat_* 事件對映
- SidePanel:ChatPanel(氣泡串、自動捲底、Enter 送出、新對話)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-20 14:59:19 +08:00
co-authored by Claude Fable 5
parent a967306a2f
commit b12627a9ef
6 changed files with 470 additions and 45 deletions
+13 -1
View File
@@ -55,7 +55,19 @@ session transcript(JSONL),只讀取新增的位元組,轉譯成事件推播給
注意:監看伺服器會讀取本機的 Claude Code 對話記錄(含程式碼與提示詞),
**只綁 127.0.0.1、不要對外開放**;如需團隊共用請自行加上驗證。
### 在辦公室下任務(LIVE 模式)
### 在辦公室對話(LIVE 模式)
點選專案 agent 後,側邊面板是一個**雙向聊天室**(參考 claudecodeui 的做法):
每則訊息 spawn 一次 `claude -p --output-format stream-json`,從輸出捕捉
`session_id`,下一則自動 `--resume` 接力 — 對話因此能連續。回覆會同時
顯示在聊天串和小人頭上的對話氣泡;執行過程(思考/工具)即時演在辦公室。
- 「接續專案最近 session」:第一句改從該專案最近一段已結束的 session 接續
- 「🔄 新對話」:清空 office 對話串(會終止進行中的執行)
- 事件:`POST /chat` → SSE 廣播 `chat_start` / `chat_text` / `chat_done`
- 同專案一次只跑一則;仍無法插入終端機正在進行中的互動對話
### 在辦公室下任務(API)
點選任一專案 agent,側邊面板會出現任務輸入框 —「🚀 派發任務」會透過
`POST /task` 讓監看伺服器在該專案目錄 spawn 一個 headless session: