Files
memind/scripts/check-goosed-v149-all.mjs
T
john 716ef407fe feat(goose): add local v1.49 canary routing, smoke gates, and migration docs
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>
2026-09-08 21:10:20 +08:00

89 lines
3.2 KiB
JavaScript

#!/usr/bin/env node
/**
* Run all local Goose v1.49 smoke checks in sequence.
*/
import { spawnSync } from 'node:child_process';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const root = path.join(path.dirname(fileURLToPath(import.meta.url)), '..');
const checks = [
{ name: 'memory-policy', script: 'check-goosed-v149-memory-policy.mjs', required: true },
{ name: 'local', script: 'check-goosed-v149-local.mjs', required: true },
{ name: 'agent-start', script: 'check-goosed-v149-agent-start.mjs', required: true },
{ name: 'harness', script: 'check-goosed-v149-harness.mjs', required: true },
{ name: 'session-reconcile', script: 'check-goosed-v149-session-reconcile.mjs', required: true },
{ name: 'config-read', script: 'check-goosed-v149-config-read.mjs', required: true },
{ name: 'web-smoke', script: 'check-goosed-v149-web-smoke.mjs', required: true },
{ name: 'skills-smoke', script: 'check-goosed-v149-skills-smoke.mjs', required: true },
{
name: 'deepseek-tools',
script: 'check-goosed-v149-deepseek-tools.mjs',
required: Boolean(process.env.DEEPSEEK_API_KEY || process.env.GOOSE_V149_TEST_API_KEY),
},
{
name: 'thinking-preservation',
script: 'check-goosed-v149-thinking-preservation.mjs',
required: true,
},
{
name: 'message-sanitize',
script: 'compare-goose-v149-message-sanitize.mjs',
required: true,
},
{ name: 'reply-smoke', script: 'check-goosed-v149-reply-smoke.mjs', required: true },
{ name: 'sandbox-fs', script: 'check-goosed-v149-sandbox-fs.mjs', required: true },
{ name: 'executors', script: 'check-goosed-v149-executors.mjs', required: true },
{ name: 'memory-loop', script: 'check-goosed-v149-memory-loop.mjs', required: true },
{ name: 'portal-smoke', script: 'check-goosed-v149-portal-smoke.mjs', required: false },
{
name: 'provider',
script: 'check-goosed-v149-provider.mjs',
required: Boolean(process.env.DEEPSEEK_API_KEY || process.env.GOOSE_V149_TEST_API_KEY),
},
];
function runCheck(check) {
const scriptPath = path.join(root, 'scripts', check.script);
const result = spawnSync(process.execPath, [scriptPath], {
cwd: root,
env: process.env,
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'pipe'],
});
return {
...check,
ok: result.status === 0,
status: result.status,
stdout: result.stdout?.trim() ?? '',
stderr: result.stderr?.trim() ?? '',
};
}
const results = checks.map(runCheck);
const failedRequired = results.filter((item) => item.required && !item.ok);
const failedOptional = results.filter((item) => !item.required && !item.ok);
for (const item of results) {
const label = item.required ? 'required' : 'optional';
console.log(`[goose-v149-all] ${item.ok ? 'OK' : 'FAIL'} (${label}) ${item.name}`);
if (item.stdout) console.log(item.stdout);
if (!item.ok && item.stderr) console.error(item.stderr);
}
if (failedRequired.length) {
console.error(
`GOOSE_V149_ALL_FAIL: ${failedRequired.map((item) => item.name).join(', ')}`,
);
process.exit(1);
}
if (failedOptional.length) {
console.log(
`GOOSE_V149_ALL_OK_WITH_SKIPS: optional skipped/failed: ${failedOptional.map((item) => item.name).join(', ')}`,
);
} else {
console.log('GOOSE_V149_ALL_OK');
}