Repository navigation
Releases: D4vRAM369/Nisaba
Release list
Nisaba v0.2.0
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.jsono el clásicoconversations.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 dedicadaCodex-ChatGPT.
- Procesa automáticamente archivos partidos
- Estructura en árbol
mappingsin pérdida de ramas:- Recorre el grafo de mensajes desde
current_nodehacia 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.
- Recorre el grafo de mensajes desde
- 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_groupsycontent_references) como fuentes numeradas clicables en el panel de Detalles. - Descarta de forma estricta archivos irrelevantes como
ads.json(perfil publicitario) ychat.html.
- Extrae bloques de razonamiento (
🛡️ 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
.jsonestá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
/tmpni 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 singleconversations.jsonfiles. - Automatically imports Cloud Codex tasks (
codex.json) preserving repositories, branches, file changes, and PR diffs under the dedicatedCodex-ChatGPTsource.
- Seamlessly imports multi-file histories split across
- Lossless
mappingTree Structure:- Traverses the message graph upward from
current_nodeto 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.
- Traverses the message graph upward from
- 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_groupsandcontent_references) to clickable numbered sources in the Details panel. - Safely ignores non-essential files such as
ads.json(ad profiling) andchat.html.
- Maps model reasoning blocks (
🛡️ 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
.jsonfiles 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
.datentry 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
/tmpor 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
Nisaba v0.1.2 — Archivo web cifrado y exportaciones de Claude.ai
Encrypted Web Archive & Claude.ai Exports
🇪🇸 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 = ONPRAGMA temp_store = MEMORY
📦 Importación completa de Claude.ai
Compatible con conversaciones identificadas mediante el formato cw-xxxxxxxx.
- Importación flexible:
- Un archivo
.zipindividual. - Una carpeta que contenga múltiples archivos
.zip(formato multi-ZIP de Claude.ai).
- Un archivo
- 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.
- Vincula conversaciones con sus proyectos mediante
- 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
.zipy 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
iframeconsandbox. - 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-webEquivalentes en inglés: search --web y --source claude-web.
Consultar una versión histórica
nisaba ver cw-xxxxxxxx --version 1Equivalente en inglés: nisaba show cw-xxxxxxxx --version 1.
Gestionar contraseñas y recuperación
nisaba contrasena
nisaba recuperarEquivalentes 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 = ONPRAGMA temp_store = MEMORY
📦 Full Claude.ai Export Importer
Supports imported conversations identified by the cw-xxxxxxxx format.
- Flexible imports:
- A single
.zipfile. - A folder containing multiple
.zipfiles (Claude.ai's multi-ZIP export format).
- A single
- Project integration:
- Associates conversations with their projects through
projects.json. - Preserves project instructions (
prompt_template). - Imports associated documents (
docs[]) as searchable entries.
- Associates conversations with their projects through
- 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
.zipfiles 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...
Nisaba v0.1.1
🇪🇸 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:
▶ Continuarcopia el comando para reanudar la sesión (claude --resume …desde su carpeta, ocodex resume …);📁 Carpetaabre la carpeta del proyecto y⧉ Rutacopia su ruta.buscar,very 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:
▶ Continuarcopies the command to resume the session (claude --resume …from its folder, orcodex resume …);📁 Carpetaopens the project folder and⧉ Rutacopies its path.search,showand 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
Primera versión de Nisaba (0.x: en desarrollo, comandos y formatos pueden cambiar). Instrucciones de instalación en el README.