@desklink/axi

中文文档
0.5.17发布于 2026/10/31Apache-2.0ES Module构建来源已验证近 30 天下载 2366

读取并驱动桌面链接的代理化 CLI

中文使用文档
文档目录6 节
  1. 安装
  2. 浏览器道( opt- in, 仅循环)
  3. 批量结果
  4. 证据和测量
  5. 无障碍树 tree )——Linux AT-SPI (英语)
  6. 标记( E) marks )——编号为可视倒置

@ desklink/ axi

npm CI Apache 2.0 Linux and macOS (preview)

查看并驱动代理服务器的活桌面:文本先行,按请求显示像素.
一个桌面CLI,用于桌面链接引擎上的编码代理. 它用OCR文本进行回答,校对以点击并更改区域,并且仅在被问到时返回一个图像裁剪,所以一个转弯会花费文本符号而不是截图.

安装

从 npm 安装; 上面的徽章跟踪注册版本 :

npm install -g @desklink/axi

desklink-axi --version 编辑 --help 页眉显示已安装的版本,包括任何dev/release后缀.

或者从寄存器根建立 npm install && npm run build。 。 。 . 删除已复制 *.tsbuildinfo 在重建被移动的工作树之前. 引擎通过 @desklink/host; 见其 安装指南 用于支持平台和 macOS 设置。 。 。 . 设定 DESKLINK_AXI_ENGINE 用于匹配源构建。 将新AXI指向0.3.x引擎的超接功能不支持;主机和引擎版本必须匹配.

Linux 桌面 AXI 预览有 macOS 。 它运行每个会话的私人桥, 抓取只读帧通过 @desklink/host 协议 v3, 仅通过 WebRTC 发送输入 control 频道. 桥的Unix套接字住在 $XDG_RUNTIME_DIR/desklink-axi (或OS临时目录) DESKLINK_AXI_SESSION 选择一个孤立的套接字。 它打开一个单独的引擎会话; 在别人控制时不要驱动桌面.

对于macOS源先决条件,签名和许可归属,遵循 主机设置指南1. 通过其经签字的当地装置启动第XI号决议 open -n /absolute/DesklinkHost.app --args axi-bridge /absolute/path/to/packages/axi/bin/desklink-axi.js 从登录的Mac会话。 OCR 需要可选选项 tesseract 可执行文件( e)brew install tesseract, (中文(简体) ), sudo pacman -S tesseract 或者说 sudo apt install tesseract-ocr; 在macOS AXI上,当发射服务公司从PATH中省略出Homebrew的标准安装路径时,也会找到Homebrew的标准安装路径. look 工作没有它.

desklink-axi start --source x11 --display :97
desklink-axi screen --query "Budget"
desklink-axi tree --query "Save"
desklink-axi type "hello" --into @a3.10
desklink-axi click @a3.7
desklink-axi marks
desklink-axi click 100,120
desklink-axi type "hello"
desklink-axi batch '[{"verb":"snapshot","name":"ui"},{"verb":"click","args":["@ui.2"]},{"verb":"assert","args":["Saved"]}]'
desklink-axi diff
desklink-axi look @r1
desklink-axi stop

start --cursor hidden 选择为无光标捕获; 省略已有的行为 。 使用 desklink-axi cursor 排出源坐标光标样本(x, (中文(简体) ), y, (中文(简体) ), visible, (中文(简体) ), timestamp_us附加时 hotspot 作曲者在现场报告时; dropped:N 报告更古老的样本 在它的一万个样本缓冲器填满后被覆盖 在Wayland,当没有位置时,隐藏的会话仍然在运行,并说为什么在 cursor.limitation; 见 光标协议。 。 。 .

health 报告捕捉状态,最新帧序列, 和流停止 理由没有OCR. start 允许其同一用户配对的消费者使用所有可用的访问; Linux 使用门户, 除非 --source x11 --display :N ,而macOS使用主显示,除非 --source display --display <id> 给出。 门户可以要求桌面同意提示;其单用途还原符被保存在其中 $XDG_STATE_HOME/desklink-axi/<session>.portal-token (否则) ~/.local/state/desklink-axi/<session>.portal-token),在每次赠款后,在解剖学上取而代之的是0600模式; <session> 实值 DESKLINK_AXI_SESSION,与会话的套接字和浏览器状态使用的名称相同,因此两条道从不将对方的赠款交给自己的消费者. 设定 DESKLINK_AXI_RESTORE_TOKEN_FILE 用不同的路径。 macOS 屏幕记录和无障碍属于启动桥和其引擎子的应用程序. 不要在别人的展出上不小心运行它。 输入和剪贴板不需要应用程序授权; 不可用的OS后端每个动作失败 。 遗产 start --control 被接受和忽略。 见 剪贴板协议 用于X11目标、转移限制和选择寿命. stop 释放有投入。 确认的行动 input: applied 立即,不等待一个框架。 每项行动( A)click, (中文(简体) ), type, (中文(简体) ), press, (中文(简体) ), scroll, (中文(简体) ), drag接受 --wait settle|change|none|<milliseconds>; 应用输入返回后的框架超时 input: applied; frame: timed out 成功状态. batch jSON 数组为 1 - 30 [verb, ...args] 步骤(点击/类型/press/scroll/wait/snapshot/sert/tree/marks),按一次套接字往返的顺序运行,在第一个失败的步骤上停下来,并返回一个紧凑的每步结果。 OCR refs 仅在文本和位置仍然匹配新收件时才能存活到推进帧数;需要移动或模糊的文本 screen --query。 。 。 . screen --query 重用目标作物的先前匹配文本位置,然后返回完整的OCR,并报告估计文本符号。 开始 screen --query 或者说 --region 在此之前 --full。对于网页,如果有DOM/浏览器自动化功能,则倾向于DOM/浏览器自动化;AXI是用于本地应用程序或全桌面任务. wait change 财务报告和审定财务报表 wait settle 而不是投票. diff * 报告一再单独改变区域,作为 animating· ; diff --include-animating 将它们包括在普通变化中. look 写一个PNG收成. --help 列出命令及其旗帜。 错误结构化, CLI 不提示 . 引导不输入的人,使用 desklink-axi point 400,300 --label "Here" --timeout 3000,或 desklink-axi point --clear见 主机协议参考 用于支持源、坐标和限制.

浏览器道( opt- in, 仅循环)

对于网页,浏览器道通过语义控制 剧作家核心 超过 CDP; 桌面道保留用于本地应用程序和全桌面任务 。 任何内容都没有隐含地附上:

desklink-axi browser attach --cdp 127.0.0.1:9222   # a Chromium YOU started with --remote-debugging-port (loopback only)
desklink-axi browser launch --profile /tmp/task-profile   # or: isolated task-owned Chromium, debug port on loopback only
desklink-axi browser tabs          # 'selected' = this lane's page, 'front' = the browser's actual activated tab
desklink-axi browser snapshot      # compact accessibility snapshot with [ref=eN] elements; no screenshots
desklink-axi browser click @e12 / fill @e5 "text" / upload @e9 /tmp/report.pdf / press Enter
desklink-axi browser select 1 / open <url> / navigate <url> / close 1 / detach

非落下端点被拒绝; launch 打开 $DISPLAY (X11)所以它从不遵循 WAYLAND_DISPLAY 到另一个桌面,以及 --arg <chromium flag> (可重复)通过诸如 --arg=--window-size=1280,640。快照参考器被重新生成到每个命令,并被拒绝为 stale-ref 当页面改变. upload 只设置文件于 <input type=file>; 对于OS级对话框, 它返回 not-supported 并命名桌面车道(desklink-axi click/type),这也是真实的本土-对话导航的路线——DOM上传不等于完成本土文件对话框. detach 仅在该道启动时停止浏览器; 通过 --profile 目录被保存,一个车道创建的临时配置被删除.

在 Linux 上,一个行道启动浏览器所记录的 PID 和启动时间必须匹配 在连接或清理之前。 旧版本未设置的缓存会话 拒绝录制开始时间; 使用新鲜 DESKLINK_AXI_SESSION 和简介. 清理验证辅助器 PID/启动时间对接私人发射标记 在发出信号之前 所附浏览器 --cdp 仍为呼叫者所有.

批量结果

batch 步骤是 [verb, ...args] 数组或 {verb, args?, name?, wait?} 有动词的对象 click, type, press, scroll, wait, snapshot, assert, tree, marks。一个命名的快照步骤会绑定其OCR项目,以便以后的步骤能够瞄准 @name.n· ; assert 步骤使成功取决于所观察到的屏幕文本;每行分开 input: applied (运输确认) effect: change observed | none within timeout,脚印上说 effects: asserted[n] 或者说 effects: unverified (input acknowledgements only) ——输入确认绝不是经过核实的结果,因此错误的焦点打字或不点击会失败批次而不是报告成功.

证据和测量

带有任务所建引擎的寄存器根( R)DESKLINK_AXI_ENGINE继续 Linux, 跟着 私人实验室指导数字 :

  • node packages/axi/test/smoke.mjs ——清洁树木重建主机+axi,然后 batch 财务报告和审定财务报表 click (b) 声称没有属于任务所属的幸存者.
  • node packages/axi/test/flow.mjs – 完整的桌面证明(帧/损坏,点坐标/出站/清空而无指针或焦点变化,点击通过,输入,和弦,批量结果,注入失败清理).
  • node packages/axi/test/browser-flow.mjs ——通过浏览器道的开口/出道/出道/出道-出道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-取道-道-道-道-道-道-道-道-道-道-道-道-道-道-道-道-道-道-道-道-道-道-道-道--道-道-----道-.
  • node packages/axi/test/bench.mjs [runs] – 比较 p50/p95( 默认 20 运行于 3 warums 后) 浏览器道对 AXI 倒置于 open/form/tabs/ native 固定装置之上; text-token 代理 ceil(stdout chars/4)一个代理,而不是一个象征性的.

以一台由任务拥有的Chromium 151 (Xvfb) 所测量的单相机1280x720 Xvfb--window-position=0,0 --window-size=1280,640,在3次热身后每任务20次测量跑道,每跑道CLI墙壁时间

任务车道p50 ms (英语)p95 分钟呼叫/运行重试文本脚本代理/运行失败
本地输入轴页:168国1.0 国家0 个22个第1/23号决议
打开 + 验证标题浏览器532个558 (韩语)2.0 数据0 个149个0/23 (英语)
打开 + 验证标题轴6043 (英语)第8659号2.0 数据0 个107国0/23 (英语)
表格填充+保存+验证浏览器1735 (英语)6082号4.0 (韩语)0 个290国0/23 (英语)
两个标签同时读取浏览器第5176条6007 (英语)17.0 (中文(简体) )0 个900个0/23 (英语)
表格填充+保存+验证轴未完成 —— OCR 单词目标步骤 (--into Name, (中文(简体) ), click Save板凳序列呈片状;孤立地通过同样的台阶,批/装机在流.mjs中得到证明。 后继:稳定后再进行再测量.
两个标签同时读取轴未完成 —— 弹出- 链接点击器上相同的 OCR 字- 目标限制; 孤立工作, 尚未在被测量的序列中进行.

浏览器道用紧凑的文本快照完成了每条网络任务23/23;桌面道的OCR倒置对本土证明保持可靠,并在小网络文本上降解,与2026-09-27计算机使用基准中的双行道排名相匹配.

对于一个远程签名的Mac桥,启动一次 在许可的应用程序内,然后将其Unix套接字转发到一个持续的SSH连接上: ssh -N -L "$LOCAL_RUNTIME/desklink-axi/default.sock:$REMOTE_RUNTIME/desklink-axi/default.sock" mac-host设置 XDG_RUNTIME_DIR=$LOCAL_RUNTIME 客户端( 创建) $LOCAL_RUNTIME/desklink-axi 模式 0700,先运行 desklink-axi screen, (中文(简体) ), batch等当地. SSH 登录不启动引擎, 转发的套接字授权控制: 使用私有目录, 完成后关闭 SSH 。 不运行本地 start 对接转发的套接字。 切换和重签每个运行的可执行文件 。 使用相同的密钥更新整个应用程序的现有路径 packages/desktop-host/release/install-mac-app.sh;更新后核实赠款.

desklink-axi setup hooks 加一个克劳德 SessionStart 钩入 .claude/settings.local.json ;它不开始抓取.

为孤立的融合证明运行 DESKLINK_AXI_ENGINE=/path/to/engine CARGO_TARGET_DIR=/tmp/task-owned-target node packages/axi/test/flow.mjs 从寄存器根。 它通过精确的PID发射并杀死自己的Xvfb进程. test/a11y-flow.mjs 是可访问性+标记证明:它也开始一个私有的D-Bus会话总线,一个私有的AT-SPI总线,以及一个GTK3固定应用程序(所有任务拥有,私人 XDG_RUNTIME_DIR),声称语义-ref驱动窗体控件和文件对话框,每个命令的打印p50/p95 --measure 20它跳过自己,当 busctl编号 :dbus-daemon编号 :at-spi2-core/GTK缺席,从来不会触碰用户的无障碍巴士.

对于200个字的OCR和查询证明,添加 DESKLINK_OCR_SCALE=1 或者说 DESKLINK_OCR_SCALE=1.5 财务报告和审定财务报表 DESKLINK_OCR_EVIDENCE=/absolute/output/directory 到那个命令。 后者采用1.5级的私人3840×2160显示. 每次运行都会保存地面真相,OCR,单词diff,截图和每个可见标签查询. 添加 DESKLINK_OCR_UPDATE_README=1 到 1x 运行以直接以 CLI 输出取代 README 记录;没有记录行是手编辑的。 使用 DESKLINK_OCR_SHOWCASE_ONLY=1 与 1x 命令重放编辑并重出原样,而不重复标签-query 检查。 这个证据需要铬和宇宙魔方 2.5 s 的输入内读取下个框(多至1.3 s后)并画出细细的柱子相闪烁在二者之间,所以文本护栏不读作后缀 |永不切入窗口的护身符仍然可以读取。 全帧OCR在宇宙魔方之前的软件上提升了3x,因此一个3840x2160帧的瞬间需要11520x6480(~74.6M px,~298MB RGBA)缓冲器外加PNG编码外加放大图像上的宇宙魔方.

要检查 CLI 对 AXI 规格, 运行 axi-axi validate "node bin/desklink-axi.js" --dir . 从 packages/axi。 。 。 .

在1280x720 Xvfb客户端上测量: diff → click 100,100 → look @r1 → type abc 返回 79+ 79+ 39+ 30= 227个文本符号 (单位:千美元)@anthropic-ai/tokenizer 0.0.4),外加~5个令牌,用于64×64作物. 四张完整截图将花费~4×1,229= 4 916个图像符号 在同一公布的宽度x高/750估计值(~21x相差)下。 这是一个短暂的合成任务,而不是生产-工作量基准;表示器是遗留的,所以绝对数是相近的.

无障碍树tree)——Linux AT-SPI (英语)

tree 在 D- Bus 上读取桌面的 AT- SPI 访问树, 返回绑定的 TON 行 ref,role,name,value,x,y,w,h,states。读取和输入动作共享相同的对齐会话。 参考文献为生成标记( Q)@a<gen>.<n>),在较新的快照中保持可用,并在使用时重新验证:其角色、名称或屏幕范围改变或对象消失的参考文献返回 stale-ref 而不是装瞎.

  • 能力探测器: 总线从 AT_SPI_BUS_ADDRESS,则 org.a11y.Bus.GetAddress 在会话总线。 无法获取 + 结构 a11y-unavailable 错误; 每个其它命令继续工作 。 macOS AX 是 未执行 并贴上这样的标签.
  • 值:文本和值部件在 value 栏(Text/Value 接口),所以可以不使用像素来验证一个已输入的条目.
  • 国家包括: enabled, (中文(简体) ), showing, (中文(简体) ), focused, (中文(简体) ), editable, (中文(简体) ), checked; 对已禁用或隐藏的参考返回采取行动 not-actionable。 。 。 .
  • click @a<gen>.<n> 执行部件自己的 AT- SPI 动作( U)input: applied (atspi action "Click")); 没有动作接口的节点会回落到其中心点击的坐标上(coordinate fallback) (中文(简体) ). type "text" --into @a<n> 首先抓取AT-SPI焦点(atspi focus; 工具包拒绝时坐标回落)。 原始截图/坐标/OCR路径不变.
  • tree --query <words> 按名称/作用/值过滤;输出范围为40行,除非 --full· ; --fields 选择列. tree 财务报告和审定财务报表 marks 可用作 batch 步骤.

测量事实(私营Xvfb + 私营公共汽车,2026年9月); test/a11y-flow.mjs:

  • GTK3 (3.24, atk-bridge):完全暴露. 已命名的角色, 边框, 状态, 值, 和行动全部在 D- Bus 上工作; 语义点击会带真实效果( fixture- 校验文件导出) 。 期间a GtkDialog.run() 模式循环开始, atk- bridge 答案 没有 AT-SPI方法调用(测量了25分超时)——对话框必须读取后才能打开或非模式显示.
  • Qt6 (6.11, QtAtSpi): 用重复的注册条目在 a11y 总线上注册应用程序(一个应用程序有3个根,两个共享一个总线名称),其命名的形式控件可见于行走 (3/3 in the fixture); 一些根拒绝 GetChildCount 方法(只有财产),行走可以容忍。 将每个工具Kit角色拼写("按下按钮"与"按钮")处理,并复制根作为正常输入.
  • Wayland/portal:11y总线是显示-protocol独立的,但通过compositor的门户/permission路径曝光是 未测量 在这项任务中(没有拥有Wayland固定); 范围之前依赖它.
  • 测量出20多条暖跑道(1280x720 Xvfb,GTK3固定道,私人公交): tree --full p50 472 ms / p95 573 ms,语义学 click p50 69 ms / p95 85 ms, (英语), type --into p50 69 ms / p95 83 ms, (英语), marks p50 657 ms / p95 774 ms, 0 stale-ref retries 横跨整个套房. 每个 tree编号 :marks 行走是受约束的(~100-400受约束的busctl产卵,每个水平平行).

标记( E)marks)——编号为可视倒置

marks 将数字框覆盖在可操作候选人的作物上——AT-SPI节点并加上OCR文本——并返回图像路径和一个紧凑 mark,ref,label,role 地图。 从已编号的图像中选择一个控件, 然后按其可读性行事; 没有像素猜测 。 成本线报告作物的尺寸和估计的图像符号(dimensions=1280x720 cost: ~1229 tokens) (中文(简体) ). 地图中的折射器会失效 就像 tree 参考:已更改的几何或内容返回 stale-ref 在使用时. --region x,y,w,h 扩大作物范围; --out <path> 选择文物路径(默认写在会话旁边)。 覆盖图是纯粹的缓冲操作( P)src/marks.ts没有捆绑的探测器.

版本与发布记录

@desklink/axi 共发布 20 个版本,首次发布于 2026/09/30;过去 12 个月发布了 20 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.5.17latest2026/10/3113 天前
0.5.162026/10/3013 天前
0.5.152026/10/2816 天前
0.5.142026/10/2519 天前
0.5.132026/10/2519 天前
0.5.122026/10/2420 天前

关于 @desklink/axi 的常见问题

@desklink/axi 是什么?

读取并驱动桌面链接的代理化 CLI

如何安装 @desklink/axi?

在项目目录运行 npm install @desklink/axi,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 desklink-axi,可以用 npx desklink-axi 直接运行。

@desklink/axi 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/desklink__axi 是否存在。

@desklink/axi 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@desklink/axi 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@desklink/axi 可以商用吗?

@desklink/axi 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@desklink/axi 的下载量有多少?

根据 npm 官方下载统计,@desklink/axi 在 2026/10/12 – 2026/11/10 这 30 天内被下载 2,366 次,日均约 79 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@desklink/axi 还在维护吗?

最新版本 0.5.17 发布于 2026/10/31(13 天前);至今共发布 20 个版本,其中过去 12 个月发布了 20 个;首次发布于 2026/09/30。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。