From c305ff5711024e2b760b0d242f3c0e8acf30c554 Mon Sep 17 00:00:00 2001 From: Juan Date: Sun, 10 May 2026 10:59:01 +0200 Subject: [PATCH] =?UTF-8?q?feat(runtime):=20a=C3=B1ade=20build=5Fcheckpoin?= =?UTF-8?q?ter=20wrapper=20sobre=20SqliteSaver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- .../agentforge_core/runtime/checkpointer.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 core/src/agentforge_core/runtime/checkpointer.py diff --git a/core/src/agentforge_core/runtime/checkpointer.py b/core/src/agentforge_core/runtime/checkpointer.py new file mode 100644 index 0000000..f23733d --- /dev/null +++ b/core/src/agentforge_core/runtime/checkpointer.py @@ -0,0 +1,20 @@ +"""Wrapper sobre SqliteSaver de LangGraph. Centraliza el path y el ciclo de vida.""" + +from __future__ import annotations + +import sqlite3 +from pathlib import Path + +from langgraph.checkpoint.sqlite import SqliteSaver + + +def build_checkpointer(data_dir: Path) -> SqliteSaver: + """Devuelve un SqliteSaver apuntando a ``data_dir/checkpoints.sqlite``. + + La base se crea si no existe. La conexión usa ``check_same_thread=False`` + porque LangGraph ejecuta nodos en hilos del executor. + """ + data_dir.mkdir(parents=True, exist_ok=True) + db_path = data_dir / "checkpoints.sqlite" + conn = sqlite3.connect(str(db_path), check_same_thread=False) + return SqliteSaver(conn)