# AI1NET 插件开发状态 + AA 开源插件功能迁至 WorkBuddy 的可行性评估 > 日期:2026-09-28 | 性质:**只读评估**(未改任何被评估项目的源码) > 取证方式:跑插件自带门禁 + 读本地实物(WorkBuddy 安装目录、插件缓存、guest SDK) > 材料边界:AA 的**手机侧页面与 AA Server** 不在本机任何副本内 ⇒ 本评估只判「功能本体能否在 WorkBuddy 侧落地」,不判「AA 服务端可否照抄」 --- ## 一、结论(先给判定) 1. **ai1net 插件**:门禁全绿(`rc=0`),规格 21 条路由**已实现 14 条** —— M2 模型管理 / M3 技能插件管理 / M5 IM 插件侧三块完整,**M1 多租户与 M4 覆盖网络界面未接入**。 2. **AA 开源插件的功能可分三层**:本机桥接层(强对位,可做)· 账号与设备层(部分对位,需自建服务端)· 手机接入层(**WorkBuddy 内无对应机制,不可能只靠它完成**)。 3. ⇒ **可行,但不是「移植」而是「重做 + 复用」**:WorkBuddy 侧只做「设备侧桥」,手机接入那一段复用你们**已有的平台能力**(覆盖网络中继 + 配对端点 + 手机页)。 --- ## 二、ai1net 插件开发状态(实测) **包**:`@dsh-local/ai1net`(`E:/ProgramData/AIProject/dsh-plugin-ai1net`)|pluginId `ai1net`|库 `dshs_pl_ai1net`|表前缀 `p_ai1net_` **判据实跑**:`node scripts/build.mjs --check-only` ⇒ **rc=0「✅ 门禁通过」**(含语法、客户端封包契约、host 半契约、数据面声明、M2/M3/M5 逐条冻结校验;M2 回读摘要 `M2_DIGEST=11d7b1be8aea3996`) | 模块 | 规格路由 | 已实现 | 状态 | |---|---|---|---| | S2 骨架 | 1(ping) | 1 | ✅ | | M2 模型管理 | 3 | 3 | ✅ 三条精确路由 / 六种方法;明文密钥零落台账;home 写走 UserFs | | M3 技能插件管理 | 7 | 7 | ✅(「搬包」在包外 = 平台侧拉取器) | | M5 IM 插件侧 | 3 | 3 | ✅ 含每插件令牌 + 实例级单例长轮询闸 | | M1 多租户 | 5 | 0 | ⛔ 未接入 | | M4 覆盖网络界面 | 3 | 0 | ⛔ 未接入 | | **合计** | **22** | **14** | 全包 14 条路径**互不重复**(实测) | **产物**:`lib/` 6 件(`index.js` 36 KB · `client.js` 55 KB · `im-plugin-sdk.mjs` 49 KB · `models-sdk.mjs` 33 KB · `plugins-sdk.mjs` 24 KB · `data-limits.js` 2 KB),最新写入 09-26 17:31。 ⚠️ **一条顺带发现**:`dsh-plugin-ai1net` **不在任何 git 仓内**(`git -C` 向上找不到 `.git`)。同一现象在 `dsh-plugin-forge` / `dsh-plugin-carbon` / `ai1net-dsh-anywhere` / `ai1net-dsh-desktop` **全部存在** ⇒ 这些"包"目前**只有文件系统副本、没有版本历史**。属风险项,不在本次评估范围。 --- ## 三、AA 开源插件是什么(被评估对象) **身份**:`Agents Anywhere(AA)` 的 DSH 插件,自称 **DSH Bridge Next**。本机实物 = `ai1net-dsh-anywhere/tmp/aa-inspect-20260926/package/`(README 28 KB + RUNTIME_READS + USER_QUESTIONS + `lib/bundled-connector/` + `locale/`)。 **它为 DSH 桌面做的事**(= 待评估的功能全集): | # | 功能 | 要点 | |---|---|---| | F1 | 侧栏入口 + 弹窗面板 | 挂官方 `sidebar.footer.action`(设置上方),四个标签页:登录和连接 / 设置 / 桥接日志 / 维护 | | F2 | 账号登录(云 或 自建服务器) | OAuth + 临时回环端口 + state + PKCE S256 + 一次性授权码 | | F3 | 手机扫码连接 | 复用 `/auth/mobile-login/{qr,status,confirm}`,二维码内嵌**临时**登录凭据 | | F4 | 设备注册 / 绑定 / 凭据恢复 | 同账号同服务**复用**已有设备;失效凭据按「已删除 / 已断开」两条人工恢复分支 | | F5 | 内嵌 Python Connector | `@dataiku/uv` 起 venv(Python 3.12+),stdio RPC,进程互斥 + 有序 Connector ID 历史 + 共享 `connector-runtime.json` | | F6 | DSH runtime 桥 | 原生会话/历史读取、**Timeline 投影 v3**、增量同步检查点、附件上传(图片接口 / `fileUploads.uploadStream`)、模型 / effort / 权限 | | F7 | 审批转发 | 官方 `approval/request` → 远端交互通知(允许一次 / 拒绝),含 `plan-review` 计划审批卡片 | | F8 | 桥接日志 | 只读、最近 200 条、2 s 刷新、滚动保留、写前脱敏 | | F9 | 维护 | 打开数据 / 日志目录、恢复出厂(先撤销设备凭据再清本地) | | F10 | 跟随宿主语言 | 中英切换、已开面板即时更新 | | F11 | Web onboarding | 独立引导页:添加 Agent → 可选手机连接 → 完成 | | F12 | 承载 | **AA 云中转**(自建服务器亦可) | --- ## 四、WorkBuddy 的扩展面(评估标尺 · 全部本地实测) **WorkBuddy 内核 = `@genie/agent-cli`(CodeBuddy/Genie 系)**,与 DSH/cordis **零共享** ⇒ AA 插件**不能装进 WorkBuddy**,只能按 WorkBuddy 的扩展面重做。 | 扩展面 | 实测形态 | 关键约束 | |---|---|---| | **Skill** | `.codebuddy-plugin/plugin.json`(`category: skill`,实测 52 个)+ `SKILL.md` + `references/` | 提示词与脚本层,**无自定义 UI 面板** | | **MCP app** | `category: mcp-app`(实测 4 个)+ `.mcp.json` | **`type: stdio`**;env 有 `${CODEBUDDY_PLUGIN_ROOT}` / `${CODEBUDDY_PLUGIN_DATA}` | | **Connector** | `.workbuddy/connectors/` + `enterprise-registry.json` | 外部系统集成,官方文档要求先搜连接器 | | **Hook** | `settings.json` → `SessionStart` / `PreToolUse` / `UserPromptSubmit` / `SessionEnd` | 会话启动时快照;**仅 4 个事件** | | **Automation** | 一次性 / 周期排期 | 由宿主拉起新会话 | | **发布为应用** | 本地项目 → 在线链接(sites) | 发布的是**项目产物**,不是 agent 会话 | | **guest SDK** | `resources/wb-guest-sdk/wb.js`(`@genie/workbuddy-desktop-sdk`) | 见下表;**未见公开文档** | **guest SDK 暴露的能力(`wb.js` 反解)** - 通用命名空间:`storage` · `config` · `account` · `openAuth` · `skills` · `experts` · `automations` · `workspaces` · `models` · `notifications` · `ops` · `connectors` · `conversations` · `artifacts` · `search` · `changes` · `intentRecognition` · `metrics` · `netdrive` · `inspirationCode` · `cloud` - 桌面专属:`paths` · `shell` · `mcp` · `buddyApps` - `conversations` 方法(节选):`sendPrompt` · `runPrompt` · `requests` · `artifacts` · `files` · `searchFiles` · `changes` · `cancel` · `resend` · `getPendingInfo` · **`resolvePending` / `rejectPending`** · `configSetModel` / `configSetPermissionMode` / `configSetExpert` … - 事件(节选):**`wb:conversation:permission`(权限请求)** · `stateChange` · `timelineEvent` · `planUpdate` · `artifactUpdate` · `creditChanged` · `contextUsageChanged` ⛔ **重要边界**:WorkBuddy 官方文档站**只有用户手册**(快速开始 / 创建任务 / 任务管理 / 对话 / 结果查看),**没有第三方插件开发文档**;`buddyApps` 虽在 SDK 命名空间里,但**未见对外形态与清单规范** ⇒ 结论必须按"未公开"处理。 --- ## 五、逐功能对位(按三层给判定) ### A 层 · 本机桥接 —— **对位强,可做** | AA 功能 | WorkBuddy 对位 | 判定 | |---|---|---| | F5 内嵌 Python Connector | **MCP app(stdio 外部进程)** —— 正是 WorkBuddy 的插件形态;`uv` 可直接由该进程自理 | ✅ 可做(且比 DSH 侧更顺) | | F6 会话 / 历史读写 | `conversations`(`requests` / `artifacts` / `files` / `searchFiles`)+ 本地转录 jsonl | ✅ 可做;**Timeline 投影与增量检查点协议须自建** | | F7 审批转发 | **`wb:conversation:permission` 事件 + `resolvePending` / `rejectPending`** + `PreToolUse` 钩子 | ✅ **最强对位**,语义几乎一一对应("允许一次 / 拒绝") | | F8 桥接日志 | `ops` / `notifications` + 自建滚动文件 | ✅ 可做 | | F9 维护 | `paths`(桌面专属)+ `storage` | ✅ 可做 | | F10 语言 | `config` | ✅ 可做 | | F1 侧栏入口 + 自定义弹窗 | ⛔ **无公开对位**(插件 category 只有 `skill` / `mcp-app`;`buddyApps` 未文档化) | ⚠️ **做不出同等交互** ⇒ 退化为「对话式 skill」或「产物卡片」 | ### B 层 · 账号与设备 —— **部分对位,需自建服务端** | AA 功能 | WorkBuddy 对位 | 判定 | |---|---|---| | F2 账号登录 / 自建服务器 | `account` + **`openAuth`**(OAuth) | ✅ 可做 | | F4 设备注册 / 绑定 / 恢复 | `storage` 存本地绑定;**设备台账与 `/revoke` 语义须自建服务端** | ⚠️ 半可做 | | F12 云端承载 | `cloud` / `netdrive`;但**WorkBuddy 不提供"把本机 agent 暴露给外部"的中转服务** | ⛔ 须外部服务端 | ### C 层 · 手机接入 —— **WorkBuddy 内无对应机制** | AA 功能 | WorkBuddy 对位 | 判定 | |---|---|---| | F3 扫码配对 | 无配对服务端、无设备台账、无二维码轮询通道 | ⛔ **须外部服务端** | | 手机页面 / Web onboarding(F11) | WorkBuddy 无对外 HTTP 服务面(`sites` 发布的是项目产物,非 agent 会话) | ⛔ **须外部服务端** | | 反隧道(本机被外部打到) | 无;但 **MCP app 是普通进程 ⇒ 可自己绑定回环 + 主动拨出**,这一点技术上成立 | ⚠️ 可行但**须实测进程常驻性** | --- ## 六、结论与推荐路径 **判定:功能本体「大部分可实现」,但「手机接入」这一段不可能只靠 WorkBuddy 完成。** 推荐落地形态(三层拼装,各用其长): 1. **WorkBuddy 侧**:做一个 **MCP app 插件**充当「设备侧桥」 —— 挂 `PreToolUse` / `conversation.permission` 做审批转发;用 `conversations` 读写会话;把桥接到的事件通过本机回环 + 主动拨出送给中继。**不碰**任何对外服务面。 2. **手机侧**:⛔ 不在 WorkBuddy 内重造 —— **直接复用你们已经验证过的那一套**(`overlay-pair` 五端点 + `pair.html` + 覆盖网络中继),它已产出 **28 条判据全绿** 的运行面读数。 3. **平台侧**:沿用 ai1net 平台做设备台账与准入四道闸(这正是 AA 用云中转做、而你们已用自研中继替掉的那部分)。 **一句话**:AA 的**用户可见仪式**可对齐,**承载与配对**用你们自己的;WorkBuddy 侧只需补「桥」这一层。 --- ## 七、卡点与未验证项(⛔ 不得当成已定) 1. **进程常驻性未验**:MCP app 是 `stdio`、生命周期由宿主管(`defer_loading` / preload 语义);「让一个能常驻监听回环并拨出中继的守护」在 WorkBuddy 里能否稳定存活,**必须实测**,不能按"是普通进程"推断。 2. **无 UI 扩展形态**:AA 那种侧栏 + 弹窗面板在 WorkBuddy 无公开对位 ⇒ 若产品要求"看得见的面板",须先确认 `buddyApps` 是否对第三方开放(本机无文档 ⇒ 判"未公开")。 3. **材料缺口**:AA 的**手机侧页面**与 **AA Server** 不在本机副本内(`vendor/agents-anywhere/README.md` 明写其归该包所有)⇒ 本文不评价其服务端实现,也不假设可照抄。 4. **审计结论互不影响**:本次是**功能可行性**评估;AA 包的**许可与供应链**未审(其 `package/` 为检视副本,来源与授权未核)⇒ 真要复用代码前须单独做一轮许可核查。 5. **同一缺口在 ai1net 侧也存在**:M1 多租户 / M4 覆盖网络界面未接入,与本评估的"手机接入"是两条独立线,⛔ 别混为一谈。 --- ## 附:本次取证命令与读数 | # | 命令 / 位置 | 读数 | |---|---|---| | 1 | `node scripts/build.mjs --check-only`(dsh-plugin-ai1net) | **rc=0**、「✅ 门禁通过」、全包 14 条路径互不重复 | | 2 | `git -C dsh-plugin-ai1net rev-parse` | `fatal: not a git repository` ⇒ **不在任何 git 仓内** | | 3 | `grep -rho '"category":"…"'`(WorkBuddy 插件缓存) | skill 52 · interaction 10 · welcomeMode 6 · builtin-plugin 5 · **mcp-app 4** · template 2 | | 4 | `cat .codebuddy-plugin/plugin.json`(mcp-miora) | `category: mcp-app` · `runtimeOwner: agent-cli` | | 5 | `cat .mcp.json`(mcp-miora) | `type: stdio` · `${CODEBUDDY_PLUGIN_ROOT}` · `${CODEBUDDY_PLUGIN_DATA}` | | 6 | `head wb-guest-sdk/wb.js`(WorkBuddy resources) | 21 个通用命名空间 + 4 个桌面专属 + `conversations` 方法/事件全表 | | 7 | `WebFetch workbuddy.cn/docs/workbuddy/Overview` | 仅用户手册(5 章),**无插件开发章节** | | 8 | 规格书 `05-交接单/交接单_包规格书_20260926.md` §五 A1/A3 | 五模块 A1 清单 + A3 精确路径全表(21 条 + S2 1 条) |