catalog/repos/188080501--jqopenclaw.md

186 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Qt版OpenClaw节点
`OpenClaw` `Qt` `C++` `Windows` `WebSocket` `节点`
# JQOpenClaw
JQOpenClaw 是一个基于 Qt/C++ 开发的 OpenClaw Node实现与 OpenClaw Gateway 的 Node WebSocket 协议对接。
适用于希望在 Windows 上以独立可执行程序接入 OpenClaw 的场景,无需额外安装 Node.js 与 OpenClaw CLI。
注意:本项目不是 OpenClaw Gateway 的替代品,而是 OpenClaw Node 的实现。
Gateway 是中枢/控制平面Node 是执行端/能力提供者。通常一个 Gateway 可以统一调度多个 Node。
## 项目定位
- 运行平台Windows后续计划扩展到 Mac / Linux
- 运行形态:免安装,单可执行程序(`JQOpenClawNode.exe`)接入 Gateway。
- 能力范围:文件、进程、系统信息、截图与输入控制(详见下文"节点能力与命令")。
- 开发套件:`Qt 6.5.3 + MSVC`
- 协议兼容:对接 OpenClaw Gateway 的 `node.invoke` 调用链路。
## 首次使用
### 1. 前置条件
在启动 JQOpenClawNode 前,请先确认:
- OpenClaw Gateway 已可用,并且有一个可用的访问地址,本机 `127.0.0.1`、局域网、公网都行。
- Gateway 已配置可用的 tokenNode 连接时会使用)。
- 确保你已经在浏览器成功访问 OpenClaw Gateway可以进行对话。已经解决了诸如 SSL 配置、白名单、安全限制等问题。
### 2. 下载与启动
推荐直接下载已编译版本:
- 最新发布页:[https://github.com/188080501/JQOpenClaw/releases/latest](https://github.com/188080501/JQOpenClaw/releases/latest)
下载后运行 `JQOpenClawNode.exe`
### 3. 配置与配对
在程序界面填写配置,点击 `保存` 后会自动发起 WebSocket 连接并进入待配对状态。
等待配对时,需要在 Gateway 侧批准该节点,批准后即可完成配对。
### 4. 连接失败时优先检查
- `gatewayUrl` 是否为正确的 `ws://``wss://` 地址。
- `token` 是否与 Gateway 配置一致。
- 节点机器与 Gateway 之间的网络/防火墙是否可达。
### 5. 完成配对
当界面状态显示"已连接"时,表示配对成功,此时可以在 Gateway 中调用该 Node 能力。
![参数配置](docs/images/JQOpenClawNode界面.jpg)
### 6. 导入配套 Skill必做
为保证 Gateway 按正确方式调用 Node 能力,请先导入配套 Skill。
导入入口文件(相对仓库根目录):
`docs/skills/jqopenclaw-node-invoker/SKILL.md`
### 7. 放行 Gateway 白名单(必做)
当前 JQOpenClawNode 提供了较多命令,但这些命令默认不在官方 OpenClaw 的 `openclaw.json` 白名单中。
即使已经导入 Skill如果网关未放行对应命令调用仍会被拦截并出现 `command not allowlisted`
排障区分:
- `command not allowlisted`Gateway 白名单拦截,请检查 `gateway.nodes.allowCommands`
- `PERMISSION_DENIED`:节点本地 `permissions` 拦截,请在 JQOpenClawNode 的"能力权限"页启用对应命令。
请在 Gateway 所在机器的 `~/.openclaw/openclaw.json` 中,手动将本节点命令加入 `gateway.nodes.allowCommands`,至少包含你实际要使用的命令,例如:
```json5
{
gateway: {
nodes: {
allowCommands: [
"file.read",
"file.write",
"process.exec",
"process.manage",
"process.which",
"system.run",
"system.info",
"system.screenshot",
"system.notify",
"system.clipboard",
"system.input",
"node.selfUpdate"
]
}
}
}
```
修改配置后,请重启 Gateway或执行配置重载再重试调用。
### 8. 在 Gateway 发起简单测试(验证连通)
完成前 7 步后,可以在 Gateway 里直接发起下面两段对话测试:
对话示例 1测试 `system.info`
```text
请对 nodeId=<你的节点ID> 调用 system.info返回关键结果。
```
对话示例 2测试 `process.which`
```text
请对 nodeId=<你的节点ID> 调用 process.whichprogram=cmd。
```
若调用返回成功且有有效 `payload`,说明 Node 与 Gateway 的连接及命令调用链路正常。
## 可配置参数说明
| 参数名 | 配置键 | 是否必填 | 默认值 | 说明 |
| --- | --- | --- | --- | --- |
| 网关URL | gatewayUrl | 是 | `ws://127.0.0.1:18789` | Gateway WebSocket 地址,只支持 `ws://``wss://`。 |
| 网关Token | token | 是 | 空 | Gateway token留空会导致连接失败。 |
| 显示名称 | displayName | 否 | 自动生成(如 `JQOpenClawNode-1234` | 节点显示名称。 |
| 实例ID | instanceId | 否 | 首次启动自动生成 UUID | 节点实例 ID。 |
| 文件服务URL | fileServerUrl | 否 | 空 | 文件服务基础 URL必须是 Nginx 对外入口),用于截图上传。 |
| 文件服务Token | fileServerToken | 条件必填 | 空 | 使用 `system.screenshot` 上传时必填。 |
| 命令权限 | permissions | 否 | 全部命令默认 `true` | 节点本地命令开关(按命令名布尔值控制)。 |
| 跟随系统启动 | followSystemStartup | 否 | `false` | 开启后会在当前用户登录系统时自动启动。 |
| 静默启动 | silentStartup | 否 | `false` | 开启后下次启动时不显示主界面,仅驻留系统托盘。 |
说明:仅当需要使用 `system.screenshot` 上传截图时,才需要配置 `fileServerUrl``fileServerToken`,否则可留空。
### URL 配置注意事项
- `网关URL` 必须是合法 URL且带 `ws`/`wss` 协议和主机名。
- 文件服务必须经过 Nginx 中转Node 会向 Nginx 执行上传并返回访问链接。
- `文件服务URL` 请填写 Nginx 对外"基础地址",不要手动加 `/upload``/files`,也不要填写磁盘目录或对象存储内部地址。
- 程序会在截图上传时自动拼接:
- 上传地址:`<文件服务URL>/upload/<随机文件名>.jpg`
- 访问地址:`<文件服务URL>/files/<随机文件名>.jpg`
### 配对成功后在 OpenClaw 中的显示位置
Node 配对成功后,会在 OpenClaw 中显示在如下位置,便于快速确认节点是否已成功接入:
![Node 配对成功后在 OpenClaw 中的显示位置](docs/images/OpenClaw节点位置.jpg)
## 节点能力与命令
| 能力分类 | 命令 | 能力说明 |
| --- | --- | --- |
| file | file.read | 支持 `operation=read/lines/list/rg/stat/md5`:文件读取(含 `offsetBytes` 分块,`maxBytes` 上限 `2097152`)、按行区间读取(`startLine~endLine`)、目录遍历(含 `recursive/glob`、元信息查询owner/权限/时间戳)与文件 MD5 计算。 |
| file | file.write | 支持写入/移动(剪切)/删除(回收站)/目录创建/目录删除,以及 `operation=write/move/delete/mkdir/rmdir``createDirs/overwrite` 参数。 |
| process | process.exec | 基于 QProcess 执行 `program + arguments`,支持 `detached` 后台启动,适合与旧调用方兼容。 |
| process | process.manage | 进程管理能力,支持 `operation=list/search/kill`:进程列表、按关键字或 PID 搜索、按 PID 终止进程。 |
| process | process.which | 可执行命令探测能力,支持单个 `program` 或批量 `programs`,返回是否存在与可执行路径。 |
| system | system.run | 对齐 OpenClaw `system.run` 参数模型:仅支持 `command`argv 数组)、`rawCommand``cwd``env``timeoutMs``needsScreenRecording`。 |
| system | system.screenshot | 采集桌面截图并返回图片信息JPG。 |
| system | system.info | 采集系统基础信息CPU 名称+核心/线程、计算机名/主机名、系统名称/版本、用户名、内存、GPU、IP、硬盘容量。 |
| system | system.notify | 系统弹窗能力,弹出消息提示框(`message` 必填,`title` 可选)。 |
| system | system.clipboard | 系统剪贴板能力,支持 `operation=read/write`:读取当前剪贴板文本,或写入文本到剪贴板。 |
| system | system.input | 输入控制能力,支持动作列表混排:`mouse.move`(绝对/相对)、`mouse.click`(左/右键)、`mouse.scroll`(滚轮,`delta/deltaY` 与可选 `deltaX`)、`mouse.drag`(按键拖拽至目标坐标)、`keyboard.down/up/tap``keyboard.text`(文本输入)、`delay`毫秒延迟请求会异步入队并立即返回若有更新请求到达会取消旧请求剩余动作latest-wins。 |
| node | node.selfUpdate | 节点自更新能力:支持下载新版本程序、强制 MD5 校验(`md5` 必填)、生成临时更新脚本并在回包后延迟退出,完成替换与重启。 |
## 项目目录结构
```text
JQOpenClaw
├─ apps/JQOpenClawNode/ # Node 应用入口与命令分发
├─ modules/openclawprotocol/ # 网关握手与 caps/commands/permissions 声明
├─ modules/capabilities/file/ # file 能力实现file.read / file.write写入/移动/删除/目录增删)
├─ modules/capabilities/process/ # process 能力实现process.exec / process.manage / process.which
├─ modules/capabilities/system/ # system 能力实现system.run / system.screenshot / system.info / system.notify / system.clipboard / system.input
├─ modules/crypto/ # 设备身份、签名与加解密相关能力
└─ docs/ # 项目依赖与部署文档
```
## 第三方依赖
- OpenSSL 依赖说明:[docs/OpenSSL依赖.md](docs/OpenSSL依赖.md)
- Nginx 依赖说明:[docs/Nginx依赖.md](docs/Nginx依赖.md)
- Nginx 配置模板:[docs/data.conf](docs/data.conf)