markdown-lsp 1.2.1 → 1.3.1

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
49
51
 
50
- # AI semantic search
51
- OPENROUTER_API_KEY=sk-or-... npx markdown-lsp semantic-search ./docs "how to configure webhooks"
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
58
+
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,74 @@ 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
188
-
189
- **Semantic flags:**
195
+ **Token cost comparison:**
190
196
 
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 |
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 |
197
203
 
198
- **Caching:** embeddings are cached in `.markdown-lsp-cache/embeddings/` — the second run is instant with 0 API calls.
204
+ ### Incremental & token-saving: re-run `index` anytime
199
205
 
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.
206
+ `index ./docs` is incremental by design only changed units are re-embedded, unchanged ones are
207
+ served from the local cache (`.markdown-lsp-cache/embeddings/`). You can call it as frequently as
208
+ you like without wasting API tokens on content that hasn't changed.
209
+
210
+ To automate re-indexing, the recommended approach is a **git hook** (no extra deps, no debounce
211
+ complexity): a `post-merge` or `post-checkout` hook runs `npx markdown-lsp index ./docs` automatically
212
+ after pulls and branch switches. For real-time updates while writing docs, a debounced watch script
213
+ (stdlib `fs.watch` with a 3-5 s debounce) works well. CI users can cache `.markdown-lsp-cache/`
214
+ via `actions/cache` so the index survives across runs. See the [skill file](.claude/skills/markdown-lsp/SKILL.md)
215
+ for ready-to-use snippets for all three patterns.
201
216
 
202
217
  ---
203
218
 
204
- ## Semantic search
219
+ ## Semantic search with granularity
205
220
 
206
- AI-powered semantic search using text embeddings — finds conceptually related pages even if they
207
- don't contain the exact query words.
221
+ AI-powered semantic search using text embeddings — finds conceptually related content even if it
222
+ doesn't contain the exact query words.
208
223
 
209
224
  ```bash
210
- # Requires OPENROUTER_API_KEY (OpenRouter) or AI_GATEWAY_API_KEY (Vercel AI Gateway)
225
+ # Page-level (default) searches whole pages
211
226
  OPENROUTER_API_KEY=sk-or-... markdown-lsp semantic-search ./docs "how to configure webhooks" --limit 5
212
227
 
228
+ # Heading-level — searches within sections (returns anchor + headingPath)
229
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp semantic-search ./docs "webhook authentication" \
230
+ --granularity heading --limit 10
231
+
232
+ # Line-level — searches paragraph blocks (returns line number)
233
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp semantic-search ./docs "set OPENROUTER_API_KEY" \
234
+ --granularity line --limit 5
235
+
213
236
  # Override embedding model
214
237
  markdown-lsp semantic-search ./docs "authentication" --model openai/text-embedding-3-small --limit 3
215
238
  ```
216
239
 
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
240
+ **Result shape by granularity:**
241
+
242
+ - `page`: `[{ level: "page", pagePath, pageTitle, score, snippet }]`
243
+ - `heading`: `[{ level: "heading", pagePath, pageTitle, anchor, headingPath, score, snippet }]`
244
+ - `line`: `[{ level: "line", pagePath, pageTitle, line, score, snippet }]`
220
245
 
221
246
  **Environment variables:**
222
247
 
@@ -228,6 +253,45 @@ markdown-lsp semantic-search ./docs "authentication" --model openai/text-embeddi
228
253
 
229
254
  ---
230
255
 
256
+ ## Semantic graph (v1.2+)
257
+
258
+ Overlay AI-powered semantic similarity edges on top of the link graph.
259
+
260
+ ```bash
261
+ # Page-level semantic graph (classic)
262
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp graph ./docs --format html --semantic --out graph.html
263
+
264
+ # Heading-level: graph nodes = sections, semantic edges between sections
265
+ OPENROUTER_API_KEY=sk-or-... markdown-lsp graph ./docs --format html --semantic \
266
+ --granularity heading --sim-threshold 0.75 --sim-top-k 5 --out graph-headings.html
267
+ ```
268
+
269
+ **What you get in the HTML:**
270
+
271
+ - Two types of edges — **solid lines** (explicit markdown links) and **dashed amber lines** (semantic similarity)
272
+ - **Checkboxes** in the toolbar to toggle each edge type independently
273
+ - **Click any node** to open a side-panel showing: title, path, sections, outgoing links, incoming links, and top semantically similar pages/sections with scores
274
+ - Clicking a linked page in the side-panel focuses the graph on that node
275
+ - Background click closes the panel and clears selection
276
+
277
+ **Semantic flags:**
278
+
279
+ | Flag | Default | Description |
280
+ |---|---|---|
281
+ | `--semantic` | off | Enable AI similarity edges |
282
+ | `--granularity` | `page` | `page` (nodes = pages) or `heading` (nodes = sections) |
283
+ | `--sim-threshold` | `0.75` | Minimum cosine similarity score to draw an edge |
284
+ | `--sim-top-k` | `5` | Max semantic neighbours per node |
285
+ | `--model` | `openai/text-embedding-3-small` | Embedding model override |
286
+
287
+ **Note:** `--granularity line` is not supported for `graph` (too many nodes). Use `page` or `heading`.
288
+
289
+ **Caching:** embeddings are cached in `.markdown-lsp-cache/embeddings/` — the second run is instant with 0 API calls.
290
+
291
+ **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.
292
+
293
+ ---
294
+
231
295
  ## LSP mode (editor integration)
232
296
 
233
297
  `markdown-lsp` also works as a Language Server Protocol server for editors (VS Code, Zed, Neovim, etc.).
@@ -301,7 +365,9 @@ export AI_GATEWAY_API_KEY=... # Vercel AI Gateway
301
365
 
302
366
  - **CLI** — `node:util parseArgs`, zero extra deps, reads `.md` files into an in-memory graph
303
367
  - **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)
368
+ - **Granular semantics** — `unitize(pages, granularity)` splits docs into page/heading/line units; `splitParagraphs()` groups by blank lines
369
+ - **Persistent index** — `index` command pre-caches all embeddings; `embedTexts()` checks sha256 cache per unit before hitting the API
370
+ - **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
371
  - **LSP** — `vscode-languageserver/node` over stdio; requires Postgres (Drizzle ORM, `mdlsp_` prefix)
306
372
  - **AI layer** (opt-in) — pgvector cosine search on canonical-term embeddings; `text-embedding-3-small` via Vercel AI Gateway
307
373
  - **Bridge** — pure in-memory search (searchText, searchTextRanked, searchSymbols, searchPaths, listPages)
@@ -326,8 +392,9 @@ pnpm test
326
392
  - **M3 — CLI-first interface** ✅ (v1.0.0)
327
393
  - **M4 — Graph export + HTML D3 visualisation** ✅ (v1.1.0)
328
394
  - **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
395
+ - **M6 — Granular semantics + persistent index** (v1.3.0)
396
+ - M7 — User overrides for the glossary (merge / split / rename / add_synonym)
397
+ - M8 — Docsbook integration
331
398
 
332
399
  ---
333
400
 
@@ -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":"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"}
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.1 — 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)
260
+ continue;
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)
215
273
  continue;
216
- const score = cosineSim(vecI, vecJ);
217
- if (score >= simThreshold) {
218
- sims.push({ j, score });
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
@@ -912,8 +1022,8 @@ get-section <docs-dir> <page> <anchor>
912
1022
  `.trim(),
913
1023
  "graph": `
914
1024
  graph <docs-dir> [--format json|dot|mermaid|html] [--out <file>]
915
- [--semantic] [--sim-threshold <0-1>] [--sim-top-k <n>]
916
- [--model <embedding-model>]
1025
+ [--semantic] [--granularity page|heading] [--sim-threshold <0-1>]
1026
+ [--sim-top-k <n>] [--model <embedding-model>]
917
1027
 
918
1028
  Export the documentation link graph.
919
1029
 
@@ -927,21 +1037,27 @@ graph <docs-dir> [--format json|dot|mermaid|html] [--out <file>]
927
1037
  --format html Self-contained interactive D3 visualisation
928
1038
  --out <file> Write output to file instead of stdout
929
1039
  --semantic Overlay AI-powered similarity edges
1040
+ --granularity page Graph nodes = pages (default)
1041
+ --granularity heading Graph nodes = sections (heading-level)
930
1042
  --sim-threshold <0-1> Minimum cosine similarity (default: 0.75)
931
1043
  --sim-top-k <n> Max semantic neighbours per node (default: 5)
932
1044
  --model <model> Embedding model override
933
1045
  --pretty Pretty-print JSON output
934
1046
 
935
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.
936
1050
 
937
1051
  Examples:
938
1052
  markdown-lsp graph ./docs --format json --pretty
939
1053
  markdown-lsp graph ./docs --format html --out graph.html
940
1054
  markdown-lsp graph ./docs --format dot | dot -Tsvg > graph.svg
941
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
942
1057
  `.trim(),
943
1058
  "semantic-search": `
944
1059
  semantic-search <docs-dir> <query> [--limit <n>] [--model <embedding-model>]
1060
+ [--granularity page|heading|line]
945
1061
 
946
1062
  AI-powered semantic search using embeddings.
947
1063
 
@@ -950,17 +1066,50 @@ semantic-search <docs-dir> <query> [--limit <n>] [--model <embedding-model>]
950
1066
  <query> Natural-language search query
951
1067
 
952
1068
  Options:
953
- --limit <n> Return at most <n> results (default: 10)
954
- --model <m> Embedding model override
955
- --pretty Pretty-print JSON output
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
956
1075
 
957
1076
  Note: requires OPENROUTER_API_KEY or AI_GATEWAY_API_KEY.
958
1077
  Default embedding model: openai/text-embedding-3-small.
959
1078
  Results are cached in .markdown-lsp-cache/.
1079
+ Run "index" first to pre-warm the cache (saves tokens on repeated searches).
960
1080
 
961
1081
  Examples:
962
1082
  markdown-lsp semantic-search ./docs "how to set up webhooks" --limit 5
963
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
964
1113
  `.trim(),
965
1114
  "lsp": `
966
1115
  lsp [--stdio]
@@ -979,7 +1128,7 @@ serve [--stdio]
979
1128
  markdown-lsp serve --stdio
980
1129
  `.trim(),
981
1130
  };
982
- // Alias: "serve" shares lsp help
1131
+ // Aliases
983
1132
  SUB_USAGE["serve"] = SUB_USAGE["lsp"];
984
1133
  // Parse global flags from the remaining args
985
1134
  let pretty = false;
@@ -1155,6 +1304,7 @@ serve [--stdio]
1155
1304
  format: { type: "string" },
1156
1305
  out: { type: "string" },
1157
1306
  semantic: { type: "boolean" },
1307
+ granularity: { type: "string" },
1158
1308
  "sim-threshold": { type: "string" },
1159
1309
  "sim-top-k": { type: "string" },
1160
1310
  model: { type: "string" },
@@ -1164,6 +1314,12 @@ serve [--stdio]
1164
1314
  const docsDir = positionals[0] ?? die("graph requires <docs-dir>");
1165
1315
  const format = (values.format ?? "json");
1166
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;
1167
1323
  const simThreshold = values["sim-threshold"] !== undefined
1168
1324
  ? parseFloat(values["sim-threshold"])
1169
1325
  : 0.75;
@@ -1176,7 +1332,7 @@ serve [--stdio]
1176
1332
  const data = buildGraphExport(raw);
1177
1333
  if (semantic) {
1178
1334
  try {
1179
- await addSemanticEdges(data, raw.pages, modelOverride, simThreshold, simTopK);
1335
+ await addSemanticEdges(data, raw.pages, modelOverride, simThreshold, simTopK, granularity);
1180
1336
  }
1181
1337
  catch (err) {
1182
1338
  const msg = err instanceof Error ? err.message : String(err);
@@ -1216,7 +1372,7 @@ serve [--stdio]
1216
1372
  result = renderGraphMermaid(data);
1217
1373
  break;
1218
1374
  case "html":
1219
- result = renderGraphHtml(data, docsDir, semantic && data.semanticEdges.length > 0);
1375
+ result = renderGraphHtml(data, docsDir, semantic && data.semanticEdges.length > 0, granularity);
1220
1376
  break;
1221
1377
  default:
1222
1378
  die(`Unknown format: ${format}. Use json, dot, mermaid, or html.`);
@@ -1236,6 +1392,7 @@ serve [--stdio]
1236
1392
  options: {
1237
1393
  limit: { type: "string" },
1238
1394
  model: { type: "string" },
1395
+ granularity: { type: "string" },
1239
1396
  },
1240
1397
  allowPositionals: true,
1241
1398
  });
@@ -1243,43 +1400,102 @@ serve [--stdio]
1243
1400
  const query = positionals[1] ?? die("semantic-search requires <query>");
1244
1401
  const limit = values.limit !== undefined ? parseInt(values.limit, 10) : 10;
1245
1402
  const modelOverride = values.model;
1403
+ const granularity = (values.granularity ?? "page");
1246
1404
  // Check API key before doing any work
1247
1405
  const { assertApiKey } = await import("./ai/config.js");
1248
1406
  assertApiKey();
1249
1407
  const { embedTexts, embedOne } = await import("./ai/embeddings.js");
1408
+ const { unitize } = await import("./ai/granular.js");
1250
1409
  const graph = buildGraph(docsDir);
1251
- const pages = graph.pages;
1252
- // Build embedding texts (title + first 2000 chars of content per page)
1253
- const pageTexts = pages.map((p) => {
1254
- const titlePart = p.title ? p.title + "\n\n" : "";
1255
- return titlePart + p.content.slice(0, 2000);
1256
- });
1257
- // Embed all pages (cached) and the query
1258
- const [pageEmbeddings, queryVec] = await Promise.all([
1259
- 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),
1260
1416
  embedOne(query, modelOverride),
1261
1417
  ]);
1262
- // Score each page
1263
- const scored = pages.map((p, i) => {
1264
- 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];
1265
1427
  if (!vec)
1266
- return { page: p, score: 0 };
1267
- return { page: p, score: cosineSim(queryVec, vec) };
1428
+ return { unit: u, score: 0 };
1429
+ return { unit: u, score: cosineSim(queryVec, vec) };
1268
1430
  });
1269
1431
  scored.sort((a, b) => b.score - a.score);
1270
1432
  const topN = scored.slice(0, limit);
1271
- const results = topN.map(({ page, score }) => {
1272
- const snippet = page.content.slice(0, 200).replace(/\s+/g, " ").trim();
1273
- return {
1274
- pagePath: page.path,
1275
- 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,
1276
1440
  score: Math.round(score * 10000) / 10000,
1277
- snippet: snippet.length < page.content.length ? snippet + "…" : snippet,
1441
+ snippet: snippetOut,
1278
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;
1279
1450
  });
1280
1451
  out(results, pretty);
1281
1452
  break;
1282
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
+ }
1283
1499
  default:
1284
1500
  process.stderr.write(`Unknown subcommand: ${subcommand}\n\n${USAGE}\n`);
1285
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.1",
3
+ "version": "1.3.1",
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": {