sleep batch targets

This commit is contained in:
2026-07-30 06:56:06 +00:00
parent a4e7297ec0
commit b61e8850f3
6 changed files with 245 additions and 128 deletions
+30
View File
@@ -26,6 +26,7 @@ const HOOKS = path.join(HERE, "..", "hooks");
const S_HOST = "sess-host-1111";
const S_OTHER = "sess-other-2222";
const S_THIRD = "sess-third-3333";
const S_FOURTH = "sess-fourth-4444";
const H = STORE;
let passed = 0;
@@ -72,7 +73,10 @@ cli(["create", "--persona", "alpha", "--session", S_HOST, "--name", "Alpha", "--
"--vibe", "溫暖但銳利", "--emoji", "🪼", "--baseline", "serenity=45,trust=35"]);
cli(["create", "--persona", "beta", "--session", S_OTHER, "--name", "Beta", "--creature", "山中的舊鐘",
"--vibe", "沉穩寡言", "--emoji", "🌙"]);
cli(["create", "--persona", "omega", "--session", S_FOURTH, "--name", "Omega", "--creature", "河邊的風",
"--vibe", "安靜但清楚", "--emoji", "🌿"]);
check("兩個人格都建立成功", pl.personaExists("alpha") && pl.personaExists("beta"));
check("第三個人格也建立成功", pl.personaExists("omega"));
check("IDENTITY 五欄位可解析", pl.identityBrief("alpha").includes("Name: Alpha"), pl.identityBrief("alpha"));
check("SOUL/AGENTS/USER 都有產生",
["SOUL.md", "AGENTS.md", "USER.md"].every((f) => fs.existsSync(path.join(pl.personaDir("alpha"), f))));
@@ -225,6 +229,18 @@ check("其他聊天室不可讀",
cli(["leave", "--session", S_HOST, "--guest", "beta"]);
check("離場後 guest 租約釋放", pl.liveGuests("beta").length === 0);
check("離場後劇場模式自動關閉", pl.loadSession(S_HOST).theater === false);
cli(["invite", "--session", S_HOST, "--guests", "beta,omega", "--topic", "多人測試"]);
const multiRoom = pl.loadSession(S_HOST).guests?.beta?.room;
const multiSession = pl.loadSession(S_HOST);
check("多 guest 同時邀請成功",
Boolean(multiRoom) && multiSession.guests?.beta?.room === multiRoom &&
multiSession.guests?.omega?.room === multiRoom &&
multiSession.theater === true);
const multiMeta = pl.readJson(pl.roomMembersPath(multiRoom)) ?? {};
check("同一個 room 內可同時掛多位 guest", Array.isArray(multiMeta.members) &&
["alpha", "beta", "omega"].every((s) => multiMeta.members.includes(s)), JSON.stringify(multiMeta));
cli(["leave", "--session", S_HOST, "--guest", "beta"]);
cli(["leave", "--session", S_HOST, "--guest", "omega"]);
console.log("⑨ hooks");
let out = hook("session_start.mjs", { session_id: S_HOST, source: "resume", cwd: HERE });
@@ -810,6 +826,20 @@ check("回傳只有狀態,沒有任何記憶內容", (() => {
return keys === "kept_lock,ok,persona,slept_at,steps,sync" &&
!blob.includes("Zeta") && !blob.includes("今天跟");
})(), Object.keys(sleepJson).sort().join(","));
check("批次睡眠:`--personas` 可以同時睡兩個人格", (() => {
const batch = cli(["sleep", "--personas", "epsilon,beta", "--session", S_SLEEP, "--json", "--no-gitea"]);
if (batch.status !== 0) return false;
try {
const parsed = JSON.parse(batch.stdout);
return parsed.ok === true && Array.isArray(parsed.personas) && parsed.personas.length === 2 &&
parsed.personas.every((item) => item.ok === true) &&
parsed.personas.some((item) => item.persona === "epsilon") &&
parsed.personas.some((item) => item.persona === "beta") &&
pl.loadSleepState("beta").last_slept_at !== null;
} catch {
return false;
}
})());
check("預設保留載入鎖(--release 才收工)",
sleepJson.kept_lock === true && pl.lockStatus("epsilon").locked);
check("睡眠寫下 state/sleep.json 與距上次睡眠的時數",