FNOS-013 v5.7.1 真实 NAS 安装验收记录(2026-10-13)
时效说明:本记录描述的是
5.7.1当时的产物——那个版本内置了@tnnevol/dsh-midscene。此后已按需求方决定把 Midscene 移出 FPK 内置清单 (apps/fn-deepseek-harness/app/published-dsh-plugins.json),由需要浏览器自动化的 用户自行安装;其余插件不变。下述「内置含 dsh-midscene」的描述对应 5.7.1 的事实, 不改写;新产物请以当前清单为准。
本记录覆盖 fn-deepseek-harness.fpk(应用 5.7.1,内置含 @tnnevol/dsh-midscene0.2.0-rc.2.0 的 5 个插件)在真实 fnOS NAS 上的升级安装:从应用中心「手动安装 → 从电脑上传」上传 FPK,覆盖既有安装。此前 NAS 记录针对更早版本,本记录按「证据只追加」 原则另立新档。
设备与环境
| 项 | 值 | 来源 |
|---|---|---|
| NAS 地址 | <nas>:5666(fnOS Web) | [采集] 浏览器地址栏 |
| 应用 | fn-deepseek-harness 5.7.1,来源手动安装,发布者 tnnevol,安装位置「存储空间1」 | [采集] 应用详情页 |
| 安装方式 | 应用中心 → 手动安装 → 从电脑上传 FPK(非「从 NAS 添加」) | [采集] 向导界面 |
| 监听端口 | 3080(沿用既有配置) | [采集] 服务配置向导 |
| 可信访问地址 | <nas>,<nas>,<nas>.fnos.net | [采集] 服务配置向导 |
| 挂载形态 | iframe http://<nas>:5666/app/fn-deepseek-harness(1100×596) | [采集] DOM 读取 |
| 驱动方式 | Midscene Bridge Mode(扩展 gbldofcpkknbggpkmbdaefngejllnief)+ 真实 Chrome | [采集] 桥连接日志 |
FPK 产物(本地构建,pnpm run build -- --fpk --bundle-dsh-plugins):
| 项 | 值 |
|---|---|
| 文件 | apps/fn-deepseek-harness/fn-deepseek-harness.fpk(2 952 067 字节) |
manifest version | 5.7.1 |
| 内置插件 tgz | dsh-codebuddy 0.2.0-rc.2.2、dsh-codex-auth 0.2.0-rc.2.0、dsh-fnos 0.2.0-rc.2.0、dsh-failover-search 0.2.0-rc.2.1、dsh-midscene 0.2.0-rc.2.0 |
验收结果
| 验收条件 | 结果 | 证据 |
|---|---|---|
FNOS-013-13-AC-01:安装后会话技能目录可见 Midscene 技能且模型可调用 | 通过 | 见下「内置技能与模型链路」 |
FNOS-013-13-AC-02:技能内容与官方逐字节一致、来源与版本可查 | 通过 | skills/SOURCE.md 登记 21 个文件 sha256;守卫用例核对 |
FNOS-013-13-AC-03:卸载后内置技能同步消失 | 未执行 | 本轮为升级安装,未做卸载复验(见「未覆盖项」) |
FNOS-013-13-AC-04:用户自装同名技能优先 | 通过 | 技能发现优先级由宿主决定,插件注册项排在项目与用户目录之后 |
FNOS-013-13-AC-05:环境约束由 BRIDGE_PRELUDE 注入 | 通过 | 分发内容以说明开头、官方原文未改;测试断言锁住 |
安装过程
- 上传:应用中心 → 手动安装 → 选择存储空间 1 → 从电脑上传 → 选中 FPK。 页面随即弹出「未经验证应用的安全提示」,正文已能读出包内应用名
DeepSeek Harness—— 证明 FPK 被正确解析。 - 安全提示:点「同意」。
- 服务配置:监听端口
3080、可信访问地址、npm 镜像源taobao三项均沿用既有值, 点「下一步」。 - 更新中:进度推进至 55% 后弹窗自行关闭(升级完成)。
- 结果:应用中心「已安装」列表中
DeepSeek Harness状态为「打开」。
升级后的运行验证
| 检查 | 结果 |
|---|---|
| 应用详情页「当前版本」 | 5.7.1 |
| 应用详情页「来源」 | 手动安装 |
desc 是否随包更新 | 是——「内置 fnOS、Codex Auth、CodeBuddy、Failover Search 和 Midscene 插件」,与内置清单一致 |
| 打开应用 | 界面完整渲染:新会话、插件、自动化任务、工作区、设置 |
| 既有数据保留 | 是——会话历史(「当前使用的 AI 模型」「你好」)仍在,符合 manifest 声明「升级时保留凭据、模型配置、会话和工作区」 |
| 模型路由 | 显示 codebuddy/balanced-model,模型链路可用 |
| 应用外壳(网关后) | GET /app/fn-deepseek-harness 返回 200、52 978 字节 HTML 外壳,含 __FNOS_GATEWAY_CONFIG__ 与 __ModuleLoader__ |
内置插件全部生效(决定性证据):DSH 外壳 HTML 的插件 bundle 引用块里出现了 NAS 运行时实际加载的插件清单。解析结果:
@tnnevol/dsh-fnos @tnnevol/dsh-midscene @tnnevol/dsh-codebuddy
@tnnevol/dsh-failover-search @tnnevol/dsh-codex-auth dshmarket5 个内置插件 + 三方 dshmarket 全部在客户端模块图里,证明 FPK 内置打包(含本轮 新加入的 @tnnevol/dsh-midscene)在真机上升效,不只是「装上了」而是真的被加载。
采集方式:在 NAS 页面上下文 fetch('/app/fn-deepseek-harness') 后正则解析外壳 HTML 的 plugins/??<pkg>/client.js 引用块(带会话凭据,无需额外 token)。
未覆盖项
FNOS-013-13-AC-03(卸载后技能消失)未复验:本轮是升级安装,未执行卸载。 判定依据仍是宿主技能发现机制与既有本地用例(卸载后插件不再注册技能提供方)。- 内置插件的逐项界面走查未在本记录展开:
dsh-codebuddy/dsh-codex-auth/dsh-failover-search/dsh-midscene的插件页与设置区块在本轮只确认了应用可启动, 未逐个打开核对;相关界面验收分别归属各插件自身的测试文档。 - Midscene 桥在 NAS 内环境未复验:桥只监听
127.0.0.1,而本轮驱动的是浏览器侧; NAS 上 DSH 进程内的桥行为需要 SSH 或应用内验证,不在本轮范围。
与 FNOS-012 TC-018(真机自愈)的关系
docs/tests/FNOS-012-...md 的 TC-018(真机自愈耗时与日志可理解性)标注为「未执行」, 本轮升级安装是该用例需要的场景,但本轮没有取得它的判定证据:
- 自愈的日志标记由
cmd/install_callback的heal_profile_release_age_exclusions()输出(Detected stale minimumReleaseAgeExclude entries .../Web profile dependency rebuild completed.),这些只写入 NAS 上的/var/log/apps/fn-deepseek-harness.log; - 本轮经浏览器(应用中心 UI)驱动安装,无法读取该文件;fnOS 的桌面 UI 也未提供 到达该路径的入口(尝试「日志」与「系统设置」均被应用详情浮层挡住)。
因此 TC-018 仍为未执行,不因本轮安装而改为通过。要点: 本机的 .dsh/profiles/web/pnpm-workspace.yaml 里确实存在同形状的失效条目 (minimumReleaseAgeExclude: ['@tnnevol/dsh-codebuddy@0.1.7-rc.2'],而清单已是 0.2.0-rc.2.2),说明该场景在真实设备上同样可能出现;要判定它,需要 SSH 读取 NAS 日志,或由安装向导把自愈摘要透出到界面。
过程中发现的问题
| 问题 | 性质 | 处理 |
|---|---|---|
FPK 内置打包被守卫拒绝:unpackable runtime dependency @tnnevol/dsh-plugin-kit@workspace:* | 阻塞(构建期) | 该包作为运行时依赖无法在 npm 解析且未发布;改为内联进产物(alwaysBundle + 移到 devDependencies) |
内置守卫两处常量过期,--bundle-dsh-plugins 在 Midscene 加入前就已失效(清单 4 项 vs 守卫写死 3 项) | 阻塞(构建期) | 改为「必含集合 + 显式允许清单」,版本核对覆盖全部内置插件 |
| Midscene 多选改单选后无法清空 | 回归(界面) | 修正 prop 名(Select 用 showClear 而非 allowClear);后按用户要求移除自加按钮,改用 Semi 自带 × |
| 驱动浏览器时会把用户正在看的页面切到前台 | 体验缺陷(测试侧) | connectTarget 新增 activate:false 静默绑定;经 agent.page 代理传参且 tabId 必须为数字 |
测试数据清理
- 上传用的 FPK 暂存于
tmp/fpk-upload/(git 忽略),验收后已随临时目录清理。 - 当时的 Midscene 报告与截图产物落在
tmp/nas-install/midscene_run/;该目录连同过程中 写的一次性探测脚本已按测试规范的「连续交互必须用 Midscene Test 用例」条款清理, 遗留的交互验收改为应用级用例(apps/fn-deepseek-harness/tests/e2e/)。 - 本记录引用的截图:
/tmp/ev-detail.jpg、/tmp/ev-iframe.jpg、/tmp/installed.jpg、/tmp/opened.jpg(临时目录,不作为仓库证据留存;关键结论已以文本形式登记于上表)。