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 +97 -43
- package/dist/ai/granular.d.ts +32 -0
- package/dist/ai/granular.d.ts.map +1 -0
- package/dist/ai/granular.js +109 -0
- package/dist/ai/granular.js.map +1 -0
- package/dist/cli.js +534 -79
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
[](https://github.com/Docsbook-io/markdown-lsp/blob/main/LICENSE)
|
|
7
7
|
[](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.
|
|
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
|
-
#
|
|
48
|
-
|
|
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
|
-
#
|
|
51
|
-
OPENROUTER_API_KEY=sk-or-... npx markdown-lsp
|
|
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
|
-
| `
|
|
87
|
-
| `
|
|
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
|
-
##
|
|
177
|
+
## Token-saving workflow: index once, search cheap
|
|
168
178
|
|
|
169
|
-
|
|
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
|
|
173
|
-
OPENROUTER_API_KEY=sk-or-... markdown-lsp
|
|
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
|
-
#
|
|
176
|
-
OPENROUTER_API_KEY=sk-or-... markdown-lsp
|
|
177
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
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
|
-
|
|
190
|
-
|
|
191
|
-
| Flag | Default | Description |
|
|
197
|
+
| Scenario | API round-trips | Relative cost |
|
|
192
198
|
|---|---|---|
|
|
193
|
-
|
|
|
194
|
-
|
|
|
195
|
-
|
|
|
196
|
-
|
|
|
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
|
|
207
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
218
|
-
|
|
219
|
-
-
|
|
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
|
-
- **
|
|
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 —
|
|
330
|
-
- M7 —
|
|
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":"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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.
|
|
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] [--
|
|
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
|
-
#
|
|
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
|
|
191
|
-
|
|
192
|
-
|
|
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
|
|
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
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
|
|
214
|
-
|
|
257
|
+
const srcSec = srcPage.sections[0];
|
|
258
|
+
const tgtSec = tgtPage.sections[0];
|
|
259
|
+
if (!srcSec || !tgtSec)
|
|
215
260
|
continue;
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
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.
|
|
557
|
-
|
|
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
|
|
1013
|
-
|
|
1014
|
-
const
|
|
1015
|
-
|
|
1016
|
-
|
|
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
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
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 {
|
|
1028
|
-
return {
|
|
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(({
|
|
1033
|
-
const snippet =
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
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:
|
|
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