Skip to content

Releases: D4vRAM369/Nisaba

Nisaba v0.2.0

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\

Nisaba v0.1.2

Choose a tag to compare

@github-actions github-actions released this 31 Oct 16:03

Nisaba v0.1.2 — Archivo web cifrado y exportaciones de Claude.ai

Encrypted Web Archive & Claude.ai Exports

🇪🇸 Español · 🇬🇧 English


🇪🇸 Español

La versión v0.1.2 introduce el archivo web cifrado (tablilla-web.db + boveda.json) y la importación completa de exportaciones de Claude.ai, tanto desde la aplicación de escritorio como desde la terminal.

Esta actualización amplía las capacidades de Nisaba para preservar, consultar y proteger tus conversaciones, manteniendo el archivo web completamente separado de las sesiones locales y del servidor MCP.

🔐 Archivo web cifrado: protección de doble capa

  • Base de datos independiente: tablilla-web.db, cifrada página a página mediante SQLCipher 4 (AES-256-CBC + HMAC-SHA512).
  • Bóveda de claves: boveda.json, que protege la clave maestra de 32 bytes mediante dos envolturas independientes con Argon2id (64 MiB, 8 pasadas) y AES-256-GCM:
    • Una protegida con tu contraseña.
    • Otra protegida mediante un código de recuperación de un solo uso (XXXX-XXXX-XXXX-XXXX-XXXX-XXXX).
  • Cambio de contraseña sin recifrado: cambiar la contraseña o recuperar el acceso permite volver a envolver la clave maestra sin necesidad de recifrar toda la base de datos.
  • Protección de memoria: los secretos se limpian al liberarse mediante zeroize. SQLCipher funciona con:
    • PRAGMA cipher_memory_security = ON
    • PRAGMA temp_store = MEMORY

📦 Importación completa de Claude.ai

Compatible con conversaciones identificadas mediante el formato cw-xxxxxxxx.

  • Importación flexible:
    • Un archivo .zip individual.
    • Una carpeta que contenga múltiples archivos .zip (formato multi-ZIP de Claude.ai).
  • Integración con proyectos:
    • Vincula conversaciones con sus proyectos mediante projects.json.
    • Conserva las instrucciones de proyecto (prompt_template).
    • Importa documentos asociados (docs[]) como entradas consultables mediante búsqueda.
  • Fusión sin pérdida — «La tablilla solo crece»:
    • Reimportar una exportación idéntica no genera duplicados.
    • Si una conversación incorpora nuevos mensajes, se actualiza.
    • Si una conversación se reduce o diverge de su historial anterior, se conserva íntegramente la versión previa.
    • Las versiones históricas (@1, @2…) pueden consultarse desde el lector.
  • Importación segura y eficiente:
    • Procesamiento en streaming.
    • Protección frente a bombas ZIP.
    • Límite de 20 GiB por importación y 1 GiB por conversación.
    • Rechazo de rutas maliciosas y ataques de path traversal (..).

🛡️ Aislamiento estricto del servidor MCP

El servidor nisaba mcp mantiene un aislamiento explícito entre los archivos locales y las conversaciones web importadas.

  • Solo accede a tablilla.db, que contiene las sesiones locales de Claude Code y Codex.
  • No abre ni accede a tablilla-web.db.
  • No acepta contraseñas del archivo web.
  • Las conversaciones importadas desde Claude.ai quedan fuera del alcance del servidor MCP.

Resultado: los agentes conectados mediante MCP no pueden acceder al contenido del archivo web a través de Nisaba MCP.

🖥️ Mejoras en la aplicación de escritorio (nisaba-gui)

Nuevo panel «Archivo web»

  • Indicador de estado en la cabecera:
    • 🔒 Archivo web — bloqueado.
    • 🔓 Archivo web — desbloqueado.
  • Creación y configuración de la bóveda cifrada.
  • Visualización y guardado del código de recuperación.
  • Bloqueo y desbloqueo del archivo.
  • Cambio de contraseña.
  • Importación de archivos .zip y carpetas mediante selector nativo o arrastrando y soltando en la ventana.

Búsqueda y conversaciones recientes unificadas

Cuando el archivo web está desbloqueado, Nisaba combina automáticamente las conversaciones locales y las importadas desde Claude.ai, ordenándolas por relevancia o fecha.

Nuevo panel lateral «Detalles»

Las conversaciones importadas desde Claude.ai disponen de un panel para consultar:

  • Proyecto: instrucciones y documentos asociados.
  • Adjuntos: contenido textual extraído.
  • Citas web: referencias recuperadas de las conversaciones.
  • Herramientas y artefactos: información y vistas previas HTML/SVG mediante un iframe con sandbox.
  • Ramas: exploración de las distintas ramas de conversación.
  • Versiones: selector de historial (Actual, @1, @2…).
  • JSON original: acceso desde el lector al contenido original almacenado en el archivo cifrado.

⌨️ Nuevos comandos de terminal (nisaba)

Importar exportaciones de Claude.ai

nisaba importar <ruta.zip>
nisaba importar <carpeta>

Alias en inglés: nisaba import.

Buscar en el archivo web cifrado

nisaba buscar "consulta" --web
nisaba buscar "consulta" --web --fuente claude-web

Equivalentes en inglés: search --web y --source claude-web.

Consultar una versión histórica

nisaba ver cw-xxxxxxxx --version 1

Equivalente en inglés: nisaba show cw-xxxxxxxx --version 1.

Gestionar contraseñas y recuperación

nisaba contrasena
nisaba recuperar

Equivalentes en inglés: nisaba password y nisaba recover.

💾 Importante: copias de seguridad

Para conservar y restaurar correctamente el archivo web cifrado, debes respaldar ambos archivos:

  • tablilla-web.db — base de datos cifrada.
  • boveda.json — bóveda que contiene la clave maestra protegida.

Ubicaciones:

Sistema Directorio
Linux ~/.local/share/nisaba/
Windows %APPDATA%\nisaba\

Important

Conserva ambos archivos juntos y guarda tu contraseña o código de recuperación en un lugar seguro. Perder los archivos necesarios para recuperar la clave puede dejar el archivo web inaccesible.


🇬🇧 English

v0.1.2 introduces the Encrypted Web Archive (tablilla-web.db + boveda.json) and full support for importing Claude.ai data exports through both the desktop application and the command-line interface.

This release expands Nisaba's ability to preserve, search, and protect conversations while keeping imported web archives completely separate from local sessions and the MCP server.

🔐 Encrypted Web Archive: Two-Layer Protection

  • Independent database: tablilla-web.db, encrypted page by page using SQLCipher 4 (AES-256-CBC + HMAC-SHA512).
  • Key vault: boveda.json, protecting the 32-byte master key through two independent wrapping mechanisms using Argon2id (64 MiB, 8 passes) and AES-256-GCM:
    • One protected by your password.
    • Another protected by a single-use recovery code (XXXX-XXXX-XXXX-XXXX-XXXX-XXXX).
  • Password changes without database re-encryption: changing your password or recovering access re-wraps the master key without requiring the entire database to be re-encrypted.
  • Memory protection: sensitive data is cleared when released using zeroize. SQLCipher operates with:
    • PRAGMA cipher_memory_security = ON
    • PRAGMA temp_store = MEMORY

📦 Full Claude.ai Export Importer

Supports imported conversations identified by the cw-xxxxxxxx format.

  • Flexible imports:
    • A single .zip file.
    • A folder containing multiple .zip files (Claude.ai's multi-ZIP export format).
  • Project integration:
    • Associates conversations with their projects through projects.json.
    • Preserves project instructions (prompt_template).
    • Imports associated documents (docs[]) as searchable entries.
  • Lossless merging — "The tablet only grows":
    • Reimporting an identical export creates no duplicates.
    • Conversations containing additional messages are updated.
    • If a conversation shrinks or diverges from its previous history, the earlier version is preserved in full.
    • Historical versions (@1, @2…) can be inspected directly from the reader.
  • Secure and efficient import processing:
    • Streaming processing.
    • ZIP-bomb protection.
    • 20 GiB per-import limit and 1 GiB per-conversation limit.
    • Rejection of malicious paths and path-traversal attempts (..).

🛡️ Strict MCP Server Isolation

The nisaba mcp server enforces explicit separation between local archives and imported web conversations.

  • Only accesses tablilla.db, containing local Claude Code and Codex sessions.
  • Never opens or accesses tablilla-web.db.
  • Does not accept web archive passwords.
  • Imported Claude.ai conversations remain outside the MCP server's scope.

Result: agents connected through MCP cannot access the imported web archive through Nisaba MCP.

🖥️ Desktop Application Improvements (nisaba-gui)

New Web Archive Panel

  • Header status indicators:
    • 🔒 Archivo web — locked.
    • 🔓 Archivo web — unlocked.
  • Encrypted vault creation and setup.
  • Recovery code display and saving.
  • Archive locking and unlocking.
  • Password management.
  • Importing .zip files and folders using a native file picker or drag-and-drop.

Unified Search and Recent Conversations

When the web archive is unlocked, Nisaba automatically combines local conversations with imported Claude.ai conversations, sorting results by relevance or date.

New "Detalles" (Details) Sidebar

Imported Claude.ai conversations now include a dedicated panel for inspecting:

  • Project: associated instructions and documents.
  • Attachments: extracted textual content.
  • Web Citations: references preserved from conversations.
  • Tools & Artifacts: information and HTML/SVG previews using a sandboxed iframe.
  • Branches: exploration of conversation branches.
  • Versions: history selector (Actual, @1, @2…).
  • Original JSON: access through the reader to the original content stored in the encrypted archive.

⌨️ N...

Read more

Nisaba v0.1.1

Choose a tag to compare

@github-actions github-actions released this 29 Oct 23:28

🇪🇸 Novedades de la v0.1.1

Lo que viene después de encontrar una conversación, más una petición de privacidad.

Nuevo

  • Exportar una conversación completa a .md (diálogo nativo "Guardar como") o a .pdf (diálogo de impresión, en claro para imprimir). Exporta lo que ves: con Ver todo, también herramientas y razonamiento. CLI: nisaba exportar <id> [--todo] [--salida <ruta>].
  • Aviso de posibles secretos antes de exportar (claves de Anthropic, OpenAI, GitHub, AWS y Slack, claves privadas y password=/token=/secret=), con la muestra enmascarada. En la CLI no escribe nada sin --forzar.
  • Volver al origen: ▶ Continuar copia el comando para reanudar la sesión (claude --resume … desde su carpeta, o codex resume …); 📁 Carpeta abre la carpeta del proyecto y ⧉ Ruta copia su ruta. buscar, ver y el MCP muestran ya la carpeta y el id completo.
  • No indexar (Ajustes o nisaba excluir <carpeta>): las conversaciones de esa carpeta y sus subcarpetas no se leen ni se copian. Si ya había algo guardado, se borra solo si lo confirmas (--borrar); si no, queda oculto en búsqueda, lector, exportación y MCP. El panel de salud cuenta las "excluidas por ti" aparte de los errores.
  • Comandos también en inglés: search, show, open, export, exclude, index, health, usage, y sus opciones (--source, --all, --output…). Los españoles siguen funcionando.

Seguridad y correcciones

  • El comando de Continuar usa comillas simples: pegarlo nunca expande $, ` ni comodines de la ruta.
  • Las rutas de escritura (guardar, elegir carpeta) las elige siempre el diálogo nativo, nunca la ventana.
  • No se puede excluir / ni una ruta vacía.

Actualizar

Instala el paquete nuevo encima del anterior. La primera vez, Nisaba vuelve a leer tus sesiones para guardar la carpeta de cada una (unos 30 s); no se pierde nada de lo que ya tenías.


🇬🇧 What's new in v0.1.1

What comes after you find a conversation, plus a privacy request.

New

  • Export a whole conversation to .md (native "Save as" dialog) or .pdf (print dialog, light theme for printing). It exports what you see: with Ver todo (show all), tools and reasoning too. CLI: nisaba export <id> [--all] [--output <path>].
  • Possible secrets warning before exporting (Anthropic, OpenAI, GitHub, AWS and Slack keys, private keys and password=/token=/secret=), with a masked sample. The CLI writes nothing without --force.
  • Back to the source: ▶ Continuar copies the command to resume the session (claude --resume … from its folder, or codex resume …); 📁 Carpeta opens the project folder and ⧉ Ruta copies its path. search, show and MCP now include the folder and the full id.
  • Don't index (Settings or nisaba exclude <folder>): conversations in that folder and its subfolders are never read or copied. If something was already stored, it is deleted only if you confirm (--delete); otherwise it stays hidden from search, reader, export and MCP. The health panel counts them as "excluded by you", separate from errors.
  • Commands in English too: search, show, open, export, exclude, index, health, usage, and their options (--source, --all, --output…). The Spanish ones keep working.

Security and fixes

  • The resume command uses single quotes: pasting it never expands $, ` or wildcards in the path.
  • Write paths (save, pick folder) always come from the native dialog, never from the window.
  • / or an empty path can't be excluded.

Upgrading

Install the new package over the old one. On first launch Nisaba re-reads your sessions to store each one's folder (about 30 s); nothing you already had is lost.


Instrucciones de instalación en el README · Installation instructions in the README.

Nisaba v0.1.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 21:02

Primera versión de Nisaba (0.x: en desarrollo, comandos y formatos pueden cambiar). Instrucciones de instalación en el README.