diff --git a/dsh-plugin-desktop/README.i18n.yaml b/dsh-plugin-desktop/README.i18n.yaml index 134a815204..85d87df8c5 100644 --- a/dsh-plugin-desktop/README.i18n.yaml +++ b/dsh-plugin-desktop/README.i18n.yaml @@ -1,5 +1,5 @@ # Bilingual-pair consistency record: the git blob hash of each side as of the last # confirmed-consistent state. Both languages carry equal authority; after editing # either side, bring the other along and record both new Git blob hashes below. -README.md: a838788ae3ee39866dd2c46dc95364c750dd8a77 -README.zh.md: e55db8d418a3f21a07b2fa5061367cf38f5ec3ff +README.md: e874c67be5323712a108d22fbf54a8745fe5cd23 +README.zh.md: 0b57849b186d27e947c52c8c7e4d39ff11240f6e diff --git a/dsh-plugin-desktop/README.md b/dsh-plugin-desktop/README.md index a838788ae3..e874c67be5 100644 --- a/dsh-plugin-desktop/README.md +++ b/dsh-plugin-desktop/README.md @@ -221,7 +221,7 @@ corepack.cmd yarn dist:win Python and Visual Studio C++ Build Tools are not required. The Windows command uses `node-pty`'s bundled x64 Node-API binaries instead of asking Electron Builder to rebuild them from source, and the packaged-runtime gate rejects an installer staging tree that omits those binaries. -`dist:win` refuses non-Windows and non-x64 hosts, runs a Windows-safe gate containing the build, all TypeScript compiler faces, packaging and native-shell focused tests, and the runtime-closure verifier, then builds an assisted NSIS installer and verifies both generated PE files. The full cross-platform suite remains CI-owned because some POSIX execution tests are not Windows programs. The installer allows a per-user or elevated all-users installation, permits changing the installation directory, creates Start Menu and desktop shortcuts, and preserves DSH user data when the application is uninstalled. Version `2.0.3` is written to `dsh-plugin-desktop\dist\DSH-Desktop-2.0.3-x64-Setup.exe`; the unpacked application remains at `dsh-plugin-desktop\dist\win-unpacked\DSH Desktop.exe` for smoke testing. +`dist:win` refuses non-Windows and non-x64 hosts, runs a Windows-safe gate containing the build, all TypeScript compiler faces, packaging and native-shell focused tests, and the runtime-closure verifier, then builds an assisted NSIS installer and verifies both generated PE files. The full cross-platform suite remains CI-owned because some POSIX execution tests are not Windows programs. The installer allows a per-user or elevated all-users installation, permits changing the installation directory, creates Start Menu and desktop shortcuts, and preserves DSH user data when the application is uninstalled. Version `2.0.4` is written to `dsh-plugin-desktop\dist\DSH-Desktop-2.0.4-x64-Setup.exe`; the unpacked application remains at `dsh-plugin-desktop\dist\win-unpacked\DSH Desktop.exe` for smoke testing. This local command deliberately strips Windows certificate variables and sets `signExecutable=false`. Its output is installable for testing but has no Authenticode publisher, so Windows can display an Unknown publisher or SmartScreen warning. A signed Windows release, certificate verification, installer upgrade/uninstall testing, and native UI/sandbox smoke remain separate release gates. @@ -233,7 +233,7 @@ Use `yarn dist:win-portable` on a native Windows x64 machine to create an unsign corepack.cmd yarn dist:win-portable ``` -The output is `dsh-plugin-desktop\\dist\\DSH-Desktop-2.0.3-x64-Portable.zip`. Extract it to any writable directory and launch `DSH Desktop.exe` without an installer, administrator access, Start Menu registration, or uninstall step. The application still keeps its profiles, logs, and caches in the normal Windows user-data directory, so this is portable distribution rather than a self-contained data sandbox. Portable archives are not handed to the NSIS updater and must be replaced manually when a new version is released. Local builds are unsigned and may trigger an Unknown publisher or SmartScreen warning; signed portable artifacts remain a release gate. +The output is `dsh-plugin-desktop\\dist\\DSH-Desktop-2.0.4-x64-Portable.zip`. Extract it to any writable directory and launch `DSH Desktop.exe` without an installer, administrator access, Start Menu registration, or uninstall step. The application still keeps its profiles, logs, and caches in the normal Windows user-data directory, so this is portable distribution rather than a self-contained data sandbox. Portable archives are not handed to the NSIS updater and must be replaced manually when a new version is released. Local builds are unsigned and may trigger an Unknown publisher or SmartScreen warning; signed portable artifacts remain a release gate. ### macOS DMG smoke diff --git a/dsh-plugin-desktop/README.zh.md b/dsh-plugin-desktop/README.zh.md index e55db8d418..0b57849b18 100644 --- a/dsh-plugin-desktop/README.zh.md +++ b/dsh-plugin-desktop/README.zh.md @@ -221,7 +221,7 @@ corepack.cmd yarn dist:win 该流程不要求 Python 或 Visual Studio C++ Build Tools。Windows 命令会直接使用 `node-pty` 内置的 x64 Node-API 二进制,而不会让 Electron Builder 从源码重新编译;如果安装包 staging tree 缺少这些二进制,packaged-runtime gate 会直接拒绝产物。 -`dist:win` 会拒绝非 Windows 或非 x64 宿主,先执行一组 Windows 可运行的 gate,其中包括 build、全部 TypeScript compiler face、打包与原生 shell 聚焦测试,以及 runtime-closure verifier;随后再构建 NSIS 安装向导,并校验生成的两个 PE 文件。完整跨平台 suite 仍由 CI 持有,因为其中部分 POSIX 执行测试不是 Windows 程序。安装向导支持当前用户安装或提升权限后的所有用户安装,可更改安装目录,会创建开始菜单与桌面快捷方式,并且卸载应用时保留 DSH 用户数据。版本 `2.0.3` 会输出到 `dsh-plugin-desktop\dist\DSH-Desktop-2.0.3-x64-Setup.exe`;用于 smoke 测试的未封装程序仍位于 `dsh-plugin-desktop\dist\win-unpacked\DSH Desktop.exe`。 +`dist:win` 会拒绝非 Windows 或非 x64 宿主,先执行一组 Windows 可运行的 gate,其中包括 build、全部 TypeScript compiler face、打包与原生 shell 聚焦测试,以及 runtime-closure verifier;随后再构建 NSIS 安装向导,并校验生成的两个 PE 文件。完整跨平台 suite 仍由 CI 持有,因为其中部分 POSIX 执行测试不是 Windows 程序。安装向导支持当前用户安装或提升权限后的所有用户安装,可更改安装目录,会创建开始菜单与桌面快捷方式,并且卸载应用时保留 DSH 用户数据。版本 `2.0.4` 会输出到 `dsh-plugin-desktop\dist\DSH-Desktop-2.0.4-x64-Setup.exe`;用于 smoke 测试的未封装程序仍位于 `dsh-plugin-desktop\dist\win-unpacked\DSH Desktop.exe`。 该本地命令会主动移除 Windows 证书变量,并设置 `signExecutable=false`。产物可以安装测试,但没有 Authenticode publisher,因此 Windows 可能显示 Unknown publisher 或 SmartScreen 警告。签名后的 Windows release、证书校验、安装器升级与卸载测试,以及原生 UI 和 sandbox smoke 仍是独立的发布 gate。 @@ -233,7 +233,7 @@ corepack.cmd yarn dist:win corepack.cmd yarn dist:win-portable ``` -产物为 `dsh-plugin-desktop\\dist\\DSH-Desktop-2.0.3-x64-Portable.zip`。用户解压到任意可写目录后运行其中的 `DSH Desktop.exe`,不需要安装器、管理员权限、开始菜单注册或卸载步骤。它仍会把 profile、日志和缓存写入 Windows 默认用户数据目录,因此这是便携分发方式,不是把数据完全封装在 exe 旁边的自包含沙箱。绿色 ZIP 不会交给 NSIS 自动更新流程,新版本需要手动替换并重新解压。本地构建没有签名,Windows 可能显示 Unknown publisher 或 SmartScreen 警告;签名后的绿色版仍属于正式发布 gate。 +产物为 `dsh-plugin-desktop\\dist\\DSH-Desktop-2.0.4-x64-Portable.zip`。用户解压到任意可写目录后运行其中的 `DSH Desktop.exe`,不需要安装器、管理员权限、开始菜单注册或卸载步骤。它仍会把 profile、日志和缓存写入 Windows 默认用户数据目录,因此这是便携分发方式,不是把数据完全封装在 exe 旁边的自包含沙箱。绿色 ZIP 不会交给 NSIS 自动更新流程,新版本需要手动替换并重新解压。本地构建没有签名,Windows 可能显示 Unknown publisher 或 SmartScreen 警告;签名后的绿色版仍属于正式发布 gate。 ### macOS DMG 冒烟构建 diff --git a/dsh-plugin-desktop/package.json b/dsh-plugin-desktop/package.json index 235f52a8f1..1291551ba1 100644 --- a/dsh-plugin-desktop/package.json +++ b/dsh-plugin-desktop/package.json @@ -1,6 +1,6 @@ { "name": "dsh-plugin-desktop", - "version": "2.0.3", + "version": "2.0.4", "description": "DSH Desktop: an Electron shell composed as a DeepSeek Harness Cordis plugin", "license": "MIT", "publishConfig": { diff --git a/dsh-plugin-desktop/scripts/smoke-windows-installer-upgrade.ps1 b/dsh-plugin-desktop/scripts/smoke-windows-installer-upgrade.ps1 index fb985fbed5..7f3623d1ea 100644 --- a/dsh-plugin-desktop/scripts/smoke-windows-installer-upgrade.ps1 +++ b/dsh-plugin-desktop/scripts/smoke-windows-installer-upgrade.ps1 @@ -44,7 +44,7 @@ if (Test-Path -LiteralPath $taskActiveRunMarker) { throw 'Refusing to overwrite an existing DSH Desktop active run marker.' } $taskResult = [ordered]@{ - scenario = 'temporary install and DSH_HOME: 2.0.2 to 2.0.3 upgrade and fixed-version overwrite' + scenario = "temporary install and DSH_HOME: $taskBaseExpectedVersion to $taskCandidateExpectedVersion upgrade and fixed-version overwrite" testRoot = $taskRoot baseInstaller = $taskBaseInstaller baseInstallerSha256 = (Get-FileHash -LiteralPath $taskBaseInstaller -Algorithm SHA256).Hash diff --git a/dsh-plugin-desktop/src/dsh-product-version.ts b/dsh-plugin-desktop/src/dsh-product-version.ts index 98bed2671c..acb51a61e9 100644 --- a/dsh-plugin-desktop/src/dsh-product-version.ts +++ b/dsh-plugin-desktop/src/dsh-product-version.ts @@ -38,4 +38,3 @@ export function dshProductVersion(moduleUrl: string | URL = import.meta.url): st } return version } - diff --git a/dsh-plugin-desktop/tests/dsh-product-version.spec.ts b/dsh-plugin-desktop/tests/dsh-product-version.spec.ts index 266ac2f702..8261dd4842 100644 --- a/dsh-plugin-desktop/tests/dsh-product-version.spec.ts +++ b/dsh-plugin-desktop/tests/dsh-product-version.spec.ts @@ -47,4 +47,3 @@ describe('installed DSH product version', () => { expect(() => dshProductVersion(invalidVersion.moduleUrl)).toThrow('not canonical') }) }) - diff --git a/dsh-plugin-desktop/tests/electron-runtime.spec.ts b/dsh-plugin-desktop/tests/electron-runtime.spec.ts index 72dff00dc5..2237d83265 100644 --- a/dsh-plugin-desktop/tests/electron-runtime.spec.ts +++ b/dsh-plugin-desktop/tests/electron-runtime.spec.ts @@ -1573,7 +1573,7 @@ describe('Electron desktop runtime', () => { appExecutable: process.execPath, electronVersion: '43.4.0', profileName: 'desktop', - productVersion: '2.0.3', + productVersion: '2.0.4', profileDir: expect.stringMatching(/profiles[\\/]+desktop$/u), homeDir: expect.stringContaining('dsh-desktop-user-data'), spawn: expect.any(Function), @@ -1609,7 +1609,7 @@ describe('Electron desktop runtime', () => { expect(diagnostics.export).toHaveBeenCalledWith( expect.stringContaining('dsh-desktop-user-data'), expect.objectContaining({ - appVersion: '2.0.3', + appVersion: '2.0.4', crashDumpsDir: expect.stringMatching(/[\\/]Crashpad$/u), }), ) @@ -1879,7 +1879,7 @@ describe('Electron desktop runtime', () => { expect(runtime.updates).toMatchObject({ isPackaged: false, canDownload: false, - currentVersion: '2.0.3', + currentVersion: '2.0.4', statePath: join('/tmp/dsh-desktop-user-data', 'updates', 'state.json'), }) electron.app.isPackaged = true diff --git a/package.json b/package.json index b62b748ece..e6b0b9df3c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "deepseek-harness-desktop", - "version": "2.0.3", + "version": "2.0.4", "private": true, "description": "DSH Desktop product workspace", "license": "MIT",