#!/usr/bin/env node /** * Phase 0 health check for local Goose v1.49 candidate (loopback only). */ import { execFileSync } from 'node:child_process'; const port = process.env.GOOSE_V149_PORT || '18049'; const host = process.env.GOOSE_V149_HOST || '127.0.0.1'; const url = `https://${host}:${port}/status`; const maxBuffer = Number(process.env.GOOSE_V149_CHECK_MAX_BUFFER || 64 * 1024 * 1024); const blockedHosts = ['58.38.22.103', '120.26.184.105']; if (blockedHosts.includes(host)) { console.error(`GOOSE_V149_CHECK_FAIL: refusing production host ${host}`); process.exit(1); } const curlOptions = { encoding: 'utf8', maxBuffer, }; try { const body = execFileSync( 'curl', ['-sk', '--connect-timeout', '5', url], curlOptions, ).trim(); if (body !== 'ok') { console.error(`GOOSE_V149_CHECK_FAIL: unexpected status body: ${body}`); process.exit(1); } console.log(`GOOSE_V149_CHECK_OK: ${url} -> ${body}`); const sessionsUrl = `https://${host}:${port}/sessions`; const sessionsBody = execFileSync( 'curl', ['-sk', '--connect-timeout', '5', sessionsUrl], curlOptions, ).trim(); const sessions = JSON.parse(sessionsBody); if (!Array.isArray(sessions.sessions)) { console.error(`GOOSE_V149_CHECK_FAIL: /sessions missing sessions array: ${sessionsBody.slice(0, 200)}`); process.exit(1); } console.log(`GOOSE_V149_CHECK_OK: ${sessionsUrl} -> ${sessions.sessions.length} session(s)`); } catch (error) { console.error(`GOOSE_V149_CHECK_FAIL: ${error.message}`); process.exit(1); }