找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4249

积分

0

好友

595

主题
发表于 2 小时前 | 查看: 3| 回复: 0

AI解剖悟空:Wukong.app架构逆向分析主题插画

导读:一位开发者对阿里最新推出的AI Agent客户端“悟空”进行了深入的逆向分析,整个过程借助了AI工具辅助,效率显著提升。

由钉钉团队开发的这款AI Agent桌面客户端,内部代号“Real”,对外品牌名为“悟空(Wukong)”。本文基于某位开发者网友利用AI进行的“逆向分析”与跟踪,从其架构上看,设计与思路与开源的OpenClaw颇有相似之处。该分析并未涉及任何反编译或对原应用的破坏性操作,仅为启发设计、学习思想之用。文中部分文字描述因源编辑器原因,若呈现稍显混乱,敬请理解。

操作方法:通过逆向分析App Bundle结构、二进制符号、动态库依赖及资源文件来实现。

1. 基本身份信息

属性
显示名称 Wukong(悟空)
Bundle ID com.dingtalk.real
可执行文件 DingTalkReal
版本 0.9.0
最低系统 macOS 14.0
架构 arm64 (Apple Silicon)
开发团队 钉钉 (DingTalk / 阿里巴巴)
构建环境 Jenkins CI (real-wukong-release),构建用户 yuanzhan
自定义 URL Scheme wukong://

2. 技术栈总览

核心框架:Tauri 2.x + Rust + WRY/WebKit

  • 主程序:纯 Rust 编写,使用 Tauri 框架(非 Electron)
  • 前端 UI:运行在 WebView 内的 Web 应用(Tauri 生态通常用 React/Vue/Svelte)
  • IPC 机制:Tauri 自定义协议 tauriipc://,带 Isolation Pattern 安全隔离模式

系统级原生框架依赖

通过 otool -L 分析动态库链接:

框架 用途
WebKit + JavaScriptCore WebView 渲染与 JS 执行
AVFoundation + AVFAudio + CoreMedia 音视频处理
ScreenCaptureKit 屏幕截图/录制
CoreLocation 地理定位
UserNotifications 系统通知
OSAKit AppleScript 自动化
Metal + QuartzCore GPU 渲染
CloudKit iCloud 数据同步
CoreData 本地数据持久化
Security 密钥链/加密
IOKit 硬件交互
SystemConfiguration 网络配置
CoreImage + ImageIO + ColorSync 图像处理
CoreText 文本渲染
CoreVideo + IOSurface 视频/Surface 管理

3. App Bundle 目录结构

Wukong.app/Contents/
├── Info.plist                          # 应用元数据
├── _CodeSignature/                     # 代码签名
├── MacOS/
│   ├── DingTalkReal                    # 主可执行文件 (122MB, arm64, Rust)
│   └── real-cli                        # CLI 工具 (2.8MB, arm64)
├── Frameworks/                         # (空 — 无第三方 framework)
└── Resources/
    ├── icon.icns                       # 应用图标
    ├── zh-Hans-CN.lproj/               # 简体中文本地化
    ├── zh-Hans.lproj/                  # 简体中文本地化
    ├── python/                         # (预留 Python 目录)
    └── resources/
        ├── browser-runtime/        # 浏览器自动化运行时 (TypeScript)
        ├── bundled-skills/             # 内置技能包 (zip)
        ├── dws/                        # DWS 内部服务
        ├── environment/                # 运行环境管理
        ├── mbb-skills/                 # 浏览器增强技能
        └── real_networking/            # 网络层 (含 GaeaMac.framework)

4. Agent 运行时架构(从 Rust 源码路径反推)

src/
├── main.rs                              # 入口
├── agent/                               # ===== AI Agent 核心 =====
│   ├── agent_client/
│   │   ├── connection/processes.rs      # ACP (Agent Communication Protocol) 进程管理
│   │   └── session/builder.rs           # 会话构建器
│   ├── runtime/
│   │   ├── real_loop/                   # "Real Loop" — 主 Agent 循环引擎
│   │   │   ├── loop_engine.rs           # 核心循环
│   │   │   ├── commands.rs              # 命令处理
│   │   │   ├── types.rs                 # 工具定义(内置工具声明)
│   │   │   ├── message_converter.rs     # 消息格式转换
│   │   │   ├── memory_summarizer.rs     # 对话记忆摘要
│   │   │   ├── sensitive_paths.rs       # 敏感路径过滤 (~/.real/.acp)
│   │   │   ├── session_approval_memory.rs # 权限审批记忆 (HITL)
│   │   │   ├── skill_snapshot.rs        # 技能发现与注入
│   │   │   └── sandbox_policy_loader.rs # 沙箱安全策略加载
│   │   ├── spark_loop/                  # "Spark Loop" — 自研 Agent 引擎
│   │   │   └── allspark/crates/         # 内嵌独立 Rust workspace (DDD 架构)
│   │   │       ├── application/         # 应用层
│   │   │       │   └── agent/
│   │   │       │       ├── stream/service_impl.rs
│   │   │       │       └── session_memory_flusher.rs
│   │   │       ├── domain/              # 领域层
│   │   │       │   ├── agent/compaction.rs
│   │   │       │   ├── common/llm.rs
│   │   │       │   └── session/entity.rs
│   │   │       └── infrastructure/      # 基础设施层
│   │   │           ├── shared/llm/
│   │   │           │   ├── maas.rs      # 阿里云 MaaS API
│   │   │           │   ├── qwen.rs      # 通义千问 (OpenAI 兼容)
│   │   │           │   └── openai.rs    # OpenAI API
│   │   │           ├── sandbox/gateway_impl.rs
│   │   │           ├── soul/            # "Soul" — Agent 人格/记忆
│   │   │           └── agent/system_prompt_template.rs
│   │   ├── real_tools/                  # ===== 内置工具集 =====
│   │   │   ├── infrastructure/
│   │   │   │   ├── browser/
│   │   │   │   │   ├── control_plane.rs # 浏览器生命周期管理
│   │   │   │   │   └── embedded/
│   │   │   │   │       ├── page_actor.rs      # 页面操作 Actor
│   │   │   │   │       ├── session_port.rs    # 会话端口
│   │   │   │   │       └── artifact_port.rs   # 文件下载
│   │   │   │   └── proxy.rs             # Sidecar 代理
│   │   │   └── tools/
│   │   │       ├── cron/shared.rs       # 定时任务
│   │   │       ├── text2image.rs        # 文生图
│   │   │       ├── text2video.rs        # 文生视频
│   │   │       └── web/
│   │   │           ├── core/robots.rs   # robots.txt 解析
│   │   │           └── search/aggregator.rs # 搜索聚合
│   │   ├── dingtalk_supports/cloud/     # 钉钉云端工具
│   │   └── path_codec.rs
│   ├── memory/                          # ===== 持久化记忆 =====
│   │   ├── service.rs                   # 记忆服务
│   │   └── sqlite.rs                    # SQLite 存储
│   ├── persistence/
│   │   ├── consumer/mod.rs              # 消息块消费者
│   │   └── db_store/spark_agui_message.rs
│   ├── session/session_manager/         # 会话管理
│   ├── attachments/mod.rs               # 附件管理
│   └── agui_stream.rs                   # Agent GUI 流
│
├── gateway/                             # ===== API 网关层 =====
│   ├── commands.rs                      # Tauri 命令
│   ├── service.rs                       # 路由分发引擎
│   ├── models.rs                        # 请求/响应模型
│   └── draft.rs                         # 草稿系统
│
├── channels/                            # ===== 多渠道接入 =====
│   ├── dingtalk/
│   │   ├── ai_card.rs                   # AI 卡片消息 (流式)
│   │   ├── stream.rs                    # 钉钉 Stream
│   │   └── commands.rs
│   ├── slack.rs                         # Slack 集成
│   ├── whatsapp.rs                      # WhatsApp 集成
│   ├── agent_support.rs
│   └── types.rs                         # 设备注册 RPC
│
├── mcp/                                 # ===== MCP 协议 =====
│   ├── runtime.rs                       # MCP 服务器运行时
│   ├── cli.rs
│   └── config.rs                        # mcpServerConfig.json
│
├── model_provider/                      # ===== LLM 提供商管理 =====
│   ├── commands.rs                      # API Key / 凭证管理
│   ├── cli.rs                           # 技能 markdown 加载
│   └── dingtalk_runtime.rs
│
├── cron/                                # ===== 定时任务系统 =====
│   ├── commands/job_commands.rs
│   ├── mod.rs
│   └── store/
│       ├── job_store.rs
│       ├── run_store.rs
│       └── delivery_store.rs
│
├── skills/                              # ===== 技能系统 =====
│   ├── commands.rs                      # 安装/启用/禁用/删除
│   └── health.rs                        # 技能健康检查
│
├── hooks/commands.rs                    # ===== Hook 系统 =====
│
├── environment/mod.rs                   # ===== 运行环境管理 =====
│
├── real_cli/router.rs                   # ===== CLI 路由 =====
│
├── rpc/                                 # ===== RPC 接口 =====
│   ├── agent_device.rs
│   ├── browser_runtime.rs
│   ├── gateway.rs
│   ├── kinto_chat.rs
│   └── model_provider.rs
│
├── dingtalk_core/                       # ===== 钉钉核心 =====
│   ├── login/
│   │   ├── mod.rs                       # 登录状态机 (Unlogin → LoggingIn → Logged)
│   │   ├── models.rs
│   │   ├── agentbay_auth.rs             # AgentBay 认证
│   │   └── global_llm.rs               # LLM 凭证管理 (加密存储)
│   ├── heartbeat/manager.rs             # 心跳
│   ├── file_upload.rs                   # 文件上传
│   └── mod.rs
│
├── lwp/debug_workbench.rs               # ===== LWP 调试工作台 =====
│
├── system/                              # ===== 系统能力 =====
│   ├── screen_capture.rs                # 屏幕截图 (ScreenCaptureKit)
│   ├── audio_capture.rs                 # 音频捕获
│   ├── ui_automation.rs                 # UI 自动化
│   ├── app_scanner.rs                   # 应用扫描
│   └── power_management.rs              # 电源管理 (阻止休眠)
│
├── base/process_manager/                # ===== 进程管理器 =====
│   ├── manager.rs                       # 子进程生命周期
│   ├── lifecycle.rs                     # 状态机 (Running/Exited/Crashed/Restarting)
│   └── monitor.rs
│
├── types/generated/acp_message.rs       # ===== 自动生成的 ACP 消息协议 =====
│
└── ui_cli_command/theme.rs              # ===== UI 主题 =====

5. 支持的 Agent 类型

src/main.rs 二进制符号提取的 Agent 类型枚举:

Agent 类型 标识 说明
Spark spark 钉钉自研 Agent 引擎
Native native 原生驱动
Wukong 内部品牌统称
Claude claude Claude Code 集成
Gemini gemini Gemini CLI 集成
Codex codex Codex CLI 集成
iFlow iflow 工作流引擎
Builtin builtin 内置 Agent
Local local 本地模型 Agent
Discovered 自动发现的 Agent

由此可见,Wukong 是一个多 Agent 宿主平台,可以同时运行多种 AI Agent 引擎。

6. LLM 多后端支持

allspark/crates/infrastructure/src/shared/llm/ 反推出三个 LLM 适配器:

6.1 MaaS (maas.rs) — 阿里云模型服务

MaasRequest {     model, max_tokens, tools, stream, stream_options,     enable_thinking, tool_choice, parallel_tool_calls,     temperature, top_p, top_k, min_p, extra_body, cache_control }

  • 支持 prompt_cache_hit_tokens — 提示缓存命中统计
  • 支持 enable_thinking — 思考模式

6.2 Qwen (qwen.rs) — 通义千问

OpenAI 兼容格式,支持 enable_thinking

6.3 OpenAI (openai.rs) — 标准 OpenAI API

标准 OpenAI Chat Completions 格式。

全部适配器支持:streaming、tool_choice、parallel_tool_calls、usage tracking。

7. 内嵌运行时环境

应用内置了完整的开发/执行环境:

组件 版本 用途
Bun 1.2.17 主 JS/TS 运行时(运行 browser-runtime)
Node.js 22.19.0 备用 JS 运行时
Python 3.12 (CPython) Python 脚本执行
uv 0.7.13 Python 包管理器
Chromium 145.0.7632.160 内嵌浏览器(自动化用)
Qwen 0.10.0 本地通义千问模型(离线推理)
DWS 0.2.19 内部服务守护进程

运行时通过 resource_manifest.json 管理,支持按平台/profile 差异化分发。

8. 浏览器自动化系统

resources/browser-runtime/ 是一个独立的 TypeScript 微服务:

技术栈

  • Playwright (playwright-core 1.58.2) — 浏览器自动化引擎
  • Express 5 — HTTP API 服务
  • WebSocket (ws 8.19.0) — 实时通信
  • Bun — 运行时

模块结构

browser-runtime/src/
├── main.ts              # 入口
├── browser/             # 浏览器控制
│   ├── cdp.ts           # Chrome DevTools Protocol 客户端
│   ├── chrome.ts        # Chrome 启动管理
│   ├── client.ts        # 浏览器客户端
│   ├── client-actions.ts # 页面操作 (点击/输入/观察等)
│   ├── control-api.ts   # 控制 API
│   ├── control-auth.ts  # 认证
│   ├── bridge-server.ts # Bridge 服务
│   ├── extension-relay.ts # Chrome 扩展中继
│   ├── navigation-guard.ts # 导航守卫
│   ├── profiles.ts     # 浏览器 Profile 管理
│   ├── form-fields.ts   # 表单字段处理
│   └── pw-ai-module.ts  # Playwright AI 模块
├── cli/                 # CLI 接口
├── config/              # 配置
├── gateway/             # 网关
├── infra/               # 基础设施
├── logging/             # 日志
├── media/               # 媒体处理
├── process/             # 进程管理
├── security/            # 安全 (CSRF 等)
└── utils/               # 工具函数

安全模型

  • Bridge Auth Registry — 桥接认证注册
  • CSRF 防护
  • Control Auth (含 auto-token)
  • HTTP Auth
  • Extension Relay Auth

9. 技能系统 (Skills)

9.1 Bundled Skills(内置技能包)

技能包 用途
dingtalk-workspace.zip 钉钉工作台
docx.zip Word 文档处理
pptx-presentation-handler.zip PPT 演示文稿处理
xlsx-spreadsheet-handler.zip Excel 电子表格处理
pdf-document-handler.zip PDF 文档处理
pdf_convert_to_word.zip PDF 转 Word
skill-creator.zip 技能创建器(元技能)

9.2 MBB Skills(浏览器增强技能)

针对特定网站的自动化操作技能:

技能 ID 名称 目标域名
12306-train-query 12306 火车票查询 12306.cn
ctrip-flight-search 携程航班查询 ctrip.com
dianping-info-query 大众点评信息查询 dianping.com

9.3 技能发现机制

skill_snapshot.rs 反推的技能管理 API:

  • search_skills — 搜索可用技能
  • use_skill(skill_name, level="preview"|"full") — 激活技能
  • cli_skills_install_local / cli_skills_install_url — 安装本地/远程技能
  • cli_skills_toggle_enabled — 启用/禁用
  • cli_skills_delete — 删除
  • 支持 渐进式披露 (Progressive Disclosure) — 先展示常用技能,按需搜索更多
  • 支持 skill_injection_policy — 技能注入策略 (explicit/auto)

10. 内置工具 (Built-in Tools)

src/agent/runtime/real_loop/types.rs 提取:

工具名 功能
understand_image_content 图像内容分析(本地 Vision 模型/云端回退)
parse_file 文件解析(PDF 本地处理,其他格式云端)
text2image 文生图(文本描述 → 图像)
image2image 图生图(基于已有图像变换)
text2video 文生视频
read_url_v2 网页内容读取
reader_html_content HTML 内容解析
internet-search 互联网搜索
browser_start 启动浏览器
browser_stop 停止浏览器
browser_screenshot 浏览器截图
browser_wait_for_download 等待文件下载
browser_status 浏览器状态查询
execute_shell Shell 命令执行(沙箱内)
cron_* 定时任务管理

11. 多渠道通信架构

渠道 实现方式 关键细节
钉钉 AI Card (流式卡片) + Stream 长连接 使用 dtv1.card 模板,支持 IM_ROBOT 和 IM_GROUP
Slack OAuth API (auth.test) 支持 thread_ts 线程回复
WhatsApp 集成 独立模块
Agent Device RPC API 设备注册/更新/列表/删除/启用

消息事件流

TaskStart → PreToolUse → PostToolUse → PermissionRequest → TaskComplete/TaskError

12. 安全架构

12.1 沙箱系统

  • SandboxV2Config — 沙箱配置
  • 支持 sandbox level / profile / authorized roots
  • 沙箱快照保存/恢复

12.2 权限审批 (Human-in-the-Loop)

  • session_approval_memory — 记录用户的允许/拒绝决策
  • is_always_allowed / is_always_denied — 持久化权限
  • EvalAutoAllow — 评估模式自动允许

12.3 敏感路径过滤

  • 屏蔽 ~/.real/.acp 等内部目录
  • Allowlist 机制

12.4 Prompt 安全

  • PromptGuardrailsConfig — 提示词安全护栏

12.5 Tauri 安全

  • Isolation Pattern — 前端 IPC 隔离
  • CSP 保护

12.6 凭证安全

  • PreferenceCrypto — 偏好设置加密
  • 自动从明文迁移到加密存储
  • LLM 凭证过期/刷新机制

13. 辅助二进制与网络层

文件 大小 架构 说明
DingTalkReal 122MB arm64 主可执行文件 (Rust/Tauri)
real-cli 2.8MB arm64 独立 CLI 工具
real_networking universal (x86_64 + arm64) 网络层二进制
dws arm64 DWS 服务守护进程

网络层

  • GaeaMac.framework — 阿里内部网络框架 (Gaea)
    • 包含 AI、Aladdin、Base、Bridge 等子模块
    • 支持 Wukong 专用头文件
  • libdtfbase.dylib — 钉钉基础库

14. 数据存储

存储方式 用途
SQLite Agent 记忆、消息持久化、定时任务
CoreData 本地数据管理
CloudKit 云端数据同步
JSON 配置文件 MCP 服务器配置、环境清单
加密偏好设置 LLM API Key、登录凭证

15. 系统权限声明

权限 用途描述
AppleEvents 控制 Terminal 和其他应用执行任务
Camera 拍照和视频录制
Location (Always) 天气、导航等任务
Microphone 语音输入和音频捕获
Screen Capture 分析界面内容和执行自动化操作
Notifications 提醒任务执行状态和重要事件

16. 架构总结图

Wukong桌面应用架构流程图

17. 核心结论

Wukong 是阿里钉钉团队打造的下一代 AI Agent 桌面操作系统,通过对应用结构的逆向分析,我们得以窥见其核心特征:

  • Tauri + Rust 原生架构 — 非 Electron,性能优异,主二进制 122MB 包含所有逻辑
  • 多 Agent 引擎共存 — 同时支持自研 Spark、Claude Code、Gemini CLI、Codex CLI 等
  • 全栈 AI Agent 能力 — 代码执行、浏览器自动化、屏幕截图、UI 自动化、文件处理、文生图/视频
  • MCP 协议原生支持 — 可连接外部 MCP 服务器扩展工具能力
  • 完善的技能系统 — 内置技能 + 浏览器增强技能 + 用户自装技能,渐进式发现
  • 多渠道分发 — 同一 Agent 可通过钉钉 AI Card、Slack、WhatsApp 等渠道交互
  • 本地 LLM 能力 — 内置 Qwen 模型,支持离线推理
  • 企业级安全 — 沙箱隔离、HITL 权限审批、敏感路径过滤、Prompt Guardrails、凭证加密
  • 自包含运行时 — 内嵌 Bun/Node/Python/Chromium,无需用户额外安装
  • DDD 架构 — AllSpark 内核采用领域驱动设计,Application/Domain/Infrastructure 分层清晰

可见,悟空不只是一个聊天窗口,而是能控制电脑、操作浏览器、执行代码、管理定时任务、跨平台分发的智能体平台。

此次逆向工程分析主要是针对前端App的结构,并未触及后端服务器代码,但这已足够让我们了解其设计理念和技术选型,希望能给各位开发者在构建类似的人工智能应用时带来一些启发。更多深入的技术讨论,欢迎关注云栈社区的开发者们共同探索。

编辑:手扶拖拉斯基




上一篇:PDCA循环详解:从管理理论到落地实践的持续改进方法
下一篇:腾讯QClaw公测:支持微信QQ双端,AIGC版“一键安装”已支持Windows
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-19 11:50 , Processed in 0.622899 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表