716ef407fe
Wire Portal and TKMind proxy to loopback Goose v1.49 via canary env blocks, with verification scripts, Phase 2/3 evidence baselines, and rollback runbooks so local upgrade stays isolated from stable 1.41 and production. Co-authored-by: Cursor <cursoragent@cursor.com>
39 lines
1.4 KiB
JavaScript
39 lines
1.4 KiB
JavaScript
#!/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 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);
|
|
}
|
|
|
|
try {
|
|
const body = execFileSync('curl', ['-sk', '--connect-timeout', '5', url], { encoding: 'utf8' }).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], {
|
|
encoding: 'utf8',
|
|
}).trim();
|
|
const sessions = JSON.parse(sessionsBody);
|
|
if (!Array.isArray(sessions.sessions)) {
|
|
console.error(`GOOSE_V149_CHECK_FAIL: /sessions missing sessions array: ${sessionsBody}`);
|
|
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);
|
|
}
|