import { mkdirSync, writeFileSync, mkdtempSync, realpathSync, chmodSync } from "node:fs"; import { join } from "node:path"; import { tmpdir } from "node:os"; import { createReader } from "../../../../packages/conversation/src/reader.mjs"; const proj = realpathSync(mkdtempSync(join(tmpdir(), "fb-proj-"))); const mk = (seat) => { const d = join(proj, ".pi", "state", seat, "sessions"); mkdirSync(d, { recursive: true }); writeFileSync(join(d, "s.jsonl"), JSON.stringify({ type: "session", id: "s", cwd: proj, timestamp: "2026-09-26T00:00:00Z" }) + "\n"); return d; }; const good = mk("good"), bad = mk("bad"); chmodSync(join(proj, ".pi", "state", "bad"), 0o000); const root = (seat, dir) => ({ seat, project: "p", projectRoot: proj, dir, harness: "pi", unsupportedReason: null, engineStartedAt: null }); const reader = createReader({ roots: [root("good", good), root("bad", bad)] }); try { const c = reader.catalogue(); console.log("catalogue ok", c.conversations.length, JSON.stringify(c.refusedRoots)); } catch (e) { console.log("catalogue THREW", e.code, e.message); } try { console.log("open", JSON.stringify(reader.open({ conversation: "pi-" + "0".repeat(32) }).refusal)); } catch (e) { console.log("open THREW", e.code); } chmodSync(join(proj, ".pi", "state", "bad"), 0o755);