# 0.2.0 实际验证报告 验证日期:**2026-10-18**。验收环境为Linux、Node24.19.0、npm11.9.0、Playwright Chromium,实际安装运行`@deepseek-ai/dsh@0.2.1-rc.2` Web profile。源码依据固定于`687f282e8625c6b8d11ff58211a90524be2e4317`。 **结果:TypeScript、构建、包检查通过;14个测试文件共202/202项通过;Chromium5项通过;完整Harness高级集成11项通过。** 此外使用用户授权的`deepseek-v4.1-flash`完成直接工具测试、真实Harness基础测试和真实Harness P1/P2测试。各层证据分开记录,不把确定性模型fixture计入真实模型质量评估。 机器可读汇总见[validation-results.json](validation-results.json)。源码包含全部测试、复现脚本和选定的脱敏模型生成样例,不包含API密钥、测试profile、完整会话轨迹或浏览器截图。 ## 1. 全项目自动化测试 最终执行: ```bash npm run typecheck npm test -- --reporter=json --outputFile=validation/vitest-results.json npm run build npm run test:package npm run test:browser npm run test:harness:advanced npm run benchmark ``` | 测试文件 | 通过数 | 主要验证 | |---|---:|---| | shared.test.ts | 59 | DSL、状态、表达式、数值/Select域、攻击输入和资源预算 | | shared-actions.test.ts | 17 | v1.1声明、请求、结果映射、严格集合、请求预算 | | shared-stream.test.ts | 16 | checkpoint、patch、顺序/冲突/缺口/终态、声明不变、终态预算预留 | | shared-jsonschema.test.ts | 10 | AJV Draft2020-12 strict编译、7份示例、版本兼容与非法结构 | | host.test.ts | 11 | 真实Cordis/ToolRuntime/SystemPrompt加载、生成、权限、取消、卸载 | | host-actions-gateway.test.ts | 4 | 真实Gateway/Peer/TYPERT与Session资源授权 | | host-actions-ledger.test.ts | 8 | 真实storage-domain/JSON磁盘、并发、损坏、容量、重启 | | host-actions-runtime.test.ts | 13 | 真实AgentLoop/SessionController/Approval/工具管线、取消和卸载 | | host-stream.test.ts | 11 | 真实Host流工具与Agent回合、持久化、去重、配置预算和恢复 | | client-renderer.test.tsx | 18 | 组件、状态、结果、错误隔离、Markdown/XSS、可编辑控件 | | client-actions.test.tsx | 14 | 提交/回执/取消、旧响应与新编辑竞态、结果映射 | | client-conversation.test.tsx | 10 | 官方assembler、native/PTC metadata、稳定身份、历史/流恢复 | | client-remote.test.tsx | 6 | 真实Client Gateway/Registry、strict create/decode、mount与scope | | p3-boundaries.test.ts | 5 | 独立验证调用ID重放、精确256KiB持久化、静态文档来源歧义 | | **合计** | **202** | **14个文件,0失败、0跳过** | Host runtime测试使用真实官方服务,模型替换为确定性adapter。callback竞态通过给真实admission路径增加测试等待门注入时序。独立静态来源测试使用真实AgentLoop生成Session事件,仅只读inspect传输使用stub,不能把它单独称为认证端到端测试;认证与原生审批另有Gateway和完整Harness验证。 包检查实际加载Host ESM、官方Client factory、两个Remote贡献,检查全部export文件和7份示例。标准装饰器由esbuild明确降级;测试工具链使用相同标准装饰器语义,未用不兼容的legacy decorators掩盖问题。 ## 2. Chromium检查 真实浏览器通过5项: 1. 计算器的数字输入、滑块、重置本地生效,结果DOM身份保留。 2. 390px窄屏无页面横向溢出,深色模式可渲染。 3. Input、Select、Checkbox、Form共享状态并提交本地结果。 4. structured_ui表格与图表显示,未加入输入控件。 5. 无页面未捕获异常;测试CSP禁止unsafe-eval、外部网络动作、图片和表单导航。 这里的严格CSP属于独立组件测试页面,不声称改变了整个Harness的全局CSP。原生Harness中的真实Remote动作由下一层验证。 ## 3. 完整Harness P1/P2/P3 成功运行标识:`harness-advanced-qn7FTY`。实际官方CLI通过plugin add安装本次TGZ,启动隔离Web profile、真实AgentLoop、原生read/write工具、原生审批、Gateway与持久化。仅模型响应由确定性Messages/SSE fixture提供,15次本机fixture请求,无真实模型费用。 通过11项集成断言: | 项目 | 实际结果 | |---|---| | 读取按钮 | Client→严格Remote→保留请求→Agent bridge→真实read→totalLines回写 | | 拒绝写入 | 使用真正Harness Reject按钮,文件字节保持不变 | | 允许写入 | 使用真正Allow once,文件写成明确提交内容,公开operation回执成功 | | 重复请求 | 更换传输rpcId、保留同一动作requestId;返回已完成回执,无新模型turn或写入 | | 冲突请求 | 同动作requestId改values;gateway/bad-request,文件mtime和请求计数不变 | | Agent callback | 正常用户请求入队;accepted与后续Agent输出分别可见 | | 先显示组件 | stream未完成时输入已可用;编辑17后新增组件,值、DOM与焦点保留 | | 局部增删改 | add/update/remove/complete聚合为同一个UI,完成revision=3 | | 取消流 | 保留最后有效部分界面并显示cancelled | | 热启停 | 两轮真正applied的停用/启用;目标状态和changed均确认;样式1→0→1,无重复实例或操作 | | 历史与重启 | 刷新和完整Host重启后恢复已完成stream与成功动作;无新增模型请求或文件写入;临时输入恢复默认值 | 所有浏览器pageerror检查为空。测试数据为隔离临时工作区的合成fixture,未使用用户既有会话或业务文件。 ## 4. 真实模型验收 使用用户明确授权的HTTPS服务`your-authorized-provider.example`,实际模型ID为**`deepseek-v4.1-flash`**,通过已验证的`/v1/messages`接口。下表统计成功验收批次的请求,不包含早期接口探测和失败调试运行,不能用它推算账户总费用。 | 成功批次 | 请求数 | 验证结果 | |---|---:|---| | 直接ToolRuntime:`live-model-1792332317679` | 5 | 普通事实直接文字;计算器、虚构产品数据UI通过真实工具验证;后两例首个DSL被拒绝后修复 | | 真实Harness基础:`harness-live-RoXPHV` | 6 | 普通问题不调用UI;计算器自动生成,滑块零额外模型请求;表格/图表;刷新与Host重启恢复 | | 真实Harness高级:`harness-live-advanced-dsszEH` | 11 | v1.1面板、read bridge、write原生审批、open/add/update/complete、实时输入保留、刷新无重放 | 基础Harness的6次请求包含:文字1次,计算器3次(两次工具提交加总结),数据比较2次。高级的11次包含:面板生成3次,读取bridge1次,写入bridge1次,组件流6次。 高级测试中,模型在用户点击之前没有执行文件读写。读取成功后只呈现配置允许的结果字段;写入在真正审批之前文件保持原状,批准后才改变。流式阶段使用Host回执给出的游标,早期输入框编辑为17后,后续组件更新保留17、同一DOM和焦点。 ### 真实模型的限制 这组测试证明目标模型能走通插件链路,不证明任意提示的UI选择最优或首轮Schema通过率。高级面板与流起始各有一次工具提交被拒绝,模型根据反馈修复。流起始的已保存失败样例缺少布局children;合法补齐后继续成功。 生成错误向模型返回有界路径/诊断,Host私有错误不暴露。没有为了测试通过而让验证器接受模型生成的HTML、JS或未知组件。 源码中的`docs/evidence/`保留实际生成的合法计算器、比较和动作文档,以及流式工具尝试记录。尝试记录刻意包含首次无效open,供理解修复过程;它不是一组都可直接接受的文档。 真实模型测试使用较早的同版本集成构建;其后P3修改集中于重放、来源冲突、取消/卸载和资源边界,并已在最终202项回归及完整Harness高级测试中验证。未为这些不改变DSL/模型调用方式的修复重复产生模型费用。 ## 5. 本次发现并修复的问题 | 问题 | 修复与证据 | |---|---| | 空操作列表也被拒绝,按钮不可用 | 原代码把聚合预算传给有单帧硬上限的安全解析器;改为有界数组外壳加逐项严格解析,真实Client Gateway回归 | | 流open无法保存 | 私有记录预算错误套到公共数据预检;改为Host元数据与checkpoint分层校验,精确262144字节持久化/重载通过 | | 非相邻旧callId可再次作用于流 | Host保存整代有界调用指纹,拒绝旧身份复用;真实ToolRuntime证明不能依赖宿主自动去重 | | 同静态来源出现冲突文档 | 动作来源解析检测规范化摘要冲突,拒绝改变旧按钮语义 | | 旧回执覆盖未知提交状态 | Client保留原requestId和提交值,不生成隐式新请求 | | 取消RPC失败回退已成功状态 | 不让迟到失败覆盖更新的可信终态 | | 异步resultMap覆盖新编辑 | 对照本次提交快照;值已变化时保留新草稿,独立显示真实结果 | | callback取消早于admission返回 | 不提前宣称取消;确认接受为accepted,不确定为unknown | | 卸载先于reserve/工具工作完成 | 合并生命周期信号,登记并等待自身工作后才关闭账本 | | Schema导出被AJV strict拒绝 | 修正复用$ref旁约束的同层type,保持递归结构与全部语义边界 | | 标准Remote装饰器被测试工具链按旧语义处理 | 明确使用标准装饰器降级;真实Registry与Gateway验证 | | 目标模型已message_stop,但兼容接口保持HTTP连接 | 测试代理按标准结束事件结束流,避免把已完成Agent判成超时 | | 热启停测试把no-op当成反向切换 | 等待原生aria-checked更新,并断言enabled/changed/application;插件源码无需因此修改 | 最后一项有原生源码依据:PluginManager先清busy,再load新的pkg.enabled;Switch用受控checked决定下一次请求。仅等按钮可点击不足以证明状态已更新。修正后的最终两轮完整验收通过。 ## 6. P3资源与性能 严格限额包括文档256KiB、200组件、state/derived各64、Action请求32KiB、工具参数16KiB、每代256帧/16MiB。特别验证每份成功streaming状态为后续完整终态保留266240字节和一个序号:从精确上限文档实际推进到字节预算拒绝后,complete与cancel仍成功,最后合法快照不损坏。 本机benchmark使用75971字节、200节点、64个derived的合法文档;预热后分别执行100、1000、50次: | 测量 | 中位数 | P95 | |---|---:|---:| | 严格文档验证 | 5.409ms | 6.289ms | | 本地更新并求值64个derived | 0.0229ms | 0.0624ms | | React服务端渲染200节点 | 2.340ms | 3.666ms | 这是单机测量,不是浏览器帧延迟、移动设备保证、长期负载报告或生产SLA。没有把某次微基准推广成无限规模性能承诺。 `npm audit --omit=dev --json`在本次锁定依赖上报告生产依赖已知漏洞**0**。这是当时registry公告检查,不代表对所有代码或未来漏洞的保证。 ## 7. 原始A–F验收映射 | 场景 | 当前证据 | |---|---| | A 普通知识问题 | 真实模型在UI工具可用时直接文字,当前对话无UI节点 | | B 交互计算器 | 真实模型生成数字输入/两个滑块;控件变化更新结果,模型请求数不增加 | | C 数据分析 | 真实模型根据用户合成数据生成Table或Chart;结构/安全另有确定性测试 | | D 工具联动 | 真实read/write、原生允许/拒绝、严格权限、模型bridge、公开结果回写 | | E 历史会话 | UI/流/回执持久化,刷新/重开/Host重启/热启用无自动副作用 | | F 安全性 | 双端Schema、未知组件/属性、原型/getter、XSS/URL、大小深度、作用域、审批中撤权、幂等/冲突/未知结果 | ## 8. 尚未验证或有意不提供 - 逐Token Streaming compiler、任意HTML/JS、任意URL、通用嵌套工具参数与原始结果传递。 - 用户未提交草稿的跨刷新/跨设备保存;刷新恢复文档初始值,已提交参数另在账本中保留。 - 多Host共享账本、跨外部系统exactly-once、工具副作用的通用回滚。 - 未收到终态checkpoint的中断流自动根据turn/end分类;当前保留未完成快照并禁用invoke。Host重启后需新generation。 - Desktop、TUI、其他Harness版本,以及真实模型经PTC SDK的完整端到端执行;现有PTC事件适配测试不替代这一项。 - 大规模自然语言评估、长期压力/耐久测试、第三方独立渗透或形式化安全证明。 这些边界在README、协议和架构中明确保留,不以打包成功或少量真实模型样本推定完成。