Files
ycode/docs/WorkBuddy-AI-复刻可行性评估.md

168 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WorkBuddy AI 能否「1:1 复刻」——基于 REA 的可行性评估
> 历史评估,结论已由 `1比1复刻重新评估-2026-10-15.md` 修正。本文把“行为复刻”等同于“源码复制”、从体积/压缩/工具未配置推出“不可能”的推理不成立;原生和云端未覆盖项应标为条件或未知,不沿用本文的一概否定。
**评估对象**:《WorkBuddy-AI-实现分析报告.md》所述目标(本机安装的 WorkBuddy 桌面版 v37.10.3-42)
**评估方法**:REA MCP 实测(`analyze_javascript_application`、`binary_session` 能力探测)+ asar 清单解析 + 混淆度/源码可得性度量
**评估日期**:2026-10-14
---
## 0. 结论(TL;DR)
**不能 1:1 复刻。** REA 足以支撑「**读懂**」和「**功能等价重写(clean-room)**」,但达不到「**1:1 复刻**」——这是三重封死,不是工具能力不足:
| 维度 | 能否 1:1 | 决定性原因 |
| --- | --- | --- |
| 法律 | ❌ | 1:1 复刻 = 复制腾讯专有代码,直接侵权。分析可以,照抄不行 |
| 原生二进制 | ❌ | ≈360MB 原生代码(含单个 199.5MB 的 `editor_sdk.exe`);本机**无任何反编译器可用**,即便装上 Ghidra 也只出伪代码 |
| 压缩 JS | ❌ | 主 bundle 全部 rolldown/rspack 压缩,**0 个 source map**、`.js.map` 不含 `sourcesContent`、无 `.ts` 源 |
| 云依赖 | ⚠️ | 排除云部分后,本地引擎**不推理**,AI 能力实质归零——复刻出来是个没有大脑的壳 |
**一句话**:REA 能给你一张足够精确的「建筑图纸」,但拿不到「原始建材」;而且这栋楼的主脑(模型+提示词)本来就在云上,拆掉之后剩下的部分 1:1 复刻也没有意义。
---
## 1. 先说法律红线(这条是决定性的)
「1:1 复刻」在工程上等价于**逐字节/逐逻辑复制专有软件**。WorkBuddy 的 `@genie/agent-cli`、`tsbx` 沙盒、`editor_sdk.exe` 均为腾讯闭源资产,`package.json` 的 `private: true` + 无开源许可声明。因此:
- **可以做**:逆向分析、理解架构、提取可公开观察的接口契约、用干净室(clean-room)方式独立实现等价系统。
- **不能做**:1:1 复制代码、重新打包分发。
下面所有技术结论都建立在「即使技术上允许」这一假设上——结论依然是**做不到 1:1**。
---
## 2. REA 实测:工具链本身的能力边界
在本机(Windows 11 / x64)实测 `binary_session`,得到关键事实:
| Provider | 状态 | 影响 |
| --- | --- | --- |
| JavaScript/Electron 分析 | ✅ 可用 | 唯一能真正跑起来的主力 |
| **Ghidra(原生反编译)** | ❌ `not_configured` — `GHIDRA_INSTALL_DIR` 未设置 | **无法反编译任何 .dll/.exe** |
| Hopper | ❌ `unsupported_host`(仅 macOS) | Windows 上不可用 |
| IDA | ❌ `not_configured` | 不可用 |
| `recover_javascript_sources`(Wakaru 反压缩) | ❌ `provider_missing`(仅 Linux x64) | **无法把压缩 bundle 还原成可读命名** |
| PE 资源 / .NET 静态分析 | ✅ 可用 | 只能看结构,不能出伪代码 |
> 这就是第一个硬约束:**本机对原生层是「黑盒」**。REA 自己声明其伪代码产物 *"not original source and not text-equivalent"*——即便配上 Ghidra,也只是逼近语义,不是还原源码。
**实测运行记录**:对 `app.asar` 限定 2 个源文件分析,结果——
- `parsed_javascript_files: 2`、`visited_ast_nodes: 11395`、`findings: 10`、`parse_failures: 0`
- 但 `coverage.status: partial`,遗留 **11,387 application unknowns / 128,327 semantic unknowns**
- 12 个语义族(call-flow、data-flow、boundary…)**全部 partial**
对比原报告 §8:跑主 bundle(2,238,569 AST 节点)耗时 5 分钟 / 6GB 堆,语义图**被父级预算截断**。结论一致:**REA 出的是抽样级证据,不是完整重建**。
---
## 3. 逐层拆解:哪些能量化,哪些不能
### 3.1 实际体积构成(asar 清单 + unpacked 实测)
安装总体积 ≈ **935MB**(Electron 运行时 279MB + `app.asar` 94MB + `app.asar.unpacked` 562MB),共 14,475 + 4,596 个文件。
| 类别 | 体积 | REA 可得性 | 能否 1:1 |
| --- | --- | --- | --- |
| **原生二进制** | ≈360MB | ❌ 本机无反编译器 | ❌ |
| **首方压缩 JS**(renderer 116.7MB、extensions 49.9MB、plugins 31.5MB、cli/dist 13.1MB、main/server.js 3.4MB) | ≈235MB | ⚠️ 语义可恢复,命名/注释丢失 | ❌ |
| **首方可读源码**(`cli/vendor/shim/*.cjs`、`cli/bin/*.cjs`) | ≈2.7MB | ✅ **就是完整源码** | ✅(但复制=侵权) |
| **第三方 OSS**(OpenAI Agents SDK、MCP SDK、OpenTelemetry、node-pty、koffi、zod、hono、@larksuiteoapi…) | ≈58MB | ✅ 公开可得 | ✅ 直接 `npm install`,无需复刻 |
### 3.2 无法 1:1 的「不可还原物」清单(实测)
**A. 原生二进制(决定性障碍)**
```
199.5 MB node_modules/@tencent/tencent-docs-ai-engine/bin/win32-x64/editor_sdk.exe ← Office 编辑器引擎(CEF 级)
22.0 MB cli/vendor/sandbox/5.8.5/betterleaks.exe
9.7 MB node_modules/@genie/im-channels-native/build/Release/ImSDK.dll
9.0 MB cli/vendor/sandbox/5.8.5/sandbox-center.exe
2.3 MB cli/vendor/sandbox/5.8.5/sandbox_ffi.dll
1.6 MB 合计 tsbx.dll / tsbx_sdk.dll / tsbxldr.dll / tsbxlow.dll ← 腾讯自研沙盒核心
+ 各 .node:turing_sdk、perf_metrics、wechat_copydata_decoder、job-object、ripgrep、qimei、os-bridge…
```
`tsbx.dll`(795KB)是自研沙盒的**策略执行核心**,`betterleaks.exe`(22MB)是泄漏检测引擎——这两个是 WorkBuddy 安全模型的关键差异点,**恰恰是最不可能被还原的部分**。而 199.5MB 的 `editor_sdk.exe` 基本可以判定为「不可重建」。
**B. 压缩 JS(语义可读,源码不可还原)**
主 bundle 度量:
```
cli/dist/codebuddy-lite-wb.mjs 9.48MB 2679 行 平均行长 3539 字符 最长 488,181 字符
main/server.js 3.60MB 1185 行 平均行长 3037 字符
```
证据:
- `sourceMappingURL` 出现次数 = **0**
- 全文 `.js.map` 共 60 个,抽样解析 `@genie/im-channels-sidecar/.../*.js.map` → **无 `sourcesContent` 字段**
- 安装包内 `.ts` 源文件 = **0 个**(仅 65 个 `.d.ts` 类型声明,只给接口形状、不给实现)
好消息:压缩不算彻底——**保留了 235 个可读函数名**(`doIsToolCall`、`isProxyToolCalls`、`bindAutowiredProvider`、`applyServiceDecorator`…)和几乎全部字符串字面量。这让 REA 的语义恢复质量明显高于典型混淆产物,但**仍无法还原原始文件划分与命名**。
**C. 可读源码层(这块确实能 1:1)**
`cli/vendor/shim/` 与 `cli/bin/` 下的 `.cjs` 是**未压缩完整源码**,带缩进、带注释:
```
1162 行 node-brokered-fs-shim.cjs (fs 走 broker IPC)
861 行 node-safe-delete-shim.cjs (删除进回收站)
465 行 safe-delete-bulk-guard.cjs (批量误删防护,DEFAULT_THRESHOLD=20)
311 行 broker-ipc-client.cjs
128 行 daemon-supervisor.cjs
```
**沙盒 shim 层可以 100% 读懂并等价重写**——但这是全栈里最容易的部分。
### 3.3 「排除云部分」反而掏空了核心
原报告 §4 已明确:**本地不推理**,`@genie/model-compatibility` 只做 API 适配,模型选择/路由在服务端按套餐决定。被排除的云部分包括:
- 多模型网关与路由策略(GLM/混元/DeepSeek/Qwen/Kimi/MiniMax/GPT/Gemini/Claude)
- **主系统提示词全文**(本地仅有碎片,例如 bundle 里可检索到 `You are a background fork of the main agent. Follow these rules strictly:`)
- 账号鉴权(Bearer + `X-User-Id`)、套餐/配额、可观测上报
也就是说:**排除云部分后,你要复刻的「AI 能力」其智能来源本身就在被排除的那部分里**。剩下的本地引擎即使 100% 重写,接不上自己的模型网关也只是个空壳——除非你自建网关,那又变成另一件事(自研产品,而非复刻)。
---
## 4. 能力光谱:REA 究竟能带你走到哪一步
| 目标 | 可行性 | 说明 |
| --- | --- | --- |
| **读懂架构 / 写分析报告** | ✅ 完全可行 | 原报告已是范例,REA + 字符串证据足够 |
| **导出接口契约**(ACP 协议、工具 schema、MCP/Skill 约定、`.d.ts`) | ✅ 可行 | 协议与类型声明清晰可提取 |
| **等价重写可读 JS 层**(shim / daemon / bin) | ✅ 可行 | 有完整源码参考 |
| **等价重写压缩 JS 层**(agent 循环、工具系统、模型适配) | ⚠️ 可行但成本极高 | 语义可恢复 ≠ 源码可还原;需逐模块重建,且缺服务端提示词 |
| **重建原生沙盒**(tsbx + sandbox-center + betterleaks) | ❌ | 无反编译器;即便有,伪代码也无法 1:1 |
| **重建编辑器引擎**(`editor_sdk.exe` 199.5MB) | ❌ | 实质不可行 |
| **1:1 复刻整体** | ❌ | 法律 + 原生 + 压缩 + 云依赖,四重封死 |
---
## 5. 如果目标是「自己做一个同类产品」,正确路径
不要走「复刻」,走「参照 + 自研」:
1. **复用 OSS 底座**:Electron + Anthropic 沙盒 runtime(开源)+ MCP SDK + OpenAI Agents SDK —— WorkBuddy 自己也是这么拼的。
2. **自研 agent 内核**:参照 Claude Code 的公开架构(工具循环、hooks、Skill/Plugin 约定、`CLAUDE.md` 体系),这些是**公开文档**级别的知识,不需要逆向。
3. **自建模型网关**:这是被排除的「云部分」,也是真正的护城河——自己实现多模型路由 + 提示词工程。
4. **沙盒另选方案**:Windows 上可用 AppContainer / Job Object + 文件系统虚拟化,或直接用已开源的 `anthropic sandbox-runtime`,不必也无法复刻 `tsbx`。
5. **明确边界**:抄协议与公开约定是安全的,抄二进制与压缩代码是侵权。
---
## 6. 最终判断
> **用 REA 做「理解」是够的,做「1:1 复刻」是不够的,且不需要——因为被排除的云部分才是核心价值所在。**
- REA 在本机的实际天花板:JS/Electron 层语义分析(coverage 明确为 *partial*),原生层**完全黑盒**(无 Ghidra/Hopper/IDA)。
- 结构上可 1:1 的只有约 **2.7MB 的 shim/daemon 可读源码**;占大头的 **360MB 原生二进制 + 235MB 压缩 JS** 都无法 1:1。
- 「排除云部分」这一前提,使复刻产物失去智能来源,投入产出比极低。
**建议**:把这次分析定位为「架构学习 + 接口提取」,产出「设计说明书」而非「副本」。若真要落地产品,按 §5 的自研路径走。