chatkeeper 1.3.0 accepts a top-level conversations.json, but newer ChatGPT exports split conversations across files such as conversations-000.json, conversations-001.json, and so on.
If you only care about conversations, the easiest fix is to merge those shards back into a single conversations.json and build a minimal zip containing only that file.
The script for that is:
/home/paulwright/Downloads/chats/chatkeeper-normalize-conversations.sh
bashjqzipunzip
From an extracted export directory:
./chatkeeper-normalize-conversations.sh ./not-working-new-formatFrom the original export zip:
./chatkeeper-normalize-conversations.sh ./not-working-new-format.zipWrite to an explicit output file:
./chatkeeper-normalize-conversations.sh \
./not-working-new-format.zip \
./not-working-new-format-chatkeeper-conversations.zipOverwrite an existing output zip:
./chatkeeper-normalize-conversations.sh --force \
./not-working-new-format.zip \
./not-working-new-format-chatkeeper-conversations.zipThen run ChatKeeper against the generated zip:
chatkeeper keep ./not-working-new-format-chatkeeper-conversations.zip ./test- Detects whether the input already contains
conversations.jsonor uses shardedconversations-*.json. - If sharded, merges the conversation arrays with
jq -s 'add'. - Builds a minimal zip containing only
conversations.json.
This is enough for ChatKeeper's conversation export path. It does not try to preserve non-conversation export data.
This normalizer fixes the archive-structure problem, but it cannot fix message formats that ChatKeeper itself does not yet understand.
Verified locally against not-working-new-format.zip with chatkeeper 1.3.0:
3803conversations loaded3801converted2partially converted because ChatKeeper hit newer Canvas-style message payloads
Those two conversations were:
JSON Schema for Skewer(670c1087-7928-8010-9742-39e01ee85e85)Map Creation Clarification(696fc9c0-333c-832d-83d9-87fdc9d27466)
There was also one non-fatal unhandled tool message reported as super_widget.