Skill: 188080501/jqopenclaw-node-invoker (version 26.3.9)

--- name: jqopenclaw-node-invoker description: 统一通过 Gateway 的 node.invoke 调用 JQOpenClawNode 能力（file.read、file.write、process.exec、process.manage、system.run、process.which、system.info、system.screenshot、system.notify、system.clipboard、system.input、node.selfUpdate）。当用户需要远程文件读写、文件移动/删除、目录创建/删除、进程管理（列表/搜索/终止）、远程进程执行、命令可执行性探测、系统信息采集、截图采集、系统弹窗、系统剪贴板读写、输入控制（鼠标/键盘）、节点自更新、节点命令可用性排查或修复 node.invoke 参数错误时使用。 --- # JQOpenClaw Node Invoker ## 快速流程 1. 确定目标 `nodeId`（用户给定优先）。 2. 调用 `node.describe` 检查节点在线状态，并按“节点识别规则”确认是否为 JQOpenClawNode。 3. 若命令未声明或被网关策略拦截，先输出阻断原因，再给修复建议。 4. 按 [references/command-spec.md](references/command-spec.md) 构造 `node.invoke` 请求。 5. 每次调用使用新的 `idempotencyKey`（UUID）。 6. 输出结果时先给结论，再给关键字段，不直接堆原始 JSON。 ## 节点识别规则 - 先读 `node.describe` 返回的 `modelIdentifier`、`commands`、`displayName`、`nodeId`。 - 强匹配（可直接判定为 JQOpenClawNode）： - `modelIdentifier` 非空，且满足以下任一条件： - 等于 `JQOpenClawNode`。 - 以 `JQOpenClawNode` 开头（如 `JQOpenClawNode(Qt/C++)`）。 - 弱匹配（仅在 `modelIdentifier` 为空时使用）： - `commands` 同时包含：`file.read`、`file.write`、`process.exec`、`process.manage`、`system.run`、`process.which`、`system.info`、`system.screenshot`、`system.notify`、`system.clipboard`、`system.input`、`node.selfUpdate`。 - 且 `displayName` 或 `nodeId` 包含 `JQOpenClaw`。 - 拒绝匹配： - `modelIdentifier` 明确存在但不匹配 `JQOpenClawNode*`，即使命令集合相似也不按本技能处理。 - 不确定处理： - 若仅满足部分条件，先明确告知“节点类型不确定”，并要求用户指定目标 `nodeId` 或修正节点 `modelIdentifier` 后再执行。 ## 命令映射 - 文件读取：`file.read` - 文件写入/移动/删除/目录增删：`file.write` - 进程执行（program/arguments/detached）：`process.exec` - 进程管理（枚举/搜索/终止）：`process.manage` - 远程进程执行（OpenClaw 标准参数）：`system.run` - 可执行命令探测：`process.which` - 系统基础信息：`system.info` - 屏幕截图：`system.screenshot` - 系统弹窗：`system.notify` - 系统剪贴板：`system.clipboard` - 输入控制：`system.input` - 节点自更新：`node.selfUpdate` ## 调用规则 - 统一使用 `node.invoke`。 - `params` 必须是对象，字段类型严格匹配。 - 节点侧仅接受 `node.invoke.request.payload.paramsJSON`，且 `paramsJSON` 必须解析为对象。 - `paramsJSON` 缺失或 `null` 时按空对象处理；若存在但不是字符串、为空字符串、或解析后不是对象，按 `INVALID_PARAMS` 处理。 - `file.write` 必须显式传 `allowWrite=true` 才允许执行；未显式授权时应返回阻断提示。 - `timeoutMs` 需按任务复杂度设置： - `file.read` / `file.write`：5000-30000 - `process.exec`：5000-120000（`detached=false` 时生效） - `process.manage`：5000-30000（`kill` 场景应确保 `timeoutMs >= waitMs`） - `system.run`：5000-120000 - `process.which`：5000-15000 - `system.info`：30000 - `system.screenshot`：60000 - `system.notify`：5000-15000（仅参数校验与弹窗投递，弹窗异步展示） - `system.clipboard`：5000-15000（读写系统剪贴板文本） - `system.input`：5000-15000（仅参数校验与入队，动作异步执行） - `node.selfUpdate`：30000-300000（下载+校验+脚本启动；成功后节点会退出重启） - 调用 `node.selfUpdate` 时，`md5` 为必填（32 位十六进制）；缺失或格式错误按 `INVALID_PARAMS` 处理。 - `node.invoke.timeoutMs` 可省略；若传入，必须为非负整数（毫秒），否则按 `INVALID_PARAMS` 处理。其中 `0` 视为立即超时。 - `node.invoke.timeoutMs` 会参与请求预算裁剪；当前节点会将 `system.run.params.timeoutMs`、`process.exec.params.timeoutMs`（`detached=false`）与 `file.read(operation=rg)` 的内部超时裁剪到该预算内（取更小值）。 - 即便省略 `node.invoke.timeoutMs`，网关/调用端仍有等待超时（当前 OpenClaw 常见默认约 `30000ms`，CLI `openclaw nodes invoke` 默认 `15000ms`）。 - 实际可用执行时长取决于最先触发的超时层：调用端/网关等待超时、`node.invoke.timeoutMs`（若传入）、能力内部超时。 - `process.manage` 当前仅支持 Windows；非 Windows 环境调用会返回 `PROCESS_MANAGE_FAILED`。 - `process.manage`： - `operation=list/search/kill`，默认 `list`。 - `search` 必须提供 `query`（或 `keyword`）与 `pid` 之一。 - `kill` 必须提供 `pid`，可选 `waitMs` 范围 `[0, 30000]` 与 `force`（默认 `true`）；`force=false` 为非强杀退出请求（仅对具有顶层窗口的进程生效）；`waitMs` 当前不会被 `node.invoke.timeoutMs` 自动裁剪。 - `kill` 默认拒绝终止关键进程（critical process）；仅当目标 PID 为当前节点进程时允许。 - `process.exec` 使用 `program + arguments`，支持 `detached`；用于兼容历史调用方。 - `system.run` 对齐 OpenClaw：仅使用 `command`（argv 数组）、`rawCommand`、`cwd`、`env`、`timeoutMs`、`needsScreenRecording`。 - `process.which` 支持 `program`（单个）或 `programs`（数组）探测；未命中返回 `found=false`，不作为命令失败。 - `file.read` 支持 [REDACTED_SECRET]。大文件建议使用 `read + offsetBytes + maxBytes` 分块读取（`maxBytes` 上限 `2097152`）；按行区间读取使用 `lines + startLine/endLine`；目录遍历可用 `list + recursive + glob`；元信息查询使用 `stat`；文件指纹可用 `md5`。 - `file.write` 默认禁用；需显式 `allowWrite=true`。开启后默认 `operation=write`；移动用 `operation=move`（配 `destinationPath`/`toPath`）；删除用 `operation=delete`（走回收站删除）；目录创建用 `operation=mkdir`；目录删除用 `operation=rmdir`。 ## 网关阻断处理 - `command not allowlisted`： - 说明这是 Gateway 策略拦截。 - 提示管理员在 Gateway 配置添加 `gateway.nodes.allowCommands`（如 `file.read`、`file.write`、`process.exec`、`process.manage`、`system.run`、`process.which`、`system.notify`、`system.clipboard`、`system.input`、`node.selfUpdate`）。 - `command not declared by node` / `node did not declare commands`： - 先看 `node.describe.commands`。 - 要求节点端先声明命令再调用。 ## 错误处理规范 - `INVALID_PARAMS`：参数缺失、类型不匹配或超出范围（含 `file.read` / `file.write` / `process.exec` / `process.manage` / `system.run` / `process.which` / `system.notify` / `system.clipboard` / `system.input` / `node.selfUpdate` 的参数校验失败，例如 `node.selfUpdate` 缺失必填 `md5`）。指出具体字段问题并给出可直接重试的参数。 - `TIMEOUT`：可能为网关等待超时，或显式传入 `timeoutMs=0` 触发立即超时。建议增大 `timeoutMs` 或缩小任务范围。 - `FILE_READ_FAILED` / `FILE_WRITE_FAILED`：用于非参数类失败。输出失败原因并给路径、权限、目录存在性、回收站可用性等排查建议。 - `PROCESS_MANAGE_FAILED`：用于非参数类失败（目标进程不存在、权限不足、非 Windows 平台、命中关键进程保护、终止或等待过程失败）。输出节点返回错误并给 PID、权限、平台和进程存活状态排查建议。 - `PROCESS_EXEC_FAILED`：用于 `process.exec` 的非参数类失败（程序不存在、权限不足、启动失败等无法产出结构化执行结果）。输出节点返回错误并给 `program`、`workingDirectory`、权限排查建议。 - `SYSTEM_RUN_FAILED`：用于 `system.run` 的非参数类失败（命令非法、程序不存在、权限不足、启动失败等无法产出结构化执行结果）。输出节点返回错误并给 `command`、`cwd`、权限、目标进程状态排查建议。 - `PROCESS_WHICH_FAILED`：用于非参数类失败（探测流程内部异常）。输出节点返回错误并建议重试或检查节点日志。 - `SYSTEM_INFO_FAILED`：系统信息采集失败。建议检查节点系统命令可用性与权限。 - `SCREENSHOT_CAPTURE_FAILED` / `SCREENSHOT_UPLOAD_FAILED`：截图采集或上传失败。建议检查显示环境、`file-server-uri`、`file-server-token` 与网络连通性。 - `SYSTEM_INPUT_FAILED`：`system.input` 投递或平台能力失败。建议检查平台是否为 Windows、线程池状态与节点日志。 - `SYSTEM_NOTIFY_FAILED`：`system.notify` 投递失败。建议检查应用实例状态与 UI 线程分发日志。 - `SYSTEM_CLIPBOARD_FAILED`：`system.clipboard` 执行失败。建议检查节点应用实例、图形环境与剪贴板访问能力。 - `NODE_SELF_UPDATE_FAILED`：`node.selfUpdate` 执行失败（下载失败、HTTP 状态异常、落盘失败、脚本启动失败等）。建议检查下载地址可达性、磁盘空间与杀毒拦截。 - `NODE_SELF_UPDATE_MD5_MISMATCH`：`node.selfUpdate` 下载成功但 MD5 校验不匹配。建议核对必填 `md5` 与发布包内容。 - `COMMAND_NOT_SUPPORTED`：改用已声明命令或升级节点版本。 ## 输出规范 - 成功时： - 先一句话结论。 - 再列关键字段（例如 `bytesWritten`、`exitCode`、`timedOut`、`url`）。 - 对 `process.manage`，优先展示 `operation`、`pid`、`returnedCount/totalMatched`、`waitResult`、`resultClass` 等字段。 - 对 `system.run` / `process.exec`，若 `timedOut=true` 或 `resultClass=timeout`，按“命令超时”给出失败结论与重试建议（即使 `node.invoke` 本身返回成功结构）。 - 失败时： - 先给 `error.code`、`error.message`。 - 再给一条可执行的下一步操作。 ## 安全边界 - `file.write`、`process.exec`、`process.manage`、`system.run` 与 `process.which` 默认按最小必要原则执行。 - 对可能破坏状态的操作（删除、覆盖、重置、停服务、终止进程）先征得用户明确确认。 - 不自行提升权限，不绕过网关策略。 ## system.notify - 命令名：`system.notify` - 用途：弹出系统消息提示框。 - 参数： - `message`：必填字符串，非空，长度范围 `[1, 4000]` - `title`：可选字符串，默认 `JQOpenClaw`，长度上限 `120` - 返回字段：`operation=notify`、`title`、`message`、`shown=true`、`async=true`、`ok=true` - 错误处理： - 参数错误返回 `INVALID_PARAMS` - 投递失败返回 `SYSTEM_NOTIFY_FAILED` ## system.clipboard - 命令名：`system.clipboard` - 用途：读取当前系统剪贴板文本，或写入文本到系统剪贴板。 - 参数： - `operation`：可选字符串，`read|write`，默认 `read` - `text`：当 `operation=write` 时必填字符串 - 返回字段（`operation=read`）：`operation=read`、`text`、`length`、`hasText`、`ok=true` - 返回字段（`operation=write`）：`operation=write`、`written=true`、`length`、`hasText`、`ok=true` - 错误处理： - 参数错误返回 `INVALID_PARAMS` - 执行失败返回 `SYSTEM_CLIPBOARD_FAILED` ## system.input - 命令名：`system.input` - 用途：按顺序执行输入动作数组，支持鼠标、键盘和延迟混排。 - 执行语义：参数校验通过后异步入队；`node.invoke` 立即返回。 - 调度策略：latest-wins。若新请求到达，会取消旧请求尚未完成的剩余动作；已执行动作不会回滚。 - 使用建议：`keyboard.down` / `keyboard.up` 尽量在同一请求内闭合配对，或优先使用 `keyboard.tap`。 - 入参要求： - `params.actions` 必须为数组，长度 `[1, 1000]` - 每个动作对象必须包含 `type` - 支持 `mouse.move`、`mouse.click`、`mouse.scroll`、`mouse.drag`、`keyboard.down`、`keyboard.up`、`keyboard.tap`、`keyboard.text`、`delay` - 关键校验： - `mouse.move.mode`：`absolute|relative` - `mouse.click.button`：`left|right` - `mouse.scroll`：`delta` 或 `deltaY` 二选一必填，可选 `deltaX` - `mouse.drag`：`mode=absolute|relative`，可选 `button=left|right` - `keyboard.text.text`：非空字符串 - `delay.ms`：`[0, 60000]` - 错误处理： - 参数错误返回 `INVALID_PARAMS` - 投递失败返回 `SYSTEM_INPUT_FAILED` ## 参考 - [references/command-spec.md](references/command-spec.md)


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)