GB-Power-Market-JJ jqopenclaw-node-invoker
统一通过 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 参数错误时使用。
install
source · Clone the upstream repo
git clone https://github.com/GeorgeDoors888/GB-Power-Market-JJ
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.claude/skills && cp -r "$T/openclaw-skills/skills/188080501/jqopenclaw-node-invoker" ~/.claude/skills/georgedoors888-gb-power-market-jj-jqopenclaw-node-invoker && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/openclaw-skills/skills/188080501/jqopenclaw-node-invoker" ~/.openclaw/skills/georgedoors888-gb-power-market-jj-jqopenclaw-node-invoker && rm -rf "$T"
manifest:
openclaw-skills/skills/188080501/jqopenclaw-node-invoker/SKILL.mdsource content
JQOpenClaw Node Invoker
快速流程
- 确定目标
(用户给定优先)。nodeId - 调用
检查节点在线状态,并按“节点识别规则”确认是否为 JQOpenClawNode。node.describe - 若命令未声明或被网关策略拦截,先输出阻断原因,再给修复建议。
- 按 references/command-spec.md 构造
请求。node.invoke - 每次调用使用新的
(UUID)。idempotencyKey - 输出结果时先给结论,再给关键字段,不直接堆原始 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
:5000-30000file.write
:5000-120000(process.exec
时生效)detached=false
:5000-30000(process.manage
场景应确保kill
)timeoutMs >= waitMs
:5000-120000system.run
:5000-15000process.which
:30000system.info
:60000system.screenshot
:5000-15000(仅参数校验与弹窗投递,弹窗异步展示)system.notify
:5000-15000(读写系统剪贴板文本)system.clipboard
:5000-15000(仅参数校验与入队,动作异步执行)system.input
:30000-300000(下载+校验+脚本启动;成功后节点会退出重启)node.selfUpdate
- 调用
时,node.selfUpdate
为必填(32 位十六进制);缺失或格式错误按md5
处理。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)- 即便省略
,网关/调用端仍有等待超时(当前 OpenClaw 常见默认约node.invoke.timeoutMs
,CLI30000ms
默认openclaw nodes invoke
)。15000ms - 实际可用执行时长取决于最先触发的超时层:调用端/网关等待超时、
(若传入)、能力内部超时。node.invoke.timeoutMs
当前仅支持 Windows;非 Windows 环境调用会返回process.manage
。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
默认拒绝终止关键进程(critical process);仅当目标 PID 为当前节点进程时允许。kill
使用process.exec
,支持program + arguments
;用于兼容历史调用方。detached
对齐 OpenClaw:仅使用system.run
(argv 数组)、command
、rawCommand
、cwd
、env
、timeoutMs
。needsScreenRecording
支持process.which
(单个)或program
(数组)探测;未命中返回programs
,不作为命令失败。found=false
支持file.read
。大文件建议使用operation=read/lines/list/rg/stat/md5
分块读取(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
:用于非参数类失败(目标进程不存在、权限不足、非 Windows 平台、命中关键进程保护、终止或等待过程失败)。输出节点返回错误并给 PID、权限、平台和进程存活状态排查建议。PROCESS_MANAGE_FAILED
:用于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
投递或平台能力失败。建议检查平台是否为 Windows、线程池状态与节点日志。system.input
:SYSTEM_NOTIFY_FAILED
投递失败。建议检查应用实例状态与 UI 线程分发日志。system.notify
:SYSTEM_CLIPBOARD_FAILED
执行失败。建议检查节点应用实例、图形环境与剪贴板访问能力。system.clipboard
:NODE_SELF_UPDATE_FAILED
执行失败(下载失败、HTTP 状态异常、落盘失败、脚本启动失败等)。建议检查下载地址可达性、磁盘空间与杀毒拦截。node.selfUpdate
:NODE_SELF_UPDATE_MD5_MISMATCH
下载成功但 MD5 校验不匹配。建议核对必填node.selfUpdate
与发布包内容。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
,长度上限JQOpenClaw120
- 返回字段:
、operation=notify
、title
、message
、shown=true
、async=trueok=true - 错误处理:
- 参数错误返回
INVALID_PARAMS - 投递失败返回
SYSTEM_NOTIFY_FAILED
- 参数错误返回
system.clipboard
- 命令名:
system.clipboard - 用途:读取当前系统剪贴板文本,或写入文本到系统剪贴板。
- 参数:
:可选字符串,operation
,默认read|writeread
:当text
时必填字符串operation=write
- 返回字段(
):operation=read
、operation=read
、text
、length
、hasTextok=true - 返回字段(
):operation=write
、operation=write
、written=true
、length
、hasTextok=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.textdelay
- 关键校验:
:mouse.move.modeabsolute|relative
:mouse.click.buttonleft|right
:mouse.scroll
或delta
二选一必填,可选deltaYdeltaX
:mouse.drag
,可选mode=absolute|relativebutton=left|right
:非空字符串keyboard.text.text
:delay.ms[0, 60000]
- 错误处理:
- 参数错误返回
INVALID_PARAMS - 投递失败返回
SYSTEM_INPUT_FAILED
- 参数错误返回