# 本地完整版测试记录 > 历史验证记录:本文对应改名前的开发构建,保留当时的插件名、版本和路径作为证据。当前独立初版为 dsh-codexlike-projectless 0.1.0,本次检查见 [独立初版验证](独立初版验证.md)。 ## 0.7.0-local.4 修复与验证 日期:2026-10-03。类型检查、59 项测试及构建通过,日志为 `native/verify-local4.log`。 日常启用的 Git Graph 0.4.4 在包装 `startSession()` 时将无项目回退为首个 Workspace,即使 autoIsolate=false 也会传入该项目。新补丁在解析回退之前,通过原生 mainReference 和现有 projectless/is-session 事件识别无项目,直接交回原生入口。明确指定项目和普通项目隔离流程保留。兼容补丁独立暂存,安装器核对版本、profile 目标路径和前后 SHA-256,纳入备份及恢复;旧备份没有该字段时仍可恢复。 隔离宿主实际加载 Git Graph 与现有皮肤、增强侧栏,在浏览器中用同一补丁函数处理实际 Git Graph 模块响应。未改写日常插件用于测试。 - × 为 16×16,完整位于选择框左侧边界内;无按钮嵌套。隐藏、悬停、聚焦和点击切至无项目通过,聚焦时选择框不移动。截图:`output/playwright/local4-picker-hover.png`。 - 长名称渲染宽度为 360px,× 与可见图标、文字没有重叠;下拉选择仍可用。截图:`output/playwright/local4-long-title.png`。 - 无项目草稿和已有已发送无项目历史,经侧栏按钮/快捷键新建,四种组合均生成新的空白草稿并保留无项目。结果:`output/playwright/local4-results.txt`,截图:`output/playwright/local4-new-projectless.png`。 - 直接运行暂存文件中的实际 Git Graph 包装函数:自动隔离开/关、草稿/历史、重叠 mainView 引用、明确指定项目和普通项目继承全部通过;无项目新建未调用 Git 配置或创建工作树。工作树操作使用测试桩,不证明真实仓库的 Git 操作。结果:`test-artifacts/git-graph-local4-results.json`。 - 在模拟应用与 profile 上运行实际安装/恢复脚本,验证安装和完整恢复、暂存校验拒绝、未知 Git Graph 版本拒绝、缺少配套补丁拒绝、复制中途失败回滚,以及不带新字段的旧备份恢复。模拟 archive 为测试字节,不替代实际 archive 的安装校验。结果:`test-artifacts/install-local4-results.json`。 浏览器正常验证仍有现有皮肤的两个字体资源 404。没有向日常对话发送测试消息。 日常安装已完成,备份为 `native/backups/20261003-163144`。插件文件、app.asar、Git Graph 及备份哈希核对通过,记录:`native/install-local4-evidence.json`。新启动的日常桌面实际验证了选择框内 × 和切换至无项目;无项目草稿、已有已发送无项目测试历史,通过侧栏按钮新建均得到新的空白无项目草稿,且没有调用 Git 配置或创建工作树。记录:`output/playwright/daily-local4-results.txt`;局部截图:`output/playwright/daily-local4-picker.png`。 日常原生快捷键暂未验证通过:桌面 `dshDesktop.shortcuts.get()` 返回 `Invalid shortcut catalog`,CDP 按键模拟和发送到已核对窗口的原生 Ctrl+N 均未触发新建。桌面模式跳过网页可配置快捷键分发,因此不能用网页按键代替原生验证。本轮未修改快捷键目录或注册逻辑;已验证的隔离快捷键结果不代替日常原生快捷键结果。日常另有增强侧栏 agent-opens WebSocket 连接错误,未扩展到这些问题的修复。 ## 0.7.0-local.3 修复与验证 日期:2026-10-02。类型检查、53 项测试及构建通过。新增回归覆盖配置路径与规范路径的 Windows 斜杠/大小写差异;新会话从原生 mainReference 继承,覆盖导航时旧 mainView 保留引用尚未释放的情况。 只读检查日常安装发现:插件已是 local.2,但 app.asar 仍将 projectless.entry 放在标题栏,未包含 dsh-projectless-chip-group。这解释了左上角未套样式的 ×。local.3 配套补丁已重建;安装器检查 manifest.pluginVersion 与插件版本一致,防止安装旧暂存补丁。 隔离 DSH 宿主与当前 Claude 皮肤、增强侧栏的浏览器验证: - × 为 16×16 圆形,归属输入框上方项目按钮组;默认 opacity=0,悬停/聚焦 opacity=1,无项目不渲染。实际截图:`output/playwright/fix-hover-full.png`。 - 无项目首次发送成功,原生模型测试桩收到首条消息;标题生成时最终 Session 尚不存在,发送时 Session 已存在并有主题 cwd。 - 首发之后点击侧栏“新会话”仍显示“无项目”,记录:`output/playwright/fix-new-after-send.yml`。 - 已发送 project-b 会话点击 × 打开无项目编辑页;下拉选择无项目得到相同行为。文件检查确认原会话仍在 project-b 的 sessionIds 中,持久化 cwd 与实际目录保留。记录:`output/playwright/fix-history-result.json`。 以上发送使用隔离测试模型,不证明外部模型服务可用性。页面仅出现皮肤原有的两个字体资源 404。 2026-10-03,用户明确授权关闭本次隔离宿主并备份安装。按 staged archive 路径及端口 18427 核对进程身份后关闭测试宿主,安装器完成日常 DSH 的 local.3 更新。备份:`native/backups/20261003-004901`。安装后 app.asar SHA-256 与暂存清单一致(`2735ad899ced08d23bffbcdcbcb32b242e976f43f3f2c690e0639b37488bbaaa`),插件 client.js、index.js、package.json 与工作区一致,profile 依赖指向 local.3 包,原生备份 hash 与恢复清单一致。安装后未启动日常 DSH;日常新进程界面与真实模型发送尚待验证。 ## 0.7.0-local.2 四项修正 日期:2026-10-02。目标:DSH Desktop 0.2.0-rc.2。本次源码修改前的备份位于 `native/source-backups/20261002-222504`。 `npm run verify` 实际通过:类型检查、52 项测试、插件构建。日志为 `native/verify-revised.log`。新增行为测试覆盖启动时保存的无项目选择、历史继承、显式新建与切换恢复;设置测试覆盖持久化、无效路径拒绝、首次发送固定根目录和原目录回收。 隔离宿主通过 `scripts/run-native.mjs` 加载本次原生 archive,以 `native/test-home` 为 DSH_HOME,浏览器实际操作保留当前 Claude 皮肤和增强侧栏。 | 场景 | 结果与证据 | | --- | --- | | 项目 × | 16×16 圆形;无悬停/焦点时隐藏,悬停项目或 × 时可见;无项目隐藏。截图:`output/playwright/project-hover.png` | | 草稿恢复 | 重复选择无项目保持身份和正文;无项目 → A → 无项目、A → B → A 恢复各自正文;附件、模型、权限、规划模式、更改后的 Agent 预设保留。`options-result.txt` 与界面操作验证 | | 新建与历史 | 显式新建空白;已发送项目会话点击 × 新建无项目;打开项目历史后新建沿用项目,打开无项目历史后快捷键新建沿用无项目。`history-result.txt` | | 根目录设置 | 界面入口可见;相对路径保存失败保持原值;保存后首次发送 cwd 位于新目录;宿主重启后界面显示保存值。截图:`output/playwright/root-settings.png` | | 默认选择与刷新 | 保存无项目后刷新恢复无项目空白编辑页,未发送正文不跨刷新保存。完整关闭前端并重启宿主后仍为无项目空白编辑页。`final-result.txt`、`restart-result.txt` | | 目录浏览取消 | 通过模拟原生目录选择接口返回 null,验证输入值和生效值保持。系统原生目录弹窗本身未自动化验证 | 首次发送验证仍使用 `native/fixture` 隔离流式模型,证明原生发送链路与目录分配,不证明外部模型服务可用性。测试没有填写真实 API Key。日常 DSH 应用仍在运行,本次未覆盖日常安装;生成了新版插件包及 `native/staged/app.asar`,安装必须退出 DSH 后执行。 干净页面的两项字体资源 404 来自现有皮肤。原生补丁更新以完整重启验收;开发时的插件热替换出现过会话释放相关警告,未将热替换宣称为已验证的安装方式。 ## 0.7.0-local.1 历史记录 下列记录保留作为旧版证据,不表示旧交互仍是新版验收标准。 日期:2026-10-02。版本:0.7.0-local.1。原生接入目标:DSH Desktop 0.2.0-rc.2。 ## 实际执行的验证 - `npm run verify`:类型检查通过,47 项测试全部通过,插件构建通过。 - 用原生 Electron/DSH CLI 运行补丁后的 archive,独立 profile 和浏览器验证,不向日常会话插入测试消息。 - 空项目原生输入框可编辑,模型、Agent 预设、权限和附件入口可用。 - 标题服务调用时最终 Session 尚不存在;消息提交时真实 Session 已存在且 cwd 为主题目录。 - 标题沿用 DSH 自带服务,预生成结果写入真实会话原生事件,浏览器标题与侧边栏显示主题。 - 首发带文本附件通过原生上传与消息链路完成,聊天记录显示 attachment.txt。 - 同主题分别分配 `SQLite建表测试` 和 `SQLite建表测试_2`,没有共用目录。 - 接收后临时 Workspace 注销,真实 Session 留在“未分组”;选择“只读”可传递到真实 Session。 - 刷新已发送的会话后恢复历史、附件和标题;会话页的 × 保留,可打开新空项目草稿。 - 首发协调器回归检查包括预生成身份传递、注册失败回滚、拒绝回滚、后台不抢视图、发送结果不确定时保护资源。 - 安装后 Archive 配合同款 Claude 皮肤及增强侧栏验证成功,非默认 V4-Pro 模型、极简 Agent 预设和只读权限能传入真实会话。 - 增强侧栏有一处版本限定的兼容判断,草稿期跳过查询 Host cwd,避免向尚不存在的 Session 发请求;该文件也纳入安装与恢复备份。 - 原生应用及插件实际恢复后原版 SHA-256 一致,再次安装回新版;完整备份目录见 `native/backups`。 模型测试使用 `native/fixture` 的隔离流式测试桩,证明原生数据链路和调用次序;不证明用户真实模型的服务可用性或主题质量。测试桩不会安装到日常 profile,也不会包含在插件包中。 ## 用户本地测试 重启 DSH 后确认插件版本为 0.7.0-local.1,再按以下步骤检查: 1. 点击会话页标题栏的 ×;工作区位置应显示“空项目”,可以直接输入。 2. 输入一段明确主题的消息,可先选模型、预设或权限并添加文件。 3. 首次点击发送后应先生成主题,再出现真实对话与模型回复。 4. 在当前配置根目录下查看 `YYYY-MM-DD/主题`;同主题再次新建会话应使用 `_2`。 5. 切到旧对话再点 ×,仍能开始空项目;重新打开已有对话可以继续发送。 当前用户配置根目录保持为 `E:/MyFork/jarvislukdsh-projectless-session/dsh-test-workspaces`。诊断日志在该目录 `.projectless-session.log`,不记录正文和密钥。 ## 边界 草稿期没有执行目录,所以目录文件检索和需要真实 Agent 的命令在首次消息之后使用。草稿期提供权限与规划命令、原生模型选择和文件选择;发送后恢复全部原生会话能力。浏览器草稿正文与附件不跨刷新保存。 原生补丁限定当前版本与原始 hash,DSH 更新会覆盖或改变接入点;不能宣称任意新版本兼容。遇到通信不确定结果会保留资源并阻止自动重发,等待原生状态确认,避免重复消息。 隔离环境仍有 Claude 皮肤原有字体资源 404,这属于字体加载,未影响上述交互验证;没有因此修改皮肤文件。未逐一验证日常 profile 中全部第三方插件。 ## 参考范围 - no-workspace 的源码可用于参考插槽与原生编辑器接入;其主要实现会提前在用户目录创建真实 Session,不满足本版延迟建会话与主题目录流程。 - task-runner 的作者页面说明为项目/任务双模式、每个任务分配临时目录;此次仓库正文访问失败,未据此评价其代码完整性。 - 功能范围更大不等于成熟度更高。当前结论以本地检查为限,真实模型和完整日常插件组合仍需用户测试。