the updateOption function that handles the req.param is just destructuring `const { name, value } = req.params;` and does nothing else with the path or any params.
The remaining parts of the wildcard (which can be accessed via req.param[0]) are just ignored here.
even with express v4, this would *always* just take and process the very first part of the path, in the exact wildcard's place, e.g.
`/api/options/locale/de` and
`/api/options/locale/de/test/whatever`
would *both* end up destructuring "value" from req.param as "de" (because it is in the exact place of the 'value' wildcard)
in express v5 the wildcard behaviour changes -> here req.param.value would return an array with the paths split into separate string.
but since the code previously regarded only the first part of the path -> we can just get rid of the wildcard and use a named route param
the only thing to keep in mind: if a request with more than one "value" is received, (e.g. `/api/options/locale/de/test/whatever`) -> since we don't have the wildcard anymore -> this will turn to a 404.
IMHO that is actually desirable here though
- Moves expanding the tree navigation to the template so the rendering is already done before page load
- Adds a way to explicitly set the logo size to prevent the page moving after it loads in
TriliumNext Notes is a free and open-source, cross-platform hierarchical note taking application with focus on building large personal knowledge bases.
See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for quick overview:
* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
* Rich WYSIWYG note editor including e.g. tables, images and [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
* Support for editing [notes with source code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax highlighting
* Fast and easy [navigation between notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text search and [note hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be used for note organization, querying and advanced [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
* UI available in English, German, Spanish, French, Romanian, and Chinese (simplified and traditional)
* Direct [OpenID and TOTP integration](.docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md") for more secure login
* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization) with self-hosted sync server
* there's a [3rd party service for hosting synchronisation server](https://trilium.cc/paid-hosting)
* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes to public internet
* Strong [note encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with per-note granularity
* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type "canvas")
* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing notes and their relations
* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with location pins and GPX tracks
* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
* Scales well in both usability and performance upwards of 100 000 notes
* Touch optimized [mobile frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for smartphones and tablets
* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support for user themes
* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy saving of web content
* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along with a [Grafana Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
✨ Check out the following third-party resources/communities for more TriliumNext related goodies:
- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party themes, scripts, plugins and more.
- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
## ⚠️ Why TriliumNext?
[The original Trilium project is in maintenance mode](https://github.com/zadam/trilium/issues/4620).
### Migrating from Trilium?
There are no special migration steps to migrate from a zadam/Trilium instance to a TriliumNext/Notes instance. Simply [install TriliumNext/Notes](#-installation) as usual and it will use your existing database.
Versions up to and including [v0.90.4](https://github.com/TriliumNext/Notes/releases/tag/v0.90.4) are compatible with the latest zadam/trilium version of [v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later versions of TriliumNext have their sync versions incremented.
## 📖 Documentation
We're currently in the progress of moving the documentation to in-app (hit the `F1` key within Trilium). As a result, there may be some missing parts until we've completed the migration. If you'd prefer to navigate through the documentation within GitHub, you can navigate the [User Guide](./docs/User%20Guide/User%20Guide/) documentation.
Below are some quick links for your convenience to navigate the documentation:
- [Github Issues](https://github.com/TriliumNext/Notes/issues) (For bug reports and feature requests.)
## 🏗 Installation
### Windows / MacOS
Download the binary release for your platform from the [latest release page](https://github.com/TriliumNext/Notes/releases/latest), unzip the package and run the `trilium` executable.
### Linux
If your distribution is listed in the table below, use your distribution's package.
You may also download the binary release for your platform from the [latest release page](https://github.com/TriliumNext/Notes/releases/latest), unzip the package and run the `trilium` executable.
TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
### Browser (any OS)
If you use a server installation (see below), you can directly access the web interface (which is almost identical to the desktop app).
Currently only the latest versions of Chrome & Firefox are supported (and tested).
### Mobile
To use TriliumNext on a mobile device, you can use a mobile web browser to access the mobile interface of a server installation (see below).
If you prefer a native Android app, you can use [TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid). Report bugs and missing features at [their repository](https://github.com/FliegendeWurst/TriliumDroid).
See issue https://github.com/TriliumNext/Notes/issues/72 for more information on mobile app support.
### Server
To install TriliumNext on your own server (including via Docker from [Dockerhub](https://hub.docker.com/r/triliumnext/notes)) follow [the server installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
## 💻 Contribute
### Code
Download the repository, install dependencies using `pnpm` and then run the server (available at http://localhost:8080):
For more details, see the [development docs](https://github.com/TriliumNext/Notes/blob/develop/docs/Developer%20Guide/Developer%20Guide/Building%20and%20deployment/Running%20a%20development%20build.md).
### Developer Documentation
Please view the [documentation guide](./docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md) for details. If you have more questions, feel free to reach out via the links described in the "Discuss with us" section above.
## 👏 Shoutouts
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. TriliumNext Notes would not be the same without it.
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
## 🤝 Support
Support for the TriliumNext organization will be possible in the near future. For now, you can:
- Support continued development on TriliumNext by supporting our developers: [eliandoran](https://github.com/sponsors/eliandoran) (See the [repository insights]([developers]([url](https://github.com/TriliumNext/Notes/graphs/contributors))) for a full list)
- Show a token of gratitude to the original Trilium developer ([zadam](https://github.com/sponsors/zadam)) via [PayPal](https://paypal.me/za4am) or Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2).
## 🔑 License
Copyright 2017-2025 zadam, Elian Doran, and other contributors
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
> [!IMPORTANT]
> TriliumNext started as a fork of the original Trilium repository (`zadam/trilium`). @zadam transferred the original repo to us so the work will continue in https://github.com/TriliumNext/Trilium.
"embedding_auto_update_enabled_description":"Automatically update embeddings when notes are modified",
"recreate_embeddings":"Recreate All Embeddings",
"recreate_embeddings_description":"Regenerate all note embeddings from scratch (may take a long time for large note collections)",
"recreate_embeddings_started":"Embeddings regeneration started. This may take a long time for large note collections.",
"recreate_embeddings_error":"Error starting embeddings regeneration. Check logs for details.",
"recreate_embeddings_confirm":"Are you sure you want to recreate all embeddings? This may take a long time for large note collections.",
"rebuild_index":"Rebuild Index",
"rebuild_index_description":"Rebuild the vector search index for better performance (much faster than recreating embeddings)",
"rebuild_index_started":"Embedding index rebuild started. This may take several minutes.",
"rebuild_index_error":"Error starting index rebuild. Check logs for details.",
"note_title":"Note Title",
"error":"Error",
@ -1212,43 +1189,16 @@
"partial":"{{ percentage }}% completed",
"retry_queued":"Note queued for retry",
"retry_failed":"Failed to queue note for retry",
"embedding_provider_precedence_description":"Comma-separated list of providers in order of precedence for embeddings search (e.g., 'openai,ollama,anthropic')",
"embedding_similarity_threshold_description":"Minimum similarity score for notes to be included in search results (0-1)",
"max_notes_per_llm_query":"Max Notes Per Query",
"max_notes_per_llm_query_description":"Maximum number of similar notes to include in AI context",
"embedding_dimension_strategy_description":"Choose how embeddings are handled. 'Native' preserves maximum information by adapting smaller vectors to match larger ones (recommended). 'Regenerate' creates new embeddings with the target model for specific search needs.",
"drag_providers_to_reorder":"Drag providers up or down to set your preferred order for embedding searches",
"reprocess_index_description":"Optimize the search index for better performance. This uses existing embeddings without regenerating them (much faster than reprocessing all embeddings).",
"reprocessing_index":"Rebuilding...",
"reprocess_index_started":"Search index optimization started in the background",
"auto_refresh_notice":"Auto-refreshes every {{seconds}} seconds",
"note_queued_for_retry":"Note queued for retry",
"failed_to_retry_note":"Failed to retry note",
@ -1269,7 +1218,6 @@
"failed_to_retry_all":"Failed to retry notes",
"ai_settings":"AI Settings",
"api_key_tooltip":"API key for accessing the service",
"confirm_delete_embeddings":"Are you sure you want to delete all AI embeddings? This will remove all semantic search capabilities until notes are reindexed, which can take a significant amount of time.",
"empty_key_warning":{
"anthropic":"Anthropic API key is empty. Please enter a valid API key.",
"openai":"OpenAI API key is empty. Please enter a valid API key.",
"voyage_embedding_url_description":"Base URL for the Voyage AI embedding API (default: https://api.voyageai.com/v1)"
"select_provider":"Select provider..."
},
"zoom_factor":{
"title":"Zoom Factor (desktop build only)",
@ -1561,7 +1495,7 @@
"recovery_keys_used":"Used: {{date}}",
"recovery_keys_unused":"Recovery code {{index}} is unused",
"oauth_title":"OAuth/OpenID",
"oauth_description":"OpenID is a standardized way to let you log into websites using an account from another service, like Google, to verify your identity. Follow these <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instructions</a> to setup an OpenID service through Google.",
"oauth_description":"OpenID is a standardized way to let you log into websites using an account from another service, like Google, to verify your identity. The default issuer is Google, but you can change it to any other OpenID provider. Check <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">here</a> for more information. Follow these <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instructions</a> to setup an OpenID service through Google.",
"oauth_description_warning":"To enable OAuth/OpenID, you need to set the OAuth/OpenID base URL, client ID and client secret in the config.ini file and restart the application. If you want to set from environment variables, please set TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID and TRILIUM_OAUTH_CLIENT_SECRET.",
"message_macos":"TriliumNext is currently running under Rosetta 2 translation, which means you're using the Intel (x64) version on Apple Silicon Mac. This will significantly impact performance and battery life.",
"message_windows":"TriliumNext is currently running emulation, which means you're using the Intel (x64) version on a Windows on ARM device. This will significantly impact performance and battery life.",
"recommendation":"For the best experience, please download the native ARM64 version of TriliumNext from our releases page.",
"message":"Ha ocurrido un error crítico que previene que el cliente de la aplicación inicie:\n\n{{message}}\n\nMuy probablemente es causado por un script que falla de forma inesperada. Intente iniciar la aplicación en modo seguro y atienda el error."
},
"widget-error":{
"title":"No se pudo inicializar un widget",
"title":"Hubo un fallo al inicializar un widget",
"message-custom":"El widget personalizado de la nota con ID \"{{id}}\", titulada \"{{title}}\" no pudo ser inicializado debido a:\n\n{{message}}",
"message-unknown":"Un widget no pudo ser inicializado debido a:\n\n{{message}}"
},
@ -127,6 +127,7 @@
"collapseSubTree":"colapsar subárbol",
"tabShortcuts":"Atajos de pestañas",
"newTabNoteLink":"<kbd>CTRL+clic</kbd> - (o clic central del mouse) en el enlace de la nota abre la nota en una nueva pestaña",
"newTabWithActivationNoteLink":"<kbd>Ctrl+Shift+clic</kbd> - (o <kbd>Shift+clic de rueda de ratón</kbd>) en el enlace de la nota abre y activa la nota en una nueva pestaña",
"onlyInDesktop":"Solo en escritorio (compilación con Electron)",
"openEmptyTab":"abrir pestaña vacía",
"closeActiveTab":"cerrar pestaña activa",
@ -232,6 +233,8 @@
"move_success_message":"Las notas seleccionadas se han movido a "
},
"note_type_chooser":{
"change_path_prompt":"Cambiar donde se creará la nueva nota:",
"search_placeholder":"ruta de búsqueda por nombre (por defecto si está vacío)",
"modal_title":"Elija el tipo de nota",
"close":"Cerrar",
"modal_body":"Elija el tipo de nota/plantilla de la nueva nota:",
@ -274,9 +277,9 @@
"revision_last_edited":"Esta revisión se editó por última vez en {{date}}",
"confirm_delete_all":"¿Quiere eliminar todas las revisiones de esta nota?",
"no_revisions":"Aún no hay revisiones para esta nota...",
"restore_button":"",
"restore_button":"Restaurar",
"confirm_restore":"¿Quiere restaurar esta revisión? Esto sobrescribirá el título actual y el contenido de la nota con esta revisión.",
"delete_button":"",
"delete_button":"Eliminar",
"confirm_delete":"¿Quieres eliminar esta revisión?",
"revisions_deleted":"Se han eliminado las revisiones de nota.",
"revision_restored":"Se ha restaurado la revisión de nota.",
@ -588,6 +591,7 @@
"sat":"Sáb",
"sun":"Dom",
"cannot_find_day_note":"No se puede encontrar la nota del día",
"cannot_find_week_note":"No se puede encontrar la nota de la semana",
"january":"Enero",
"febuary":"Febrero",
"march":"Marzo",
@ -1121,6 +1125,148 @@
"layout-vertical-description":"la barra del lanzador está en la izquierda (por defecto)",
"layout-horizontal-description":"la barra de lanzamiento está debajo de la barra de pestañas, la barra de pestañas ahora tiene ancho completo."
"ollama_no_url":"Ollama no está configurado. Por favor ingrese una URL válida.",
"chat":{
"root_note_title":"Chats de IA",
"root_note_content":"Esta nota contiene tus conversaciones de chat de IA guardadas.",
"new_chat_title":"Nuevo chat",
"create_new_ai_chat":"Crear nuevo chat de IA"
},
"create_new_ai_chat":"Crear nuevo chat de IA",
"configuration_warnings":"Hay algunos problemas con su configuración de IA. Por favor compruebe sus ajustes.",
"experimental_warning":"La característica de LLM aún es experimental - ha sido advertido.",
"selected_provider":"Proveedor seleccionado",
"selected_provider_description":"Elija el proveedor de IA para el chat y características de completado",
"select_model":"Seleccionar modelo...",
"select_provider":"Seleccionar proveedor..."
},
"zoom_factor":{
"title":"Factor de zoom (solo versión de escritorio)",
"description":"El zoom también se puede controlar con los atajos CTRL+- y CTRL+=."
@ -1236,12 +1382,26 @@
"label":"Tamaño para modo de solo lectura automático (notas de texto)",
"unit":"caracteres"
},
"custom_date_time_format":{
"title":"Formato de fecha/hora personalizada",
"description":"Personalizar el formado de fecha y la hora insertada vía <kbd></kbd> o la barra de herramientas. Véa la <a href=\"https://day.js.org/docs/en/display/format\" target=\"_blank\" rel=\"noopener noreferrer\">documentación de Day.js</a> para más tokens de formato disponibles.",
"format_string":"Cadena de formato:",
"formatted_time":"Fecha/hora personalizada:"
},
"i18n":{
"title":"Localización",
"language":"Idioma",
"first-day-of-the-week":"Primer día de la semana",
"sunday":"Domingo",
"monday":"Lunes"
"monday":"Lunes",
"first-week-of-the-year":"Primer semana del año",
"first-week-contains-first-day":"Primer semana que contiene al primer día del año",
"first-week-contains-first-thursday":"Primer semana que contiene al primer jueves del año",
"first-week-has-minimum-days":"Primer semana que contiene un mínimo de días",
"min-days-in-first-week":"Días mínimos en la primer semana",
"first-week-info":"Primer semana que contiene al primer jueves del año está basado en el estándar<a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>.",
"first-week-warning":"Cambiar las opciones de primer semana puede causar duplicados con las Notas Semanales existentes y las Notas Semanales existentes no serán actualizadas respectivamente.",
"formatting-locale":"Fecha y formato de número"
},
"backup":{
"automatic_backup":"Copia de seguridad automática",
@ -1308,6 +1468,39 @@
"password_mismatch":"Las nuevas contraseñas no son las mismas.",
"password_changed_success":"La contraseña ha sido cambiada. Trilium se recargará después de presionar Aceptar."
},
"multi_factor_authentication":{
"title":"Autenticación Multi-Factor",
"description":"La autenticación multifactor (MFA) agrega una capa adicional de seguridad a su cuenta. En lugar de solo ingresar una contraseña para iniciar sesión, MFA requiere que proporcione una o más pruebas adicionales para verificar su identidad. De esta manera, incluso si alguien se apodera de su contraseña, aún no puede acceder a su cuenta sin la segunda pieza de información. Es como agregar una cerradura adicional a su puerta, lo que hace que sea mucho más difícil para cualquier otra persona entrar.<br><br>Por favor siga las instrucciones a continuación para habilitar MFA. Si no lo configura correctamente, el inicio de sesión volverá a solo contraseña.",
"mfa_enabled":"Habilitar la autenticación multifactor",
"mfa_method":"Método MFA",
"electron_disabled":"Actualmente la autenticación multifactor no está soportada en la compilación de escritorio.",
"totp_title":"Contraseña de un solo uso basada en el tiempo (TOTP)",
"totp_description":"TOTP (contraseña de un solo uso basada en el tiempo) es una característica de seguridad que genera un código temporal único que cambia cada 30 segundos. Utiliza este código, junto con su contraseña para iniciar sesión en su cuenta, lo que hace que sea mucho más difícil para cualquier otra persona acceder a ella.",
"no_totp_secret_warning":"Para habilitar TOTP, primero debe de generar un secreto TOTP.",
"totp_secret_description_warning":"Después de generar un nuevo secreto TOTP, le será requerido que inicie sesión otra vez con el nuevo secreto TOTP.",
"totp_secret_generated":"Secreto TOTP generado",
"totp_secret_warning":"Por favor guarde el secreto generado en una ubicación segura. No será mostrado de nuevo.",
"totp_secret_regenerate_confirm":"¿Está seguro que desea regenerar el secreto TOTP? Esto va a invalidar el secreto TOTP previo y todos los códigos de recuperación existentes.",
"recovery_keys_title":"Claves de recuperación para un solo inicio de sesión",
"recovery_keys_description":"Las claves de recuperación para un solo inicio de sesión son usadas para iniciar sesión incluso cuando no puede acceder a los códigos de su autentificador.",
"recovery_keys_description_warning":"Las claves de recuperación no son mostrada de nuevo después de dejar esta página, manténgalas en un lugar seguro.<br>Después de que una clave de recuperación es utilizada ya no puede utilizarse de nuevo.",
"recovery_keys_error":"Error al generar códigos de recuperación",
"recovery_keys_no_key_set":"No hay códigos de recuperación establecidos",
"recovery_keys_generate":"Generar códigos de recuperación",
"recovery_keys_regenerate":"Regenerar códigos de recuperación",
"recovery_keys_used":"Usado: {{date}}",
"recovery_keys_unused":"El código de recuperación {{index}} está sin usar",
"oauth_title":"OAuth/OpenID",
"oauth_description":"OpenID es una forma estandarizada de permitirle iniciar sesión en sitios web utilizando una cuenta de otro servicio, como Google, para verificar su identidad. Siga estas <a href = \"https://developers.google.com/identity/openid-connect/openid-connect\">instrucciones</a> para configurar un servicio OpenID a través de Google.",
"oauth_description_warning":"Para habilitar OAuth/OpenID, necesita establecer la URL base de OAuth/OpenID, ID de cliente y secreto de cliente en el archivo config.ini y reiniciar la aplicación. Si desea establecerlas desde variables de ambiente, por favor establezca TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID y TRILIUM_OAUTH_CLIENT_SECRET.",
"description":"Controla el resaltado de sintaxis para bloques de código dentro de las notas de texto, las notas de código no serán afectadas.",
"color-scheme":"Esquema de color"
},
@ -1592,7 +1789,8 @@
"word_wrapping":"Ajuste de palabras",
"theme_none":"Sin resaltado de sintaxis",
"theme_group_light":"Temas claros",
"theme_group_dark":"Temas oscuros"
"theme_group_dark":"Temas oscuros",
"copy_title":"Copiar al portapapeles"
},
"classic_editor_toolbar":{
"title":"Formato"
@ -1713,5 +1911,22 @@
},
"png_export_button":{
"button_title":"Exportar diagrama como PNG"
},
"svg":{
"export_to_png":"El diagrama no pudo ser exportado a PNG."
},
"code_theme":{
"title":"Apariencia",
"word_wrapping":"Ajuste de palabras",
"color-scheme":"Esquema de color"
},
"cpu_arch_warning":{
"title":"Por favor descargue la versión ARM64",
"message_macos":"TriliumNext está siendo ejecutado bajo traducción Rosetta 2, lo que significa que está usando la versión Intel (x64) en Apple Silicon Mac. Esto impactará significativamente en el rendimiento y la vida de la batería.",
"message_windows":"TriliumNext está siendo ejecutado bajo emulación, lo que significa que está usando la version Intel (x64) en Windows en un dispositivo ARM. Esto impactará significativamente en el rendimiento y la vida de la batería.",
"recommendation":"Para la mejor experiencia, por favor descargue la versión nativa ARM64 de TriliumNext desde nuestra página de lanzamientos.",
"download_link":"Descargar versión nativa",
"continue_anyway":"Continuar de todas maneras",
"dont_show_again":"No mostrar esta advertencia otra vez"
chatNoteId: targetNoteId,// For backward compatibility
toolSteps: toolSteps,
// Add sources if we have them
sources: this.sources||[],
// Add metadata
metadata:{
model: this.metadata?.model||undefined,
provider: this.metadata?.provider||undefined,
temperature: this.metadata?.temperature||0.7,
lastUpdated: newDate().toISOString(),
// Add tool executions
toolExecutions: toolExecutions
}
};
console.log(`Saving chat data to specific note ${targetNoteId}, ${toolSteps.length} tool steps, ${this.sources?.length||0} sources, ${toolExecutions.length} tool executions`);
// Save the data to the note attribute via the callback
// This is the ONLY place we should save data, letting the container widget handle persistence
awaitthis.onSaveData(dataToSave);
}catch(error){
console.error('Error saving chat data to specific note:',error);
@ -87,11 +75,6 @@ export async function validateEmbeddingProviders(validationWarning: HTMLElement)
for(constissueofconfigIssues){
message+=`<li>${issue}</li>`;
}
// Show warning about embeddings queue if applicable
if(hasEmbeddingsInQueue){
message+=`<li>Currently processing embeddings for ${queuedNotes} notes. Some AI features may produce incomplete results until processing completes.</li>`;