@devflow-tools/context-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.
Files changed (49) 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 +9 -0
  10. package/dist/context-engine.d.ts.map +1 -1
  11. package/dist/context-engine.js +158 -31
  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 +28 -13
  16. package/dist/create-engines.js.map +1 -1
  17. package/dist/index.d.ts +4 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/indexer-adapter.d.ts +3 -1
  22. package/dist/indexer-adapter.d.ts.map +1 -1
  23. package/dist/indexer-adapter.js +31 -15
  24. package/dist/indexer-adapter.js.map +1 -1
  25. package/dist/intent-parser.js +2 -2
  26. package/dist/intent-parser.js.map +1 -1
  27. package/dist/onboarding-pack-builder.d.ts +31 -3
  28. package/dist/onboarding-pack-builder.d.ts.map +1 -1
  29. package/dist/onboarding-pack-builder.js +124 -7
  30. package/dist/onboarding-pack-builder.js.map +1 -1
  31. package/dist/retrieval-handlers.d.ts +42 -0
  32. package/dist/retrieval-handlers.d.ts.map +1 -0
  33. package/dist/retrieval-handlers.js +74 -0
  34. package/dist/retrieval-handlers.js.map +1 -0
  35. package/dist/symbol-embedder.d.ts +24 -2
  36. package/dist/symbol-embedder.d.ts.map +1 -1
  37. package/dist/symbol-embedder.js +149 -50
  38. package/dist/symbol-embedder.js.map +1 -1
  39. package/dist/symbol-vector-store.d.ts +10 -5
  40. package/dist/symbol-vector-store.d.ts.map +1 -1
  41. package/dist/symbol-vector-store.js +59 -16
  42. package/dist/symbol-vector-store.js.map +1 -1
  43. package/dist/types.d.ts +2 -1
  44. package/dist/types.d.ts.map +1 -1
  45. package/package.json +6 -6
  46. package/dist/llm-translator.d.ts +0 -6
  47. package/dist/llm-translator.d.ts.map +0 -1
  48. package/dist/llm-translator.js +0 -143
  49. package/dist/llm-translator.js.map +0 -1
@@ -1,4 +1,3 @@
1
- import type { LLMClient } from '@devflow-tools/sdk';
2
1
  export interface RerankCandidate {
3
2
  id: string;
4
3
  name: string;
@@ -6,8 +5,6 @@ export interface RerankCandidate {
6
5
  file?: string;
7
6
  score?: number;
8
7
  }
9
- export declare function setRerankLLMClient(client: LLMClient): void;
10
- export declare function isRerankAvailable(): boolean;
11
8
  export declare function claudeRerank(query: string, candidates: RerankCandidate[], options?: {
12
9
  topK?: number;
13
10
  model?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-rerank.d.ts","sourceRoot":"","sources":["../src/claude-rerank.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAKpD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE1D;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAwCD,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,eAAe,EAAE,CAAC,CAsC5B"}
1
+ {"version":3,"file":"claude-rerank.d.ts","sourceRoot":"","sources":["../src/claude-rerank.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,eAAe,EAAE,CAAC,CAG5B"}
@@ -1,93 +1,5 @@
1
- const TIMEOUT_MS = 2000;
2
- const CACHE_TTL = 5 * 60 * 1000;
3
- const RERANK_SYSTEM_PROMPT = `You are a code search relevance ranker. Given a user query and
4
- a list of code search results, return the indices of the most relevant results
5
- in order of relevance. Only include results that are genuinely relevant to the query.
6
- Respond with ONLY a JSON array of indices, like [3, 0, 7, 1]. Do not explain.`;
7
- let llmClient = null;
8
- export function setRerankLLMClient(client) {
9
- llmClient = client;
10
- }
11
- export function isRerankAvailable() {
12
- return llmClient?.isAvailable ?? false;
13
- }
14
- // LRU cache
15
- const cache = new Map();
16
- function cacheGet(query) {
17
- const key = query.toLowerCase().trim();
18
- const entry = cache.get(key);
19
- if (entry && Date.now() - entry.ts < CACHE_TTL)
20
- return entry.indices;
21
- cache.delete(key);
22
- return null;
23
- }
24
- // Concurrency semaphore
25
- let activeCalls = 0;
26
- const MAX_CONCURRENT = 2;
27
- async function acquireSemaphore() {
28
- const start = Date.now();
29
- while (activeCalls >= MAX_CONCURRENT) {
30
- if (Date.now() - start > 5000)
31
- return false;
32
- await new Promise(r => setTimeout(r, 100));
33
- }
34
- activeCalls++;
35
- return true;
36
- }
37
- function releaseSemaphore() { activeCalls = Math.max(0, activeCalls - 1); }
38
- // Multi-pattern response parser
39
- function parseIndices(text, maxIndex) {
40
- const patterns = [
41
- t => { try {
42
- const v = JSON.parse(t);
43
- if (Array.isArray(v) && v.every(x => typeof x === 'number'))
44
- return v;
45
- }
46
- catch { } return null; },
47
- t => { const m = t.match(/```(?:json)?\s*([\s\S]*?)```/); return m ? parseIndices(m[1], maxIndex) : null; },
48
- t => { const m = t.match(/\[([0-9,\s]+)\]/); return m ? m[1].split(',').map(s => parseInt(s.trim())).filter(n => !isNaN(n) && n >= 0 && n < maxIndex) : null; },
49
- ];
50
- for (const p of patterns) {
51
- const result = p(text);
52
- if (result !== null && result.length > 0)
53
- return result;
54
- }
55
- return null;
56
- }
57
1
  export async function claudeRerank(query, candidates, options) {
58
2
  const topK = options?.topK ?? 10;
59
- if (candidates.length <= topK)
60
- return candidates;
61
- const cached = cacheGet(query);
62
- if (cached)
63
- return cached.map(i => candidates[i]).filter(Boolean).slice(0, topK);
64
- if (!llmClient?.isAvailable) {
65
- return candidates.slice(0, topK);
66
- }
67
- if (!(await acquireSemaphore())) {
68
- return candidates.slice(0, topK);
69
- }
70
- try {
71
- const candidatesJson = candidates.map((c, i) => ({
72
- index: i, id: c.id, name: c.name,
73
- snippet: c.snippet.slice(0, 150),
74
- file: c.file ?? '',
75
- }));
76
- const response = await llmClient.chat({
77
- systemPrompt: RERANK_SYSTEM_PROMPT,
78
- messages: [{ role: 'user', content: `Query: ${query}\n\nCandidates:\n${JSON.stringify(candidatesJson)}` }],
79
- maxTokens: 256,
80
- });
81
- const indices = parseIndices(response.content.trim(), candidates.length);
82
- if (indices) {
83
- cache.set(query.toLowerCase().trim(), { indices, ts: Date.now() });
84
- return indices.map(i => candidates[i]).filter(Boolean).slice(0, topK);
85
- }
86
- }
87
- catch { /* silent fallback */ }
88
- finally {
89
- releaseSemaphore();
90
- }
91
3
  return candidates.slice(0, topK);
92
4
  }
93
5
  //# sourceMappingURL=claude-rerank.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-rerank.js","sourceRoot":"","sources":["../src/claude-rerank.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-rerank.js","sourceRoot":"","sources":["../src/claude-rerank.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAa,EACb,UAA6B,EAC7B,OAA2C;IAE3C,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;IACjC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC"}
@@ -2,6 +2,13 @@ import type { FileSnippet } from "@devflow-tools/sdk";
2
2
  export interface CompressionResult {
3
3
  files: FileSnippet[];
4
4
  tokenCount: number;
5
+ droppedBlockCount: number;
6
+ overBudget: boolean;
7
+ blindTruncated: boolean;
5
8
  }
6
- export declare function compressToTokenLimit(files: FileSnippet[], maxTokens: number): CompressionResult;
9
+ export interface CompressionOptions {
10
+ allowBlindTruncate?: boolean;
11
+ errorLogPath?: string | null;
12
+ }
13
+ export declare function compressToTokenLimit(files: FileSnippet[], maxTokens: number, options?: CompressionOptions): CompressionResult;
7
14
  //# sourceMappingURL=compressor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compressor.d.ts","sourceRoot":"","sources":["../src/compressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAAE,EACpB,SAAS,EAAE,MAAM,GAChB,iBAAiB,CA6BnB"}
1
+ {"version":3,"file":"compressor.d.ts","sourceRoot":"","sources":["../src/compressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAOD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA4EnB"}
@@ -1,30 +1,197 @@
1
- import { countTokens } from "@devflow-tools/sdk";
2
- export function compressToTokenLimit(files, maxTokens) {
3
- if (files.length === 0)
4
- return { files: [], tokenCount: 0 };
1
+ import { countTokens, truncateToTokenLimit } from "@devflow-tools/sdk";
2
+ import { appendFileSync, mkdirSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ export function compressToTokenLimit(files, maxTokens, options = {}) {
6
+ if (files.length === 0 || maxTokens <= 0) {
7
+ return {
8
+ files: [],
9
+ tokenCount: 0,
10
+ droppedBlockCount: files.length,
11
+ overBudget: files.length > 0,
12
+ blindTruncated: false,
13
+ };
14
+ }
5
15
  const sorted = [...files].sort((a, b) => (b.score ?? 0) - (a.score ?? 0));
6
- const result = [];
16
+ const selected = new Map();
7
17
  let totalTokens = 0;
18
+ let droppedBlockCount = 0;
19
+ let blindTruncated = false;
8
20
  for (const file of sorted) {
9
- const snippetTokens = countTokens(file.snippet);
10
- if (totalTokens + snippetTokens <= maxTokens) {
11
- result.push(file);
12
- totalTokens += snippetTokens;
21
+ const blocks = splitStructuralBlocks(file.path, file.snippet);
22
+ let acceptedForFile = 0;
23
+ for (const block of blocks) {
24
+ if (totalTokens + block.tokens <= maxTokens) {
25
+ const entry = selected.get(file.path) ?? { file, blocks: [] };
26
+ entry.blocks.push(block.content);
27
+ selected.set(file.path, entry);
28
+ totalTokens += block.tokens;
29
+ acceptedForFile += 1;
30
+ }
31
+ else {
32
+ droppedBlockCount += 1;
33
+ }
13
34
  }
14
- else {
35
+ if (acceptedForFile === 0
36
+ && options.allowBlindTruncate
37
+ && maxTokens - totalTokens > 20
38
+ && file.snippet.trim()) {
15
39
  const remaining = maxTokens - totalTokens;
16
- if (remaining > 20) {
17
- const charRatio = remaining / snippetTokens;
18
- const truncChars = Math.floor(file.snippet.length * charRatio);
19
- result.push({
20
- ...file,
21
- snippet: file.snippet.slice(0, truncChars) + "\n// ... truncated",
40
+ const truncated = truncateToTokenLimit(file.snippet, remaining);
41
+ const tokens = countTokens(truncated);
42
+ if (tokens > 0) {
43
+ selected.set(file.path, {
44
+ file,
45
+ blocks: [`${truncated}\n// ... blind truncation enabled`],
22
46
  });
23
- totalTokens = maxTokens;
47
+ totalTokens += tokens;
48
+ blindTruncated = true;
49
+ }
50
+ }
51
+ }
52
+ const result = {
53
+ files: [...selected.values()].map(({ file, blocks }) => ({
54
+ ...file,
55
+ snippet: blocks.join("\n\n"),
56
+ })),
57
+ tokenCount: totalTokens,
58
+ droppedBlockCount,
59
+ overBudget: droppedBlockCount > 0,
60
+ blindTruncated,
61
+ };
62
+ if (result.overBudget && options.errorLogPath !== null) {
63
+ logCompressionOverflow(options.errorLogPath, {
64
+ maxTokens,
65
+ selectedTokens: totalTokens,
66
+ inputFiles: files.length,
67
+ selectedFiles: result.files.length,
68
+ droppedBlockCount,
69
+ blindTruncated,
70
+ });
71
+ }
72
+ return result;
73
+ }
74
+ function splitStructuralBlocks(path, snippet) {
75
+ if (!snippet.trim())
76
+ return [];
77
+ const extension = path.toLowerCase().split(".").pop() ?? "";
78
+ let rawBlocks;
79
+ if (extension === "json" || looksLikeJson(snippet)) {
80
+ rawBlocks = splitJson(snippet);
81
+ }
82
+ else if (["md", "mdx"].includes(extension) || looksLikeMarkdown(snippet)) {
83
+ rawBlocks = splitMarkdown(snippet);
84
+ }
85
+ else if (["ts", "tsx", "js", "jsx", "mjs", "cjs", "java", "css", "scss"].includes(extension)) {
86
+ rawBlocks = splitCode(snippet);
87
+ }
88
+ else {
89
+ rawBlocks = splitParagraphs(snippet);
90
+ }
91
+ return rawBlocks
92
+ .map((content) => content.trim())
93
+ .filter(Boolean)
94
+ .map((content) => ({ content, tokens: countTokens(content) }));
95
+ }
96
+ function splitCode(source) {
97
+ const lines = source.split("\n");
98
+ const blocks = [];
99
+ let current = [];
100
+ let braceDepth = 0;
101
+ let inString = null;
102
+ let escaped = false;
103
+ const flush = () => {
104
+ if (current.some((line) => line.trim()))
105
+ blocks.push(current.join("\n"));
106
+ current = [];
107
+ };
108
+ for (const line of lines) {
109
+ current.push(line);
110
+ for (let index = 0; index < line.length; index += 1) {
111
+ const char = line[index];
112
+ if (escaped) {
113
+ escaped = false;
114
+ continue;
115
+ }
116
+ if (inString) {
117
+ if (char === "\\")
118
+ escaped = true;
119
+ else if (char === inString)
120
+ inString = null;
121
+ continue;
24
122
  }
25
- break;
123
+ if (char === "'" || char === '"' || char === "`")
124
+ inString = char;
125
+ else if (char === "{")
126
+ braceDepth += 1;
127
+ else if (char === "}")
128
+ braceDepth = Math.max(0, braceDepth - 1);
26
129
  }
130
+ const trimmed = line.trim();
131
+ if (braceDepth === 0 && (trimmed === "" || /[;}],?$/.test(trimmed)))
132
+ flush();
133
+ }
134
+ flush();
135
+ return blocks.length > 0 ? blocks : [source];
136
+ }
137
+ function splitMarkdown(source) {
138
+ const lines = source.split("\n");
139
+ const blocks = [];
140
+ const headings = [];
141
+ let current = [];
142
+ let inFence = false;
143
+ const flush = () => {
144
+ if (!current.some((line) => line.trim())) {
145
+ current = [];
146
+ return;
147
+ }
148
+ const prefix = headings.filter((heading) => !current.includes(heading));
149
+ blocks.push([...prefix, ...current].join("\n"));
150
+ current = [];
151
+ };
152
+ for (const line of lines) {
153
+ if (/^\s*```/.test(line))
154
+ inFence = !inFence;
155
+ const heading = !inFence ? /^(#{1,6})\s+/.exec(line) : null;
156
+ if (heading) {
157
+ flush();
158
+ const level = heading[1].length;
159
+ headings.splice(level - 1);
160
+ headings[level - 1] = line;
161
+ }
162
+ current.push(line);
163
+ }
164
+ flush();
165
+ return blocks.length > 0 ? blocks : [source];
166
+ }
167
+ function splitJson(source) {
168
+ try {
169
+ const value = JSON.parse(source);
170
+ return [JSON.stringify(value, null, 2)];
171
+ }
172
+ catch {
173
+ return [source];
174
+ }
175
+ }
176
+ function splitParagraphs(source) {
177
+ return source.split(/\n\s*\n+/).filter(Boolean);
178
+ }
179
+ function looksLikeJson(source) {
180
+ const trimmed = source.trim();
181
+ return (trimmed.startsWith("{") && trimmed.endsWith("}"))
182
+ || (trimmed.startsWith("[") && trimmed.endsWith("]"));
183
+ }
184
+ function looksLikeMarkdown(source) {
185
+ return /^(?:#{1,6}\s|```)/m.test(source);
186
+ }
187
+ function logCompressionOverflow(configuredPath, details) {
188
+ try {
189
+ const path = configuredPath ?? join(homedir(), ".devflow", "errors", "compressor.log");
190
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
191
+ appendFileSync(path, `${JSON.stringify({ ts: Date.now(), ...details })}\n`, { mode: 0o600 });
192
+ }
193
+ catch {
194
+ // Compression must remain available when diagnostics cannot be written.
27
195
  }
28
- return { files: result, tokenCount: totalTokens };
29
196
  }
30
197
  //# sourceMappingURL=compressor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compressor.js","sourceRoot":"","sources":["../src/compressor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD,MAAM,UAAU,oBAAoB,CAClC,KAAoB,EACpB,SAAiB;IAEjB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAE5D,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,WAAW,GAAG,aAAa,IAAI,SAAS,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,WAAW,IAAI,aAAa,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;YAC1C,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;gBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;gBAC/D,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,IAAI;oBACP,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,oBAAoB;iBAClE,CAAC,CAAC;gBACH,WAAW,GAAG,SAAS,CAAC;YAC1B,CAAC;YACD,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"compressor.js","sourceRoot":"","sources":["../src/compressor.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import type { GraphAdapter } from "./graph-adapter.js";
6
6
  import type { IndexerAdapter } from "./indexer-adapter.js";
7
7
  import type { CodeGraph } from "@colbymchenry/codegraph";
8
8
  import type { SymbolVectorStore } from "./symbol-vector-store.js";
9
+ import type { SymbolEmbedder } from "./symbol-embedder.js";
9
10
  export interface ContextEngineDeps {
10
11
  cg: CodeGraph;
11
12
  data: IDataProvider;
@@ -15,6 +16,7 @@ export interface ContextEngineDeps {
15
16
  knowledge: KnowledgeEngine;
16
17
  embedder?: EmbeddingProvider;
17
18
  symbolStore?: SymbolVectorStore;
19
+ symbolEmbedder?: SymbolEmbedder;
18
20
  }
19
21
  export declare class ContextEngine {
20
22
  private cg;
@@ -25,7 +27,9 @@ export declare class ContextEngine {
25
27
  private knowledge;
26
28
  private embedder?;
27
29
  private symbolStore?;
30
+ private symbolEmbedder?;
28
31
  constructor(deps: ContextEngineDeps);
32
+ close(): void;
29
33
  private queryCache;
30
34
  index(_projectRoot: string): Promise<void>;
31
35
  build(request: ContextRequest): Promise<ContextResult>;
@@ -36,6 +40,11 @@ export declare class ContextEngine {
36
40
  sessionId?: string;
37
41
  }): Promise<TaskContextResult>;
38
42
  private buildTaskContextLegacy;
43
+ private scheduleSymbolVectorBuild;
44
+ private applyTaskSymbolVectorRecall;
45
+ private applyLegacySymbolVectorRecall;
46
+ private isSymbolVectorReady;
47
+ private addSymbolVectorWarning;
39
48
  getStatus(): IndexStatus;
40
49
  }
41
50
  //# sourceMappingURL=context-engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-engine.d.ts","sourceRoot":"","sources":["../src/context-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,WAAW,EACX,aAAa,EACb,iBAAiB,EAMlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAOzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAyNlE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAoB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAoB;gBAE5B,IAAI,EAAE,iBAAiB;IAWnC,OAAO,CAAC,UAAU,CAAkD;IAE9D,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;YAqQ9C,gBAAgB;IAexB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAoOjI,sBAAsB;IAyLpC,SAAS,IAAI,WAAW;CASzB"}
1
+ {"version":3,"file":"context-engine.d.ts","sourceRoot":"","sources":["../src/context-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEb,WAAW,EACX,aAAa,EACb,iBAAiB,EAMlB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAOzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA4N3D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAoB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,IAAI,EAAE,iBAAiB;IAYnC,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,UAAU,CAAkD;IAE9D,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;YA8Q9C,gBAAgB;IAgBxB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;YA6QjI,sBAAsB;IA6LpC,OAAO,CAAC,yBAAyB;YAgBnB,2BAA2B;YA4B3B,6BAA6B;IAkB3C,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,sBAAsB;IAM9B,SAAS,IAAI,WAAW;CASzB"}