mirror of
https://github.com/OpenRouterTeam/spawn.git
synced 2026-05-09 19:49:58 +00:00
Resolves sub-issues #1569, #1570, #1576, #1577, #1578, #1580. #1569 — /wait endpoint replaces polling loop: _fly_wait_for_machine_start now uses GET /apps/{app}/machines/{id}/wait ?state=started&timeout=90. One blocking API call instead of 30 polls. #1570 — fly machine exec replaces fly ssh console for run_server: run_server uses 'fly machine exec MACHINE_ID --app APP -- bash -c cmd' (direct API, no WireGuard tunnel) when FLY_MACHINE_ID is set. Falls back to 'fly ssh console -C' for environments without a machine ID. #1576 — App name collision loop capped at 5 retries: Prevents infinite re-prompt. Suggests FLY_APP_NAME env var after 5 failed attempts. #1577 — destroy_server errors are now reported: All fly_api calls check for error responses. Reports failed machine deletions and exits non-zero on app deletion failure instead of always logging "destroyed" regardless of outcome. #1578 — bun replaced with python3 for all JSON parsing: _fly_json_get, _fly_build_machine_body, _fly_list_orgs, destroy_server, list_servers all use python3 -c now. python3 is universally available; bun was only available after cloud-init completed on the target machine. #1580 — upload_file uses stdin pipe instead of base64 string injection: 'fly machine exec ... -- bash -c "cat > path" < local_file' streams file content directly. Eliminates the command-length/injection risk of embedding base64 content in a shell argument string. test/mock.sh: add 'fly machine exec' case to the fly CLI mock. test/fixtures/fly/_env.sh: add FLY_MACHINE_ID to test env. Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| digitalocean | ||
| fly | ||
| hetzner | ||
| ovh | ||
| _shared_agent_assertions.sh | ||