Skip to content

Session parser API

locallore.indexing.parser

Parse Claude Code JSONL records.

ParsedMessage(session_id, message_id, role, raw_type, timestamp, text, cwd, project, file_operations=()) dataclass

session_id instance-attribute

message_id instance-attribute

role instance-attribute

raw_type instance-attribute

timestamp instance-attribute

text instance-attribute

cwd instance-attribute

project instance-attribute

file_operations = () class-attribute instance-attribute

parse_record(payload, source, line)

Source code in src/locallore/indexing/parser.py
def parse_record(payload: object, source: Path, line: int) -> ParsedMessage | None:
    if not isinstance(payload, dict):
        return None
    message = payload.get("message")
    if not isinstance(message, dict):
        return None
    role = message.get("role")
    if role not in {"user", "assistant", "tool"}:
        return None
    session_id = payload.get("sessionId") or payload.get("session_id")
    if not isinstance(session_id, str) or not session_id:
        session_id = source.stem
    content = message.get("content")
    text = _text(content)
    if not text:
        return None
    raw_id = message.get("id") or payload.get("uuid")
    if not isinstance(raw_id, str) or not raw_id:
        raw_id = hashlib.sha256(f"{source}:{line}:{text}".encode()).hexdigest()
    cwd = payload.get("cwd")
    project = payload.get("project") or payload.get("projectName")
    return ParsedMessage(
        session_id=session_id,
        message_id=raw_id,
        role=role,
        raw_type=str(payload.get("type", role)),
        timestamp=payload.get("timestamp")
        if isinstance(payload.get("timestamp"), str)
        else None,
        text=text,
        cwd=cwd if isinstance(cwd, str) else None,
        project=project if isinstance(project, str) else None,
        file_operations=_file_operations(content),
    )

decode_line(raw)

Source code in src/locallore/indexing/parser.py
def decode_line(raw: bytes) -> object:
    return json.loads(raw.decode("utf-8"))