@devflow-tools/context-engine 0.14.4 → 0.16.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/dist/claude-rerank.d.ts +0 -3
  2. package/dist/claude-rerank.d.ts.map +1 -1
  3. package/dist/claude-rerank.js +0 -88
  4. package/dist/claude-rerank.js.map +1 -1
  5. package/dist/compressor.d.ts +8 -1
  6. package/dist/compressor.d.ts.map +1 -1
  7. package/dist/compressor.js +186 -19
  8. package/dist/compressor.js.map +1 -1
  9. package/dist/context-engine.d.ts +12 -0
  10. package/dist/context-engine.d.ts.map +1 -1
  11. package/dist/context-engine.js +202 -26
  12. package/dist/context-engine.js.map +1 -1
  13. package/dist/create-engines.d.ts +5 -2
  14. package/dist/create-engines.d.ts.map +1 -1
  15. package/dist/create-engines.js +35 -14
  16. package/dist/create-engines.js.map +1 -1
  17. package/dist/index.d.ts +6 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +4 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/indexer-adapter.d.ts +6 -2
  22. package/dist/indexer-adapter.d.ts.map +1 -1
  23. package/dist/indexer-adapter.js +34 -5
  24. package/dist/indexer-adapter.js.map +1 -1
  25. package/dist/intent-parser.d.ts +6 -0
  26. package/dist/intent-parser.d.ts.map +1 -1
  27. package/dist/intent-parser.js +263 -98
  28. package/dist/intent-parser.js.map +1 -1
  29. package/dist/onboarding-pack-builder.d.ts +31 -3
  30. package/dist/onboarding-pack-builder.d.ts.map +1 -1
  31. package/dist/onboarding-pack-builder.js +124 -7
  32. package/dist/onboarding-pack-builder.js.map +1 -1
  33. package/dist/retrieval-handlers.d.ts +42 -0
  34. package/dist/retrieval-handlers.d.ts.map +1 -0
  35. package/dist/retrieval-handlers.js +74 -0
  36. package/dist/retrieval-handlers.js.map +1 -0
  37. package/dist/symbol-embedder.d.ts +38 -0
  38. package/dist/symbol-embedder.d.ts.map +1 -0
  39. package/dist/symbol-embedder.js +174 -0
  40. package/dist/symbol-embedder.js.map +1 -0
  41. package/dist/symbol-vector-store.d.ts +25 -0
  42. package/dist/symbol-vector-store.d.ts.map +1 -0
  43. package/dist/symbol-vector-store.js +125 -0
  44. package/dist/symbol-vector-store.js.map +1 -0
  45. package/dist/types.d.ts +2 -1
  46. package/dist/types.d.ts.map +1 -1
  47. package/package.json +9 -6
  48. package/dist/llm-translator.d.ts +0 -6
  49. package/dist/llm-translator.d.ts.map +0 -1
  50. package/dist/llm-translator.js +0 -143
  51. package/dist/llm-translator.js.map +0 -1
@@ -0,0 +1,125 @@
1
+ import Database from "better-sqlite3";
2
+ import * as sqliteVec from "sqlite-vec";
3
+ import { join } from "node:path";
4
+ import { existsSync, mkdirSync } from "node:fs";
5
+ export class SymbolVectorStore {
6
+ db;
7
+ initialized = false;
8
+ constructor(projectRoot) {
9
+ const dir = join(projectRoot, ".devflow");
10
+ if (!existsSync(dir))
11
+ mkdirSync(dir, { recursive: true });
12
+ const dbPath = join(dir, "symbols-vec.db");
13
+ this.db = new Database(dbPath);
14
+ this.db.pragma("journal_mode = WAL");
15
+ this.db.pragma("busy_timeout = 5000");
16
+ }
17
+ initialize() {
18
+ if (this.initialized)
19
+ return;
20
+ sqliteVec.load(this.db);
21
+ this.db.exec(`
22
+ CREATE VIRTUAL TABLE IF NOT EXISTS symbols_vec USING vec0(
23
+ id TEXT PRIMARY KEY,
24
+ embedding FLOAT[384]
25
+ );
26
+ CREATE TABLE IF NOT EXISTS symbol_sources (
27
+ id TEXT PRIMARY KEY,
28
+ file_path TEXT NOT NULL
29
+ );
30
+ CREATE INDEX IF NOT EXISTS idx_symbol_sources_file
31
+ ON symbol_sources(file_path);
32
+ `);
33
+ this.initialized = true;
34
+ }
35
+ upsert(id, filePath, embedding) {
36
+ this.upsertBatch([{ id, filePath, embedding }]);
37
+ }
38
+ upsertBatch(entries) {
39
+ if (entries.length === 0)
40
+ return;
41
+ const deleteVector = this.db.prepare("DELETE FROM symbols_vec WHERE id = ?");
42
+ const insertVector = this.db.prepare("INSERT INTO symbols_vec(id, embedding) VALUES (?, ?)");
43
+ const upsertSource = this.db.prepare(`
44
+ INSERT INTO symbol_sources(id, file_path) VALUES (?, ?)
45
+ ON CONFLICT(id) DO UPDATE SET file_path = excluded.file_path
46
+ `);
47
+ const runAll = this.db.transaction(() => {
48
+ for (const { id, filePath, embedding } of entries) {
49
+ deleteVector.run(id);
50
+ insertVector.run(id, Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength));
51
+ upsertSource.run(id, filePath);
52
+ }
53
+ });
54
+ runAll();
55
+ }
56
+ replaceAll(entries) {
57
+ const deleteVectors = this.db.prepare("DELETE FROM symbols_vec");
58
+ const deleteSources = this.db.prepare("DELETE FROM symbol_sources");
59
+ const insertVector = this.db.prepare("INSERT INTO symbols_vec(id, embedding) VALUES (?, ?)");
60
+ const insertSource = this.db.prepare("INSERT INTO symbol_sources(id, file_path) VALUES (?, ?)");
61
+ const replace = this.db.transaction(() => {
62
+ deleteVectors.run();
63
+ deleteSources.run();
64
+ for (const { id, filePath, embedding } of entries) {
65
+ insertVector.run(id, Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength));
66
+ insertSource.run(id, filePath);
67
+ }
68
+ });
69
+ replace();
70
+ }
71
+ search(embedding, limit) {
72
+ const buffer = Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);
73
+ return this.db
74
+ .prepare(`SELECT id, vec_distance_cosine(embedding, ?) as distance
75
+ FROM symbols_vec
76
+ ORDER BY distance
77
+ LIMIT ?`)
78
+ .all(buffer, limit);
79
+ }
80
+ delete(ids) {
81
+ if (ids.length === 0)
82
+ return;
83
+ const placeholders = ids.map(() => "?").join(",");
84
+ const deleteRows = this.db.transaction(() => {
85
+ this.db
86
+ .prepare(`DELETE FROM symbols_vec WHERE id IN (${placeholders})`)
87
+ .run(...ids);
88
+ this.db
89
+ .prepare(`DELETE FROM symbol_sources WHERE id IN (${placeholders})`)
90
+ .run(...ids);
91
+ });
92
+ deleteRows();
93
+ }
94
+ deleteByFiles(filePaths) {
95
+ if (filePaths.length === 0)
96
+ return;
97
+ const placeholders = filePaths.map(() => "?").join(",");
98
+ const rows = this.db
99
+ .prepare(`SELECT id FROM symbol_sources WHERE file_path IN (${placeholders})`)
100
+ .all(...filePaths);
101
+ this.delete(rows.map(({ id }) => id));
102
+ }
103
+ get(id) {
104
+ const row = this.db
105
+ .prepare("SELECT embedding FROM symbols_vec WHERE id = ?")
106
+ .get(id);
107
+ return row?.embedding ?? null;
108
+ }
109
+ count() {
110
+ const row = this.db
111
+ .prepare("SELECT COUNT(*) as c FROM symbols_vec")
112
+ .get();
113
+ return row.c;
114
+ }
115
+ countSources() {
116
+ const row = this.db
117
+ .prepare("SELECT COUNT(*) as c FROM symbol_sources")
118
+ .get();
119
+ return row.c;
120
+ }
121
+ close() {
122
+ this.db.close();
123
+ }
124
+ }
125
+ //# sourceMappingURL=symbol-vector-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-vector-store.js","sourceRoot":"","sources":["../src/symbol-vector-store.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -16,7 +16,8 @@ export type TaskType = "debug" | "feature" | "understand" | "review" | "refactor
16
16
  export interface OnboardingPack {
17
17
  projectName: string;
18
18
  createdAt: string;
19
- root: string;
19
+ rootPath: string;
20
+ projectHash: string;
20
21
  stats: {
21
22
  files: number;
22
23
  symbols: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE9F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChG,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,kBAAkB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE9F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChG,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,kBAAkB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/context-engine",
3
- "version": "0.14.4",
3
+ "version": "0.16.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -22,10 +22,13 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@colbymchenry/codegraph": "^1.1.1",
25
- "@devflow-tools/knowledge-engine": "^0.14.4",
26
- "@devflow-tools/memory-engine": "^0.14.4",
27
- "@devflow-tools/sdk": "^0.14.4",
28
- "@devflow-tools/telemetry": "^0.14.4"
25
+ "@devflow-tools/knowledge-engine": "0.16.0",
26
+ "@devflow-tools/memory-engine": "0.16.0",
27
+ "@devflow-tools/sdk": "0.16.0",
28
+ "@devflow-tools/telemetry": "0.16.0",
29
+ "better-sqlite3": "^12.11.1",
30
+ "nodejieba": "^3.5.8",
31
+ "sqlite-vec": "^0.1.9"
29
32
  },
30
33
  "devDependencies": {
31
34
  "typescript": "^5.5.0",
@@ -34,5 +37,5 @@
34
37
  "files": [
35
38
  "dist"
36
39
  ],
37
- "gitHead": "54c8815398c8f60461caee19802afa3827ea3100"
40
+ "gitHead": "2f52776bda72517354d44453756cccb9e8de9afa"
38
41
  }
@@ -1,6 +0,0 @@
1
- /**
2
- * Layer 2: Translate Chinese query terms using LLM with disk cache.
3
- * On failure (timeout, no API key, network error), returns the original query unchanged.
4
- */
5
- export declare function translateQuery(query: string, projectRoot: string, _existingExpandedTerms?: string[]): Promise<string>;
6
- //# sourceMappingURL=llm-translator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-translator.d.ts","sourceRoot":"","sources":["../src/llm-translator.ts"],"names":[],"mappings":"AAmHA;;;GAGG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,sBAAsB,GAAE,MAAM,EAAO,GACpC,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
@@ -1,143 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- let cache = null;
4
- let cachePath = "";
5
- let cacheLoaded = false;
6
- function loadCache(projectRoot) {
7
- const cgDir = join(projectRoot, ".codegraph");
8
- const file = join(cgDir, "zh-en-cache.json");
9
- cachePath = file;
10
- if (!existsSync(file))
11
- return {};
12
- try {
13
- return JSON.parse(readFileSync(file, "utf-8"));
14
- }
15
- catch {
16
- return {};
17
- }
18
- }
19
- function saveCache() {
20
- if (!cachePath || !cache)
21
- return;
22
- const dir = join(cachePath, "..");
23
- if (!existsSync(dir))
24
- mkdirSync(dir, { recursive: true });
25
- try {
26
- writeFileSync(cachePath, JSON.stringify(cache, null, 2));
27
- }
28
- catch {
29
- // Cache write failure is non-fatal
30
- }
31
- }
32
- function getCached(projectRoot, term) {
33
- if (!cacheLoaded) {
34
- cache = loadCache(projectRoot);
35
- cacheLoaded = true;
36
- }
37
- return cache?.[term] ?? null;
38
- }
39
- function setCached(projectRoot, term, translation) {
40
- if (!cacheLoaded) {
41
- cache = loadCache(projectRoot);
42
- cacheLoaded = true;
43
- }
44
- if (!cache)
45
- cache = {};
46
- cache[term] = translation;
47
- saveCache();
48
- }
49
- /**
50
- * Call OpenRouter (OpenAI-compatible) API to translate Chinese terms to English
51
- * code-relevant keywords. Timeout at 2s. Returns empty object on any failure.
52
- */
53
- async function callLLM(terms) {
54
- const baseUrl = process.env.OPENROUTER_BASE_URL ??
55
- "https://openrouter.ai/api/v1";
56
- const apiKey = process.env.OPENROUTER_API_KEY ?? "";
57
- if (!apiKey)
58
- return {};
59
- const controller = new AbortController();
60
- const timeout = setTimeout(() => controller.abort(), 2000);
61
- try {
62
- const response = await fetch(`${baseUrl}/chat/completions`, {
63
- method: "POST",
64
- headers: {
65
- "Content-Type": "application/json",
66
- Authorization: `Bearer ${apiKey}`,
67
- },
68
- body: JSON.stringify({
69
- model: "qwen/qwen-2.5-72b-instruct",
70
- max_tokens: 100,
71
- temperature: 0.1,
72
- messages: [
73
- {
74
- role: "system",
75
- content: "You are a code term translator. Translate Chinese phrases to English code-relevant keywords. Output one line per term in format: chinese=english keywords",
76
- },
77
- {
78
- role: "user",
79
- content: terms.join("\n"),
80
- },
81
- ],
82
- }),
83
- signal: controller.signal,
84
- });
85
- const data = (await response.json());
86
- const text = data?.choices?.[0]?.message?.content ?? "";
87
- const result = {};
88
- for (const line of text.split("\n")) {
89
- const eqIdx = line.indexOf("=");
90
- if (eqIdx === -1)
91
- continue;
92
- const chinese = line.slice(0, eqIdx).trim();
93
- const english = line.slice(eqIdx + 1).trim();
94
- if (chinese && english) {
95
- result[chinese] = english;
96
- }
97
- }
98
- return result;
99
- }
100
- catch {
101
- return {};
102
- }
103
- finally {
104
- clearTimeout(timeout);
105
- }
106
- }
107
- /**
108
- * Layer 2: Translate Chinese query terms using LLM with disk cache.
109
- * On failure (timeout, no API key, network error), returns the original query unchanged.
110
- */
111
- export async function translateQuery(query, projectRoot, _existingExpandedTerms = []) {
112
- const hasChinese = /[一-鿿]/.test(query);
113
- if (!hasChinese)
114
- return query;
115
- // Extract consecutive Chinese phrases (2+ chars)
116
- const chinesePhrases = query.match(/[一-鿿]{2,}/g) ?? [];
117
- if (chinesePhrases.length === 0)
118
- return query;
119
- // Check cache and collect uncached terms
120
- const translations = [];
121
- const uncached = [];
122
- for (const phrase of chinesePhrases) {
123
- const cached = getCached(projectRoot, phrase);
124
- if (cached) {
125
- translations.push(cached);
126
- }
127
- else {
128
- uncached.push(phrase);
129
- }
130
- }
131
- // Call LLM for uncached terms
132
- if (uncached.length > 0) {
133
- const llmResult = await callLLM(uncached);
134
- for (const [chinese, english] of Object.entries(llmResult)) {
135
- setCached(projectRoot, chinese, english);
136
- translations.push(english);
137
- }
138
- }
139
- if (translations.length === 0)
140
- return query;
141
- return query + " " + translations.join(" ");
142
- }
143
- //# sourceMappingURL=llm-translator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-translator.js","sourceRoot":"","sources":["../src/llm-translator.ts"],"names":[],"mappings":"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"}