Docker faellt weg. Das Projekt hat keine npm-Abhaengigkeiten und Node fuehrt TypeScript direkt aus - der Container schrieb nur noch drei Programme fest, und dafuer braucht es keine Virtualisierung, sondern einen Ordner. Der Anlass war, dass ADR-0004 zwar `docker compose pull` versprach, es aber nie ein veroeffentlichtes Image gab. Wer installieren wollte, musste whisper.cpp aus dem Quelltext uebersetzen. Plattformschicht (packages/core/src/platform.ts): - Programme werden neben der Anwendung gesucht, nicht im PATH - Daten unter %LOCALAPPDATA%, damit Installation und Update ohne Administratorrechte auskommen - Schriften mitgeliefert: ohne fontsdir setzt libass wortlos eine Ersatzschrift ein - gemessen 720 statt 826 Pixel Zeilenbreite Windows-Eigenheiten, an echtem ffmpeg 8.1 durchprobiert: - Pfade im Filtergraphen brauchen alle drei Schritte (Vorwaertsschraegstriche, escapter Doppelpunkt, Anfuehrungszeichen); je zwei davon reichen nicht - `nice` gibt es nicht, ersetzt durch os.setPriority Auslieferung: - scripts/build-package.ts baut das Paket, laeuft auch unter Linux - install.ps1 ohne Administratorrechte, Autostart ueber den Aufgabenplaner - update legt neue Fassungen bereit; eingespielt wird beim naechsten Start, nie mitten im Stream - ZIP lesen und schreiben ohne Abhaengigkeiten (packages/core/src/zip.ts) Kein `irm ... | iex`-Einzeiler: git.zeasy.dev antwortete instanzweit mit einer Umleitung auf /user/login, und `iex` fuehrte die Anmeldeseite als PowerShell aus. Der Updater verfolgt Umleitungen jetzt nicht und hat keine erfundene Vorgabeadresse mehr. Ausserdem: backup.ps1 war an zwei Stellen dokumentiert, aber nie geschrieben. ADR-0007 ersetzt ADR-0004. 84 Tests, Typpruefung sauber. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AhVSfMFdWnXKCv5JfLnArZ
68 lines
2.8 KiB
PowerShell
68 lines
2.8 KiB
PowerShell
# Wird vom Aufgabenplaner bei der Anmeldung gestartet.
|
|
#
|
|
# Zwei Aufgaben, in dieser Reihenfolge:
|
|
# 1. Ein bereitgelegtes Update anwenden.
|
|
# 2. Die Anwendung starten.
|
|
#
|
|
# Warum getrennt: Windows sperrt laufende Programmdateien. Solange node.exe
|
|
# laeuft, laesst es sich nicht ersetzen. Der Updater legt das neue Paket
|
|
# deshalb nur unter `pending\` ab; ausgetauscht wird hier, bevor irgendetwas
|
|
# startet. So gibt es nie einen halb ausgetauschten Ordner. Siehe ADR-0007.
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$root = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$pending = Join-Path $root 'pending'
|
|
$log = Join-Path $env:LOCALAPPDATA 'abdulive\logs'
|
|
New-Item -ItemType Directory -Force -Path $log | Out-Null
|
|
|
|
function Write-Log($text) {
|
|
$line = "{0} {1}" -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss'), $text
|
|
Add-Content -Path (Join-Path $log 'starter.log') -Value $line -Encoding utf8
|
|
Write-Output $line
|
|
}
|
|
|
|
# ---------------------------------------------------------------- Update
|
|
|
|
if (Test-Path $pending) {
|
|
Write-Log 'Update liegt bereit - wende es an.'
|
|
try {
|
|
# Sicherheitshalber: laeuft noch etwas aus diesem Ordner?
|
|
Get-Process node -ErrorAction SilentlyContinue |
|
|
Where-Object { $_.Path -and $_.Path.StartsWith($root, 'OrdinalIgnoreCase') } |
|
|
ForEach-Object {
|
|
Write-Log " beende noch laufende node.exe (PID $($_.Id))"
|
|
Stop-Process -Id $_.Id -Force
|
|
}
|
|
Start-Sleep -Milliseconds 500
|
|
|
|
foreach ($item in @('app', 'bin', 'fonts', 'node.exe', 'version.json',
|
|
'abdulive.cmd', 'launcher.ps1', 'install.ps1', 'backup.ps1')) {
|
|
$new = Join-Path $pending $item
|
|
if (-not (Test-Path $new)) { continue }
|
|
$old = Join-Path $root $item
|
|
if (Test-Path $old) { Remove-Item -Recurse -Force $old }
|
|
Move-Item -Path $new -Destination $old
|
|
}
|
|
Remove-Item -Recurse -Force $pending
|
|
$v = (Get-Content (Join-Path $root 'version.json') -Raw | ConvertFrom-Json).version
|
|
Write-Log "Update angewendet, jetzt Version $v."
|
|
} catch {
|
|
# Ein misslungenes Update darf den Stream nicht kosten: der alte
|
|
# Stand ist noch da, also einfach damit weiterlaufen.
|
|
Write-Log "Update fehlgeschlagen, starte die vorhandene Version: $_"
|
|
}
|
|
}
|
|
|
|
# ---------------------------------------------------------------- Start
|
|
|
|
$node = Join-Path $root 'node.exe'
|
|
$main = Join-Path $root 'app\apps\cli\main.ts'
|
|
if (-not (Test-Path $node)) { Write-Log "node.exe fehlt in $root"; exit 1 }
|
|
|
|
Write-Log 'Starte den Daemon.'
|
|
& $node $main ingest 2>&1 | ForEach-Object {
|
|
Add-Content -Path (Join-Path $log 'abdulive.log') -Value $_ -Encoding utf8
|
|
}
|
|
Write-Log "Daemon beendet (Code $LASTEXITCODE)."
|
|
exit $LASTEXITCODE
|