Skip to content

memory-ingest renders all Codex rollout sessions as empty bodies (parser expects payload.message; current format is payload.type=='message' + payload.content) #2105

Description

@exGeni

Summary

gstack-memory-ingest renders every Codex rollout session with an empty body (message_count: 0, zero-length content). All Codex transcripts import as empty shells.

Root cause

parseTranscriptJsonl (bin/gstack-memory-ingest.ts) detects Codex correctly (first.type === 'session_meta') but its message loop extracts content via:

} else if (isCodex && rec?.payload?.message) { const msg = rec.payload.message; ... }

Current Codex rollout JSONL has no payload.message. Records are shaped:

{ type: 'response_item', payload: { type: 'message', role: 'user'|'assistant'|'developer', content: [...] } }

So the branch never fires → 0 messages → empty page body for every Codex session.

Repro

Ingest any ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl; the resulting transcripts/codex/... page has message_count: 0 and an empty body. Confirmed across 243/243 Codex sessions on this machine.

Suggested fix

Handle the response_item / payload.type === 'message' shape: read payload.role and flatten payload.content (array of {type, text} items) into the body, mirroring the Claude Code branch.

Env

gstack 1.58.4.0, Codex CLI rollout format (June 2026), Windows 10.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions