Commit Graph

39 Commits

Author SHA1 Message Date
Lyon 9574e2b514 feat: PJ2026-0104010803 P3 后端读侧推理清零 - session list + metric status 只读 projection (#1757)
server-workbench-http.ts:
- sessionListProjectionOptions: 当 session snapshot 已有 durable projection 字段
  (projectionStatus/terminal/sealedAt) 时,直接使用 projection 字段构建 turn projection,
  不再从 compactSessionTraceResult/compactSessionTraceSnapshot 多来源混合
- recordWorkbenchProjectionMetric: status 只读 projection.status,不再 fallback 到
  result?.status ?? trace?.status;source 固定为 workbench_read_model
- SPEC header 更新到 draft-2026-06-20-p3-read-side-zero

workbench-turn-projection.ts:
- SPEC header 更新到 draft-2026-06-20-p1-zero-split-durable-realtime

Closes #1749
Refs #1742
2026-06-20 19:34:52 +08:00
Lyon 7c5a1f8c5b feat: PJ2026-0104010803 P2 SSE/realtime 无状态化 - durable outbox cursor replay (#1756)
server-workbench-http.ts:
- handleWorkbenchRealtimeHttp 优先从 durable outbox 读取 (readWorkbenchProjectionOutbox)
- 当 runtimeStore 支持 outbox 时,SSE 用 polling cursor replay 代替 traceStore.subscribe
- outbox 不支持时保留内存 traceStore.subscribe 作为兼容降级
- terminal commit 从 outbox terminal 行触发 snapshot + trace realtime
- 新增 HWLAB_WORKBENCH_SSE_OUTBOX_POLL_MS 环境变量控制 poll 间隔

workbench-facts-store.ts:
- 新增 subscribeDurableProjection 方法,从 durable outbox polling 读取
- subscribeTrace 保留兼容(内存 trace),新增 durable projection subscription 入口
- SPEC header 更新到 draft-2026-06-20-p1-zero-split-durable-realtime

cloud-api 重启后 SSE 从 DB outbox cursor 继续输出,不依赖内存 listener

Closes #1748
Refs #1742
2026-06-20 19:31:49 +08:00
lyon 11e2f08e70 fix: order workbench sessions by updated desc 2026-06-20 15:36:41 +08:00
lyon 03942afc5c fix: 收敛 workbench 消息头 timing 投影 2026-06-20 14:54:04 +08:00
lyon 4a9498d720 fix(workbench): expose code agent timing metadata 2026-06-20 13:55:57 +08:00
lyon 6468263672 fix: thin workbench session list projection 2026-06-20 13:24:49 +08:00
Lyon acd9831149 Fix workbench trace projection authority (#1696) 2026-06-20 12:47:18 +08:00
lyon c9028519ca fix: overlap workbench session include query 2026-06-20 12:01:30 +08:00
lyon 793f0f39a4 fix: use projected trace cursor as workbench authority 2026-06-20 10:55:11 +08:00
Lyon f637f32631 fix: parallelize workbench read-model fact reads (#1680) 2026-06-20 10:29:00 +08:00
Lyon 57ba729fca fix: reduce workbench read-model fact scans (#1676) 2026-06-20 10:02:38 +08:00
lyon 4e64058614 feat: read workbench get from durable facts 2026-06-20 09:15:59 +08:00
lyon 8f9bdbd5fd fix: harden workbench trace timeout observability 2026-06-20 01:16:45 +08:00
lyon 638509bcf1 fix: use compact workbench session summaries 2026-06-19 23:39:54 +08:00
lyon 7544b52c27 fix: reduce workbench session list load 2026-06-19 21:52:42 +08:00
lyon 02989a8237 fix: preserve workbench message whitespace 2026-06-19 15:40:12 +08:00
lyon d4ead4d0f1 fix: normalize workbench trace event page cursors 2026-06-19 14:59:58 +08:00
lyon cd6ee0e6f0 fix: correct workbench projection lag metrics 2026-06-19 14:36:46 +08:00
lyon d2964d93a9 fix: resume workbench agentrun projection 2026-06-19 12:46:43 +08:00
Lyon 0169125f8f feat: add workbench projection performance metrics (#1592) 2026-06-19 11:13:26 +08:00
lyon 88112c415f fix: surface workbench projection diagnostics 2026-06-19 11:04:37 +08:00
lyon e5994d8af1 fix(workbench): use single turn projection authority 2026-06-19 04:18:25 +08:00
lyon 111b2b468a fix(workbench): recover session status from durable trace 2026-06-19 01:44:59 +08:00
lyon e444f4d80d feat(workbench): paginate session rail history 2026-06-19 01:34:43 +08:00
lyon 5a1f46a8b8 fix(workbench): prefer terminal turn result for session status 2026-06-19 01:12:26 +08:00
lyon c8489f6246 fix(workbench): guard cross-session realtime projection 2026-06-19 00:24:30 +08:00
lyon d0eb94ae6a fix: add Workbench projection read model 2026-06-18 23:17:58 +08:00
lyon 4b0e6480d5 fix: project workbench status from current turn 2026-06-18 20:15:44 +08:00
lyon 7b5261e407 fix: converge workbench terminal projection 2026-06-18 19:34:42 +08:00
lyon 7edb2b72b4 fix: project running trace into session summary 2026-06-18 18:15:05 +08:00
lyon e46ff7e1eb fix: expose workbench message text 2026-06-18 17:59:46 +08:00
lyon dd01f47951 fix: converge workbench session state projection 2026-06-18 15:55:18 +08:00
lyon 08b2e3077a fix: converge workbench session authority 2026-06-18 15:24:16 +08:00
lyon 261515a39e fix: make workbench session api project optional 2026-06-18 11:45:51 +08:00
lyon 6a313e9ee8 fix(workbench): unify session authority for reload deletion and mobile actions 2026-06-18 10:34:24 +08:00
lyon 41d6407ab2 feat: add backend performance metrics 2026-06-17 18:22:30 +08:00
lyon 837d57dd5a feat(workbench): add realtime event stream 2026-06-17 13:30:40 +08:00
lyon 4500fb6486 feat(workbench): 持久化 Code Agent trace 投影 2026-06-17 11:58:07 +08:00
lyon bc9ee41d83 feat(workbench): add read-only API read model 2026-06-17 11:12:04 +08:00