@speakeasy-api/docs-mcp-core 0.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.
Files changed (51) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +27 -0
  3. package/dist/chunking.d.ts +3 -0
  4. package/dist/chunking.d.ts.map +1 -0
  5. package/dist/chunking.js +332 -0
  6. package/dist/chunking.js.map +1 -0
  7. package/dist/cursor.d.ts +12 -0
  8. package/dist/cursor.d.ts.map +1 -0
  9. package/dist/cursor.js +83 -0
  10. package/dist/cursor.js.map +1 -0
  11. package/dist/embedding-cache.d.ts +46 -0
  12. package/dist/embedding-cache.d.ts.map +1 -0
  13. package/dist/embedding-cache.js +230 -0
  14. package/dist/embedding-cache.js.map +1 -0
  15. package/dist/embedding.d.ts +66 -0
  16. package/dist/embedding.d.ts.map +1 -0
  17. package/dist/embedding.js +264 -0
  18. package/dist/embedding.js.map +1 -0
  19. package/dist/index.d.ts +11 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +11 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/lancedb.d.ts +42 -0
  24. package/dist/lancedb.d.ts.map +1 -0
  25. package/dist/lancedb.js +442 -0
  26. package/dist/lancedb.js.map +1 -0
  27. package/dist/manifest.d.ts +19 -0
  28. package/dist/manifest.d.ts.map +1 -0
  29. package/dist/manifest.js +245 -0
  30. package/dist/manifest.js.map +1 -0
  31. package/dist/metadata.d.ts +6 -0
  32. package/dist/metadata.d.ts.map +1 -0
  33. package/dist/metadata.js +152 -0
  34. package/dist/metadata.js.map +1 -0
  35. package/dist/parser.d.ts +6 -0
  36. package/dist/parser.d.ts.map +1 -0
  37. package/dist/parser.js +21 -0
  38. package/dist/parser.js.map +1 -0
  39. package/dist/search-common.d.ts +7 -0
  40. package/dist/search-common.d.ts.map +1 -0
  41. package/dist/search-common.js +81 -0
  42. package/dist/search-common.js.map +1 -0
  43. package/dist/search.d.ts +13 -0
  44. package/dist/search.d.ts.map +1 -0
  45. package/dist/search.js +166 -0
  46. package/dist/search.js.map +1 -0
  47. package/dist/types.d.ts +125 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -0
  51. package/package.json +49 -0
@@ -0,0 +1,42 @@
1
+ import type { Chunk, EmbeddingProvider, GetDocRequest, GetDocResult, SearchEngine, SearchRequest, SearchResult } from "./types.js";
2
+ export interface BuildLanceDbIndexOptions {
3
+ dbPath: string;
4
+ chunks: Chunk[];
5
+ tableName?: string;
6
+ metadataKeys?: string[];
7
+ vectorsByChunkId?: Map<string, number[]>;
8
+ }
9
+ export interface OpenLanceDbSearchEngineOptions {
10
+ dbPath: string;
11
+ tableName?: string;
12
+ metadataKeys: string[];
13
+ proximityWeight?: number;
14
+ phraseSlop?: number;
15
+ queryEmbeddingProvider?: EmbeddingProvider;
16
+ vectorWeight?: number;
17
+ onWarning?: (message: string) => void;
18
+ }
19
+ export interface LanceDbIndexBuildResult {
20
+ tableName: string;
21
+ metadataKeys: string[];
22
+ }
23
+ export declare function buildLanceDbIndex(options: BuildLanceDbIndexOptions): Promise<LanceDbIndexBuildResult>;
24
+ export declare class LanceDbSearchEngine implements SearchEngine {
25
+ private readonly table;
26
+ private readonly metadataKeys;
27
+ private readonly proximityWeight;
28
+ private readonly phraseSlop;
29
+ private readonly queryEmbeddingProvider;
30
+ private readonly vectorWeight;
31
+ private readonly onWarning;
32
+ private hasWarnedVectorFailure;
33
+ private constructor();
34
+ static open(options: OpenLanceDbSearchEngineOptions): Promise<LanceDbSearchEngine>;
35
+ search(request: SearchRequest): Promise<SearchResult>;
36
+ getDoc(request: GetDocRequest): Promise<GetDocResult>;
37
+ private runFtsQuery;
38
+ private runVectorQuery;
39
+ private buildHint;
40
+ private warnVectorFailure;
41
+ }
42
+ //# sourceMappingURL=lancedb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lancedb.d.ts","sourceRoot":"","sources":["../src/lancedb.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,KAAK,EAEL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EAGZ,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,iBAAiB,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAsDlC;AAED,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgC;IACvE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,sBAAsB,CAAS;IAEvC,OAAO;WAkBM,IAAI,CAAC,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2BlF,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA0DrD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YAmE7C,WAAW;YAcX,cAAc;YAiCd,SAAS;IA6CvB,OAAO,CAAC,iBAAiB;CAS1B"}
@@ -0,0 +1,442 @@
1
+ import { connect, Index, MultiMatchQuery, PhraseQuery } from "@lancedb/lancedb";
2
+ import { decodeSearchCursor, encodeSearchCursor } from "./cursor.js";
3
+ import { clampLimit, isChunkIdFormat, makeSnippet } from "./search-common.js";
4
+ const DEFAULT_TABLE_NAME = "chunks";
5
+ const RRF_K = 60;
6
+ export async function buildLanceDbIndex(options) {
7
+ const tableName = options.tableName ?? DEFAULT_TABLE_NAME;
8
+ const metadataKeys = options.metadataKeys ?? collectMetadataKeys(options.chunks);
9
+ const rows = options.chunks.map((chunk) => serializeChunkRow(chunk, metadataKeys, options.vectorsByChunkId));
10
+ if (rows.length === 0) {
11
+ return { tableName, metadataKeys };
12
+ }
13
+ const db = await connect(options.dbPath);
14
+ try {
15
+ const table = await db.createTable(tableName, rows, { mode: "overwrite" });
16
+ await table.createIndex("content_text", {
17
+ config: Index.fts({ withPosition: true }),
18
+ replace: true
19
+ });
20
+ await table.createIndex("heading", {
21
+ config: Index.fts({ withPosition: true }),
22
+ replace: true
23
+ });
24
+ await Promise.all([
25
+ safeCreateScalarIndex(table, "chunk_id"),
26
+ safeCreateScalarIndex(table, "filepath"),
27
+ safeCreateScalarIndex(table, "chunk_index")
28
+ ]);
29
+ // Create IVF-PQ vector index when there are enough rows with vectors
30
+ if (options.vectorsByChunkId && options.vectorsByChunkId.size >= 256) {
31
+ const numPartitions = Math.max(1, Math.round(Math.sqrt(options.vectorsByChunkId.size)));
32
+ try {
33
+ await table.createIndex("vector", {
34
+ config: Index.ivfPq({ numPartitions }),
35
+ replace: true,
36
+ });
37
+ }
38
+ catch {
39
+ // Non-fatal: brute-force vector search still works without the index
40
+ }
41
+ }
42
+ table.close();
43
+ }
44
+ finally {
45
+ db.close();
46
+ }
47
+ return {
48
+ tableName,
49
+ metadataKeys
50
+ };
51
+ }
52
+ export class LanceDbSearchEngine {
53
+ table;
54
+ metadataKeys;
55
+ proximityWeight;
56
+ phraseSlop;
57
+ queryEmbeddingProvider;
58
+ vectorWeight;
59
+ onWarning;
60
+ hasWarnedVectorFailure = false;
61
+ constructor(table, metadataKeys, options = {}) {
62
+ this.table = table;
63
+ this.metadataKeys = [...metadataKeys];
64
+ this.proximityWeight = options.proximityWeight ?? 1.25;
65
+ this.phraseSlop = normalizePhraseSlop(options.phraseSlop);
66
+ this.queryEmbeddingProvider = options.queryEmbeddingProvider;
67
+ this.vectorWeight = options.vectorWeight ?? 1;
68
+ this.onWarning = options.onWarning ?? ((message) => console.warn(`warn: ${message}`));
69
+ }
70
+ static async open(options) {
71
+ const db = await connect(options.dbPath);
72
+ const table = await db.openTable(options.tableName ?? DEFAULT_TABLE_NAME);
73
+ const engineOptions = {};
74
+ if (options.proximityWeight !== undefined) {
75
+ engineOptions.proximityWeight = options.proximityWeight;
76
+ }
77
+ if (options.phraseSlop !== undefined) {
78
+ engineOptions.phraseSlop = options.phraseSlop;
79
+ }
80
+ if (options.queryEmbeddingProvider !== undefined) {
81
+ engineOptions.queryEmbeddingProvider = options.queryEmbeddingProvider;
82
+ }
83
+ if (options.vectorWeight !== undefined) {
84
+ engineOptions.vectorWeight = options.vectorWeight;
85
+ }
86
+ if (options.onWarning !== undefined) {
87
+ engineOptions.onWarning = options.onWarning;
88
+ }
89
+ return new LanceDbSearchEngine(table, options.metadataKeys, engineOptions);
90
+ }
91
+ async search(request) {
92
+ const query = request.query.trim();
93
+ if (!query) {
94
+ throw new Error("query is required");
95
+ }
96
+ const limit = clampLimit(request.limit);
97
+ const filters = request.filters ?? {};
98
+ const offset = request.cursor
99
+ ? decodeSearchCursor(request.cursor, { query, filters }).offset
100
+ : 0;
101
+ const whereClause = buildWhereClause(filters, request.taxonomy_keys);
102
+ const fetchLimit = Math.min(Math.max(offset + limit + 200, limit * 5), 5000);
103
+ const [matchRows, phraseRows, vectorRows] = await Promise.all([
104
+ this.runFtsQuery(new MultiMatchQuery(query, ["heading", "content_text"], { boosts: [3, 1] }), whereClause, fetchLimit),
105
+ this.runFtsQuery(new PhraseQuery(query, "content_text", { slop: this.phraseSlop }), whereClause, fetchLimit),
106
+ this.runVectorQuery(query, whereClause, fetchLimit)
107
+ ]);
108
+ const matchWeight = request.rrf_weights?.match ?? 1;
109
+ const phraseWeight = request.rrf_weights?.phrase ?? this.proximityWeight;
110
+ const vecWeight = request.rrf_weights?.vector ?? this.vectorWeight;
111
+ const blended = blendRows(matchRows, phraseRows, vectorRows, phraseWeight, vecWeight, matchWeight);
112
+ const paged = blended.slice(offset, offset + limit);
113
+ const hits = paged.map((entry) => toSearchHit(entry.row, entry.score, query, this.metadataKeys));
114
+ const nextOffset = offset + paged.length;
115
+ const nextCursor = nextOffset < blended.length
116
+ ? encodeSearchCursor({ offset: nextOffset, limit }, { query, filters })
117
+ : null;
118
+ if (hits.length > 0) {
119
+ return {
120
+ hits,
121
+ next_cursor: nextCursor,
122
+ hint: null
123
+ };
124
+ }
125
+ return {
126
+ hits,
127
+ next_cursor: nextCursor,
128
+ hint: await this.buildHint(query, filters)
129
+ };
130
+ }
131
+ async getDoc(request) {
132
+ if (!isChunkIdFormat(request.chunk_id)) {
133
+ throw new Error(`Chunk ID '${request.chunk_id}' has invalid format. Expected {filepath} or {filepath}#{heading-path}.`);
134
+ }
135
+ const context = Math.max(0, Math.min(5, request.context ?? 0));
136
+ const targetRows = await this.table
137
+ .query()
138
+ .where(`chunk_id = '${escapeSqlString(request.chunk_id)}'`)
139
+ .limit(1)
140
+ .toArray();
141
+ if (targetRows.length === 0) {
142
+ throw new Error(`Chunk ID '${request.chunk_id}' not found. Use search_docs to discover valid chunk IDs.`);
143
+ }
144
+ const target = targetRows[0];
145
+ const filepath = expectStringField(target, "filepath");
146
+ const targetIndex = toNumberField(target, "chunk_index");
147
+ const minIndex = Math.max(0, targetIndex - context);
148
+ const maxIndex = targetIndex + context;
149
+ // Fetch only the needed range using BETWEEN for efficiency
150
+ const escapedFilepath = escapeSqlString(filepath);
151
+ const rangeRows = await this.table
152
+ .query()
153
+ .where(`filepath = '${escapedFilepath}' AND chunk_index BETWEEN ${minIndex} AND ${maxIndex}`)
154
+ .toArray();
155
+ // Lightweight count query for total chunks in the file (select only chunk_index)
156
+ const allChunkIndexRows = await this.table
157
+ .query()
158
+ .where(`filepath = '${escapedFilepath}'`)
159
+ .select(["chunk_index"])
160
+ .toArray();
161
+ const totalChunks = allChunkIndexRows.length;
162
+ const normalized = rangeRows
163
+ .map((row) => row)
164
+ .sort((a, b) => toNumberField(a, "chunk_index") - toNumberField(b, "chunk_index"));
165
+ const blocks = [];
166
+ for (const row of normalized) {
167
+ const chunkId = expectStringField(row, "chunk_id");
168
+ const content = expectStringField(row, "content");
169
+ const chunkIndex = toNumberField(row, "chunk_index");
170
+ const positionLabel = `Chunk ${chunkIndex + 1} of ${totalChunks}`;
171
+ const contextOffset = chunkIndex - targetIndex;
172
+ const role = contextOffset === 0
173
+ ? "Target"
174
+ : `Context: ${contextOffset > 0 ? `+${contextOffset}` : contextOffset}`;
175
+ blocks.push(`--- Chunk: ${chunkId} (${positionLabel}) (${role}) ---\n${content}`);
176
+ }
177
+ return {
178
+ text: blocks.join("\n\n")
179
+ };
180
+ }
181
+ async runFtsQuery(query, whereClause, limit) {
182
+ let builder = this.table.search(query, "fts");
183
+ if (whereClause) {
184
+ builder = builder.where(whereClause);
185
+ }
186
+ const rows = await builder.limit(limit).toArray();
187
+ return rows.map((row) => row);
188
+ }
189
+ async runVectorQuery(query, whereClause, limit) {
190
+ if (!this.queryEmbeddingProvider) {
191
+ return [];
192
+ }
193
+ try {
194
+ const vectors = await this.queryEmbeddingProvider.embed([query]);
195
+ const vector = vectors[0];
196
+ if (!vector || vector.length === 0) {
197
+ return [];
198
+ }
199
+ let builder = this.table.search(vector, "vector", "vector");
200
+ if (whereClause) {
201
+ builder = builder.where(whereClause);
202
+ }
203
+ const rows = await builder.limit(limit).toArray();
204
+ return rows.map((row) => row);
205
+ }
206
+ catch (error) {
207
+ this.warnVectorFailure(error);
208
+ return [];
209
+ }
210
+ }
211
+ async buildHint(query, filters) {
212
+ const fallbackRows = await this.table
213
+ .search(new MultiMatchQuery(query, ["heading", "content_text"], { boosts: [3, 1] }), "fts")
214
+ .limit(100)
215
+ .toArray();
216
+ if (fallbackRows.length === 0) {
217
+ return {
218
+ message: "0 results found. No matches were found for this query in the indexed corpus.",
219
+ suggested_filters: {}
220
+ };
221
+ }
222
+ const suggestions = {};
223
+ for (const [key, activeValue] of Object.entries(filters)) {
224
+ const values = new Set();
225
+ for (const row of fallbackRows) {
226
+ const metadata = extractMetadata(row, this.metadataKeys);
227
+ const candidate = metadata[key];
228
+ if (!candidate || candidate === activeValue) {
229
+ continue;
230
+ }
231
+ values.add(candidate);
232
+ }
233
+ if (values.size > 0) {
234
+ suggestions[key] = [...values].sort((a, b) => a.localeCompare(b));
235
+ }
236
+ }
237
+ const filterSummary = Object.entries(filters)
238
+ .map(([key, value]) => `${key}='${value}'`)
239
+ .join(", ");
240
+ return {
241
+ message: filterSummary
242
+ ? `0 results found for query '${query}' with filters ${filterSummary}.`
243
+ : `0 results found for query '${query}'.`,
244
+ suggested_filters: suggestions
245
+ };
246
+ }
247
+ warnVectorFailure(error) {
248
+ if (this.hasWarnedVectorFailure) {
249
+ return;
250
+ }
251
+ const detail = error instanceof Error ? error.message : String(error);
252
+ this.onWarning(`vector search degraded to lexical-only: ${detail}`);
253
+ this.hasWarnedVectorFailure = true;
254
+ }
255
+ }
256
+ function blendRows(matchRows, phraseRows, vectorRows, proximityWeight, vectorWeight, matchWeight = 1) {
257
+ const byChunkId = new Map();
258
+ const captureRanks = (rows, key) => {
259
+ for (const [index, row] of rows.entries()) {
260
+ const chunkId = expectStringField(row, "chunk_id");
261
+ const rank = index + 1;
262
+ const entry = byChunkId.get(chunkId) ?? { row };
263
+ entry.row = row;
264
+ const existing = entry[key];
265
+ if (existing === undefined || rank < existing) {
266
+ entry[key] = rank;
267
+ }
268
+ byChunkId.set(chunkId, entry);
269
+ }
270
+ };
271
+ captureRanks(matchRows, "matchRank");
272
+ captureRanks(phraseRows, "phraseRank");
273
+ captureRanks(vectorRows, "vectorRank");
274
+ return [...byChunkId.values()]
275
+ .map((entry) => {
276
+ const score = rrf(entry.matchRank, matchWeight) +
277
+ rrf(entry.phraseRank, proximityWeight) +
278
+ rrf(entry.vectorRank, vectorWeight);
279
+ return {
280
+ row: entry.row,
281
+ score: Number(score.toFixed(6))
282
+ };
283
+ })
284
+ .sort((a, b) => {
285
+ if (b.score !== a.score) {
286
+ return b.score - a.score;
287
+ }
288
+ return expectStringField(a.row, "chunk_id").localeCompare(expectStringField(b.row, "chunk_id"));
289
+ });
290
+ }
291
+ function buildWhereClause(filters, taxonomyKeys) {
292
+ const clauses = [];
293
+ const language = filters.language;
294
+ const scope = filters.scope;
295
+ // Only apply auto-include if scope and language are both indexed taxonomy keys
296
+ const hasScope = !taxonomyKeys || taxonomyKeys.includes("scope");
297
+ const hasLanguage = !taxonomyKeys || taxonomyKeys.includes("language");
298
+ if (hasScope && hasLanguage && language && !scope) {
299
+ const escapedLanguage = escapeSqlString(language);
300
+ const scopeColumn = quoteIdentifier("scope");
301
+ const languageColumn = quoteIdentifier("language");
302
+ clauses.push(`((${scopeColumn} = 'sdk-specific' AND ${languageColumn} = '${escapedLanguage}') OR ${scopeColumn} = 'global-guide' OR (${scopeColumn} <> 'sdk-specific' AND ${scopeColumn} <> 'global-guide' AND (${languageColumn} = '' OR ${languageColumn} = '${escapedLanguage}')))`);
303
+ }
304
+ else {
305
+ if (language) {
306
+ clauses.push(`${quoteIdentifier("language")} = '${escapeSqlString(language)}'`);
307
+ }
308
+ if (scope) {
309
+ clauses.push(`${quoteIdentifier("scope")} = '${escapeSqlString(scope)}'`);
310
+ }
311
+ }
312
+ for (const [key, value] of Object.entries(filters)) {
313
+ if (key === "language" || key === "scope") {
314
+ continue;
315
+ }
316
+ clauses.push(`${quoteIdentifier(key)} = '${escapeSqlString(value)}'`);
317
+ }
318
+ return clauses.length > 0 ? clauses.join(" AND ") : null;
319
+ }
320
+ function toSearchHit(row, score, query, metadataKeys) {
321
+ const contentText = expectStringField(row, "content_text");
322
+ return {
323
+ chunk_id: expectStringField(row, "chunk_id"),
324
+ heading: expectStringField(row, "heading"),
325
+ breadcrumb: expectStringField(row, "breadcrumb"),
326
+ snippet: makeSnippet(contentText, query),
327
+ filepath: expectStringField(row, "filepath"),
328
+ metadata: extractMetadata(row, metadataKeys),
329
+ score
330
+ };
331
+ }
332
+ function extractMetadata(row, metadataKeys) {
333
+ const metadataJson = row.metadata_json;
334
+ if (typeof metadataJson === "string" && metadataJson.trim()) {
335
+ try {
336
+ const parsed = JSON.parse(metadataJson);
337
+ const metadata = {};
338
+ for (const [key, value] of Object.entries(parsed)) {
339
+ if (typeof value === "string" && value) {
340
+ metadata[key] = value;
341
+ }
342
+ }
343
+ return metadata;
344
+ }
345
+ catch {
346
+ // Fall through to column extraction.
347
+ }
348
+ }
349
+ const metadata = {};
350
+ for (const key of metadataKeys) {
351
+ const value = row[key];
352
+ if (typeof value === "string" && value) {
353
+ metadata[key] = value;
354
+ }
355
+ }
356
+ return metadata;
357
+ }
358
+ function serializeChunkRow(chunk, metadataKeys, vectorsByChunkId) {
359
+ const record = {
360
+ chunk_id: chunk.chunk_id,
361
+ filepath: chunk.filepath,
362
+ heading: chunk.heading,
363
+ heading_level: chunk.heading_level,
364
+ content: chunk.content,
365
+ content_text: chunk.content_text,
366
+ breadcrumb: chunk.breadcrumb,
367
+ chunk_index: chunk.chunk_index,
368
+ metadata_json: JSON.stringify(chunk.metadata)
369
+ };
370
+ for (const key of metadataKeys) {
371
+ record[key] = chunk.metadata[key] ?? "";
372
+ }
373
+ const vector = vectorsByChunkId?.get(chunk.chunk_id);
374
+ if (vector) {
375
+ record.vector = vector;
376
+ }
377
+ return record;
378
+ }
379
+ function collectMetadataKeys(chunks) {
380
+ const keys = new Set();
381
+ for (const chunk of chunks) {
382
+ for (const key of Object.keys(chunk.metadata)) {
383
+ keys.add(key);
384
+ }
385
+ }
386
+ return [...keys].sort((a, b) => a.localeCompare(b));
387
+ }
388
+ async function safeCreateScalarIndex(table, column) {
389
+ try {
390
+ await table.createIndex(column, {
391
+ config: Index.btree(),
392
+ replace: true
393
+ });
394
+ }
395
+ catch {
396
+ // Non-fatal optimization path.
397
+ }
398
+ }
399
+ function escapeSqlString(value) {
400
+ return value
401
+ .replace(/\\/g, "\\\\")
402
+ .replaceAll("\0", "")
403
+ .replace(/'/g, "''");
404
+ }
405
+ function rrf(rank, weight) {
406
+ if (rank === undefined || weight <= 0) {
407
+ return 0;
408
+ }
409
+ return weight / (RRF_K + rank);
410
+ }
411
+ function quoteIdentifier(identifier) {
412
+ return `\`${identifier.replace(/`/g, "``")}\``;
413
+ }
414
+ function expectStringField(row, field) {
415
+ const value = row[field];
416
+ if (typeof value === "string") {
417
+ return value;
418
+ }
419
+ if (value === null || value === undefined) {
420
+ return "";
421
+ }
422
+ return String(value);
423
+ }
424
+ function toNumberField(row, field) {
425
+ const value = row[field];
426
+ if (typeof value === "number") {
427
+ return value;
428
+ }
429
+ if (typeof value === "bigint") {
430
+ return Number(value);
431
+ }
432
+ const parsed = Number(value);
433
+ return Number.isFinite(parsed) ? parsed : 0;
434
+ }
435
+ function normalizePhraseSlop(value) {
436
+ if (value === undefined || !Number.isFinite(value)) {
437
+ return 0;
438
+ }
439
+ const rounded = Math.floor(value);
440
+ return Math.max(0, Math.min(5, rounded));
441
+ }
442
+ //# sourceMappingURL=lancedb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lancedb.js","sourceRoot":"","sources":["../src/lancedb.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EACL,eAAe,EACf,WAAW,EAGZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,UAAU,EACV,eAAe,EACf,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAc5B,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AACpC,MAAM,KAAK,GAAG,EAAE,CAAC;AA0BjB,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAiC;IAEjC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACxC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,gBAAgB,CAAC,CACjE,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAE3E,MAAM,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE;YACtC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YACzC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE;YACjC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YACzC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC;YACxC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC;YACxC,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC;SAC5C,CAAC,CAAC;QAEH,qEAAqE;QACrE,IAAI,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YACrE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE;oBAChC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;oBACtC,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;YACvE,CAAC;QACH,CAAC;QAED,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;IAED,OAAO;QACL,SAAS;QACT,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,mBAAmB;IACb,KAAK,CAAQ;IACb,YAAY,CAAW;IACvB,eAAe,CAAS;IACxB,UAAU,CAAS;IACnB,sBAAsB,CAAgC;IACtD,YAAY,CAAS;IACrB,SAAS,CAA4B;IAC9C,sBAAsB,GAAG,KAAK,CAAC;IAEvC,YACE,KAAY,EACZ,YAAsB,EACtB,UAII,EAAE;QAEN,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;QACvD,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC7D,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAuC;QACvD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;QAC1E,MAAM,aAAa,GAIf,EAAE,CAAC;QACP,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC1C,aAAa,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC1D,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;YACjD,aAAa,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QACxE,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,aAAa,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACpD,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;YAC3B,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM;YAC/D,CAAC,CAAC,CAAC,CAAC;QACN,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAE7E,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5D,IAAI,CAAC,WAAW,CACd,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAC3E,WAAW,EACX,UAAU,CACX;YACD,IAAI,CAAC,WAAW,CACd,IAAI,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EACjE,WAAW,EACX,UAAU,CACX;YACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC;SACpD,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC;QACzE,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC;QACnE,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACnG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/B,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAC9D,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACzC,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM;YAC5C,CAAC,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YACvE,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI;gBACJ,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,IAAI;aACX,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI;YACJ,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,aAAa,OAAO,CAAC,QAAQ,yEAAyE,CACvG,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK;aAChC,KAAK,EAAE;aACP,KAAK,CAAC,eAAe,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;aAC1D,KAAK,CAAC,CAAC,CAAC;aACR,OAAO,EAAE,CAAC;QAEb,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,aAAa,OAAO,CAAC,QAAQ,2DAA2D,CACzF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAa,CAAC;QACzC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;QAEvC,2DAA2D;QAC3D,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK;aAC/B,KAAK,EAAE;aACP,KAAK,CAAC,eAAe,eAAe,6BAA6B,QAAQ,QAAQ,QAAQ,EAAE,CAAC;aAC5F,OAAO,EAAE,CAAC;QAEb,iFAAiF;QACjF,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,KAAK;aACvC,KAAK,EAAE;aACP,KAAK,CAAC,eAAe,eAAe,GAAG,CAAC;aACxC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;aACvB,OAAO,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC;QAE7C,MAAM,UAAU,GAAG,SAAS;aACzB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAe,CAAC;aAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;QAErF,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,SAAS,UAAU,GAAG,CAAC,OAAO,WAAW,EAAE,CAAC;YAClE,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,CAAC;YAC/C,MAAM,IAAI,GACR,aAAa,KAAK,CAAC;gBACjB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,YAAY,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YAE5E,MAAM,CAAC,IAAI,CAAC,cAAc,OAAO,KAAK,aAAa,MAAM,IAAI,UAAU,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SAC1B,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,KAAoB,EACpB,WAA0B,EAC1B,KAAa;QAEb,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAe,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,KAAa,EACb,WAA0B,EAC1B,KAAa;QAEb,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAkB,EAAE,QAAQ,EAAE,QAAQ,CAGrE,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAmB,CAAC;YACzD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAe,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,KAAa,EACb,OAA+B;QAE/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK;aAClC,MAAM,CAAC,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;aAC1F,KAAK,CAAC,GAAG,CAAC;aACV,OAAO,EAAE,CAAC;QAEb,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,OAAO,EAAE,8EAA8E;gBACvF,iBAAiB,EAAE,EAAE;aACtB,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAA6B,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrE,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACpB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC;aAC1C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO;YACL,OAAO,EAAE,aAAa;gBACpB,CAAC,CAAC,8BAA8B,KAAK,kBAAkB,aAAa,GAAG;gBACvE,CAAC,CAAC,8BAA8B,KAAK,IAAI;YAC3C,iBAAiB,EAAE,WAAW;SAC/B,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,KAAc;QACtC,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,CAAC,2CAA2C,MAAM,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;IACrC,CAAC;CACF;AAED,SAAS,SAAS,CAChB,SAAqB,EACrB,UAAsB,EACtB,UAAsB,EACtB,eAAuB,EACvB,YAAoB,EACpB,cAAsB,CAAC;IAEvB,MAAM,SAAS,GAAG,IAAI,GAAG,EAQtB,CAAC;IAEJ,MAAM,YAAY,GAAG,CACnB,IAAgB,EAChB,GAA8C,EACxC,EAAE;QACR,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;YAChD,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YAEhB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBAC9C,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IAEF,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrC,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACvC,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;SAC3B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,KAAK,GACT,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC;YACjC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC;YACtC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAEtC,OAAO;YACL,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAChC,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,OAAO,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA+B,EAAE,YAAuB;IAChF,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE5B,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEvE,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,eAAe,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CACV,KAAK,WAAW,yBAAyB,cAAc,OAAO,eAAe,SAAS,WAAW,yBAAyB,WAAW,0BAA0B,WAAW,2BAA2B,cAAc,YAAY,cAAc,OAAO,eAAe,MAAM,CAC1Q,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED,SAAS,WAAW,CAClB,GAAa,EACb,KAAa,EACb,KAAa,EACb,YAAsB;IAEtB,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAE3D,OAAO;QACL,QAAQ,EAAE,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC;QAC5C,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC;QAC1C,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC;QAChD,OAAO,EAAE,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC;QACxC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC;QAC5C,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC;QAC5C,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,GAAa,EACb,YAAsB;IAEtB,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC;IACvC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAA4B,CAAC;YACnE,MAAM,QAAQ,GAA2B,EAAE,CAAC;YAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,EAAE,CAAC;oBACvC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACxB,CAAC;YACH,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,EAAE,CAAC;YACvC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAY,EACZ,YAAsB,EACtB,gBAAwC;IAExC,MAAM,MAAM,GAAa;QACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC9C,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAe;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,KAAY,EAAE,MAAc;IAC/D,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE;YAC9B,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE;YACrB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK;SACT,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,GAAG,CAAC,IAAwB,EAAE,MAAc;IACnD,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IACzC,OAAO,KAAK,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAa,EAAE,KAA8B;IACtE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,aAAa,CAAC,GAAa,EAAE,KAA8B;IAClE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ChunkingStrategy, Manifest, ResolvedFileConfig } from "./types.js";
2
+ export declare function parseManifest(input: unknown): Manifest;
3
+ export declare function parseManifestJson(contents: string): Manifest;
4
+ export declare function resolveFileConfig(params: {
5
+ relativeFilePath: string;
6
+ manifestBaseDir?: string;
7
+ manifest?: Manifest;
8
+ markdown?: string;
9
+ defaults?: Partial<ResolvedFileConfig>;
10
+ }): ResolvedFileConfig;
11
+ /**
12
+ * Scans markdown for an HTML comment chunking hint of the form:
13
+ * <!-- mcp_chunking_hint: {"chunk_by": "h3"} -->
14
+ *
15
+ * Returns a partial strategy override (just `chunk_by`) if found and valid,
16
+ * or undefined if no hint is present or parsing fails.
17
+ */
18
+ export declare function parseHtmlChunkingHint(markdown: string): Pick<ChunkingStrategy, "chunk_by"> | undefined;
19
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,QAAQ,EAER,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAwBtD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAQ5D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACxC,GAAG,kBAAkB,CA+DrB;AAkED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,GACf,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,SAAS,CAqBhD"}