# 验收记录 当前交付版本:`0.1.6`。下文分别记录 2026-09-09 的设置界面验收及 2026-09-08 的历史模型与浏览器验收;历史结果不代表本次重新调用了云模型。原始会话、请求、凭证和人工验收截图保存在维护者本地,不随源码或安装包分发。 后续配置变更:用户手工测试时要求放开回答长度,`0.1.2` 已支持 Flash/Pro 配置 384,000 tokens、Pro 正文接收 16 MiB。34 项本地回归及安装包加载验证覆盖长回答保存、重入恢复和 UTF-8 边界;没有为验证上限而生成 384,000 tokens 的真实云回答。下文保留 `0.1.1` 原始云端验收记录。 ## 0.1.6:关闭插件输出限制 2026-09-09。两项输出设置默认均为 0:token 预算沿用 DSH 模型服务,接收文本不设插件大小上限。已有的非零设置保留,界面可勾选“沿用模型服务设置”和“接收文本不设上限”后保存为 0。没有改变模型服务能力、主模型选择或默认 120 秒请求超时。 - 51 项自动化测试、类型检查、客户端语法检查及构建通过;真实 Loader 验证空配置安装、保存选择、默认预算省略、逐次批准发送一次和结果复用。 - 真实 DSH 服务与受控 adapter 验证模型默认预算的继承、adapter 未提供预算时省略参数、界面设置覆盖旧安装上限、token/字节限制改变后重新审批及原有自定义字节限制。 - 合成正文超过原 16 MiB 上限,JSON 文件超过原结果恢复上限,完整接收并从新的 AuditStore 实例恢复,无第二次发送。未生成同等长度的真实云模型回答。 - 真实 DSH `0.1.3-alpha.2` 与 Chromium 验证旧 token 设置和旧字节 patch 的兼容、关闭两项上限、磁盘持久化、页面刷新及进程重启恢复、可选自定义值校验与并行编辑冲突。页面无脚本错误。 - 浏览器验收不创建模型任务,隔离进程禁止外部 fetch;没有调用真实云模型。临时环境与证据保存在被忽略的私有验收目录。 ## 0.1.5:保存配置的明确反馈 2026-09-09。在独立 DSH `0.1.3-alpha.2` 与 Chromium 中复现:DeepSeek 服务未显式设置 `baseURL` 时,仍能选中服务与 Pro 模型,但 `0.1.4` 的保存按钮被校验禁用,外观却保持不透明和手形光标。Models 的地址输入框显示默认地址占位文字,容易被误认为已经保存。这是已验证的触发条件,不能仅凭用户截图断定其环境必然相同。 新版保持显式地址及审批要求;缺少地址、地址格式错误、未选择模型、输出预算无效或模型目录不可用时展示具体原因。无效草稿可点击保存并聚焦提示,校验通过前不会写入设置。未改动、只读、保存中和并行编辑冲突仍禁止提交,按钮外观明确区分。 浏览器已验证:缺少地址、地址含查询参数和输出预算不足时不写入顾问设置;通过 Models 的 Edit → Customized settings 填写地址并 Apply 后,顾问选择可以保存到磁盘,页面重新加载和 DSH 进程重启后保留;无改动提示、禁用外观、两页编辑冲突与重新载入、启停保存正常。44 项自动化测试、类型检查和构建通过。该轮不创建模型任务,隔离进程禁止外部 fetch,未调用真实云模型。可按 README 的排查步骤复现,私有测试脚本和截图不随包分发。 ## 0.1.4:从界面配置顾问与跨服务切换 2026-09-09。使用真实 DSH `0.1.3-alpha.2`、其原生 Pi-ai adapter 和 Playwright 操作 Chromium。此轮模型请求全部发往独立的本地模拟端点;GLM/Qwen 名称用于测试路由,**没有验证 GLM 或 Qwen 真实云端认证、模型能力或计费**,也未增加真实 DeepSeek 推理调用。 新增“设置 → 插件 → 顾问模型”卡片。服务地址、协议、密钥和模型登记使用 DSH 已有的“设置 → 模型”,插件只持久化服务/模型选择、启停和输出预算。未绑定厂商,也未增加独立的 OpenAI 协议客户端;实际兼容范围由所选 DSH adapter 决定。 | 检查 | 结果 | | --- | --- | | 空配置安装 | Advisor 配置为 `{}` 时正常加载并显示设置,缺少目标时不发送 | | 全界面接入 | 从 Models 添加两个自定义服务、访问地址、测试密钥和模型,再从顾问卡片选择、保存;无手工修改模型配置文件 | | 配置不调用推理 | 添加、选择、保存和刷新阶段模型请求为 0;后续启停测试亦无新增请求 | | 配置持久化 | 选择与手动 ID 在刷新及 DSH 进程重启后保留;启停状态可保存并恢复 | | 两页同时编辑 | 旧页面保留草稿但禁止保存,显示冲突;主动重新载入后取得另一页的新设置 | | 未登记模型 | Pi-ai 在准备阶段拒绝未登记的 ID,返回 `model_unavailable`,引导去 Models 添加;没有外发 | | 审批期间切换 | Qwen 预览待审批时从设置改为 GLM;提交旧批准后模型零新增,出现 GLM 新预览;新批准仅发送 GLM 一次 | | 两条成功路由 | GLM 和 Qwen 已登记模型各收到一次获批请求,均经 Pi-ai adapter 返回 `ok`,主任务继续完成 | | 外发内容 | 两条请求均只含 system/user,无 tools,正文与对应获批快照逐字相等,输出预算均为 4096 | | 本地回归与安装包 | 44 项测试、类型检查、客户端语法检查通过;构建模块和解包模块均经真实 Loader 验证空目标加载、保存配置、单次审批发送及缓存复用 | 本轮发现并修复:未登记模型最初只显示通用“暂不可用”;增加可操作的设置提示。真实宿主与插件可能各自加载一份 `dsh-llm`,因此错误识别使用稳定的 `UNKNOWN_MODEL` 错误码,不依赖跨模块的 `instanceof`;两种错误来源均有回归测试,真实浏览器复验通过。手动填写模型 ID 是否能直接调用取决于 adapter,当前 Pi-ai 须先在 Models 中登记。 维护者的私有验收记录保留早期失败测试及两个成功请求的正文、授权和发送标记。测试端点、隔离 DSH 和专用浏览器验收后停止;凭证及原始请求不进入仓库或安装包。 ## 0.1.3:可读展示与主动求助核验 2026-09-08 后续验收:已检查更新前的真实任务日志。`ask_advisor` 原本就在 Flash 收到的 27 项工具中;此前没有独立的顾问系统提示段落,只有工具描述。用户明确补充使用 advisor 后,旧版已有一次成功的 Pro 调用。因此,不能将未主动调用归因于工具完全未注入。 新版按问题、目标、约束、尝试和证据排版审批正文;完整配置移到“查看调用详情”步骤。Web companion 通过 DSH 原生插件加载,已有和新顾问结果均支持首段预览、展开完整建议和核对原文。模型侧增加独立求助指引,强调复杂正确性复核、先形成候选结论、纯分析也可求助,以及先本地审批再外发。 使用真实 Flash、关闭 thinking、Standard mode,执行了 3 个未点名 advisor/Pro 的合成协议审查任务:前两轮直接作答,没有调用;明确纯分析复核指引后,第三轮去掉用户问题中的 800 字及文件/命令操作限制,Flash 主动调用了 `ask_advisor`。第三轮在主模型分析后才出现审批,最初 45 秒的浏览器等待超时,随后确认调用与审批均正常;没有因此重复发送任务。这个小样本证明主动路径可工作,**不代表稳定触发率,也不能证明单独某句提示改动导致了调用**。模型仍可能跳过建议的复核,插件没有程序化强制调度或自动云调用。 本轮完整浏览器验收由 Codex 使用 Playwright 操作 Chromium: | 检查 | 结果 | | --- | --- | | 实际请求上下文 | 三个任务的 `request/header` 均包含工具定义与顾问系统指引 | | 查看详情、返回审批 | Pro 零新增;返回相同快照,未取得发送授权 | | 选中批准但未提交 | Pro 零新增 | | 明确提交 | 恰好 1 次真实 Pro 请求,返回 `ok`,3,098 字符,无截断 | | 出站正文 | 捕获真实 Pro 请求;system/user 与已批准快照逐字一致,无额外历史或工具 | | 新旧结果展示 | 已有的 5,564 字符建议与新的 3,098 字符建议均可展开、分段阅读 | | 原文核对 | 浏览器原文与持久化结果全文相等;展开与收起不修改结果 | | 继续执行 | Flash 接收顾问结果并完成当前任务 | | 本地回归 | 36 项测试、源码/测试类型检查、浏览器脚本语法检查及真实 Loader 加载通过 | 维护者保留对应的私有请求捕获、会话和审计记录。请求捕获不记录认证 headers;测试结束后移除了捕获入口。 以下为 `0.1.1` 的原始记录。 ## 结论与环境 经用户明确授权,完成真实 Flash 主模型 → `ask_advisor` → 人工审批界面 → Pro 顾问 → Flash 继续处理的闭环。浏览器由 Codex 通过 Playwright 操作真实 Chromium,执行选择、提交、编辑、删除、拒绝、关闭、刷新和设置修改,并查看截图;不是用户本人逐项点击签收。 | 项目 | 实测配置 | | --- | --- | | 系统与运行时 | Linux、Node 24.19.0、DSH `0.1.3-alpha.2` | | 主模型 | `deepseek-official / deepseek-v4-flash` | | 顾问 | `deepseek-official / deepseek-v4-pro` | | 接收地址 | `https://api.deepseek.com` | | 推理模式 | `thinking: disabled`,界面显示 Off | | 顾问输出限制 | 2048 tokens | | 自动重试 | adapter `maxRetries: 0`;插件一次调用只执行一次 stream | | 浏览器 | Playwright 1.55.0 下载的 Chromium,1440 × 1080,Standard mode | | 正常超时 | 120 秒;故障注入阶段临时改为 5 秒,结束后恢复 | 模型列表接口认证成功,返回上述两个模型 ID。完成 **5 次 Pro、16 次 Flash 的 chat/completions 请求**;Flash 统计含主任务继续处理和自动标题。5 次 Pro 均收到 HTTP 200 响应头,其中 1 次正常完成、4 次用于故障测试(包含一次测试层清理错误后的复验)。这是实测请求数,不是供应商账单或金额核对。 ## 浏览器与请求核验 | 场景 | 操作与结果 | | --- | --- | | 未批准 | 显示接收地址、模型、输出限制、完整系统指令和求助正文;Pro 请求数保持为零 | | 明确拒绝 | 选择“拒绝”并提交,Flash 收到 `denied`,Pro 零新增 | | 按行选择证据 | 只选文件第 2、3、4 行;没有把第 1、5 行带入顾问正文 | | 脱敏 | 文件和编辑文本里的人工构造假密钥被替换,预览给出提示;测试未把真实凭证用作证据 | | 编辑与删除 | 在界面替换问题,保留中文换行;删除 E2,保留 E1/E3;新的完整预览采用新摘要 | | 文件变化 | 首次预览后修改源文件;最终发送保留已审核的旧证据,没有偷偷重新读取 | | 单选不等于批准 | 只选中“批准并发送”、未提交时,Pro 零新增 | | 审批期间刷新 | 浏览器刷新后保留相同最终摘要与正文,没有自动提交;随后明确选择并提交 | | 真实成功调用 | Pro 返回真实建议,Flash 收到 `ok` 并报告建议;恰好新增一次 Pro 请求 | | 预览与外发一致 | 在 HTTP 发送层捕获正文,与最终预览逐字断言相等;仅一条 system、一条 user,无 tools 或额外历史 | | 关闭审批卡 | 点击关闭按钮;修复后返回 `cancelled`,Pro 零新增 | | 配置变化 | 通过浏览器把基址改为同一服务的 `/v1`;提交旧批准后出现新地址、新摘要的预览,Pro 零新增;拒绝后从界面恢复原地址 | | 长文本 | 160 行中文、5759 个字符完整出现在预览数据中;滚动容器可到末尾,批准控件可操作 | | 超时 | 真实 Pro HTTP 200 后人为延迟响应;5 秒后返回 `unknown`,Flash 继续处理,没有自动重试 | | 发送后停止 | 真实 Pro HTTP 200 后点击 Stop generating;插件审计保存 `unknown`,DSH 显示 tool call aborted;刷新没有重发 | | 进程崩溃恢复 | 真实 Pro HTTP 200 后终止专用测试进程,确认已有 send 标记且没有 result;新进程重入同一调用返回 `unknown`,浏览器重开显示中断,没有重发 | 成功请求最终摘要: ```text b3d3b9f8cce20f4f0a6fa4e17f496b4bc132695300940091b241669ba88e8db8 ``` ## 发现并修复的问题 **插件问题:关闭审批卡被记为 unavailable。** 原生 DSH 问题服务以 `UserQuestionError(ASK_CANCELLED)` 传递关闭操作,此时工具的 AbortSignal 不一定已取消。原实现只检查 signal,因而误分类。`0.1.1` 同时识别 `ASK_CANCELLED` / `ASK_ABORTED`,返回 `cancelled`。增加了状态、审批事件和无外发的回归测试,且真实浏览器复验通过。修复前也没有发送 Pro 请求。 **验收工具问题:首次延迟响应的清理出现未处理异常。** 自建 HTTP 延迟器取消响应流时没有处理清理 Promise 的拒绝,导致该次 DSH 测试进程退出。插件已持久化 `unknown`。修正仅位于私有验收脚本,未修改 DSH 上游或生产模型 adapter;重新启动没有重发,新的超时用例正常返回到 Flash。该次故障和复验都计入上面的 5 次 Pro 请求,未从统计中删去。 ## 本地回归与安装包 - 源码和测试类型检查通过,30 项自动化测试通过。 - 构建模块通过真实 DSH Loader/Include、`cordis.yml`、一次审批发送及缓存复用验证。 - `dsh-tool-advisor-0.1.1.tgz` 解包后运行同样的 Loader 验证。 - 包含 Flash/Pro 的无密钥配置示例;不打包 `.acceptance/`、凭证、HTTP 原始请求、临时测试工作区或浏览器依赖。 ## 复现与证据范围 公开配置示例为 [examples/deepseek-flash-pro.cordis.patch.yml](examples/deepseek-flash-pro.cordis.patch.yml)。插件仍通过 DSH adapter 接入,不管理模型部署。 本地回归使用真实 DSH 服务和受控模型 adapter,不需要云模型凭证: ```sh npm ci npm run check npm pack ``` 私有验收环境、带认证的地址、原始请求和截图不分发。本文记录维护者的人工验收结果;仓库中的自动化测试不覆盖全部历史浏览器与云端操作。真实模型验收需要另行配置服务凭证,安装和开发配置见 [README](README.md)。 ## 实测边界 这次验证的是接入、上下文选择、逐次授权和失败恢复。没有评测开启推理后的 Pro 质量、复杂编程任务效果、其他 provider、移动端或其他浏览器。Code Mode、权限拒绝、并发与损坏审计恢复由现有真实 DSH 服务集成测试覆盖,本次浏览器使用 Standard mode。 超时和崩溃是收到真实远端响应头后的受控故障注入,不能推断真实云端自然故障频率或供应商计费结果。已发送的请求无法撤回;`unknown` 表示本地没有可靠完成结果。DSH 在强制停止或崩溃时可能显示其通用 aborted/interrupted 文案,插件审计和重入结果保留不重发语义。