markdown-lsp 1.2.0 → 1.3.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/README.md CHANGED
@@ -6,9 +6,9 @@
6
6
  [![license](https://img.shields.io/npm/l/markdown-lsp.svg?style=flat-square)](https://github.com/Docsbook-io/markdown-lsp/blob/main/LICENSE)
7
7
  [![node](https://img.shields.io/node/v/markdown-lsp.svg?style=flat-square)](https://www.npmjs.com/package/markdown-lsp)
8
8
 
9
- CLI and library for querying Markdown documentation graphs. Point it at a folder of `.md` files and get instant full-text search, outline, link analysis, symbol lookup, interactive HTML graphs, and AI-powered semantic search — all as JSON.
9
+ CLI and library for querying Markdown documentation graphs. Point it at a folder of `.md` files and get instant full-text search, outline, link analysis, symbol lookup, interactive HTML graphs, and AI-powered semantic search at page, heading, or paragraph granularity — all as JSON.
10
10
 
11
- **Status: v1.2.0. CLI is the default interface. LSP stdio mode available as a subcommand.**
11
+ **Status: v1.3.0. CLI is the default interface. LSP stdio mode available as a subcommand.**
12
12
 
13
13
  ---
14
14
 
@@ -44,11 +44,20 @@ npx markdown-lsp graph ./docs --format json --pretty
44
44
  npx markdown-lsp graph ./docs --format dot | dot -Tsvg > graph.svg
45
45
  npx markdown-lsp graph ./docs --format mermaid
46
46
 
47
- # Build embeddings + interactive semantic graph in one command
48
- OPENROUTER_API_KEY=sk-or-... npx markdown-lsp graph ./docs --format html --semantic --out graph.html
47
+ # ── Token-saving workflow: index once, search cheap ──────────────────────────
48
+
49
+ # Step 1: build the semantic index once (embeds all heading-level sections)
50
+ OPENROUTER_API_KEY=sk-or-... npx markdown-lsp index ./docs --granularity heading
51
+
52
+ # Step 2: search is now cheap — only the query is embedded (1 API round-trip)
53
+ OPENROUTER_API_KEY=sk-or-... npx markdown-lsp semantic-search ./docs "how to configure webhooks" --granularity heading
54
+ OPENROUTER_API_KEY=sk-or-... npx markdown-lsp semantic-search ./docs "rate limit error" --granularity line
55
+
56
+ # Semantic graph — heading-level nodes (sections as graph nodes)
57
+ OPENROUTER_API_KEY=sk-or-... npx markdown-lsp graph ./docs --format html --semantic --granularity heading --out graph-headings.html
49
58
 
50
- # AI semantic search
51
- OPENROUTER_API_KEY=sk-or-... npx markdown-lsp semantic-search ./docs "how to configure webhooks"
59
+ # Page-level semantic graph (classic)
60
+ OPENROUTER_API_KEY=sk-or-... npx markdown-lsp graph ./docs --format html --semantic --out graph.html
52
61
 
53
62
  # LSP server (for editors)
54
63
  npx markdown-lsp lsp --stdio
@@ -83,8 +92,9 @@ All subcommands accept a **`--pretty`** flag for indented JSON output (compact b
83
92
  | `links-from` | `<docs-dir> <page>` | All links originating from `<page>` |
84
93
  | `resolve-link` | `<docs-dir> <from-page> <link-text>` | Resolve a specific link text from a page |
85
94
  | `get-section` | `<docs-dir> <page> <anchor>` | Get a section by anchor slug |
86
- | `graph` | `<docs-dir> [--format json\|dot\|mermaid\|html] [--out file] [--semantic] [--sim-threshold n] [--sim-top-k n] [--model m]` | Export doc link graph; `--semantic` adds AI similarity edges |
87
- | `semantic-search` | `<docs-dir> <query> [--limit n] [--model m]` | AI semantic search via embeddings |
95
+ | `index` | `<docs-dir> [--granularity page\|heading\|line] [--model m]` | Build persistent semantic index (cache all embeddings once) |
96
+ | `graph` | `<docs-dir> [--format json\|dot\|mermaid\|html] [--out file] [--semantic] [--granularity page\|heading] [--sim-threshold n] [--sim-top-k n] [--model m]` | Export doc link graph; `--semantic` adds AI similarity edges |
97
+ | `semantic-search` | `<docs-dir> <query> [--limit n] [--model m] [--granularity page\|heading\|line]` | AI semantic search via embeddings |
88
98
  | `lsp` / `serve` | `[--stdio]` | Start the LSP stdio server |
89
99
 
90
100
  ### search-text modes
@@ -164,59 +174,61 @@ JSON output shape:
164
174
 
165
175
  ---
166
176
 
167
- ## Turnkey semantic graph (v1.2)
177
+ ## Token-saving workflow: index once, search cheap
168
178
 
169
- Overlay AI-powered semantic similarity edges on top of the link graph — one command, no pipeline.
179
+ The `index` command pre-builds and caches all document embeddings at the chosen granularity.
180
+ After indexing, `semantic-search` and `graph --semantic` only need to embed the query — **1 API round-trip** instead of N.
170
181
 
171
182
  ```bash
172
- # Build embeddings + interactive semantic graph in one command
173
- OPENROUTER_API_KEY=sk-or-... markdown-lsp graph ./docs --format html --semantic --out graph.html
183
+ # Build the index once (heading = section-level, best precision)
184
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp index ./docs --granularity heading
174
185
 
175
- # With explicit thresholds
176
- OPENROUTER_API_KEY=sk-or-... markdown-lsp graph ./docs --format html --semantic \
177
- --sim-threshold 0.75 --sim-top-k 5 --out graph.html
186
+ # Now search is cheap — only the query is sent to the API
187
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp semantic-search ./docs "how does auth work" --granularity heading
188
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp semantic-search ./docs "rate limit error" --granularity line
178
189
  ```
179
190
 
180
- **What you get in the HTML:**
191
+ **Why it works:** embeddings are cached by `sha256(model + text)` in `.markdown-lsp-cache/embeddings/`.
192
+ On the second run, every doc unit is a cache hit — only the query vector is fetched from the API.
193
+ If a file changes, its hash changes, so it is re-embedded automatically (no stale results).
181
194
 
182
- - Two types of edges — **solid lines** (explicit markdown links) and **dashed amber lines** (semantic similarity)
183
- - **Checkboxes** in the toolbar to toggle each edge type independently
184
- - **Click any node** to open a side-panel showing: title, path, sections, outgoing links, incoming links, and top semantically similar pages with scores
185
- - Clicking a linked page in the side-panel focuses the graph on that node
186
- - Background click closes the panel and clears selection
187
- - Drag and zoom preserved from v1.1
195
+ **Token cost comparison:**
188
196
 
189
- **Semantic flags:**
190
-
191
- | Flag | Default | Description |
197
+ | Scenario | API round-trips | Relative cost |
192
198
  |---|---|---|
193
- | `--semantic` | off | Enable AI similarity edges |
194
- | `--sim-threshold` | `0.75` | Minimum cosine similarity score to draw an edge |
195
- | `--sim-top-k` | `5` | Max semantic neighbours per node |
196
- | `--model` | `openai/text-embedding-3-small` | Embedding model override |
197
-
198
- **Caching:** embeddings are cached in `.markdown-lsp-cache/embeddings/` — the second run is instant with 0 API calls.
199
-
200
- **OpenRouter model naming:** when using `OPENROUTER_API_KEY`, the model name requires the `openai/` prefix (e.g. `openai/text-embedding-3-small`). When using `AI_GATEWAY_API_KEY` (Vercel AI Gateway), use the bare name (`text-embedding-3-small`). If the model is rejected, the CLI outputs a clear hint to try the other form.
199
+ | First `semantic-search` (78 pages, cold cache) | 2 (batch docs + query) | baseline |
200
+ | Repeat `semantic-search` after warm cache | 1 (query only) | ~1/78 |
201
+ | After `index --granularity heading` (~1190 sections) | 1 (query only) | ~1/1190 |
202
+ | `index` re-run with no changes | 0 | free |
201
203
 
202
204
  ---
203
205
 
204
- ## Semantic search
206
+ ## Semantic search with granularity
205
207
 
206
- AI-powered semantic search using text embeddings — finds conceptually related pages even if they
207
- don't contain the exact query words.
208
+ AI-powered semantic search using text embeddings — finds conceptually related content even if it
209
+ doesn't contain the exact query words.
208
210
 
209
211
  ```bash
210
- # Requires OPENROUTER_API_KEY (OpenRouter) or AI_GATEWAY_API_KEY (Vercel AI Gateway)
212
+ # Page-level (default) searches whole pages
211
213
  OPENROUTER_API_KEY=sk-or-... markdown-lsp semantic-search ./docs "how to configure webhooks" --limit 5
212
214
 
215
+ # Heading-level — searches within sections (returns anchor + headingPath)
216
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp semantic-search ./docs "webhook authentication" \
217
+ --granularity heading --limit 10
218
+
219
+ # Line-level — searches paragraph blocks (returns line number)
220
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp semantic-search ./docs "set OPENROUTER_API_KEY" \
221
+ --granularity line --limit 5
222
+
213
223
  # Override embedding model
214
224
  markdown-lsp semantic-search ./docs "authentication" --model openai/text-embedding-3-small --limit 3
215
225
  ```
216
226
 
217
- - Default embedding model: `openai/text-embedding-3-small` (via OpenRouter — model prefix required)
218
- - Results cached in `.markdown-lsp-cache/embeddings/` — second run is instant, no API call
219
- - Returns `[{ pagePath, pageTitle, score, snippet }]` sorted by cosine similarity
227
+ **Result shape by granularity:**
228
+
229
+ - `page`: `[{ level: "page", pagePath, pageTitle, score, snippet }]`
230
+ - `heading`: `[{ level: "heading", pagePath, pageTitle, anchor, headingPath, score, snippet }]`
231
+ - `line`: `[{ level: "line", pagePath, pageTitle, line, score, snippet }]`
220
232
 
221
233
  **Environment variables:**
222
234
 
@@ -228,6 +240,45 @@ markdown-lsp semantic-search ./docs "authentication" --model openai/text-embeddi
228
240
 
229
241
  ---
230
242
 
243
+ ## Semantic graph (v1.2+)
244
+
245
+ Overlay AI-powered semantic similarity edges on top of the link graph.
246
+
247
+ ```bash
248
+ # Page-level semantic graph (classic)
249
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp graph ./docs --format html --semantic --out graph.html
250
+
251
+ # Heading-level: graph nodes = sections, semantic edges between sections
252
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp graph ./docs --format html --semantic \
253
+ --granularity heading --sim-threshold 0.75 --sim-top-k 5 --out graph-headings.html
254
+ ```
255
+
256
+ **What you get in the HTML:**
257
+
258
+ - Two types of edges — **solid lines** (explicit markdown links) and **dashed amber lines** (semantic similarity)
259
+ - **Checkboxes** in the toolbar to toggle each edge type independently
260
+ - **Click any node** to open a side-panel showing: title, path, sections, outgoing links, incoming links, and top semantically similar pages/sections with scores
261
+ - Clicking a linked page in the side-panel focuses the graph on that node
262
+ - Background click closes the panel and clears selection
263
+
264
+ **Semantic flags:**
265
+
266
+ | Flag | Default | Description |
267
+ |---|---|---|
268
+ | `--semantic` | off | Enable AI similarity edges |
269
+ | `--granularity` | `page` | `page` (nodes = pages) or `heading` (nodes = sections) |
270
+ | `--sim-threshold` | `0.75` | Minimum cosine similarity score to draw an edge |
271
+ | `--sim-top-k` | `5` | Max semantic neighbours per node |
272
+ | `--model` | `openai/text-embedding-3-small` | Embedding model override |
273
+
274
+ **Note:** `--granularity line` is not supported for `graph` (too many nodes). Use `page` or `heading`.
275
+
276
+ **Caching:** embeddings are cached in `.markdown-lsp-cache/embeddings/` — the second run is instant with 0 API calls.
277
+
278
+ **OpenRouter model naming:** when using `OPENROUTER_API_KEY`, the model name requires the `openai/` prefix (e.g. `openai/text-embedding-3-small`). When using `AI_GATEWAY_API_KEY` (Vercel AI Gateway), use the bare name (`text-embedding-3-small`). If the model is rejected, the CLI outputs a clear hint to try the other form.
279
+
280
+ ---
281
+
231
282
  ## LSP mode (editor integration)
232
283
 
233
284
  `markdown-lsp` also works as a Language Server Protocol server for editors (VS Code, Zed, Neovim, etc.).
@@ -301,7 +352,9 @@ export AI_GATEWAY_API_KEY=... # Vercel AI Gateway
301
352
 
302
353
  - **CLI** — `node:util parseArgs`, zero extra deps, reads `.md` files into an in-memory graph
303
354
  - **Graph** — pure TypeScript, no DB needed; `buildGraph(docsRoot)` walks the directory tree
304
- - **Semantic graph** — in-memory cosine similarity (N×N in ~5ms); embeddings via OpenRouter or Vercel AI Gateway; disk-cached per sha256(model+text)
355
+ - **Granular semantics** — `unitize(pages, granularity)` splits docs into page/heading/line units; `splitParagraphs()` groups by blank lines
356
+ - **Persistent index** — `index` command pre-caches all embeddings; `embedTexts()` checks sha256 cache per unit before hitting the API
357
+ - **Semantic graph** — in-memory cosine similarity; heading mode replaces page-nodes with section-nodes; embeddings via OpenRouter or Vercel AI Gateway; disk-cached per sha256(model+text)
305
358
  - **LSP** — `vscode-languageserver/node` over stdio; requires Postgres (Drizzle ORM, `mdlsp_` prefix)
306
359
  - **AI layer** (opt-in) — pgvector cosine search on canonical-term embeddings; `text-embedding-3-small` via Vercel AI Gateway
307
360
  - **Bridge** — pure in-memory search (searchText, searchTextRanked, searchSymbols, searchPaths, listPages)
@@ -326,8 +379,9 @@ pnpm test
326
379
  - **M3 — CLI-first interface** ✅ (v1.0.0)
327
380
  - **M4 — Graph export + HTML D3 visualisation** ✅ (v1.1.0)
328
381
  - **M5 — Turnkey semantic graph (graph --semantic)** ✅ (v1.2.0)
329
- - M6 — User overrides for the glossary (merge / split / rename / add_synonym)
330
- - M7 — Docsbook integration
382
+ - **M6 — Granular semantics + persistent index** (v1.3.0)
383
+ - M7 — User overrides for the glossary (merge / split / rename / add_synonym)
384
+ - M8 — Docsbook integration
331
385
 
332
386
  ---
333
387
 
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Granular semantic units — splits doc pages into heading-level or paragraph-level units
3
+ * for fine-grained semantic search and heading-level graph nodes.
4
+ */
5
+ import type { GraphPage } from "../bridge/inMemoryGraph.js";
6
+ export type GranularityLevel = "page" | "heading" | "line";
7
+ export interface SemanticUnit {
8
+ level: GranularityLevel;
9
+ /** Stable unique ID. page: pagePath. heading: pagePath#anchor. line: pagePath#L<startLine> */
10
+ id: string;
11
+ pagePath: string;
12
+ /** Page title (null if page has no title) */
13
+ pageTitle: string | null;
14
+ /** heading/line only */
15
+ anchor?: string | null;
16
+ /** heading only — breadcrumb path e.g. ["Parent", "Child"] */
17
+ headingPath?: string[];
18
+ /** line only — 0-based start line of the paragraph block */
19
+ line?: number;
20
+ /** The text to embed */
21
+ text: string;
22
+ }
23
+ export declare function unitizePages(page: GraphPage): SemanticUnit[];
24
+ export declare function unitizeHeadings(page: GraphPage): SemanticUnit[];
25
+ /** Split page content into paragraph blocks (groups of lines separated by blank lines). */
26
+ export declare function splitParagraphs(content: string): Array<{
27
+ text: string;
28
+ startLine: number;
29
+ }>;
30
+ export declare function unitizeLines(page: GraphPage): SemanticUnit[];
31
+ export declare function unitize(pages: GraphPage[], granularity: GranularityLevel): SemanticUnit[];
32
+ //# sourceMappingURL=granular.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"granular.d.ts","sourceRoot":"","sources":["../../src/ai/granular.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,4BAA4B,CAAA;AAIzE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;AAE1D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,gBAAgB,CAAA;IACvB,8FAA8F;IAC9F,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAA;CACb;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,EAAE,CAW5D;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,EAAE,CAqB/D;AAID,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB3F;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,EAAE,CAe5D;AAID,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAgBzF"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Granular semantic units — splits doc pages into heading-level or paragraph-level units
3
+ * for fine-grained semantic search and heading-level graph nodes.
4
+ */
5
+ // ── Page-level units (current behaviour) ─────────────────────────────────────
6
+ export function unitizePages(page) {
7
+ const titlePart = page.title ? page.title + "\n\n" : "";
8
+ return [
9
+ {
10
+ level: "page",
11
+ id: page.path,
12
+ pagePath: page.path,
13
+ pageTitle: page.title,
14
+ text: (titlePart + page.content).slice(0, 6000),
15
+ },
16
+ ];
17
+ }
18
+ // ── Heading-level units ───────────────────────────────────────────────────────
19
+ export function unitizeHeadings(page) {
20
+ if (page.sections.length === 0) {
21
+ // Fallback to page unit if no sections
22
+ return unitizePages(page);
23
+ }
24
+ return page.sections.map((s) => {
25
+ const anchor = s.anchor ?? slugifyHeading(s.headingPath[s.headingPath.length - 1] ?? "section");
26
+ const id = `${page.path}#${anchor}`;
27
+ const breadcrumb = s.headingPath.join(" > ");
28
+ const text = (breadcrumb ? breadcrumb + "\n\n" : "") + s.content;
29
+ return {
30
+ level: "heading",
31
+ id,
32
+ pagePath: page.path,
33
+ pageTitle: page.title,
34
+ anchor: s.anchor,
35
+ headingPath: s.headingPath,
36
+ text: text.slice(0, 6000),
37
+ };
38
+ });
39
+ }
40
+ // ── Line-level units (paragraph blocks) ──────────────────────────────────────
41
+ /** Split page content into paragraph blocks (groups of lines separated by blank lines). */
42
+ export function splitParagraphs(content) {
43
+ const lines = content.split("\n");
44
+ const paras = [];
45
+ let buf = [];
46
+ let startLine = 0;
47
+ for (let i = 0; i < lines.length; i++) {
48
+ const line = lines[i];
49
+ if (line.trim() === "") {
50
+ if (buf.length > 0) {
51
+ paras.push({ text: buf.join("\n").trim(), startLine });
52
+ buf = [];
53
+ }
54
+ }
55
+ else {
56
+ if (buf.length === 0)
57
+ startLine = i;
58
+ buf.push(line);
59
+ }
60
+ }
61
+ if (buf.length > 0) {
62
+ paras.push({ text: buf.join("\n").trim(), startLine });
63
+ }
64
+ // Filter out very short paragraphs (titles only, fences, etc.)
65
+ return paras.filter((p) => p.text.length > 20);
66
+ }
67
+ export function unitizeLines(page) {
68
+ const paras = splitParagraphs(page.content);
69
+ if (paras.length === 0)
70
+ return unitizePages(page);
71
+ return paras.map((para) => {
72
+ const id = `${page.path}#L${para.startLine}`;
73
+ return {
74
+ level: "line",
75
+ id,
76
+ pagePath: page.path,
77
+ pageTitle: page.title,
78
+ line: para.startLine,
79
+ text: para.text.slice(0, 6000),
80
+ };
81
+ });
82
+ }
83
+ // ── Dispatcher ────────────────────────────────────────────────────────────────
84
+ export function unitize(pages, granularity) {
85
+ const units = [];
86
+ for (const page of pages) {
87
+ switch (granularity) {
88
+ case "page":
89
+ units.push(...unitizePages(page));
90
+ break;
91
+ case "heading":
92
+ units.push(...unitizeHeadings(page));
93
+ break;
94
+ case "line":
95
+ units.push(...unitizeLines(page));
96
+ break;
97
+ }
98
+ }
99
+ return units;
100
+ }
101
+ // ── Helpers ───────────────────────────────────────────────────────────────────
102
+ function slugifyHeading(text) {
103
+ return text
104
+ .toLowerCase()
105
+ .trim()
106
+ .replace(/[^\w\s-]/g, "")
107
+ .replace(/\s+/g, "-");
108
+ }
109
+ //# sourceMappingURL=granular.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"granular.js","sourceRoot":"","sources":["../../src/ai/granular.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,gFAAgF;AAEhF,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IACvD,OAAO;QACL;YACE,KAAK,EAAE,MAAM;YACb,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,IAAI,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;SAChD;KACF,CAAA;AACH,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,eAAe,CAAC,IAAe;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,uCAAuC;QACvC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAe,EAAgB,EAAE;QACzD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAA;QAC/F,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,CAAA;QACnC,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAA;QAChE,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,EAAE;YACF,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;SAC1B,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,gFAAgF;AAEhF,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,KAAK,GAA+C,EAAE,CAAA;IAC5D,IAAI,GAAG,GAAa,EAAE,CAAA;IACtB,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;QACtB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;gBACtD,GAAG,GAAG,EAAE,CAAA;YACV,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS,GAAG,CAAC,CAAA;YACnC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,+DAA+D;IAC/D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAA;IAEjD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAgB,EAAE;QACtC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,CAAA;QAC5C,OAAO;YACL,KAAK,EAAE,MAAM;YACb,EAAE;YACF,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;SAC/B,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,OAAO,CAAC,KAAkB,EAAE,WAA6B;IACvE,MAAM,KAAK,GAAmB,EAAE,CAAA;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,QAAQ,WAAW,EAAE,CAAC;YACpB,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;gBACjC,MAAK;YACP,KAAK,SAAS;gBACZ,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAA;gBACpC,MAAK;YACP,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;gBACjC,MAAK;QACT,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,iFAAiF;AAEjF,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACzB,CAAC"}
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import * as fs from "node:fs";
3
3
  import { buildGraph } from "./graph.js";
4
4
  import { listPages, searchText, searchTextRanked, searchSymbols, searchPaths, } from "./bridge/index.js";
5
5
  const USAGE = `
6
- markdown-lsp v1.2.0 — CLI for querying Markdown documentation graphs
6
+ markdown-lsp v1.3.0 — CLI for querying Markdown documentation graphs
7
7
 
8
8
  USAGE
9
9
  markdown-lsp <subcommand> [options]
@@ -38,9 +38,17 @@ SUBCOMMANDS
38
38
  get-section <docs-dir> <page> <anchor>
39
39
  Retrieve a section by its anchor slug.
40
40
 
41
+ index <docs-dir> [--granularity page|heading|line] [--model <m>]
42
+ Build the persistent semantic index once — embeds all units at the
43
+ chosen granularity and writes them to .markdown-lsp-cache/.
44
+ Subsequent semantic-search / graph --semantic calls reuse the cache,
45
+ so they only embed the query (1 API round-trip instead of N).
46
+ Idempotent: re-running without doc changes costs 0 API calls.
47
+ Requires OPENROUTER_API_KEY or AI_GATEWAY_API_KEY.
48
+
41
49
  graph <docs-dir> [--format json|dot|mermaid|html] [--out <file>]
42
- [--semantic] [--sim-threshold <0-1>] [--sim-top-k <n>]
43
- [--model <embedding-model>]
50
+ [--semantic] [--granularity page|heading] [--sim-threshold <0-1>]
51
+ [--sim-top-k <n>] [--model <embedding-model>]
44
52
  Export the doc link graph. Default format: json (nodes/edges).
45
53
  Use --format html for a self-contained interactive D3 visualisation.
46
54
  Use --out <file> to write to disk instead of stdout.
@@ -49,14 +57,20 @@ SUBCOMMANDS
49
57
  semantic edges are shown in the HTML graph with checkboxes to
50
58
  toggle each type. Clicking a node opens a side-panel with full
51
59
  info and highlights all its connections.
60
+ --granularity page (default) or heading (nodes = sections)
52
61
  --sim-threshold Minimum cosine similarity for a semantic edge (default: 0.75)
53
62
  --sim-top-k Maximum semantic neighbours per node (default: 5)
54
63
  --model Embedding model override (default: openai/text-embedding-3-small)
64
+ Note: --granularity line is NOT supported for graph (too many nodes).
55
65
 
56
66
  semantic-search <docs-dir> <query> [--limit <n>] [--model <embedding-model>]
67
+ [--granularity page|heading|line]
57
68
  AI-powered semantic search using embeddings. Requires OPENROUTER_API_KEY
58
69
  (or AI_GATEWAY_API_KEY). Results are cached in .markdown-lsp-cache/.
59
70
  Default embedding model: openai/text-embedding-3-small
71
+ --granularity page Search whole pages (default, fast)
72
+ --granularity heading Search within sections (returns anchor + headingPath)
73
+ --granularity line Search paragraph blocks (returns line number)
60
74
 
61
75
  lsp [--stdio]
62
76
  serve [--stdio]
@@ -91,14 +105,23 @@ EXAMPLES
91
105
  # Find pages by filename glob
92
106
  markdown-lsp search-paths ./docs "ai/*.md"
93
107
 
108
+ # Build the semantic index once (saves tokens on every later search)
109
+ markdown-lsp index ./docs --granularity heading
110
+
111
+ # Semantic search — heading level (returns anchor + section)
112
+ markdown-lsp semantic-search ./docs "how does auth work" --granularity heading --limit 10
113
+
114
+ # Semantic search — paragraph level (returns line number)
115
+ markdown-lsp semantic-search ./docs "rate limit error" --granularity line --limit 5
116
+
94
117
  # Link graph
95
118
  markdown-lsp graph ./docs --format json --pretty
96
119
  markdown-lsp graph ./docs --format html --out graph.html
97
120
  markdown-lsp graph ./docs --format dot | dot -Tsvg > graph.svg
98
121
  markdown-lsp graph ./docs --format mermaid
99
122
 
100
- # Build embeddings + interactive semantic graph in one command
101
- markdown-lsp graph ./docs --format html --semantic --out graph.html
123
+ # Semantic graph heading-level nodes (sections as nodes)
124
+ markdown-lsp graph ./docs --format html --semantic --granularity heading --out graph-headings.html
102
125
  markdown-lsp graph ./docs --format html --semantic --sim-threshold 0.75 --sim-top-k 5 --out graph.html
103
126
 
104
127
  # Backlinks / outgoing links
@@ -109,10 +132,6 @@ EXAMPLES
109
132
  markdown-lsp resolve-link ./docs README.md "Getting Started"
110
133
  markdown-lsp get-section ./docs overview.md "quick-links"
111
134
 
112
- # Semantic search (AI)
113
- markdown-lsp semantic-search ./docs "how to set up webhooks" --limit 5
114
- markdown-lsp semantic-search ./docs "authentication" --model openai/text-embedding-3-small
115
-
116
135
  # LSP server
117
136
  markdown-lsp lsp --stdio
118
137
  `.trim();
@@ -183,17 +202,16 @@ function cosineSim(a, b) {
183
202
  return dot / (Math.sqrt(na) * Math.sqrt(nb));
184
203
  }
185
204
  // ── Semantic edge computation ─────────────────────────────────────────────────
186
- async function addSemanticEdges(data, pages, modelOverride, simThreshold, simTopK) {
205
+ async function addSemanticEdges(data, pages, modelOverride, simThreshold, simTopK, granularity = "page") {
187
206
  const { assertApiKey } = await import("./ai/config.js");
188
207
  assertApiKey();
189
208
  const { embedTexts } = await import("./ai/embeddings.js");
190
- const pageTexts = pages.map((p) => {
191
- const titlePart = p.title ? p.title + "\n\n" : "";
192
- return titlePart + p.content.slice(0, 2000);
193
- });
194
- process.stderr.write(`[markdown-lsp] Embedding ${pages.length} pages` +
209
+ const { unitize } = await import("./ai/granular.js");
210
+ const units = unitize(pages, granularity);
211
+ process.stderr.write(`[markdown-lsp] Embedding ${units.length} units at granularity="${granularity}"` +
195
212
  ` (model: ${modelOverride ?? "openai/text-embedding-3-small"})...\n`);
196
- const { vectors, tokensUsed } = await embedTexts(pageTexts, modelOverride, true);
213
+ const unitTexts = units.map((u) => u.text);
214
+ const { vectors, tokensUsed } = await embedTexts(unitTexts, modelOverride, true);
197
215
  if (tokensUsed > 0) {
198
216
  process.stderr.write(`[markdown-lsp] Embeddings computed (${tokensUsed} tokens used).\n`);
199
217
  }
@@ -201,50 +219,137 @@ async function addSemanticEdges(data, pages, modelOverride, simThreshold, simTop
201
219
  process.stderr.write(`[markdown-lsp] Embeddings loaded from cache (0 API tokens).\n`);
202
220
  }
203
221
  const semanticEdges = [];
204
- for (let i = 0; i < pages.length; i++) {
205
- const vecI = vectors[i];
206
- if (!vecI)
207
- continue;
208
- // Compute similarity to all other pages
209
- const sims = [];
210
- for (let j = 0; j < pages.length; j++) {
211
- if (j === i)
222
+ if (granularity === "heading") {
223
+ // Heading mode: nodes are sections, semantic edges between sections
224
+ // data.nodes at this point are page-nodes — for heading mode we REPLACE them with section-nodes
225
+ const sectionNodes = [];
226
+ const sectionNodeMap = new Map();
227
+ for (const page of pages) {
228
+ for (const s of page.sections) {
229
+ const anchor = s.anchor ?? "section";
230
+ const nodeId = `${page.path}#${anchor}`;
231
+ const label = s.headingPath[s.headingPath.length - 1] ?? anchor;
232
+ const sectionNode = {
233
+ id: nodeId,
234
+ title: label,
235
+ charCount: s.charCount,
236
+ sectionsCount: 0,
237
+ nodeType: "heading",
238
+ headingPath: s.headingPath,
239
+ pagePath: page.path,
240
+ sections: [],
241
+ outgoing: [],
242
+ incoming: [],
243
+ topSimilar: [],
244
+ };
245
+ sectionNodes.push(sectionNode);
246
+ sectionNodeMap.set(nodeId, sectionNode);
247
+ }
248
+ }
249
+ // Rebuild link edges at page level (project page links onto their first section)
250
+ const sectionEdges = [];
251
+ for (const e of data.edges) {
252
+ // find first section of source and target pages
253
+ const srcPage = pages.find((p) => p.path === e.source);
254
+ const tgtPage = pages.find((p) => p.path === e.target);
255
+ if (!srcPage || !tgtPage)
212
256
  continue;
213
- const vecJ = vectors[j];
214
- if (!vecJ)
257
+ const srcSec = srcPage.sections[0];
258
+ const tgtSec = tgtPage.sections[0];
259
+ if (!srcSec || !tgtSec)
215
260
  continue;
216
- const score = cosineSim(vecI, vecJ);
217
- if (score >= simThreshold) {
218
- sims.push({ j, score });
261
+ const srcId = `${srcPage.path}#${srcSec.anchor ?? "section"}`;
262
+ const tgtId = `${tgtPage.path}#${tgtSec.anchor ?? "section"}`;
263
+ sectionEdges.push({ source: srcId, target: tgtId, kind: e.kind, label: e.label });
264
+ sectionNodeMap.get(srcId)?.outgoing.push({ target: tgtId, label: e.label ?? null, kind: e.kind });
265
+ sectionNodeMap.get(tgtId)?.incoming.push({ source: srcId, label: e.label ?? null, kind: e.kind });
266
+ }
267
+ data.nodes = sectionNodes;
268
+ data.edges = sectionEdges;
269
+ // Compute semantic edges between section-units
270
+ for (let i = 0; i < units.length; i++) {
271
+ const vecI = vectors[i];
272
+ if (!vecI)
273
+ continue;
274
+ const sims = [];
275
+ for (let j = 0; j < units.length; j++) {
276
+ if (j === i)
277
+ continue;
278
+ const vecJ = vectors[j];
279
+ if (!vecJ)
280
+ continue;
281
+ const score = cosineSim(vecI, vecJ);
282
+ if (score >= simThreshold) {
283
+ sims.push({ j, score });
284
+ }
285
+ }
286
+ const topSimilar = [...sims]
287
+ .sort((a, b) => b.score - a.score)
288
+ .slice(0, simTopK)
289
+ .map(({ j, score }) => ({
290
+ path: units[j].id,
291
+ title: units[j].headingPath?.join(" > ") ?? units[j].id,
292
+ score: Math.round(score * 10000) / 10000,
293
+ }));
294
+ const node = sectionNodeMap.get(units[i].id);
295
+ if (node)
296
+ node.topSimilar = topSimilar;
297
+ for (const { j, score } of sims) {
298
+ if (j > i) {
299
+ semanticEdges.push({
300
+ source: units[i].id,
301
+ target: units[j].id,
302
+ score: Math.round(score * 10000) / 10000,
303
+ kind: "semantic",
304
+ });
305
+ }
219
306
  }
220
307
  }
221
- // topSimilar for side panel (no i<j constraint, full ranking)
222
- const topSimilar = [...sims]
223
- .sort((a, b) => b.score - a.score)
224
- .slice(0, simTopK)
225
- .map(({ j, score }) => ({
226
- path: pages[j].path,
227
- title: pages[j].title,
228
- score: Math.round(score * 10000) / 10000,
229
- }));
230
- const node = data.nodes.find((n) => n.id === pages[i].path);
231
- if (node)
232
- node.topSimilar = topSimilar;
233
- // Semantic edges: de-dup using i<j to avoid duplicates
234
- for (const { j, score } of sims) {
235
- if (j > i) {
236
- semanticEdges.push({
237
- source: pages[i].path,
238
- target: pages[j].path,
239
- score: Math.round(score * 10000) / 10000,
240
- kind: "semantic",
241
- });
308
+ }
309
+ else {
310
+ // Page mode: original behaviour
311
+ for (let i = 0; i < units.length; i++) {
312
+ const vecI = vectors[i];
313
+ if (!vecI)
314
+ continue;
315
+ const sims = [];
316
+ for (let j = 0; j < units.length; j++) {
317
+ if (j === i)
318
+ continue;
319
+ const vecJ = vectors[j];
320
+ if (!vecJ)
321
+ continue;
322
+ const score = cosineSim(vecI, vecJ);
323
+ if (score >= simThreshold) {
324
+ sims.push({ j, score });
325
+ }
326
+ }
327
+ const topSimilar = [...sims]
328
+ .sort((a, b) => b.score - a.score)
329
+ .slice(0, simTopK)
330
+ .map(({ j, score }) => ({
331
+ path: pages[j].path,
332
+ title: pages[j].title,
333
+ score: Math.round(score * 10000) / 10000,
334
+ }));
335
+ const node = data.nodes.find((n) => n.id === pages[i].path);
336
+ if (node)
337
+ node.topSimilar = topSimilar;
338
+ for (const { j, score } of sims) {
339
+ if (j > i) {
340
+ semanticEdges.push({
341
+ source: pages[i].path,
342
+ target: pages[j].path,
343
+ score: Math.round(score * 10000) / 10000,
344
+ kind: "semantic",
345
+ });
346
+ }
242
347
  }
243
348
  }
244
349
  }
245
350
  data.semanticEdges = semanticEdges;
246
351
  process.stderr.write(`[markdown-lsp] ${semanticEdges.length} semantic edges` +
247
- ` (threshold=${simThreshold}, topK=${simTopK}).\n`);
352
+ ` (threshold=${simThreshold}, topK=${simTopK}, granularity=${granularity}).\n`);
248
353
  }
249
354
  // ── Graph renderers ───────────────────────────────────────────────────────────
250
355
  function renderGraphJson(data, pretty) {
@@ -284,14 +389,15 @@ function renderGraphMermaid(data) {
284
389
  }
285
390
  return lines.join('\n');
286
391
  }
287
- function renderGraphHtml(data, docsDir, hasSemantic) {
392
+ function renderGraphHtml(data, docsDir, hasSemantic, granularity = "page") {
288
393
  const title = docsDir.split('/').filter(Boolean).pop() ?? docsDir;
394
+ const granularityLabel = granularity === "heading" ? " (sections)" : "";
289
395
  const jsonData = JSON.stringify(data);
290
396
  return `<!DOCTYPE html>
291
397
  <html lang="en">
292
398
  <head>
293
399
  <meta charset="utf-8">
294
- <title>Doc Graph — ${title}</title>
400
+ <title>Doc Graph — ${title}${granularityLabel}</title>
295
401
  <script src="https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js"></script>
296
402
  <style>
297
403
  * { box-sizing: border-box; margin: 0; padding: 0; }
@@ -354,7 +460,7 @@ function renderGraphHtml(data, docsDir, hasSemantic) {
354
460
  </head>
355
461
  <body>
356
462
  <div id="toolbar">
357
- <h1>Doc Graph — ${title}</h1>
463
+ <h1>Doc Graph — ${title}${granularityLabel}</h1>
358
464
  <span id="stats"></span>
359
465
  <label class="toggle-label toggle-links" title="Toggle link edges (solid lines)">
360
466
  <input type="checkbox" id="chk-links" checked> Links
@@ -553,8 +659,12 @@ document.getElementById('panel-close').addEventListener('click', () => {
553
659
 
554
660
  function openPanel(d) {
555
661
  panelTitle.textContent = d.title;
556
- panelPath.textContent = d.id;
557
- panelStats.textContent = d.charCount.toLocaleString()+' chars · '+d.sectionsCount+' sections';
662
+ panelPath.textContent = d.nodeType === 'heading'
663
+ ? (d.headingPath && d.headingPath.length > 1 ? d.headingPath.join(' ') : d.id)
664
+ : d.id;
665
+ panelStats.textContent = d.nodeType === 'heading'
666
+ ? (d.pagePath ? 'section of: '+d.pagePath+' · '+d.charCount.toLocaleString()+' chars' : d.charCount.toLocaleString()+' chars')
667
+ : d.charCount.toLocaleString()+' chars · '+d.sectionsCount+' sections';
558
668
  panelBody.innerHTML = '';
559
669
 
560
670
  // Sections
@@ -748,11 +858,278 @@ async function main() {
748
858
  process.stdout.write(USAGE + "\n");
749
859
  process.exit(0);
750
860
  }
751
- // LSP subcommand
861
+ // LSP subcommand — check for --help/-h before starting the server
752
862
  if (subcommand === "lsp" || subcommand === "serve") {
863
+ if (rest.includes("--help") || rest.includes("-h")) {
864
+ process.stdout.write(`lsp [--stdio]\nserve [--stdio]\n\n Start the LSP stdio server for editor integration.\n\n Options:\n --stdio Use stdio transport (default and recommended)\n\n Note: back-compat — --stdio | --node-ipc | --socket=<n> as first arg\n also starts the LSP server.\n\n Examples:\n markdown-lsp lsp --stdio\n markdown-lsp serve --stdio\n`);
865
+ process.exit(0);
866
+ }
753
867
  await startLspServer();
754
868
  return;
755
869
  }
870
+ // Per-subcommand help strings
871
+ const SUB_USAGE = {
872
+ "workspace-outline": `
873
+ workspace-outline <docs-dir> [--prefix <p>] [--limit <n>]
874
+
875
+ List all pages in the workspace with metadata.
876
+
877
+ Arguments:
878
+ <docs-dir> Path to the documentation directory
879
+
880
+ Options:
881
+ --prefix <p> Filter pages whose path starts with <p>
882
+ --limit <n> Return at most <n> results
883
+ --pretty Pretty-print JSON output
884
+
885
+ Examples:
886
+ markdown-lsp workspace-outline ./docs
887
+ markdown-lsp workspace-outline ./docs --prefix api/ --limit 20
888
+ `.trim(),
889
+ "outline": `
890
+ outline <docs-dir> <page>
891
+
892
+ Show the heading outline of a single page.
893
+
894
+ Arguments:
895
+ <docs-dir> Path to the documentation directory
896
+ <page> Relative path to the page (e.g. introduction.md)
897
+
898
+ Options:
899
+ --pretty Pretty-print JSON output
900
+
901
+ Examples:
902
+ markdown-lsp outline ./docs introduction.md
903
+ `.trim(),
904
+ "search-text": `
905
+ search-text <docs-dir> <query> [--mode ranked|verbatim] [--regex]
906
+ [--case-sensitive] [--prefix <p>] [--limit <n>] [--context <n>]
907
+
908
+ Full-text search across all pages.
909
+
910
+ Arguments:
911
+ <docs-dir> Path to the documentation directory
912
+ <query> Search query (natural language or pattern)
913
+
914
+ Options:
915
+ --mode ranked Natural-language ranked search (default)
916
+ --mode verbatim Exact substring search
917
+ --regex Treat query as a regular expression
918
+ --case-sensitive Case-sensitive matching
919
+ --prefix <p> Filter pages whose path starts with <p>
920
+ --limit <n> Return at most <n> results
921
+ --context <n> Characters of context around each match
922
+ --pretty Pretty-print JSON output
923
+
924
+ Examples:
925
+ markdown-lsp search-text ./docs "getting started"
926
+ markdown-lsp search-text ./docs "webhook signing" --mode verbatim --limit 5
927
+ markdown-lsp search-text ./docs "auth.*token" --regex
928
+ `.trim(),
929
+ "search-symbols": `
930
+ search-symbols <docs-dir> <query> [--limit <n>]
931
+
932
+ Fuzzy subsequence search across all headings.
933
+
934
+ Arguments:
935
+ <docs-dir> Path to the documentation directory
936
+ <query> Heading search query
937
+
938
+ Options:
939
+ --limit <n> Return at most <n> results
940
+ --pretty Pretty-print JSON output
941
+
942
+ Examples:
943
+ markdown-lsp search-symbols ./docs "webhook" --limit 10
944
+ `.trim(),
945
+ "search-paths": `
946
+ search-paths <docs-dir> <glob>
947
+
948
+ List pages whose paths match a glob pattern (*, **, ?).
949
+
950
+ Arguments:
951
+ <docs-dir> Path to the documentation directory
952
+ <glob> Glob pattern to match against page paths
953
+
954
+ Options:
955
+ --pretty Pretty-print JSON output
956
+
957
+ Examples:
958
+ markdown-lsp search-paths ./docs "ai/*.md"
959
+ markdown-lsp search-paths ./docs "**/*auth*"
960
+ `.trim(),
961
+ "links-to": `
962
+ links-to <docs-dir> <page>
963
+
964
+ Show all pages that link to <page>.
965
+
966
+ Arguments:
967
+ <docs-dir> Path to the documentation directory
968
+ <page> Relative path to the target page
969
+
970
+ Options:
971
+ --pretty Pretty-print JSON output
972
+
973
+ Examples:
974
+ markdown-lsp links-to ./docs quick-start.md
975
+ `.trim(),
976
+ "links-from": `
977
+ links-from <docs-dir> <page>
978
+
979
+ Show all links that originate from <page>.
980
+
981
+ Arguments:
982
+ <docs-dir> Path to the documentation directory
983
+ <page> Relative path to the source page
984
+
985
+ Options:
986
+ --pretty Pretty-print JSON output
987
+
988
+ Examples:
989
+ markdown-lsp links-from ./docs README.md
990
+ `.trim(),
991
+ "resolve-link": `
992
+ resolve-link <docs-dir> <from-page> <link-text>
993
+
994
+ Resolve a specific link text from a given page.
995
+
996
+ Arguments:
997
+ <docs-dir> Path to the documentation directory
998
+ <from-page> Relative path to the source page
999
+ <link-text> Exact link text to resolve
1000
+
1001
+ Options:
1002
+ --pretty Pretty-print JSON output
1003
+
1004
+ Examples:
1005
+ markdown-lsp resolve-link ./docs README.md "Getting Started"
1006
+ `.trim(),
1007
+ "get-section": `
1008
+ get-section <docs-dir> <page> <anchor>
1009
+
1010
+ Retrieve a section by its anchor slug.
1011
+
1012
+ Arguments:
1013
+ <docs-dir> Path to the documentation directory
1014
+ <page> Relative path to the page
1015
+ <anchor> Section anchor slug (e.g. "quick-links")
1016
+
1017
+ Options:
1018
+ --pretty Pretty-print JSON output
1019
+
1020
+ Examples:
1021
+ markdown-lsp get-section ./docs overview.md "quick-links"
1022
+ `.trim(),
1023
+ "graph": `
1024
+ graph <docs-dir> [--format json|dot|mermaid|html] [--out <file>]
1025
+ [--semantic] [--granularity page|heading] [--sim-threshold <0-1>]
1026
+ [--sim-top-k <n>] [--model <embedding-model>]
1027
+
1028
+ Export the documentation link graph.
1029
+
1030
+ Arguments:
1031
+ <docs-dir> Path to the documentation directory
1032
+
1033
+ Options:
1034
+ --format json JSON output with nodes/edges (default)
1035
+ --format dot Graphviz DOT format
1036
+ --format mermaid Mermaid diagram format
1037
+ --format html Self-contained interactive D3 visualisation
1038
+ --out <file> Write output to file instead of stdout
1039
+ --semantic Overlay AI-powered similarity edges
1040
+ --granularity page Graph nodes = pages (default)
1041
+ --granularity heading Graph nodes = sections (heading-level)
1042
+ --sim-threshold <0-1> Minimum cosine similarity (default: 0.75)
1043
+ --sim-top-k <n> Max semantic neighbours per node (default: 5)
1044
+ --model <model> Embedding model override
1045
+ --pretty Pretty-print JSON output
1046
+
1047
+ Note: --semantic requires OPENROUTER_API_KEY or AI_GATEWAY_API_KEY.
1048
+ Note: --granularity line is NOT supported for graph (too many nodes);
1049
+ use page or heading.
1050
+
1051
+ Examples:
1052
+ markdown-lsp graph ./docs --format json --pretty
1053
+ markdown-lsp graph ./docs --format html --out graph.html
1054
+ markdown-lsp graph ./docs --format dot | dot -Tsvg > graph.svg
1055
+ markdown-lsp graph ./docs --format html --semantic --out graph.html
1056
+ markdown-lsp graph ./docs --format html --semantic --granularity heading --out graph-headings.html
1057
+ `.trim(),
1058
+ "semantic-search": `
1059
+ semantic-search <docs-dir> <query> [--limit <n>] [--model <embedding-model>]
1060
+ [--granularity page|heading|line]
1061
+
1062
+ AI-powered semantic search using embeddings.
1063
+
1064
+ Arguments:
1065
+ <docs-dir> Path to the documentation directory
1066
+ <query> Natural-language search query
1067
+
1068
+ Options:
1069
+ --limit <n> Return at most <n> results (default: 10)
1070
+ --model <m> Embedding model override
1071
+ --granularity page Search whole pages (default)
1072
+ --granularity heading Search within sections (returns anchor + headingPath)
1073
+ --granularity line Search paragraph blocks (returns line number)
1074
+ --pretty Pretty-print JSON output
1075
+
1076
+ Note: requires OPENROUTER_API_KEY or AI_GATEWAY_API_KEY.
1077
+ Default embedding model: openai/text-embedding-3-small.
1078
+ Results are cached in .markdown-lsp-cache/.
1079
+ Run "index" first to pre-warm the cache (saves tokens on repeated searches).
1080
+
1081
+ Examples:
1082
+ markdown-lsp semantic-search ./docs "how to set up webhooks" --limit 5
1083
+ markdown-lsp semantic-search ./docs "authentication" --model openai/text-embedding-3-small
1084
+ markdown-lsp semantic-search ./docs "webhook auth" --granularity heading --limit 10
1085
+ markdown-lsp semantic-search ./docs "rate limit error" --granularity line --limit 5
1086
+ `.trim(),
1087
+ "index": `
1088
+ index <docs-dir> [--granularity page|heading|line] [--model <embedding-model>]
1089
+
1090
+ Build the persistent semantic index — embeds all doc units at the chosen
1091
+ granularity and caches them to .markdown-lsp-cache/. Subsequent
1092
+ semantic-search and graph --semantic calls reuse the cache and only
1093
+ embed the query (1 API call instead of N).
1094
+
1095
+ Idempotent: re-running without doc changes costs 0 API calls (all hits).
1096
+ Changed files are re-embedded automatically (cache key = sha256(model+text)).
1097
+
1098
+ Arguments:
1099
+ <docs-dir> Path to the documentation directory
1100
+
1101
+ Options:
1102
+ --granularity page Index whole pages (default)
1103
+ --granularity heading Index sections (recommended for precision)
1104
+ --granularity line Index paragraph blocks
1105
+ --model <m> Embedding model override
1106
+ --pretty Pretty-print progress JSON
1107
+
1108
+ Note: requires OPENROUTER_API_KEY or AI_GATEWAY_API_KEY.
1109
+
1110
+ Examples:
1111
+ markdown-lsp index ./docs --granularity heading
1112
+ markdown-lsp index ./docs --granularity line --model openai/text-embedding-3-small
1113
+ `.trim(),
1114
+ "lsp": `
1115
+ lsp [--stdio]
1116
+ serve [--stdio]
1117
+
1118
+ Start the LSP stdio server for editor integration.
1119
+
1120
+ Options:
1121
+ --stdio Use stdio transport (default and recommended)
1122
+
1123
+ Note: back-compat — --stdio | --node-ipc | --socket=<n> as first arg
1124
+ also starts the LSP server.
1125
+
1126
+ Examples:
1127
+ markdown-lsp lsp --stdio
1128
+ markdown-lsp serve --stdio
1129
+ `.trim(),
1130
+ };
1131
+ // Aliases
1132
+ SUB_USAGE["serve"] = SUB_USAGE["lsp"];
756
1133
  // Parse global flags from the remaining args
757
1134
  let pretty = false;
758
1135
  const filteredRest = [];
@@ -762,6 +1139,17 @@ async function main() {
762
1139
  else
763
1140
  filteredRest.push(arg);
764
1141
  }
1142
+ // Per-subcommand --help / -h: intercept before parseArgs sees it
1143
+ if (filteredRest.includes("--help") || filteredRest.includes("-h")) {
1144
+ const subUsage = SUB_USAGE[subcommand];
1145
+ if (subUsage) {
1146
+ process.stdout.write(subUsage + "\n");
1147
+ }
1148
+ else {
1149
+ process.stdout.write(USAGE + "\n");
1150
+ }
1151
+ process.exit(0);
1152
+ }
765
1153
  switch (subcommand) {
766
1154
  case "workspace-outline": {
767
1155
  const { values, positionals } = parseArgs({
@@ -916,6 +1304,7 @@ async function main() {
916
1304
  format: { type: "string" },
917
1305
  out: { type: "string" },
918
1306
  semantic: { type: "boolean" },
1307
+ granularity: { type: "string" },
919
1308
  "sim-threshold": { type: "string" },
920
1309
  "sim-top-k": { type: "string" },
921
1310
  model: { type: "string" },
@@ -925,6 +1314,12 @@ async function main() {
925
1314
  const docsDir = positionals[0] ?? die("graph requires <docs-dir>");
926
1315
  const format = (values.format ?? "json");
927
1316
  const semantic = values.semantic ?? false;
1317
+ const rawGranularity = values.granularity ?? "page";
1318
+ if (rawGranularity === "line") {
1319
+ process.stderr.write("Error: --granularity line is not supported for graph (too many nodes — use page or heading).\n");
1320
+ process.exit(1);
1321
+ }
1322
+ const granularity = rawGranularity;
928
1323
  const simThreshold = values["sim-threshold"] !== undefined
929
1324
  ? parseFloat(values["sim-threshold"])
930
1325
  : 0.75;
@@ -937,7 +1332,7 @@ async function main() {
937
1332
  const data = buildGraphExport(raw);
938
1333
  if (semantic) {
939
1334
  try {
940
- await addSemanticEdges(data, raw.pages, modelOverride, simThreshold, simTopK);
1335
+ await addSemanticEdges(data, raw.pages, modelOverride, simThreshold, simTopK, granularity);
941
1336
  }
942
1337
  catch (err) {
943
1338
  const msg = err instanceof Error ? err.message : String(err);
@@ -977,7 +1372,7 @@ async function main() {
977
1372
  result = renderGraphMermaid(data);
978
1373
  break;
979
1374
  case "html":
980
- result = renderGraphHtml(data, docsDir, semantic && data.semanticEdges.length > 0);
1375
+ result = renderGraphHtml(data, docsDir, semantic && data.semanticEdges.length > 0, granularity);
981
1376
  break;
982
1377
  default:
983
1378
  die(`Unknown format: ${format}. Use json, dot, mermaid, or html.`);
@@ -997,6 +1392,7 @@ async function main() {
997
1392
  options: {
998
1393
  limit: { type: "string" },
999
1394
  model: { type: "string" },
1395
+ granularity: { type: "string" },
1000
1396
  },
1001
1397
  allowPositionals: true,
1002
1398
  });
@@ -1004,43 +1400,102 @@ async function main() {
1004
1400
  const query = positionals[1] ?? die("semantic-search requires <query>");
1005
1401
  const limit = values.limit !== undefined ? parseInt(values.limit, 10) : 10;
1006
1402
  const modelOverride = values.model;
1403
+ const granularity = (values.granularity ?? "page");
1007
1404
  // Check API key before doing any work
1008
1405
  const { assertApiKey } = await import("./ai/config.js");
1009
1406
  assertApiKey();
1010
1407
  const { embedTexts, embedOne } = await import("./ai/embeddings.js");
1408
+ const { unitize } = await import("./ai/granular.js");
1011
1409
  const graph = buildGraph(docsDir);
1012
- const pages = graph.pages;
1013
- // Build embedding texts (title + first 2000 chars of content per page)
1014
- const pageTexts = pages.map((p) => {
1015
- const titlePart = p.title ? p.title + "\n\n" : "";
1016
- return titlePart + p.content.slice(0, 2000);
1017
- });
1018
- // Embed all pages (cached) and the query
1019
- const [pageEmbeddings, queryVec] = await Promise.all([
1020
- embedTexts(pageTexts, modelOverride, true),
1410
+ const units = unitize(graph.pages, granularity);
1411
+ process.stderr.write(`[markdown-lsp] semantic-search: ${units.length} units at granularity="${granularity}"\n`);
1412
+ const unitTexts = units.map((u) => u.text);
1413
+ // Embed all units (cached) and the query in parallel
1414
+ const [unitEmbeddings, queryVec] = await Promise.all([
1415
+ embedTexts(unitTexts, modelOverride, true),
1021
1416
  embedOne(query, modelOverride),
1022
1417
  ]);
1023
- // Score each page
1024
- const scored = pages.map((p, i) => {
1025
- const vec = pageEmbeddings.vectors[i];
1418
+ if (unitEmbeddings.tokensUsed > 0) {
1419
+ process.stderr.write(`[markdown-lsp] Embeddings computed (${unitEmbeddings.tokensUsed} tokens).\n`);
1420
+ }
1421
+ else {
1422
+ process.stderr.write(`[markdown-lsp] All embeddings from cache (0 API tokens for docs).\n`);
1423
+ }
1424
+ // Score each unit
1425
+ const scored = units.map((u, i) => {
1426
+ const vec = unitEmbeddings.vectors[i];
1026
1427
  if (!vec)
1027
- return { page: p, score: 0 };
1028
- return { page: p, score: cosineSim(queryVec, vec) };
1428
+ return { unit: u, score: 0 };
1429
+ return { unit: u, score: cosineSim(queryVec, vec) };
1029
1430
  });
1030
1431
  scored.sort((a, b) => b.score - a.score);
1031
1432
  const topN = scored.slice(0, limit);
1032
- const results = topN.map(({ page, score }) => {
1033
- const snippet = page.content.slice(0, 200).replace(/\s+/g, " ").trim();
1034
- return {
1035
- pagePath: page.path,
1036
- pageTitle: page.title ?? page.path,
1433
+ const results = topN.map(({ unit, score }) => {
1434
+ const snippet = unit.text.slice(0, 200).replace(/\s+/g, " ").trim();
1435
+ const snippetOut = snippet.length < unit.text.length ? snippet + "…" : snippet;
1436
+ const base = {
1437
+ level: unit.level,
1438
+ pagePath: unit.pagePath,
1439
+ pageTitle: unit.pageTitle ?? unit.pagePath,
1037
1440
  score: Math.round(score * 10000) / 10000,
1038
- snippet: snippet.length < page.content.length ? snippet + "…" : snippet,
1441
+ snippet: snippetOut,
1039
1442
  };
1443
+ if (unit.level === "heading") {
1444
+ return { ...base, anchor: unit.anchor ?? null, headingPath: unit.headingPath ?? [] };
1445
+ }
1446
+ if (unit.level === "line") {
1447
+ return { ...base, line: unit.line ?? 0 };
1448
+ }
1449
+ return base;
1040
1450
  });
1041
1451
  out(results, pretty);
1042
1452
  break;
1043
1453
  }
1454
+ case "index": {
1455
+ const { values, positionals } = parseArgs({
1456
+ args: filteredRest,
1457
+ options: {
1458
+ granularity: { type: "string" },
1459
+ model: { type: "string" },
1460
+ },
1461
+ allowPositionals: true,
1462
+ });
1463
+ const docsDir = positionals[0] ?? die("index requires <docs-dir>");
1464
+ const granularity = (values.granularity ?? "page");
1465
+ const modelOverride = values.model;
1466
+ // Check API key
1467
+ const { assertApiKey } = await import("./ai/config.js");
1468
+ assertApiKey();
1469
+ const { embedTexts } = await import("./ai/embeddings.js");
1470
+ const { unitize } = await import("./ai/granular.js");
1471
+ const graph = buildGraph(docsDir);
1472
+ const units = unitize(graph.pages, granularity);
1473
+ process.stderr.write(`[markdown-lsp] index: ${units.length} units at granularity="${granularity}"` +
1474
+ ` (model: ${modelOverride ?? "openai/text-embedding-3-small"})\n`);
1475
+ const unitTexts = units.map((u) => u.text);
1476
+ const startTime = Date.now();
1477
+ const { vectors, tokensUsed } = await embedTexts(unitTexts, modelOverride, true);
1478
+ const elapsed = Date.now() - startTime;
1479
+ const indexed = vectors.filter((v) => v !== null).length;
1480
+ if (tokensUsed > 0) {
1481
+ process.stderr.write(`[markdown-lsp] index: ${indexed}/${units.length} units embedded,` +
1482
+ ` ${tokensUsed} new tokens used, ${elapsed}ms\n`);
1483
+ }
1484
+ else {
1485
+ process.stderr.write(`[markdown-lsp] index: all ${indexed} units from cache — 0 API tokens (already indexed)\n`);
1486
+ }
1487
+ out({
1488
+ docsDir,
1489
+ granularity,
1490
+ totalUnits: units.length,
1491
+ newlyEmbedded: Math.round(tokensUsed > 0 ? indexed : 0),
1492
+ fromCache: tokensUsed === 0 ? indexed : units.length - indexed,
1493
+ tokensUsed,
1494
+ elapsedMs: elapsed,
1495
+ model: modelOverride ?? "openai/text-embedding-3-small",
1496
+ }, pretty);
1497
+ break;
1498
+ }
1044
1499
  default:
1045
1500
  process.stderr.write(`Unknown subcommand: ${subcommand}\n\n${USAGE}\n`);
1046
1501
  process.exit(1);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "markdown-lsp",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Language Server Protocol implementation for Markdown with optional AI-canonicalized glossary that resolves synonyms across docs",
5
5
  "type": "module",
6
6
  "bin": {