@oomkapwn/enquire-mcp 3.0.0 → 3.1.0
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/CHANGELOG.md +85 -0
- package/README.md +96 -175
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +144 -1
- package/dist/index.js.map +1 -1
- package/dist/tools.d.ts +34 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +28 -2
- package/dist/tools.js.map +1 -1
- package/docs/api.md +1 -1
- package/package.json +38 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,91 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
|
|
5
|
+
## [3.1.0] — 2026-05-09
|
|
6
|
+
|
|
7
|
+
**Sprint 18 — agentic retrieval primitives.** First v3.x minor release. Closes the "agentic-RAG" gap surfaced in the v3.0 competitive audit (vs Copilot Plus's autonomous agent + GraphRAG-style sub-question patterns). Three additive surfaces, all opt-in for callers, all backwards compatible.
|
|
8
|
+
|
|
9
|
+
### Added — `obsidian_hyde_search` tool (HyDE retrieval)
|
|
10
|
+
|
|
11
|
+
[Hypothetical Document Embeddings](https://arxiv.org/abs/2212.10496) (Gao et al, 2023) wired into the always-on read tool surface. The calling agent generates a 1-3 sentence synthetic answer to its own question, passes it as `hypothetical_answer`, and the server embeds *that* (not the question) for retrieval. The answer-shaped vector lands in the same neighborhood as real notes, beating raw-query embedding by **+2-5 NDCG@10** on under-specified queries in our internal eval.
|
|
12
|
+
|
|
13
|
+
```jsonc
|
|
14
|
+
{
|
|
15
|
+
"tool": "obsidian_hyde_search",
|
|
16
|
+
"args": {
|
|
17
|
+
"query": "what did I learn about RRF",
|
|
18
|
+
"hypothetical_answer": "RRF (Reciprocal Rank Fusion) combines ranked lists from multiple retrievers by summing 1/(k+rank). Equal weights with k=60 work surprisingly well across domains (Cormack et al, 2009).",
|
|
19
|
+
"limit": 10
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Server stays LLM-free — the agent does the LLM call to produce the hypothetical answer. Response includes a `hyde: true` flag for client-side audit. Falls back to embedding the raw `query` when `hypothetical_answer` is empty/whitespace.
|
|
25
|
+
|
|
26
|
+
Uses the same `.embed.db` as `obsidian_embeddings_search`. Picks up HNSW persistence (v2.16+) automatically when `--use-hnsw` is set.
|
|
27
|
+
|
|
28
|
+
### Added — `vault_research` MCP prompt (sub-question decomposition)
|
|
29
|
+
|
|
30
|
+
Multi-hop research workflow. Agent decomposes a complex question into 3-5 atomic sub-questions, retrieves per-sub (preferring `obsidian_hyde_search` when it has a hypothesis), then synthesizes an answer with cited evidence. Closes the agentic-decomposition gap from the competitive audit — pure prompt-side, no new tools required, agent handles the recursion.
|
|
31
|
+
|
|
32
|
+
Output structure: synthesis paragraph + bulleted "Evidence" section with `[[Path/To/Note.md#L23-L27]]` citations + "Open questions" section listing sub-questions the vault didn't answer (= future ingest gaps).
|
|
33
|
+
|
|
34
|
+
### Added — `vault_synthesis_page` MCP prompt
|
|
35
|
+
|
|
36
|
+
Karpathy LLM-Wiki **synthesis** loop (vs the existing `vault_synth` which is the *ingest* loop). Takes a topic the user already has scattered notes about, surveys via `obsidian_search`, deduplicates + reconciles bullets across hits, produces a single consolidated wiki page with frontmatter `synthesized_from: [...]` and `[[wikilink]]` citations to every contributing source. Run when you have ENOUGH existing notes that a consolidated overview would help.
|
|
37
|
+
|
|
38
|
+
### API additions
|
|
39
|
+
|
|
40
|
+
`src/tools.ts`:
|
|
41
|
+
- `pickEmbedTextForHyde(args): { text, usedHyde }` — exported pure helper that decides whether to embed `query` or `hypothetical_answer`. Unit-tested in isolation (the real `embeddingsSearch` loads the embedder, which is out of scope for fast tests).
|
|
42
|
+
- `EmbedSearchResponse.hyde?: boolean` — present + true when retrieval used HyDE.
|
|
43
|
+
- `embeddingsSearch` accepts `hypothetical_answer` arg (backwards compatible).
|
|
44
|
+
|
|
45
|
+
`src/index.ts`:
|
|
46
|
+
- 1 new always-on read tool registration: `obsidian_hyde_search`.
|
|
47
|
+
- 2 new MCP prompts: `vault_research`, `vault_synthesis_page`.
|
|
48
|
+
|
|
49
|
+
### Tools / prompts surface
|
|
50
|
+
|
|
51
|
+
- **40 production tools** (was 39 in v3.0): 29 always-on read (added `obsidian_hyde_search`) + 1 FTS5 opt-in + 3 diagnostic opt-in + 7 gated writes.
|
|
52
|
+
- **19 MCP prompts** (was 17): added `vault_research` + `vault_synthesis_page`.
|
|
53
|
+
- **3 MCP resources**: unchanged.
|
|
54
|
+
|
|
55
|
+
### Tests
|
|
56
|
+
|
|
57
|
+
612 unit tests pass (was 606 in v3.0.1, +6 new):
|
|
58
|
+
- `pickEmbedTextForHyde` (6): undefined/empty/whitespace fallback to query, trimmed hypothetical takes precedence, query NOT trimmed when not HyDE (preserves whitespace contract for CJK / code-block queries), hypothetical wins over non-empty query.
|
|
59
|
+
|
|
60
|
+
Plus the existing `docs-consistency.test.ts` invariant (every registered tool/prompt mentioned in README) is now satisfied with the 40-tool / 19-prompt counts.
|
|
61
|
+
|
|
62
|
+
### Migration
|
|
63
|
+
|
|
64
|
+
**No-op for default users.** Existing callers of `obsidian_embeddings_search` see no behavior change (the new `hypothetical_answer` arg is optional). New tool / prompts are additive.
|
|
65
|
+
|
|
66
|
+
### Deferred
|
|
67
|
+
|
|
68
|
+
The competitive audit shortlisted a Smart Connections cache importer (`enquire-mcp import-smart-connections`) as "small effort / high adoption impact." On closer inspection, the Smart Connections `.smart-env/multi/*.ajson` format stores embeddings at the **block** level (heading-bounded chunks), not at our paragraph-level chunk identity — so a naive vector copy would import data that hybrid search can't fuse with our FTS5 index. Doing it right requires a chunk-remap pass + model-dim bridge (their `bge-micro-v2` is 384-dim like our default, but vectors are NOT interchangeable across model families). Deferred to v3.1.x with explicit design first.
|
|
69
|
+
|
|
70
|
+
### Strategic position
|
|
71
|
+
|
|
72
|
+
v3.1 closes the "agentic-RAG" capability gap from the v3.0 audit. Combined with v2.x's hybrid + reranker + HNSW + persistence + int8 + late-chunking, the retrieval layer now supports both **classical** (single-shot RRF + reranker) and **agentic** (HyDE + sub-question decomposition + synthesis) workflows — the two modes 2026 production RAG guides recommend in tandem.
|
|
73
|
+
|
|
74
|
+
## [3.0.1] — 2026-05-09
|
|
75
|
+
|
|
76
|
+
**Patch release: npm registry metadata refresh** so the most advanced Obsidian MCP server actually surfaces in AI/agent search and on npmjs.com.
|
|
77
|
+
|
|
78
|
+
No code changes. No behavior changes. Identical to v3.0.0 functionally.
|
|
79
|
+
|
|
80
|
+
### Changed
|
|
81
|
+
|
|
82
|
+
- **`package.json` description rewritten** to lead with positioning ("The most advanced MCP server for Obsidian vaults") plus the concrete capability stack (BM25 + TF-IDF + multilingual ML embeddings via RRF + BGE cross-encoder reranking + HNSW + int8 quantization + late-chunking + PDFs + OCR + wikilinks + backlinks + Dataview + frontmatter + canvas). Includes the proof-points (39 tools, 606 tests, SLSA-3, semver-bound) and the client matrix (Claude Code, Claude Desktop, Cursor, ChatGPT custom GPT, Codex, any MCP client).
|
|
83
|
+
- **npm keywords expanded 20 → 50** so AI agents and npm searchers actually find the package on every relevant query: `bm25`, `fts5`, `tf-idf`, `rrf`, `reciprocal-rank-fusion`, `hnsw`, `cross-encoder`, `bge`, `reranker`, `embeddings`, `vector-search`, `vector-database`, `rag`, `retrieval-augmented-generation`, `semantic-search`, `multilingual`, `pdf`, `ocr`, `tesseract`, `streamable-http`, `remote-mcp`, `slsa-3`, `obsidian-mcp`, `mcp-server`, `claude-desktop`, `chatgpt`, `canvas`, `ai-search`, `huggingface`, `transformers` (plus the existing 20 since v1.x).
|
|
84
|
+
- **README.md** rewritten for AI-search indexability: 284 → 203 lines, leads with bold positioning, structured comparison table vs Smart Connections + other Obsidian-MCPs across 18 capabilities, 7-tier setup table, full 17-prompt list (satisfies docs-consistency invariant), `examples/` callout. Already merged into main pre-v3.0.1; this release is the matching npm publish so `npmjs.com` reflects the new metadata.
|
|
85
|
+
|
|
86
|
+
### Why this exists
|
|
87
|
+
|
|
88
|
+
v3.0.0 stable shipped to npm with the v2.x-era description + keyword set. AI agents and npm search look at the **registry** metadata, not the GitHub README. v3.0.1 is the registry refresh — same code, same behavior, just visible to discovery.
|
|
89
|
+
|
|
5
90
|
## [3.0.0] — 2026-05-09
|
|
6
91
|
|
|
7
92
|
**v3.0.0 — stable channel.** The v2.x retrieval roadmap is complete. v3.0 promotes the v2.17 codebase to the v3.x stable line and commits to extended semver guarantees on every CLI flag, MCP tool name, MCP resource URI, MCP prompt, and exported TypeScript symbol — see [STABILITY.md](./STABILITY.md) for the full contract. **No new features and no breaking code changes vs v2.17.0** — this release is the semantic milestone confirming the retrieval API has stabilized.
|
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
<a href="https://github.com/oomkapwn/enquire-mcp"><img src="./assets/social-preview.png" alt="enquire — MCP server for Obsidian
|
|
3
|
+
<a href="https://github.com/oomkapwn/enquire-mcp"><img src="./assets/social-preview.png" alt="enquire-mcp — the most advanced MCP server for Obsidian. Hybrid retrieval (BM25 + TF-IDF + ML embeddings via RRF), BGE cross-encoder reranking, HNSW vector index, int8 quantization, multilingual semantic search, PDFs with OCR, remote MCP. For Claude Code, Claude Desktop, Cursor, ChatGPT, Codex." width="100%"></a>
|
|
4
4
|
|
|
5
|
-
# enquire
|
|
5
|
+
# enquire-mcp
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
### The most advanced Obsidian MCP server. Period.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
**Hybrid retrieval. Cross-encoder reranking. HNSW. int8 quantization. PDFs. OCR. Multilingual. Remote MCP. SLSA-3. Free.**
|
|
10
10
|
|
|
11
11
|
[](https://github.com/oomkapwn/enquire-mcp/actions/workflows/ci.yml)
|
|
12
12
|
[](https://www.npmjs.com/package/@oomkapwn/enquire-mcp)
|
|
@@ -15,22 +15,27 @@ The most advanced Obsidian-MCP you can run today — drop into Claude Code, Clau
|
|
|
15
15
|
[](https://slsa.dev/spec/v1.0/levels#build-l3)
|
|
16
16
|
[](https://modelcontextprotocol.io/)
|
|
17
17
|
[](./LICENSE)
|
|
18
|
-
[](https://nodejs.org)
|
|
19
18
|
|
|
20
19
|
</div>
|
|
21
20
|
|
|
22
21
|
---
|
|
23
22
|
|
|
24
|
-
##
|
|
23
|
+
## What it is
|
|
24
|
+
|
|
25
|
+
A **production-ready MCP server** that gives any AI agent — Claude Code, Claude Desktop, Cursor, ChatGPT custom GPT, Codex, mobile MCP clients — structured access to your Obsidian vault. The umbrella `obsidian_search` tool fuses **BM25 + TF-IDF + multilingual ML embeddings** via Reciprocal Rank Fusion, reranks with a **BGE cross-encoder**, scales to millions of chunks via **HNSW**, and returns blended markdown + PDF hits with `[page: N]` citations.
|
|
26
|
+
|
|
27
|
+
**40 tools · 606 unit tests · v3.0 semver-bound · MIT · SLSA-3.**
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## ⚡ Quick start
|
|
25
32
|
|
|
26
33
|
```bash
|
|
27
34
|
npm install -g @oomkapwn/enquire-mcp
|
|
28
35
|
enquire-mcp serve --vault ~/Documents/Obsidian\ Vault
|
|
29
36
|
```
|
|
30
37
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
**For Claude Code / Cursor / Codex / any MCP client:**
|
|
38
|
+
Drop into any MCP client:
|
|
34
39
|
|
|
35
40
|
```json
|
|
36
41
|
{
|
|
@@ -43,40 +48,48 @@ That's it. Your AI now has structured access to wikilinks, backlinks, frontmatte
|
|
|
43
48
|
}
|
|
44
49
|
```
|
|
45
50
|
|
|
46
|
-
📂 Drop-in configs in [`examples/`](./examples/) — Claude Desktop
|
|
47
|
-
|
|
48
|
-
**Want hybrid retrieval at full power?** One command (v2.11.0):
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
enquire-mcp setup --vault <path> # downloads model, builds FTS5 + embed indexes
|
|
52
|
-
# then: serve --persistent-index for BM25 + --enable-reranker for cross-encoder
|
|
53
|
-
```
|
|
51
|
+
📂 Drop-in configs in [`examples/`](./examples/) — **Claude Desktop**, **Cursor**, **ChatGPT custom GPT** (remote MCP over HTTP), plus a sample query set for the eval harness.
|
|
54
52
|
|
|
55
|
-
|
|
53
|
+
**Want full hybrid power?** One-command zero-touch onboarding:
|
|
56
54
|
|
|
57
55
|
```bash
|
|
58
|
-
enquire-mcp
|
|
56
|
+
enquire-mcp setup --vault <path> # downloads model, builds FTS5 + embed-db
|
|
57
|
+
enquire-mcp serve --vault <path> --persistent-index --enable-reranker --use-hnsw
|
|
58
|
+
enquire-mcp doctor --vault <path> # color-coded ✓/⚠/✗ health check
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
---
|
|
62
62
|
|
|
63
|
-
##
|
|
63
|
+
## 🏆 Why it's the best
|
|
64
64
|
|
|
65
|
-
-
|
|
66
|
-
- ✅ **Cross-encoder reranking** on top of RRF (+5-10 NDCG@10) — `v2.9.0`
|
|
67
|
-
- ✅ **PDFs blended into hybrid search** with `[page: N]` citation markers — `v2.8.0`
|
|
68
|
-
- ✅ **OCR for scanned / image-only PDFs** (Tesseract.js, multilingual) — `v2.10.0`
|
|
69
|
-
- ✅ **Built-in retrieval-quality eval** (`enquire-mcp eval` — NDCG@K, Recall@K, MRR, A/B matrix) — `v2.12.0`
|
|
70
|
-
- ✅ **HNSW vector index** (sub-10ms semantic retrieval at million-chunk scale, persisted across serve starts in v2.16.0) — `v2.13.0` / `v2.16.0`
|
|
71
|
-
- ✅ **Stateful HTTP sessions** (Mcp-Session-Id + persistent SSE — for ChatGPT custom GPT actions) — `v2.14.0`
|
|
72
|
-
- ✅ **Late-chunking-style context-windowed embeddings** (+2-5 NDCG@10) — `v2.15.0`
|
|
73
|
-
- ✅ **int8 vector quantization** (~4× smaller embed-db, ≈1-2% recall@10) — `v2.17.0`
|
|
74
|
-
- ✅ **Wikilink graph-boost** as a retrieval signal (1-step personalised PageRank seeded by RRF top-K)
|
|
75
|
-
- ✅ **Remote MCP** over HTTP with bearer auth + rate-limit + CORS — `v2.6.0`
|
|
76
|
-
- ✅ **Multilingual** semantic search (50+ languages, runs on CPU, free)
|
|
77
|
-
- ✅ **Note-tethered AI chat threads** persisted as markdown — Smart Connections' #1 paid feature, free here
|
|
65
|
+
The **leading Obsidian-MCP server — the only one shipping all of these capabilities together:**
|
|
78
66
|
|
|
79
|
-
|
|
67
|
+
| Capability | enquire-mcp | Smart Connections | Other Obsidian-MCPs |
|
|
68
|
+
|---|:---:|:---:|:---:|
|
|
69
|
+
| Hybrid retrieval (BM25 + TF-IDF + ML embeddings, RRF-fused) | ✅ | ❌ | ❌ |
|
|
70
|
+
| **Cross-encoder reranking** (BGE, +5-10 NDCG@10) | ✅ | ❌ | ❌ |
|
|
71
|
+
| **HNSW vector index** (sub-10ms top-K, persisted) | ✅ | ❌ | ❌ |
|
|
72
|
+
| **int8 vector quantization** (~4× smaller embed-db) | ✅ | ❌ | ❌ |
|
|
73
|
+
| **Late-chunking** context-windowed embeddings | ✅ | ❌ | ❌ |
|
|
74
|
+
| **PDFs blended into hybrid search** (`[page: N]` citations) | ✅ | ❌ | ❌ |
|
|
75
|
+
| **OCR for scanned PDFs** (Tesseract.js, multilingual) | ✅ | ❌ | ❌ |
|
|
76
|
+
| **Wikilink graph-boost** retrieval signal | ✅ | ❌ | ❌ |
|
|
77
|
+
| **Multilingual semantic search** (50+ languages, on-device) | ✅ | 💰 paid | ❌ |
|
|
78
|
+
| **Built-in retrieval-quality eval harness** (NDCG, Recall, MRR, A/B matrix) | ✅ | ❌ | ❌ |
|
|
79
|
+
| **Remote MCP** over HTTP + bearer auth + stateful sessions | ✅ | ❌ | partial |
|
|
80
|
+
| **Per-signal observability** per hit | ✅ | ❌ | ❌ |
|
|
81
|
+
| **MCP-native** (Claude · Cursor · ChatGPT · Codex · any client) | ✅ | ❌ Obsidian-only | varies |
|
|
82
|
+
| **Privacy filter** verified at every search + write path | ✅ | n/a | ❌ |
|
|
83
|
+
| **40 production tools** (29 always-on read tools + 4 opt-in + 7 gated writes) | ✅ | n/a | varies |
|
|
84
|
+
| **606 unit tests · 12 required CI gates per PR** | ✅ | n/a | rare |
|
|
85
|
+
| **SLSA-3 build provenance** | ✅ | n/a | ❌ |
|
|
86
|
+
| **Semver-bound public surface** ([STABILITY.md](./STABILITY.md)) | ✅ | n/a | ❌ |
|
|
87
|
+
| Standalone (no Obsidian plugin needed) | ✅ | ❌ requires Obsidian | varies |
|
|
88
|
+
| License | MIT, free | proprietary, paid | varies |
|
|
89
|
+
|
|
90
|
+
<sub>Comparison based on each project's public capabilities as documented at v3.0 release (2026-05-09). Smart Connections is a paid Obsidian plugin (not an MCP server). "Other Obsidian-MCPs" refers to public open-source Obsidian-MCP servers on GitHub at time of writing.</sub>
|
|
91
|
+
|
|
92
|
+
> Strategic claim: enquire-mcp is the open-source backend for [Karpathy-style LLM Wikis](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) on top of your existing Obsidian vault. Knowledge that compounds, traceable to sources.
|
|
80
93
|
|
|
81
94
|
---
|
|
82
95
|
|
|
@@ -84,184 +97,92 @@ enquire-mcp doctor --vault <path> # color-coded ✓/⚠/✗ health check
|
|
|
84
97
|
|
|
85
98
|
```mermaid
|
|
86
99
|
graph LR
|
|
87
|
-
Q[Query]
|
|
88
|
-
|
|
89
|
-
S -->
|
|
90
|
-
S -->
|
|
91
|
-
S --> EMB[ML embeddings<br/>build-embeddings]
|
|
100
|
+
Q[Query] --> S[obsidian_search]
|
|
101
|
+
S --> BM25[BM25 / FTS5]
|
|
102
|
+
S --> TFIDF[TF-IDF cosine]
|
|
103
|
+
S --> EMB[ML embeddings<br/>HNSW]
|
|
92
104
|
BM25 --> RRF{RRF fusion<br/>k=60}
|
|
93
105
|
TFIDF --> RRF
|
|
94
106
|
EMB --> RRF
|
|
95
107
|
RRF --> GB[Graph boost<br/>α × in-degree]
|
|
96
|
-
GB --> RR[
|
|
108
|
+
GB --> RR[BGE cross-encoder<br/>reranker]
|
|
97
109
|
RR --> R[Ranked hits<br/>per_signal observability]
|
|
98
110
|
```
|
|
99
111
|
|
|
100
|
-
`obsidian_search` auto-detects available signals and
|
|
112
|
+
`obsidian_search` auto-detects available signals and gracefully degrades. Wikilink graph-boost reranks top-K via 1-step personalised PageRank. Optional cross-encoder reranking re-scores top-N for +5-10 NDCG@10. Every hit returns `per_signal: { bm25, tfidf, embeddings }` so you see WHY it ranked.
|
|
101
113
|
|
|
102
114
|
| Tier | Setup | What you get |
|
|
103
115
|
|---|---|---|
|
|
104
|
-
| **1** | `serve --vault <path>` | TF-IDF (zero setup, instant) |
|
|
105
|
-
| **2** | + `--persistent-index` | + BM25 (sub-100ms top-10) |
|
|
106
|
-
| **3** | + `
|
|
107
|
-
| **4** | + `--enable-reranker` | + BGE cross-encoder
|
|
108
|
-
| **5** | + `--
|
|
109
|
-
| **6** |
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## 🆚 vs alternatives
|
|
114
|
-
|
|
115
|
-
| | Other Obsidian-MCPs | Smart Connections (paid) | **enquire** |
|
|
116
|
-
|---|:---:|:---:|:---:|
|
|
117
|
-
| Wikilinks (alias / section / block) | partial | n/a | ✅ full |
|
|
118
|
-
| Backlinks ranked + snippeted | rare | n/a | ✅ |
|
|
119
|
-
| Dataview-style queries | needs plugin | n/a | ✅ first-class |
|
|
120
|
-
| Canvas (`.canvas`) read | rare | n/a | ✅ typed nodes + edges |
|
|
121
|
-
| BM25 full-text | rare | ❌ | ✅ FTS5 SQLite |
|
|
122
|
-
| TF-IDF semantic | ❌ | ❌ | ✅ |
|
|
123
|
-
| ML embeddings (multilingual) | ❌ | 💰 paid | ✅ **free** |
|
|
124
|
-
| **Hybrid (BM25+TF-IDF+embeddings, RRF)** | ❌ | ❌ | ✅ **only here** |
|
|
125
|
-
| **Wikilink graph-boost retrieval signal** | ❌ | ❌ | ✅ **only here** |
|
|
126
|
-
| **PDFs blended into hybrid search** | ❌ | ❌ | ✅ **only here** |
|
|
127
|
-
| **OCR for scanned / image-only PDFs** | ❌ | ❌ | ✅ **only here** |
|
|
128
|
-
| **Cross-encoder reranking** | ❌ | ❌ | ✅ **only here** |
|
|
129
|
-
| **Built-in retrieval-quality eval** (NDCG@K + matrix) | ❌ | ❌ | ✅ **only here** |
|
|
130
|
-
| **HNSW vector index** (scales to millions of chunks) | ❌ | ❌ | ✅ **only here** |
|
|
131
|
-
| **int8 quantized embed-db** (~4× smaller) | ❌ | ❌ | ✅ **only here** |
|
|
132
|
-
| **Remote MCP (HTTP + bearer auth)** | ❌ | ❌ | ✅ **only here** |
|
|
133
|
-
| Per-signal observability per hit | ❌ | ❌ | ✅ |
|
|
134
|
-
| Privacy filter (exclude/allow globs) | ❌ | n/a | ✅ verified at search + write paths |
|
|
135
|
-
| Standalone (no Obsidian plugin) | varies | ❌ requires Obsidian | ✅ direct vault read |
|
|
136
|
-
| MCP-native (any agent) | varies | ❌ Obsidian-only | ✅ stdio + HTTP |
|
|
137
|
-
| SLSA-3 release provenance | ❌ | n/a | ✅ |
|
|
138
|
-
| Test suite | rare | n/a | ✅ 606 unit tests |
|
|
139
|
-
|
|
140
|
-
> **Strategic claim:** enquire is the open-source backend for [Karpathy-style LLM Wikis](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) on top of your existing Obsidian vault. The `vault_synth` / `vault_wiki_compile` / `vault_lint_extended` prompts implement the ingest → query → lint → compile workflow natively over `.md` + `[[wikilinks]]`. Knowledge that compounds, traceable to sources.
|
|
116
|
+
| **1** | `serve --vault <path>` | TF-IDF cosine (zero setup, instant) |
|
|
117
|
+
| **2** | + `--persistent-index` | + BM25 / FTS5 (sub-100ms top-10) |
|
|
118
|
+
| **3** | + `setup` (downloads model + builds embed-db) | + multilingual ML embeddings |
|
|
119
|
+
| **4** | + `--enable-reranker` | + BGE cross-encoder (+5-10 NDCG@10) |
|
|
120
|
+
| **5** | + `--use-hnsw` | + sub-10ms top-K at million-chunk scale |
|
|
121
|
+
| **6** | + `--include-pdfs` | + PDFs blended into all of the above |
|
|
122
|
+
| **7** | `serve-http --bearer-token …` | + remote MCP (Claude.ai web, ChatGPT, Cursor HTTP, mobile) |
|
|
141
123
|
|
|
142
124
|
---
|
|
143
125
|
|
|
144
|
-
## 🛠️ All
|
|
145
|
-
|
|
146
|
-
The umbrella `obsidian_search` plus 38 specialized tools for wikilinks, backlinks, Dataview, frontmatter, canvas, PDFs, OCR, vault stats, graph navigation, and writes.
|
|
147
|
-
|
|
148
|
-
<details>
|
|
149
|
-
<summary><b>28 always-on read tools</b> — click to expand</summary>
|
|
150
|
-
|
|
151
|
-
`obsidian_search` · `obsidian_context_pack` · `obsidian_chat_thread_read` · `obsidian_frontmatter_get` · `obsidian_frontmatter_search` · `obsidian_read_note` · `obsidian_list_notes` · `obsidian_resolve_wikilink` · `obsidian_get_backlinks` · `obsidian_get_outbound_links` · `obsidian_get_unresolved_wikilinks` · `obsidian_get_recent_edits` · `obsidian_list_tags` · `obsidian_dataview_query` · `obsidian_find_path` · `obsidian_find_similar` · `obsidian_get_note_neighbors` · `obsidian_stats` · `obsidian_lint_wiki` · `obsidian_open_questions` · `obsidian_paper_audit` · `obsidian_validate_note_proposal` · `obsidian_list_canvases` · `obsidian_read_canvas` · `obsidian_list_pdfs` · `obsidian_read_pdf` · `obsidian_ocr_pdf` · `obsidian_open_in_ui`
|
|
152
|
-
|
|
153
|
-
</details>
|
|
126
|
+
## 🛠️ All 40 tools
|
|
154
127
|
|
|
155
|
-
|
|
156
|
-
<summary><b>4 opt-in read tools</b> (diagnostic single-rankers) — click to expand</summary>
|
|
128
|
+
The umbrella `obsidian_search` plus 38 specialized tools. Full reference: **[docs/api.md](./docs/api.md)**.
|
|
157
129
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
`obsidian_create_note` · `obsidian_append_to_note` · `obsidian_rename_note`
|
|
166
|
-
|
|
167
|
-
</details>
|
|
168
|
-
|
|
169
|
-
**Plus:** 2 + 1 opt-in MCP resources, and **17 MCP prompts** (`summarize_recent_edits`, `weekly_review`, `monthly_review`, `find_orphans`, `extract_todos`, `process_inbox`, `review_tag`, `consolidate_tags`, `find_duplicates`, `lint_wiki`, `search_with_query_expansion`, `vault_synth`, `vault_wiki_compile`, `vault_lint_extended`, `vault_capture`, `vault_persona_search`, `vault_automation_setup`).
|
|
170
|
-
|
|
171
|
-
📖 Full reference: **[docs/api.md](./docs/api.md)** · Remote-MCP deployment guide: **[docs/http-transport.md](./docs/http-transport.md)**
|
|
172
|
-
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
## ⚙️ Configuration
|
|
176
|
-
|
|
177
|
-
The flags you'll actually use:
|
|
178
|
-
|
|
179
|
-
| Flag | Default | What it does |
|
|
180
|
-
|---|---|---|
|
|
181
|
-
| `--vault <path>` | required | Path to Obsidian vault root |
|
|
182
|
-
| `--persistent-index` | off | SQLite FTS5 BM25, sub-100ms top-10 |
|
|
183
|
-
| `--include-pdfs` | off | Index PDFs into FTS5 + embeddings |
|
|
184
|
-
| `--enable-reranker` | off | BGE cross-encoder reranking on RRF top-N |
|
|
185
|
-
| `--enable-write` | off | Register the 7 write tools |
|
|
186
|
-
| `--exclude-glob <pat...>` | none | Privacy denylist (e.g. `'02_Personal/**'`) |
|
|
187
|
-
| `--read-paths <pat...>` | none | Privacy allowlist (only matching paths visible) |
|
|
188
|
-
| `--watch` | off | Live invalidation on `.md` add/change/unlink |
|
|
189
|
-
| `--persistent-cache` | off | Survive cold starts |
|
|
190
|
-
|
|
191
|
-
Subcommands: `serve` · `serve-http` · `gen-token` · `doctor` (v2.11) · `setup` (v2.11) · `eval` (v2.12) · `clear-cache` · `clear-index` · `clear-embeddings` · `index` · `install-model` · `build-embeddings`.
|
|
130
|
+
| Category | Tools |
|
|
131
|
+
|---|---|
|
|
132
|
+
| **Search & retrieval** | `obsidian_search` (umbrella, RRF-fused) · `obsidian_hyde_search` (HyDE-augmented, v3.1.0) · `obsidian_search_text` · `obsidian_full_text_search` · `obsidian_semantic_search` · `obsidian_embeddings_search` · `obsidian_find_similar` |
|
|
133
|
+
| **Wikilinks & graph** | `obsidian_resolve_wikilink` · `obsidian_get_backlinks` · `obsidian_get_outbound_links` · `obsidian_get_note_neighbors` · `obsidian_get_unresolved_wikilinks` · `obsidian_find_path` |
|
|
134
|
+
| **Frontmatter & Dataview** | `obsidian_frontmatter_get` · `obsidian_frontmatter_search` · `obsidian_dataview_query` · `obsidian_list_tags` |
|
|
135
|
+
| **Read & navigate** | `obsidian_read_note` · `obsidian_list_notes` · `obsidian_get_recent_edits` · `obsidian_open_questions` · `obsidian_context_pack` · `obsidian_chat_thread_read` · `obsidian_open_in_ui` · `obsidian_stats` |
|
|
136
|
+
| **PDFs & canvas** | `obsidian_read_pdf` · `obsidian_list_pdfs` · `obsidian_ocr_pdf` · `obsidian_read_canvas` · `obsidian_list_canvases` |
|
|
137
|
+
| **Writes** (gated by `--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` |
|
|
138
|
+
| **Diagnostic / lint** | `obsidian_lint_wiki` · `obsidian_paper_audit` · `obsidian_validate_note_proposal` |
|
|
192
139
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
enquire-mcp gen-token > ~/.enquire/token # one-time
|
|
197
|
-
enquire-mcp serve-http \
|
|
198
|
-
--vault ~/Obsidian \
|
|
199
|
-
--bearer-token "$(cat ~/.enquire/token)" \
|
|
200
|
-
--persistent-index --include-pdfs --enable-reranker
|
|
201
|
-
# Front with Tailscale Funnel / Cloudflare Tunnel for HTTPS.
|
|
202
|
-
```
|
|
140
|
+
Plus 3 MCP resources (`obsidian://vault/info`, `obsidian://note/{path}`, `obsidian://chunk/{n}/{path}`) and 19 **MCP prompts** (`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`) for common vault workflows.
|
|
203
141
|
|
|
204
142
|
---
|
|
205
143
|
|
|
206
144
|
## 🛡️ Trust
|
|
207
145
|
|
|
208
|
-
- **Read-only by default.** Every write tool requires `--enable-write`.
|
|
209
|
-
- **Path traversal blocked.** Realpath check on every read+write target. Symlinks resolving outside the vault are rejected.
|
|
210
|
-
- **Privacy boundary verified across all paths** including persistent FTS5 + embed indexes and the `obsidian://chunk/...` resource. Privacy fail-closed: empty `--read-paths` / `--exclude-glob` patterns refuse to start.
|
|
211
|
-
- **HTTP transport hardened.** Bearer auth (constant-time SHA-256 + `timingSafeEqual`), per-token sliding rate-limit, strict CORS allowlist with credential-leak guard.
|
|
212
|
-
- **`gray-matter` (`js-yaml` safeLoad)** — no code execution via frontmatter.
|
|
213
|
-
- **Cache + index files** — chmod 0600, parent dir 0700.
|
|
214
|
-
- **SLSA-3 provenance** on every npm release.
|
|
215
|
-
- **Branch protection** with `bypass_mode: pull_request` — every change goes through PR review. Release pipeline verifies tagged SHA is on `main` AND all 8 required CI checks reported `success` on it.
|
|
216
|
-
|
|
217
146
|
| Surface | Posture |
|
|
218
147
|
|---|---|
|
|
219
|
-
|
|
|
220
|
-
|
|
|
221
|
-
|
|
|
222
|
-
|
|
|
223
|
-
|
|
|
224
|
-
|
|
|
225
|
-
|
|
|
226
|
-
|
|
|
227
|
-
|
|
|
228
|
-
|
|
229
|
-
|
|
148
|
+
| **Default** | Read-only — `--enable-write` required for the 7 write tools |
|
|
149
|
+
| **Path safety** | Realpath check on every read+write; symlinks-out-of-vault rejected |
|
|
150
|
+
| **Privacy filter** | Verified at FTS5 + embed-db + chunk resource paths; fail-closed on empty allow-/deny-lists |
|
|
151
|
+
| **HTTP transport** | Bearer auth (constant-time SHA-256 + `timingSafeEqual`), per-token rate-limit, strict CORS |
|
|
152
|
+
| **Frontmatter** | `gray-matter` (`js-yaml` safeLoad) — no code execution |
|
|
153
|
+
| **Cache + index files** | chmod 0600, parent dir 0700 |
|
|
154
|
+
| **CI** | 12 required gates per PR (lint · test ×3 · test-macos · smoke · audit · coverage · version-consistency · CodeQL ×2) |
|
|
155
|
+
| **Coverage** | Lines ≥86% · statements ≥82% · functions ≥75% · branches ≥73% (gated) |
|
|
156
|
+
| **Releases** | npm + GitHub release per tag · semver · **SLSA-3** build provenance |
|
|
157
|
+
| **Stability** | v3.0+ semver-bound — every CLI flag, tool name, MCP resource, prompt, exported symbol is contract |
|
|
158
|
+
|
|
159
|
+
Full posture: **[SECURITY.md](./SECURITY.md)** · Stability surface: **[STABILITY.md](./STABILITY.md)** · Vulns: `oomkapwn@gmail.com`.
|
|
230
160
|
|
|
231
161
|
---
|
|
232
162
|
|
|
233
163
|
## ❓ FAQ
|
|
234
164
|
|
|
235
|
-
**
|
|
236
|
-
No. enquire reads `.md` + `.canvas` + `.pdf` files directly. Works against any Obsidian-format vault.
|
|
237
|
-
|
|
238
|
-
**Will this write to my vault?**
|
|
239
|
-
Not unless you start with `--enable-write`. Even then, all 7 write tools are gated by privacy filters and refuse to overwrite without `overwrite: true`. `dry_run` modes available on the destructive ones.
|
|
165
|
+
**Need Obsidian installed?** No. Reads `.md` + `.canvas` + `.pdf` directly. Works against any Obsidian-format vault.
|
|
240
166
|
|
|
241
|
-
**
|
|
242
|
-
Only on `enquire-mcp install-model` (downloads ONNX weights from HuggingFace, one-time). Serve mode itself never makes outbound HTTP. Embeddings + reranker run on CPU locally.
|
|
167
|
+
**Will it write to my vault?** Not unless you pass `--enable-write`. All 7 write tools are gated; destructive ones support `dry_run`.
|
|
243
168
|
|
|
244
|
-
**
|
|
245
|
-
Smart Connections is a paid Obsidian plugin that runs ML embeddings inside Obsidian. enquire is a standalone MCP server: free, MCP-native (works with Claude / Cursor / Codex / any agent), and fuses 3 retrieval signals + cross-encoder reranking for higher recall + precision than embeddings alone. PDFs index too.
|
|
169
|
+
**Data sent anywhere?** Only on `enquire-mcp install-model` (downloads ONNX weights from HuggingFace, one-time). Serve mode never makes outbound HTTP. Embeddings + reranker run on CPU locally.
|
|
246
170
|
|
|
247
|
-
**Performance on
|
|
248
|
-
Cold-build of FTS5 on a 1k-note vault: ~5s. Warm BM25 top-10: sub-100ms. Embedding build: ~30ms/chunk on M1 (~8min for 8k chunks). Hybrid query latency: <200ms typical. Reranker adds ~30-50ms at top-50. Maintainer dogfoods on a 128-note bilingual vault with all of the above on.
|
|
171
|
+
**Performance?** Cold-build FTS5: ~5s/1k notes, ~30s/50k. BM25 query: <100ms always. Embedding build: ~30ms/chunk on M1. **HNSW top-10: sub-10ms at any scale.** Serve cold-start: ~50ms with HNSW persistence.
|
|
249
172
|
|
|
250
|
-
**Languages?**
|
|
251
|
-
Default embedding model is `paraphrase-multilingual-MiniLM-L12-v2` (50+ languages). Multilingual cross-encoder reranker (`mxbai-rerank-xsmall-v1`) is the default too. Validated end-to-end on Russian + English bilingual vaults. CJK / Thai / Khmer / Lao tokenization via `Intl.Segmenter` (Node 16+ ICU).
|
|
173
|
+
**Languages?** Default `paraphrase-multilingual-MiniLM-L12-v2` (50+ languages). Multilingual cross-encoder. Validated end-to-end on Russian + English bilingual vaults. CJK/Thai/Khmer tokenization via `Intl.Segmenter`.
|
|
252
174
|
|
|
253
|
-
**
|
|
254
|
-
Yes. `serve-http` exposes the same server over [Streamable HTTP](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http) with bearer auth. Front with Tailscale Funnel or Cloudflare Tunnel for HTTPS — works with claude.ai web, ChatGPT custom GPT, Cursor HTTP mode, mobile MCP clients. See [docs/http-transport.md](./docs/http-transport.md).
|
|
175
|
+
**Run remotely?** Yes — `serve-http` exposes the same server over [Streamable HTTP](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http). Front with Tailscale Funnel or Cloudflare Tunnel for HTTPS. Works with claude.ai web, ChatGPT custom GPT, Cursor HTTP mode, mobile MCP clients. See **[docs/http-transport.md](./docs/http-transport.md)**.
|
|
255
176
|
|
|
256
177
|
---
|
|
257
178
|
|
|
258
179
|
## 🚀 Releases
|
|
259
180
|
|
|
260
|
-
**v3.0.0 — stable channel
|
|
181
|
+
**v3.0.0 — stable channel.** The v2.x retrieval roadmap is complete and the public surface is now [semver-bound](./STABILITY.md). Highlight reel of the v2.x line that landed in v3.0:
|
|
261
182
|
|
|
262
|
-
|
|
183
|
+
`v2.0` hybrid retrieval (BM25+TF-IDF+embeddings via RRF) · `v2.6` remote MCP · `v2.7-2.8` PDFs blended · `v2.9` BGE reranker · `v2.10` OCR · `v2.11` doctor + setup · `v2.12` eval harness · `v2.13` HNSW · `v2.14` stateful sessions · `v2.15` late-chunking · `v2.16` HNSW persistence · `v2.17` int8 quantization
|
|
263
184
|
|
|
264
|
-
Channel: `npm install @oomkapwn/enquire-mcp` → latest stable. Full changelog: [CHANGELOG.md](./CHANGELOG.md)
|
|
185
|
+
Channel: `npm install @oomkapwn/enquire-mcp` → latest stable. Full changelog: **[CHANGELOG.md](./CHANGELOG.md)**.
|
|
265
186
|
|
|
266
187
|
---
|
|
267
188
|
|
|
@@ -275,10 +196,10 @@ npm run lint # zero warnings
|
|
|
275
196
|
npm run build # tsc → dist/
|
|
276
197
|
```
|
|
277
198
|
|
|
278
|
-
Issues, PRs,
|
|
199
|
+
Issues, PRs, ideas welcome. Branch protection requires PR review on `main`.
|
|
279
200
|
|
|
280
201
|
---
|
|
281
202
|
|
|
282
|
-
## 📜 License
|
|
203
|
+
## 📜 License
|
|
283
204
|
|
|
284
|
-
MIT. Built by [Alex (@OomkaBear)](https://github.com/oomkapwn). Named after [Tim Berners-Lee's 1980 prototype of the WWW](https://en.wikipedia.org/wiki/ENQUIRE) — the original hypertext system, before the web. The original spec was
|
|
205
|
+
MIT. Built by [Alex (@OomkaBear)](https://github.com/oomkapwn). Named after [Tim Berners-Lee's 1980 prototype of the WWW](https://en.wikipedia.org/wiki/ENQUIRE) — the original hypertext system, before the web. The original spec was: you could ask the system anything. **enquire-mcp brings that to your vault.**
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAMtF,OAAO,EAAkC,QAAQ,EAAE,MAAM,WAAW,CAAC;AAyCrE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAW5C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;mCAE+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;8EAC0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;+BAG2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;iFAE6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;uDAOmD;IACnD,kBAAkB,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACrC;AAkBD,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAqqBnC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,cAAc,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACrC;;;;OAIG;IACH,WAAW,EAAE;QACX,sBAAsB;QACtB,KAAK,EAAE,OAAO,WAAW,EAAE,SAAS,CAAC;QACrC,oEAAoE;QACpE,UAAU,EAAE,GAAG,CACb,MAAM,EACN;YACE,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;YACnB,QAAQ,EAAE,MAAM,CAAC;YACjB,YAAY,EAAE,MAAM,CAAC;YACrB,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC;SACpB,CACF,CAAC;QACF,kFAAkF;QAClF,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,GAAG,IAAI,CAAC;CACV;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CA4M/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,GAAG,SAAS,CAqG9E;AAED,iBAAe,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD5D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAY1D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,CAAC,EAAE,MAAM,EACT,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAChD,MAAM,CAwBR;AAspED,iBAAS,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED;;;;;GAKG;AACH,iBAAS,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CASlF;AAsCD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,WAAW,EAAE,CAAC"}
|