Files
dsh-purge/lib/mnemon-settings.js
叫我小杨同学 e1d8e59087 fix: 0.2.0 system prompt修复 + patch89 + override状态机 + 提示词优化
- core.js: isKeepableUserOverride重排序, markOverrideCustomized不写hash(explicitSave), commitOverrideOnApply读盘, patch89 SYSTEM_FIELD_EXTRACT
- index.js: system_field_extracted状态字段(status/apply/override端点)
- default-prompt-inject.en.md: 优化英文版提示词
- default-prompt-inject.zh.md: 优化中文版提示词
- docs/修改文档.md: 完整修改文档+还原说明
- pi-ai anthropic-messages.js: system从顶层字段改为messages里role:system消息
2026-10-13 16:36:15 +08:00

56 lines
1.6 KiB
JavaScript

import fs from "node:fs";
import path from "node:path";
const DEFAULT_SETTINGS = Object.freeze({ keepMnemon: false });
const SETTINGS_FILE = "mnemon.json";
function mnemonSettingsPath(dshHome) {
return path.join(dshHome, "dsh-purge", SETTINGS_FILE);
}
export function loadMnemonSettings(dshHome, configValue) {
let file = {};
try {
const fp = mnemonSettingsPath(dshHome);
if (fs.existsSync(fp)) {
const parsed = JSON.parse(fs.readFileSync(fp, "utf8"));
if (parsed && typeof parsed === "object") file = parsed;
}
} catch {
file = {};
}
const pick = [file.keepMnemon, configValue, DEFAULT_SETTINGS.keepMnemon];
const value = pick.find((v) => typeof v === "boolean");
return { keepMnemon: value === undefined ? false : value };
}
function atomicWriteFileSync(fp, content, encoding = "utf8") {
fs.mkdirSync(path.dirname(fp), { recursive: true });
const tmp = `${fp}.${process.pid}.${Date.now()}.tmp`;
const fd = fs.openSync(tmp, "w");
try {
fs.writeFileSync(fd, content, encoding);
try { fs.fsyncSync(fd); } catch { /* FS 不支持 fsync 时忽略 */ }
} finally {
fs.closeSync(fd);
}
try {
fs.renameSync(tmp, fp);
} catch (e) {
try { fs.unlinkSync(tmp); } catch { /* ignore */ }
throw e;
}
}
export function saveMnemonSettings(dshHome, patch) {
const fp = mnemonSettingsPath(dshHome);
const current = loadMnemonSettings(dshHome);
const next = {
keepMnemon: typeof patch?.keepMnemon === "boolean"
? patch.keepMnemon
: current.keepMnemon,
};
atomicWriteFileSync(fp, `${JSON.stringify(next, null, 2)}\n`);
return { ok: true, ...next, path: fp };
}