@molecule/api-agent-transcript-codex
Provider bond · agent-transcript · API (Node) · v1.0.0 · Apache-2.0
Reads Codex CLI sessions — the Markdown export and the rollout .jsonl — into a normalized agent session
npm install @molecule/api-agent-transcript-codexnpm · Source on GitHub · Implements @molecule/api-agent-transcript
How it works
@molecule/api-agent-transcript-codex is a provider bond on the API (Node) side: it implements the agent-transcript core interface (@molecule/api-agent-transcript) with a concrete vendor or library behind it.
Your code calls the core; you wire this provider once at startup. Swapping vendors later is one line in that wiring, not a rewrite.
import { readFileSync } from 'node:fs'
import { readTranscript, setProvider } from '@molecule/api-agent-transcript'
import { provider } from '@molecule/api-agent-transcript-codex'
setProvider(provider)
const session = readTranscript({
text: readFileSync('codex-session.md', 'utf8'),
fileName: 'codex-session.md',
})Works with: @molecule/api-agent-transcript
Reference
Codex CLI transcript reader for @molecule/api-agent-transcript.
Reads both forms of a Codex CLI session into a normalized AgentSession:
the rollout log Codex keeps at ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl
(per-turn model, timestamps, and every file its apply_patch wrote), and
the Markdown file its /export → "Save to file" writes (# Codex conversation, then ## User / ## Assistant / ## Activity sections).
Quick Start
import { readFileSync } from 'node:fs'
import { readTranscript, setProvider } from '@molecule/api-agent-transcript'
import { provider } from '@molecule/api-agent-transcript-codex'
setProvider(provider)
const session = readTranscript({
text: readFileSync('codex-session.md', 'utf8'),
fileName: 'codex-session.md',
})
Type
provider
Installation
npm install @molecule/api-agent-transcript-codex @molecule/api-agent-transcript
API
Functions
findPatches(input)
Every patch in a tool call's input, whether the input is the raw patch, a JSON arguments object, or source code that passes the patch as a string.
function findPatches(input: string): string[]
input— The tool call's input or arguments string.
Returns: The patch texts, in order.
looksLikeMarkdownExport(text)
Whether a text is a Codex Markdown export.
function looksLikeMarkdownExport(text: string): boolean
text— The file's text.
Returns: True when it opens with the export's title and has a role section.
looksLikeRollout(text)
Whether a text is a Codex rollout.
function looksLikeRollout(text: string): boolean
text— The file's text.
Returns: True when its first JSON line is a session_meta record.
readMarkdownExport(text)
Read a Codex Markdown export.
function readMarkdownExport(text: string): AgentSession
text— The export's text.
Returns: The normalized session.
readRollout(text)
Read a Codex rollout.
function readRollout(text: string): AgentSession
text— The.jsonltext.
Returns: The normalized session.
writesOfPatch(patch)
The files a patch writes: an added file's whole text, an updated file's added lines.
function writesOfPatch(patch: string): AgentFileWrite[]
patch— One*** Begin Patch … *** End Patchblock.
Returns: The writes.
Constants
provider
Reads Codex CLI sessions: the rollout log (.jsonl) and the Markdown export.
const provider: AgentTranscriptReader
Core Interface
Implements @molecule/api-agent-transcript interface.
Bond Wiring
Setup function to register this provider with the core interface:
import { setProvider } from '@molecule/api-agent-transcript'
import { provider } from '@molecule/api-agent-transcript-codex'
export function setupAgentTranscriptCodex(): void {
setProvider(provider)
}
Injection Notes
Requirements
Peer dependencies:
@molecule/api-agent-transcript^1.0.0
Runtime Dependencies
-
@molecule/api-agent-transcript -
The Markdown export names no model and no times; the rollout does (
turn_context.model, per-line timestamps). Use the rollout when a per-paragraph model matters. -
Only the section headers
## User,## Assistantand## Activitysplit the export; the assistant's own##headings stay part of its reply. -
Dropped from user turns: the context Codex injects as whole-tag blocks (
<environment_context>,<user_instructions>…) and developer messages. -
Files: an
Add(export) /*** Add File(patch) is the whole file; anUpdatecontributes the lines it added. Patches are found wherever the call carries them — a rawapply_patchinput, JSON arguments, or the string passed totools.apply_patch(...)in code mode. -
Verified against Codex CLI 0.156.1's own files.