markdown-lsp 0.2.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/graph.js ADDED
@@ -0,0 +1,70 @@
1
+ import { readdirSync, readFileSync, statSync } from "node:fs";
2
+ import { join, relative, resolve } from "node:path";
3
+ import { RichDocGraph, buildInMemoryGraph, } from "./bridge/index.js";
4
+ const MD_EXTENSIONS = new Set([".md", ".mdx", ".markdown"]);
5
+ const IGNORED_DIRS = new Set([
6
+ "node_modules",
7
+ ".git",
8
+ ".next",
9
+ ".vercel",
10
+ "dist",
11
+ "build",
12
+ ".cache",
13
+ ".turbo",
14
+ ]);
15
+ export function loadDocsAsFiles(docsRoot) {
16
+ const absRoot = resolve(docsRoot);
17
+ const files = [];
18
+ walk(absRoot, absRoot, files);
19
+ return files;
20
+ }
21
+ function walk(absRoot, dir, out) {
22
+ let entries;
23
+ try {
24
+ entries = readdirSync(dir);
25
+ }
26
+ catch {
27
+ return;
28
+ }
29
+ for (const name of entries) {
30
+ if (name.startsWith(".") && name !== ".")
31
+ continue;
32
+ if (IGNORED_DIRS.has(name))
33
+ continue;
34
+ const full = join(dir, name);
35
+ let st;
36
+ try {
37
+ st = statSync(full);
38
+ }
39
+ catch {
40
+ continue;
41
+ }
42
+ if (st.isDirectory()) {
43
+ walk(absRoot, full, out);
44
+ continue;
45
+ }
46
+ if (!st.isFile())
47
+ continue;
48
+ const dotIdx = name.lastIndexOf(".");
49
+ if (dotIdx < 0)
50
+ continue;
51
+ const ext = name.slice(dotIdx).toLowerCase();
52
+ if (!MD_EXTENSIONS.has(ext))
53
+ continue;
54
+ const rel = relative(absRoot, full).split("\\").join("/");
55
+ let content;
56
+ try {
57
+ content = readFileSync(full, "utf8");
58
+ }
59
+ catch {
60
+ continue;
61
+ }
62
+ out.push({ path: rel, content });
63
+ }
64
+ }
65
+ export function buildGraph(docsRoot) {
66
+ const files = loadDocsAsFiles(docsRoot);
67
+ const raw = buildInMemoryGraph(files);
68
+ return new RichDocGraph(raw);
69
+ }
70
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,kBAAkB,GAEnB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;AAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,cAAc;IACd,MAAM;IACN,OAAO;IACP,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;CACT,CAAC,CAAA;AAEF,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjC,MAAM,KAAK,GAAmB,EAAE,CAAA;IAChC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,IAAI,CAAC,OAAe,EAAE,GAAW,EAAE,GAAmB;IAC7D,IAAI,OAAiB,CAAA;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAM;IACR,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG;YAAE,SAAQ;QAClD,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAQ;QAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC5B,IAAI,EAAE,CAAA;QACN,IAAI,CAAC;YACH,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QAED,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;YACxB,SAAQ;QACV,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,SAAQ;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,MAAM,GAAG,CAAC;YAAE,SAAQ;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAQ;QAErC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACzD,IAAI,OAAe,CAAA;QACnB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACrC,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC"}
package/dist/lsp.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lsp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../src/lsp.ts"],"names":[],"mappings":""}
package/dist/lsp.js ADDED
@@ -0,0 +1,343 @@
1
+ import { config as loadEnv } from "dotenv";
2
+ import { resolve as pathResolve } from "node:path";
3
+ import { fileURLToPath as fileToPath } from "node:url";
4
+ const __filename = fileToPath(import.meta.url);
5
+ const __dirname = pathResolve(__filename, "..");
6
+ loadEnv({ path: pathResolve(__dirname, "..", ".env.local") });
7
+ loadEnv({ path: pathResolve(__dirname, "..", ".env") });
8
+ loadEnv();
9
+ process.on("uncaughtException", (e) => {
10
+ console.error("[markdown-lsp] uncaughtException:", e instanceof Error ? e.stack || e.message : e);
11
+ });
12
+ process.on("unhandledRejection", (e) => {
13
+ console.error("[markdown-lsp] unhandledRejection:", e instanceof Error ? e.stack || e.message : e);
14
+ });
15
+ import { createConnection, ProposedFeatures, TextDocuments, TextDocumentSyncKind, SymbolKind, Location, Range, Position, DiagnosticSeverity, CompletionItemKind, TextEdit, } from "vscode-languageserver/node.js";
16
+ import { TextDocument } from "vscode-languageserver-textdocument";
17
+ import { URI } from "vscode-uri";
18
+ import { fileURLToPath } from "node:url";
19
+ import { relative, resolve, dirname, join } from "node:path";
20
+ import { readdir } from "node:fs/promises";
21
+ import { ensureWorkspace, indexFile, indexWorkspace, removeFile, resolveLinkTargets, } from "./indexer/indexer.js";
22
+ import { parseMarkdown } from "./indexer/parseMarkdown.js";
23
+ import { getDocumentSymbols, getWorkspaceSymbols } from "./core/documentSymbols.js";
24
+ import { findReferencesToDocument, findUnresolvedLinks, getDocumentByPath, resolveLinkByTarget } from "./core/findReferences.js";
25
+ import { db } from "./db/client.js";
26
+ import { documents } from "./db/schema.js";
27
+ import { eq } from "drizzle-orm";
28
+ const connection = createConnection(ProposedFeatures.all);
29
+ const docs = new TextDocuments(TextDocument);
30
+ let workspace = null;
31
+ function uriToPath(uri) {
32
+ return fileURLToPath(uri);
33
+ }
34
+ function pathToUri(p) {
35
+ return URI.file(p).toString();
36
+ }
37
+ function relPath(absolute) {
38
+ if (!workspace)
39
+ return absolute;
40
+ return relative(workspace.rootPath, absolute);
41
+ }
42
+ function rangeToLsp(r) {
43
+ return Range.create(Position.create(r.startLine, r.startCol), Position.create(r.endLine, r.endCol));
44
+ }
45
+ function symbolKindForLevel(level) {
46
+ if (level <= 1)
47
+ return SymbolKind.File;
48
+ if (level === 2)
49
+ return SymbolKind.Namespace;
50
+ if (level === 3)
51
+ return SymbolKind.Class;
52
+ return SymbolKind.Field;
53
+ }
54
+ connection.onInitialize(async (params) => {
55
+ const folders = params.workspaceFolders ?? [];
56
+ if (folders.length === 0 && params.rootUri) {
57
+ folders.push({ uri: params.rootUri, name: "root" });
58
+ }
59
+ if (folders.length > 0) {
60
+ const root = uriToPath(folders[0].uri);
61
+ try {
62
+ workspace = await ensureWorkspace(root, folders[0].name);
63
+ connection.console.info(`Workspace initialized: ${workspace.rootPath} (id=${workspace.id})`);
64
+ }
65
+ catch (e) {
66
+ const msg = e instanceof Error ? e.message : String(e);
67
+ connection.console.error(`Failed to initialize workspace: ${msg}`);
68
+ connection.window.showErrorMessage(`Markdown LSP: ${msg}`);
69
+ }
70
+ }
71
+ else {
72
+ connection.console.warn("No workspace folder provided");
73
+ }
74
+ return {
75
+ capabilities: {
76
+ textDocumentSync: TextDocumentSyncKind.Incremental,
77
+ documentSymbolProvider: true,
78
+ workspaceSymbolProvider: true,
79
+ definitionProvider: true,
80
+ referencesProvider: true,
81
+ hoverProvider: false,
82
+ completionProvider: { triggerCharacters: ["[", "(", "#"] },
83
+ renameProvider: false,
84
+ executeCommandProvider: { commands: ["markdownLsp/reindex"] },
85
+ },
86
+ serverInfo: { name: "markdown-lsp", version: "0.0.1" },
87
+ };
88
+ });
89
+ connection.onInitialized(async () => {
90
+ if (!workspace)
91
+ return;
92
+ connection.console.info("Starting initial workspace index…");
93
+ try {
94
+ const result = await indexWorkspace(workspace);
95
+ connection.console.info(`Index complete: ${result.filesIndexed} indexed, ${result.filesUnchanged} unchanged, ${result.filesRemoved} removed`);
96
+ await publishWorkspaceDiagnostics();
97
+ }
98
+ catch (e) {
99
+ connection.console.error(`Index failed: ${e instanceof Error ? e.message : String(e)}`);
100
+ }
101
+ });
102
+ async function publishWorkspaceDiagnostics() {
103
+ if (!workspace)
104
+ return;
105
+ const unresolved = await findUnresolvedLinks(workspace);
106
+ const byDoc = new Map();
107
+ for (const u of unresolved) {
108
+ const arr = byDoc.get(u.fromDocumentPath) ?? [];
109
+ arr.push(u);
110
+ byDoc.set(u.fromDocumentPath, arr);
111
+ }
112
+ for (const [docPath, list] of byDoc) {
113
+ const absolute = workspace ? resolve(workspace.rootPath, docPath) : docPath;
114
+ const diagnostics = list.map((u) => ({
115
+ severity: DiagnosticSeverity.Warning,
116
+ range: Range.create(0, 0, 0, 1),
117
+ message: `Unresolved link target: ${u.toPath}`,
118
+ source: "markdown-lsp",
119
+ code: "unresolved-link",
120
+ }));
121
+ connection.sendDiagnostics({ uri: pathToUri(absolute), diagnostics });
122
+ }
123
+ }
124
+ docs.onDidChangeContent(async (event) => {
125
+ if (!workspace)
126
+ return;
127
+ const absolute = uriToPath(event.document.uri);
128
+ if (!absolute.startsWith(workspace.rootPath))
129
+ return;
130
+ try {
131
+ await indexFile(workspace, absolute, event.document.getText());
132
+ await resolveLinkTargets(workspace);
133
+ await publishDocumentDiagnostics(absolute);
134
+ }
135
+ catch (e) {
136
+ connection.console.error(`indexFile failed for ${absolute}: ${e instanceof Error ? e.message : e}`);
137
+ }
138
+ });
139
+ docs.onDidClose((event) => {
140
+ connection.sendDiagnostics({ uri: event.document.uri, diagnostics: [] });
141
+ });
142
+ async function publishDocumentDiagnostics(absolute) {
143
+ if (!workspace)
144
+ return;
145
+ const rel = relPath(absolute);
146
+ const unresolved = await findUnresolvedLinks(workspace, rel);
147
+ const diagnostics = unresolved.map((u) => ({
148
+ severity: DiagnosticSeverity.Warning,
149
+ range: Range.create(0, 0, 0, 1),
150
+ message: `Unresolved link target: ${u.toPath}`,
151
+ source: "markdown-lsp",
152
+ code: "unresolved-link",
153
+ }));
154
+ connection.sendDiagnostics({ uri: pathToUri(absolute), diagnostics });
155
+ }
156
+ connection.onDocumentSymbol(async (params) => {
157
+ if (!workspace)
158
+ return [];
159
+ const absolute = uriToPath(params.textDocument.uri);
160
+ const nodes = await getDocumentSymbols(workspace, relPath(absolute));
161
+ const toLsp = (n) => ({
162
+ name: n.name,
163
+ kind: symbolKindForLevel(n.level),
164
+ range: rangeToLsp(n.range),
165
+ selectionRange: rangeToLsp(n.selectionRange),
166
+ children: n.children.map(toLsp),
167
+ });
168
+ return nodes.map(toLsp);
169
+ });
170
+ connection.onWorkspaceSymbol(async (params) => {
171
+ if (!workspace)
172
+ return [];
173
+ const hits = await getWorkspaceSymbols(workspace, params.query ?? "", 100);
174
+ return hits.map((h) => ({
175
+ name: h.name,
176
+ kind: SymbolKind.String,
177
+ location: Location.create(pathToUri(resolve(workspace.rootPath, h.documentPath)), rangeToLsp(h.range)),
178
+ containerName: h.containerName ?? undefined,
179
+ }));
180
+ });
181
+ connection.onDefinition(async (params) => {
182
+ if (!workspace)
183
+ return null;
184
+ const absolute = uriToPath(params.textDocument.uri);
185
+ const doc = docs.get(params.textDocument.uri);
186
+ if (!doc)
187
+ return null;
188
+ const parsed = parseMarkdown(doc.getText());
189
+ const line = params.position.line;
190
+ const col = params.position.character;
191
+ const hit = parsed.links.find((l) => l.positionStartLine <= line &&
192
+ l.positionEndLine >= line &&
193
+ (l.positionStartLine !== line || l.positionStartCol <= col) &&
194
+ (l.positionEndLine !== line || l.positionEndCol >= col));
195
+ if (!hit)
196
+ return null;
197
+ if (hit.kind === "wiki") {
198
+ const resolved = await resolveLinkByTarget(workspace, hit.toPath);
199
+ if (!resolved)
200
+ return null;
201
+ const targetAbs = resolve(workspace.rootPath, resolved.documentPath);
202
+ return Location.create(pathToUri(targetAbs), Range.create(0, 0, 0, 0));
203
+ }
204
+ const fromDir = dirname(relPath(absolute));
205
+ const candidates = [
206
+ hit.toPath,
207
+ hit.toPath.replace(/^\.\//, ""),
208
+ join(fromDir, hit.toPath),
209
+ join(fromDir, hit.toPath.replace(/^\.\//, "")),
210
+ ];
211
+ for (const c of candidates) {
212
+ const normalized = c.replace(/\.(md|mdx|markdown)$/i, "");
213
+ const doc = await db
214
+ .select()
215
+ .from(documents)
216
+ .where(eq(documents.workspaceId, workspace.id));
217
+ const match = doc.find((d) => d.path === c || d.path.replace(/\.(md|mdx|markdown)$/i, "") === normalized);
218
+ if (match) {
219
+ const targetAbs = resolve(workspace.rootPath, match.path);
220
+ return Location.create(pathToUri(targetAbs), Range.create(0, 0, 0, 0));
221
+ }
222
+ }
223
+ return null;
224
+ });
225
+ connection.onReferences(async (params) => {
226
+ if (!workspace)
227
+ return [];
228
+ const absolute = uriToPath(params.textDocument.uri);
229
+ let targetDocId = null;
230
+ const liveDoc = docs.get(params.textDocument.uri);
231
+ if (liveDoc) {
232
+ const parsed = parseMarkdown(liveDoc.getText());
233
+ const line = params.position.line;
234
+ const col = params.position.character;
235
+ const hit = parsed.links.find((l) => l.positionStartLine <= line &&
236
+ l.positionEndLine >= line &&
237
+ (l.positionStartLine !== line || l.positionStartCol <= col) &&
238
+ (l.positionEndLine !== line || l.positionEndCol >= col));
239
+ if (hit) {
240
+ if (hit.kind === "wiki") {
241
+ const resolved = await resolveLinkByTarget(workspace, hit.toPath);
242
+ if (resolved) {
243
+ const target = await getDocumentByPath(workspace, resolved.documentPath);
244
+ if (target)
245
+ targetDocId = target.id;
246
+ }
247
+ }
248
+ else {
249
+ const fromDir = dirname(relPath(absolute));
250
+ const candidates = [
251
+ hit.toPath,
252
+ hit.toPath.replace(/^\.\//, ""),
253
+ join(fromDir, hit.toPath),
254
+ join(fromDir, hit.toPath.replace(/^\.\//, "")),
255
+ ];
256
+ const allDocs = await db.select().from(documents).where(eq(documents.workspaceId, workspace.id));
257
+ for (const c of candidates) {
258
+ const normalized = c.replace(/\.(md|mdx|markdown)$/i, "");
259
+ const match = allDocs.find((d) => d.path === c || d.path.replace(/\.(md|mdx|markdown)$/i, "") === normalized);
260
+ if (match) {
261
+ targetDocId = match.id;
262
+ break;
263
+ }
264
+ }
265
+ }
266
+ }
267
+ }
268
+ if (!targetDocId) {
269
+ const doc = await getDocumentByPath(workspace, relPath(absolute));
270
+ if (!doc)
271
+ return [];
272
+ targetDocId = doc.id;
273
+ }
274
+ const hits = await findReferencesToDocument(workspace, targetDocId);
275
+ return hits.map((h) => Location.create(pathToUri(resolve(workspace.rootPath, h.documentPath)), rangeToLsp(h.range)));
276
+ });
277
+ connection.onCompletion(async (params) => {
278
+ if (!workspace)
279
+ return [];
280
+ const doc = docs.get(params.textDocument.uri);
281
+ if (!doc)
282
+ return [];
283
+ const line = doc.getText({
284
+ start: Position.create(params.position.line, 0),
285
+ end: params.position,
286
+ });
287
+ const wikiMatch = line.match(/\[\[([^\]]*)$/);
288
+ if (!wikiMatch)
289
+ return [];
290
+ const prefix = wikiMatch[1].toLowerCase();
291
+ const allDocs = await db.select().from(documents).where(eq(documents.workspaceId, workspace.id));
292
+ return allDocs
293
+ .filter((d) => {
294
+ const base = (d.path.split("/").pop() ?? "").replace(/\.(md|mdx|markdown)$/i, "").toLowerCase();
295
+ return base.startsWith(prefix) || (d.title?.toLowerCase().startsWith(prefix) ?? false);
296
+ })
297
+ .slice(0, 50)
298
+ .map((d) => {
299
+ const base = (d.path.split("/").pop() ?? "").replace(/\.(md|mdx|markdown)$/i, "");
300
+ return {
301
+ label: base,
302
+ kind: CompletionItemKind.File,
303
+ detail: d.path,
304
+ insertText: base,
305
+ };
306
+ });
307
+ });
308
+ connection.onExecuteCommand(async (params) => {
309
+ if (params.command === "markdownLsp/reindex" && workspace) {
310
+ connection.console.info("Manual reindex requested");
311
+ const result = await indexWorkspace(workspace);
312
+ await publishWorkspaceDiagnostics();
313
+ return result;
314
+ }
315
+ return null;
316
+ });
317
+ connection.onDidChangeWatchedFiles(async (params) => {
318
+ if (!workspace)
319
+ return;
320
+ for (const change of params.changes) {
321
+ const absolute = uriToPath(change.uri);
322
+ if (!absolute.startsWith(workspace.rootPath))
323
+ continue;
324
+ if (change.type === 3) {
325
+ await removeFile(workspace, absolute);
326
+ }
327
+ else {
328
+ try {
329
+ await indexFile(workspace, absolute);
330
+ }
331
+ catch (e) {
332
+ connection.console.error(`watched file index error ${absolute}: ${e instanceof Error ? e.message : e}`);
333
+ }
334
+ }
335
+ }
336
+ await resolveLinkTargets(workspace);
337
+ await publishWorkspaceDiagnostics();
338
+ });
339
+ void readdir;
340
+ void TextEdit;
341
+ docs.listen(connection);
342
+ connection.listen();
343
+ //# sourceMappingURL=lsp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp.js","sourceRoot":"","sources":["../src/lsp.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,22 +1,23 @@
1
1
  {
2
2
  "name": "markdown-lsp",
3
- "version": "0.2.2",
3
+ "version": "1.1.0",
4
4
  "description": "Language Server Protocol implementation for Markdown with optional AI-canonicalized glossary that resolves synonyms across docs",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "markdown-lsp": "./bin/markdown-lsp"
8
8
  },
9
- "main": "./dist/server.js",
9
+ "main": "./dist/lsp.js",
10
10
  "exports": {
11
- ".": "./dist/server.js",
11
+ ".": "./dist/lsp.js",
12
12
  "./bridge": "./dist/bridge/index.js",
13
13
  "./indexer": "./dist/indexer/indexer.js",
14
14
  "./core": "./dist/core/index.js",
15
- "./parser": "./dist/indexer/parseMarkdown.js"
15
+ "./parser": "./dist/indexer/parseMarkdown.js",
16
+ "./graph": "./dist/graph.js"
16
17
  },
17
18
  "scripts": {
18
19
  "build": "tsc",
19
- "dev": "tsx src/server.ts --stdio",
20
+ "dev": "tsx src/lsp.ts --stdio",
20
21
  "migrate": "tsx scripts/apply-migration.ts",
21
22
  "test": "vitest run",
22
23
  "test:fast": "vitest run test/parseMarkdown.test.ts test/bridge.test.ts test/ai-disabled.test.ts",