Skip to content

v2.16.0

Choose a tag to compare

@queelius queelius released this 10 Jun 03:54
· 5 commits to master since this release

Round-trip fidelity

This release makes import and round-trip lossless for what users actually export today. Driven by real June 2026 provider exports.

Fixed

  • Claude branch trees preserved. The current Claude export carries parent_message_uuid; ctk now builds the real message tree from it (with self-parent and cycle guards) instead of flattening regenerate/edit branches into one linear chain. Re-importing a new export over an old flattened import repairs the conversation in place.
  • No more dropped content blocks. Tool calls, tool results, thinking blocks, and token_budget markers survive Claude imports even when top-level text is present (previously all silently discarded).
  • OpenAI reasoning captured. ChatGPT thoughts and reasoning_recap parts import as structured reasoning blocks instead of vanishing.
  • The canonical ctk export is finally re-importable. New CTKImporter (with auto-detect priority) makes export-then-import a true inverse; previously the file mis-routed to the gemini importer and crashed.

Added

  • ReasoningBlock on MessageContent: structured reasoning that round-trips through the DB and renders in markdown exports as a quoted section.
  • Zip import: ctk import export.zip works directly for Claude and ChatGPT archives. JSON is read in memory; only media members are extracted (temporarily, traversal-safe); nothing to unzip by hand.
  • Idempotent JSONL re-import: conversation ids derive from a content fingerprint, so re-importing the same file upserts instead of duplicating. (Pre-2.16.0 JSONL imports keep their random ids; ctk db dedupe cleans historical duplicates.)
  • Fidelity-matrix test locking the round-trip contract (export/reimport + DB save/load) for tree shape, media, tool calls, and reasoning.

pip install -U conversation-tk