17611538698
info@21cto.com

AI “逆向分析” 阿里推出的“悟空” App技术架构

架构 0 13 18小时前
图像

导读:有“好事”开发者对阿里的“悟空”进行了分析,使用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. 架构总结图

图像

17. 核心结论


Wukong 是阿里钉钉团队打造的下一代 AI Agent 桌面操作系统,核心特征:

  • Tauri + Rust 原生架构 — 非 Electron,性能优异,主二进制 122MB 包含所有逻辑

  • 多 Agent 引擎共存 — 同时支持自研 Spark、Claude Code、Gemini CLI、Codex CLI 等

  • 全栈 Agent 能力 — 代码执行、浏览器自动化、屏幕截图、UI 自动化、文件处理、文生图/视频

  • MCP 协议原生支持 — 可连接外部 MCP 服务器扩展工具能力

  • 完善的技能系统 — 内置技能 + 浏览器增强技能 + 用户自装技能,渐进式发现

  • 多渠道分发 — 同一 Agent 可通过钉钉 AI Card、Slack、WhatsApp 等渠道交互

  • 本地 LLM 能力 — 内置 Qwen 模型,支持离线推理

  • 企业级安全 — 沙箱隔离、HITL 权限审批、敏感路径过滤、Prompt Guardrails、凭证加密

  • 自包含运行时 — 内嵌 Bun/Node/Python/Chromium,无需用户额外安装

  • DDD 架构 — AllSpark 内核采用领域驱动设计,Application/Domain/Infrastructure 分层清晰


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

其实逆向工程并不是新鲜事,并且也只是前端的App,后端服务器代码才是重头戏,且不是很好突破,仅博各位开发者一笑。

编辑:手扶拖拉斯基

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信