Skip to content

Nisaba v0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 01 Nov 13:59

Nisaba v0.2.0 — Importación de ChatGPT, Codex en la nube y multimedia bajo demanda

ChatGPT & Cloud Codex Imports with On-Demand Multimedia

🇪🇸 Español · 🇬🇧 English


🇪🇸 Español

La versión v0.2.0 culmina la hoja de ruta del archivo web cifrado de Nisaba incorporando el adaptador completo para exportaciones de ChatGPT (gpt-…) y tareas de Codex en la nube (cxg-…, fuente Codex-ChatGPT), además de un sistema eficiente de carga bajo demanda para archivos adjuntos multimedia (.dat).

Esta actualización permite centralizar en tu propia base cifrada (tablilla-web.db) todo tu historial de OpenAI junto al de Claude.ai, manteniendo intacta la regla fundacional de Nisaba: la tablilla solo crece.


🧠 Importación de ChatGPT y Codex en la nube

Compatible con conversaciones identificadas mediante los prefijos gpt-xxxxxxxx (ChatGPT) y cxg-xxxxxxxx (Codex-ChatGPT):

  • Soporte para historiales gigantes multi-archivo:
    • Procesa automáticamente archivos partidos conversations-000.json … conversations-NNN.json o el clásico conversations.json.
    • Importa las sesiones de Codex en la nube (codex.json) vinculando repositorios, ramas de trabajo, modificaciones de código y diffs de PR bajo la fuente dedicada Codex-ChatGPT.
  • Estructura en árbol mapping sin pérdida de ramas:
    • Recorre el grafo de mensajes desde current_node hacia la raíz para fijar la rama principal activa (oculto = 0) para búsquedas FTS5 y lectura limpia.
    • Comprime los caminos técnicos intermedios (message: null, reasoning_recap, mensajes internos de sistema) hacia su ancestro visible más cercano para mantener la genealogía intacta.
    • Preserva las respuestas regeneradas y preguntas editadas como ramas alternativas (oculto = 1), accesibles en cualquier momento desde el selector de ramas en el panel lateral Detalles.
  • Razonamiento, voz y herramientas:
    • Extrae bloques de razonamiento (content_type: "thoughts") como contenido desplegable.
    • Conserva íntegras las transcripciones de notas de voz (audio_transcription).
    • Mapea citas web y referencias de búsqueda (search_result_groups y content_references) como fuentes numeradas clicables en el panel de Detalles.
    • Descarta de forma estricta archivos irrelevantes como ads.json (perfil publicitario) y chat.html.

🛡️ Reconstrucción en memoria de ZIPs cortados al descargar

En exportaciones de gran volumen (~3 GB), OpenAI coloca todos los archivos .json al principio (~80 MB) y miles de archivos .dat al final. Si la descarga del navegador se interrumpe antes de escribir el directorio central final (PK\x05\x06):

  • El lector de Nisaba analiza las cabeceras locales individuales (PK\x03\x04).
  • Si todas las conversaciones .json están íntegras, reconstruye en memoria RAM el directorio central (FuenteZip::ConDirectorioVirtual) sin alterar ni duplicar el archivo en disco.
  • Se importan todas las conversaciones completas emitiendo un aviso informativo en el resumen de importación.

🖼️ Multimedia bajo demanda desde el ZIP (imágenes y audios)

Para evitar inflar la base de datos tablilla-web.db con gigabytes de binarios:

  • La base de datos almacena el texto, las transcripciones de voz y la correspondencia con los archivos .dat (conversation_asset_file_names.json).
  • Mientras el archivo web está desbloqueado, pulsar sobre un adjunto en el panel Detalles invoca cargar_asset_web, que lee únicamente ese archivo en RAM desde el ZIP (tope de seguridad de 50 MiB), detecta su tipo MIME mediante firmas mágicas (PNG, JPEG, WebP, GIF, WAV, MP3, OGG) y genera una Data URL (data:<mime>;base64,…).
  • Sin temporales en claro: ningún archivo multimedia se extrae a /tmp ni queda en claro en disco. Al cerrar la ventana o bloquear el archivo web, los archivos quedan inaccesibles.

⌨️ Nuevos comandos en la terminal (nisaba)

Importar exportaciones de ChatGPT

nisaba import <archivo.zip>

(Alias en español: nisaba importar <archivo.zip>)

Filtrar por las nuevas fuentes web

nisaba search "consulta" --web --source chatgpt
nisaba search "consulta" --web --source codex-chatgpt

(Alias en español: nisaba buscar "consulta" --web --fuente chatgpt y --fuente codex-chatgpt)

Consultar una conversación de ChatGPT o Codex nube

nisaba show gpt-xxxxxxxx
nisaba show cxg-xxxxxxxx

(Alias en español: nisaba ver gpt-xxxxxxxx)


💾 Copias de seguridad

Recuerda que para respaldar o mover tu archivo web cifrado debes conservar ambos archivos juntos:

  • tablilla-web.db (base de datos cifrada con SQLCipher)
  • boveda.json (bóveda con la clave maestra envuelta con Argon2id + AES-256-GCM)

Ubicaciones:

  • Linux: ~/.local/share/nisaba/
  • Windows: %APPDATA%\nisaba\

🇬🇧 English

Version v0.2.0 completes the encrypted web archive roadmap in Nisaba by adding a full-featured import adapter for ChatGPT exports (gpt-…) and Cloud Codex tasks (cxg-…, source Codex-ChatGPT), alongside an efficient on-demand streaming engine for multimedia attachments (.dat).

This update allows you to centralize your entire OpenAI history alongside Claude.ai within your own encrypted SQLite database (tablilla-web.db), strictly adhering to Nisaba's core principle: the tablet only grows.


🧠 ChatGPT and Cloud Codex Imports

Full compatibility with conversations prefixed by gpt-xxxxxxxx (ChatGPT) and cxg-xxxxxxxx (Codex-ChatGPT):

  • Support for Multi-Part Split Archives:
    • Seamlessly imports multi-file histories split across conversations-000.json … conversations-NNN.json, as well as standard single conversations.json files.
    • Automatically imports Cloud Codex tasks (codex.json) preserving repositories, branches, file changes, and PR diffs under the dedicated Codex-ChatGPT source.
  • Lossless mapping Tree Structure:
    • Traverses the message graph upward from current_node to determine the active linear branch (oculto = 0) for fast FTS5 searching and distraction-free reading.
    • Compresses intermediate technical nodes (message: null, reasoning_recap, internal system prompts) directly into their closest visible parent to keep tree integrity intact.
    • Retains regenerated assistant responses and edited prompts as alternative branches (oculto = 1), easily switchable at any time from the Details panel.
  • Reasoning, Voice Transcripts, and Tools:
    • Maps model reasoning blocks (content_type: "thoughts") as collapsible sections.
    • Preserves full voice note transcriptions (audio_transcription).
    • Maps search citations and web references (search_result_groups and content_references) to clickable numbered sources in the Details panel.
    • Safely ignores non-essential files such as ads.json (ad profiling) and chat.html.

🛡️ In-Memory Central Directory Recovery for Truncated ZIPs

On large exports (~3 GB), OpenAI writes all .json files at the very beginning (~80 MB) followed by thousands of .dat media files. If browser downloads terminate before appending the final Central Directory record (PK\x05\x06):

  • Nisaba inspects Local File Headers (PK\x03\x04).
  • If conversation .json files are intact, it synthesizes the central directory in RAM (FuenteZip::ConDirectorioVirtual) without altering or duplicating the archive on disk.
  • All complete conversations are imported safely, accompanied by an explicit summary warning.

🖼️ On-Demand Multimedia Preview from ZIP (Images & Audio)

To prevent tablilla-web.db from ballooning with gigabytes of binary BLOBs:

  • The database stores text, voice transcriptions, and file metadata mappings (conversation_asset_file_names.json).
  • While the web archive is unlocked, requesting an attachment preview loads only that specific .dat entry directly into memory from the ZIP (enforcing a 50 MiB security ceiling), sniffing magic bytes to determine the MIME type (PNG, JPEG, WebP, GIF, WAV, MP3, OGG) and serving it as a Data URL (data:<mime>;base64,…).
  • Zero temporary files: no plaintext multimedia is ever written to /tmp or disk. Locking the vault immediately revokes asset access.

⌨️ CLI Commands (nisaba)

Import ChatGPT Exports

nisaba import <file.zip>

(Spanish alias: nisaba importar <file.zip>)

Filter by Web Sources

nisaba search "query" --web --source chatgpt
nisaba search "query" --web --source codex-chatgpt

(Spanish equivalents: nisaba buscar "query" --web --fuente chatgpt and --fuente codex-chatgpt)

Inspect a ChatGPT or Cloud Codex Session

nisaba show gpt-xxxxxxxx
nisaba show cxg-xxxxxxxx

(Spanish equivalent: nisaba ver gpt-xxxxxxxx)


💾 Backups

To back up or migrate your encrypted web archive, always keep both files together:

  • tablilla-web.db (SQLCipher encrypted database)
  • boveda.json (master key wrapped with Argon2id + AES-256-GCM)

Storage paths:

  • Linux: ~/.local/share/nisaba/
  • Windows: %APPDATA%\nisaba\