export { execute } from "./execute.js"; export { testEnvironment } from "./test.js"; export { parseCodexJsonl, isCodexUnknownSessionError } from "./parse.js"; import type { AdapterSessionCodec } from "@paperclip/adapter-utils"; function readNonEmptyString(value: unknown): string | null { return typeof value === "string" && value.trim().length > 0 ? value.trim() : null; } export const sessionCodec: AdapterSessionCodec = { deserialize(raw: unknown) { if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null; const record = raw as Record; const sessionId = readNonEmptyString(record.sessionId) ?? readNonEmptyString(record.session_id); if (!sessionId) return null; const cwd = readNonEmptyString(record.cwd) ?? readNonEmptyString(record.workdir) ?? readNonEmptyString(record.folder); return cwd ? { sessionId, cwd } : { sessionId }; }, serialize(params: Record | null) { if (!params) return null; const sessionId = readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id); if (!sessionId) return null; const cwd = readNonEmptyString(params.cwd) ?? readNonEmptyString(params.workdir) ?? readNonEmptyString(params.folder); return cwd ? { sessionId, cwd } : { sessionId }; }, getDisplayId(params: Record | null) { if (!params) return null; return readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id); }, };