dsh-mac-cua:macOS Computer Use 插件

前言

在 DeepSeek Harness (DSH) 中實現桌面應用的控制,通常需要編寫針對特定應用的腳本,或者依賴脆弱的 UI 自動化測試框架。dsh-mac-cua 插件通過 macOS 原生的 Accessibility API,爲 DSH 提供了一套通用的 Computer Use 解決方案。它不依賴預定義的 UI 映射,而是通過一個持久的 JavaScript REPL,讓智能體以代碼形式直接讀取和操作桌面元素。

插件介紹

dsh-mac-cua 是 Saunato 維護的一個 DSH 插件,核心目標是讓智能體能夠像人類一樣操作 macOS 應用。它將複雜的系統可訪問性樹轉化爲可讀的文本,並提供了一套 sky API 供智能體調用。

安裝與配置

安裝插件後,需要運行安裝腳本以寫入必要的絕對路徑配置,並授予系統權限。

  1. 安裝插件
    使用以下命令安裝插件:
    dsh plugin --profile web add dsh-cua
  1. 配置路徑
    插件安裝後,需要執行設置腳本以確保路徑正確寫入配置文件:
    dsh-cua-setup --write
    dsh-cua-setup
如果是手動安裝或需要覆蓋配置,`dsh-cua-setup` 命令可以顯示或移除配置行。
  1. 授予權限
    插件運行依賴系統權限,必須在“系統設置”中手動開啓:

    • 可訪問性:必須開啓。路徑:系統設置 → 隱私與安全性 → 可訪問性 → 添加並啓用 DSH Desktop。
    • 屏幕錄製:可選。僅在使用截圖功能時需要。路徑:系統設置 → 隱私與安全性 → 屏幕錄製 → 添加並啓用 DSH Desktop。

    開啓權限後,請重啓 DSH Desktop。

核心功能

插件提供了一套固定且強大的工具集,所有操作都通過 sky 對象實現。

  • 讀取狀態:通過 sky.get_app_state 讀取任意應用的可訪問性樹文本。首次讀取後,後續讀取會返回增量變化(diff),從而節省 Token 成本。支持同時返回截圖。
  • 執行操作:支持點擊(元素或座標)、輸入文本、粘貼、按鍵組合、滾動、拖拽、選擇文本以及調用可訪問性動作。
  • 圖像反饋:可以將讀取到的截圖重新以圖片形式返回給智能體上下文。

使用示例

智能體通過 nodeRepl 工具編寫 JavaScript 代碼,與 sky API 交互。

1. 讀取應用狀態

var state = await sky.get_app_state({ app: "Finder" });
nodeRepl.write(state.text);

2. 操作元素並讀取結果
通過上一步獲取的索引進行點擊操作,然後再次讀取狀態:

await sky.click({ app: "Finder", element_index: 42 });
nodeRepl.write((await sky.get_app_state({ app: "Finder" })).text);

3. 讀取截圖
將截圖數據流回對話中:

const fs = await import("node:fs/promises");
const { fileURLToPath } = await import("node:url");
var state = await sky.get_app_state({ app: "Finder" });
if (state.screenshot) {
  await nodeRepl.emitImage({
    bytes: await fs.readFile(fileURLToPath(state.screenshot.url)),
    mimeType: "image/png",
  });
}

API 參考

以下爲 sky 對象的主要方法:

  • sky.get_app_state({ app, disableDiff?, screenshot? }): 獲取應用狀態,返回 { text, screenshot }。
  • sky.list_apps(): 列出所有可訪問的應用。
  • sky.get_screenshot(): 獲取當前屏幕截圖。
  • sky.click({ app, element_index?, x?, y?, mouse_button?, click_count? }): 點擊元素或座標。
  • sky.set_value({ app, element_index, value }): 設置字段值。
  • sky.select_text({ app, element_index, text, prefix?, suffix?, selection_type? }): 選中文本。
  • sky.perform_secondary_action({ app, element_index, action }): 執行可訪問性動作。
  • sky.type_text({ app, text }): 輸入文本。
  • sky.press_key({ app, key }): 按下鍵。
  • sky.paste({ app, text, format }): 粘貼文本,會恢復之前的剪貼板內容。
  • sky.scroll({ app, element_index?, x?, y?, direction, pages? }): 滾動頁面。
  • sky.drag({ app, from_x, from_y, to_x, to_y }): 拖拽操作。

app 參數支持顯示名稱(如 “Finder”)、Bundle ID(如 “com.apple.finder”)或完整路徑。

注意事項

  1. 環境要求:需要 macOS 14.4 或更高版本(支持 Apple Silicon 或 Intel),以及 Node.js 20 或更高版本。
  2. 索引有效性:element_index 僅對生成該快照時的元素樹有效。每次 get_app_state 都會生成新的索引映射,過期的索引會被拒絕並提示重新讀取。
  3. 輸入行爲:type_text 會等待鍵盤焦點並讀取字段回顯,以確保輸入正確。在文本中包含 \n 會觸發 Return 鍵。
  4. 剪貼板恢復:paste 操作在執行粘貼後會恢復你之前的剪貼板內容,避免打斷你的工作流。
  5. 代碼審查:雖然插件爲 MIT 許可證,但在生產環境使用前,建議檢查源碼以確保符合你的安全與合規要求。

總結

dsh-mac-cua 爲 DSH 智能體提供了一種基於可訪問性 API 的、原生的 macOS 控制方案。通過 JavaScript REPL 和 sky API,開發者可以構建能夠處理複雜桌面交互的智能體,適合需要自動化辦公、GUI 自動化測試等場景。

  • 插件目錄: https://www.skillhub.cn/plugins/Saunato/dsh-mac-cua
  • 源碼倉庫: https://github.com/Saunato/dsh-mac-cua
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜