fix: Codex 自动压缩不触发 —— 接管时链接模型目录(绝对路径)进 config.toml (hot 1.5.83)
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
const test = require("node:test");
|
||||
const assert = require("node:assert/strict");
|
||||
const fs = require("node:fs");
|
||||
const os = require("node:os");
|
||||
const path = require("node:path");
|
||||
const Module = require("node:module");
|
||||
|
||||
const DATA_DIR_MODULE = path.resolve(__dirname, "../electron/lib/codex_data_dir.js");
|
||||
const SESSIONS_MODULE = path.resolve(__dirname, "../electron/lib/sessions.js");
|
||||
|
||||
function loadModules(userData) {
|
||||
const originalLoad = Module._load;
|
||||
Module._load = function (request, parent, isMain) {
|
||||
if (request === "electron") return { app: { getPath: () => userData } };
|
||||
return originalLoad.call(this, request, parent, isMain);
|
||||
};
|
||||
delete require.cache[DATA_DIR_MODULE];
|
||||
delete require.cache[SESSIONS_MODULE];
|
||||
try {
|
||||
return { dataDir: require(DATA_DIR_MODULE), sessions: require(SESSIONS_MODULE) };
|
||||
} finally {
|
||||
Module._load = originalLoad;
|
||||
}
|
||||
}
|
||||
|
||||
function writeRollout(root, id, title) {
|
||||
const dir = path.join(root, "sessions", "2026", "08", "06");
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
fs.writeFileSync(path.join(dir, "rollout-test.jsonl"), [
|
||||
JSON.stringify({ type: "session_meta", payload: { session_id: id, cwd: "/work/demo", timestamp: "2026-08-06T10:00:00.000Z" } }),
|
||||
JSON.stringify({ type: "event_msg", payload: { type: "user_message", message: title } }),
|
||||
].join("\n") + "\n");
|
||||
}
|
||||
|
||||
test("会话数据目录切换后列表读取新目录,配置可持久化", () => {
|
||||
const root = fs.mkdtempSync(path.join(os.tmpdir(), "codex-market-data-dir-"));
|
||||
const userData = path.join(root, "user-data");
|
||||
const first = path.join(root, "first-codex");
|
||||
const second = path.join(root, "second-codex");
|
||||
fs.mkdirSync(userData, { recursive: true });
|
||||
writeRollout(first, "11111111-1111-4111-8111-111111111111", "第一份记录");
|
||||
writeRollout(second, "22222222-2222-4222-8222-222222222222", "第二份记录");
|
||||
|
||||
try {
|
||||
let { dataDir, sessions } = loadModules(userData);
|
||||
assert.throws(() => dataDir.set(path.join(root, "not-codex")), /Codex 数据/);
|
||||
assert.equal(dataDir.set(first).path, first);
|
||||
assert.equal(sessions.getCodexHome(), first);
|
||||
assert.deepEqual(sessions.listConversations().map((row) => row.title), ["第一份记录"]);
|
||||
|
||||
assert.equal(dataDir.set(second).path, second);
|
||||
assert.equal(sessions.getCodexHome(), second);
|
||||
assert.deepEqual(sessions.listConversations().map((row) => row.title), ["第二份记录"]);
|
||||
|
||||
({ dataDir, sessions } = loadModules(userData));
|
||||
assert.equal(dataDir.info().path, second);
|
||||
assert.deepEqual(sessions.listConversations().map((row) => row.title), ["第二份记录"]);
|
||||
} finally {
|
||||
fs.rmSync(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user