mirror of
https://github.com/razzant/ouroboros.git
synced 2026-08-31 02:24:51 +00:00
Structurally closes the subagent worker-crash, ghost-task, and stuck-spinner classes across all platforms, makes Ouroboros usable with any single provider key, and ships node-runtime skill support. - Workers: macOS/Windows use spawn (Linux keeps fork); central OUROBOROS_IN_WORKER no-proxy policy removes the macOS _scproxy fork SIGSEGV class. Signal crashes are terminal (no retry) for all task types. - Lifecycle: monotonic write_task_result guard (terminal/cancel sticky); live cancel_task + cancel_requested latch; terminal task_done on every crash/kill/ timeout/cancel path; snapshot restore skips terminal; schedule fail-fast when the worker pool is disabled. No ghosts, no perpetual spinner (incl. reconnect reconcile). - Subagent UI: Variant A parent dashboard (in-place rows, child progress/terminal routed to parent, no duplicate child card). - Providers: Cloud.ru is a first-class exclusive-direct provider (review/scope fallback + static pricing). New-user defaults: review claude-opus-4.8, Claude Code opus[1m]; existing anthropic-only migrate 4.6->4.8. - Skills: skill_preflight tolerates missing/killed validators; build bundles a signed Node.js LTS (resolve_bundled_node) for node --check and node runtimes. - Docs: README OuroborosHub badge/callout; ARCHITECTURE bundled-node + defaults. Reviewed via multi-model adversarial (2 rounds) + Ouroboros triad/scope review (converged). Local suite: 3207 passed, 1 skipped.
48 lines
2 KiB
PowerShell
48 lines
2 KiB
PowerShell
# Downloads the official Node.js LTS runtime for Windows (x64), verifies it
|
|
# against the published SHASUMS256, and prunes it to just node.exe.
|
|
# Run from repo root: powershell -ExecutionPolicy Bypass -File scripts/download_node_standalone.ps1
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$NodeVersion = "v24.16.0" # Node.js LTS ("Krypton"); keep current with nodejs.org LTS
|
|
$Dest = "node-standalone"
|
|
$Name = "node-${NodeVersion}-win-x64"
|
|
$Filename = "${Name}.zip"
|
|
$BaseUrl = "https://nodejs.org/dist/${NodeVersion}"
|
|
$Url = "${BaseUrl}/${Filename}"
|
|
$ShasumsUrl = "${BaseUrl}/SHASUMS256.txt"
|
|
|
|
Write-Host "=== Downloading Node.js ${NodeVersion} for win-x64 ==="
|
|
Write-Host "URL: ${Url}"
|
|
|
|
if (Test-Path $Dest) { Remove-Item -Recurse -Force $Dest }
|
|
if (Test-Path "_node_tmp") { Remove-Item -Recurse -Force "_node_tmp" }
|
|
New-Item -ItemType Directory -Path "_node_tmp" | Out-Null
|
|
|
|
$ArchivePath = "_node_tmp\${Filename}"
|
|
Write-Host "Downloading..."
|
|
Invoke-WebRequest -Uri $Url -OutFile $ArchivePath -UseBasicParsing
|
|
|
|
Write-Host "Verifying SHASUMS256..."
|
|
$Shasums = (Invoke-WebRequest -Uri $ShasumsUrl -UseBasicParsing).Content
|
|
$Expected = ($Shasums -split "`n" | Where-Object { $_ -match [Regex]::Escape($Filename) } | Select-Object -First 1).Split(" ")[0]
|
|
if (-not $Expected) { throw "Could not find ${Filename} in ${ShasumsUrl}" }
|
|
$Actual = (Get-FileHash -Algorithm SHA256 $ArchivePath).Hash.ToLower()
|
|
if ($Expected.ToLower() -ne $Actual) {
|
|
throw "SHASUMS256 mismatch for ${Filename}: expected ${Expected}, got ${Actual}"
|
|
}
|
|
Write-Host "Checksum OK: ${Actual}"
|
|
|
|
Write-Host "Extracting..."
|
|
tar -xf $ArchivePath -C "_node_tmp"
|
|
|
|
# Keep only node.exe — drop npm/npx/corepack and node_modules.
|
|
New-Item -ItemType Directory -Path $Dest | Out-Null
|
|
Copy-Item "_node_tmp\${Name}\node.exe" "${Dest}\node.exe"
|
|
if (Test-Path "_node_tmp\${Name}\LICENSE") { Copy-Item "_node_tmp\${Name}\LICENSE" "${Dest}\LICENSE" }
|
|
Remove-Item -Recurse -Force "_node_tmp"
|
|
|
|
echo ""
|
|
Write-Host "=== Done ==="
|
|
Write-Host "Node: ${Dest}\node.exe"
|
|
& "${Dest}\node.exe" --version
|