fix: harden agent prompt handling

This commit is contained in:
Codex
2026-05-30 13:52:18 +08:00
parent 9eb44acd18
commit 5a858f89b5
12 changed files with 212 additions and 69 deletions

View File

@@ -35,9 +35,30 @@ function exec(cmd, opts = {}) {
execSync(cmd, { stdio: 'inherit', ...opts });
}
function getLocalSourceDir() {
const candidates = [
process.env.QIMING_FILE_SERVER_SOURCE_DIR,
path.resolve(electronClientRoot, '..', '..', '..', 'qiming-file-server'),
].filter(Boolean);
for (const candidate of candidates) {
if (fs.existsSync(path.join(candidate, 'package.json'))) {
return candidate;
}
}
return null;
}
function main() {
const localSourceDir = getLocalSourceDir();
let sourceDir = SOURCE_DIR;
// 1. 克隆或更新源码
if (!fs.existsSync(path.join(SOURCE_DIR, '.git'))) {
if (localSourceDir) {
sourceDir = localSourceDir;
console.log(`[prepare-qiming-file-server] 使用本地源码: ${sourceDir}`);
} else if (!fs.existsSync(path.join(SOURCE_DIR, '.git'))) {
console.log('[prepare-qiming-file-server] 克隆源码...');
exec(`git clone --branch ${GIT_BRANCH} ${GIT_REPO} "${SOURCE_DIR}"`);
} else {
@@ -46,29 +67,30 @@ function main() {
}
// 2. 检查构建产物是否存在
const hasBuild = fs.existsSync(path.join(SOURCE_DIR, 'dist'));
const hasNodeModules = fs.existsSync(path.join(SOURCE_DIR, 'node_modules'));
const hasBuild = fs.existsSync(path.join(sourceDir, 'dist'));
const hasNodeModules = fs.existsSync(path.join(sourceDir, 'node_modules'));
if (!hasBuild || !hasNodeModules) {
// 清理旧的 node_modules若有
if (fs.existsSync(path.join(SOURCE_DIR, 'node_modules'))) {
const nodeModulesDir = path.join(sourceDir, 'node_modules');
if (fs.existsSync(nodeModulesDir)) {
console.log('[prepare-qiming-file-server] 清理旧的 node_modules...');
exec(`rm -rf "${path.join(SOURCE_DIR, 'node_modules')}"`);
fs.rmSync(nodeModulesDir, { recursive: true, force: true });
}
// 3. 安装依赖
console.log('[prepare-qiming-file-server] 安装依赖...');
exec(`cd "${SOURCE_DIR}" && npm install --ignore-scripts`);
exec('npm install --ignore-scripts', { cwd: sourceDir });
// 4. 构建
console.log('[prepare-qiming-file-server] 构建项目...');
exec(`cd "${SOURCE_DIR}" && npm run build`);
exec('npm run build', { cwd: sourceDir });
} else {
console.log('[prepare-qiming-file-server] 构建产物已就绪,跳过构建');
}
// 5. 读取版本
const srcPkg = JSON.parse(fs.readFileSync(path.join(SOURCE_DIR, 'package.json'), 'utf8'));
const srcPkg = JSON.parse(fs.readFileSync(path.join(sourceDir, 'package.json'), 'utf8'));
console.log(`[prepare-qiming-file-server] 源码版本: ${srcPkg.name}@${srcPkg.version}`);
// 6. 清理并创建目标目录
@@ -79,20 +101,20 @@ function main() {
// 7. 复制 dist/
console.log('[prepare-qiming-file-server] 复制 dist/...');
exec(`cp -R "${path.join(SOURCE_DIR, 'dist')}" "${destDir}/"`);
fs.cpSync(path.join(sourceDir, 'dist'), path.join(destDir, 'dist'), { recursive: true });
// 8. 复制 package.json
fs.copyFileSync(
path.join(SOURCE_DIR, 'package.json'),
path.join(sourceDir, 'package.json'),
path.join(destDir, 'package.json')
);
// 9. 复制 node_modules/
console.log('[prepare-qiming-file-server] 复制 node_modules/...');
exec(`cp -R "${path.join(SOURCE_DIR, 'node_modules')}" "${destDir}/"`);
fs.cpSync(path.join(sourceDir, 'node_modules'), path.join(destDir, 'node_modules'), { recursive: true });
// 10. 复制 LICENSE
const licenseSrc = path.join(SOURCE_DIR, 'LICENSE');
const licenseSrc = path.join(sourceDir, 'LICENSE');
if (fs.existsSync(licenseSrc)) {
fs.copyFileSync(licenseSrc, path.join(destDir, 'LICENSE'));
}