Version Control
Every committed change to a session (validate_knowledge, evolve_knowledge,
a merge, a revert, ...) creates a new immutable Version. These four tools
let you inspect and travel through that history. All require a session_id
obtained from an earlier call.
list_versions
Lists every version recorded for a session, oldest first.
Parameters: session_id (string, required).
Response
{
"session_id": "sess-abc123",
"versions": [
{"version_id": "v-1", "created_at": "2026-07-30T12:00:00", "transaction_id": "tx-1", "metadata": {}},
{"version_id": "v-2", "created_at": "2026-07-30T12:05:00", "transaction_id": "tx-2", "metadata": {}}
]
}
revert_version
Reverts a session's current structure to a specific previous version. This creates a new version (a revert is itself a recorded, auditable change — history is never rewritten or truncated).
Parameters: session_id, target_version_id (both required).
Response
{
"reverted_to": "v-1",
"new_version_id": "v-3",
"session_id": "sess-abc123",
"serialized": "<canonical JSON of the reverted structure>"
}
compare_versions
Computes a structural diff between a historical version and the session's current state. Read-only.
Parameters: session_id, target_version_id (both required — the
historical version to compare against; the comparison is always
target_version_id → current state).
Response
{
"session_id": "sess-abc123",
"base_version_id": "v-1",
"current_version_id": "v-3",
"direction": "base_to_current",
"summary": {
"added_objects": 1, "removed_objects": 0,
"added_relations": 1, "removed_relations": 0,
"renamed_objects": 0
},
"operations": [
{"type": "add_object", "identity": {"id": "obj-2", "type": "Lemma", "name": "New"}}
]
}
operations is a serialized list of the same structural-operator shapes
evolve_knowledge accepts (add_object, remove_relation, ...), so it can
be fed back into evolve_knowledge on another session if you want to
replay the same change elsewhere.
explain_diff
Same comparison as compare_versions, but returns a natural-language
summary plus a richer breakdown — including per-object field-level diffs
and objects that were "re-linked" (a relation whose participant was
replaced elsewhere, so the relation itself is unchanged but now points at
different content).
Parameters: session_id, target_version_id (both required).
Response
{
"session_id": "sess-abc123",
"base_version_id": "v-1",
"summary": "Added 1 object(s): New (Lemma). Added 1 relation(s).",
"details": {
"added_objects": [{"id": "obj-2", "name": "New", "type": "Lemma", "action": "added"}],
"removed_objects": [],
"modified_objects": [],
"added_relations": [{"id": "rel-2", "action": "added"}],
"removed_relations": [],
"modified_relations": [],
"relinked_relations": [],
"renamed_objects": []
}
}
Use compare_versions when you want a compact, replayable operations list;
use explain_diff when a human (or an LLM composing a summary for a human)
needs to understand what changed and why it matters.