# OpenCode Status Light Plugin 这是一个OpenCode插件,用于将工具执行和会话状态事件发送到AI Status Light监控服务。 ## 功能 - 监听工具执行事件(开始、完成) - 监听会话状态变化(空闲、错误) - 监听权限请求 - 监听消息更新(工具状态、推理状态) - 通过HTTP webhook发送事件到监控服务 ## 安装 ### 方式1:本地安装 1. 将此目录复制到OpenCode的插件目录: - 项目级:`.opencode/plugins/` - 全局级:`~/.config/opencode/plugins/` 2. 安装依赖: ```bash cd opencode-plugin npm install ``` ### 方式2:npm安装(推荐) ```bash npm install opencode-status-light-plugin ``` 然后在`opencode.json`中添加: ```json { "plugin": ["opencode-status-light-plugin"] } ``` ## 配置 ### 环境变量 | 变量名 | 说明 | 默认值 | |--------|------|--------| | `OPENCODE_WEBHOOK_URL` | Webhook接收地址 | `http://localhost:8080/api/webhook` | | `OPENCODE_WEBHOOK_SECRET` | Webhook密钥(用于签名验证) | (空) | | `OPENCODE_WEBHOOK_ENABLED` | 是否启用webhook | `true` | ### 示例配置 ```bash # 设置webhook地址 export OPENCODE_WEBHOOK_URL="http://your-server:8080/api/webhook" # 设置密钥(可选) export OPENCODE_WEBHOOK_SECRET="your-secret-key" # 启用webhook export OPENCODE_WEBHOOK_ENABLED="true" ``` ## 事件类型 插件会发送以下事件: | 事件类型 | 说明 | 数据格式 | |----------|------|----------| | `tool.execute.before` | 工具执行前 | `{ tool, args, status: "running" }` | | `tool.execute.after` | 工具执行后 | `{ tool, args, result, status: "completed" }` | | `session.status` | 会话状态变化 | `{ status }` | | `session.idle` | 会话空闲 | `{ status: "idle" }` | | `session.error` | 会话错误 | `{ error }` | | `permission.asked` | 权限请求 | `{ permission }` | | `message.part.updated` | 消息部分更新 | `{ part: { type, tool?, state?, status? } }` | ## Webhook请求格式 ```json { "type": "tool.execute.before", "timestamp": "2026-06-27T10:30:00Z", "project": "my-project", "directory": "/path/to/project", "worktree": "/path/to/worktree", "data": { "tool": "read", "args": { "filePath": "src/index.ts" }, "status": "running" } } ``` ## 签名验证 如果设置了`OPENCODE_WEBHOOK_SECRET`,插件会在请求头中添加签名: ``` X-Webhook-Signature: sha256= ``` 验证签名的示例代码(Node.js): ```javascript const crypto = require('crypto') function verifySignature(payload, signature, secret) { const expectedSignature = crypto .createHmac('sha256', secret) .update(JSON.stringify(payload)) .digest('hex') return signature === `sha256=${expectedSignature}` } ``` ## 开发 ### 本地开发 ```bash # 安装依赖 npm install # 构建 npm run build # 测试 npm test ``` ### 调试 设置环境变量启用详细日志: ```bash export DEBUG=status-light-plugin ``` ## 许可证 MIT