僚机 · 第三层
Worker daemon 蓝图 · 这层 OK 就开搭脚手架 · 2026-06-09
01 · 总图
1 个长驻 daemon · 3 个内部组件 · Fries Mac 本机跑 · launchd 守护。
02 · State 表
1 张 SQLite 表 · 重启不丢 · daemon 拉起后续上原状态。
CREATE TABLE thread_state (
thread_idTEXT PKomt_xxx · 飞书话题 ID
card_msg_idTEXTom_xxx · 主会话卡片消息 ID (patch 用)
statusTEXTidle / active / stalled / done
thread_nameTEXT话题首条消息 (":摄影项目") · 卡片标题
last_user_msgTEXT最近 1 条你的消息 · 任务原话
recent_actionsJSON最近 10 条 bot 动作 (tool 名+前 200 字符)
summaryTEXThaiku 上次给的一句话
started_atINTunix · 算耗时
updated_atINTunix · 触发 stalled 判断
);
03 · 5s tick 流程
每 5 秒走一遍 · 只动 status=active 的 thread · 安静的 thread 不调 LLM。
① SCAN
扫 active
SELECT * WHERE status='active'
② BUILD
拼 prompt
last_user_msg
+ recent_actions JSON
≤ 2K tokens
③ ASK
调 haiku
eagle proxy
返 {summary, done}
④ PATCH
改卡片
lark-cli im messages patch
用 card_msg_id
⑤ MARK
写 State
summary 入库
done=true → status=done
+ @dora ping
04 · 失败模式
每条都 graceful · 不丢任务 · launchd 兜底。
长连接断
飞书事件流超时
lark-cli 自带 reconnect · daemon 不退
daemon crash
Python 异常 / OOM
launchd KeepAlive 拉起 · SQLite 续上 active 任务
haiku 超时/限流
5s tick 调失败
本 tick 跳过 · 卡片状态不变 · 下次 tick 再试
卡片 patch 失败
飞书 API 报错
重试 3 次 · 仍失败则 fallback 发新卡 + 更新 card_msg_id
stalled 不收
haiku 一直说 done=false 但其实结束了
5min 无新 bot 动作 → 强制 status=done · @你确认