sleep batch targets
This commit is contained in:
@@ -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 與距上次睡眠的時數",
|
||||
|
||||
Reference in New Issue
Block a user