|
|
@@ -1,17 +1,45 @@
|
|
|
-# OpenCode Monitor
|
|
|
+# AI Status Light
|
|
|
|
|
|
-OpenCode 状态监控工具,支持实时监控多个 OpenCode 实例的状态,通过 MQTT 或 BLE 蓝牙推送状态信息。
|
|
|
+AI 编程工具状态灯,支持 OpenCode、Claude Code、Codex 等工具,通过 MQTT 或 BLE 蓝牙推送状态到硬件灯。
|
|
|
|
|
|
## 功能特性
|
|
|
|
|
|
-- 🔍 **自动发现** - 自动扫描并发现运行中的 OpenCode 实例
|
|
|
-- 📊 **实时监控** - 通过 SSE 事件流实时获取状态变化
|
|
|
+- 🔌 **多工具支持** - 支持 OpenCode、Claude Code、Codex
|
|
|
- 📡 **MQTT 推送** - 支持将状态信息推送到 MQTT Broker
|
|
|
- 🟢 **BLE 蓝牙推送** - 通过蓝牙将状态推送到 [AI-Light](firmware/) 等 BLE 设备
|
|
|
- 💾 **配置管理** - 使用 SQLite 存储 MQTT 和 BLE 配置
|
|
|
- 🌐 **HTTP API** - 提供 RESTful API 接口管理配置(详见 [API 文档](docs/api.md))
|
|
|
- 🔌 **WebSocket** - 支持通过 WebSocket 实时推送状态到网页(详见 [API 文档](docs/api.md))
|
|
|
-- 🖥️ **跨平台** - 支持 Linux、Windows
|
|
|
+- 🖥️ **跨平台** - 支持 Linux、Windows、macOS
|
|
|
+
|
|
|
+## 架构
|
|
|
+
|
|
|
+```
|
|
|
+┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
|
+│ OpenCode │ │ Claude Code │ │ Codex │
|
|
|
+│ (插件) │ │ (HTTP Hook) │ │ (Command Hook) │
|
|
|
+└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
|
|
|
+ │ │ │
|
|
|
+ └───────────────────────┼───────────────────────┘
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+ ┌─────────────────────────┐
|
|
|
+ │ AI Status Light │
|
|
|
+ │ (API 服务) │
|
|
|
+ └────────────┬────────────┘
|
|
|
+ │
|
|
|
+ ┌────────────┴────────────┐
|
|
|
+ │ │
|
|
|
+ ▼ ▼
|
|
|
+ ┌───────────────┐ ┌───────────────┐
|
|
|
+ │ MQTT │ │ BLE │
|
|
|
+ └───────┬───────┘ └───────┬───────┘
|
|
|
+ │ │
|
|
|
+ ▼ ▼
|
|
|
+ ┌───────────────┐ ┌───────────────┐
|
|
|
+ │ 硬件灯 │ │ 硬件灯 │
|
|
|
+ └───────────────┘ └───────────────┘
|
|
|
+```
|
|
|
|
|
|
## 安装
|
|
|
|
|
|
@@ -19,208 +47,222 @@ OpenCode 状态监控工具,支持实时监控多个 OpenCode 实例的状态
|
|
|
|
|
|
从 `dist/` 目录下载对应平台的可执行文件:
|
|
|
|
|
|
-- `opencode-monitor-linux-amd64` - Linux x86_64
|
|
|
-- `opencode-monitor-linux-arm64` - Linux ARM64
|
|
|
-- `opencode-monitor-windows-amd64.exe` - Windows x86_64
|
|
|
-- `opencode-monitor-windows-arm64.exe` - Windows ARM64
|
|
|
+- `ai-status-light-linux-amd64` - Linux x86_64
|
|
|
+- `ai-status-light-linux-arm64` - Linux ARM64
|
|
|
+- `ai-status-light-windows-amd64.exe` - Windows x86_64
|
|
|
+- `ai-status-light-darwin-arm64` - macOS Apple Silicon
|
|
|
|
|
|
### 从源码编译
|
|
|
|
|
|
```bash
|
|
|
# 克隆项目
|
|
|
git clone <repository-url>
|
|
|
-cd AI-Status-Light
|
|
|
+cd ai-status-light
|
|
|
|
|
|
# 当前平台(不含 BLE)
|
|
|
-go build -o bin/opencode-monitor ./cmd/monitor
|
|
|
+go build -o bin/ai-status-light ./cmd/monitor
|
|
|
|
|
|
# 当前平台(含 BLE 嵌入)
|
|
|
-scripts\build.bat --ble # Windows
|
|
|
-bash scripts/build.sh --ble # Linux/macOS
|
|
|
-
|
|
|
-# 仅打包 BLE 中继(供 IDE 调试用)
|
|
|
-scripts\build.bat --only-ble
|
|
|
+scripts/build.sh --ble # Linux/macOS
|
|
|
+scripts\build.bat --ble # Windows
|
|
|
|
|
|
-# 所有平台(不含 BLE)
|
|
|
-scripts\build.bat
|
|
|
+# 所有平台
|
|
|
+scripts/build.sh
|
|
|
```
|
|
|
|
|
|
## 使用方法
|
|
|
|
|
|
-### 启动监控
|
|
|
+### 1. 启动服务
|
|
|
|
|
|
```bash
|
|
|
-# 自动发现并监控所有 OpenCode 实例
|
|
|
-./opencode-monitor monitor
|
|
|
-
|
|
|
-# 监控指定端口
|
|
|
-./opencode-monitor monitor --ports 4096,4097
|
|
|
+# 启动 API 服务
|
|
|
+./ai-status-light serve --addr :8045
|
|
|
|
|
|
-# 启动监控 + API 服务 + WebSocket 实时状态页面
|
|
|
-./opencode-monitor monitor --api-addr :8080
|
|
|
+# 启动服务并启用 HTTPS
|
|
|
+./ai-status-light serve --addr :8045 --tls
|
|
|
```
|
|
|
|
|
|
-启动监控服务后,访问 `http://localhost:8080` 即可查看实时状态页面。
|
|
|
-
|
|
|
-### API 服务
|
|
|
+### 2. 安装 Hooks
|
|
|
|
|
|
```bash
|
|
|
-# 启动独立的 API 服务
|
|
|
-./opencode-monitor serve --addr :8080
|
|
|
-```
|
|
|
-
|
|
|
-API 接口详情请参阅 [API 文档](docs/api.md)。
|
|
|
+# 一键安装所有 hooks(OpenCode、Claude Code、Codex)
|
|
|
+./hooks/install.sh
|
|
|
|
|
|
-### 配置管理
|
|
|
+# 单独安装
|
|
|
+./hooks/install.sh --opencode
|
|
|
+./hooks/install.sh --claude
|
|
|
+./hooks/install.sh --codex
|
|
|
|
|
|
-```bash
|
|
|
-# 查看 MQTT 配置
|
|
|
-./opencode-monitor config list
|
|
|
+# 自定义服务地址
|
|
|
+STATUS_LIGHT_URL=http://192.168.1.100:8045 ./hooks/install.sh
|
|
|
+```
|
|
|
|
|
|
-# 设置 MQTT 配置(无认证)
|
|
|
-./opencode-monitor config set --broker tcp://127.0.0.1:1883 --topic opencode/status
|
|
|
+### 3. 配置推送目标
|
|
|
|
|
|
-# 设置 MQTT 配置(带认证)
|
|
|
-./opencode-monitor config set --broker tcp://127.0.0.1:1883 --username user --password pass --topic opencode/status
|
|
|
+```bash
|
|
|
+# 配置 MQTT
|
|
|
+./ai-status-light config set --broker tcp://192.168.1.100:1883 --topic opencode/status
|
|
|
|
|
|
-# 删除配置
|
|
|
-./opencode-monitor config delete 1
|
|
|
+# 配置 BLE
|
|
|
+./ai-status-light config ble set --device AI-Light --service-uuid "b8b7e001-..." --char-uuid "b8b7e002-..."
|
|
|
```
|
|
|
|
|
|
-### BLE 蓝牙配置
|
|
|
+### 4. 使用 AI 工具
|
|
|
|
|
|
-BLE 中继已嵌入 Go 二进制(使用 `make build-with-ble` 构建时),无需额外文件或 Python 环境。
|
|
|
+启动服务并安装 hooks 后,正常使用 OpenCode、Claude Code 或 Codex,灯会自动响应状态变化。
|
|
|
|
|
|
-```bash
|
|
|
-# 查看 BLE 配置
|
|
|
-./opencode-monitor config ble list
|
|
|
+## Hooks 配置
|
|
|
|
|
|
-# 设置 BLE 配置(使用默认设备 AI-Light)
|
|
|
-./opencode-monitor config ble set
|
|
|
+### OpenCode
|
|
|
|
|
|
-# 设置 BLE 配置(自定义设备)
|
|
|
-./opencode-monitor config ble set --device MyLight --service-uuid "xxx" --char-uuid "yyy"
|
|
|
+插件文件:`~/.config/opencode/plugins/status-light.ts`
|
|
|
+配置文件:`~/.config/opencode/status-light.json`
|
|
|
|
|
|
-# 删除 BLE 配置
|
|
|
-./opencode-monitor config ble delete 1
|
|
|
+```json
|
|
|
+{
|
|
|
+ "serviceUrl": "http://localhost:8045"
|
|
|
+}
|
|
|
```
|
|
|
|
|
|
-启动监控时,如果存在启用的 BLE 配置,会自动启动蓝牙中继:
|
|
|
+### Claude Code
|
|
|
|
|
|
-```bash
|
|
|
-# 启动监控(自动根据配置启用 MQTT 和/或 BLE)
|
|
|
-./opencode-monitor monitor --api-addr :8080
|
|
|
+配置文件:`~/.claude/settings.json`
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "hooks": {
|
|
|
+ "Stop": [
|
|
|
+ {
|
|
|
+ "hooks": [
|
|
|
+ {
|
|
|
+ "type": "http",
|
|
|
+ "url": "http://localhost:8045/api/event",
|
|
|
+ "async": true
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "PostToolUse": [
|
|
|
+ {
|
|
|
+ "matcher": "Bash|Edit|Write",
|
|
|
+ "hooks": [
|
|
|
+ {
|
|
|
+ "type": "http",
|
|
|
+ "url": "http://localhost:8045/api/event",
|
|
|
+ "async": true
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
```
|
|
|
|
|
|
-## MQTT 消息格式
|
|
|
+### Codex
|
|
|
|
|
|
-消息格式为 JSON:
|
|
|
+配置文件:`~/.codex/hooks.json`
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
- "port": 4096,
|
|
|
- "status": "工作中",
|
|
|
- "code": "busy",
|
|
|
- "timestamp": "2026-06-03T14:30:00Z"
|
|
|
+ "hooks": {
|
|
|
+ "Stop": [
|
|
|
+ {
|
|
|
+ "hooks": [
|
|
|
+ {
|
|
|
+ "type": "command",
|
|
|
+ "command": "curl -s -X POST http://localhost:8045/api/event -d '{\"code\":\"idle\"}' &"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-### 推送的状态类型
|
|
|
+## API 接口
|
|
|
|
|
|
-| status | code | 说明 |
|
|
|
-|--------|------|------|
|
|
|
-| 空闲 | idle | 会话空闲 |
|
|
|
-| 工作中 | busy | 会话工作中 |
|
|
|
-| 重试中 | retry | 会话重试中 |
|
|
|
-| 修改中 | pending | 会话修改中 |
|
|
|
-| 思考中 | reasoning | 模型推理中 |
|
|
|
-| 使用工具中 | using_tool | AI 正在使用工具 |
|
|
|
-| 等待中 | pending | 工具等待执行 |
|
|
|
-| 运行中 | running | 工具执行中(可附带工具名,如 `运行中: read`) |
|
|
|
-| 工具执行完成 | completed | 工具执行完成(可附带工具名,如 `工具执行完成: read`) |
|
|
|
-| 会话完成 | session_completed | 会话执行完成 |
|
|
|
-| 等待权限 | permission | AI 向用户申请权限 |
|
|
|
-| 错误 | error | 会话错误 |
|
|
|
+### 接收事件
|
|
|
|
|
|
-## 命令行参数
|
|
|
+```
|
|
|
+POST /api/event
|
|
|
+Content-Type: application/json
|
|
|
|
|
|
-### monitor 命令
|
|
|
+{
|
|
|
+ "code": "busy",
|
|
|
+ "source": "opencode"
|
|
|
+}
|
|
|
+```
|
|
|
|
|
|
-```bash
|
|
|
-./opencode-monitor monitor [选项]
|
|
|
+### 状态码说明
|
|
|
|
|
|
-选项:
|
|
|
- --host string 主机地址 (默认 "127.0.0.1")
|
|
|
- --ports string 端口列表,逗号分隔 (如: 4096,4097,4098)
|
|
|
- --scan string 扫描端口范围 (如: 4096-4100)
|
|
|
- --interval int 动态扫描间隔(秒) (默认 5)
|
|
|
- --db string 数据库路径 (默认 "./data/config.db")
|
|
|
- --api-addr string API 服务地址 (如: :8080)
|
|
|
-```
|
|
|
+| code | 说明 |
|
|
|
+|------|------|
|
|
|
+| idle | 空闲 |
|
|
|
+| busy | 工作中 |
|
|
|
+| reasoning | 思考中 |
|
|
|
+| using_tool | 使用工具中 |
|
|
|
+| permission | 等待权限 |
|
|
|
+| error | 错误 |
|
|
|
+| init | 初始化 |
|
|
|
+
|
|
|
+更多 API 接口详见 [API 文档](docs/api.md)。
|
|
|
+
|
|
|
+## 命令行参数
|
|
|
|
|
|
### serve 命令
|
|
|
|
|
|
```bash
|
|
|
-./opencode-monitor serve [选项]
|
|
|
+./ai-status-light serve [选项]
|
|
|
|
|
|
选项:
|
|
|
- --addr string 监听地址 (默认 ":8080")
|
|
|
- --db string 数据库路径 (默认 "./data/config.db")
|
|
|
+ --addr string 监听地址 (默认 ":8080")
|
|
|
+ --db string 数据库路径 (默认 "./data/config.db")
|
|
|
+ --tls 启用 HTTPS
|
|
|
+ --tls-cert string TLS 证书文件路径
|
|
|
+ --tls-key string TLS 私钥文件路径
|
|
|
+ --log-file string 日志文件路径
|
|
|
+ --log-level string 日志级别 (debug/info/warn/error)
|
|
|
```
|
|
|
|
|
|
-### config set 命令
|
|
|
+### config 命令
|
|
|
|
|
|
```bash
|
|
|
-./opencode-monitor config set [选项]
|
|
|
-
|
|
|
-选项:
|
|
|
- --broker MQTT Broker 地址 (必填)
|
|
|
- --client-id MQTT 客户端 ID (默认 "opencode-monitor")
|
|
|
- --username MQTT 用户名
|
|
|
- --password MQTT 密码
|
|
|
- --topic MQTT 主题 (默认 "opencode/status")
|
|
|
- --enabled 是否启用 (true/false, 默认 true)
|
|
|
- --db 数据库路径 (默认 "./data/config.db")
|
|
|
-```
|
|
|
+# 查看 MQTT 配置
|
|
|
+./ai-status-light config list
|
|
|
|
|
|
-### config ble set 命令
|
|
|
+# 设置 MQTT 配置
|
|
|
+./ai-status-light config set --broker tcp://127.0.0.1:1883 --topic opencode/status
|
|
|
|
|
|
-```bash
|
|
|
-./opencode-monitor config ble set [选项]
|
|
|
+# 查看 BLE 配置
|
|
|
+./ai-status-light config ble list
|
|
|
|
|
|
-选项:
|
|
|
- --device 蓝牙设备名称 (必填)
|
|
|
- --service-uuid BLE 服务 UUID (必填)
|
|
|
- --char-uuid BLE 特征 UUID (必填)
|
|
|
- --enabled 是否启用 (true/false, 默认 true)
|
|
|
+# 设置 BLE 配置
|
|
|
+./ai-status-light config ble set --device AI-Light
|
|
|
```
|
|
|
|
|
|
## 项目结构
|
|
|
|
|
|
```
|
|
|
-AI-Status-Light/
|
|
|
+ai-status-light/
|
|
|
├── cmd/monitor/
|
|
|
│ ├── main.go # 程序入口
|
|
|
-│ ├── ble_embed.go # BLE 嵌入声明 (go:build ble)
|
|
|
-│ └── ble_embed_none.go # BLE 空声明 (go:build !ble)
|
|
|
+│ ├── ble_embed.go # BLE 嵌入声明
|
|
|
+│ └── ble_embed_none.go # BLE 空声明
|
|
|
├── internal/
|
|
|
│ ├── api/ # HTTP API 模块
|
|
|
│ ├── database/ # SQLite 数据库模块
|
|
|
-│ ├── discovery/ # 端口发现模块
|
|
|
-│ ├── event/ # 事件处理模块
|
|
|
-│ ├── monitor/ # 监控器核心模块
|
|
|
-│ └── mqtt/ # MQTT 客户端模块
|
|
|
+│ ├── logger/ # 日志模块
|
|
|
+│ ├── mqtt/ # MQTT 客户端模块
|
|
|
+│ └── web/ # Web 静态文件
|
|
|
+├── hooks/ # AI 工具 hooks 配置
|
|
|
+│ ├── install.sh # 一键安装脚本
|
|
|
+│ ├── claude-code/ # Claude Code hooks
|
|
|
+│ └── codex/ # Codex hooks
|
|
|
+├── opencode-plugin/ # OpenCode 插件
|
|
|
+│ └── status-light.ts # 插件源码
|
|
|
├── firmware/ # ESP32-C3 硬件固件
|
|
|
-│ ├── ble/ # BLE 蓝牙固件
|
|
|
-│ ├── mqtt/ # MQTT 固件
|
|
|
-│ └── README.md # 硬件说明
|
|
|
-├── scripts/
|
|
|
-│ ├── build.bat # Windows 构建脚本
|
|
|
-│ ├── build.sh # Linux/macOS 构建脚本
|
|
|
-│ ├── ble_relay.py # Python BLE 蓝牙中继脚本
|
|
|
-│ └── requirements.txt # Python 依赖
|
|
|
├── docs/ # 文档
|
|
|
-└── Makefile # 构建配置
|
|
|
+└── scripts/ # 构建脚本
|
|
|
```
|
|
|
|
|
|
## 开发
|
|
|
@@ -229,22 +271,14 @@ AI-Status-Light/
|
|
|
# 安装依赖
|
|
|
go mod tidy
|
|
|
|
|
|
-# 运行测试
|
|
|
-go test ./...
|
|
|
-
|
|
|
-# 构建(不含 BLE,全平台)
|
|
|
-scripts\build.bat
|
|
|
-
|
|
|
-# 构建(含 BLE,当前平台)
|
|
|
-scripts\build.bat --ble
|
|
|
+# 运行
|
|
|
+go run ./cmd/monitor serve --addr :8045
|
|
|
|
|
|
-# 仅生成 BLE 中继(IDE 调试用)
|
|
|
-scripts\build.bat --only-ble
|
|
|
+# 构建
|
|
|
+go build -o bin/ai-status-light ./cmd/monitor
|
|
|
|
|
|
-# 或用 Makefile
|
|
|
-make build
|
|
|
-make build-with-ble
|
|
|
-make build-all
|
|
|
+# 构建(含 BLE)
|
|
|
+scripts/build.sh --ble
|
|
|
```
|
|
|
|
|
|
## 许可证
|