# 万相大师 WorkBuddy 卸载与迁移向导
uninstall_doc_version: 2026-10-25.1
product: all
channel: zip

此页帮助用户卸载已确认的历史安装并清理残留。用户明确要求卸载或迁移后按清单执行；仅访问本页不会删除本机文件。优先 WorkBuddy 原生卸载，不伪造宿主记录、不编辑内部数据库，不把“关闭技能”视为卸载。

## 1. 先准备独立维护工具和清单

需要 Node.js 18+。先下载到插件目录之外，验证同源发布信息与 SHA-256；无需 Token、无需访问旧平台服务。

```sh
node --input-type=module -e "const o='https://x.wanxiangdashi.com'; const r=await fetch(o+'/mcp/workbuddy/release',{redirect:'error',signal:AbortSignal.timeout(20000)}); if(!r.ok)throw Error('发布信息不可用'); const m=(await r.json()).maintenance; if(m.url!=='/mcp/install/workbuddy.mjs'||m.bytes>524288)throw Error('维护工具地址错误'); const s=await fetch(o+m.url,{redirect:'error',signal:AbortSignal.timeout(20000)}); if(!s.ok)throw Error('下载失败'); const b=Buffer.from(await s.arrayBuffer()); const c=await import('node:crypto'); if(b.length!==m.bytes||c.createHash('sha256').update(b).digest('hex')!==m.sha256)throw Error('校验失败'); const f=await import('node:fs/promises'); const p=await import('node:path'); const t=await import('node:os'); const d=await f.mkdtemp(p.join(t.tmpdir(),'wanxiang-workbuddy-')); const a=p.join(d,'maintenance.mjs'); await f.writeFile(a,b,{mode:384}); console.log(await f.realpath(a));"
```

将输出路径替换 <helper>：

```sh
node "<helper>" uninstall-plan --product all --channel zip
```

展示 affected_products、native_steps、actions、preserved、unknown、warnings。清理只限旧 xagent 最后发布的两个 WorkBuddy ZIP，以及旧 install URL 已记录的所有历史安装版本；其他未知旧平台插件不处理。已知万相旧安装清程序、保留万相凭证。新产品使用 wanxiang-xapp、wanxiang-xcharagent 标识；旧标识仅用于历史指纹核对，不能根据目录名称删除。

若原生卸载可能删除插件目录中的项目、个人文件或修改过的提示词，工具会拒绝准备卸载。先将这些用户文件移到插件目录之外，保留并更新 XApp 工作路径，再重新检查。保留的旧提示词存放在不自动加载的位置；旧地址、工具或凭证读取规则不得自动导入新插件。外部 XApp 项目及其路径索引不在删除范围。

## 2. 保存计划，然后原生卸载

用户已授权这次卸载时，使用刚返回的 plan_digest：

```sh
node "<helper>" prepare-uninstall --product all --channel zip --confirm-plan "<plan_digest>"
```

保存返回的 id。计划只含路径、字段名、文件摘要和来源，不保存配置原文或旧 Token。仅来自万相服务的现有凭证会保留；若新站凭证仅存在于待卸载连接配置，先迁入受保护的万相凭证文件。多个账号不擅自合并。归属不清时停止对应操作。

然后让用户按 native_steps，在 WorkBuddy “技能 → 已安装 → … → 卸载”移除清单中的技能。完整旧插件还需通过宿主插件/连接器管理入口移除其对应注册；尚未证实公开卸载 API，不能宣称已自动完成。旧完整套件及共享旧密钥的已知旧技能可能同时影响两个产品，先说明 affected_products，再一次处理，避免两个清理流程并发。清理返回的安装 URL 会包含受影响产品，按用户选择恢复所需技能，避免迁移后丢失原有入口。

## 3. 清理原生卸载后的残留

原生卸载完成后：

```sh
node "<helper>" clean --id "<id>" --native-uninstalled
```

只按原计划删除已确认程序、旧注册和旧平台凭证；配置中其他字段、未知插件和用户数据保持原状。已确认属于本工具的旧回退记录若含已识别旧 Token，也会清理，不把密钥转存到新回退文件。文件在准备后变化则停止，重新检查，不覆盖后来的安装。

系统/登录环境或其他宿主共享变量不能仅凭名称删除。工具只报告能确认的旧注入项；需要用户在自己的终端处理的项必须明确列为待办，禁止 sudo、提权或绕过沙箱。旧 Token 的本地清理不等于服务器撤销，也不承诺抹除历史聊天或系统备份。

若返回 `files_clean_environment_pending`，按 `environment_tasks` 逐项处理。只有值与已证明的旧密钥匹配时才给出以下命令；先说明共享环境可能影响其他宿主，让用户在自己的终端操作。`not_readable_manual_review` 不代表已证明归属，不能据此删除。不要对列表之外的变量操作。

macOS 的 `launchd` 项：将 `<确认变量名>` 替换成报告中的名称，执行后完全退出并重新打开 WorkBuddy：

```sh
launchctl unsetenv <确认变量名>
```

Windows 的 `User` 项，在用户自己的 PowerShell 中执行，然后完全退出包括托盘中的 WorkBuddy，再重新打开：

```powershell
[Environment]::SetEnvironmentVariable('<确认变量名>', '', 'User')
Remove-Item 'Env:<确认变量名>' -ErrorAction SilentlyContinue
```

`Machine` 项交给用户在系统环境变量管理界面核对，工具不提权。仅 `process` 项可能来自启动 WorkBuddy 的终端；从干净的系统启动入口重新打开后复查。注销登录、删除启动项或处理其他宿主都不属于自动清理步骤。用户尚未处理时保留“环境待完成”，不能把文件清理成功称为全部密钥副本已清除。

## 4. 重新安装与检查

本次选定渠道为 zip。按返回的 affected_products 说明影响范围，再按用户原先选择恢复所需产品。计划与 clean 的返回链接会保留原先的 product、channel；直接使用返回链接，不按受影响范围擅自扩大安装目标。未包含渠道的历史计划恢复为 ZIP 导入。若官方市场尚未确认上架，则停止该渠道，说明可改用 ZIP 或 URL 向导，由用户选择。

完成后按宿主支持的方式重载并新建任务；必要时完全退出再打开 WorkBuddy。检查 installation-status、preflight，先完成本地稿件；平台任务再用保留的万相凭证执行 doctor 和真实只读查询。尚未完成原生卸载、环境清理或宿主加载验证时，分别报告待办，不宣称全部清干净。上下文内容更新无需执行本卸载向导。

安装向导：https://x.wanxiangdashi.com/mcp/install/workbuddy?product=all&channel=zip
