markdown-lsp 1.1.0 → 1.2.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 +79 -8
- package/dist/cli.js +566 -107
- 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,
|
|
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.
|
|
10
10
|
|
|
11
|
-
**Status: v1.
|
|
11
|
+
**Status: v1.2.0. CLI is the default interface. LSP stdio mode available as a subcommand.**
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
@@ -18,11 +18,40 @@ CLI and library for querying Markdown documentation graphs. Point it at a folder
|
|
|
18
18
|
# List all pages
|
|
19
19
|
npx markdown-lsp workspace-outline ./docs
|
|
20
20
|
|
|
21
|
+
# Heading outline of a page
|
|
22
|
+
npx markdown-lsp outline ./docs introduction.md
|
|
23
|
+
|
|
21
24
|
# Full-text search (natural-language, ranked)
|
|
22
25
|
npx markdown-lsp search-text ./docs "getting started"
|
|
23
26
|
|
|
24
27
|
# Fuzzy heading search
|
|
25
28
|
npx markdown-lsp search-symbols ./docs "auth" --limit 10
|
|
29
|
+
|
|
30
|
+
# Find pages by glob
|
|
31
|
+
npx markdown-lsp search-paths ./docs "ai/*.md"
|
|
32
|
+
|
|
33
|
+
# Backlinks and outgoing links
|
|
34
|
+
npx markdown-lsp links-to ./docs quick-start.md
|
|
35
|
+
npx markdown-lsp links-from ./docs README.md
|
|
36
|
+
|
|
37
|
+
# Resolve a link text / read a section
|
|
38
|
+
npx markdown-lsp resolve-link ./docs README.md "Getting Started"
|
|
39
|
+
npx markdown-lsp get-section ./docs overview.md "quick-links"
|
|
40
|
+
|
|
41
|
+
# Interactive link graph (HTML, JSON, DOT, Mermaid)
|
|
42
|
+
npx markdown-lsp graph ./docs --format html --out graph.html
|
|
43
|
+
npx markdown-lsp graph ./docs --format json --pretty
|
|
44
|
+
npx markdown-lsp graph ./docs --format dot | dot -Tsvg > graph.svg
|
|
45
|
+
npx markdown-lsp graph ./docs --format mermaid
|
|
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
|
|
49
|
+
|
|
50
|
+
# AI semantic search
|
|
51
|
+
OPENROUTER_API_KEY=sk-or-... npx markdown-lsp semantic-search ./docs "how to configure webhooks"
|
|
52
|
+
|
|
53
|
+
# LSP server (for editors)
|
|
54
|
+
npx markdown-lsp lsp --stdio
|
|
26
55
|
```
|
|
27
56
|
|
|
28
57
|
---
|
|
@@ -54,9 +83,9 @@ All subcommands accept a **`--pretty`** flag for indented JSON output (compact b
|
|
|
54
83
|
| `links-from` | `<docs-dir> <page>` | All links originating from `<page>` |
|
|
55
84
|
| `resolve-link` | `<docs-dir> <from-page> <link-text>` | Resolve a specific link text from a page |
|
|
56
85
|
| `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 |
|
|
57
88
|
| `lsp` / `serve` | `[--stdio]` | Start the LSP stdio server |
|
|
58
|
-
| `graph` | `<docs-dir> [--format json\|dot\|mermaid\|html] [--out file]` | Export the doc link graph |
|
|
59
|
-
| `semantic-search` | `<docs-dir> <query> [--limit n] [--model model]` | AI semantic search via embeddings |
|
|
60
89
|
|
|
61
90
|
### search-text modes
|
|
62
91
|
|
|
@@ -118,21 +147,60 @@ markdown-lsp graph ./docs --format dot > graph.dot
|
|
|
118
147
|
markdown-lsp graph ./docs --format mermaid
|
|
119
148
|
|
|
120
149
|
# Self-contained interactive HTML with D3 force-directed graph
|
|
121
|
-
# (drag, zoom, hover highlights neighbours, click to inspect)
|
|
150
|
+
# (drag, zoom, hover highlights neighbours, click to inspect side-panel)
|
|
122
151
|
markdown-lsp graph ./docs --format html --out graph.html
|
|
123
152
|
```
|
|
124
153
|
|
|
125
154
|
JSON output shape:
|
|
126
155
|
```json
|
|
127
156
|
{
|
|
128
|
-
"nodes": [{"id": "README.md", "title": "Docsbook", "charCount": 2634, "sectionsCount": 10
|
|
157
|
+
"nodes": [{"id": "README.md", "title": "Docsbook", "charCount": 2634, "sectionsCount": 10,
|
|
158
|
+
"sections": [...], "outgoing": [...], "incoming": [...], "topSimilar": []}],
|
|
129
159
|
"edges": [{"source": "README.md", "target": "quick-start.md", "kind": "inline", "label": "Get started"}],
|
|
160
|
+
"semanticEdges": [],
|
|
130
161
|
"unresolvedCount": 3
|
|
131
162
|
}
|
|
132
163
|
```
|
|
133
164
|
|
|
134
165
|
---
|
|
135
166
|
|
|
167
|
+
## Turnkey semantic graph (v1.2)
|
|
168
|
+
|
|
169
|
+
Overlay AI-powered semantic similarity edges on top of the link graph — one command, no pipeline.
|
|
170
|
+
|
|
171
|
+
```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
|
|
174
|
+
|
|
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
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**What you get in the HTML:**
|
|
181
|
+
|
|
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:**
|
|
190
|
+
|
|
191
|
+
| Flag | Default | Description |
|
|
192
|
+
|---|---|---|
|
|
193
|
+
| `--semantic` | off | Enable AI similarity edges |
|
|
194
|
+
| `--sim-threshold` | `0.75` | Minimum cosine similarity score to draw an edge |
|
|
195
|
+
| `--sim-top-k` | `5` | Max semantic neighbours per node |
|
|
196
|
+
| `--model` | `openai/text-embedding-3-small` | Embedding model override |
|
|
197
|
+
|
|
198
|
+
**Caching:** embeddings are cached in `.markdown-lsp-cache/embeddings/` — the second run is instant with 0 API calls.
|
|
199
|
+
|
|
200
|
+
**OpenRouter model naming:** when using `OPENROUTER_API_KEY`, the model name requires the `openai/` prefix (e.g. `openai/text-embedding-3-small`). When using `AI_GATEWAY_API_KEY` (Vercel AI Gateway), use the bare name (`text-embedding-3-small`). If the model is rejected, the CLI outputs a clear hint to try the other form.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
136
204
|
## Semantic search
|
|
137
205
|
|
|
138
206
|
AI-powered semantic search using text embeddings — finds conceptually related pages even if they
|
|
@@ -233,6 +301,7 @@ export AI_GATEWAY_API_KEY=... # Vercel AI Gateway
|
|
|
233
301
|
|
|
234
302
|
- **CLI** — `node:util parseArgs`, zero extra deps, reads `.md` files into an in-memory graph
|
|
235
303
|
- **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)
|
|
236
305
|
- **LSP** — `vscode-languageserver/node` over stdio; requires Postgres (Drizzle ORM, `mdlsp_` prefix)
|
|
237
306
|
- **AI layer** (opt-in) — pgvector cosine search on canonical-term embeddings; `text-embedding-3-small` via Vercel AI Gateway
|
|
238
307
|
- **Bridge** — pure in-memory search (searchText, searchTextRanked, searchSymbols, searchPaths, listPages)
|
|
@@ -255,8 +324,10 @@ pnpm test
|
|
|
255
324
|
- **M1 — Structural layer** ✅
|
|
256
325
|
- **M2 — Semantic extract** (opt-in, code present, awaiting live AI Gateway credit)
|
|
257
326
|
- **M3 — CLI-first interface** ✅ (v1.0.0)
|
|
258
|
-
- M4 —
|
|
259
|
-
- M5 —
|
|
327
|
+
- **M4 — Graph export + HTML D3 visualisation** ✅ (v1.1.0)
|
|
328
|
+
- **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
|
|
260
331
|
|
|
261
332
|
---
|
|
262
333
|
|
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.2.0 — CLI for querying Markdown documentation graphs
|
|
7
7
|
|
|
8
8
|
USAGE
|
|
9
9
|
markdown-lsp <subcommand> [options]
|
|
@@ -39,9 +39,19 @@ SUBCOMMANDS
|
|
|
39
39
|
Retrieve a section by its anchor slug.
|
|
40
40
|
|
|
41
41
|
graph <docs-dir> [--format json|dot|mermaid|html] [--out <file>]
|
|
42
|
+
[--semantic] [--sim-threshold <0-1>] [--sim-top-k <n>]
|
|
43
|
+
[--model <embedding-model>]
|
|
42
44
|
Export the doc link graph. Default format: json (nodes/edges).
|
|
43
45
|
Use --format html for a self-contained interactive D3 visualisation.
|
|
44
46
|
Use --out <file> to write to disk instead of stdout.
|
|
47
|
+
Add --semantic to overlay AI-powered similarity edges (requires
|
|
48
|
+
OPENROUTER_API_KEY or AI_GATEWAY_API_KEY). Both link edges and
|
|
49
|
+
semantic edges are shown in the HTML graph with checkboxes to
|
|
50
|
+
toggle each type. Clicking a node opens a side-panel with full
|
|
51
|
+
info and highlights all its connections.
|
|
52
|
+
--sim-threshold Minimum cosine similarity for a semantic edge (default: 0.75)
|
|
53
|
+
--sim-top-k Maximum semantic neighbours per node (default: 5)
|
|
54
|
+
--model Embedding model override (default: openai/text-embedding-3-small)
|
|
45
55
|
|
|
46
56
|
semantic-search <docs-dir> <query> [--limit <n>] [--model <embedding-model>]
|
|
47
57
|
AI-powered semantic search using embeddings. Requires OPENROUTER_API_KEY
|
|
@@ -65,12 +75,45 @@ OUTPUT
|
|
|
65
75
|
over stdio — it does NOT print JSON.
|
|
66
76
|
|
|
67
77
|
EXAMPLES
|
|
78
|
+
# Overview of all pages
|
|
68
79
|
markdown-lsp workspace-outline ./docs
|
|
69
|
-
|
|
80
|
+
|
|
81
|
+
# Heading outline of one page
|
|
70
82
|
markdown-lsp outline ./docs introduction.md
|
|
83
|
+
|
|
84
|
+
# Full-text search (natural-language, ranked)
|
|
85
|
+
markdown-lsp search-text ./docs "getting started"
|
|
86
|
+
markdown-lsp search-text ./docs "webhook signing" --mode verbatim --limit 5
|
|
87
|
+
|
|
88
|
+
# Fuzzy heading search
|
|
89
|
+
markdown-lsp search-symbols ./docs "webhook" --limit 10
|
|
90
|
+
|
|
91
|
+
# Find pages by filename glob
|
|
92
|
+
markdown-lsp search-paths ./docs "ai/*.md"
|
|
93
|
+
|
|
94
|
+
# Link graph
|
|
71
95
|
markdown-lsp graph ./docs --format json --pretty
|
|
72
96
|
markdown-lsp graph ./docs --format html --out graph.html
|
|
97
|
+
markdown-lsp graph ./docs --format dot | dot -Tsvg > graph.svg
|
|
98
|
+
markdown-lsp graph ./docs --format mermaid
|
|
99
|
+
|
|
100
|
+
# Build embeddings + interactive semantic graph in one command
|
|
101
|
+
markdown-lsp graph ./docs --format html --semantic --out graph.html
|
|
102
|
+
markdown-lsp graph ./docs --format html --semantic --sim-threshold 0.75 --sim-top-k 5 --out graph.html
|
|
103
|
+
|
|
104
|
+
# Backlinks / outgoing links
|
|
105
|
+
markdown-lsp links-to ./docs quick-start.md
|
|
106
|
+
markdown-lsp links-from ./docs README.md
|
|
107
|
+
|
|
108
|
+
# Resolve / read
|
|
109
|
+
markdown-lsp resolve-link ./docs README.md "Getting Started"
|
|
110
|
+
markdown-lsp get-section ./docs overview.md "quick-links"
|
|
111
|
+
|
|
112
|
+
# Semantic search (AI)
|
|
73
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
|
+
# LSP server
|
|
74
117
|
markdown-lsp lsp --stdio
|
|
75
118
|
`.trim();
|
|
76
119
|
function die(msg) {
|
|
@@ -80,43 +123,150 @@ function die(msg) {
|
|
|
80
123
|
function out(value, pretty) {
|
|
81
124
|
process.stdout.write((pretty ? JSON.stringify(value, null, 2) : JSON.stringify(value)) + "\n");
|
|
82
125
|
}
|
|
83
|
-
async function startLsp() {
|
|
84
|
-
await import("./lsp.js");
|
|
85
|
-
}
|
|
86
126
|
function buildGraphExport(raw) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
127
|
+
// Build node map with full side-panel data
|
|
128
|
+
const nodeMap = new Map();
|
|
129
|
+
for (const p of raw.pages) {
|
|
130
|
+
nodeMap.set(p.path, {
|
|
131
|
+
id: p.path,
|
|
132
|
+
title: p.title ?? p.path,
|
|
133
|
+
charCount: p.content.length,
|
|
134
|
+
sectionsCount: p.sections.length,
|
|
135
|
+
sections: p.sections.map((s) => ({
|
|
136
|
+
anchor: s.anchor,
|
|
137
|
+
headingPath: s.headingPath,
|
|
138
|
+
level: s.level,
|
|
139
|
+
})),
|
|
140
|
+
outgoing: [],
|
|
141
|
+
incoming: [],
|
|
142
|
+
topSimilar: [],
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
const edges = [];
|
|
146
|
+
for (const l of raw.links) {
|
|
147
|
+
if (l.toResolvedPath === null)
|
|
148
|
+
continue;
|
|
149
|
+
edges.push({
|
|
150
|
+
source: l.fromPath,
|
|
151
|
+
target: l.toResolvedPath,
|
|
152
|
+
kind: l.kind,
|
|
153
|
+
...(l.textAtLink ? { label: l.textAtLink } : {}),
|
|
154
|
+
});
|
|
155
|
+
nodeMap.get(l.fromPath)?.outgoing.push({
|
|
156
|
+
target: l.toResolvedPath,
|
|
157
|
+
label: l.textAtLink,
|
|
158
|
+
kind: l.kind,
|
|
159
|
+
});
|
|
160
|
+
nodeMap.get(l.toResolvedPath)?.incoming.push({
|
|
161
|
+
source: l.fromPath,
|
|
162
|
+
label: l.textAtLink,
|
|
163
|
+
kind: l.kind,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
nodes: Array.from(nodeMap.values()),
|
|
168
|
+
edges,
|
|
169
|
+
semanticEdges: [],
|
|
170
|
+
unresolvedCount: raw.unresolved.length,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// ── Cosine similarity (no deps) ───────────────────────────────────────────────
|
|
174
|
+
function cosineSim(a, b) {
|
|
175
|
+
let dot = 0, na = 0, nb = 0;
|
|
176
|
+
for (let i = 0; i < a.length; i++) {
|
|
177
|
+
dot += a[i] * b[i];
|
|
178
|
+
na += a[i] * a[i];
|
|
179
|
+
nb += b[i] * b[i];
|
|
180
|
+
}
|
|
181
|
+
if (na === 0 || nb === 0)
|
|
182
|
+
return 0;
|
|
183
|
+
return dot / (Math.sqrt(na) * Math.sqrt(nb));
|
|
102
184
|
}
|
|
185
|
+
// ── Semantic edge computation ─────────────────────────────────────────────────
|
|
186
|
+
async function addSemanticEdges(data, pages, modelOverride, simThreshold, simTopK) {
|
|
187
|
+
const { assertApiKey } = await import("./ai/config.js");
|
|
188
|
+
assertApiKey();
|
|
189
|
+
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` +
|
|
195
|
+
` (model: ${modelOverride ?? "openai/text-embedding-3-small"})...\n`);
|
|
196
|
+
const { vectors, tokensUsed } = await embedTexts(pageTexts, modelOverride, true);
|
|
197
|
+
if (tokensUsed > 0) {
|
|
198
|
+
process.stderr.write(`[markdown-lsp] Embeddings computed (${tokensUsed} tokens used).\n`);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
process.stderr.write(`[markdown-lsp] Embeddings loaded from cache (0 API tokens).\n`);
|
|
202
|
+
}
|
|
203
|
+
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)
|
|
212
|
+
continue;
|
|
213
|
+
const vecJ = vectors[j];
|
|
214
|
+
if (!vecJ)
|
|
215
|
+
continue;
|
|
216
|
+
const score = cosineSim(vecI, vecJ);
|
|
217
|
+
if (score >= simThreshold) {
|
|
218
|
+
sims.push({ j, score });
|
|
219
|
+
}
|
|
220
|
+
}
|
|
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
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
data.semanticEdges = semanticEdges;
|
|
246
|
+
process.stderr.write(`[markdown-lsp] ${semanticEdges.length} semantic edges` +
|
|
247
|
+
` (threshold=${simThreshold}, topK=${simTopK}).\n`);
|
|
248
|
+
}
|
|
249
|
+
// ── Graph renderers ───────────────────────────────────────────────────────────
|
|
103
250
|
function renderGraphJson(data, pretty) {
|
|
104
251
|
return pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);
|
|
105
252
|
}
|
|
106
253
|
function renderGraphDot(data) {
|
|
107
254
|
const lines = ['digraph G {', ' rankdir=LR;'];
|
|
108
|
-
// Declare nodes with labels
|
|
109
255
|
for (const n of data.nodes) {
|
|
110
256
|
const label = n.title.replace(/"/g, '\\"');
|
|
111
257
|
const id = n.id.replace(/"/g, '\\"');
|
|
112
258
|
lines.push(` "${id}" [label="${label}"];`);
|
|
113
259
|
}
|
|
114
|
-
// Edges
|
|
115
260
|
for (const e of data.edges) {
|
|
116
261
|
const src = e.source.replace(/"/g, '\\"');
|
|
117
262
|
const tgt = e.target.replace(/"/g, '\\"');
|
|
118
263
|
lines.push(` "${src}" -> "${tgt}";`);
|
|
119
264
|
}
|
|
265
|
+
for (const e of data.semanticEdges) {
|
|
266
|
+
const src = e.source.replace(/"/g, '\\"');
|
|
267
|
+
const tgt = e.target.replace(/"/g, '\\"');
|
|
268
|
+
lines.push(` "${src}" -> "${tgt}" [style=dashed color="#f59e0b" label="${e.score}"];`);
|
|
269
|
+
}
|
|
120
270
|
lines.push('}');
|
|
121
271
|
return lines.join('\n');
|
|
122
272
|
}
|
|
@@ -127,9 +277,14 @@ function renderGraphMermaid(data) {
|
|
|
127
277
|
const tgt = e.target.replace(/"/g, '\\"');
|
|
128
278
|
lines.push(` "${src}" --> "${tgt}"`);
|
|
129
279
|
}
|
|
280
|
+
for (const e of data.semanticEdges) {
|
|
281
|
+
const src = e.source.replace(/"/g, '\\"');
|
|
282
|
+
const tgt = e.target.replace(/"/g, '\\"');
|
|
283
|
+
lines.push(` "${src}" -. ${e.score} .-> "${tgt}"`);
|
|
284
|
+
}
|
|
130
285
|
return lines.join('\n');
|
|
131
286
|
}
|
|
132
|
-
function renderGraphHtml(data, docsDir) {
|
|
287
|
+
function renderGraphHtml(data, docsDir, hasSemantic) {
|
|
133
288
|
const title = docsDir.split('/').filter(Boolean).pop() ?? docsDir;
|
|
134
289
|
const jsonData = JSON.stringify(data);
|
|
135
290
|
return `<!DOCTYPE html>
|
|
@@ -143,167 +298,429 @@ function renderGraphHtml(data, docsDir) {
|
|
|
143
298
|
body { font-family: system-ui, sans-serif; background: #0f1117; color: #e2e8f0; overflow: hidden; }
|
|
144
299
|
#toolbar { position: fixed; top: 0; left: 0; right: 0; height: 44px; background: #1a1d27;
|
|
145
300
|
border-bottom: 1px solid #2d3148; display: flex; align-items: center; padding: 0 16px;
|
|
146
|
-
z-index: 10; gap:
|
|
301
|
+
z-index: 10; gap: 16px; font-size: 13px; }
|
|
147
302
|
#toolbar h1 { font-size: 14px; font-weight: 600; color: #a5b4fc; }
|
|
148
303
|
#toolbar span { color: #64748b; }
|
|
149
|
-
|
|
304
|
+
.toggle-label { display: flex; align-items: center; gap: 6px; cursor: pointer; user-select: none; font-size: 12px; }
|
|
305
|
+
.toggle-label input[type=checkbox] { accent-color: #a5b4fc; width: 14px; height: 14px; cursor: pointer; }
|
|
306
|
+
.toggle-links { color: #a5b4fc; }
|
|
307
|
+
.toggle-semantic { color: #f59e0b; }
|
|
308
|
+
.toggle-label.disabled { opacity: 0.4; cursor: not-allowed; pointer-events: none; }
|
|
309
|
+
#graph-wrap { position: fixed; top: 44px; left: 0; bottom: 0; right: 0; transition: right 0.25s; }
|
|
310
|
+
#graph-wrap.panel-open { right: 320px; }
|
|
311
|
+
svg#graph { width: 100%; height: 100%; display: block; }
|
|
150
312
|
#tooltip { position: fixed; pointer-events: none; background: #1e2130; border: 1px solid #3b4168;
|
|
151
313
|
border-radius: 6px; padding: 8px 12px; font-size: 12px; line-height: 1.5;
|
|
152
314
|
max-width: 280px; z-index: 20; display: none; }
|
|
153
315
|
#tooltip .title { font-weight: 600; color: #c7d2fe; margin-bottom: 2px; }
|
|
154
316
|
#tooltip .path { color: #64748b; font-size: 11px; }
|
|
155
317
|
#tooltip .stats { color: #94a3b8; font-size: 11px; margin-top: 4px; }
|
|
318
|
+
#panel { position: fixed; top: 44px; right: 0; width: 320px; bottom: 0;
|
|
319
|
+
background: #1a1d27; border-left: 1px solid #2d3148; z-index: 15;
|
|
320
|
+
overflow-y: auto; display: none; }
|
|
321
|
+
#panel.open { display: block; }
|
|
322
|
+
#panel-header { padding: 14px 16px 10px; border-bottom: 1px solid #2d3148;
|
|
323
|
+
display: flex; align-items: flex-start; gap: 8px; }
|
|
324
|
+
#panel-close { background: none; border: none; color: #64748b; cursor: pointer;
|
|
325
|
+
font-size: 18px; line-height: 1; padding: 2px; flex-shrink: 0; margin-left: auto; }
|
|
326
|
+
#panel-close:hover { color: #e2e8f0; }
|
|
327
|
+
#panel-title { font-weight: 700; font-size: 14px; color: #c7d2fe; margin-bottom: 2px; word-break: break-all; }
|
|
328
|
+
#panel-path { font-size: 11px; color: #64748b; word-break: break-all; }
|
|
329
|
+
#panel-stats { font-size: 11px; color: #94a3b8; margin-top: 4px; }
|
|
330
|
+
#panel-body { padding: 12px 16px; }
|
|
331
|
+
.panel-section { margin-bottom: 16px; }
|
|
332
|
+
.panel-section h3 { font-size: 11px; font-weight: 600; color: #64748b; text-transform: uppercase;
|
|
333
|
+
letter-spacing: 0.05em; margin-bottom: 8px; }
|
|
334
|
+
.panel-section ul { list-style: none; }
|
|
335
|
+
.panel-section ul li { font-size: 12px; color: #94a3b8; padding: 3px 0; border-bottom: 1px solid #1e2130; }
|
|
336
|
+
.panel-section ul li:last-child { border-bottom: none; }
|
|
337
|
+
.panel-section ul li a { color: #a5b4fc; text-decoration: none; cursor: pointer; }
|
|
338
|
+
.panel-section ul li a:hover { text-decoration: underline; }
|
|
339
|
+
.panel-section ul li .score { font-size: 11px; color: #64748b; margin-left: 6px; }
|
|
340
|
+
.panel-section ul li .kind { font-size: 10px; color: #475569; margin-left: 4px; background: #1e2130;
|
|
341
|
+
padding: 1px 4px; border-radius: 3px; }
|
|
342
|
+
.panel-section .empty { color: #475569; font-size: 12px; font-style: italic; }
|
|
156
343
|
.node circle { cursor: pointer; transition: r 0.15s; }
|
|
157
344
|
.node text { pointer-events: none; font-size: 10px; fill: #cbd5e1; }
|
|
158
345
|
.link { stroke: #3b4168; stroke-opacity: 0.6; fill: none; }
|
|
159
|
-
.link.highlighted { stroke: #a5b4fc; stroke-opacity: 1; }
|
|
160
|
-
.
|
|
161
|
-
.
|
|
346
|
+
.link.highlighted { stroke: #a5b4fc; stroke-opacity: 1; stroke-width: 1.5; }
|
|
347
|
+
.link-semantic { stroke: #f59e0b; stroke-opacity: 0.35; stroke-dasharray: 5,3; fill: none; }
|
|
348
|
+
.link-semantic.highlighted { stroke-opacity: 0.9; stroke-dasharray: none; }
|
|
349
|
+
.node.dimmed circle { opacity: 0.12; }
|
|
350
|
+
.node.dimmed text { opacity: 0.06; }
|
|
162
351
|
.node.highlighted circle { stroke: #a5b4fc !important; stroke-width: 2px !important; }
|
|
352
|
+
.node.selected circle { stroke: #f59e0b !important; stroke-width: 2.5px !important; }
|
|
163
353
|
</style>
|
|
164
354
|
</head>
|
|
165
355
|
<body>
|
|
166
356
|
<div id="toolbar">
|
|
167
357
|
<h1>Doc Graph — ${title}</h1>
|
|
168
358
|
<span id="stats"></span>
|
|
359
|
+
<label class="toggle-label toggle-links" title="Toggle link edges (solid lines)">
|
|
360
|
+
<input type="checkbox" id="chk-links" checked> Links
|
|
361
|
+
</label>
|
|
362
|
+
<label class="toggle-label toggle-semantic${hasSemantic ? '' : ' disabled'}"
|
|
363
|
+
title="${hasSemantic ? 'Toggle semantic similarity edges (dashed lines)' : 'Run graph --semantic to enable'}">
|
|
364
|
+
<input type="checkbox" id="chk-semantic"${hasSemantic ? ' checked' : ' disabled'}> Semantic
|
|
365
|
+
</label>
|
|
366
|
+
</div>
|
|
367
|
+
<div id="graph-wrap">
|
|
368
|
+
<svg id="graph"></svg>
|
|
369
|
+
</div>
|
|
370
|
+
<div id="panel">
|
|
371
|
+
<div id="panel-header">
|
|
372
|
+
<div>
|
|
373
|
+
<div id="panel-title"></div>
|
|
374
|
+
<div id="panel-path"></div>
|
|
375
|
+
<div id="panel-stats"></div>
|
|
376
|
+
</div>
|
|
377
|
+
<button id="panel-close" title="Close panel">✕</button>
|
|
378
|
+
</div>
|
|
379
|
+
<div id="panel-body"></div>
|
|
169
380
|
</div>
|
|
170
381
|
<div id="tooltip"></div>
|
|
171
|
-
<svg id="graph"></svg>
|
|
172
382
|
<script>
|
|
173
383
|
const DATA = ${jsonData};
|
|
384
|
+
const HAS_SEMANTIC = ${hasSemantic};
|
|
174
385
|
|
|
175
|
-
|
|
176
|
-
const
|
|
177
|
-
const svg = d3.select('#graph')
|
|
178
|
-
.attr('width', width)
|
|
179
|
-
.attr('height', height);
|
|
386
|
+
// Node map for fast lookup
|
|
387
|
+
const nodeById = new Map(DATA.nodes.map(n => [n.id, n]));
|
|
180
388
|
|
|
181
|
-
// Build adjacency for highlight
|
|
182
|
-
const
|
|
183
|
-
|
|
389
|
+
// Build adjacency maps for highlight
|
|
390
|
+
const adjLink = new Map();
|
|
391
|
+
const adjSemantic = new Map();
|
|
392
|
+
for (const n of DATA.nodes) { adjLink.set(n.id, new Set()); adjSemantic.set(n.id, new Set()); }
|
|
184
393
|
for (const e of DATA.edges) {
|
|
185
|
-
if (
|
|
186
|
-
if (
|
|
394
|
+
if (adjLink.has(e.source)) adjLink.get(e.source).add(e.target);
|
|
395
|
+
if (adjLink.has(e.target)) adjLink.get(e.target).add(e.source);
|
|
396
|
+
}
|
|
397
|
+
for (const e of DATA.semanticEdges) {
|
|
398
|
+
if (adjSemantic.has(e.source)) adjSemantic.get(e.source).add(e.target);
|
|
399
|
+
if (adjSemantic.has(e.target)) adjSemantic.get(e.target).add(e.source);
|
|
187
400
|
}
|
|
188
401
|
|
|
402
|
+
const linkCount = DATA.edges.length;
|
|
403
|
+
const semCount = DATA.semanticEdges.length;
|
|
189
404
|
document.getElementById('stats').textContent =
|
|
190
|
-
DATA.nodes.length + ' pages · ' +
|
|
191
|
-
|
|
405
|
+
DATA.nodes.length + ' pages · ' + linkCount + ' links' +
|
|
406
|
+
(semCount > 0 ? ' · ' + semCount + ' semantic' : '') +
|
|
407
|
+
' · ' + DATA.unresolvedCount + ' unresolved';
|
|
408
|
+
|
|
409
|
+
const graphWrap = document.getElementById('graph-wrap');
|
|
410
|
+
function wrapW() { return graphWrap.offsetWidth || window.innerWidth; }
|
|
411
|
+
function wrapH() { return graphWrap.offsetHeight || (window.innerHeight - 44); }
|
|
412
|
+
|
|
413
|
+
const svg = d3.select('svg#graph');
|
|
192
414
|
|
|
193
415
|
const g = svg.append('g');
|
|
194
416
|
|
|
195
|
-
// Zoom
|
|
417
|
+
// Zoom + click-on-background
|
|
196
418
|
svg.call(d3.zoom()
|
|
197
419
|
.scaleExtent([0.05, 4])
|
|
198
420
|
.on('zoom', (event) => g.attr('transform', event.transform)));
|
|
199
421
|
|
|
200
|
-
|
|
422
|
+
svg.on('click', (event) => {
|
|
423
|
+
if (event.target.tagName === 'svg' || event.target.tagName === 'rect') {
|
|
424
|
+
clearHighlight();
|
|
425
|
+
closePanel();
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
// Arrow markers
|
|
430
|
+
const defs = svg.append('defs');
|
|
431
|
+
defs.append('marker').attr('id','arrow')
|
|
432
|
+
.attr('viewBox','0 -4 8 8').attr('refX',14).attr('refY',0)
|
|
433
|
+
.attr('markerWidth',6).attr('markerHeight',6).attr('orient','auto')
|
|
434
|
+
.append('path').attr('d','M0,-4L8,0L0,4').attr('fill','#3b4168');
|
|
435
|
+
defs.append('marker').attr('id','arrow-sem')
|
|
436
|
+
.attr('viewBox','0 -4 8 8').attr('refX',14).attr('refY',0)
|
|
437
|
+
.attr('markerWidth',6).attr('markerHeight',6).attr('orient','auto')
|
|
438
|
+
.append('path').attr('d','M0,-4L8,0L0,4').attr('fill','#f59e0b');
|
|
439
|
+
|
|
440
|
+
// Semantic edges (behind links)
|
|
441
|
+
const semanticLinkSel = g.append('g').selectAll('line')
|
|
442
|
+
.data(DATA.semanticEdges)
|
|
443
|
+
.join('line')
|
|
444
|
+
.attr('class','link-semantic')
|
|
445
|
+
.attr('stroke-width', d => Math.max(0.8, d.score * 2.5))
|
|
446
|
+
.attr('marker-end','url(#arrow-sem)');
|
|
447
|
+
|
|
448
|
+
// Link edges
|
|
201
449
|
const linkSel = g.append('g').selectAll('line')
|
|
202
450
|
.data(DATA.edges)
|
|
203
451
|
.join('line')
|
|
204
|
-
.attr('class',
|
|
205
|
-
.attr('marker-end',
|
|
206
|
-
|
|
207
|
-
//
|
|
208
|
-
svg.append('defs').append('marker')
|
|
209
|
-
.attr('id', 'arrow')
|
|
210
|
-
.attr('viewBox', '0 -4 8 8')
|
|
211
|
-
.attr('refX', 14)
|
|
212
|
-
.attr('refY', 0)
|
|
213
|
-
.attr('markerWidth', 6)
|
|
214
|
-
.attr('markerHeight', 6)
|
|
215
|
-
.attr('orient', 'auto')
|
|
216
|
-
.append('path')
|
|
217
|
-
.attr('d', 'M0,-4L8,0L0,4')
|
|
218
|
-
.attr('fill', '#3b4168');
|
|
219
|
-
|
|
220
|
-
// Color scale by first path segment
|
|
452
|
+
.attr('class','link')
|
|
453
|
+
.attr('marker-end','url(#arrow)');
|
|
454
|
+
|
|
455
|
+
// Color by first path segment
|
|
221
456
|
const color = d3.scaleOrdinal(d3.schemeTableau10);
|
|
222
|
-
const segColor =
|
|
457
|
+
const segColor = id => color(id.split('/')[0] ?? '');
|
|
458
|
+
|
|
459
|
+
let selectedNodeId = null;
|
|
223
460
|
|
|
224
461
|
// Nodes
|
|
225
462
|
const nodeSel = g.append('g').selectAll('g')
|
|
226
463
|
.data(DATA.nodes)
|
|
227
464
|
.join('g')
|
|
228
|
-
.attr('class',
|
|
465
|
+
.attr('class','node')
|
|
229
466
|
.call(d3.drag()
|
|
230
|
-
.on('start',
|
|
231
|
-
.on('drag',
|
|
232
|
-
.on('end',
|
|
467
|
+
.on('start',(ev,d)=>{ if(!ev.active) sim.alphaTarget(0.3).restart(); d.fx=d.x; d.fy=d.y; })
|
|
468
|
+
.on('drag',(ev,d)=>{ d.fx=ev.x; d.fy=ev.y; })
|
|
469
|
+
.on('end',(ev,d)=>{ if(!ev.active) sim.alphaTarget(0); d.fx=null; d.fy=null; }));
|
|
233
470
|
|
|
234
471
|
nodeSel.append('circle')
|
|
235
|
-
.attr('r', d => Math.max(5, Math.min(14, Math.sqrt(d.charCount
|
|
472
|
+
.attr('r', d => Math.max(5, Math.min(14, Math.sqrt(d.charCount/120))))
|
|
236
473
|
.attr('fill', d => segColor(d.id))
|
|
237
474
|
.attr('fill-opacity', 0.85)
|
|
238
475
|
.attr('stroke', d => segColor(d.id))
|
|
239
476
|
.attr('stroke-width', 1);
|
|
240
477
|
|
|
241
478
|
nodeSel.append('text')
|
|
242
|
-
.attr('dx', d => Math.max(5, Math.min(14, Math.sqrt(d.charCount
|
|
479
|
+
.attr('dx', d => Math.max(5, Math.min(14, Math.sqrt(d.charCount/120))) + 3)
|
|
243
480
|
.attr('dy', '0.35em')
|
|
244
|
-
.text(d => d.title.length > 24 ? d.title.slice(0,
|
|
481
|
+
.text(d => d.title.length > 24 ? d.title.slice(0,22) + '\\u2026' : d.title);
|
|
245
482
|
|
|
246
483
|
// Tooltip
|
|
247
484
|
const tooltip = document.getElementById('tooltip');
|
|
248
485
|
nodeSel
|
|
249
|
-
.on('mouseover', (
|
|
486
|
+
.on('mouseover', (ev,d) => {
|
|
250
487
|
tooltip.style.display = 'block';
|
|
251
|
-
tooltip.innerHTML =
|
|
252
|
-
'<div class="
|
|
253
|
-
'<div class="
|
|
254
|
-
|
|
488
|
+
tooltip.innerHTML =
|
|
489
|
+
'<div class="title">'+esc(d.title)+'</div>'+
|
|
490
|
+
'<div class="path">'+esc(d.id)+'</div>'+
|
|
491
|
+
'<div class="stats">'+d.charCount.toLocaleString()+' chars · '+d.sectionsCount+' sections</div>';
|
|
492
|
+
if (!selectedNodeId) highlightNode(d);
|
|
255
493
|
})
|
|
256
|
-
.on('mousemove',
|
|
257
|
-
tooltip.style.left = (
|
|
258
|
-
tooltip.style.top
|
|
494
|
+
.on('mousemove', ev => {
|
|
495
|
+
tooltip.style.left = (ev.clientX+14)+'px';
|
|
496
|
+
tooltip.style.top = (ev.clientY+14)+'px';
|
|
259
497
|
})
|
|
260
498
|
.on('mouseout', () => {
|
|
261
|
-
tooltip.style.display
|
|
262
|
-
clearHighlight();
|
|
499
|
+
tooltip.style.display='none';
|
|
500
|
+
if (!selectedNodeId) clearHighlight();
|
|
501
|
+
})
|
|
502
|
+
.on('click', (ev,d) => {
|
|
503
|
+
ev.stopPropagation();
|
|
504
|
+
if (selectedNodeId === d.id) {
|
|
505
|
+
selectedNodeId = null;
|
|
506
|
+
clearHighlight();
|
|
507
|
+
closePanel();
|
|
508
|
+
} else {
|
|
509
|
+
selectedNodeId = d.id;
|
|
510
|
+
highlightNode(d);
|
|
511
|
+
openPanel(d);
|
|
512
|
+
}
|
|
263
513
|
});
|
|
264
514
|
|
|
515
|
+
function esc(s) {
|
|
516
|
+
return String(s)
|
|
517
|
+
.replace(/&/g,'&').replace(/</g,'<')
|
|
518
|
+
.replace(/>/g,'>').replace(/"/g,'"');
|
|
519
|
+
}
|
|
520
|
+
|
|
265
521
|
function highlightNode(d) {
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
522
|
+
const ln = adjLink.get(d.id) ?? new Set();
|
|
523
|
+
const sn = adjSemantic.get(d.id) ?? new Set();
|
|
524
|
+
const all = new Set([...ln, ...sn]);
|
|
525
|
+
nodeSel
|
|
526
|
+
.classed('dimmed', n => n.id !== d.id && !all.has(n.id))
|
|
527
|
+
.classed('highlighted',n => n.id !== d.id && all.has(n.id))
|
|
528
|
+
.classed('selected', n => n.id === d.id);
|
|
529
|
+
linkSel.classed('highlighted',
|
|
530
|
+
e => e.source.id === d.id || e.target.id === d.id);
|
|
531
|
+
semanticLinkSel.classed('highlighted',
|
|
532
|
+
e => e.source.id === d.id || e.target.id === d.id);
|
|
270
533
|
}
|
|
271
534
|
|
|
272
535
|
function clearHighlight() {
|
|
273
|
-
|
|
274
|
-
|
|
536
|
+
selectedNodeId = null;
|
|
537
|
+
nodeSel.classed('dimmed',false).classed('highlighted',false).classed('selected',false);
|
|
538
|
+
linkSel.classed('highlighted',false);
|
|
539
|
+
semanticLinkSel.classed('highlighted',false);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
// ── Side panel ────────────────────────────────────────────────────────────────
|
|
543
|
+
|
|
544
|
+
const panel = document.getElementById('panel');
|
|
545
|
+
const panelTitle = document.getElementById('panel-title');
|
|
546
|
+
const panelPath = document.getElementById('panel-path');
|
|
547
|
+
const panelStats = document.getElementById('panel-stats');
|
|
548
|
+
const panelBody = document.getElementById('panel-body');
|
|
549
|
+
|
|
550
|
+
document.getElementById('panel-close').addEventListener('click', () => {
|
|
551
|
+
clearHighlight(); closePanel();
|
|
552
|
+
});
|
|
553
|
+
|
|
554
|
+
function openPanel(d) {
|
|
555
|
+
panelTitle.textContent = d.title;
|
|
556
|
+
panelPath.textContent = d.id;
|
|
557
|
+
panelStats.textContent = d.charCount.toLocaleString()+' chars · '+d.sectionsCount+' sections';
|
|
558
|
+
panelBody.innerHTML = '';
|
|
559
|
+
|
|
560
|
+
// Sections
|
|
561
|
+
if (d.sections && d.sections.length > 0) {
|
|
562
|
+
const sec = ps('Sections ('+d.sections.length+')');
|
|
563
|
+
const ul = document.createElement('ul');
|
|
564
|
+
const shown = d.sections.slice(0,10);
|
|
565
|
+
for (const s of shown) {
|
|
566
|
+
const li = document.createElement('li');
|
|
567
|
+
const label = s.headingPath.length > 0
|
|
568
|
+
? s.headingPath[s.headingPath.length-1]
|
|
569
|
+
: (s.anchor ?? '(section)');
|
|
570
|
+
li.innerHTML = esc(label)+(s.anchor ? ' <span class="kind">#'+esc(s.anchor)+'</span>' : '');
|
|
571
|
+
ul.appendChild(li);
|
|
572
|
+
}
|
|
573
|
+
if (d.sections.length > 10) {
|
|
574
|
+
const li = document.createElement('li');
|
|
575
|
+
li.className = 'empty';
|
|
576
|
+
li.textContent = '… and '+(d.sections.length-10)+' more';
|
|
577
|
+
ul.appendChild(li);
|
|
578
|
+
}
|
|
579
|
+
sec.appendChild(ul); panelBody.appendChild(sec);
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
// Outgoing links
|
|
583
|
+
{
|
|
584
|
+
const out = d.outgoing || [];
|
|
585
|
+
const sec = ps('Links from this page'+(out.length ? ' ('+out.length+')' : ''));
|
|
586
|
+
if (out.length > 0) {
|
|
587
|
+
const ul = document.createElement('ul');
|
|
588
|
+
for (const o of out.slice(0,15)) {
|
|
589
|
+
const li = document.createElement('li');
|
|
590
|
+
const a = document.createElement('a');
|
|
591
|
+
a.textContent = (o.label && o.label !== o.target) ? o.label : o.target;
|
|
592
|
+
a.title = o.target;
|
|
593
|
+
a.addEventListener('click', ()=>focusNode(o.target));
|
|
594
|
+
li.appendChild(a);
|
|
595
|
+
const sp = document.createElement('span');
|
|
596
|
+
sp.className = 'kind'; sp.textContent = o.kind;
|
|
597
|
+
li.appendChild(sp);
|
|
598
|
+
ul.appendChild(li);
|
|
599
|
+
}
|
|
600
|
+
if (out.length > 15) {
|
|
601
|
+
const li = document.createElement('li');
|
|
602
|
+
li.className = 'empty';
|
|
603
|
+
li.textContent = '… and '+(out.length-15)+' more';
|
|
604
|
+
ul.appendChild(li);
|
|
605
|
+
}
|
|
606
|
+
sec.appendChild(ul);
|
|
607
|
+
} else {
|
|
608
|
+
sec.appendChild(empty('None'));
|
|
609
|
+
}
|
|
610
|
+
panelBody.appendChild(sec);
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// Incoming links
|
|
614
|
+
{
|
|
615
|
+
const inc = d.incoming || [];
|
|
616
|
+
const sec = ps('Pages linking here'+(inc.length ? ' ('+inc.length+')' : ''));
|
|
617
|
+
if (inc.length > 0) {
|
|
618
|
+
const ul = document.createElement('ul');
|
|
619
|
+
for (const i of inc.slice(0,15)) {
|
|
620
|
+
const li = document.createElement('li');
|
|
621
|
+
const a = document.createElement('a');
|
|
622
|
+
a.textContent = i.source; a.title = i.source;
|
|
623
|
+
a.addEventListener('click', ()=>focusNode(i.source));
|
|
624
|
+
li.appendChild(a);
|
|
625
|
+
ul.appendChild(li);
|
|
626
|
+
}
|
|
627
|
+
if (inc.length > 15) {
|
|
628
|
+
const li = document.createElement('li');
|
|
629
|
+
li.className = 'empty';
|
|
630
|
+
li.textContent = '… and '+(inc.length-15)+' more';
|
|
631
|
+
ul.appendChild(li);
|
|
632
|
+
}
|
|
633
|
+
sec.appendChild(ul);
|
|
634
|
+
} else {
|
|
635
|
+
sec.appendChild(empty('None (orphan page)'));
|
|
636
|
+
}
|
|
637
|
+
panelBody.appendChild(sec);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
// Semantic similar
|
|
641
|
+
if (HAS_SEMANTIC) {
|
|
642
|
+
const sim2 = d.topSimilar || [];
|
|
643
|
+
const sec = ps('Semantically similar'+(sim2.length ? ' ('+sim2.length+')' : ''));
|
|
644
|
+
if (sim2.length > 0) {
|
|
645
|
+
const ul = document.createElement('ul');
|
|
646
|
+
for (const s of sim2) {
|
|
647
|
+
const li = document.createElement('li');
|
|
648
|
+
const a = document.createElement('a');
|
|
649
|
+
a.textContent = s.title ?? s.path; a.title = s.path;
|
|
650
|
+
a.addEventListener('click', ()=>focusNode(s.path));
|
|
651
|
+
li.appendChild(a);
|
|
652
|
+
const sp = document.createElement('span');
|
|
653
|
+
sp.className = 'score'; sp.textContent = s.score.toFixed(3);
|
|
654
|
+
li.appendChild(sp);
|
|
655
|
+
ul.appendChild(li);
|
|
656
|
+
}
|
|
657
|
+
sec.appendChild(ul);
|
|
658
|
+
} else {
|
|
659
|
+
sec.appendChild(empty('No pages above threshold'));
|
|
660
|
+
}
|
|
661
|
+
panelBody.appendChild(sec);
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
panel.classList.add('open');
|
|
665
|
+
graphWrap.classList.add('panel-open');
|
|
666
|
+
if (sim) sim.force('center', d3.forceCenter(wrapW()/2, wrapH()/2)).alpha(0.1).restart();
|
|
275
667
|
}
|
|
276
668
|
|
|
277
|
-
|
|
669
|
+
function closePanel() {
|
|
670
|
+
panel.classList.remove('open');
|
|
671
|
+
graphWrap.classList.remove('panel-open');
|
|
672
|
+
if (sim) sim.force('center', d3.forceCenter(wrapW()/2, wrapH()/2)).alpha(0.1).restart();
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
function focusNode(nodeId) {
|
|
676
|
+
const node = DATA.nodes.find(n => n.id === nodeId);
|
|
677
|
+
if (!node) return;
|
|
678
|
+
selectedNodeId = nodeId;
|
|
679
|
+
highlightNode(node);
|
|
680
|
+
openPanel(node);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
function ps(heading) {
|
|
684
|
+
const div = document.createElement('div'); div.className = 'panel-section';
|
|
685
|
+
const h3 = document.createElement('h3'); h3.textContent = heading;
|
|
686
|
+
div.appendChild(h3); return div;
|
|
687
|
+
}
|
|
688
|
+
function empty(text) {
|
|
689
|
+
const p = document.createElement('p'); p.className = 'empty'; p.textContent = text; return p;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
// ── Checkbox toggles ──────────────────────────────────────────────────────────
|
|
693
|
+
|
|
694
|
+
document.getElementById('chk-links').addEventListener('change', ev => {
|
|
695
|
+
linkSel.style('display', ev.target.checked ? null : 'none');
|
|
696
|
+
});
|
|
697
|
+
document.getElementById('chk-semantic').addEventListener('change', ev => {
|
|
698
|
+
semanticLinkSel.style('display', ev.target.checked ? null : 'none');
|
|
699
|
+
});
|
|
700
|
+
|
|
701
|
+
// ── Force simulation ──────────────────────────────────────────────────────────
|
|
702
|
+
|
|
703
|
+
const allSimEdges = [...DATA.edges, ...DATA.semanticEdges];
|
|
704
|
+
|
|
278
705
|
const sim = d3.forceSimulation(DATA.nodes)
|
|
279
|
-
.force('link', d3.forceLink(
|
|
706
|
+
.force('link', d3.forceLink(allSimEdges).id(d => d.id)
|
|
707
|
+
.distance(80).strength(e => e.kind === 'semantic' ? 0.2 : 0.5))
|
|
280
708
|
.force('charge', d3.forceManyBody().strength(-180))
|
|
281
|
-
.force('center', d3.forceCenter(
|
|
709
|
+
.force('center', d3.forceCenter(wrapW()/2, wrapH()/2))
|
|
282
710
|
.force('collide', d3.forceCollide(18))
|
|
283
711
|
.on('tick', () => {
|
|
284
712
|
linkSel
|
|
285
|
-
.attr('x1', d => d.source.x)
|
|
286
|
-
.attr('
|
|
287
|
-
|
|
288
|
-
.attr('
|
|
289
|
-
|
|
713
|
+
.attr('x1', d => d.source.x).attr('y1', d => d.source.y)
|
|
714
|
+
.attr('x2', d => d.target.x).attr('y2', d => d.target.y);
|
|
715
|
+
semanticLinkSel
|
|
716
|
+
.attr('x1', d => d.source.x).attr('y1', d => d.source.y)
|
|
717
|
+
.attr('x2', d => d.target.x).attr('y2', d => d.target.y);
|
|
718
|
+
nodeSel.attr('transform', d => 'translate('+d.x+','+d.y+')');
|
|
290
719
|
});
|
|
291
720
|
</script>
|
|
292
721
|
</body>
|
|
293
722
|
</html>`;
|
|
294
723
|
}
|
|
295
|
-
// ── Cosine similarity (no deps) ───────────────────────────────────────────────
|
|
296
|
-
function cosineSim(a, b) {
|
|
297
|
-
let dot = 0, na = 0, nb = 0;
|
|
298
|
-
for (let i = 0; i < a.length; i++) {
|
|
299
|
-
dot += a[i] * b[i];
|
|
300
|
-
na += a[i] * a[i];
|
|
301
|
-
nb += b[i] * b[i];
|
|
302
|
-
}
|
|
303
|
-
if (na === 0 || nb === 0)
|
|
304
|
-
return 0;
|
|
305
|
-
return dot / (Math.sqrt(na) * Math.sqrt(nb));
|
|
306
|
-
}
|
|
307
724
|
// ── Main ──────────────────────────────────────────────────────────────────────
|
|
308
725
|
async function startLspServer() {
|
|
309
726
|
await import("./lsp.js");
|
|
@@ -498,14 +915,56 @@ async function main() {
|
|
|
498
915
|
options: {
|
|
499
916
|
format: { type: "string" },
|
|
500
917
|
out: { type: "string" },
|
|
918
|
+
semantic: { type: "boolean" },
|
|
919
|
+
"sim-threshold": { type: "string" },
|
|
920
|
+
"sim-top-k": { type: "string" },
|
|
921
|
+
model: { type: "string" },
|
|
501
922
|
},
|
|
502
923
|
allowPositionals: true,
|
|
503
924
|
});
|
|
504
925
|
const docsDir = positionals[0] ?? die("graph requires <docs-dir>");
|
|
505
926
|
const format = (values.format ?? "json");
|
|
927
|
+
const semantic = values.semantic ?? false;
|
|
928
|
+
const simThreshold = values["sim-threshold"] !== undefined
|
|
929
|
+
? parseFloat(values["sim-threshold"])
|
|
930
|
+
: 0.75;
|
|
931
|
+
const simTopK = values["sim-top-k"] !== undefined
|
|
932
|
+
? parseInt(values["sim-top-k"], 10)
|
|
933
|
+
: 5;
|
|
934
|
+
const modelOverride = values.model;
|
|
506
935
|
const graph = buildGraph(docsDir);
|
|
507
936
|
const raw = graph.toJSON();
|
|
508
937
|
const data = buildGraphExport(raw);
|
|
938
|
+
if (semantic) {
|
|
939
|
+
try {
|
|
940
|
+
await addSemanticEdges(data, raw.pages, modelOverride, simThreshold, simTopK);
|
|
941
|
+
}
|
|
942
|
+
catch (err) {
|
|
943
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
944
|
+
if (msg.includes("OPENROUTER_API_KEY") ||
|
|
945
|
+
msg.includes("AI_GATEWAY_API_KEY") ||
|
|
946
|
+
msg.includes("assertApiKey") ||
|
|
947
|
+
msg.includes("API key") ||
|
|
948
|
+
msg.includes("api key")) {
|
|
949
|
+
process.stderr.write("Error: --semantic requires an API key.\n" +
|
|
950
|
+
" Set OPENROUTER_API_KEY=<key> (OpenRouter — recommended)\n" +
|
|
951
|
+
" or AI_GATEWAY_API_KEY=<key> (Vercel AI Gateway)\n\n" +
|
|
952
|
+
" Default model: openai/text-embedding-3-small\n" +
|
|
953
|
+
" To override: --model openai/text-embedding-3-small\n" +
|
|
954
|
+
" If the model name is rejected try: --model text-embedding-3-small (no prefix)\n");
|
|
955
|
+
process.exit(1);
|
|
956
|
+
}
|
|
957
|
+
if (msg.toLowerCase().includes("model") ||
|
|
958
|
+
msg.includes("404") ||
|
|
959
|
+
msg.includes("not found")) {
|
|
960
|
+
process.stderr.write("Error computing semantic embeddings: " + msg + "\n" +
|
|
961
|
+
" Tip: try --model text-embedding-3-small (no openai/ prefix)\n" +
|
|
962
|
+
" or --model openai/text-embedding-3-small (with prefix for OpenRouter)\n");
|
|
963
|
+
process.exit(1);
|
|
964
|
+
}
|
|
965
|
+
throw err;
|
|
966
|
+
}
|
|
967
|
+
}
|
|
509
968
|
let result;
|
|
510
969
|
switch (format) {
|
|
511
970
|
case "json":
|
|
@@ -518,7 +977,7 @@ async function main() {
|
|
|
518
977
|
result = renderGraphMermaid(data);
|
|
519
978
|
break;
|
|
520
979
|
case "html":
|
|
521
|
-
result = renderGraphHtml(data, docsDir);
|
|
980
|
+
result = renderGraphHtml(data, docsDir, semantic && data.semanticEdges.length > 0);
|
|
522
981
|
break;
|
|
523
982
|
default:
|
|
524
983
|
die(`Unknown format: ${format}. Use json, dot, mermaid, or html.`);
|
|
@@ -571,7 +1030,6 @@ async function main() {
|
|
|
571
1030
|
scored.sort((a, b) => b.score - a.score);
|
|
572
1031
|
const topN = scored.slice(0, limit);
|
|
573
1032
|
const results = topN.map(({ page, score }) => {
|
|
574
|
-
// Extract a short snippet (first 200 chars of content)
|
|
575
1033
|
const snippet = page.content.slice(0, 200).replace(/\s+/g, " ").trim();
|
|
576
1034
|
return {
|
|
577
1035
|
pagePath: page.path,
|
|
@@ -589,7 +1047,8 @@ async function main() {
|
|
|
589
1047
|
}
|
|
590
1048
|
}
|
|
591
1049
|
main().catch((err) => {
|
|
592
|
-
process.stderr.write("[markdown-lsp] Fatal error: " +
|
|
1050
|
+
process.stderr.write("[markdown-lsp] Fatal error: " +
|
|
1051
|
+
(err instanceof Error ? err.stack ?? err.message : String(err)) + "\n");
|
|
593
1052
|
process.exit(1);
|
|
594
1053
|
});
|
|
595
1054
|
//# sourceMappingURL=cli.js.map
|
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