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.md
source content

JQOpenClaw Node Invoker

快速流程

  1. 确定目标
    nodeId
    (用户给定优先)。
  2. 调用
    node.describe
    检查节点在线状态,并按“节点识别规则”确认是否为 JQOpenClawNode。
  3. 若命令未声明或被网关策略拦截,先输出阻断原因,再给修复建议。
  4. 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
    支持
    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
    :用于非参数类失败。输出失败原因并给路径、权限、目录存在性、回收站可用性等排查建议。
  • 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

参考