← 返回会话

task.txt

2.7 KB · 纯文本展示
Phase 7:修好「进行中不显示 / 不实时 / 刷新也不出新会话」。目录:~/grok-cc-task/cc-live-monitor/

## 用户现象
1. 正在跑的会话侧栏/详情没有「进行中」实时感(没有流式更新)。
2. 去做别的工作后,网页怎么刷新也看不到新会话。

## 根因(已核实,按这个改)
A. `run.live` 现在几乎只靠 `~/grok-cc-task/.browser.lock`(pid 活着 + 目录名后缀匹配)。锁被清掉、或非 run.sh 启动时,即使 `stream.*.jsonl` 还在涨,也不标运行中,SSE 也不会挂上。
B. 首页侧栏是服务端渲染的静态 HTML,没有轮询;只有用户整页刷新才重扫。且监控**只看** `~/grok-cc-task/runs/`(run.sh 产出)。Claude 桌面 App / Codex App 直开的对话本来就不会出现——这次先把 run.sh 路径做对,并在页脚加一行说明。

## 要做的改动(最小改动,别推倒)
1. **扩大 live 判定**(`runs_data.py` `build_run`):
   - 保留现有 lock 判定。
   - 新增兜底:若 `runner.log` 尚无 `done rc=` / `exit rc=`(或 state 仍是 unfinished/unknown/queued),且任一 `stream*.jsonl`(或 codex jsonl)的 mtime 在最近 **90 秒**内有更新 → `live=True`,`status=运行中`,`state=running`。
   - 锁判定优先;不要把两小时已中断的又标成运行中。
2. **侧栏自动刷新**(首页 + 详情页左侧):
   - 新增轻量接口,例如 `GET /api/sidebar`(或 `/partial/sidebar`)返回侧栏 HTML 片段或 JSON(id/title/status/severity/live/mtime),每 **4–5 秒**用 fetch 拉一次;有变化才替换 `.side-list`(保留当前选中高亮与滚动位置)。
   - 详情页打开时若该 run 变为 live,提示「已开始实时」或自动连 SSE(若尚未连接)。
3. **SSE**:确认 `run.live` 为真时详情页挂 EventSource;流式草稿气泡 + 光标逻辑保持。若 nginx 路径访问,响应头继续禁止 buffering(`X-Accel-Buffering: no`, `Cache-Control: no-cache`)。
4. 页脚/侧栏底部加一行小字:`只显示 run.sh 写入 ~/grok-cc-task/runs 的会话;Claude/Codex 桌面 App 直开会看不到。`
5. 改完**重启** 8787 上的 monitor(先杀旧 Python 监听 8787,再按 README/现有方式启动,HOST 保持 0.0.0.0:8787)。
6. 自测:
   - 用 python 写一个临时假 run 目录:不断往 stream.1.jsonl append 几行假 stream-json,确认侧栏出现「运行中」且详情 SSE 有增量(测完删掉假目录)。
   - 或跑现有 selftest 里能覆盖 live 的部分并补一条。
7. 更新 PROGRESS.md「Phase 7 — 完成」:写清改了啥、怎么验收。

做完停住等我。不要改 run.sh,不要加无关功能。