'use strict'; const assert = require('assert/strict'); const fs = require('fs'); const os = require('os'); const path = require('path'); const { runUpdateHelper } = require('../mcp/src/core/update-service'); async function main() { const archive = path.resolve(String(process.env.QIWEI_UPDATE_TEST_ARCHIVE || '').trim()); if (!archive || !fs.existsSync(archive)) { process.stdout.write(JSON.stringify({ status: 'skipped', reason: 'set QIWEI_UPDATE_TEST_ARCHIVE to a local Bun ZIP' }) + '\n'); return; } const root = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-update-apply-')); try { fs.mkdirSync(path.join(root, 'outputs', 'runtime'), { recursive: true }); fs.mkdirSync(path.join(root, 'knowledge'), { recursive: true }); fs.writeFileSync(path.join(root, 'version.json'), JSON.stringify({ version: '0.5.2' }), 'utf8'); fs.writeFileSync(path.join(root, '.env.local'), 'QIWEI_TEST_KEEP=1\n', 'utf8'); fs.writeFileSync(path.join(root, 'knowledge', '客户资料.md'), 'keep-knowledge', 'utf8'); fs.writeFileSync(path.join(root, 'outputs', 'runtime', 'keep.txt'), 'keep-output', 'utf8'); fs.writeFileSync(path.join(root, 'qiwei.runtime.config.mjs'), 'export default {}\n', 'utf8'); process.env.QIWEI_UPDATE_RESTART = '0'; const result = await runUpdateHelper(['--archive', archive, '--package-root', root]); assert.equal(result.version, '0.5.3'); assert.equal(fs.readFileSync(path.join(root, '.env.local'), 'utf8'), 'QIWEI_TEST_KEEP=1\n'); assert.equal(fs.readFileSync(path.join(root, 'knowledge', '客户资料.md'), 'utf8'), 'keep-knowledge'); assert.equal(fs.readFileSync(path.join(root, 'outputs', 'runtime', 'keep.txt'), 'utf8'), 'keep-output'); assert.equal(fs.existsSync(path.join(root, 'qiwei.runtime.config.mjs')), true); process.stdout.write(JSON.stringify({ status: 'passed', checks: ['version-replaced', 'env-preserved', 'knowledge-preserved', 'outputs-preserved', 'runtime-config-preserved'] }, null, 2) + '\n'); } finally { // Keep the temporary tree for inspection on Windows; recursive removal of // a freshly extracted 100 MB package can crash the host Node process. if (process.env.QIWEI_UPDATE_TEST_CLEANUP === '1') fs.rmSync(root, { recursive: true, force: true }); } } main().catch(error => { process.stderr.write(JSON.stringify({ status: 'failed', message: error.message, stack: error.stack }, null, 2) + '\n'); process.exitCode = 1; });