Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion desktop-bridge/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@wsl043/dsh-portable-desktop-bridge",
"version": "0.2.4",
"version": "0.2.5",
"private": true,
"type": "module",
"main": "lib/index.js",
Expand Down
56 changes: 39 additions & 17 deletions installer/windows/DSH-Portable.iss
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#error ProjectRoot is required
#endif
#ifndef AppVersion
#define AppVersion "0.2.4"
#define AppVersion "0.2.5"
#endif

[Setup]
Expand Down Expand Up @@ -38,7 +38,7 @@ LanguageDetectionMethod=uilanguage
ShowLanguageDialog=auto
CloseApplications=no
RestartApplications=no
VersionInfoVersion=0.2.4.65534
VersionInfoVersion=0.2.5.65534
VersionInfoProductName=DSH-Portable
VersionInfoDescription=DSH-Portable offline self-extractor
VersionInfoCompany=WSL043
Expand All @@ -50,10 +50,10 @@ Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.i
[CustomMessages]
english.StartApp=Start DeepSeek-Herness
chinesesimplified.StartApp=启动 DeepSeek-Herness
english.ExistingProcessStopFailed=The existing DeepSeek-Herness process could not be stopped.
chinesesimplified.ExistingProcessStopFailed=无法停止正在运行的 DeepSeek-Herness。
english.AppStillRunning=DeepSeek-Herness is still running. Stop it before updating.
chinesesimplified.AppStillRunning=DeepSeek-Herness 仍在运行。请先退出程序再更新。
english.ExistingInstallBlocked=DSH-Portable already exists in:%n%n%1%n%nThis offline package only supports clean installation into an empty folder. To update while keeping sessions, settings, plugins, and workspace, run DSH-Portable-windows-x64.exe instead.
chinesesimplified.ExistingInstallBlocked=以下位置已经存在 DSH-Portable:%n%n%1%n%n离线完整包只支持安装到空目录。若要保留会话、设置、插件和工作区并升级,请改用 DSH-Portable-windows-x64.exe。
english.NonEmptyDirectoryBlocked=The target folder is not empty:%n%n%1%n%nInstallation was stopped to avoid mixing an old profile/runtime with the new package. Choose a new empty folder, or use DSH-Portable-windows-x64.exe to repair/update an existing installation.
chinesesimplified.NonEmptyDirectoryBlocked=目标文件夹不是空目录:%n%n%1%n%n为避免旧 profile/runtime 与新版本混用,安装已停止。请选择新的空目录;若要修复或升级现有安装,请改用 DSH-Portable-windows-x64.exe。

[Files]
Source: "{#Stage}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Expand All @@ -62,19 +62,41 @@ Source: "{#Stage}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs crea
Filename: "{app}\DeepSeek-Herness.exe"; Description: "{cm:StartApp}"; Flags: nowait postinstall skipifsilent

[Code]
function PrepareToInstall(var NeedsRestart: Boolean): String;
function DirectoryHasEntries(const Directory: String): Boolean;
var
ResultCode: Integer;
StopEntry: String;
FindRec: TFindRec;
begin
Result := '';
StopEntry := ExpandConstant('{app}\DeepSeek-Herness.exe');
if FileExists(StopEntry) then
Result := False;
if not DirExists(Directory) then
Exit;

if FindFirst(AddBackslash(Directory) + '*', FindRec) then
begin
if not Exec(StopEntry, 'stop --no-browser --json', ExpandConstant('{app}'), SW_HIDE,
ewWaitUntilTerminated, ResultCode) then
Result := ExpandConstant('{cm:ExistingProcessStopFailed}')
else if ResultCode <> 0 then
Result := ExpandConstant('{cm:AppStillRunning}');
try
repeat
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
begin
Result := True;
Exit;
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;

function PrepareToInstall(var NeedsRestart: Boolean): String;
var
Target: String;
begin
Result := '';
Target := ExpandConstant('{app}');
if not DirectoryHasEntries(Target) then
Exit;

if FileExists(AddBackslash(Target) + 'DeepSeek-Herness.exe') then
Result := FmtMessage(ExpandConstant('{cm:ExistingInstallBlocked}'), [Target])
else
Result := FmtMessage(ExpandConstant('{cm:NonEmptyDirectoryBlocked}'), [Target]);
end;
4 changes: 2 additions & 2 deletions installer/windows/DeepSeek-Herness.iss
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#error ProjectRoot is required
#endif
#ifndef AppVersion
#define AppVersion "0.2.4"
#define AppVersion "0.2.5"
#endif

[Setup]
Expand Down Expand Up @@ -36,7 +36,7 @@ LanguageDetectionMethod=uilanguage
ShowLanguageDialog=auto
CloseApplications=no
RestartApplications=no
VersionInfoVersion=0.2.4.65534
VersionInfoVersion=0.2.5.65534
VersionInfoProductName=DeepSeek-Herness
VersionInfoDescription=DeepSeek-Herness installer
VersionInfoCompany=WSL043
Expand Down
2 changes: 1 addition & 1 deletion launcher/linux/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion launcher/linux/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "deepseek-herness-linux"
version = "0.2.4"
version = "0.2.5"
description = "Native Linux shell for DSH-Portable"
authors = ["DSH-Portable contributors"]
edition = "2021"
Expand Down
4 changes: 2 additions & 2 deletions launcher/linux/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion launcher/linux/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "dsh-portable-linux-shell-build",
"version": "0.2.4",
"version": "0.2.5",
"private": true,
"devDependencies": {
"@tauri-apps/cli": "2.11.4"
Expand Down
2 changes: 1 addition & 1 deletion launcher/linux/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "DeepSeek-Herness",
"version": "0.2.4",
"version": "0.2.5",
"identifier": "io.github.wsl043.dsh-portable",
"build": {
"frontendDist": "ui"
Expand Down
4 changes: 2 additions & 2 deletions launcher/macos/Info-installed.plist
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.2.4</string>
<string>0.2.5</string>
<key>CFBundleVersion</key>
<string>2004999</string>
<string>2005999</string>
<key>LSMinimumSystemVersion</key>
<string>13.0</string>
<key>NSHighResolutionCapable</key>
Expand Down
4 changes: 2 additions & 2 deletions launcher/macos/Info-stop-installed.plist
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.2.4</string>
<string>0.2.5</string>
<key>CFBundleVersion</key>
<string>2004999</string>
<string>2005999</string>
<key>LSMinimumSystemVersion</key>
<string>13.0</string>
<key>NSHighResolutionCapable</key>
Expand Down
4 changes: 2 additions & 2 deletions launcher/macos/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.2.4</string>
<string>0.2.5</string>
<key>CFBundleVersion</key>
<string>2004999</string>
<string>2005999</string>
<key>LSMinimumSystemVersion</key>
<string>13.0</string>
<key>NSHighResolutionCapable</key>
Expand Down
7 changes: 7 additions & 0 deletions launcher/update-core.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,12 @@ export async function rollbackPendingAppUpdate(layout, { beforeRestore = async (
return { status: 'rolled-back', operationId: journal.operationId }
}

export async function resetManagedProfileModuleFallback(layout) {
const fallback = path.join(layout.dshHome, 'profiles', 'node_modules')
await rm(fallback, { recursive: true, force: true })
return fallback
}

export async function applyStagedAppUpdate({ layout, stagedRoot, healthCheck, beforeRollback = async () => {} }) {
if (await readJson(layout.updateJournal, null)) throw new Error('A prior update must be recovered before another update can start.')
const metadata = await readJson(path.join(stagedRoot, 'component.json'), null)
Expand Down Expand Up @@ -460,6 +466,7 @@ export async function applyStagedAppUpdate({ layout, stagedRoot, healthCheck, be
if (existsSync(rootFile)) await rename(rootFile, path.join(paths.backupLicenses, name))
await rename(path.join(stagedLicenses, name), rootFile)
}
await resetManagedProfileModuleFallback(layout)
await writeJournal(layout, { operationId, phase: 'testing', hadLicenses })

const healthy = await healthCheck(metadata)
Expand Down
Loading