| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Trusted publishing: PyPI confía en este workflow por OIDC y no hay ningún
secreto guardado en el repo. El único permiso que pide el job es
id-token: write; el resto del workflow corre sin permisos.
Antes de que sirva hay que dar de alta el pending publisher en pypi.org con
los cuatro datos que espera (owner, repo, publish.yml, environment pypi).
Incluye dos guardas antes de subir nada:
- que el tag del release coincida con __version__, porque una versión
subida a PyPI no se puede reemplazar, solo yankear;
- twine check sobre el sdist y el wheel.
Claude-Session: https://claude.ai/code/session_01RmtZ9qBemrc9TncwVTG6ED
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
El nombre en español no se encontraba, y la zona de "claude + sessions" ya
está poblada por cosas distintas con las que se confundía:
gapmiss/claude-sessions plugin de Obsidian
kyupid/claude-sessions monitor de sesiones en curso (PyPI)
claude-session-manager wrapper que preserva contexto (PyPI)
LearnedGeek/claude-recall búsqueda con SQLite FTS5 (PyPI)
"logbook" cubre las dos mitades — las conversaciones y las memorias — sin
caer en "session manager", y encaja con lo que el proyecto produce: una
bitácora que se abre en cualquier lado.
claude_sesiones/ → claude_logbook/ y todas las referencias
~/.cache/claude-sesiones → ~/.cache/claude-logbook
el resumen de PyPI pasa a inglés, como el README principal
El comando viejo sigue funcionando: pyproject declara claude-sesiones como
segundo entry point del mismo main, para no rehacer la memoria muscular.
La interfaz sigue en español; solo cambia cómo se llama e instala el paquete.
De paso, memory.py faltaba en la tabla de módulos de los dos READMEs.
Claude-Session: https://claude.ai/code/session_01RmtZ9qBemrc9TncwVTG6ED
|
|
|
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 <meta charset>: 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 & o < 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
|