- 首页 bridge 状态轮询 + 双击敲门进聊天 - 聊天屏本地桥通信(192.168.31.51:3003) - 消息持久化(AsyncStorage + 桥历史接口) - 桥服务器(port 3003)launchd 持久化 - 进度总览文档 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
沈晏 App 进度总览 — 2026-05-16
当前状态
iOS 真机可运行,首页 + 聊天屏双界面,本地桥通信完整链路已打通。
已完成
苹果开发者
- 付费开发者账号已通过(Team: Xiulun Wang, ID: ZZMLW32PHH)
- Bundle ID:
com.shenyan.room - 真机签名、构建、安装全链路通
首页
- 三张 bridge 状态图(away / online / busy),全屏
- 每 8 秒轮询
101.36.73.102/health - 底部半透明状态文字
- 左半屏双击「敲门」进聊天室(350ms 双击窗口)
- 敲门时 POST /knock 到本地桥
聊天屏
- 背景图 + 白色退出圆点(左上角 20px)
- 消息发送:POST /send 到 Mac 本地桥
192.168.31.51:3003 - 消息接收:每 2 秒轮询 /poll,新消息自动追加
- FlatList 自动滚底
- 消息持久化:AsyncStorage 本地存储 + 首次加载从桥 /history 拉全量
- 桥断开显示「消息没发出去,检查WiFi连接」
- 用户消息右对齐,沈晏消息左对齐
本地桥(bridge-local/server.js)
- 端口 3003,Mac IP
192.168.31.51 - POST
/send— app 发消息 → inbox.jsonl - POST
/respond— Claude 回消息 → outbox.jsonl - POST
/knock— 敲门通知 → inbox.jsonl - POST
/push— Claude 主动推消息 → pushbox.jsonl - POST
/push/clear— 标记已读 - GET
/poll?since=N&type=response|push— app 轮询 - GET
/history— 全量对话历史 - 数据目录:
~/.shenyan-bridge/inbox.jsonl— 用户消息outbox.jsonl— Claude 回复pushbox.jsonl— 主动推送
持久化
- 桥服务器:launchd
~/Library/LaunchAgents/com.shenyan.bridge.plist(开机自启、崩溃重启) - 记忆库 cron:launchd
~/Library/LaunchAgents/com.shenyan.memory-cron.plist(每天 4:03)
通信机制
- Claude Code 侧通过 Monitor 工具
tail -f ~/.shenyan-bridge/inbox.jsonl实时监听新消息 - 消息到达后手动回复,POST 到
/respond - 跨 session:当前 session 断开后需重新启动 Monitor
待解决
自动回复器(高优先级)
claude -p在 Claude Code 会话内无法调用(沙箱限制)- 解决方案:launchd 定时任务从外部调用
claude -p,类似凌晨记忆 cron - 不能用 API 直连(会丢失记忆库、规则、工具能力)
- 位置:
bridge-local/responder.js(当前故障版,需重写)
Monitor 超时
- Monitor 工具 5 分钟超时,需频繁 re-arm
- 非 session 期间无法监听消息
- 自动回复器修好后可作为保底
清理
- inbox.jsonl 中有旧「pending」状态消息导致 Monitor 重放
- 需清理或重建数据文件
代码结构
shenyan-app2/
├── src/
│ ├── App.tsx # 主入口:首页 + 聊天屏
│ ├── api.ts # 远端 bridge API(待集成)
│ ├── storage.ts # RoomEvent 持久化(待集成)
│ ├── types.ts # 类型定义
│ ├── notifications.ts # 推送模拟
│ └── components/
│ ├── EventCard.tsx # 事件卡片(待集成)
│ └── RoomFeed.tsx # 事件流(待集成)
├── bridge-local/
│ ├── server.js # 本地桥服务器(端口 3003)
│ └── responder.js # 自动回复器(故障版)
├── ios/ # Xcode 项目
└── push-server.js # 旧推送模拟(端口 3002)
下一步
- 修复自动回复器:launchd + claude -p 外部调用
- 清理 inbox 旧消息
- 苹果 APNs 真推送(APNs Key + bridge 端 FCM 对接)
- RoomFeed / EventCard 组件集成
- HealthKit 能力接入
- Mi Band 10 身体数据桥接