import type { AdapterSessionCodec } from "@paperclipai/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) ?? readNonEmptyString(record.session); if (!sessionId) return null; const cwd = readNonEmptyString(record.cwd) ?? readNonEmptyString(record.workdir) ?? readNonEmptyString(record.folder); return { sessionId, ...(cwd ? { cwd } : {}), }; }, serialize(params: Record | null) { if (!params) return null; const sessionId = readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id) ?? readNonEmptyString(params.session); if (!sessionId) return null; const cwd = readNonEmptyString(params.cwd) ?? readNonEmptyString(params.workdir) ?? readNonEmptyString(params.folder); return { sessionId, ...(cwd ? { cwd } : {}), }; }, getDisplayId(params: Record | null) { if (!params) return null; return ( readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id) ?? readNonEmptyString(params.session) ); }, }; export { execute } from "./execute.js"; export { listPiSkills, syncPiSkills } from "./skills.js"; export { testEnvironment } from "./test.js"; export { listPiModels, discoverPiModels, discoverPiModelsCached, ensurePiModelConfiguredAndAvailable, resetPiModelsCacheForTests, } from "./models.js"; export { parsePiJsonl, isPiUnknownSessionError } from "./parse.js";