Skip to content

Repository files navigation

codex-mk10-bridge

一个面向 Waveshare MK10 的开源 Codex 状态桥接:Mac 负责读取会话和控制,MK10 负责显示、按键与音效。

本项目是非官方社区项目,与 OpenAI、Waveshare 无隶属或背书关系;相关商标归各自所有。

感谢 LINUX DO 社区。

English

当前项目版本:0.29

支持范围

  • 完整链路已在一台原厂 MK10 V2.29(ARMv7/T113)上验证。
  • 设备侧使用 USB CDC 串口,Codex 控制通过 ChatGPT Desktop 本地 IPC,不需要刷固件。
  • Fast、Plan、Compact、Stop、Effort 通过 ChatGPT Desktop 的本地私有 IPC 控制。
  • framebuffer 映射和 Codex IPC 都与版本相关;其他设备必须重新验证。

效果展示

会话状态会在 MK10 本地渲染,Thinking、Input 和 Error 状态持续呼吸:

会话状态与呼吸效果

下排展示 Plan、Fast、Effort,以及 Stop 的运行和双击确认状态:

控制按键状态

任务完成时会播放通知音,并从对应会话键扩散完成涟漪:

完成涟漪效果

实机照片

下面是运行项目版本 0.29 的 Waveshare MK10 实拍图:

运行中的 Waveshare MK10

快速安装

完整的首装、升级、恢复、校准和故障排查流程见 安装指南。下面是最短可复现路径。

1. Mac 主机

依赖:macOS、Xcode Command Line Tools、Go 1.25+、Python 3,以及已登录的 ChatGPT Desktop/Codex。

git clone https://github.com/Rladmsrl/codex-mk10-bridge.git codex-mk10-bridge
cd codex-mk10-bridge
go test ./...
scripts/install-macos.sh --no-start

安装器会构建 mk10-bridge 和 mk10ctl,合并 Hook(保留其他配置),并生成用户级 LaunchAgent。默认不启动,避免设备尚未准备好时反复重启。

2. 新 MK10 设备

先关闭 ScreenKey,给原厂设备上电并查找串口:

go run ./cmd/mk10ctl ports
PORT=/dev/cu.usbmodemXXXX
go run ./cmd/mk10ctl probe --port "$PORT" --protocol legacy --timeout 10s

确认返回的是 V2.29 风格 MK10 后再写入设备。首装脚本会重新构建 ARMv7 二进制、再次探测并按“二进制先、lunch.sh 后”的顺序写入四个文件:

scripts/init-device.sh --port "$PORT"

如果原厂服务不可用,可让脚本预检一个明确的读卡器挂载点并安全弹出:

scripts/init-device.sh --card "/Volumes/REPLACE_WITH_CARD_LABEL" --eject

原厂 legacy 服务不提供远端剩余空间查询;SD 空间接近上限时请使用读卡器模式, 脚本会在写入前拒绝不足的介质。

SD 只用于首装种子;不要刷 MK10_V1.0.img,也不要运行 PhoenixCard。

给 MK10 断电重启,然后验证自定义服务:

go run ./cmd/mk10ctl direct-info --port "$PORT" --timeout 8s
go run ./cmd/mk10ctl direct-version --port "$PORT" --timeout 8s

3. 启动桥接

确认 direct-info、direct-version 和 SHA 校验成功后启动:

scripts/install-macos.sh --start --port "$PORT"
scripts/update-device.sh
tail -f ~/.local/state/mk10-bridge.log

首次启动会使用 /data/mk10-recovery;update-device.sh 会完成空间预检、恢复副本和正常副本的 SHA 校验,以及监督重启。 保持 ChatGPT Desktop 开启并登录。桥接启动时会先静音 MK10 键盘自身的 QMK 键码,然后推送语义状态。 桥接会在连接设备时记录设备二进制版本;桥接运行期间可直接查看:

~/.local/bin/mk10ctl bridge-status
~/.local/bin/mk10ctl bridge-status --json
~/.local/bin/mk10ctl storage-info --json

该命令优先通过桥接的本机控制通道实时查询,失败时读取状态快照,不会抢占 USB 串口。

设备运行期间的版本、显示、音频、文件和重启等管理操作也统一通过这个本机通道执行, 不会再打开第二个 USB 串口;只有首装时的 legacy 探测和引导上传需要桥接尚未运行。

升级

日常升级通过运行中的桥接更新 /data/mk10-recovery 和 /data/mk10-device,不写入空间很小的 SD 分区,也不需要停止桥接:

scripts/update-device.sh

脚本会读取 /data 可用空间,为两次原子暂存各留出空间并额外保留 1 MiB, 逐份写入并回读 SHA,最后慢速确认新版本已经运行。脚本会串行化并发升级;需要保留上一版恢复副本时可加 --skip-recovery,否则脚本会在验证正常服务后同步恢复副本。

首装是一次性的种子部署,不是无操作重复执行;升级支持中断后重试并收敛, 但每次都会生成新的时间戳二进制并重启服务,脚本会串行化并发升级。

deploy-service 会执行原子上传、SHA-256 回读、一次监督重启和慢速版本校验。不要在重启期间高频重连串口。

恢复

如果自定义服务仍可访问,把 device/lunch-restore.sh 写成下一次启动的 lunch.sh 后重启;如果 USB 不可用,用读卡器复制为 lunch.sh 再上电。完整步骤见 安装指南。

开发

go test ./...
go test -race ./...
go vet ./...
go build ./cmd/mk10ctl
scripts/build-device.sh /tmp/mk10-device
go run ./cmd/mk10ctl preview-ui --out /tmp/mk10-preview.jpg

文档

隐私

  • 桥接只从本机读取 Codex 认证、会话和设置文件;需要配额时会使用现有 OAuth 令牌访问 ChatGPT 服务。
  • OAuth 令牌不会写入设备或桥接日志;任务标题、生命周期状态和控制请求会通过 USB 发送到 MK10。
  • 设备不保存网络管理凭据,也不提供网络管理接口;USB 直连协议只应连接可信主机。
  • 项目不包含遥测服务;请在提交问题或日志前移除本地路径、会话内容和网络信息。

About

Codex task-state bridge for Waveshare MK10

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages