@oomkapwn/enquire-mcp 3.11.3-rc.1 → 3.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.es.md CHANGED
@@ -38,17 +38,53 @@ Cada sesión de IA empieza desde cero. Vuelves a explicar tu proyecto, tus decis
38
38
 
39
39
  Tu bóveda de Obsidian se convierte en **memoria a largo plazo persistente y consultable** para cualquier agente compatible con MCP. Una sola instalación: tu conocimiento queda al instante accesible desde Claude Code, Claude Desktop, Cursor, el GPT personalizado de ChatGPT, Codex, OpenClaw y cualquier otro cliente MCP. Archivos markdown planos **que son tuyos**, indexados localmente, buscados con todo el stack moderno de recuperación de información (IR), y recordados en cada sesión y con cada modelo.
40
40
 
41
- **Anclado en tus textos, no extraído.** Las herramientas de memoria conversacional (mem0, Zep, Supermemory, Memobase) *extraen* hechos de tus registros de chat hacia un almacén aparte que no puedes leer. enquire-mcp es lo contrario: está **anclado en el conocimiento que ya escribiste** —tus propias notas `.md`, literales, con citas— de modo que la recuperación es auditable, editable en cualquier editor y nunca un resumen con pérdidas de un chat que recuerdas a medias. Y a diferencia de las plataformas de memoria de ***flota*** del lado del servidor —almacenes en la nube multiinquilino que parafrasean el tráfico de los agentes hacia una base de datos compartida— enquire es **monousuario y local-first**: una única bóveda que posees por completo y que puedes leer, editar y borrar tú mismo, con cero llamadas a la nube durante el servicio.
41
+ **Anclado en tus textos, no extraído.** Las herramientas de memoria conversacional (mem0, Zep, Supermemory, Memobase) *extraen* hechos de tus registros de chat hacia un almacén aparte que no puedes leer. enquire-mcp es lo contrario: está **anclado en el conocimiento que ya escribiste** —tus propias notas `.md`, literales, con citas— de modo que la recuperación es auditable, editable en cualquier editor y nunca un resumen con pérdidas de un chat que recuerdas a medias. Y a diferencia de las plataformas de memoria de ***flota*** del lado del servidor —almacenes en la nube multiinquilino que parafrasean el tráfico de los agentes hacia una base de datos compartida— enquire es **monousuario y local-first**: una única bóveda que posees por completo y que puedes leer, editar y borrar tú mismo, con cero llamadas a la nube durante el servicio. (Esa crítica de "extraído" es específica del grupo de la memoria de chat, no de las herramientas de grafo de conocimiento / ETL como cognee, ni de pares de búsqueda personal como Khoj.)
42
42
 
43
43
  **Anclado —— y consciente de la frescura.** Recordar un hecho es solo la mitad del problema; saber si sigue siendo *cierto* es la otra mitad. El [benchmark Memora](https://arxiv.org/abs/2604.20006) (abril de 2026) mostró que los sistemas de memoria fallan sistemáticamente al reutilizar hechos obsoletos: recuerdan una nota de hace un año como si se hubiera escrito hoy. Como la memoria de enquire *son* tus archivos markdown reales, cada resultado de búsqueda incluye `age_days` (días de antigüedad) y una marca `stale` (obsoleto) derivada de la hora real de última modificación de la nota, y puedes activar el ranking ponderado por recencia (`--recency-weight`) para que las notas más recientes salgan primero. Tu conocimiento, consciente de la frescura, no un bloque atemporal.
44
44
 
45
45
  > **Lo que hace diferente a enquire-mcp**:
46
46
  > 1. **Neutral respecto al proveedor.** Tu memoria vive en archivos `.md`. Cambia de Claude a Cursor: tu memoria viaja contigo.
47
47
  > 2. **Recuperación de primer nivel.** BM25 híbrido + embeddings multilingües + reranker cross-encoder BGE fusionados mediante RRF, escalados con HNSW + cuantización int8. El mismo stack de IR que montaría una startup de búsqueda, en código abierto y en un solo binario.
48
- > 3. **Cero llamadas a la nube durante el servicio.** Modelos en caché local (una descarga única desde HuggingFace). El contenido de tu bóveda nunca sale de tu máquina. Seguro para entornos aislados por defecto.
48
+ > 3. **Cero llamadas a la nube durante el servicio.** El modelo de embeddings se ejecuta **en tu máquina** e indexa el markdown que **tú** escribiste: por eso es una descarga local única (~110 MB), no una clave de API en la nube. Estar anclado y ser privado no sale gratis, y no fingimos que sí: el contenido de tu bóveda nunca sale de tu máquina, seguro para entornos aislados por defecto ([garantizado](./SECURITY.md), no aspiracional).
49
49
  > 4. **Recuperación consciente de la frescura.** Cada resultado informa de la antigüedad de la nota; el reordenamiento por recencia opcional permite que un agente prefiera el conocimiento reciente y marque los hechos obsoletos para reverificación: la frontera consciente del olvido, construida sobre el `mtime` que tus archivos ya tienen.
50
50
 
51
- **46 herramientas · 19 prompts MCP · 1439+ pruebas unitarias · 50+ idiomas · v3.11.x estable · ligado a semver · MIT · procedencia de compilación en npm (SLSA L2).**
51
+ **46 herramientas · 19 prompts MCP · 1440+ pruebas unitarias · 50+ idiomas · v3.11.x estable · ligado a semver · MIT · procedencia de compilación en npm (SLSA L2).**
52
+
53
+ ---
54
+
55
+ ## 🏆 Por qué es el mejor
56
+
57
+ **Seis funciones que ningún otro Obsidian-MCP tiene en absoluto** (GraphRAG-light, ejecución autónoma de `.base`, HyDE, cuantización int8, late-chunking, arnés de evaluación incorporado), **más todo el stack moderno de IR** (BM25 + embeddings + reranking con cross-encoder + HNSW), del que los competidores ofrecen como mucho uno o dos elementos. Cara a cara:
58
+
59
+ | Capacidad | enquire-mcp | Smart Connections | Otros Obsidian-MCP |
60
+ |---|:---:|:---:|:---:|
61
+ | Recuperación híbrida (BM25 + TF-IDF + embeddings de ML, fusionados con RRF) | ✅ | ❌ | ❌ |
62
+ | **Reranking con cross-encoder** (BGE, +15.5 NDCG@10 medido) | ✅ | ❌ | ❌ |
63
+ | **Índice vectorial HNSW** (top-K en menos de 10 ms, persistido) | ✅ | ❌ | ❌ |
64
+ | **Cuantización vectorial int8** (embed-db ~4× más pequeña) | ✅ | ❌ | ❌ |
65
+ | **Late-chunking** (embeddings con ventana de contexto) | ✅ | ❌ | ❌ |
66
+ | **PDF mezclados en la búsqueda híbrida** (citas `[page: N]`) | ✅ | ❌ | ❌ |
67
+ | **OCR para PDF escaneados** (Tesseract.js, multilingüe) | ✅ | ❌ | ❌ |
68
+ | **Graph-boost de wikilinks** como señal de recuperación | ✅ | ❌ | ❌ |
69
+ | **Búsqueda semántica multilingüe** (50+ idiomas, en el dispositivo) | ✅ | 💰 de pago | ❌ |
70
+ | **Arnés de evaluación de calidad de recuperación incorporado** (NDCG, Recall, MRR, matriz A/B) | ✅ | ❌ | ❌ |
71
+ | **MCP remoto** sobre HTTP + autenticación bearer + sesiones con estado | ✅ | ❌ | parcial |
72
+ | **Observabilidad por señal** en cada resultado | ✅ | ❌ | ❌ |
73
+ | **Nativo de MCP** (Claude · Cursor · ChatGPT · Codex · OpenClaw · cualquier cliente) | ✅ | ❌ solo Obsidian | varía |
74
+ | **Filtro de privacidad** verificado en cada ruta de búsqueda + escritura | ✅ | n/d | ❌ |
75
+ | **46 herramientas de producción** (34 de lectura siempre activas + 4 opcionales + 7 escrituras restringidas + 1 de retroalimentación) | ✅ | n/d | varía |
76
+ | **GraphRAG-light** (detección de comunidades de wikilinks por modularidad de Louvain) | ✅ **solo aquí** | ❌ | ❌ |
77
+ | **Ejecución autónoma de consultas `.base`** (funciona sin Obsidian abierto) | ✅ **solo aquí** | ❌ | ❌ delega en Obsidian |
78
+ | **Recuperación HyDE** (Gao et al. 2023) + descomposición en subpreguntas | ✅ **solo aquí** | ❌ | ❌ |
79
+ | **1440 pruebas unitarias · 9 puertas de CI requeridas + 5 indicativas por PR** | ✅ | n/d | raro |
80
+ | **Procedencia de compilación firmada** (npm + Sigstore, SLSA Build L2) | ✅ | n/d | ❌ |
81
+ | **Superficie pública ligada a semver** ([STABILITY.md](./STABILITY.md)) | ✅ | n/d | ❌ |
82
+ | Autónomo (sin necesidad de plugin de Obsidian) | ✅ | ❌ requiere Obsidian | varía |
83
+ | Licencia | MIT, gratis | propietaria, de pago | varía |
84
+
85
+ <sub>Comparación basada en las capacidades públicas de cada proyecto a fecha de la versión estable v3.8.x (instantánea inicial v3.7.0 / 2026-05-15; actualizada en v3.8.4). Smart Connections es un plugin de pago de Obsidian (no un servidor MCP). "Otros Obsidian-MCP" se refiere a los servidores Obsidian-MCP públicos de código abierto en GitHub en el momento de redactar esto. Los benchmarks de recuperación de extremo a extremo de enquire-mcp se publican en <a href="./docs/benchmarks.md"><code>docs/benchmarks.md</code></a>: el delta medido de `rerank-bge` es +24.7 MRR / +15.5 NDCG@10 frente al híbrido puro en una ablación de 60 consultas.</sub>
86
+
87
+ > Afirmación estratégica: enquire-mcp es el backend de código abierto para [wikis de LLM al estilo Karpathy](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) sobre tu bóveda de Obsidian existente. Conocimiento que se acumula, trazable hasta sus fuentes.
52
88
 
53
89
  ---
54
90
 
@@ -84,6 +120,72 @@ enquire-mcp doctor --vault <path> # chequeo de salud con código de color ✓
84
120
 
85
121
  ---
86
122
 
123
+ ## 🤖 Configúralo en tu agente de IA — prompts para copiar y pegar
124
+
125
+ Una vez instalado `enquire-mcp`, pega estos prompts en tu agente para que sepa que la bóveda está disponible como memoria.
126
+
127
+ <details>
128
+ <summary><b>Claude Code (terminal)</b> — añade el servidor MCP + primer prompt</summary>
129
+
130
+ ```bash
131
+ # Añade el servidor MCP a tu configuración de Claude Code (una sola vez)
132
+ claude mcp add obsidian -- npx -y @oomkapwn/enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
133
+ ```
134
+
135
+ Luego, en cualquier sesión de Claude Code:
136
+
137
+ > Ahora dispones de herramientas `obsidian_*` que buscan y leen mi bóveda de Obsidian, mi memoria a largo plazo. Antes de responder a preguntas sobre proyectos, decisiones, personas o contexto técnico, llama a `obsidian_search` con los términos relevantes. Cita cada hecho con la nota fuente (y `[page: N]` para los PDF). Si no encuentras una nota relevante, dilo: no adivines.
138
+
139
+ </details>
140
+
141
+ <details>
142
+ <summary><b>Claude Desktop</b> — archivo de configuración + primer prompt</summary>
143
+
144
+ Deposita [`examples/claude-desktop-hybrid.json`](./examples/claude-desktop-hybrid.json) en la configuración MCP de Claude Desktop (edita primero la ruta de la bóveda). Reinicia Claude Desktop y luego:
145
+
146
+ > Tienes mi bóveda de Obsidian conectada como memoria consultable a través de las herramientas `obsidian_*`. Comprueba siempre `obsidian_search` primero cuando te pregunte por cualquier cosa de mis notas: contexto de reuniones, investigación, decisiones, entradas de diario. Cita la ruta de la nota fuente en cada hecho.
147
+
148
+ </details>
149
+
150
+ <details>
151
+ <summary><b>Cursor</b> — configuración MCP stdio + regla de agente</summary>
152
+
153
+ Deposita [`examples/cursor-mcp.json`](./examples/cursor-mcp.json) en `~/.cursor/mcp.json` (edita la ruta de la bóveda). En tu archivo `.cursorrules` o en el chat:
154
+
155
+ > Antes de sugerir código que toque un tema sobre el que pueda tener notas (decisiones de arquitectura, contratos de API, evaluaciones de proveedores), llama primero a `obsidian_search`. Trata mi bóveda de Obsidian como contexto autoritativo.
156
+
157
+ </details>
158
+
159
+ <details>
160
+ <summary><b>GPT personalizado de ChatGPT</b> — MCP remoto sobre HTTP</summary>
161
+
162
+ Sigue [`examples/chatgpt-actions.md`](./examples/chatgpt-actions.md) para exponer `serve-http` a través de un túnel con autenticación bearer. En las instrucciones de tu GPT personalizado:
163
+
164
+ > Tienes acceso de lectura a mi bóveda de Obsidian a través de la familia de herramientas `obsidian_*`. Busca antes de responder a cualquier cosa que pueda estar en mis notas; cita la ruta del archivo fuente en cada afirmación.
165
+
166
+ </details>
167
+
168
+ <details>
169
+ <summary><b>OpenClaw / Codex / cualquier otro cliente MCP</b></summary>
170
+
171
+ El mismo comando `npx -y @oomkapwn/enquire-mcp serve --vault <path>` funciona para cualquier cliente compatible con MCP. Consulta la documentación de configuración MCP del propio cliente para saber dónde colocar la entrada del servidor, y luego usa cualquiera de los prompts anteriores.
172
+
173
+ </details>
174
+
175
+ **Regla de agente reutilizable** (deposítala en cualquier `AGENTS.md` / `CLAUDE.md` / `.cursorrules` para que el agente sepa *cuándo* recurrir a la bóveda):
176
+
177
+ > Cuando mi pregunta toque mis propias notas, decisiones, proyectos, personas o investigación, **busca primero en mi bóveda de Obsidian** mediante las herramientas `obsidian_*` (empieza por `obsidian_search`) y cita la nota fuente en cada hecho. Prefiere enquire para el recall *conceptual / entre idiomas / "qué dije sobre X"*; usa `grep` / `ripgrep` simple para cadenas literales exactas. Si no vuelve nada relevante, dilo: no adivines.
178
+
179
+ ### Ejemplos de consultas que funcionan bien
180
+
181
+ - *"Encuentra cada nota donde hablé de estrategia de precios, resume la evolución."* — la fusión RRF + el reranker manejan "evolución" semánticamente
182
+ - *"¿Cuál fue mi decisión sobre PostgreSQL vs MongoDB? Cita la nota diaria."* — el graph-boost de wikilinks saca a la luz el documento de decisión central
183
+ - *"Анализируй мои заметки о RAG за последние 3 месяца"* — embeddings multilingües + filtro de fecha en el frontmatter
184
+ - *"¿Qué páginas del PDF del artículo de LLaMA-3 hablan del escalado?"* — PDF mezclados en la búsqueda con citas `[page: N]`
185
+ - *"Muéstrame las comunidades temáticas de mi bóveda de investigación: ¿qué temas he estado explorando?"* — `obsidian_get_communities` (GraphRAG-light)
186
+
187
+ ---
188
+
87
189
  ## 🧠 Casos de uso
88
190
 
89
191
  **1 —— Memoria a largo plazo para agentes de IA.** Conecta tu bóveda de Obsidian a cualquier agente compatible con MCP (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw). El agente dispone entonces de una recuperación semántica duradera sobre cada nota de reunión, entrada de diario, registro de investigación y documento de decisión que hayas escrito jamás, a través de sesiones, modelos y proveedores. A diferencia de `Claude Memory` o `ChatGPT Memory`, tu conocimiento no queda encerrado en la nube de un proveedor; vive en markdown plano que posees y puedes migrar libremente.
@@ -107,42 +209,29 @@ No-objetivos honestos: recurre a otra cosa cuando:
107
209
 
108
210
  ---
109
211
 
110
- ## 🏆 Por qué es el mejor
212
+ ## 📖 Referencia de la API
111
213
 
112
- **Seis funciones que ningún otro Obsidian-MCP tiene en absoluto** (GraphRAG-light, ejecución autónoma de `.base`, HyDE, cuantización int8, late-chunking, arnés de evaluación incorporado), **más todo el stack moderno de IR** (BM25 + embeddings + reranking con cross-encoder + HNSW), del que los competidores ofrecen como mucho uno o dos elementos. Cara a cara:
113
-
114
- | Capacidad | enquire-mcp | Smart Connections | Otros Obsidian-MCP |
115
- |---|:---:|:---:|:---:|
116
- | Recuperación híbrida (BM25 + TF-IDF + embeddings, fusionados con RRF) | ✅ | ❌ | ❌ |
117
- | **Reranking con cross-encoder** (BGE, +15.5 NDCG@10 medido) | ✅ | ❌ | ❌ |
118
- | **Índice vectorial HNSW** (top-K en menos de 10 ms, persistido) | ✅ | ❌ | ❌ |
119
- | **Cuantización vectorial int8** (embed-db ~4× más pequeña) | ✅ | ❌ | ❌ |
120
- | **Búsqueda semántica multilingüe** (50+ idiomas, en el dispositivo) | ✅ | 💰 de pago | ❌ |
121
- | **PDF mezclados en la búsqueda híbrida** (citas `[page: N]` + OCR) | ✅ | ❌ | ❌ |
122
- | **Graph-boost de wikilinks** como señal de recuperación | ✅ | ❌ | ❌ |
123
- | **Arnés de evaluación de calidad de recuperación incorporado** (NDCG, Recall, MRR) | ✅ | ❌ | ❌ |
124
- | **MCP remoto** sobre HTTP + autenticación bearer + sesiones con estado | ✅ | ❌ | parcial |
125
- | **Nativo de MCP** (Claude · Cursor · ChatGPT · Codex · OpenClaw · cualquier cliente) | ✅ | ❌ solo Obsidian | varía |
126
- | **Filtro de privacidad** verificado en cada ruta de búsqueda + escritura | ✅ | n/d | ❌ |
127
- | **46 herramientas de producción** (34 de lectura siempre activas + 4 opcionales + 7 escrituras restringidas + 1 de retroalimentación) | ✅ | n/d | varía |
128
- | **GraphRAG-light** (detección de comunidades de wikilinks por modularidad de Louvain) | ✅ **solo aquí** | ❌ | ❌ |
129
- | **Ejecución autónoma de consultas `.base`** (funciona sin Obsidian abierto) | ✅ **solo aquí** | ❌ | ❌ |
130
- | **Recuperación HyDE** + descomposición en subpreguntas | ✅ **solo aquí** | ❌ | ❌ |
131
- | **Procedencia de compilación firmada** (npm + Sigstore, SLSA L2) | ✅ | n/d | ❌ |
132
- | Autónomo (sin necesidad de plugin de Obsidian) | ✅ | ❌ requiere Obsidian | varía |
133
- | Licencia | MIT, gratis | propietaria, de pago | varía |
134
-
135
- <sub>Comparación basada en las capacidades públicas de cada proyecto a fecha de la versión estable v3.8.x. Smart Connections es un plugin de pago de Obsidian (no un servidor MCP). "Otros Obsidian-MCP" se refiere a los servidores Obsidian-MCP públicos de código abierto en GitHub en el momento de redactar esto. Los benchmarks de recuperación de extremo a extremo de enquire-mcp se publican en <a href="./docs/benchmarks.md"><code>docs/benchmarks.md</code></a>: el delta medido de `rerank-bge` es +24.7 MRR / +15.5 NDCG@10 frente al híbrido puro en una ablación de 60 consultas.</sub>
136
-
137
- > Afirmación estratégica: enquire-mcp es el backend de código abierto para [wikis de LLM al estilo Karpathy](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) sobre tu bóveda de Obsidian existente. Conocimiento que se acumula, trazable hasta sus fuentes.
214
+ **[Referencia de la API autogenerada en oomkapwn.github.io/enquire-mcp](https://oomkapwn.github.io/enquire-mcp/)** cada herramienta, prompt y helper exportado con TSDoc completo (`@param` / `@returns` / `@example`). Reconstruida desde el código fuente en cada push a `main` mediante [`publish-docs.yml`](https://github.com/oomkapwn/enquire-mcp/blob/main/.github/workflows/publish-docs.yml) (TypeDoc GitHub Pages). Sin deriva por construcción: el mismo TSDoc que ven los agentes de IA y los IDE es el que se publica.
138
215
 
139
216
  ---
140
217
 
141
218
  ## 🏗️ Cómo funciona la recuperación
142
219
 
143
- `obsidian_search` detecta automáticamente las señales disponibles y degrada con elegancia: BM25 / FTS5 + TF-IDF + embeddings (HNSW) → fusión RRF (k=60) → graph-boost de wikilinks (α × grado de entrada, PageRank personalizado de un paso) → reranker cross-encoder BGE → resultados ordenados con observabilidad `per_signal`. Cada resultado devuelve `per_signal: { bm25, tfidf, embeddings }`, para que veas *por qué* se posicionó.
220
+ ```mermaid
221
+ graph LR
222
+ Q[Query] --> S[obsidian_search]
223
+ S --> BM25[BM25 / FTS5]
224
+ S --> TFIDF[TF-IDF cosine]
225
+ S --> EMB[ML embeddings<br/>HNSW]
226
+ BM25 --> RRF{RRF fusion<br/>k=60}
227
+ TFIDF --> RRF
228
+ EMB --> RRF
229
+ RRF --> GB[Graph boost<br/>α × in-degree]
230
+ GB --> RR[BGE cross-encoder<br/>reranker]
231
+ RR --> R[Ranked hits<br/>per_signal observability]
232
+ ```
144
233
 
145
- Activable por niveles, según lo que necesites:
234
+ `obsidian_search` detecta automáticamente las señales disponibles y degrada con elegancia. El graph-boost de wikilinks reordena el top-K mediante un PageRank personalizado de un paso. El reranking con cross-encoder opcional vuelve a puntuar el top-N para +15.5 NDCG@10 medido. Cada resultado devuelve `per_signal: { bm25, tfidf, embeddings }`, para que veas POR QUÉ se posicionó.
146
235
 
147
236
  | Nivel | Configuración | Lo que obtienes |
148
237
  |---|---|---|
@@ -158,7 +247,20 @@ Activable por niveles, según lo que necesites:
158
247
 
159
248
  ## 🛠️ Las 46 herramientas
160
249
 
161
- 46 herramientas en total: 34 de lectura siempre activas (incl. el paraguas `obsidian_search`) + 4 opcionales + 7 escrituras restringidas + 1 de retroalimentación de bucle cerrado. Referencia completa en **[docs/api.md](./docs/api.md)**, que abarca: búsqueda y recuperación, wikilinks y grafo, frontmatter y Dataview, Canvas, Obsidian Bases, PDF + OCR, detección de comunidades, herramientas de escritura (requieren `--enable-write`), etc.
250
+ 46 herramientas en total: 34 de lectura siempre activas (incl. el paraguas `obsidian_search`) + 4 opcionales + 7 escrituras restringidas + 1 de retroalimentación de bucle cerrado. Referencia completa: **[docs/api.md](./docs/api.md)**.
251
+
252
+ | Categoría | Herramientas |
253
+ |---|---|
254
+ | **Búsqueda y recuperación** | `obsidian_search` (paraguas, fusionado con RRF) · `obsidian_hyde_search` (aumentado con HyDE, v3.1.0) · `obsidian_search_text` · `obsidian_full_text_search` · `obsidian_semantic_search` · `obsidian_embeddings_search` · `obsidian_find_similar` |
255
+ | **Wikilinks y grafo** | `obsidian_resolve_wikilink` · `obsidian_get_backlinks` · `obsidian_get_outbound_links` · `obsidian_get_note_neighbors` · `obsidian_get_unresolved_wikilinks` · `obsidian_find_path` · `obsidian_get_communities` (v3.4.0, GraphRAG-light) |
256
+ | **Frontmatter y Dataview** | `obsidian_frontmatter_get` · `obsidian_frontmatter_search` · `obsidian_dataview_query` · `obsidian_list_tags` |
257
+ | **Leer y navegar** | `obsidian_read_note` · `obsidian_list_notes` · `obsidian_get_recent_edits` · `obsidian_stale_notes` · `obsidian_open_questions` · `obsidian_context_pack` · `obsidian_chat_thread_read` · `obsidian_open_in_ui` · `obsidian_stats` |
258
+ | **PDF, Canvas y Bases** | `obsidian_read_pdf` · `obsidian_list_pdfs` · `obsidian_ocr_pdf` · `obsidian_read_canvas` · `obsidian_list_canvases` · `obsidian_list_bases` (v3.2.0) · `obsidian_read_base` (v3.2.0) · `obsidian_query_base` (v3.2.0) |
259
+ | **Escrituras** (restringidas por `--enable-write`) | `obsidian_create_note` · `obsidian_append_to_note` · `obsidian_rename_note` · `obsidian_replace_in_notes` · `obsidian_archive_note` · `obsidian_frontmatter_set` · `obsidian_chat_thread_append` |
260
+ | **Diagnóstico / lint** | `obsidian_lint_wiki` · `obsidian_paper_audit` · `obsidian_validate_note_proposal` |
261
+ | **Retroalimentación** (opcional vía `--feedback-weight`) | `obsidian_mark_useful` (bucle cerrado: registra qué notas recuperadas ayudaron; las potencia en búsquedas futuras) |
262
+
263
+ Además 3 recursos MCP (`obsidian://vault/info`, `obsidian://note/{path}`, `obsidian://chunk/{n}/{path}`) y 19 **prompts MCP** (`summarize_recent_edits` · `review_tag` · `find_orphans` · `weekly_review` · `extract_todos` · `process_inbox` · `consolidate_tags` · `find_duplicates` · `lint_wiki` · `monthly_review` · `search_with_query_expansion` · `vault_synth` · `vault_wiki_compile` · `vault_lint_extended` · `vault_capture` · `vault_persona_search` · `vault_automation_setup` · `vault_research` · `vault_synthesis_page`) para los flujos de trabajo habituales sobre la bóveda.
162
264
 
163
265
  ---
164
266
 
@@ -171,7 +273,12 @@ Activable por niveles, según lo que necesites:
171
273
  | **Seguridad de rutas** | Comprobación de realpath en cada lectura+escritura; se rechazan los symlinks que salen de la bóveda |
172
274
  | **Filtro de privacidad** | Verificado en las rutas de recurso de FTS5 + embed-db + chunk; fail-closed ante listas de permitidos/denegados vacías |
173
275
  | **Transporte HTTP** | Autenticación bearer (SHA-256 de tiempo constante + `timingSafeEqual`), límite de tasa por token, CORS estricto |
174
- | **Publicación de versiones** | npm + GitHub release por cada tag · semver · **procedencia de compilación firmada** (npm + Sigstore, SLSA L2) |
276
+ | **Frontmatter** | `js-yaml@5` `load` (esquema núcleo YAML 1.2, seguro por defecto) sin ejecución de código |
277
+ | **Archivos de caché + índice** | chmod 0600, directorio padre 0700 |
278
+ | **CI** | **9 puertas** de protección de rama **requeridas**: (1) `lint`, (2) `test` en Node 22, (3) `test` en Node 24, (4) `smoke`, (5) `audit`, (6) `coverage`, (7) `version-consistency`, (8) `docs`, (9) `oia`. **5 indicativas**: `test-macos` + `docker` (build del Dockerfile + smoke de introspección `tools/list`) vía `.github/workflows/ci.yml`; CodeQL ×2 + acciones Analyze vía el [default-setup de GitHub](https://docs.github.com/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-default-setup-for-code-scanning) (no archivos de workflow). El workflow de release reverifica que las 9 puertas requeridas pasaron sobre el SHA etiquetado antes de la publicación en npm. _v3.7.10 — `docs` (puerta de generación de TypeDoc) añadida al conjunto requerido. v3.7.13 — piso de `engines.node` elevado a `>=22.13.0` para coincidir con la matriz de CI. v3.8.0-rc.6 — `oia` (Outside-In Audit) promovida desde el conjunto indicativo._ |
279
+ | **Cobertura** | Líneas ≥86 % · sentencias ≥82 % · funciones ≥75 % · ramas ≥74 % (con guarda) |
280
+ | **Publicación de versiones** | npm + GitHub release por cada tag · semver · **procedencia de compilación firmada** (npm + Sigstore, SLSA Build L2; generador L3 en la hoja de ruta) |
281
+ | **Estabilidad** | v3.0+ ligada a semver — cada flag de CLI, nombre de herramienta, recurso MCP, prompt y símbolo exportado es un contrato |
175
282
 
176
283
  Postura completa: **[SECURITY.md](./SECURITY.md)** · Superficie de estabilidad: **[STABILITY.md](./STABILITY.md)** · Vulnerabilidades: `oomkapwn@gmail.com`.
177
284
 
package/README.fr.md CHANGED
@@ -15,7 +15,7 @@
15
15
  [![CI](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml)
16
16
  [![npm](https://img.shields.io/npm/v/@oomkapwn/enquire-mcp.svg?label=npm&color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
17
17
  [![downloads](https://img.shields.io/npm/dm/@oomkapwn/enquire-mcp.svg?color=cb3837)](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
18
- [![tests](https://img.shields.io/badge/tests-1439%20passing-brightgreen.svg)](#️-confiance)
18
+ [![tests](https://img.shields.io/badge/tests-1441%20passing-brightgreen.svg)](#️-confiance)
19
19
  [![stable](https://img.shields.io/badge/v3.11.x-stable-brightgreen.svg)](./STABILITY.md)
20
20
  [![build provenance](https://img.shields.io/badge/build_provenance-SLSA_L2-blue.svg)](https://slsa.dev/spec/v1.0/levels#build-l2)
21
21
  [![MCP](https://img.shields.io/badge/MCP-1.29-8A2BE2.svg)](https://modelcontextprotocol.io/)
@@ -53,7 +53,7 @@ Votre coffre Obsidian devient une **mémoire à long terme persistante et interr
53
53
  > 3. **Zéro appel au cloud pendant le service.** Modèles mis en cache localement (téléchargement unique depuis HuggingFace). Le contenu de votre coffre ne quitte jamais votre machine. Sûr en environnement isolé par défaut.
54
54
  > 4. **Rappel conscient de la fraîcheur.** Chaque résultat indique l'âge de la note ; le reclassement par récence optionnel permet à un agent de préférer le savoir frais et de signaler les faits périmés à revérifier — la frontière consciente de l'oubli, bâtie sur le `mtime` que vos fichiers possèdent déjà.
55
55
 
56
- **46 outils · 19 prompts MCP · 1439+ tests unitaires · 50+ langues · v3.11.x stable · lié au semver · MIT · provenance de build npm (SLSA L2).**
56
+ **46 outils · 19 prompts MCP · 1441+ tests unitaires · 50+ langues · v3.11.x stable · lié au semver · MIT · provenance de build npm (SLSA L2).**
57
57
 
58
58
  ---
59
59
 
@@ -81,7 +81,7 @@ Votre coffre Obsidian devient une **mémoire à long terme persistante et interr
81
81
  | **GraphRAG-light** (détection de communautés de wikilinks par modularité de Louvain) | ✅ **uniquement ici** | ❌ | ❌ |
82
82
  | **Exécution autonome de requêtes `.base`** (fonctionne sans Obsidian ouvert) | ✅ **uniquement ici** | ❌ | ❌ délègue à Obsidian |
83
83
  | **Récupération HyDE** (Gao et al. 2023) + décomposition en sous-questions | ✅ **uniquement ici** | ❌ | ❌ |
84
- | **1439 tests unitaires · 9 portes CI requises + 5 indicatives par PR** | ✅ | s.o. | rare |
84
+ | **1441 tests unitaires · 9 portes CI requises + 5 indicatives par PR** | ✅ | s.o. | rare |
85
85
  | **Provenance de build signée** (npm + Sigstore, SLSA Build L2) | ✅ | s.o. | ❌ |
86
86
  | **Surface publique liée au semver** ([STABILITY.md](./STABILITY.md)) | ✅ | s.o. | ❌ |
87
87
  | Autonome (aucun plugin Obsidian requis) | ✅ | ❌ requiert Obsidian | variable |
@@ -309,7 +309,7 @@ Posture complète : **[SECURITY.md](./SECURITY.md)** · Surface de stabilité :
309
309
 
310
310
  **v3.0.0 — canal stable.** La feuille de route de récupération v2.x est complète et la surface publique est désormais [liée au semver](./STABILITY.md). Florilège :
311
311
 
312
- `v2.0` récupération hybride (BM25+TF-IDF+embeddings via RRF) · `v2.6` MCP distant · `v2.7-2.8` PDF fondus · `v2.9` reranker BGE · `v2.10` OCR · `v2.11` doctor + setup · `v2.12` harnais d'évaluation · `v2.13` HNSW · `v2.14` sessions à état · `v2.15` late-chunking · `v2.16` persistance HNSW · `v2.17` quantification int8 · `v3.8.0` stable · `v3.8.7` durcissement du transport HTTP · **`v3.9.0` stable** : embed-sync du watcher pour les PDF OCRisés, mise à jour HNSW en mémoire en temps réel lors des modifications de fichiers, refill HNSW adaptatif R-10 (clôt la sous-restitution avec >66 % d'exclusion). · **`v3.10` (`@rc`)** : fraîcheur consciente de l'oubli — indicateur `age_days` + `stale` + reclassement optionnel `--recency-weight` + `obsidian_search` conscient du frontmatter.
312
+ `v2.0` récupération hybride (BM25+TF-IDF+embeddings via RRF) · `v2.6` MCP distant · `v2.7-2.8` PDF fondus · `v2.9` reranker BGE · `v2.10` OCR · `v2.11` doctor + setup · `v2.12` harnais d'évaluation · `v2.13` HNSW · `v2.14` sessions à état · `v2.15` late-chunking · `v2.16` persistance HNSW · `v2.17` quantification int8 · `v3.8.0` stable · `v3.8.7` durcissement du transport HTTP · **`v3.9.0` stable** : embed-sync du watcher pour les PDF OCRisés, mise à jour HNSW en mémoire en temps réel lors des modifications de fichiers, refill HNSW adaptatif R-10 (clôt la sous-restitution avec >66 % d'exclusion). · **`v3.10` stable** : fraîcheur consciente de l'oubli — indicateur `age_days` + `stale` + reclassement optionnel `--recency-weight` + `obsidian_search` conscient du frontmatter.
313
313
 
314
314
  Canal : `npm install @oomkapwn/enquire-mcp` → dernière version stable (`@latest` = v3.11.x). Préversion : `npm install @oomkapwn/enquire-mcp@rc` (le dernier candidat à la version — voir [CHANGELOG.md](./CHANGELOG.md)). Changelog complet : **[CHANGELOG.md](./CHANGELOG.md)** · Plan à venir : **[ROADMAP.md](https://github.com/oomkapwn/enquire-mcp/blob/main/ROADMAP.md)**.
315
315
 
@@ -320,7 +320,7 @@ Canal : `npm install @oomkapwn/enquire-mcp` → dernière version stable (`@late
320
320
  ```bash
321
321
  git clone https://github.com/oomkapwn/enquire-mcp.git
322
322
  cd enquire-mcp && npm install
323
- npm test # suite complète (1439 tests, ~12 s)
323
+ npm test # suite complète (1441 tests, ~12 s)
324
324
  npm run lint # zéro avertissement
325
325
  npm run build # tsc → dist/
326
326
  ```