@@ -10,40 +10,59 @@ import {
1010 migrateSessionEntries ,
1111 parseSessionEntries ,
1212} from "openclaw/plugin-sdk/agent-sessions" ;
13+ import {
14+ resolveSessionTranscriptTarget ,
15+ type SessionTranscriptTargetParams ,
16+ } from "openclaw/plugin-sdk/session-transcript-runtime" ;
1317import { sanitizeCodexHistoryImagePayloads } from "./image-payload-sanitizer.js" ;
1418
15- function isMissingFileError ( error : unknown ) : boolean {
16- return Boolean (
17- error &&
18- typeof error === "object" &&
19- "code" in error &&
20- ( error as { code ?: unknown } ) . code === "ENOENT" ,
21- ) ;
22- }
19+ export type CodexMirroredSessionHistoryTarget = {
20+ agentId ?: string ;
21+ sessionFile : string ;
22+ sessionId : string ;
23+ sessionKey ?: string ;
24+ } ;
2325
2426/** Returns sanitized session-context messages for a Codex mirrored session file. */
2527export async function readCodexMirroredSessionHistoryMessages (
26- sessionFile : string ,
28+ target : CodexMirroredSessionHistoryTarget ,
2729) : Promise < AgentMessage [ ] | undefined > {
2830 try {
29- const raw = await fs . readFile ( sessionFile , "utf-8" ) ;
31+ await resolveSessionTranscriptTarget ( resolveCodexHistoryTranscriptTarget ( target ) ) ;
32+ const raw = await fs . readFile ( target . sessionFile , "utf-8" ) ;
3033 const entries = parseSessionEntries ( raw ) ;
34+ if ( entries . length === 0 ) {
35+ return [ ] ;
36+ }
3137 const firstEntry = entries [ 0 ] as { type ?: unknown ; id ?: unknown } | undefined ;
3238 if ( firstEntry ?. type !== "session" || typeof firstEntry . id !== "string" ) {
3339 return undefined ;
3440 }
35- migrateSessionEntries ( entries ) ;
36- const sessionEntries = entries . filter (
37- ( entry ) : entry is SessionEntry => entry . type !== "session" ,
38- ) ;
41+ migrateSessionEntries ( entries as SessionEntry [ ] ) ;
42+ const sessionEntries = entries . filter ( ( entry ) : entry is SessionEntry => {
43+ return (
44+ entry !== null &&
45+ typeof entry === "object" &&
46+ ! Array . isArray ( entry ) &&
47+ ( entry as { type ?: unknown } ) . type !== "session"
48+ ) ;
49+ } ) ;
3950 return sanitizeCodexHistoryImagePayloads (
4051 buildSessionContext ( sessionEntries ) . messages ,
4152 "codex mirrored history" ,
4253 ) ;
43- } catch ( error ) {
44- if ( isMissingFileError ( error ) ) {
45- return [ ] ;
46- }
54+ } catch {
4755 return undefined ;
4856 }
4957}
58+
59+ function resolveCodexHistoryTranscriptTarget (
60+ target : CodexMirroredSessionHistoryTarget ,
61+ ) : SessionTranscriptTargetParams {
62+ return {
63+ ...( target . agentId ? { agentId : target . agentId } : { } ) ,
64+ sessionFile : target . sessionFile ,
65+ sessionId : target . sessionId ,
66+ sessionKey : target . sessionKey ?? "" ,
67+ } ;
68+ }
0 commit comments