Skip to content

duxweb/dux-ai-node

Repository files navigation

dux-ai-node

Dux AI 的独立节点运行时,负责客户端注册、状态上报、桌面动作执行与结果回传。

当前能力

  • 设备注册与 连接 ID(client_id) / node_token 回写(注册请求使用设备 ID 作为鉴权标识)
  • Runtime WebSocket 长连、心跳、状态上报
  • macOS / Windows 托盘入口
  • 设置窗口与权限窗口(Rust 内嵌 HTML)
  • 浏览器动作:browser.readbrowser.screenshotbrowser.gotobrowser.extractbrowser.clickbrowser.type
  • 平台 UI 动作:ui.statusapp.activatewindow.focusui.treeui.findui.readui.writeui.invokeui.clickui.type_nativeui.keypress
  • 文件与系统动作:file.listfile.statfile.read_textfile.opensystem.infoterminal.exec
  • 截图动作:screen.capture
  • 渠道扩展动作:channel.qianniu.activatechannel.qianniu.inspectchannel.qianniu.send_text
  • 微信扩展动作:channel.wechat.current_sessionchannel.wechat.search_candidateschannel.wechat.open_sessionchannel.wechat.prepare_textchannel.wechat.send_text
  • Artifact 分片上传与 PHP 续跑闭环

微信模式

  • channel.wechat.current_session
    • 纯 UI 读取,不使用鼠标或键盘事件。
  • channel.wechat.search_candidates
    • 打开微信搜索弹层并返回候选项、分组和最终命中项,便于调试关键词搜索。
  • channel.wechat.open_session
    • 支持两种调用:
    • 直接用精确会话名:session_title
    • 用关键词搜索并指定目标候选:query + target_title
  • channel.wechat.prepare_text
    • 纯 UI 写入,只写当前会话输入框,不发送,不抢键鼠。
  • channel.wechat.send_text with mode=safe
    • 纯 UI 写入草稿,不发送;要求当前会话已经是目标会话。
  • channel.wechat.send_text with mode=active
    • 写入后按回车发送;会使用键盘事件。
  • channel.wechat.send_text
    • open_session 一样支持:
    • 直接用 session_title
    • 或者用 query + target_title 精确指定候选
  • channel.wechat.open_session
    • 当前微信版本需要搜索框真实输入和回车打开结果;会使用鼠标与键盘事件。

当前实测结论:

  • 微信输入框支持通过 AXValue 直接写入文本。
  • 微信发送动作未暴露标准 Accessibility action,发送仍需键盘回车。
  • 微信搜索结果打开未稳定暴露纯 UI 动作,打开会话仍需活动模式。

目录

  • crates/core:配置、协议、Runtime 长连、artifact 回传
  • crates/browserchromiumoxide 浏览器控制、截图、文件/系统动作
  • crates/platform:平台路径、权限与开机自启
  • apps/node-daemon:Linux daemon 入口
  • apps/node-tray:macOS / Windows 托盘入口(可执行名 dux-ai-node
  • helpers/macos-ax-helper:macOS 平台 UI helper(Swift)
  • helpers/windows-uia-helper:Windows 平台 UI helper 与打包脚本
  • assets/icon.*:节点应用图标、托盘图标与平台打包图标资源
  • deploy/systemd/dux-ai-node.service:Linux 用户态 systemd 模板
  • scripts/build-macos-app.sh:macOS .app 打包
  • scripts/build-linux.sh:Linux daemon 打包(含跨编译检查)
  • scripts/install-linux.sh:Debian / Ubuntu 服务器一键安装脚本(默认安装 headless Chromium + systemd 服务)
  • scripts/install-systemd-user.sh:Linux 用户服务安装
  • scripts/build-windows.ps1:Windows tray 二进制打包(需在 Windows 主机执行)
  • .github/workflows/build-node.yml:GitHub Actions 多平台构建与 Release 附件上传
  • scripts/smoke-test-node.sh:节点动作冒烟测试

配置文件

  • macOS: ~/Library/Application Support/plus.dux.dux-ai-node/config.toml
  • Windows: %APPDATA%/plus/dux/dux-ai-node/config.toml
  • Linux: ~/.config/plus/dux/dux-ai-node/config.toml

关键字段:

  • device_id:本地稳定 UUID
  • client_id:服务端注册后返回的连接 ID(当前在线节点标识)
  • node_token:Runtime WebSocket 鉴权 token

常用命令

Daemon

  • cargo run -p dux-ai-node-daemon -- init
  • cargo run -p dux-ai-node-daemon -- status
  • cargo run -p dux-ai-node-daemon -- config get
  • cargo run -p dux-ai-node-daemon -- config set server_url http://duxai.test
  • cargo run -p dux-ai-node-daemon -- register
  • cargo run -p dux-ai-node-daemon -- daemon

Tray

  • cargo run -p dux-ai-node -- status
  • cargo run -p dux-ai-node -- register
  • cargo run -p dux-ai-node -- run
  • cargo run -p dux-ai-node -- autostart status
  • cargo run -p dux-ai-node -- autostart install
  • cargo run -p dux-ai-node -- autostart uninstall

macOS

  • 构建 .app./scripts/build-macos-app.sh
  • 产物:dist/Dux AI Node.app
  • 启动:open "dist/Dux AI Node.app"
  • 当前已实现:不进 Dock、菜单栏常驻、设置/权限窗口、LaunchAgent 自启入口

macOS 提示“已损坏,无法打开”怎么办

如果 macOS 下载后提示:

“Dux AI Node”已损坏,无法打开。你应该将它移到废纸篓。

这通常不是文件真的损坏,而是系统对未签名或未公证应用的隔离拦截。

可以在终端执行:

sudo xattr -rd com.apple.quarantine /Applications/Dux\ AI\ Node.app

执行后再重新打开应用即可。

Linux

  • 当前只支持 daemon/headless,不提供 GUI
  • file.open 等 GUI 相关动作会显式返回不支持
  • 构建:TARGET=x86_64-unknown-linux-gnu ./scripts/build-linux.sh
  • 构建:TARGET=aarch64-unknown-linux-gnu ./scripts/build-linux.sh
  • 如果在 macOS 上执行该脚本,会先检查 x86_64-linux-gnu-gcc,缺失时直接报清晰提示
  • 安装用户服务:./scripts/install-systemd-user.sh
  • Debian / Ubuntu 一键安装:
    • curl -fsSL https://raw.githubusercontent.com/duxweb/dux-ai-node/main/scripts/install-linux.sh | sudo bash -s -- --server-url http://duxai.test
    • 重新执行同一个安装命令会自动识别为安装 / 升级 / 重装,并保留现有配置与数据
    • 卸载:curl -fsSL https://raw.githubusercontent.com/duxweb/dux-ai-node/main/scripts/uninstall-linux.sh | sudo bash
    • 完全卸载:curl -fsSL https://raw.githubusercontent.com/duxweb/dux-ai-node/main/scripts/uninstall-linux.sh | sudo bash -s -- --purge
  • 服务模板:deploy/systemd/dux-ai-node.service

Windows

  • 当前使用与 macOS 相同的 tray 入口代码
  • 构建:在 Windows PowerShell 里运行 ./scripts/build-windows.ps1
  • 构建产物会一并包含 helpers/windows-uia-helper/dux-node-windows-uia-helper.ps1
  • 该脚本会明确要求在 Windows 主机执行,不再给出误导性的本机跨编译假象

Smoke Test

  • 使用:./scripts/smoke-test-node.sh <server_url> <device_id> <session_id> <连接ID(client_id)>
  • 会顺序测试:
    • system.info
    • browser.read
    • screen.capture
    • browser.screenshot

GitHub Actions

  • 推送 v* tag 时会自动构建 Linux x86_64 / arm64 daemon、Windows x86_64 tray、macOS x86_64 / arm64 .app
  • 构建产物会同时上传到 Actions Artifacts 和 GitHub Release 附件
  • 打包结果不再内置 Node.js / Playwright 运行时,当前 macOS 分发基于 Rust + Swift helper

说明

  • 设置窗口与权限窗口当前由 Rust 内嵌 HTML 提供,不依赖独立前端构建链
  • 本仓库不包含 OCR、WPS/微信等通用桌面软件控制实现

About

🔗 为DuxAI 提供桌面端的执行能力

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors