@devflow-tools/knowledge-engine 0.15.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bm25.js +1 -1
- package/dist/bm25.js.map +1 -1
- package/dist/context7-fetcher.d.ts +3 -0
- package/dist/context7-fetcher.d.ts.map +1 -1
- package/dist/context7-fetcher.js +109 -8
- package/dist/context7-fetcher.js.map +1 -1
- package/dist/git-fetcher.d.ts +2 -0
- package/dist/git-fetcher.d.ts.map +1 -1
- package/dist/git-fetcher.js +10 -27
- package/dist/git-fetcher.js.map +1 -1
- package/dist/hybrid-search.d.ts +15 -14
- package/dist/hybrid-search.d.ts.map +1 -1
- package/dist/hybrid-search.js +44 -56
- package/dist/hybrid-search.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/knowledge-engine.d.ts +48 -5
- package/dist/knowledge-engine.d.ts.map +1 -1
- package/dist/knowledge-engine.js +171 -131
- package/dist/knowledge-engine.js.map +1 -1
- package/dist/knowledge-store.d.ts +62 -1
- package/dist/knowledge-store.d.ts.map +1 -1
- package/dist/knowledge-store.js +169 -10
- package/dist/knowledge-store.js.map +1 -1
- package/dist/markdown-converter.d.ts +7 -1
- package/dist/markdown-converter.d.ts.map +1 -1
- package/dist/markdown-converter.js +253 -36
- package/dist/markdown-converter.js.map +1 -1
- package/package.json +5 -5
- package/dist/vector-store.d.ts +0 -12
- package/dist/vector-store.d.ts.map +0 -1
- package/dist/vector-store.js +0 -36
- package/dist/vector-store.js.map +0 -1
package/dist/knowledge-store.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import Database from 'better-sqlite3';
|
|
2
2
|
import * as sqliteVec from 'sqlite-vec';
|
|
3
|
+
import { dirname } from 'node:path';
|
|
4
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
3
5
|
const KNOWLEDGE_SCHEMA = `
|
|
4
6
|
CREATE TABLE IF NOT EXISTS knowledge_docs (
|
|
5
7
|
id TEXT PRIMARY KEY,
|
|
@@ -24,7 +26,8 @@ CREATE TABLE IF NOT EXISTS knowledge_chunks (
|
|
|
24
26
|
|
|
25
27
|
CREATE VIRTUAL TABLE IF NOT EXISTS knowledge_fts USING fts5(
|
|
26
28
|
id UNINDEXED, heading_path, content, code_blocks,
|
|
27
|
-
content=knowledge_chunks
|
|
29
|
+
content=knowledge_chunks,
|
|
30
|
+
tokenize='trigram'
|
|
28
31
|
);
|
|
29
32
|
|
|
30
33
|
CREATE VIRTUAL TABLE IF NOT EXISTS knowledge_vec USING vec0(
|
|
@@ -38,12 +41,12 @@ CREATE TRIGGER IF NOT EXISTS kchunks_ai AFTER INSERT ON knowledge_chunks BEGIN
|
|
|
38
41
|
VALUES (new.rowid, new.id, new.heading_path, new.content, new.code_blocks);
|
|
39
42
|
END;
|
|
40
43
|
CREATE TRIGGER IF NOT EXISTS kchunks_ad AFTER DELETE ON knowledge_chunks BEGIN
|
|
41
|
-
INSERT INTO knowledge_fts(knowledge_fts, id, heading_path, content, code_blocks)
|
|
42
|
-
VALUES('delete', old.id, old.heading_path, old.content, old.code_blocks);
|
|
44
|
+
INSERT INTO knowledge_fts(knowledge_fts, rowid, id, heading_path, content, code_blocks)
|
|
45
|
+
VALUES('delete', old.rowid, old.id, old.heading_path, old.content, old.code_blocks);
|
|
43
46
|
END;
|
|
44
47
|
CREATE TRIGGER IF NOT EXISTS kchunks_au AFTER UPDATE ON knowledge_chunks BEGIN
|
|
45
|
-
INSERT INTO knowledge_fts(knowledge_fts, id, heading_path, content, code_blocks)
|
|
46
|
-
VALUES('delete', old.id, old.heading_path, old.content, old.code_blocks);
|
|
48
|
+
INSERT INTO knowledge_fts(knowledge_fts, rowid, id, heading_path, content, code_blocks)
|
|
49
|
+
VALUES('delete', old.rowid, old.id, old.heading_path, old.content, old.code_blocks);
|
|
47
50
|
INSERT INTO knowledge_fts(rowid, id, heading_path, content, code_blocks)
|
|
48
51
|
VALUES (new.rowid, new.id, new.heading_path, new.content, new.code_blocks);
|
|
49
52
|
END;
|
|
@@ -51,13 +54,37 @@ END;
|
|
|
51
54
|
export class KnowledgeStore {
|
|
52
55
|
db;
|
|
53
56
|
constructor(dbPath) {
|
|
57
|
+
const dir = dirname(dbPath);
|
|
58
|
+
if (!existsSync(dir))
|
|
59
|
+
mkdirSync(dir, { recursive: true });
|
|
54
60
|
this.db = new Database(dbPath);
|
|
55
61
|
this.db.pragma('journal_mode = WAL');
|
|
62
|
+
this.db.pragma('busy_timeout = 5000');
|
|
56
63
|
this.db.pragma('foreign_keys = ON');
|
|
57
64
|
sqliteVec.load(this.db);
|
|
58
65
|
this.db.exec(KNOWLEDGE_SCHEMA);
|
|
66
|
+
this.ensureTrigramFts();
|
|
59
67
|
this.db.exec(FTS_TRIGGERS);
|
|
60
68
|
}
|
|
69
|
+
ensureTrigramFts() {
|
|
70
|
+
const row = this.db.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'knowledge_fts'").get();
|
|
71
|
+
if (/tokenize\s*=\s*['\"]?trigram/i.test(row?.sql ?? ''))
|
|
72
|
+
return;
|
|
73
|
+
this.db.transaction(() => {
|
|
74
|
+
this.db.exec(`
|
|
75
|
+
DROP TRIGGER IF EXISTS kchunks_ai;
|
|
76
|
+
DROP TRIGGER IF EXISTS kchunks_ad;
|
|
77
|
+
DROP TRIGGER IF EXISTS kchunks_au;
|
|
78
|
+
DROP TABLE IF EXISTS knowledge_fts;
|
|
79
|
+
CREATE VIRTUAL TABLE knowledge_fts USING fts5(
|
|
80
|
+
id UNINDEXED, heading_path, content, code_blocks,
|
|
81
|
+
content=knowledge_chunks,
|
|
82
|
+
tokenize='trigram'
|
|
83
|
+
);
|
|
84
|
+
INSERT INTO knowledge_fts(knowledge_fts) VALUES('rebuild');
|
|
85
|
+
`);
|
|
86
|
+
})();
|
|
87
|
+
}
|
|
61
88
|
upsertDoc(doc) {
|
|
62
89
|
const existing = this.db.prepare('SELECT id FROM knowledge_docs WHERE id = ?').get(doc.id);
|
|
63
90
|
if (existing) {
|
|
@@ -74,9 +101,54 @@ export class KnowledgeStore {
|
|
|
74
101
|
this.db.prepare('INSERT INTO knowledge_chunks (id, doc_id, chunk_index, heading_path, content, code_blocks, token_count) VALUES (?,?,?,?,?,?,?)').run(chunk.id, chunk.docId, chunk.index, chunk.headingPath, chunk.content, chunk.codeBlocks ?? null, chunk.tokenCount ?? null);
|
|
75
102
|
}
|
|
76
103
|
insertEmbedding(id, embedding) {
|
|
77
|
-
const buffer = Buffer.from(embedding.buffer);
|
|
104
|
+
const buffer = Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);
|
|
78
105
|
this.db.prepare('INSERT OR REPLACE INTO knowledge_vec(id, embedding) VALUES (?, ?)').run(id, buffer);
|
|
79
106
|
}
|
|
107
|
+
insertEmbeddingBatch(entries) {
|
|
108
|
+
if (entries.length === 0)
|
|
109
|
+
return;
|
|
110
|
+
const insert = this.db.prepare('INSERT OR REPLACE INTO knowledge_vec(id, embedding) VALUES (?, ?)');
|
|
111
|
+
this.db.transaction(() => {
|
|
112
|
+
for (const { id, embedding } of entries) {
|
|
113
|
+
insert.run(id, Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength));
|
|
114
|
+
}
|
|
115
|
+
})();
|
|
116
|
+
}
|
|
117
|
+
replaceDocument(input) {
|
|
118
|
+
if (input.chunks.length !== input.embeddings.length) {
|
|
119
|
+
throw new Error(`Knowledge vector count mismatch: ${input.chunks.length} chunks, ${input.embeddings.length} vectors`);
|
|
120
|
+
}
|
|
121
|
+
const oldIds = this.db.prepare('SELECT id FROM knowledge_chunks WHERE doc_id = ?').all(input.doc.id);
|
|
122
|
+
const deleteVector = this.db.prepare('DELETE FROM knowledge_vec WHERE id = ?');
|
|
123
|
+
const insertChunk = this.db.prepare('INSERT INTO knowledge_chunks (id, doc_id, chunk_index, heading_path, content, code_blocks, token_count) VALUES (?,?,?,?,?,?,?)');
|
|
124
|
+
const insertVector = this.db.prepare('INSERT INTO knowledge_vec(id, embedding) VALUES (?, ?)');
|
|
125
|
+
this.db.transaction(() => {
|
|
126
|
+
this.upsertDoc(input.doc);
|
|
127
|
+
for (const { id } of oldIds)
|
|
128
|
+
deleteVector.run(id);
|
|
129
|
+
this.clearChunks(input.doc.id);
|
|
130
|
+
for (let index = 0; index < input.chunks.length; index++) {
|
|
131
|
+
const chunk = input.chunks[index];
|
|
132
|
+
const embedding = input.embeddings[index];
|
|
133
|
+
insertChunk.run(chunk.id, chunk.docId, chunk.index, chunk.headingPath, chunk.content, chunk.codeBlocks ?? null, chunk.tokenCount ?? null);
|
|
134
|
+
insertVector.run(chunk.id, Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength));
|
|
135
|
+
}
|
|
136
|
+
})();
|
|
137
|
+
}
|
|
138
|
+
replaceDocumentChunks(input) {
|
|
139
|
+
const oldIds = this.db.prepare('SELECT id FROM knowledge_chunks WHERE doc_id = ?').all(input.doc.id);
|
|
140
|
+
const deleteVector = this.db.prepare('DELETE FROM knowledge_vec WHERE id = ?');
|
|
141
|
+
const insertChunk = this.db.prepare('INSERT INTO knowledge_chunks (id, doc_id, chunk_index, heading_path, content, code_blocks, token_count) VALUES (?,?,?,?,?,?,?)');
|
|
142
|
+
this.db.transaction(() => {
|
|
143
|
+
this.upsertDoc(input.doc);
|
|
144
|
+
for (const { id } of oldIds)
|
|
145
|
+
deleteVector.run(id);
|
|
146
|
+
this.clearChunks(input.doc.id);
|
|
147
|
+
for (const chunk of input.chunks) {
|
|
148
|
+
insertChunk.run(chunk.id, chunk.docId, chunk.index, chunk.headingPath, chunk.content, chunk.codeBlocks ?? null, chunk.tokenCount ?? null);
|
|
149
|
+
}
|
|
150
|
+
})();
|
|
151
|
+
}
|
|
80
152
|
searchBM25(query, limit = 20, sources) {
|
|
81
153
|
if (sources && sources.length > 0) {
|
|
82
154
|
const placeholders = sources.map(() => '?').join(',');
|
|
@@ -96,12 +168,19 @@ export class KnowledgeStore {
|
|
|
96
168
|
`).all(query, limit);
|
|
97
169
|
return rows;
|
|
98
170
|
}
|
|
99
|
-
searchVector(embedding, limit = 20) {
|
|
100
|
-
const buffer = Buffer.from(embedding.buffer);
|
|
171
|
+
searchVector(embedding, limit = 20, sources) {
|
|
172
|
+
const buffer = Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);
|
|
173
|
+
const sourceFilter = sources?.length
|
|
174
|
+
? `WHERE d.source IN (${sources.map(() => '?').join(',')})`
|
|
175
|
+
: '';
|
|
101
176
|
const rows = this.db.prepare(`
|
|
102
177
|
SELECT v.id, vec_distance_cosine(v.embedding, ?) as distance
|
|
103
|
-
FROM knowledge_vec v
|
|
104
|
-
|
|
178
|
+
FROM knowledge_vec v
|
|
179
|
+
JOIN knowledge_chunks c ON c.id = v.id
|
|
180
|
+
JOIN knowledge_docs d ON d.id = c.doc_id
|
|
181
|
+
${sourceFilter}
|
|
182
|
+
ORDER BY distance LIMIT ?
|
|
183
|
+
`).all(buffer, ...(sources ?? []), limit);
|
|
105
184
|
return rows;
|
|
106
185
|
}
|
|
107
186
|
getChunk(id) {
|
|
@@ -114,6 +193,86 @@ export class KnowledgeStore {
|
|
|
114
193
|
WHERE kd.source = ? ORDER BY kc.chunk_index LIMIT ?
|
|
115
194
|
`).all(source, limit);
|
|
116
195
|
}
|
|
196
|
+
listChunks(options = {}) {
|
|
197
|
+
const conditions = [];
|
|
198
|
+
const params = [];
|
|
199
|
+
if (options.sources?.length) {
|
|
200
|
+
conditions.push(`d.source IN (${options.sources.map(() => '?').join(',')})`);
|
|
201
|
+
params.push(...options.sources);
|
|
202
|
+
}
|
|
203
|
+
if (options.afterId) {
|
|
204
|
+
conditions.push('c.id > ?');
|
|
205
|
+
params.push(options.afterId);
|
|
206
|
+
}
|
|
207
|
+
const where = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
208
|
+
const limit = options.limit ?? 100_000;
|
|
209
|
+
return this.db.prepare(`
|
|
210
|
+
SELECT c.*, d.source, d.url, d.version
|
|
211
|
+
FROM knowledge_chunks c
|
|
212
|
+
JOIN knowledge_docs d ON d.id = c.doc_id
|
|
213
|
+
${where}
|
|
214
|
+
ORDER BY c.id
|
|
215
|
+
LIMIT ?
|
|
216
|
+
`).all(...params, limit);
|
|
217
|
+
}
|
|
218
|
+
listMissingEmbeddingChunks(options = {}) {
|
|
219
|
+
const conditions = ['v.id IS NULL'];
|
|
220
|
+
const params = [];
|
|
221
|
+
if (options.source) {
|
|
222
|
+
conditions.push('d.source = ?');
|
|
223
|
+
params.push(options.source);
|
|
224
|
+
}
|
|
225
|
+
if (options.afterId) {
|
|
226
|
+
conditions.push('c.id > ?');
|
|
227
|
+
params.push(options.afterId);
|
|
228
|
+
}
|
|
229
|
+
return this.db.prepare(`
|
|
230
|
+
SELECT c.*, d.source, d.url, d.version
|
|
231
|
+
FROM knowledge_chunks c
|
|
232
|
+
JOIN knowledge_docs d ON d.id = c.doc_id
|
|
233
|
+
LEFT JOIN knowledge_vec v ON v.id = c.id
|
|
234
|
+
WHERE ${conditions.join(' AND ')}
|
|
235
|
+
ORDER BY c.id
|
|
236
|
+
LIMIT ?
|
|
237
|
+
`).all(...params, options.limit ?? 32);
|
|
238
|
+
}
|
|
239
|
+
countChunks(source) {
|
|
240
|
+
const row = source
|
|
241
|
+
? this.db.prepare(`
|
|
242
|
+
SELECT COUNT(*) AS c FROM knowledge_chunks c
|
|
243
|
+
JOIN knowledge_docs d ON d.id = c.doc_id WHERE d.source = ?
|
|
244
|
+
`).get(source)
|
|
245
|
+
: this.db.prepare('SELECT COUNT(*) AS c FROM knowledge_chunks').get();
|
|
246
|
+
return row.c;
|
|
247
|
+
}
|
|
248
|
+
countEmbeddings(source) {
|
|
249
|
+
const row = source
|
|
250
|
+
? this.db.prepare(`
|
|
251
|
+
SELECT COUNT(*) AS c FROM knowledge_vec v
|
|
252
|
+
JOIN knowledge_chunks c ON c.id = v.id
|
|
253
|
+
JOIN knowledge_docs d ON d.id = c.doc_id WHERE d.source = ?
|
|
254
|
+
`).get(source)
|
|
255
|
+
: this.db.prepare('SELECT COUNT(*) AS c FROM knowledge_vec').get();
|
|
256
|
+
return row.c;
|
|
257
|
+
}
|
|
258
|
+
getCoverageBySource() {
|
|
259
|
+
const rows = this.db.prepare(`
|
|
260
|
+
SELECT d.source, COUNT(c.id) AS chunks, COUNT(v.id) AS vectors
|
|
261
|
+
FROM knowledge_docs d
|
|
262
|
+
LEFT JOIN knowledge_chunks c ON c.doc_id = d.id
|
|
263
|
+
LEFT JOIN knowledge_vec v ON v.id = c.id
|
|
264
|
+
GROUP BY d.source ORDER BY d.source
|
|
265
|
+
`).all();
|
|
266
|
+
return rows;
|
|
267
|
+
}
|
|
268
|
+
getDistinctSources() {
|
|
269
|
+
const rows = this.db.prepare(`
|
|
270
|
+
SELECT DISTINCT source FROM knowledge_docs
|
|
271
|
+
WHERE status = 'active'
|
|
272
|
+
ORDER BY source
|
|
273
|
+
`).all();
|
|
274
|
+
return rows.map(row => row.source);
|
|
275
|
+
}
|
|
117
276
|
close() { this.db.close(); }
|
|
118
277
|
}
|
|
119
278
|
//# sourceMappingURL=knowledge-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../src/knowledge-store.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../src/knowledge-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,11 @@ export interface Chunk {
|
|
|
5
5
|
headingPath?: string;
|
|
6
6
|
codeBlocks?: string;
|
|
7
7
|
}
|
|
8
|
-
export declare
|
|
8
|
+
export declare const MIN_CHUNK_CHARS = 500;
|
|
9
|
+
export declare const MAX_CHUNK_CHARS = 3000;
|
|
10
|
+
export declare function extractCodeBlocks(text: string): string;
|
|
11
|
+
export declare function sliceByHeadings(markdown: string, options?: {
|
|
12
|
+
minChars?: number;
|
|
13
|
+
maxChars?: number;
|
|
14
|
+
}): Chunk[];
|
|
9
15
|
//# sourceMappingURL=markdown-converter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-converter.d.ts","sourceRoot":"","sources":["../src/markdown-converter.ts"],"names":[],"mappings":"AAUA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;
|
|
1
|
+
{"version":3,"file":"markdown-converter.d.ts","sourceRoot":"","sources":["../src/markdown-converter.ts"],"names":[],"mappings":"AAUA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAmDD,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,eAAe,OAAO,CAAC;AAUpC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBtD;AA0LD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,KAAK,EAAE,CAkBT"}
|
|
@@ -26,65 +26,282 @@ function filterNoise(md) {
|
|
|
26
26
|
/^made with/i,
|
|
27
27
|
/^built with/i,
|
|
28
28
|
/^powered by/i,
|
|
29
|
+
/^menu\s*$/i,
|
|
30
|
+
/^roadmap$/i,
|
|
31
|
+
/^sidebar$/i,
|
|
32
|
+
/^(api|guides?|reference|tutorial|examples?|blog|docs?|community|changelog)\s*$/i,
|
|
29
33
|
];
|
|
30
34
|
return lines
|
|
31
35
|
.filter(line => {
|
|
32
36
|
const trimmed = line.trim();
|
|
33
37
|
if (!trimmed)
|
|
34
|
-
return true;
|
|
38
|
+
return true;
|
|
35
39
|
for (const p of noisePatterns) {
|
|
36
40
|
if (p.test(trimmed))
|
|
37
41
|
return false;
|
|
38
42
|
}
|
|
43
|
+
// Drop lines where >60% of non-space chars are inside markdown links
|
|
44
|
+
if (isLinkDense(trimmed))
|
|
45
|
+
return false;
|
|
39
46
|
return true;
|
|
40
47
|
})
|
|
41
48
|
.join('\n');
|
|
42
49
|
}
|
|
43
|
-
function
|
|
44
|
-
const
|
|
45
|
-
|
|
50
|
+
function isLinkDense(line) {
|
|
51
|
+
const stripped = line.replace(/!\[.*\]\(.*\)/g, '');
|
|
52
|
+
const linkMatches = stripped.match(/\[([^\]]*)\]\([^)]*\)/g);
|
|
53
|
+
if (!linkMatches || linkMatches.length < 3)
|
|
54
|
+
return false;
|
|
55
|
+
const linkTextLen = linkMatches.reduce((sum, m) => {
|
|
56
|
+
const inner = m.match(/\[([^\]]*)\]/);
|
|
57
|
+
return sum + (inner ? inner[1].length : 0);
|
|
58
|
+
}, 0);
|
|
59
|
+
const totalChars = stripped.replace(/\s/g, '').length;
|
|
60
|
+
return totalChars > 0 && linkTextLen / totalChars > 0.6;
|
|
46
61
|
}
|
|
47
|
-
export
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
62
|
+
export const MIN_CHUNK_CHARS = 500;
|
|
63
|
+
export const MAX_CHUNK_CHARS = 3000;
|
|
64
|
+
function fenceDelimiter(line) {
|
|
65
|
+
return line.match(/^\s{0,3}(`{3,}|~{3,})/)?.[1];
|
|
66
|
+
}
|
|
67
|
+
function closesFence(delimiter, opening) {
|
|
68
|
+
return delimiter[0] === opening[0] && delimiter.length >= opening.length;
|
|
69
|
+
}
|
|
70
|
+
export function extractCodeBlocks(text) {
|
|
71
|
+
const blocks = [];
|
|
72
|
+
let opening;
|
|
73
|
+
let current = [];
|
|
74
|
+
for (const line of text.split('\n')) {
|
|
75
|
+
const delimiter = fenceDelimiter(line);
|
|
76
|
+
if (!opening && delimiter) {
|
|
77
|
+
opening = delimiter;
|
|
78
|
+
current = [line];
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (!opening)
|
|
82
|
+
continue;
|
|
83
|
+
current.push(line);
|
|
84
|
+
if (delimiter && closesFence(delimiter, opening)) {
|
|
85
|
+
blocks.push(current.join('\n'));
|
|
86
|
+
opening = undefined;
|
|
87
|
+
current = [];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return blocks.join('\n');
|
|
91
|
+
}
|
|
92
|
+
function splitSections(markdown) {
|
|
93
|
+
const sections = [];
|
|
94
|
+
const lines = markdown.split('\n');
|
|
95
|
+
let title = 'Overview';
|
|
55
96
|
let headingStack = [];
|
|
97
|
+
let content = [];
|
|
98
|
+
let openingFence;
|
|
99
|
+
const finalize = () => {
|
|
100
|
+
const value = content.join('\n').trim();
|
|
101
|
+
if (value) {
|
|
102
|
+
sections.push({ title, headingPath: headingStack.join(' > '), content: value });
|
|
103
|
+
}
|
|
104
|
+
};
|
|
56
105
|
for (const line of lines) {
|
|
57
|
-
const
|
|
58
|
-
if (
|
|
59
|
-
if (
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
codeBlocks: extractCodeBlocks(content),
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
const level = hMatch[1].length;
|
|
69
|
-
const title = hMatch[2].replace(/\[.*\]\(.*\)/g, '').trim();
|
|
70
|
-
headingStack = headingStack.slice(0, level - 1);
|
|
71
|
-
headingStack.push(title);
|
|
72
|
-
currentTitle = title;
|
|
73
|
-
currentContent = [line];
|
|
106
|
+
const delimiter = fenceDelimiter(line);
|
|
107
|
+
if (delimiter) {
|
|
108
|
+
if (!openingFence)
|
|
109
|
+
openingFence = delimiter;
|
|
110
|
+
else if (closesFence(delimiter, openingFence))
|
|
111
|
+
openingFence = undefined;
|
|
112
|
+
content.push(line);
|
|
113
|
+
continue;
|
|
74
114
|
}
|
|
75
|
-
|
|
76
|
-
|
|
115
|
+
const heading = !openingFence ? line.match(/^(#{1,6})\s+(.+)/) : null;
|
|
116
|
+
if (!heading) {
|
|
117
|
+
content.push(line);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
finalize();
|
|
121
|
+
const level = heading[1].length;
|
|
122
|
+
title = heading[2].replace(/\[([^\]]+)\]\([^)]*\)/g, '$1').trim();
|
|
123
|
+
headingStack = headingStack.slice(0, level - 1);
|
|
124
|
+
headingStack.push(title);
|
|
125
|
+
content = [line];
|
|
126
|
+
}
|
|
127
|
+
finalize();
|
|
128
|
+
return sections;
|
|
129
|
+
}
|
|
130
|
+
function splitText(text, maxChars) {
|
|
131
|
+
const parts = [];
|
|
132
|
+
let remaining = text.trim();
|
|
133
|
+
while (remaining.length > maxChars) {
|
|
134
|
+
const window = remaining.slice(0, maxChars + 1);
|
|
135
|
+
const candidates = [
|
|
136
|
+
window.lastIndexOf('\n\n') + 2,
|
|
137
|
+
window.lastIndexOf('\n') + 1,
|
|
138
|
+
window.lastIndexOf('. ') + 1,
|
|
139
|
+
window.lastIndexOf(' '),
|
|
140
|
+
];
|
|
141
|
+
const splitAt = candidates.find(index => index >= Math.floor(maxChars * 0.6)) ?? maxChars;
|
|
142
|
+
parts.push(remaining.slice(0, splitAt).trim());
|
|
143
|
+
remaining = remaining.slice(splitAt).trim();
|
|
144
|
+
}
|
|
145
|
+
if (remaining)
|
|
146
|
+
parts.push(remaining);
|
|
147
|
+
return parts;
|
|
148
|
+
}
|
|
149
|
+
function markdownBlocks(content, maxChars) {
|
|
150
|
+
const blocks = [];
|
|
151
|
+
const lines = content.split('\n');
|
|
152
|
+
let current = [];
|
|
153
|
+
let openingFence;
|
|
154
|
+
const flushText = () => {
|
|
155
|
+
const text = current.join('\n').trim();
|
|
156
|
+
current = [];
|
|
157
|
+
if (!text)
|
|
158
|
+
return;
|
|
159
|
+
for (const part of splitText(text, maxChars))
|
|
160
|
+
blocks.push({ content: part, atomic: false });
|
|
161
|
+
};
|
|
162
|
+
for (const line of lines) {
|
|
163
|
+
const delimiter = fenceDelimiter(line);
|
|
164
|
+
if (delimiter && !openingFence) {
|
|
165
|
+
flushText();
|
|
166
|
+
openingFence = delimiter;
|
|
167
|
+
current = [line];
|
|
168
|
+
continue;
|
|
77
169
|
}
|
|
170
|
+
if (openingFence) {
|
|
171
|
+
current.push(line);
|
|
172
|
+
if (delimiter && closesFence(delimiter, openingFence)) {
|
|
173
|
+
const code = current.join('\n').trim();
|
|
174
|
+
blocks.push({ content: code, atomic: true });
|
|
175
|
+
current = [];
|
|
176
|
+
openingFence = undefined;
|
|
177
|
+
}
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (line.trim().length === 0)
|
|
181
|
+
flushText();
|
|
182
|
+
else
|
|
183
|
+
current.push(line);
|
|
78
184
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
185
|
+
flushText();
|
|
186
|
+
return blocks;
|
|
187
|
+
}
|
|
188
|
+
function splitSection(section, minChars, maxChars) {
|
|
189
|
+
const fragments = [];
|
|
190
|
+
let blocks = [];
|
|
191
|
+
let length = 0;
|
|
192
|
+
const flush = () => {
|
|
193
|
+
const content = blocks.join('\n\n').trim();
|
|
194
|
+
blocks = [];
|
|
195
|
+
length = 0;
|
|
196
|
+
if (!content)
|
|
197
|
+
return;
|
|
198
|
+
fragments.push({
|
|
199
|
+
title: section.title,
|
|
200
|
+
headingPath: section.headingPath,
|
|
83
201
|
content,
|
|
84
|
-
headingPath: headingStack.join(' > '),
|
|
85
202
|
codeBlocks: extractCodeBlocks(content),
|
|
86
203
|
});
|
|
204
|
+
};
|
|
205
|
+
for (const block of markdownBlocks(section.content, maxChars)) {
|
|
206
|
+
const separator = blocks.length > 0 ? 2 : 0;
|
|
207
|
+
if (blocks.length > 0 && length + separator + block.content.length > maxChars) {
|
|
208
|
+
if (block.atomic && length < minChars) {
|
|
209
|
+
blocks.push(block.content);
|
|
210
|
+
length += separator + block.content.length;
|
|
211
|
+
flush();
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
flush();
|
|
215
|
+
}
|
|
216
|
+
blocks.push(block.content);
|
|
217
|
+
length += (blocks.length > 1 ? 2 : 0) + block.content.length;
|
|
218
|
+
if (block.atomic && block.content.length > maxChars)
|
|
219
|
+
flush();
|
|
220
|
+
}
|
|
221
|
+
flush();
|
|
222
|
+
return fragments;
|
|
223
|
+
}
|
|
224
|
+
function mergeFragments(left, right) {
|
|
225
|
+
const leftPath = left.headingPath.split(' > ').filter(Boolean);
|
|
226
|
+
const rightPath = right.headingPath.split(' > ').filter(Boolean);
|
|
227
|
+
const commonPath = [];
|
|
228
|
+
for (let index = 0; index < Math.min(leftPath.length, rightPath.length); index++) {
|
|
229
|
+
if (leftPath[index] !== rightPath[index])
|
|
230
|
+
break;
|
|
231
|
+
commonPath.push(leftPath[index]);
|
|
232
|
+
}
|
|
233
|
+
const content = `${left.content}\n\n${right.content}`;
|
|
234
|
+
return {
|
|
235
|
+
title: left.title === right.title ? left.title : `${left.title} / ${right.title}`.slice(0, 120),
|
|
236
|
+
headingPath: commonPath.join(' > '),
|
|
237
|
+
content,
|
|
238
|
+
codeBlocks: extractCodeBlocks(content),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function coalesceShortFragments(fragments, minChars, maxChars) {
|
|
242
|
+
const chunks = [];
|
|
243
|
+
for (const fragment of fragments) {
|
|
244
|
+
const previous = chunks.at(-1);
|
|
245
|
+
if (previous
|
|
246
|
+
&& (previous.content.length < minChars || fragment.content.length < minChars)
|
|
247
|
+
&& previous.content.length + 2 + fragment.content.length <= maxChars) {
|
|
248
|
+
chunks[chunks.length - 1] = mergeFragments(previous, fragment);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
chunks.push(fragment);
|
|
252
|
+
}
|
|
87
253
|
}
|
|
88
254
|
return chunks;
|
|
89
255
|
}
|
|
256
|
+
export function sliceByHeadings(markdown, options = {}) {
|
|
257
|
+
const trimmed = markdown.trim();
|
|
258
|
+
if (trimmed.length === 0)
|
|
259
|
+
return [];
|
|
260
|
+
const minChars = Math.max(1, options.minChars ?? MIN_CHUNK_CHARS);
|
|
261
|
+
const maxChars = Math.max(minChars, options.maxChars ?? MAX_CHUNK_CHARS);
|
|
262
|
+
const sections = splitSections(trimmed);
|
|
263
|
+
const hasNestedHeading = sections.some(section => section.headingPath.includes(' > '));
|
|
264
|
+
const fragments = sections
|
|
265
|
+
.filter((section, index) => {
|
|
266
|
+
if (!hasNestedHeading || index !== 0 || section.headingPath.includes(' > '))
|
|
267
|
+
return true;
|
|
268
|
+
const cleaned = section.content.replace(/^#{1,6}\s+.*$/gm, '').replace(/\s+/g, ' ').trim();
|
|
269
|
+
return cleaned.length >= 30;
|
|
270
|
+
})
|
|
271
|
+
.flatMap(section => splitSection(section, minChars, maxChars));
|
|
272
|
+
const chunks = trimmed.length >= minChars
|
|
273
|
+
? coalesceShortFragments(fragments, minChars, maxChars)
|
|
274
|
+
: fragments;
|
|
275
|
+
return chunks.filter(chunk => isQualityChunk(chunk));
|
|
276
|
+
}
|
|
277
|
+
const NAV_TITLES = new Set([
|
|
278
|
+
'overview', 'introduction', 'getting started', 'quick start',
|
|
279
|
+
'api reference', 'api', 'reference', 'guides', 'tutorial',
|
|
280
|
+
'examples', 'blog', 'docs', 'community', 'changelog',
|
|
281
|
+
'roadmap', 'sidebar', 'menu', 'navigation',
|
|
282
|
+
]);
|
|
283
|
+
function isQualityChunk(chunk) {
|
|
284
|
+
// Discard chunks with trivial navigation titles that have very little content
|
|
285
|
+
const cleanedContent = chunk.content
|
|
286
|
+
.replace(/^#{1,4}\s+.*$/gm, '')
|
|
287
|
+
.replace(/\[([^\]]*)\]\([^)]*\)/g, '$1')
|
|
288
|
+
.replace(/[`*_~#>|\[\]!-]/g, '')
|
|
289
|
+
.replace(/\s+/g, ' ')
|
|
290
|
+
.trim();
|
|
291
|
+
if (cleanedContent.length < 10)
|
|
292
|
+
return false;
|
|
293
|
+
const lowerTitle = chunk.title.toLowerCase().trim();
|
|
294
|
+
if (NAV_TITLES.has(lowerTitle) && cleanedContent.length < 120)
|
|
295
|
+
return false;
|
|
296
|
+
// Discard chunks that are mostly links after stripping headings
|
|
297
|
+
const linkChars = (chunk.content.match(/\[([^\]]*)\]\([^)]*\)/g) || [])
|
|
298
|
+
.reduce((sum, m) => {
|
|
299
|
+
const inner = m.match(/\[([^\]]*)\]/);
|
|
300
|
+
return sum + (inner ? inner[1].length : 0);
|
|
301
|
+
}, 0);
|
|
302
|
+
const totalChars = chunk.content.replace(/\s/g, '').length;
|
|
303
|
+
if (totalChars > 0 && linkChars / totalChars > 0.5)
|
|
304
|
+
return false;
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
90
307
|
//# sourceMappingURL=markdown-converter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-converter.js","sourceRoot":"","sources":["../src/markdown-converter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"markdown-converter.js","sourceRoot":"","sources":["../src/markdown-converter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devflow-tools/knowledge-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"postinstall": "playwright install chromium || true"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@devflow-tools/context-engine": "0.
|
|
22
|
-
"@devflow-tools/memory-engine": "0.
|
|
23
|
-
"@devflow-tools/sdk": "0.
|
|
21
|
+
"@devflow-tools/context-engine": "0.16.1",
|
|
22
|
+
"@devflow-tools/memory-engine": "0.16.1",
|
|
23
|
+
"@devflow-tools/sdk": "0.16.1",
|
|
24
24
|
"playwright": "^1.52.0",
|
|
25
25
|
"turndown": "^7.2.4"
|
|
26
26
|
},
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"files": [
|
|
33
33
|
"dist"
|
|
34
34
|
],
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "dfaeb66efe9c87c388fbe6f1b706e9fcf087ce6d"
|
|
36
36
|
}
|