WebSocket durable cursor 最小骨架

这页先把 cursor 记录从“只在请求里带一次”推进到“最小 runtime-store 可回读”的状态。

当前先把 cursor 记录 / 事件回读 / resumeMode 串起来,让实时链开始有最小“回到上次位置”的语义。

当前最小 cursor 语义

先把 cursor store、事件回读和 resumeMode 说清楚。

GET /api/coach/event-cursors:查看当前 viewer_role / viewer_token / channel 的最小游标记录
POST /api/coach/event-cursors:补 last_cursor / last_event_id / last_event_at
GET /api/coach/events:如果请求没带 cursor,会尝试回读 runtime-store 里的游标
resumeMode:当前会在 fresh-subscribe / cursor-replay / stored-cursor-replay 间切换
cursorSource:当前会标记 request / runtime-store / none

执行边界

这层已经开始可回读游标,但仍不是完整实时恢复系统。

这层是最小 durable cursor 骨架,但当前仍是 in-memory runtime,不是正式持久化游标系统。
先把游标记录和事件订阅重新接上,让“断开再回来”至少有一套稳定语言和最小记录。
后面如果继续推进,再补真正 durable store、客户端恢复策略和 token 刷新链。