<feed xmlns='http://www.w3.org/2005/Atom'>
<title>claude-logbook/claude-sesiones, branch main</title>
<subtitle>Browse your local Claude Code sessions and project memories - terminal table and self-contained HTML</subtitle>
<link rel='alternate' type='text/html' href='http://git.all.ar/pub/claude-logbook/'/>
<entry>
<title>Preparar el proyecto para publicarlo</title>
<updated>2026-08-16T22:57:17+00:00</updated>
<author>
<name>Elvis Claros Castro</name>
<email>elvis@claros.ar</email>
</author>
<published>2026-08-16T22:57:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.all.ar/pub/claude-logbook/commit/?id=bd3ca3a04fcd8d882d23deeb3f3a0d6f04b3f93f'/>
<id>bd3ca3a04fcd8d882d23deeb3f3a0d6f04b3f93f</id>
<content type='text'>
El script suelto pasa a ser un paquete instalable, con tests y documentación.
El comportamiento del CLI no cambia: mismos flags, misma salida.

Estructura
  - claude_sesiones/{sessions,terminal,webpage,cli}.py separa parseo,
    presentación, generación del HTML y argumentos. El template pasa a ser
    data del paquete.
  - pyproject.toml con el entry point claude-sesiones, sin dependencias.
  - build.sh se disuelve en `claude-sesiones --html [ARCHIVO]`: el HTML se
    arma en proceso, sin subprocess ni data.json intermedio. `--open` lo
    abre en el navegador.

Arreglos
  - El template no tenía doctype ni &lt;meta charset&gt;: abierto como file://
    quedaba en quirks mode y con la codificación del sistema, así que los
    acentos salían rotos. Tampoco tenía viewport, con lo que en el celular
    se veía a escala de escritorio.
  - `delete_sessions()` se llamaba con un argumento de menos (lo encontró
    el test de borrado).
  - El orden de la tabla comparaba timestamps como strings; ahora compara
    los datetimes ya parseados.
  - `mark()` buscaba el texto crudo dentro del HTML ya escapado, así que
    resaltar algo con &amp; o &lt; nunca encontraba nada. `esc()` no escapaba la
    comilla simple.
  - El caché no tenía versión: al cambiar el esquema del registro se leían
    registros de la forma anterior. Ahora se invalida solo. El temporal
    lleva el pid, para que dos corridas simultáneas no se pisen.
  - `pick()` cortaba el proceso con sys.exit desde adentro; ahora levanta
    SessionError y el código de salida lo decide la CLI.

Mejoras
  - Respeta CLAUDE_CONFIG_DIR.
  - La página tiene botón de tema claro/oscuro que recuerda la elección,
    deep links (#uuid abre esa conversación), atajos de teclado, trampa de
    foco en el lector y aviso si el JS está apagado. Las tres copias de la
    paleta quedaron en dos, una por tema.
  - 92 tests con unittest, sin dependencias, contra árboles de .jsonl
    falsos: nunca tocan ~/.claude. CI en GitHub Actions, Python 3.9 a 3.13.
  - README en inglés y español, con el esquema del JSON y una advertencia
    sobre lo que hay adentro de sesiones.html.
  - Apache-2.0.

Claude-Session: https://claude.ai/code/session_01RmtZ9qBemrc9TncwVTG6ED
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
El script suelto pasa a ser un paquete instalable, con tests y documentación.
El comportamiento del CLI no cambia: mismos flags, misma salida.

Estructura
  - claude_sesiones/{sessions,terminal,webpage,cli}.py separa parseo,
    presentación, generación del HTML y argumentos. El template pasa a ser
    data del paquete.
  - pyproject.toml con el entry point claude-sesiones, sin dependencias.
  - build.sh se disuelve en `claude-sesiones --html [ARCHIVO]`: el HTML se
    arma en proceso, sin subprocess ni data.json intermedio. `--open` lo
    abre en el navegador.

Arreglos
  - El template no tenía doctype ni &lt;meta charset&gt;: abierto como file://
    quedaba en quirks mode y con la codificación del sistema, así que los
    acentos salían rotos. Tampoco tenía viewport, con lo que en el celular
    se veía a escala de escritorio.
  - `delete_sessions()` se llamaba con un argumento de menos (lo encontró
    el test de borrado).
  - El orden de la tabla comparaba timestamps como strings; ahora compara
    los datetimes ya parseados.
  - `mark()` buscaba el texto crudo dentro del HTML ya escapado, así que
    resaltar algo con &amp; o &lt; nunca encontraba nada. `esc()` no escapaba la
    comilla simple.
  - El caché no tenía versión: al cambiar el esquema del registro se leían
    registros de la forma anterior. Ahora se invalida solo. El temporal
    lleva el pid, para que dos corridas simultáneas no se pisen.
  - `pick()` cortaba el proceso con sys.exit desde adentro; ahora levanta
    SessionError y el código de salida lo decide la CLI.

Mejoras
  - Respeta CLAUDE_CONFIG_DIR.
  - La página tiene botón de tema claro/oscuro que recuerda la elección,
    deep links (#uuid abre esa conversación), atajos de teclado, trampa de
    foco en el lector y aviso si el JS está apagado. Las tres copias de la
    paleta quedaron en dos, una por tema.
  - 92 tests con unittest, sin dependencias, contra árboles de .jsonl
    falsos: nunca tocan ~/.claude. CI en GitHub Actions, Python 3.9 a 3.13.
  - README en inglés y español, con el esquema del JSON y una advertencia
    sobre lo que hay adentro de sesiones.html.
  - Apache-2.0.

Claude-Session: https://claude.ai/code/session_01RmtZ9qBemrc9TncwVTG6ED
</pre>
</div>
</content>
</entry>
<entry>
<title>Estado inicial: el explorador como script único</title>
<updated>2026-08-16T22:56:31+00:00</updated>
<author>
<name>Elvis Claros Castro</name>
<email>elvis@claros.ar</email>
</author>
<published>2026-08-16T22:56:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.all.ar/pub/claude-logbook/commit/?id=da1c60458b0d28e84739475491a3f2d61ed8eff8'/>
<id>da1c60458b0d28e84739475491a3f2d61ed8eff8</id>
<content type='text'>
Punto de partida antes de preparar el repo para publicarlo: el CLI en un
solo archivo, el template y el build.sh que los pega.

Los datos generados (data.json, sesiones.html) quedan fuera desde el primer
commit: son transcripciones completas de conversaciones privadas.

Claude-Session: https://claude.ai/code/session_01RmtZ9qBemrc9TncwVTG6ED
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Punto de partida antes de preparar el repo para publicarlo: el CLI en un
solo archivo, el template y el build.sh que los pega.

Los datos generados (data.json, sesiones.html) quedan fuera desde el primer
commit: son transcripciones completas de conversaciones privadas.

Claude-Session: https://claude.ai/code/session_01RmtZ9qBemrc9TncwVTG6ED
</pre>
</div>
</content>
</entry>
</feed>
