@devflow-tools/context-engine 0.3.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/dist/context-engine.d.ts.map +1 -1
- package/dist/context-engine.js +39 -3
- package/dist/context-engine.js.map +1 -1
- package/dist/fuzzy-fallback.d.ts +14 -0
- package/dist/fuzzy-fallback.d.ts.map +1 -0
- package/dist/fuzzy-fallback.js +70 -0
- package/dist/fuzzy-fallback.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/intent-parser.d.ts.map +1 -1
- package/dist/intent-parser.js +68 -0
- package/dist/intent-parser.js.map +1 -1
- package/dist/llm-translator.d.ts +6 -0
- package/dist/llm-translator.d.ts.map +1 -0
- package/dist/llm-translator.js +143 -0
- package/dist/llm-translator.js.map +1 -0
- package/package.json +6 -6
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# @devflow-tools/context-engine
|
|
2
|
+
|
|
3
|
+
Context engine for DevFlow — intelligently retrieves the most relevant code snippets for natural language queries.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @devflow-tools/context-engine
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { ContextEngine } from '@devflow-tools/context-engine';
|
|
15
|
+
|
|
16
|
+
const engine = new ContextEngine({ projectRoot: '/path/to/project' });
|
|
17
|
+
const context = await engine.buildContext('user authentication flow');
|
|
18
|
+
console.log(context.files);
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
- **Intent parsing** — extract keywords from natural language queries
|
|
24
|
+
- **Fuzzy search** — find relevant symbols even with partial matches
|
|
25
|
+
- **Multi-dimensional ranking** — combines dependency graph, memory, and knowledge signals
|
|
26
|
+
- **Token budget control** — compress results to fit context windows (fast/deep modes)
|
|
27
|
+
|
|
28
|
+
## API
|
|
29
|
+
|
|
30
|
+
- `createEngines(projectRoot)` — initialize all engines (indexer, graph, context)
|
|
31
|
+
- `ContextEngine` — context building engine
|
|
32
|
+
- `parseIntent(query)` — parse user query into structured intent
|
|
33
|
+
- `fuzzySearch(query, symbols)` — fuzzy symbol search
|
|
34
|
+
- `compressToTokenLimit(text, limit)` — compress context to token budget
|
|
35
|
+
|
|
36
|
+
## License
|
|
37
|
+
|
|
38
|
+
MIT
|
|
@@ -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,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;
|
|
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,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAyBzD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAAkB;gBAEvB,IAAI,EAAE,iBAAiB;IAQ7B,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IA2H5D,SAAS,IAAI,WAAW;CASzB"}
|
package/dist/context-engine.js
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
import CGModule from "@colbymchenry/codegraph";
|
|
2
2
|
import { parseIntent, expandQuery } from "./intent-parser.js";
|
|
3
|
+
import { fuzzySearch, shouldFallback } from "./fuzzy-fallback.js";
|
|
3
4
|
import { compressToTokenLimit } from "./compressor.js";
|
|
4
5
|
const CG = CGModule.default ?? CGModule;
|
|
6
|
+
/**
|
|
7
|
+
* Merge the original query with L1 dict expansion and Agent-provided English terms.
|
|
8
|
+
* Deduplicates terms before sending to codegraph.
|
|
9
|
+
*/
|
|
10
|
+
function mergeQueries(original, l1, agentTerms) {
|
|
11
|
+
const terms = new Set();
|
|
12
|
+
for (const q of [original, l1, agentTerms]) {
|
|
13
|
+
if (!q)
|
|
14
|
+
continue;
|
|
15
|
+
for (const w of q.split(/\s+/)) {
|
|
16
|
+
if (w.length >= 2)
|
|
17
|
+
terms.add(w.toLowerCase());
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return [...terms].join(" ");
|
|
21
|
+
}
|
|
5
22
|
export class ContextEngine {
|
|
6
23
|
cg;
|
|
7
24
|
data;
|
|
@@ -20,15 +37,34 @@ export class ContextEngine {
|
|
|
20
37
|
}
|
|
21
38
|
async build(request) {
|
|
22
39
|
const maxTokens = request.maxTokens ?? 8000;
|
|
23
|
-
const expandedQuery = expandQuery(request.query);
|
|
24
40
|
const intent = parseIntent(request.query);
|
|
25
41
|
const depth = request.mode === "deep" ? 3 : 2;
|
|
26
|
-
// 1
|
|
27
|
-
const
|
|
42
|
+
// Layer 1: ZH_EN_MAP dict expansion (offline, ~5ms)
|
|
43
|
+
const l1Query = expandQuery(request.query);
|
|
44
|
+
// Merge: original query + L1 dict terms + Agent-provided English terms
|
|
45
|
+
const combinedQuery = mergeQueries(request.query, l1Query, request.expandedTerms);
|
|
46
|
+
// 1. CodeGraph semantic search + graph traversal
|
|
47
|
+
const cgResult = await this.cg.findRelevantContext(combinedQuery, {
|
|
28
48
|
searchLimit: 10,
|
|
29
49
|
traversalDepth: depth,
|
|
30
50
|
maxNodes: request.mode === "deep" ? 30 : 15,
|
|
31
51
|
});
|
|
52
|
+
// Layer 3: Fuzzy fallback if primary search returned low confidence or too few results
|
|
53
|
+
if (shouldFallback(cgResult.nodes.size, cgResult.confidence)) {
|
|
54
|
+
const fallbackTerms = fuzzySearch(this.cg, combinedQuery, 10);
|
|
55
|
+
// Run targeted searchNodes for each fallback term and merge into cgResult roots
|
|
56
|
+
for (const term of fallbackTerms) {
|
|
57
|
+
const hits = this.cg.searchNodes(term, { limit: 3 });
|
|
58
|
+
for (const hit of hits) {
|
|
59
|
+
if (!cgResult.nodes.has(hit.node.id)) {
|
|
60
|
+
cgResult.nodes.set(hit.node.id, hit.node);
|
|
61
|
+
if (!cgResult.roots.includes(hit.node.id)) {
|
|
62
|
+
cgResult.roots.push(hit.node.id);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
32
68
|
// 2. Knowledge search (DevFlow unique)
|
|
33
69
|
let knowledgeHits = [];
|
|
34
70
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-engine.js","sourceRoot":"","sources":["../src/context-engine.ts"],"names":[],"mappings":"AAWA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,EAAE,GAAK,QAAgB,CAAC,OAA2B,IAAI,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"context-engine.js","sourceRoot":"","sources":["../src/context-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CodeGraph } from "@colbymchenry/codegraph";
|
|
2
|
+
/**
|
|
3
|
+
* Layer 3: Fuzzy fallback search when the primary findRelevantContext returns
|
|
4
|
+
* low confidence or too few results for a Chinese-turned-English query.
|
|
5
|
+
*
|
|
6
|
+
* Strategy: tokenize the expanded query into individual terms and run
|
|
7
|
+
* targeted FTS searches, then merge results by deduplicating on node ID.
|
|
8
|
+
*/
|
|
9
|
+
export declare function fuzzySearch(cg: CodeGraph, query: string, limit?: number): string[];
|
|
10
|
+
/**
|
|
11
|
+
* Check if we should trigger fuzzy fallback based on the primary search result.
|
|
12
|
+
*/
|
|
13
|
+
export declare function shouldFallback(nodeCount: number, confidence?: "high" | "low"): boolean;
|
|
14
|
+
//# sourceMappingURL=fuzzy-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzzy-fallback.d.ts","sourceRoot":"","sources":["../src/fuzzy-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,MAAM,EAAE,CA6BV;AA2BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAItF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layer 3: Fuzzy fallback search when the primary findRelevantContext returns
|
|
3
|
+
* low confidence or too few results for a Chinese-turned-English query.
|
|
4
|
+
*
|
|
5
|
+
* Strategy: tokenize the expanded query into individual terms and run
|
|
6
|
+
* targeted FTS searches, then merge results by deduplicating on node ID.
|
|
7
|
+
*/
|
|
8
|
+
export function fuzzySearch(cg, query, limit = 10) {
|
|
9
|
+
// Split query into individual searchable terms
|
|
10
|
+
// English identifiers, camelCase splits, and individual tokens
|
|
11
|
+
const tokens = extractDistinctTerms(query);
|
|
12
|
+
if (tokens.length === 0)
|
|
13
|
+
return [];
|
|
14
|
+
const seen = new Set();
|
|
15
|
+
const results = [];
|
|
16
|
+
for (const token of tokens) {
|
|
17
|
+
if (token.length < 2)
|
|
18
|
+
continue;
|
|
19
|
+
try {
|
|
20
|
+
const hits = cg.searchNodes(token, { limit: 5 });
|
|
21
|
+
for (const hit of hits) {
|
|
22
|
+
const id = hit.node.id;
|
|
23
|
+
if (!seen.has(id)) {
|
|
24
|
+
seen.add(id);
|
|
25
|
+
results.push({ term: hit.node.name, score: hit.score });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Individual token search failure is non-fatal
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return results
|
|
34
|
+
.sort((a, b) => b.score - a.score)
|
|
35
|
+
.slice(0, limit)
|
|
36
|
+
.map((r) => r.term);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Extract distinct searchable terms from an expanded query.
|
|
40
|
+
* Handles: English words, camelCase/PascalCase splits, snake_case splits.
|
|
41
|
+
*/
|
|
42
|
+
function extractDistinctTerms(query) {
|
|
43
|
+
const terms = new Set();
|
|
44
|
+
// English words (2+ chars)
|
|
45
|
+
const words = query.match(/[a-zA-Z_]\w+/g) ?? [];
|
|
46
|
+
for (const w of words) {
|
|
47
|
+
terms.add(w.toLowerCase());
|
|
48
|
+
// Split camelCase: "codeReview" → ["code", "review"]
|
|
49
|
+
const parts = w.split(/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/);
|
|
50
|
+
for (const p of parts) {
|
|
51
|
+
if (p.length >= 2)
|
|
52
|
+
terms.add(p.toLowerCase());
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Individual Chinese characters (for FTS prefix matching attempts)
|
|
56
|
+
// These won't match English FTS directly but serve as a last-resort signal
|
|
57
|
+
// that we tried exhaustive tokenization
|
|
58
|
+
return [...terms];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if we should trigger fuzzy fallback based on the primary search result.
|
|
62
|
+
*/
|
|
63
|
+
export function shouldFallback(nodeCount, confidence) {
|
|
64
|
+
if (confidence === "low")
|
|
65
|
+
return true;
|
|
66
|
+
if (nodeCount < 3)
|
|
67
|
+
return true;
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=fuzzy-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzzy-fallback.js","sourceRoot":"","sources":["../src/fuzzy-fallback.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,EAAa,EACb,KAAa,EACb,KAAK,GAAG,EAAE;IAEV,+CAA+C;IAC/C,+DAA+D;IAC/D,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAA2C,EAAE,CAAC;IAE3D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;IACH,CAAC;IAED,OAAO,OAAO;SACX,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,2BAA2B;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3B,qDAAqD;QACrD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,2EAA2E;IAC3E,wCAAwC;IAExC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,UAA2B;IAC3E,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { parseIntent } from "./intent-parser.js";
|
|
1
|
+
export { parseIntent, expandQuery } from "./intent-parser.js";
|
|
2
|
+
export { fuzzySearch, shouldFallback } from "./fuzzy-fallback.js";
|
|
2
3
|
export { fuseResults } from "./ranker.js";
|
|
3
4
|
export { compressToTokenLimit } from "./compressor.js";
|
|
4
5
|
export { ContextEngine } from "./context-engine.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { parseIntent } from "./intent-parser.js";
|
|
1
|
+
export { parseIntent, expandQuery } from "./intent-parser.js";
|
|
2
|
+
export { fuzzySearch, shouldFallback } from "./fuzzy-fallback.js";
|
|
2
3
|
export { fuseResults } from "./ranker.js";
|
|
3
4
|
export { compressToTokenLimit } from "./compressor.js";
|
|
4
5
|
export { ContextEngine } from "./context-engine.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent-parser.d.ts","sourceRoot":"","sources":["../src/intent-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAmB/C,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAwCvD;
|
|
1
|
+
{"version":3,"file":"intent-parser.d.ts","sourceRoot":"","sources":["../src/intent-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAmB/C,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAwCvD;AAyHD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBjD"}
|
package/dist/intent-parser.js
CHANGED
|
@@ -97,6 +97,74 @@ const ZH_EN_MAP = [
|
|
|
97
97
|
[/(异步|并发)/g, ["async", "promise", "await", "concurrent", "parallel"]],
|
|
98
98
|
[/(性能|优化|提速)/g, ["performance", "optimize", "memo", "cache", "lazy"]],
|
|
99
99
|
[/(重构|整理|优化代码)/g, ["refactor", "clean", "restructure", "extract"]],
|
|
100
|
+
// 代码审核/审查
|
|
101
|
+
[/(代码审核|代码审查|code review)/gi, ["code review", "audit", "review"]],
|
|
102
|
+
[/(审核|审查|评审)/g, ["review", "audit", "evaluation", "inspection"]],
|
|
103
|
+
// 文档
|
|
104
|
+
[/(文档|doc)/gi, ["document", "documentation", "docs", "readme"]],
|
|
105
|
+
// 流程/模块
|
|
106
|
+
[/(流程|工作流|流水线)/g, ["workflow", "flow", "pipeline", "process"]],
|
|
107
|
+
[/(模块)/g, ["module", "component", "package"]],
|
|
108
|
+
// 日志
|
|
109
|
+
[/(日志|log)/gi, ["log", "logging", "audit log", "console"]],
|
|
110
|
+
// 用户
|
|
111
|
+
[/(用户|成员)/g, ["user", "member", "account", "profile"]],
|
|
112
|
+
[/(评论|留言)/g, ["comment", "review comment", "feedback"]],
|
|
113
|
+
// 文件
|
|
114
|
+
[/(文件)/g, ["file", "document", "attachment"]],
|
|
115
|
+
[/(版本)/g, ["version", "revision", "release"]],
|
|
116
|
+
[/(历史)/g, ["history", "changelog", "timeline"]],
|
|
117
|
+
// 搜索/过滤
|
|
118
|
+
[/(搜索|检索|查找)/g, ["search", "find", "query", "filter"]],
|
|
119
|
+
[/(过滤|筛选)/g, ["filter", "search", "query", "sort"]],
|
|
120
|
+
[/(分页)/g, ["pagination", "page", "offset", "limit"]],
|
|
121
|
+
// 统计/图表
|
|
122
|
+
[/(统计|数据统计)/g, ["stats", "statistics", "analytics", "metrics"]],
|
|
123
|
+
[/(图表|可视化)/g, ["chart", "graph", "diagram", "visualization"]],
|
|
124
|
+
[/(导出)/g, ["export", "download", "csv", "json"]],
|
|
125
|
+
[/(导入)/g, ["import", "upload", "parse"]],
|
|
126
|
+
// 通知/消息
|
|
127
|
+
[/(通知|提醒)/g, ["notification", "notify", "alert", "toast"]],
|
|
128
|
+
[/(消息|聊天)/g, ["message", "chat", "websocket", "notification"]],
|
|
129
|
+
// 文件操作
|
|
130
|
+
[/(上传)/g, ["upload", "import", "file"]],
|
|
131
|
+
[/(下载)/g, ["download", "export", "file"]],
|
|
132
|
+
[/(预览)/g, ["preview", "viewer", "thumbnail"]],
|
|
133
|
+
[/(保存)/g, ["save", "persist", "commit"]],
|
|
134
|
+
[/(删除|移除)/g, ["delete", "remove", "destroy"]],
|
|
135
|
+
[/(编辑|修改)/g, ["edit", "modify", "update", "patch"]],
|
|
136
|
+
// UI 元素
|
|
137
|
+
[/(菜单|导航栏)/g, ["menu", "navigation", "nav", "sidebar"]],
|
|
138
|
+
[/(面包屑)/g, ["breadcrumb", "navigation"]],
|
|
139
|
+
[/(标签页|tab)/gi, ["tab", "tag", "label", "badge"]],
|
|
140
|
+
[/(卡片)/g, ["card", "panel", "widget"]],
|
|
141
|
+
[/(列表)/g, ["list", "table", "grid"]],
|
|
142
|
+
[/(表格)/g, ["table", "grid", "data table"]],
|
|
143
|
+
[/(表单)/g, ["form", "input", "validation"]],
|
|
144
|
+
[/(弹窗|对话框|模态框)/g, ["modal", "dialog", "popup", "overlay"]],
|
|
145
|
+
[/(抽屉)/g, ["drawer", "sidebar", "panel"]],
|
|
146
|
+
[/(下拉|选择器)/g, ["dropdown", "select", "picker", "combo"]],
|
|
147
|
+
// 交互
|
|
148
|
+
[/(加载|loading)/gi, ["loading", "spinner", "skeleton"]],
|
|
149
|
+
[/(错误处理|异常处理)/g, ["error handling", "try catch", "exception"]],
|
|
150
|
+
[/(验证|校验)/g, ["validation", "verify", "validate", "schema"]],
|
|
151
|
+
[/(国际化|多语言)/g, ["i18n", "internationalization", "locale", "translation"]],
|
|
152
|
+
[/(主题|暗色模式)/g, ["theme", "dark mode", "color scheme"]],
|
|
153
|
+
// 架构
|
|
154
|
+
[/(服务)/g, ["service", "api", "endpoint"]],
|
|
155
|
+
[/(中间件)/g, ["middleware", "interceptor", "guard"]],
|
|
156
|
+
[/(拦截器)/g, ["interceptor", "middleware", "filter"]],
|
|
157
|
+
[/(数据)/g, ["data", "model", "store", "database"]],
|
|
158
|
+
[/(缓存)/g, ["cache", "memo", "storage", "redis"]],
|
|
159
|
+
[/(存储|持久化)/g, ["storage", "store", "persistence", "database"]],
|
|
160
|
+
// 媒体
|
|
161
|
+
[/(图片|图像)/g, ["image", "picture", "photo", "thumbnail"]],
|
|
162
|
+
[/(视频)/g, ["video", "media", "player"]],
|
|
163
|
+
[/(音频|声音)/g, ["audio", "sound", "media", "player"]],
|
|
164
|
+
// 通用
|
|
165
|
+
[/(逻辑|业务逻辑)/g, ["logic", "business", "service", "handler"]],
|
|
166
|
+
[/(工具|辅助|helper)/gi, ["tool", "utility", "helper", "utils"]],
|
|
167
|
+
[/(配置项|环境变量)/g, ["config", "env", "environment", "variable"]],
|
|
100
168
|
];
|
|
101
169
|
export function expandQuery(query) {
|
|
102
170
|
if (!query)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent-parser.js","sourceRoot":"","sources":["../src/intent-parser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"intent-parser.js","sourceRoot":"","sources":["../src/intent-parser.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAA0D;IAC7E,EAAE,OAAO,EAAE,+CAA+C,EAAE,MAAM,EAAE,OAAO,EAAE;IAC7E,EAAE,OAAO,EAAE,+CAA+C,EAAE,MAAM,EAAE,SAAS,EAAE;IAC/E,EAAE,OAAO,EAAE,gDAAgD,EAAE,MAAM,EAAE,UAAU,EAAE;IACjF,EAAE,OAAO,EAAE,yDAAyD,EAAE,MAAM,EAAE,YAAY,EAAE;CAC7F,CAAC;AAEF,MAAM,eAAe,GAA0C;IAC7D,EAAE,OAAO,EAAE,uDAAuD,EAAE,MAAM,EAAE,MAAM,EAAE;IACpF,EAAE,OAAO,EAAE,6DAA6D,EAAE,MAAM,EAAE,KAAK,EAAE;IACzF,EAAE,OAAO,EAAE,mDAAmD,EAAE,MAAM,EAAE,OAAO,EAAE;IACjF,EAAE,OAAO,EAAE,mDAAmD,EAAE,MAAM,EAAE,OAAO,EAAE;IACjF,EAAE,OAAO,EAAE,qDAAqD,EAAE,MAAM,EAAE,UAAU,EAAE;IACtF,EAAE,OAAO,EAAE,mCAAmC,EAAE,MAAM,EAAE,MAAM,EAAE;IAChE,EAAE,OAAO,EAAE,4CAA4C,EAAE,MAAM,EAAE,IAAI,EAAE;CACxE,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEjC,IAAI,MAAM,GAA2B,SAAS,CAAC;IAC/C,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,eAAe,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzC,IAAI,IAAI,GAAG,aAAa,EAAE,CAAC;gBACzB,MAAM,GAAG,CAAC,CAAC;gBACX,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,eAAe,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzC,IAAI,IAAI,GAAG,aAAa,EAAE,CAAC;gBACzB,MAAM,GAAG,CAAC,CAAC;gBACX,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,IAAI,EAAE,CAAC;IAC1E,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,IAAI,CAAC,CAAC,CAAC,CAChF,CAAC;IAEF,OAAO;QACL,MAAM;QACN,MAAM;QACN,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;QAC3D,UAAU,EAAE,CAAC,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAyB;IACtC,QAAQ;IACR,CAAC,UAAU,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAC9D,KAAK;IACL,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO;IACP,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9B,KAAK;IACL,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3D,KAAK;IACL,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACzD,KAAK;IACL,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACvD,SAAS;IACT,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC3D,KAAK;IACL,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IACvD,MAAM;IACN,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzD,KAAK;IACL,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7D,QAAQ;IACR,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACrE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7D,KAAK;IACL,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACrE,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC,eAAe,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAClE,UAAU;IACV,CAAC,2BAA2B,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAChE,KAAK;IACL,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/D,QAAQ;IACR,CAAC,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7C,KAAK;IACL,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC1D,KAAK;IACL,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACvD,KAAK;IACL,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAC/C,QAAQ;IACR,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,QAAQ;IACR,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC7D,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ;IACR,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAC9D,OAAO;IACP,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,QAAQ;IACR,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,KAAK;IACL,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC,cAAc,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IACzE,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IACtD,KAAK;IACL,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAC9D,KAAK;IACL,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,KAAK;IACL,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAE9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,SAAS,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;gBAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-translator.js","sourceRoot":"","sources":["../src/llm-translator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devflow-tools/context-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@colbymchenry/codegraph": "^1.1.1",
|
|
21
|
-
"@devflow-tools/knowledge-engine": "^0.
|
|
22
|
-
"@devflow-tools/memory-engine": "^0.
|
|
23
|
-
"@devflow-tools/sdk": "^0.
|
|
24
|
-
"@devflow-tools/telemetry": "^0.
|
|
21
|
+
"@devflow-tools/knowledge-engine": "^0.5.0",
|
|
22
|
+
"@devflow-tools/memory-engine": "^0.5.0",
|
|
23
|
+
"@devflow-tools/sdk": "^0.5.0",
|
|
24
|
+
"@devflow-tools/telemetry": "^0.5.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"typescript": "^5.5.0",
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
"files": [
|
|
31
31
|
"dist"
|
|
32
32
|
],
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "431c0f26e14d476c08d543ef5cd65367413dbc98"
|
|
34
34
|
}
|