Skip to content

Releases

1.0.0-beta.1

Choose a tag to compare

@github-actions github-actions released this 12 Nov 20:58
69666b5

1.0.0-beta.1

Añadido

  • Tema integrado «Papiro»: papel kraft envejecido con fibras y manchas, la nota como una hoja de bordes rotos y tostados, y tinta sepia con títulos en serif. En oscuro, cuero curtido con letras de pergamino. También en «Papiro Islas».
  • Carpetas de temas globales: los .css de ~/.config/synapsers/themes (que se lee siempre) y de las carpetas extra que agregues en Configuración → Apariencia aparecen como temas en todas las bóvedas, sin recompilar. Las carpetas extra se guardan en appearance.theme_dirs del nuevo ~/.config/synapsers/config.jsonc; se leen al iniciar y con el botón Reescanear. Admiten @nombre, @capa y @base como los integrados.
  • Tema integrado «Neón CRT» y temas integrados automáticos: «Neón CRT» es Neón con líneas de barrido tipo monitor viejo en la lectura (en Linux pueden dar lag al desplazarse, por eso «Neón» ya no las trae). Para sumar un tema integrado basta con dejar su .css en src/entities/appearance/themes/, con @nombre, @capa o @base en su comentario inicial.
  • Actualizador automático (Auto-updater):
    • Integración del plugin tauri-plugin-updater para detectar y aplicar actualizaciones firmadas desde GitHub Releases.
    • Firma digital criptográfica de los paquetes y generación automática del manifiesto latest.json en los flujos de CI/CD para Linux (.tar.gz) y Windows (.zip).

Cambiado

  • Una sola carpeta de configuración global, ~/.config/synapsers: el registro de puertos MCP (mcp-ports.json) ya no se escribe también en ~/.config/synapse. Esa carpeta ya no se usa y se puede borrar.
  • Caché de navegación a postcard:
    • Reemplazo de la biblioteca desmantenida bincode por postcard (v1.1 con use-std) para la serialización binaria en disco de la caché del motor de navegación (DashMap<NoteId, NoteMeta>), reduciendo huella y garantizando compatibilidad moderna de tipos.
  • Optimización de compilación:
    • Compilación con ThinLTO en modo release y uso del enlazador lld en Linux para acelerar los tiempos de enlazado y empaquetado en CI.

1.0.0-alpha.5

Choose a tag to compare

@github-actions github-actions released this 12 Nov 05:24
6a65df1

1.0.0-alpha.5

Añadido

  • Página web de presentación (docs/index.html): landing estática basada en docs/about.md, con capturas ampliables (visor con zoom a tamaño real y navegación con flechas), comparativa, temas, arquitectura y la mascota (pulpo kawaii) fija en la esquina inferior derecha.

  • Temas integrados «Rosa» e «Islas»: «Rosa» en tonos rosa suaves; «Islas» muestra los paneles como islas flotantes con esquinas redondeadas sobre un marco más oscuro, y se combina con los demás en «Papel Islas», «Neón Islas» y «Rosa Islas».

  • Temas integrados «Papel» y «Neón»: vienen con la app y aparecen en Configuración → Apariencia → Tema personalizado sin copiar archivos. Un archivo .synapse/themes/ con el mismo nombre los reemplaza. «Neón» es cyberpunk con fondo de rejilla, paneles translúcidos con desenfoque, títulos con brillo magenta, cian y amarillo, íconos de carpeta propios y desplegables dibujados a mano. Tiene versión oscura y una clara «amanecer».

  • Temas: todo el color en variables, zonas públicas y tema de ejemplo: los colores de la interfaz salen de variables CSS (nuevas: --success, --warning, --danger, --purple, --on-accent, --overlay-bg…), así un tema cambia toda la app. Las zonas principales tienen clases estables synapse-* (barra lateral, filas del explorador, pestañas, editor, lectura, barra de estado, diálogos). Guía en docs/temas.md y tema de ejemplo «Papel». Algunos tonos cambian levemente al seguir las variables del tema, sobre todo en la pantalla de bienvenida.

  • Temas y fragmentos CSS por bóveda: en Configuración → Apariencia se elige un tema de .synapse/themes/ y se activan fragmentos de .synapse/snippets/ (archivos .css). Se aplican sin reiniciar y cada bóveda guarda los suyos en .synapse/appearance.json. Los temas pueden cambiar los títulos por nivel en lectura y edición (--h1-font, --h1-size, --h1-weight, --h1-color… hasta h6), la fuente del texto de las notas (--font-text) y el ícono de carpeta (--icon-folder, --icon-folder-open).

  • Diff de Excalidraw por píxeles: el diff visual de un dibujo tiene el modo «Diferencias», como las imágenes. Las dos versiones se exportan a imagen con el mismo marco y se resaltan en magenta los píxeles que cambiaron.

  • Fondo por defecto en la pestaña vacía: una imagen para el tema claro y otra para el oscuro, incluidas en la app. Se usan mientras no se elija un fondo propio.

  • El fondo propio de la pestaña vacía ahora es de cada bóveda, no general. El que ya estaba elegido pasa a la bóveda abierta.

  • Explorador: expandir y contraer todo: dos botones en la cabecera del explorador. Con el filtro de Git activo solo afectan a las carpetas del filtro; al quitarlo, las demás siguen como estaban.

  • Explorador: archivos borrados: un archivo borrado que Git todavía tiene sigue apareciendo en el árbol, en rojo y tachado; al hacer clic se abre su diff.

  • Filtro de Git completo: con el filtro de Git el explorador muestra todo lo que entraría en un commit (sin seguimiento, modificado, añadido o borrado), aunque sea un tipo de archivo que normalmente no se ve en el explorador.

  • Índice de la nota: al hacer clic en el título de una nota Markdown (o en el botón de índice a su lado) se abre un índice con todos sus títulos y subtítulos, contraído por defecto (solo se ven los de primer nivel), con botones para expandir y contraer todo; al elegir uno, la nota va a ese título. El índice abre desplegado hasta el título donde estás, que aparece resaltado, y tiene arriba una búsqueda rápida de títulos (Enter va al primero que coincide).

  • Ubicación en la nota: junto al título de una nota Markdown, entre paréntesis, se ve la ruta de títulos de la parte que estás viendo (p. ej. (Inicio › Parte A › Detalle)), que se actualiza al desplazarte; al hacer clic en un tramo se va a ese título.

  • De lectura a edición sin perder el sitio: al pasar del modo lectura a un modo de edición, el cursor queda en la primera línea que se estaba viendo en lectura.

  • Breadcrumb: copiar ruta completa: el menú contextual del archivo en el breadcrumb ofrece «Copiar ruta relativa» y «Copiar ruta completa».

Corregido

  • Cabeceras alineadas: la línea inferior de la cabecera del explorador ahora coincide con la de la barra de pestañas.
  • Bloques de código en lectura: dentro de un bloque de código aparecía una línea horizontal bajo cada línea de texto (heredaba el borde del código en línea).
  • Commit con archivos borrados: hacer commit de un archivo borrado cuyo borrado ya estaba en stage (o de una carpeta borrada entera) fallaba con «git add falló: … no concordó con ningún archivo».

1.0.0-alpha.4

Choose a tag to compare

@github-actions github-actions released this 10 Nov 04:03
c41d183

1.0.0-alpha.4

Añadido

  • Panel de configuración: el botón de engranaje del ribbon abre un panel para cambiar el tema, el idioma, el tamaño del texto, el fondo de la pestaña vacía, el modo Vim, las propiedades de la nota, los visores de Mermaid y Excalidraw, el servidor de PlantUML y todos los atajos de teclado. Los atajos se guardan en shortcuts.jsonc sin perder sus comentarios.
  • Pestaña vacía con buscador y fondo: la pestaña vacía muestra arriba el buscador de Ctrl+O, con el foco puesto para empezar a escribir, y permite elegir una imagen de fondo con «Cambiar fondo».
  • Abreviatura hs: para headings: en la búsqueda de contenido, y la guía de búsqueda ahora explica este filtro.
  • hs: y headings: también funcionan en Quick Open (Ctrl+O): buscan en los encabezados sin tener que escribir ? delante.
  • Al filtrar por headings: o hs:, el resultado muestra el encabezado encontrado con formato de título y, en la línea siguiente, el texto que le sigue. El índice se reconstruye solo la primera vez que se abre la bóveda tras actualizar.
  • MCP: write_note informa de lo que hizo: la respuesta indica con created si la nota se creó o se sobrescribió, y añade warning si su carpeta no existía.
  • MCP: write_note ya no pisa notas sin permiso (cambio incompatible): para reemplazar una nota existente hay que enviar expected_hash u overwrite: true; si no, falla y explica cómo seguir. También falla si se envía expected_hash y la nota no existe.
  • Tamaño del texto en el editor y la previsualización: Ctrl+rueda, Ctrl++ y Ctrl+- lo cambian, y Ctrl+0 lo restablece. Los atajos se configuran en shortcuts.jsonc (zoom_in, zoom_out, zoom_reset) y admiten varias combinaciones separadas por comas.
  • Comparar dos archivos desde VaultExplorer: al seleccionar exactamente dos archivos, el menú contextual ofrece «Comparar archivos» y abre un diff entre ellos, sin necesidad de git. Solo admite archivos de texto.
  • La búsqueda en el contenido indexa los títulos y subtítulos de las notas Markdown y les da más peso que al resto del texto: una nota con el término en un encabezado sale antes que una que solo lo menciona en un párrafo. También se puede filtrar con headings:término. El índice se reconstruye solo la primera vez que se abre la bóveda tras actualizar.
  • Filtro kind: en Quick Open (Ctrl+O): kind:pdf informe busca solo entre los PDF; kind:markdown, word, excel, code, image, mermaid y excalidraw funcionan igual, basta con escribir el comienzo (kind:pd). Solo kind:pdf lista todos los PDF.
  • Los enlaces [[nota#Título]] llevan al encabezado, como en Obsidian: al pulsarlos (en el editor y en modo lectura) se abre la nota y se va a ese título o subtítulo, no a la primera vez que aparece el texto. Con [[nota#Título#Subtítulo]] vale el último.
  • ![[nota#Título]] incrusta esa sección en el modo lectura: muestra el título y todo lo que le pertenece, hasta el siguiente encabezado del mismo nivel o superior (los subtítulos de nivel inferior van incluidos). También se expanden los embeds dentro de lo incrustado, hasta 3 niveles y sin repetir ciclos. Si la nota o el título no existen, queda como enlace a la nota (antes se mostraba una imagen rota). En el editor sigue siendo un enlace al encabezado. Las imágenes y demás recursos con ![[...]] no cambian.
  • Atajo Shift+F6 en VaultExplorer para renombrar: permite renombrar el archivo o carpeta seleccionado cuando el explorador de archivos tiene el foco.

Corregido

  • La búsqueda en el contenido ya no pierde resultados cuando la última palabra es completa y su raíz es más corta, como «para» en hs:Prompts para.

  • Tab en los editores de código y Markdown inserta 4 espacios en vez de sacar el foco del editor; con texto seleccionado sangra las líneas, y Shift+Tab quita la sangría. Con Vim, solo en modo inserción.

  • La búsqueda en modo lectura ya no congela la app al escribir en notas grandes: se busca una sola vez al dejar de escribir, y limpiar los resaltados es mucho más rápido.

  • Ctrl+Shift+F abre la búsqueda en el contenido también con una nota abierta; antes abría la búsqueda dentro de la nota.

  • Ctrl+R en un editor abre buscar y reemplazar con el foco en el campo de reemplazo. Con Vim sigue siendo rehacer, salvo con el foco en el panel de búsqueda. Fuera del editor sigue recargando.

  • Las propiedades de la nota reconocen listas en línea como tags: [uno, dos, tres].

  • Shift+F6 en CodeMirror solo se activa si tiene el foco, evitando capturar la combinación o seleccionar ocurrencias cuando el editor no está enfocado.

  • Los mensajes de error del editor de código ya no quedan cortados o tapados por la barra superior, por ejemplo en un error de la primera línea de un diagrama.

  • Ctrl+R en un editor con Vim rehace (como en Vim) en vez de recargar el archivo; fuera de Vim sigue recargando.

  • El render de D2 y Mermaid ya no se atrasa al editar: antes cada tecla lanzaba un render y, con un layout lento como TALA (~3 s por render), se encolaban y el diagrama tardaba decenas de segundos en ponerse al día. Ahora se espera a que se deje de escribir (más tiempo si el render es lento) y nunca hay más de uno pendiente.

  • Render de D2 y Mermaid al editar: ya no se lanza un render por tecla (con TALA se acumulaban y el diagrama llegaba muy tarde); se espera una pausa al escribir y nunca hay más de un render en cola. Ctrl+Enter fuerza el redibujado y la barra de estado muestra el render en curso y lo que tardó.

  • El editor de diagramas (D2/Mermaid) recupera el foco y el cursor al volver a su pestaña, y una recarga del archivo desde disco ya no recrea el editor ni manda el cursor al inicio: solo se aplica el tramo que cambió.

  • Búsqueda de Vim (/) y cursor invisibles en el tema oscuro del editor de código.

  • Una segunda instancia de la app ya no reescribe el puerto MCP de la bóveda ni la marca como detenida.

  • Título editable de la nota: se guardaba sobre una propiedad no reactiva.

  • Quick Open: separadores coherentes y orden estable en los empates.

  • Persistencia del estado de MCP al cerrar y abrir workspaces:

    • Se desacopló el ciclo de vida del runtime y socket TCP efímero (running) de la preferencia configurada por el usuario en la bóveda (enabled).
    • Al cerrar la aplicación, ventana o alternar entre bóvedas, el servidor MCP detiene su proceso/socket sin sobrescribir ni apagar enabled: false en .synapse/mcp.json.
    • Al abrir un workspace donde MCP estaba activo, el servidor se reactiva automáticamente.
    • Se introdujo el trait de dominio McpConfigRepository y su implementación de infraestructura FileMcpConfigRepository siguiendo la Arquitectura Cebolla.

Cambiado

  • F2 alterna entre edición y lectura (antes Ctrl+E).
  • En el editor, Ctrl+E y Ctrl+Y desplazan la pantalla una línea y Ctrl+D duplica la línea, también con Vim (en Vim, Ctrl+D deja de ser media página).
  • Rendimiento:
    • Arranque más rápido: las pestañas se montan al activarse, el explorador ya no usa un árbol de respaldo y los comandos de lectura salen del hilo principal (bloqueo de JS al arrancar de ~1250 a ~750 ms).
    • El backend devuelve al sistema la memoria liberada tras abrir la bóveda (de ~800 a ~400 MB).
    • Explorador virtualizado: solo se pintan las filas visibles.
    • Imágenes servidas con el protocolo de assets de Tauri en vez de base64 por IPC.
    • Una sola lista de la bóveda en el frontend, sin avalancha de IPC al abrir.
    • Búsqueda de texto completo: consultar las versiones indexadas ya no carga cada documento (19 ms → 3 ms con 3 740 documentos).

Añadido

  • Soporte para PlantUML (.puml, .plantuml): editor con resaltado y autocompletado, vista previa, errores marcados en su línea, Ctrl+Enter para redibujar, creación desde el explorador y la paleta, y exportación a PNG/SVG. El render lo hace un servidor PlantUML (por defecto plantuml.com, por lo que el código del diagrama sale de tu máquina); se cambia con el comando «PlantUML: cambiar servidor». El SVG recibido se limpia antes de mostrarlo.

  • Ctrl+Enter en el editor de D2 y Mermaid fuerza el redibujado del diagrama.

  • Estado del render de diagramas en la barra de estado: «Renderizando D2… 1,2 s» mientras dura y el tiempo que tardó al terminar.

  • Autocompletado con las palabras del documento en todos los editores (markdown, D2 y Mermaid): los nombres que ya usas (variables, nodos…) se sugieren aunque el lenguaje no los conozca, detrás de las sugerencias del lenguaje.

  • Exportar diagramas a PNG y SVG desde el menú contextual del explorador, para Excalidraw, Mermaid y D2. El archivo se guarda junto al diagrama con el tema actual.

  • Shift+F6 cambia todas las coincidencias de una palabra (como renombrar en JetBrains, pero textual): selecciona las coincidencias exactas de palabra completa y lo que se escribe las cambia todas. Con Vim, se cambian con c.

  • Plegado entre llaves en D2 y Mermaid, desde el margen del editor de código.

  • Atajos de plegado de Vim con el comportamiento de Vim: zc, zo, za, zC, zO, zM y zR. zc pliega el bloque que contiene al cursor y zM pliega todos los niveles.

  • Copiar la ruta de la bóveda desde el menú contextual del explorador; copiar ruta se desactiva si no hay archivos seleccionados.

  • Compatibilidad con la API de Obsidian para plugins:

    • La fachada responde de forma síncrona como en Obsidian: getAbstractFileByPath, getActiveFile y metadataCache.getFileCache.
    • SynapseVault mantiene un índice ruta → metadatos (sin contenido) que se actualiza con las mutaciones locales y los eventos del vigilante. Los plugins se cargan cuando el índice está listo.
    • Lo específico de Excalidraw pasa a integrations/excalidraw.
  • **Filtro "Solo co...

Read more

1.0.0-alpha.3

Choose a tag to compare

@github-actions github-actions released this 10 Nov 04:02
bb5b9f0

1.0.0-alpha.3

Añadido

  • Deshacer y rehacer en el editor:

    • Ctrl+Z para deshacer y Ctrl+Shift+Z o Ctrl+Y para rehacer.
    • Atajos de vim: u para deshacer, Ctrl+R para rehacer y U para revertir la última línea editada.
    • Módulo reutilizable shared/lib/editor-history.
  • Comentar/descomentar líneas con Ctrl+/ (Cmd+/ en macOS):

    • Nuevo módulo shared/lib/editor-comment, disponible en el editor de Markdown y en el editor de código de diagramas.
    • Usa los tokens de comentario del lenguaje: # para D2, %% para Mermaid y <!-- --> para Markdown.
  • Deshacer de línea (U) en el editor:

    • Nuevo módulo shared/lib/editor-history que replica el U de vim: revierte los cambios de la última línea editada, y vuelve a aplicarlos si se repite.
    • Disponible en el editor de Markdown y en el editor de código de diagramas.
  • Versión de compilación derivada de Git:

    • Nuevo módulo version.rs que compone la versión SemVer a partir de git describe (por ejemplo 1.0.0-alpha.2+4.g09ab330), y añade la marca de tiempo si el árbol está sucio.
    • build.rs emite la información con vergen. El comando get_app_version y la opción --version usan esta versión en lugar de package_info().
  • Guardado de cambios pendientes antes de operaciones sobre archivos:

    • Nuevo puente shared/lib/pending-writes: el explorador, el breadcrumb y el menú de Git persisten el buffer del editor antes de renombrar o hacer git add.
    • Con esto, renombrar o añadir al stage un archivo abierto ya no opera sobre una versión desactualizada en disco.
  • Panel de código redimensionable en diagramas D2 y Mermaid:

    • Nueva barra SplitResizer entre el código y el visor del diagrama.
    • La proporción elegida se recuerda por archivo durante la sesión, en memoria del backend (comandos get_diagram_split_ratio y set_diagram_split_ratio). No se persiste a disco.
  • Renombrado de archivos versionados en Git:

    • Si el archivo está en el índice, el renombrado se prepara en el índice (git add de la ruta antigua y la nueva), de modo que Git lo detecta como renombrado.
    • Nuevo método GitService::is_tracked para comprobar si una ruta tiene archivos versionados.
  • Mover archivos y carpetas en el explorador con Ctrl+X y Ctrl+V:

    • Nuevo comando move_vault_items: mueve elementos a la carpeta destino, sin sobrescribir ni mover una carpeta dentro de sí misma.
    • Las pestañas abiertas siguen a sus archivos tras el movimiento, y los archivos versionados quedan preparados en el índice de Git.
    • Si un elemento está bloqueado y tiene cambios sin guardar, se pide confirmación antes de moverlo.
  • Panel de atajos de teclado (F1 o el comando "Mostrar atajos de teclado"):

    • Lista los atajos configurables de shortcuts.jsonc y los fijos del editor, con búsqueda.
    • Nuevo componente Kbd para mostrar combinaciones, usado también en la paleta de comandos.
  • Confirmación al renombrar archivos bloqueados: si el archivo bloqueado tiene cambios sin guardar, el diálogo de cambios pendientes ofrece guardar y continuar, o cancelar.

Cambiado

  • Ancho mínimo del panel de código de diagramas: baja de 280 a 160 px.

  • Atajos en la barra lateral: los rótulos del Ribbon muestran solo la combinación principal, mediante primaryShortcutText.

  • Autoguardado al quitar el bloqueo: un archivo con cambios pendientes al desbloquearse se vuelve a guardar automáticamente.

  • Metadatos y edición de Rust: Cargo.toml pasa a edition = "2024" y rust-version = "1.93.0", con autor, descripción y repositorio del proyecto. La línea version queda comentada, así que la versión ya no sale de Cargo.toml.

  • Rendimiento del editor de notas:

    • Autoguardado a los 4 s de dejar de escribir. También se guarda al perder el foco, al cambiar de pestaña o al pasar a solo lectura, respetando los archivos bloqueados.
    • Ya no se reconcilia toda la bóveda en cada guardado.
    • Refresco de git status agrupado con un debounce de 5 s.
    • Debounce del indexador de texto completo (FTS) de 5 s.
    • Nuevas claves en config.jsonc: editor.git_status_refresh_debounce_ms, indexing.debounce_ms y drawing_change_debounce_ms (2500 ms por defecto).
  • Excalidraw:

    • Detección de cambios por firma de elementos, de modo que el scroll, el zoom y la selección no serializan la escena.
    • Debounce de 2500 ms y propagación inmediata de los cambios pendientes al perder el foco.
    • Nueva clave drawing_max_wait_ms (15000 ms): tope de edición continua sin pausas, pasado el cual el dibujo se propaga y se guarda igualmente.
    • El indexador omite el reindexado si el texto del dibujo no ha cambiado.
  • Diagramas D2 y Mermaid: los bloques ```d2 y ```mermaid ya no se re-renderizan al editar texto cercano.

Corregido

  • Ctrl+R ya no recarga la ventana de la aplicación.
  • Tamaño del SVG de D2: el SVG recibe width y height a partir de su viewBox, evitando que colapse en las tarjetas de lectura.
  • Renombrar o hacer git add con cambios sin guardar: el buffer del editor se persiste antes de la operación, para no trabajar con el archivo desactualizado en disco.
  • Pestañas tras renombrar una carpeta o un archivo: se reasignan todas las referencias abiertas (pestañas principales y divididas, selección, historial, cierre, bloqueos y rutas recientes), incluidas las notas dentro de una carpeta renombrada.
  • Guardado tardío recreaba el archivo antiguo: un guardado pendiente o un visor que cerraba después de un renombrado volvía a crear la ruta anterior. Ya no ocurre.
  • Dibujos sin guardar al perder el foco: al ocultarse la ventana o perder el foco, se guardan también los dibujos con cambios aún sin propagar.
  • Renombrar o mover un archivo bloqueado sin confirmación: ahora se pide confirmación si el archivo está protegido.

1.0.0-alpha.2

Choose a tag to compare

@github-actions github-actions released this 10 Nov 04:02
262309b

1.0.0-alpha.2

Añadido

  • Componente reutilizable GitStatusBadge y soporte de tokens CSS para Git:

    • Creación del componente GitStatusBadge.svelte en la entidad @entities/git para centralizar la presentación visual de insignias de estado Git (M modificado/staged, A añadido, ? untracked, S stashed).
    • Integración del componente GitStatusBadge tanto en VaultExplorer como en BreadCrumb, unificando su diseño e interacción en toda la interfaz.
    • Adición de variables semánticas CSS para estados Git en el tema claro y oscuro (--git-modified, --git-staged, --git-untracked, --git-stashed y sus respectivas variantes -bg y -border).
  • Pegado inteligente de imágenes en notas Markdown:

    • Intercepción de eventos de pegado (paste) en CodeMirror cuando el portapapeles contiene una imagen (archivo o datos binarios).
    • Detección automática del formato de imagen correspondiente (webp, png, jpg, svg, gif, etc., con fallback por defecto a webp).
    • Guardado físico de la imagen en la subcarpeta attachments/ relativa a la carpeta de la nota actual (o en la raíz si la nota reside en ella), con timestamp image_YYYYMMDD_HHmmss.[ext] y resolución de colisiones.
    • Inserción automática del enlace transcluido ![[image_...]] en la posición del cursor de la nota, renderizándose visualmente de forma inmediata gracias al soporte de imágenes del editor.
  • Versión dinámica de la aplicación y visualización adaptativa:

    • Exposición del comando IPC Tauri get_app_version en el backend para obtener la versión de forma fidedigna desde package_info().version.
    • Conexión de la versión dinámica en la pantalla de bienvenida (WelcomeScreen) reemplazando valores codificados en duro.
    • Indicador de versión integrado en la barra de estado inferior (StatusBar), con visibilidad adaptativa mediante estilos CSS que la ocultan automáticamente si no hay espacio horizontal suficiente.
  • Reorganización de herramientas en la barra lateral Ribbon:

    • Reordenamiento de las herramientas situando directamente debajo de las carpetas el acceso a la búsqueda de archivos por nombre (quick-open) y la búsqueda full-text en el contenido de las notas (search).
  • Puntaje compuesto en Quick Open (Ctrl+O):

    • Nuevo módulo ranking.rs (QuickOpenScorer) construido sobre nucleo_matcher, que puntúa por campo (nombre de archivo, título, tags y ruta) con pesos: nombre > título > tags > ruta.
    • Bonus de recencia acotado (último día, última semana o alguna vez abierta) y bonus por coincidencia exacta del nombre, de modo que una coincidencia dispersa reciente no supera a una coincidencia limpia.
    • Pruebas de integración en navigation_tests.rs para el nuevo orden de resultados.
  • Miniaturas de videos de YouTube en notas Markdown:

    • Los links a YouTube (youtube.com, youtu.be, youtube-nocookie.com, incluidos shorts, embed y live) muestran una miniatura clicable en el modo de lectura y en el editor en vivo.
    • Nuevo módulo youtube.ts con extracción del ID de video y pruebas unitarias en youtube.test.ts.
    • La miniatura se oculta automáticamente si no se puede cargar.
  • Sincronización del título en el frontmatter:

    • Nueva función sync_frontmatter_title que actualiza o crea el campo title en el frontmatter YAML de una nota Markdown, conservando el resto de campos y el cuerpo.
  • Extensión .txt tratada como código:

    • Los archivos .txt se añaden a la lista de extensiones de código en config.jsonc y se muestran con el icono de código en lugar del de Markdown.

Cambiado

  • Guardado automático con temporizador por archivo:

    • Cada nota tiene su propio temporizador de guardado, por lo que editar una nota ya no cancela el guardado pendiente de otra.
    • Se guarda de inmediato al perder el foco de la ventana, al ocultarse, al cambiar de pestaña o al pasar a solo lectura, respetando siempre el bloqueo de archivo.
    • auto_save_delay_ms pasa de 600 a 4000 ms y fs_watcher_recent_save_grace_ms de 3000 a 8000 ms.
  • Refresco de Git agrupado: nueva clave git_status_refresh_debounce_ms (5000 ms) en config.jsonc. Los guardados agrupan el git status en lugar de lanzar uno por guardado.

  • Reindexación Full-Text configurable: nueva clave indexing.debounce_ms (5000 ms por defecto, antes fijo en 350 ms). Ya no se reconstruye toda la bóveda en cada guardado: el watcher detecta el cambio.

  • Orden del explorador de la bóveda: las carpetas con emoji al inicio van primero, seguidas del resto de carpetas y luego archivos, todo en orden alfabético sin distinguir mayúsculas (sortSiblings en VaultExplorer.svelte).

  • Motor D2 migrado a @d2lang/d2:

    • Se reemplaza el paquete @terrastruct/d2 por @d2lang/d2 (v0.1.34) en package.json y en el servicio d2-service.ts.
    • Nuevo motor de layout tala disponible en el selector de D2 junto a dagre y elk.
  • Ordenamiento de Quick Open reescrito: se sustituye el sistema de niveles (tiers) y el ordenamiento manual por el puntaje compuesto de QuickOpenScorer, y el escaneo lineal de respaldo solo se ejecuta cuando nucleo no termina a tiempo o no ha inyectado todas las notas.

Corregido

  • Filtrado de Quick Open por palabras: cada palabra de la consulta debe aparecer en el campo, en cualquier orden (por ejemplo, bcp ttib encuentra BCP - TTIB ...).
  • Bucle de nucleo.tick en búsqueda: el bucle ya no ejecuta un tick de más tras terminar el trabajo de nucleo.
  • Diagramas Mermaid que se re-renderizaban al escribir: el widget ya no compara posiciones absolutas, así que escribir antes de un diagrama no lo destruye y vuelve a renderizar en cada pulsación.
  • Diagramas D2 con altura cero en WebKit: el SVG generado recibe width y height derivados de su viewBox, evitando que colapse dentro de las tarjetas de lectura.

Añadido

  • Integración del plugin CLI de Tauri (@tauri-apps/plugin-cli / tauri-plugin-cli):

    • Incorporación de soporte CLI formal en la aplicación de escritorio mediante el plugin oficial de Tauri v2.
    • Opciones de consulta de versión (--version, -V) y ayuda detallada (--help, -h) que imprimen información directamente en la terminal y finalizan la ejecución de forma inmediata sin instanciar la interfaz gráfica.
    • Documentación en --help de las opciones de apertura de bóveda/archivo (--vault/-v, --file/-f, ruta posicional) y de inicio de servidor local stdio MCP (--mcp).
  • Preservación y reapertura de pestañas cerradas en la navegación del historial:

    • Al cerrar una pestaña activa o en segundo plano, su registro se mantiene en tabHistory de forma desacoplada y con bajo consumo de memoria.
    • Al utilizar la navegación hacia atrás o adelante (incluyendo los botones laterales del ratón o Alt+Left/Alt+Right), si la pestaña destino había sido cerrada, se reabre automáticamente restituyendo su posición física original en la barra de pestañas y conservando el estado de selección del cursor.
  • Parámetros de temporización de editor y Excalidraw configurables en config.jsonc:

    • Nuevas propiedades bajo el bloque "editor" tipadas y validadas tanto en el modelo de dominio Rust (EditorConfig) como en la entidad frontend (file-types.svelte.ts):
      • drawing_auto_save_delay_ms: Tiempo de inactividad antes de persistir dibujos a disco (3000 ms por defecto).
      • drawing_change_debounce_ms: Tiempo de espera para propagar cambios de escena hacia la pestaña (400 ms por defecto).
      • fs_watcher_recent_save_grace_ms: Ventana de gracia para ignorar eventos del watcher originados por guardados propios (3000 ms por defecto).
  • Capa de compatibilidad Obsidian API: Entorno global, emulación Node.js y stubs CodeMirror:

    • Emulación de módulos en require(): Soporte para paquetes @codemirror/search y @codemirror/autocomplete, así como módulos esenciales de Node.js requeridos por plugins comunitarios (path, events, constants, url, punycode, crypto con createHash y randomBytes, stream, process, util y querystring), junto a stubs seguros para dependencias de escritorio (electron, child_process, fs, http, https, os).
    • Polyfill nativo de Buffer: Implementación basada en Uint8Array con codificación y decodificación binaria UTF-8 y Base64 (Buffer.from, isBuffer, toString).
    • Entorno global y objetos canónicos: Exposición de activeWindow, global, process y CodeMirror.defineMode / defineSimpleMode en el contexto global de ejecución.
    • Nuevas exportaciones en bundle Obsidian: Incorporación de la clase Vault (SynapseVault), Workspace (SynapseWorkspace), SuggestModal, loadMermaid (con import dinámico seguro), loadMathJax y función getIconIds.
  • Capa de compatibilidad Obsidian API: Soporte para Vault, Workspace y App:

    • Opciones y recorrido en SynapseVault: Métodos vault.getConfig (vimMode, theme, legacyEditor, livePreview), vault.getName y recurseChildren(folder, callback) para iteración recursiva de jerarquías de archivos.
    • Extensiones en SynapseWorkspace: Propiedad containerEl, métodos getMostRecentLeaf() e iterateAllLeaves(callback), disparo de eventos con updateOptions() y registro de fuentes de vista previa flotante (registerHoverLinkSource / unregisterHoverLinkSource).
    • Persistencia local y propiedades en SynapseApp: Métodos loadLocalStorage y saveLocalStorage para plugins que almacenan ajustes temporales, objeto app.foldManager (load, save) para soporte de plegado de código/secciones y bandera app.isMobile = false para compatibilidad con plugins de calendario y vistas de notas diarias.
    • Caché de metadatos: Método metadataCache.getCachedFiles() para consultar todas las rutas registradas ...
Read more

1.0.0-alpha.1

Choose a tag to compare

@github-actions github-actions released this 29 Oct 14:12
d26a070

1.0.0-alpha.1

Añadido

  • Integración del plugin CLI de Tauri (@tauri-apps/plugin-cli / tauri-plugin-cli):

    • Incorporación de soporte CLI formal en la aplicación de escritorio mediante el plugin oficial de Tauri v2.
    • Opciones de consulta de versión (--version, -V) y ayuda detallada (--help, -h) que imprimen información directamente en la terminal y finalizan la ejecución de forma inmediata sin instanciar la interfaz gráfica.
    • Documentación en --help de las opciones de apertura de bóveda/archivo (--vault/-v, --file/-f, ruta posicional) y de inicio de servidor local stdio MCP (--mcp).
  • Preservación y reapertura de pestañas cerradas en la navegación del historial:

    • Al cerrar una pestaña activa o en segundo plano, su registro se mantiene en tabHistory de forma desacoplada y con bajo consumo de memoria.
    • Al utilizar la navegación hacia atrás o adelante (incluyendo los botones laterales del ratón o Alt+Left/Alt+Right), si la pestaña destino había sido cerrada, se reabre automáticamente restituyendo su posición física original en la barra de pestañas y conservando el estado de selección del cursor.
  • Parámetros de temporización de editor y Excalidraw configurables en config.jsonc:

    • Nuevas propiedades bajo el bloque "editor" tipadas y validadas tanto en el modelo de dominio Rust (EditorConfig) como en la entidad frontend (file-types.svelte.ts):
      • drawing_auto_save_delay_ms: Tiempo de inactividad antes de persistir dibujos a disco (3000 ms por defecto).
      • drawing_change_debounce_ms: Tiempo de espera para propagar cambios de escena hacia la pestaña (400 ms por defecto).
      • fs_watcher_recent_save_grace_ms: Ventana de gracia para ignorar eventos del watcher originados por guardados propios (3000 ms por defecto).
  • Capa de compatibilidad Obsidian API: Entorno global, emulación Node.js y stubs CodeMirror:

    • Emulación de módulos en require(): Soporte para paquetes @codemirror/search y @codemirror/autocomplete, así como módulos esenciales de Node.js requeridos por plugins comunitarios (path, events, constants, url, punycode, crypto con createHash y randomBytes, stream, process, util y querystring), junto a stubs seguros para dependencias de escritorio (electron, child_process, fs, http, https, os).
    • Polyfill nativo de Buffer: Implementación basada en Uint8Array con codificación y decodificación binaria UTF-8 y Base64 (Buffer.from, isBuffer, toString).
    • Entorno global y objetos canónicos: Exposición de activeWindow, global, process y CodeMirror.defineMode / defineSimpleMode en el contexto global de ejecución.
    • Nuevas exportaciones en bundle Obsidian: Incorporación de la clase Vault (SynapseVault), Workspace (SynapseWorkspace), SuggestModal, loadMermaid (con import dinámico seguro), loadMathJax y función getIconIds.
  • Capa de compatibilidad Obsidian API: Soporte para Vault, Workspace y App:

    • Opciones y recorrido en SynapseVault: Métodos vault.getConfig (vimMode, theme, legacyEditor, livePreview), vault.getName y recurseChildren(folder, callback) para iteración recursiva de jerarquías de archivos.
    • Extensiones en SynapseWorkspace: Propiedad containerEl, métodos getMostRecentLeaf() e iterateAllLeaves(callback), disparo de eventos con updateOptions() y registro de fuentes de vista previa flotante (registerHoverLinkSource / unregisterHoverLinkSource).
    • Persistencia local y propiedades en SynapseApp: Métodos loadLocalStorage y saveLocalStorage para plugins que almacenan ajustes temporales, objeto app.foldManager (load, save) para soporte de plegado de código/secciones y bandera app.isMobile = false para compatibilidad con plugins de calendario y vistas de notas diarias.
    • Caché de metadatos: Método metadataCache.getCachedFiles() para consultar todas las rutas registradas en la caché.
  • Capa de compatibilidad Obsidian API: Ecosistema de Plugins, UI y Barra de Estado:

    • Ciclo de vida en Plugin: Métodos registerObsidianProtocolHandler, registerEditorSuggest y registerHoverLinkSource con limpieza automática en onunload.
    • Registro centralizado en PluginLoader: Exposición del mapa app.plugins.plugins[pluginId] asignado antes de la inicialización de cada plugin y limpieza al descargarse.
    • Gestor SynapseInternalPluginsManager (app.internalPlugins): Soporte para plugins nativos (app.internalPlugins.getPluginById y getEnabledPluginById), requerido por plugins comunitarios como Calendar, Periodic Notes y la biblioteca obsidian-daily-notes-interface.
    • Soporte nativo de daily-notes: Registro del plugin interno daily-notes con configuración predeterminada (YYYY-MM-DD, carpeta y plantilla), cargando asíncronamente las opciones de .obsidian/daily-notes.json o .synapse/daily-notes.json.
    • Plugins internos y stubs: Registro de workspaces, file-recovery (con manejadores asíncronos seguros) y stubs para backlink, outgoing-link, tag-pane, page-preview y graph.
    • Integración con la barra de estado: SynapseStatusBarManager conecta directamente los elementos .status-bar-item.plugin-status-item creados por plugins con el componente visual StatusBar.svelte en la parte inferior del espacio de trabajo.
    • Componentes de UI y modales: Clase base SuggestModal<T> con contenedor de resultados y FuzzySuggestModal<T> conectada; métodos fluidos setPlaceholder y setInstructions en Modal.
  • Capa de compatibilidad Obsidian API: Extensiones DOM nativas y biblioteca moment():

    • Extensiones DOM nativas en HTMLElement.prototype: Métodos canónicos de Obsidian (setText, getText, addClass, removeClass, addClasses, removeClasses, toggleClass, hasClass, setAttr, getAttr) en el prototipo global del DOM para manipulación segura sin excepciones en tiempo de ejecución.
    • Soporte ampliado de fechas y locales en moment(): Métodos de comparación y límites (isSame, isBefore, isAfter, startOf, endOf), manipulación de unidades (year, month, date, day, weekday, isoWeekday, week, set, get), formateo relativo (calendar()), métodos de internacionalización (locale, localeData, moment.locale, moment.localeData, moment.updateLocale, moment.locales, moment.weekdays, moment.weekdaysShort, moment.weekdaysMin) y spec global _bundledLocaleWeekSpec.
  • Indexación en memoria de carpetas (DashSet) y navegación rápida:

    • NavigationEngine (Backend Rust): Nueva colección concurrente folders: Arc<DashSet<CompactString>> para registrar directorios de la bóveda (incluidas carpetas vacías).
    • Hidratación en frío (< 1 ms): Pre-poblado instantáneo de carpetas ancestros al arrancar desde las rutas en RAM de las notas sin romper la compatibilidad binaria del caché bincode.
    • Watcher reactivo de filesystem: Sincronización en vivo de carpetas ante eventos de creación, eliminación y renombrado en disco.
    • Servicio de dominio puro (domain/services/folder_service.rs): Métodos extract_ancestor_folders y summarize_folder para cálculo de huella semántica (notes_count, subfolders_count, dominant_tags y sample_notes) en memoria sin I/O directo.
    • Comando Tauri search_folders_command: Búsqueda difusa y paginada de carpetas con retorno de huella semántica.
  • Herramientas Agénticas MCP avanzadas para carpetas:

    • search_folders: Permite a los LLMs buscar carpetas con coincidencia difusa y recibir su huella semántica (conteo, tags más frecuentes y notas de muestra) para desambiguar carpetas homónimas en una sola llamada sin sobrecargar la ventana de contexto.
    • move_folder_contents: Mueve de forma masiva notas entre directorios con prevención de path traversal y bucles infinitos, filtro opcional por extensión, estrategia de resolución de conflictos (skip, rename, overwrite) y soporte de simulacro dry_run.
    • Paginación en list_folder_contents: Soporte de limit y offset con has_more y next_offset para directorios con cientos de notas.
    • Filtro de ruta en full_text_search: Soporte de coincidencias parciales por segmento de carpeta con alto recall.
  • UX mejorada en Ctrl+O (Quick Open):

    • Modo / (DIR): Escribir / filtra exclusivamente carpetas en la bóveda con badge indicador visual.
    • Colapso inteligente a Top 3 en búsqueda normal: En consultas generales, las carpetas coincidentes se limitan a las 3 más relevantes para evitar desplazar las notas y archivos hacia abajo.
    • Elemento interactivo "Ver X carpetas más...": Alternancia expandir/colapsar con soporte completo de clic de ratón o teclado (Enter).
    • Drill-down interactivo y botón Revelar: Presionar Enter sobre una carpeta autocompleta la búsqueda a ruta/carpeta/, o botón para revelarla directamente en el explorador lateral.
  • Navegación unificada por páginas con retención de altura relativa (PageDown / PageUp):

    • Módulo compartido shared/lib/navigation (relative-page-navigator.ts): Utilidad modular reusable que calcula el vector $\Delta Y = Y_{\text{target}} - Y_{\text{current}}$ y desplaza el contenedor asegurando que el elemento seleccionado mantenga la misma fila visual o altura en pantalla (Relative Viewport Retention).
    • QuickOpen (Ctrl+O): Navegación adaptativa a 60 FPS fijos que preserva la posición vertical del elemento seleccionado o hace clamping seguro en los extremos.
    • Búsqueda Full-Text (Ctrl+Shift+F): Soporte completo de PageDown y PageUp en FullTextSearch con retención de posición relativa y sincronización de foco.
    • VaultExplorer (Explorador lateral): Soporte de PageDown y PageUp con navegació...
Read more

2026.10.26.01-alpha

Choose a tag to compare

@Miuler Miuler released this 26 Oct 21:40
b2a719f

[2026.10.26.01-alpha] - 2026-10-26

Añadido

  • Renderizado Embebido de Dibujos Excalidraw en Markdown con Caché:
    • Soporte completo para renderizar visualmente archivos de dibujo Excalidraw (.excalidraw, .excalidraw.json, .excalidraw.md) como gráficos vectoriales SVG directamente dentro de las notas Markdown.
    • Compatibilidad total con transclusiones de wikilinks (![[dibujo.excalidraw]], ![[esquema.excalidraw.md|500]]), sintaxis estándar de imagen (![](./diagrama.excalidraw)) y bloques de código dedicados (excalidraw ... ) con soporte para directivas {{#include ...}}.
    • Sistema de Caché Multinivel de Alto Rendimiento:
      • Nivel 1 (RAM): Caché en memoria LRU de 0 ms para visualización instantánea.
      • Nivel 2 (Disco): Persistencia de SVGs prerenderizados en <vault>/.synapse/cache/excalidraw/<hash>_<theme>.svg. Lee el SVG en menos de 2 ms sin invocar React ni volver a calcular la geometría si el contenido no ha cambiado.
      • Nivel 3 (Motor): Renderizado bajo demanda con exportToSvg adaptado al tema activo claro u oscuro de Synapse.
    • Integración transparente en el editor en vivo CodeMirror (sustitución interactiva al salir del cursor con botón de edición) y en la vista de lectura MarkdownReadingView.
  • Visualizador y Editor de Diagramas D2 (.d2) con WebAssembly (@terrastruct/d2):
    • Soporte completo para abrir, editar y previsualizar archivos de diagramas .d2 con renderizado SVG nativo de alto rendimiento vía WASM.
    • Reconocimiento de la extensión .d2 en la categoría diagrams tanto en el backend Rust (file_types.rs) como en la configuración (config.jsonc) y entidades frontend (file-types.svelte.ts).
    • Configuración Declarativa In-File: Soporte nativo del bloque vars: { d2-config: { ... } } para definir motor de layout (dagre, elk), tema (theme-id), tema oscuro (dark-theme-id), modo boceto (sketch) y padding directamente en el código fuente.
    • Detección automática del tema claro u oscuro de Synapse como fallback si el archivo no especifica un theme-id.
    • Integración en WorkspacePage, comparador de diff (VisualDiffViewer), visor de revisiones Git (RevisionViewer) y renderizado de bloques de código ````d2` en notas Markdown (tanto en lectura como en edición en vivo).
  • Refactorización Unificada DiagramSplitViewer (src/shared/ui/diagram-viewer/): Extracción de componentes comunes de visualización de diagramas en un único componente base reutilizable, reduciendo más de 1,300 líneas de código duplicado entre MermaidViewer, MermanViewer y D2Viewer. Lienzo SVG unificado con zoom y paneo interactivo sobre viewBox, motor gráfico de Puntero Láser sobre canvas 2D con estela y controles flotantes con bits-ui.
  • Autocompletado y Linter Sintáctico en Tiempo Real para D2 y Mermaid (CodeEditor.svelte):
    • Autocompletado Contextual (@codemirror/autocomplete):
      • En D2: sugerencias para motores (dagre, elk), catálogo de 20 temas oficiales con nombre descriptivo (0 Neutral, 3 Flagship, 200 Dark Mauve, 300 Terminal, 303 C4, etc.), formas geométricas (shape:), direcciones (direction:), estilos (style.*) y snippets de d2-config.
      • En Mermaid: sugerencias para directivas %%{init: ...}%%, frontmatter config:, catálogo de temas de Mermaid.js y Merman, look (classic, handDrawn), layout (dagre, elk), curve y tipos de diagrama (flowchart, sequenceDiagram, stateDiagram-v2, erDiagram, architecture-beta, etc.).
    • Linter y Diagnóstico en Línea (@codemirror/lint + lintGutter):
      • Subrayado rojo ondulado en la línea y columna exacta del error sintáctico devuelto por los parsers de D2 (rangos AST) y Mermaid (err.hash.loc), con marcadores en el margen de línea y tooltips informativos.
  • Atajo de Teclado para Alternar/Entrar en Modo Edición:
    • Nuevo atajo de teclado por defecto Ctrl+E (toggle_edit_mode) para alternar instantáneamente entre el modo lectura y el modo edición en el visor Markdown activo sin necesidad de hacer clic con el ratón.
    • Registro del atajo en la configuración global y en el mapa de atajos (shortcuts.svelte.ts).
  • Persistencia Global del Modo Vim:
    • El estado del modo Vim (vimMode) ahora se almacena y recuerda permanentemente a través de localStorage y la configuración de la aplicación (appSettings.vimMode), manteniéndose activo al recargar o reiniciar Synapse.
  • Sincronización Bidireccional entre Modales de Búsqueda:
    • Al presionar Ctrl+Shift+F teniendo abierto QuickOpen (Ctrl+O), el texto introducido se transfiere automáticamente a FullTextSearch y la ventana de QuickOpen se cierra.
    • De forma recíproca, al pulsar Ctrl+O desde FullTextSearch, la consulta se traslada instantáneamente a QuickOpen cerrando el diálogo de búsqueda full-text.
  • Autocompletado de Wikilinks ([[...]]):
    • Ventana emergente (popup) en tiempo real al escribir [[ en el editor CodeMirror con sugerencias contextuales de notas de la bóveda.
    • Formateo limpio: la lista desplegable muestra únicamente el nombre base del archivo sin rutas de directorios ni extensión .md.
    • Ampliación de dimensiones visuales del menú emergente (.cm-tooltip-autocomplete) a 460px de ancho y hasta 420px de altura con scrolling suave.
  • Knowledge Graph 2D y 3D con Aceleración WebGL:
    • Visualizador de grafo de conocimiento bidireccional local y global con simulación de fuerzas (force-directed).
    • Modo 3D WebGL impulsado por Three.js con botón conmutador 2D/3D accesible en la cabecera del visor de grafos.
    • Soporte de nodos fantasma (ghost nodes) para wikilinks referenciados pendientes de creación.
    • Paralelización multi-hilo con Rayon en Rust para análisis y cálculo ultra-rápido de enlaces y física de grafos en bóvedas masivas.
  • Explorador de Etiquetas e Inspector de Relaciones:
    • Vista lateral TagsExplorer para explorar, contar y filtrar notas rápidamente según sus etiquetas (#etiqueta).
    • Panel RelationsInspector para auditar backlinks, enlaces salientes e hijos/padres de la nota activa.
  • Servidor MCP Local (Model Context Protocol):
    • Servidor stdio MCP integrado en Rust (synapse-mcp) para conectar agentes de IA locales con la bóveda de forma dedicada desde CLI (synapsers --mcp).
    • Servidor MCP en Proceso (in-process) con Transporte HTTP: Soporte para ejecutar el servidor MCP en segundo plano en la misma instancia activa de escritorio de Synapse (http://127.0.0.1:27182/mcp), vinculándose dinámicamente a la bóveda abierta en pantalla y compartiendo en memoria el índice de búsqueda Tantivy.
    • Indicador e Interruptor en StatusBar: Botón interactivo en la barra de estado inferior que muestra el estado en vivo (MCP ON :27182 / MCP OFF), permite activar o apagar el servidor con un clic y expone información de la bóveda activa y peticiones atendidas vía tooltip.
    • Comandos en Paleta (Ctrl+P): Acciones rápidas para alternar el servidor MCP local y copiar la URL de conexión al portapapeles.
    • Persistencia de Estado: Opción recordada en localStorage (appSettings.mcpServerEnabled) para restaurar automáticamente el servidor encendido al reabrir la app.
    • Herramientas MCP avanzadas para búsqueda full-text, inspección de relaciones/backlinks, lectura de notas, listado de contenido de carpetas (list_folder_contents), listado de notas vecinas en la misma carpeta (list_sibling_notes), movimiento en lote de notas entre carpetas (move_notes) y estado Git.
  • Soporte de Frontmatter YAML según OKF:
    • Parseo, indexación y preservación bidireccional de metadatos YAML frontmatter alineados con las especificaciones Open Knowledge Format (OKF) y herramientas de IA.

Corregido

  • Prevención de Recarga Redundante y Bloqueo de Edición en Excalidraw al presionar Esc:
    • Se corrigió un bug en ExcalidrawViewer donde al pulsar Esc o producirse una deselección con pérdida de foco (focusout), la serialización y guardado del archivo desencadenaba una actualización externa reactiva que sobreescribía la escena de Excalidraw (updateScene). Esto provocaba la pérdida del puntero interactivo del canvas y requería alternar a modo lectura y volver a edición para reactivar el dibujo.
    • Implementación de discriminación de cambios locales (isLocalChange) y comparación semántica con hash de versión de escena (hasSceneDiverged utilizando getSceneVersion) para impedir reescrituras de la escena viva generadas por el propio visor.
    • Restauración automática y garantizada de la herramienta de selección (setActiveTool({ type: 'selection' })) tras la captura del evento Escape.
  • Foco Automático en el Editor al Reabrir o Alternar Notas:
    • Al abrir o reabrir una nota que quedó en modo edición, o alternar entre pestañas editables, el editor CodeMirror recibe el foco de entrada automáticamente (focus()), permitiendo escribir o desplazarse inmediatamente con las teclas sin necesidad de hacer clic manual previo.
  • Precisión y Ranking en Búsqueda Difusa (search_with_stats):
    • Corrección del algoritmo de ranking en el motor de navegación Nucleo: se otorgan prioridades y bonificaciones estrictas a coincidencias exactas y subcadenas completas en nombres de archivo y títulos, eliminando resultados espurios irrelevantes al buscar palabras en minúsculas comunes (ej. todo).
  • Respuesta Instantánea de QuickOpen (Ctrl+O):
    • Eliminación de listeners redundantes y configuración de forceMount={true} en los elementos de Command.Item para evitar que la lista se quede en blanco.
    • Retorno en memoria en 0 ms si la búsqueda en backend no ha completado la primera respuesta.
  • Aislamiento de Pestañas Sintéticas de Grafos:
    • Se corrigió la asociación de rutas para evitar que URIs sintéticas como synapse://graph sean identif...
Read more

2026.10.24.01-alpha

Choose a tag to compare

@Miuler Miuler released this 24 Oct 04:06
66865c3

[2026.10.24.01-alpha] - 2026-10-24

Añadido

  • Bloqueo de Archivos contra Modificaciones Accidentales (File Lock):
    • Opción de bloquear y desbloquear archivos desde el menú contextual de VaultExplorer.
    • Iconos de candado visibles en el árbol de archivos, en las pestañas (EditorHeader) y en la barra superior.
    • Inhibición estricta de auto-guardado en archivos bloqueados con persistencia en VaultUiState.locked_files.
    • Diálogo de confirmación accesible al intentar cerrar pestañas o la aplicación con cambios pendientes en archivos bloqueados, ofreciendo opciones para abortar, descartar cambios o forzar el guardado.
  • Modo Lectura por Defecto en Archivos Excalidraw:
    • Tanto los dibujos de Excalidraw nativo como los de Obsidian Excalidraw (.excalidraw, .excalidraw.md) ahora se abren por defecto en modo lectura, evitando mutaciones o disparos accidentales en memoria.
  • Acciones del Sistema en Menús Contextuales:
    • "Abrir con la app por defecto": Permite abrir cualquier archivo con la aplicación configurada por omisión en el sistema operativo (Word, Excel, etc.) tanto desde VaultExplorer como desde las pestañas.
    • "Mostrar en carpeta": Abre el gestor de archivos nativo del sistema y resalta el archivo o carpeta seleccionada.
    • Implementación multiplataforma en Rust siguiendo la especificación estándar FreeDesktop D-Bus (org.freedesktop.FileManager1.ShowItems con busctl/dbus-send y fallbacks en Linux, explorer /select en Windows y open -R en macOS).
  • Control de Lectura y Escritura Local en Visor de Diff:
    • En VisualDiffViewer, el panel de trabajo local ahora inicia en modo lectura por defecto con un interruptor para alternar entre modo lectura y escritura exclusiva para el archivo local en disco, mientras que el panel de revisión Git permanece estrictamente en modo solo lectura.
  • Soporte de Imágenes y Archivos Incrustados en Diagramas Excalidraw:
    • Reconocimiento y parseo bidireccional de la sección ## Embedded Files en archivos Markdown de Obsidian Excalidraw (.excalidraw.md).
    • Resolución automática de rutas relativas y wikilinks (fileId: [[ruta/a/imagen.png]]) a URLs de datos (dataURL) leídas desde la bóveda activa.
    • Inyección dinámica en el registro de archivos del lienzo tanto en el visor de Excalidraw nativo (api.addFiles) como en el generador vectorial SVG de ObsidianExcalidrawViewer (ExcalidrawAutomate.toSVG), permitiendo la correcta visualización de imágenes y gráficos incrustados.
    • Preservación íntegra de la sección ## Embedded Files durante el guardado y serialización de archivos.

Corregido

  • Prevención de Congelamiento y Optimización de Memoria en Obsidian Excalidraw:

    • Se eliminó el filtro CSS drop-shadow en el contenedor SVG del visor de Obsidian Excalidraw, evitando que WebKitGTK asigne búfers rasterizados masivos de varios gigabytes (hasta 4 GB) para diagramas vectoriales extensos.
    • Se configuró el SVG generado con width="100%" height="100%" acoplado a su viewBox, permitiendo un renderizado vectorial escalado por GPU sin límites fijos hipertrofiados.
    • Se implementó un debounce de 300 ms en el evento onChange del editor nativo de Excalidraw para evitar ejecutar la compresión LZ de miles de elementos en cada micro-movimiento del puntero.
    • Se protegieron las imágenes cargadas para no persistir URLs de datos o activos en el bloque de archivos del JSON en documentos Markdown, respetando el formato estándar de ## Embedded Files.
  • Apertura de Diagramas Excalidraw en Modo Lectura por Defecto:

    • Detección precisa de archivos de dibujo a través de su metadata YAML frontmatter (--- \n excalidraw-plugin: parsed \n ---) independientemente del nombre o extensión .md.
    • Los diagramas se abren por omisión en modo lectura (readOnly y botón en modo "Lectura") para evitar modificaciones accidentales y consumo innecesario de recursos.
  • Persistencia del Modo Edición durante el Auto-guardado en Excalidraw:

    • Se corrigió un bug donde, al guardar automáticamente un dibujo abierto en Excalidraw, la recarga del archivo y la actualización interna de escena revertían el visor al modo lectura o dejaban la herramienta activa en modo mano (hand), impidiendo continuar editando sin alternar el botón de la cabecera.
  • Protección Estricta contra Guardado en Archivos Bloqueados:

    • Se corrigió un bug donde persistVaultItemToRust persistía archivos bloqueados al cerrar la ventana, desmontar componentes o disparar callbacks automáticos de visores. Ahora se exige force = true explícito (únicamente activable vía diálogo de confirmación, atajo Ctrl+S o botón Guardar manual).

v2026.10.23.04-alpha

Choose a tag to compare

@Miuler Miuler released this 23 Oct 18:00
8196edf

[2026.10.23.04-alpha] - 2026-10-23

Añadido

  • Plugins Comunitarios de Obsidian (SOLO SE VALIDO EL PLUGIN DE EXCALIDRAW DE OBSIDIAN):
    • Explorador e instalador integrado de plugins comunitarios desde el catálogo oficial de Obsidian.
    • Soporte de instalación, habilitación, deshabilitación, desinstalación y ejecución en entorno seguro.
    • Caché de doble nivel (RAM y disco) con TTL para navegación instantánea del catálogo sin saturar la red.
    • Detección automática de plugins instalados mediante escaneo directo en disco del vault.
    • Comandos y soporte en interfaz para verificar actualizaciones y actualizar plugins automáticamente.
  • Búsqueda Full-Text en Documentos PDF y Word (DOCX):
    • Extracción e indexación automática de texto para archivos .pdf y .docx en el motor Tantivy en Rust.
    • Configuración detallada en config.jsonc (indexing): límites de tamaño (max_pdf_file_size, max_docx_file_size), límite de páginas (max_pdf_pages), límite de caracteres (max_extracted_chars) y filtrado de palabras corruptas (max_word_length).
  • Navegación Fluida y Expansión desde Breadcrumb:
    • Al hacer clic en un directorio dentro del BreadCrumb de una nota activa, VaultExplorer se expande y se muestra automáticamente si la barra lateral estaba colapsada u oculta.
    • La carpeta seleccionada en el breadcrumb despliega inmediatamente sus subdirectorios y archivos en el árbol del explorador.
  • Regiones de Arrastre de Ventana en Windows y Sistemas de Escritorio:
    • Se habilitaron regiones de arrastre nativas de Tauri (data-tauri-drag-region) en las zonas vacías de la cabecera de pestañas (EditorHeader) y en la cabecera del explorador (VaultExplorer).
    • Espaciador de arrastre dedicado de 24px junto a los controles de ventana para garantizar un punto de agarre cómodo incluso con decenas de pestañas abiertas.
    • Soporte para maximizar y restaurar la ventana mediante doble clic en las áreas libres de la cabecera sin interferir con las pestañas ni los botones interactivos.

[2026.10.23.03-alpha] - 2026-10-23

Añadido

  • Explorador, instalador y gestor de plugins comunitarios de Obsidian con optimizaciones de rendimiento y caché.

v2026.10.23.02-alpha

Choose a tag to compare

@Miuler Miuler released this 23 Oct 07:00
b1ffbe9

🧠 Bienvenidos a Synapse.rs (Primer Release Alpha)

Synapse.rs es una aplicación de gestión de notas, conocimiento y diagramas hiper-rápida, privada y offline-first, construida
con Tauri v2, Rust y Svelte 5. Diseñada para ser liviana, extensible y compatible con el ecosistema de Markdown y
Obsidian.


✨ Características Principales

  • Velocidad Extrema en Rust: Indexación y navegación instantánea con búsqueda difusa en memoria (Nucleo fuzzy matching).
  • Editor Markdown y Diagramas: Soporte nativo para Markdown, diagramas Mermaid, Merman y dibujos Excalidraw (.excalidraw.md).
  • Control de Versiones Git Integrado: Historial de cambios, diff visual por archivo, branching y stashing directo desde la app.
  • Modo Archivo Puntual (Standalone): Abre y edita archivos individuales (.md, .mermaid, .excalidraw) directamente sin necesidad de crear un espacio de trabajo.
  • Soporte de Formatos: Vista previa de imágenes, documentos PDF y acceso rápido a archivos externos (Word, Excel) con tu visor de sistema preferido.
  • Tema Dinámico: Modo Oscuro, Claro y sincronización automática con el sistema operativo.
  • 100% Privado y Local: Tus notas nunca salen de tu máquina; tus archivos son simplemente carpetas en tu disco.

📦 Descargas Portables (Sin instalador)

No requieren instalación de dependencias pesadas; simplemente descarga y ejecuta:

Plataforma Archivo Instrucciones
Linux (x64) synapsers Dar permisos de ejecución: chmod +x synapsers y ejecutar ./synapsers
Windows (x64) synapsers.exe Doble clic para ejecutar directamente

Note

Esta es una versión Alpha. Si encuentras algún comportamiento inesperado o tienes sugerencias, eres bienvenido a abrir un issue en el repositorio.