- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次) - .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…), 目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪 - .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/) - .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*) - .gitignore 补:备份件(*.bak-*) - 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
13 KiB
AI1NET 插件开发状态 + AA 开源插件功能迁至 WorkBuddy 的可行性评估
日期:2026-09-28 | 性质:只读评估(未改任何被评估项目的源码) 取证方式:跑插件自带门禁 + 读本地实物(WorkBuddy 安装目录、插件缓存、guest SDK) 材料边界:AA 的手机侧页面与 AA Server 不在本机任何副本内 ⇒ 本评估只判「功能本体能否在 WorkBuddy 侧落地」,不判「AA 服务端可否照抄」
一、结论(先给判定)
- ai1net 插件:门禁全绿(
rc=0),规格 21 条路由已实现 14 条 —— M2 模型管理 / M3 技能插件管理 / M5 IM 插件侧三块完整,M1 多租户与 M4 覆盖网络界面未接入。 - AA 开源插件的功能可分三层:本机桥接层(强对位,可做)· 账号与设备层(部分对位,需自建服务端)· 手机接入层(WorkBuddy 内无对应机制,不可能只靠它完成)。
- ⇒ 可行,但不是「移植」而是「重做 + 复用」: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 完成。
推荐落地形态(三层拼装,各用其长):
- WorkBuddy 侧:做一个 MCP app 插件充当「设备侧桥」 —— 挂
PreToolUse/conversation.permission做审批转发;用conversations读写会话;把桥接到的事件通过本机回环 + 主动拨出送给中继。不碰任何对外服务面。 - 手机侧:⛔ 不在 WorkBuddy 内重造 —— 直接复用你们已经验证过的那一套(
overlay-pair五端点 +pair.html+ 覆盖网络中继),它已产出 28 条判据全绿 的运行面读数。 - 平台侧:沿用 ai1net 平台做设备台账与准入四道闸(这正是 AA 用云中转做、而你们已用自研中继替掉的那部分)。
一句话:AA 的用户可见仪式可对齐,承载与配对用你们自己的;WorkBuddy 侧只需补「桥」这一层。
七、卡点与未验证项(⛔ 不得当成已定)
- 进程常驻性未验:MCP app 是
stdio、生命周期由宿主管(defer_loading/ preload 语义);「让一个能常驻监听回环并拨出中继的守护」在 WorkBuddy 里能否稳定存活,必须实测,不能按"是普通进程"推断。 - 无 UI 扩展形态:AA 那种侧栏 + 弹窗面板在 WorkBuddy 无公开对位 ⇒ 若产品要求"看得见的面板",须先确认
buddyApps是否对第三方开放(本机无文档 ⇒ 判"未公开")。 - 材料缺口:AA 的手机侧页面与 AA Server 不在本机副本内(
vendor/agents-anywhere/README.md明写其归该包所有)⇒ 本文不评价其服务端实现,也不假设可照抄。 - 审计结论互不影响:本次是功能可行性评估;AA 包的许可与供应链未审(其
package/为检视副本,来源与授权未核)⇒ 真要复用代码前须单独做一轮许可核查。 - 同一缺口在 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 条) |