#!/usr/bin/env bash # Runs tests/windows/run.ps1 on a Windows host over SSH (default: winbox): # copies the payload to the host's %TEMP%, runs it there, and removes it again. # Needs key-based SSH to the host and python on the host (for the fake servers). # The suite itself runs in a USERPROFILE sandbox; see run.ps1. set -uo pipefail cd "$(dirname "$0")/../.." host="${1:-winbox}" name='cm-test-payload' ssh_() { ssh -o BatchMode=yes -o LogLevel=ERROR -o ConnectTimeout=10 "$host" "$@"; } parent="$(mktemp -d)" trap 'rm -rf "$parent"' EXIT stage="$parent/$name" mkdir -p "$stage/presets" "$stage/bin" cp claude-mode.ps1 providers.json VERSION tests/fake_server.py tests/windows/run.ps1 "$stage/" cp presets/*.json "$stage/presets/" cp bin/* "$stage/bin/" rtemp="$(ssh_ 'Write-Output $env:TEMP' | tr -d '\r')" || { echo "cannot reach $host" >&2; exit 1; } [ -n "$rtemp" ] || { echo "no %TEMP% on $host" >&2; exit 1; } ssh_ "Remove-Item -Recurse -Force '$rtemp\\$name' -ErrorAction SilentlyContinue" || true scp -q -r -o BatchMode=yes -o LogLevel=ERROR "$stage" "$host:${rtemp//\\//}/" || { echo "copy to $host failed" >&2; exit 1; } ssh_ "powershell -NoProfile -ExecutionPolicy Bypass -File '$rtemp\\$name\\run.ps1'" rc=$? ssh_ "Remove-Item -Recurse -Force '$rtemp\\$name' -ErrorAction SilentlyContinue" || true exit "$rc"