这是什么
Wingman 是后端 daemon: 三路 source(HermesSource 监听 sqlite / PiSource 监听 pi event / CCSource 走 mcp-bridge HTTP), 都进 HaikuSummarizer 5s 节流抽人话, 出口分两路: ① LarkNotifier 在原话题 reply-in-thread 发"✅ 完成"卡 ② Web Pipeline 推给驾驶舱前端。 Cockpit 是前端 + 桌面 + npm 监控包: FastAPI 单文件 + 暖米色 watchtower 样式, monorepo 6 包(server / console / daemon / shared / ...)。
解决什么问题
6/9 立项时本想做飞书卡片刷屏式通知, 当天就发现两个根本问题: ① 飞书卡片单条体验差、刷屏严重 ② 状态不一致(卡片是快照, 改了不更新, 用户翻第 30 个就乱)。 转向后定了原则: 飞书只发"完成一行卡"当快讯, 完整任务态全部去 Web 驾驶舱看。两种交互拆开, 不混在一个媒介里。 所以你看到的是 — 飞书话题里安静极简,只在 done 时跳一行;驾驶舱永远是 4 格统计 + 三段卡片墙, 始终能一屏看完全部。
架构 · 6/13 三段式重构后
6/13 一天 4 commits 把旧 daemon/worker.py + shared/bridge.py + web/pi_summarizer.py 全删, 按职责分三层。同时 fix(arch): Pi/CC 事件不再写 Hermes 的 SQLite — 三个 source 的数据所有权完全独立, 看板和主控状态库再不撞车。
HermesSource · PiSource · CCSource
HermesSource 监听 ~/.hermes/state.db 新消息;PiSource 监听 Pi long-task events;CCSource 走 mcp-bridge HTTP API (/api/sessions/all + per-task recent_events)。每路独立, 数据落各自 DB 不交叉。
HaikuSummarizer
原始 event 流(可能每秒数十条 tool_call / partial_reply)直接看人脑爆炸。Haiku 5s 节流挡一层, 每窗口出"在干什么 + 等什么 + 卡哪了"三段。HaikuResult 用 frozen + slots 优化, 中转网关 fallback。
LarkNotifier + Web Pipeline
同一份摘要分两路出: ① LarkNotifier 在原话题 reply-in-thread 发 "✅ 完成 · X分Y秒 · summary";per-target lark_home 让 shared daemon 用调用方身份发。② Web Pipeline 推驾驶舱前端, 三段式分组实时刷新。
关键里程碑
挑出 6/9 → 6/14 真正改方向的节点, 跳过日常 commit 和小修。
/api/respond 走 lark-cli --as user 代发, 8 cases 全过)。@ccpark/daemon 真 wrap claude CLI;persist relay state in sqlite (better-sqlite3);console terminal-native redesign(design system + key pages);render markdown in agent replies。format_offset_prefix / dialog_line。