@mcp-graph-workflow/mcp-graph 5.19.3 → 5.20.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/dist/core/context/compact-context.d.ts +2 -1
- package/dist/core/context/compact-context.d.ts.map +1 -1
- package/dist/core/context/compact-context.js +29 -16
- package/dist/core/context/compact-context.js.map +1 -1
- package/dist/core/context/context-assembler.d.ts +9 -0
- package/dist/core/context/context-assembler.d.ts.map +1 -1
- package/dist/core/context/context-assembler.js +25 -2
- package/dist/core/context/context-assembler.js.map +1 -1
- package/dist/core/context/rag-context.d.ts +9 -0
- package/dist/core/context/rag-context.d.ts.map +1 -1
- package/dist/core/context/rag-context.js +29 -3
- package/dist/core/context/rag-context.js.map +1 -1
- package/dist/core/context/task-context-cache.d.ts +33 -0
- package/dist/core/context/task-context-cache.d.ts.map +1 -0
- package/dist/core/context/task-context-cache.js +61 -0
- package/dist/core/context/task-context-cache.js.map +1 -0
- package/dist/core/rag/multi-strategy-retrieval.d.ts.map +1 -1
- package/dist/core/rag/multi-strategy-retrieval.js +3 -6
- package/dist/core/rag/multi-strategy-retrieval.js.map +1 -1
- package/dist/core/rag/phase-boost-cache.d.ts +20 -0
- package/dist/core/rag/phase-boost-cache.d.ts.map +1 -0
- package/dist/core/rag/phase-boost-cache.js +50 -0
- package/dist/core/rag/phase-boost-cache.js.map +1 -0
- package/dist/core/rag/query-cache.d.ts +6 -8
- package/dist/core/rag/query-cache.d.ts.map +1 -1
- package/dist/core/rag/query-cache.js +21 -38
- package/dist/core/rag/query-cache.js.map +1 -1
- package/dist/core/rag/rag-pipeline.d.ts.map +1 -1
- package/dist/core/rag/rag-pipeline.js +14 -3
- package/dist/core/rag/rag-pipeline.js.map +1 -1
- package/dist/core/rag/tfidf-embedding-cache.d.ts +20 -0
- package/dist/core/rag/tfidf-embedding-cache.d.ts.map +1 -0
- package/dist/core/rag/tfidf-embedding-cache.js +46 -0
- package/dist/core/rag/tfidf-embedding-cache.js.map +1 -0
- package/dist/core/store/graph-snapshot-cache.d.ts +40 -0
- package/dist/core/store/graph-snapshot-cache.d.ts.map +1 -0
- package/dist/core/store/graph-snapshot-cache.js +39 -0
- package/dist/core/store/graph-snapshot-cache.js.map +1 -0
- package/dist/core/store/knowledge-store.d.ts +11 -0
- package/dist/core/store/knowledge-store.d.ts.map +1 -1
- package/dist/core/store/knowledge-store.js +48 -1
- package/dist/core/store/knowledge-store.js.map +1 -1
- package/dist/core/store/migrations.d.ts.map +1 -1
- package/dist/core/store/migrations.js +9 -0
- package/dist/core/store/migrations.js.map +1 -1
- package/dist/core/translation/ir/ir-converter.d.ts +17 -0
- package/dist/core/translation/ir/ir-converter.d.ts.map +1 -0
- package/dist/core/translation/ir/ir-converter.js +103 -0
- package/dist/core/translation/ir/ir-converter.js.map +1 -0
- package/dist/core/translation/ir/ir-types.d.ts +50 -0
- package/dist/core/translation/ir/ir-types.d.ts.map +1 -0
- package/dist/core/translation/ir/ir-types.js +42 -0
- package/dist/core/translation/ir/ir-types.js.map +1 -0
- package/dist/core/translation/memory/translation-memory.d.ts +66 -0
- package/dist/core/translation/memory/translation-memory.d.ts.map +1 -0
- package/dist/core/translation/memory/translation-memory.js +85 -0
- package/dist/core/translation/memory/translation-memory.js.map +1 -0
- package/dist/core/translation/parsers/csharp-parser-adapter.d.ts +9 -0
- package/dist/core/translation/parsers/csharp-parser-adapter.d.ts.map +1 -0
- package/dist/core/translation/parsers/csharp-parser-adapter.js +61 -0
- package/dist/core/translation/parsers/csharp-parser-adapter.js.map +1 -0
- package/dist/core/translation/parsers/go-parser-adapter.d.ts +9 -0
- package/dist/core/translation/parsers/go-parser-adapter.d.ts.map +1 -0
- package/dist/core/translation/parsers/go-parser-adapter.js +40 -0
- package/dist/core/translation/parsers/go-parser-adapter.js.map +1 -0
- package/dist/core/translation/parsers/java-parser-adapter.d.ts +9 -0
- package/dist/core/translation/parsers/java-parser-adapter.d.ts.map +1 -0
- package/dist/core/translation/parsers/java-parser-adapter.js +48 -0
- package/dist/core/translation/parsers/java-parser-adapter.js.map +1 -0
- package/dist/core/translation/parsers/ruby-parser-adapter.d.ts +9 -0
- package/dist/core/translation/parsers/ruby-parser-adapter.d.ts.map +1 -0
- package/dist/core/translation/parsers/ruby-parser-adapter.js +45 -0
- package/dist/core/translation/parsers/ruby-parser-adapter.js.map +1 -0
- package/dist/core/translation/parsers/rust-parser-adapter.d.ts +9 -0
- package/dist/core/translation/parsers/rust-parser-adapter.d.ts.map +1 -0
- package/dist/core/translation/parsers/rust-parser-adapter.js +47 -0
- package/dist/core/translation/parsers/rust-parser-adapter.js.map +1 -0
- package/dist/core/translation/pipeline/translation-pipeline.d.ts +42 -0
- package/dist/core/translation/pipeline/translation-pipeline.d.ts.map +1 -0
- package/dist/core/translation/pipeline/translation-pipeline.js +127 -0
- package/dist/core/translation/pipeline/translation-pipeline.js.map +1 -0
- package/dist/core/translation/repair/repair-loop.d.ts +40 -0
- package/dist/core/translation/repair/repair-loop.d.ts.map +1 -0
- package/dist/core/translation/repair/repair-loop.js +68 -0
- package/dist/core/translation/repair/repair-loop.js.map +1 -0
- package/dist/core/translation/rules/python-to-ts-rules.d.ts +7 -0
- package/dist/core/translation/rules/python-to-ts-rules.d.ts.map +1 -0
- package/dist/core/translation/rules/python-to-ts-rules.js +160 -0
- package/dist/core/translation/rules/python-to-ts-rules.js.map +1 -0
- package/dist/core/translation/rules/rule-engine.d.ts +38 -0
- package/dist/core/translation/rules/rule-engine.d.ts.map +1 -0
- package/dist/core/translation/rules/rule-engine.js +95 -0
- package/dist/core/translation/rules/rule-engine.js.map +1 -0
- package/dist/core/translation/rules/rule-schema.d.ts +53 -0
- package/dist/core/translation/rules/rule-schema.d.ts.map +1 -0
- package/dist/core/translation/rules/rule-schema.js +62 -0
- package/dist/core/translation/rules/rule-schema.js.map +1 -0
- package/dist/core/translation/rules/ts-to-python-rules.d.ts +7 -0
- package/dist/core/translation/rules/ts-to-python-rules.d.ts.map +1 -0
- package/dist/core/translation/rules/ts-to-python-rules.js +188 -0
- package/dist/core/translation/rules/ts-to-python-rules.js.map +1 -0
- package/dist/core/translation/ucr/construct-seed-data.json +7132 -0
- package/dist/core/translation/validators/code-validator.d.ts +30 -0
- package/dist/core/translation/validators/code-validator.d.ts.map +1 -0
- package/dist/core/translation/validators/code-validator.js +159 -0
- package/dist/core/translation/validators/code-validator.js.map +1 -0
- package/package.json +7 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csharp-parser-adapter.js","sourceRoot":"","sources":["../../../../src/core/translation/parsers/csharp-parser-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go Parser Adapter — heuristic regex-based parser for Go code.
|
|
3
|
+
*/
|
|
4
|
+
import type { ParserAdapter, ParsedConstruct } from "./parser-adapter.js";
|
|
5
|
+
export declare class GoParserAdapter implements ParserAdapter {
|
|
6
|
+
readonly languageId = "go";
|
|
7
|
+
parseSnippet(code: string): ParsedConstruct[];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=go-parser-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-parser-adapter.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/parsers/go-parser-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAuB1E,qBAAa,eAAgB,YAAW,aAAa;IACnD,QAAQ,CAAC,UAAU,QAAQ;IAE3B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;CAsB9C"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const LINE_RULES = [
|
|
2
|
+
{ pattern: /^import\s+/, constructId: "uc_import_named" },
|
|
3
|
+
{ pattern: /^type\s+(\w+)\s+struct\s*\{/, constructId: "uc_class_def", nameGroup: 1 },
|
|
4
|
+
{ pattern: /^type\s+(\w+)\s+interface\s*\{/, constructId: "uc_interface", nameGroup: 1 },
|
|
5
|
+
{ pattern: /^func\s+\(\w+\s+\*?\w+\)\s+(\w+)/, constructId: "uc_fn_def", nameGroup: 1 }, // method
|
|
6
|
+
{ pattern: /^func\s+(\w+)\s*\(/, constructId: "uc_fn_def", nameGroup: 1 },
|
|
7
|
+
{ pattern: /^\s*go\s+func/, constructId: "uc_async_fn" },
|
|
8
|
+
{ pattern: /^\s*if\s+/, constructId: "uc_if_else" },
|
|
9
|
+
{ pattern: /^\s*for\s+/, constructId: "uc_for_loop" },
|
|
10
|
+
{ pattern: /^\s*switch\s+/, constructId: "uc_switch" },
|
|
11
|
+
{ pattern: /^\s*return\b/, constructId: "uc_return" },
|
|
12
|
+
{ pattern: /^\s*defer\s+/, constructId: "uc_try_catch" }, // Go defer ~ finally
|
|
13
|
+
];
|
|
14
|
+
export class GoParserAdapter {
|
|
15
|
+
languageId = "go";
|
|
16
|
+
parseSnippet(code) {
|
|
17
|
+
if (!code.trim())
|
|
18
|
+
return [];
|
|
19
|
+
const lines = code.split("\n");
|
|
20
|
+
const constructs = [];
|
|
21
|
+
for (let i = 0; i < lines.length; i++) {
|
|
22
|
+
const line = lines[i];
|
|
23
|
+
const lineNum = i + 1;
|
|
24
|
+
for (const rule of LINE_RULES) {
|
|
25
|
+
const match = rule.pattern.exec(line);
|
|
26
|
+
if (!match)
|
|
27
|
+
continue;
|
|
28
|
+
constructs.push({
|
|
29
|
+
constructId: rule.constructId,
|
|
30
|
+
name: rule.nameGroup ? match[rule.nameGroup] : undefined,
|
|
31
|
+
startLine: lineNum,
|
|
32
|
+
endLine: lineNum,
|
|
33
|
+
});
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return constructs;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=go-parser-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-parser-adapter.js","sourceRoot":"","sources":["../../../../src/core/translation/parsers/go-parser-adapter.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,GAAW;IACzB,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACzD,EAAE,OAAO,EAAE,6BAA6B,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IACrF,EAAE,OAAO,EAAE,gCAAgC,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IACxF,EAAE,OAAO,EAAE,kCAAkC,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,SAAS;IAClG,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE;IACzE,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE;IACxD,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE;IACnD,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE;IACrD,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE;IACtD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE;IACrD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,qBAAqB;CAChF,CAAC;AAEF,MAAM,OAAO,eAAe;IACjB,UAAU,GAAG,IAAI,CAAC;IAE3B,YAAY,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAsB,EAAE,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,UAAU,CAAC,IAAI,CAAC;oBACd,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;oBACxD,SAAS,EAAE,OAAO;oBAClB,OAAO,EAAE,OAAO;iBACjB,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java Parser Adapter — heuristic regex-based parser for Java code.
|
|
3
|
+
*/
|
|
4
|
+
import type { ParserAdapter, ParsedConstruct } from "./parser-adapter.js";
|
|
5
|
+
export declare class JavaParserAdapter implements ParserAdapter {
|
|
6
|
+
readonly languageId = "java";
|
|
7
|
+
parseSnippet(code: string): ParsedConstruct[];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=java-parser-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-parser-adapter.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/parsers/java-parser-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA0B1E,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,UAAU,UAAU;IAE7B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;CA2B9C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const LINE_RULES = [
|
|
2
|
+
{ pattern: /^\s*import\s+[\w.]+;/, constructId: "uc_import_named" },
|
|
3
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
4
|
+
{ pattern: /^\s*(public|private|protected)?\s*(abstract\s+)?class\s+(\w+)/, constructId: "uc_class_def", nameGroup: 3 },
|
|
5
|
+
{ pattern: /^\s*(public|private|protected)?\s*interface\s+(\w+)/, constructId: "uc_interface", nameGroup: 2 },
|
|
6
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
7
|
+
{ pattern: /^\s*(public|private|protected)?\s*(static\s+)?(synchronized\s+)?([\w<>[\]]+)\s+(\w+)\s*\(/, constructId: "uc_fn_def", nameGroup: 5 },
|
|
8
|
+
{ pattern: /^\s*try\s*\{/, constructId: "uc_try_catch" },
|
|
9
|
+
{ pattern: /^\s*throw\s+/, constructId: "uc_throw" },
|
|
10
|
+
{ pattern: /^\s*if\s*\(/, constructId: "uc_if_else" },
|
|
11
|
+
{ pattern: /^\s*for\s*\(/, constructId: "uc_for_loop" },
|
|
12
|
+
{ pattern: /^\s*(while)\s*\(/, constructId: "uc_while" },
|
|
13
|
+
{ pattern: /^\s*switch\s*\(/, constructId: "uc_switch" },
|
|
14
|
+
{ pattern: /^\s*return\b/, constructId: "uc_return" },
|
|
15
|
+
{ pattern: /\bawait\s+/, constructId: "uc_await" },
|
|
16
|
+
];
|
|
17
|
+
export class JavaParserAdapter {
|
|
18
|
+
languageId = "java";
|
|
19
|
+
parseSnippet(code) {
|
|
20
|
+
if (!code.trim())
|
|
21
|
+
return [];
|
|
22
|
+
const lines = code.split("\n");
|
|
23
|
+
const constructs = [];
|
|
24
|
+
for (let i = 0; i < lines.length; i++) {
|
|
25
|
+
const line = lines[i];
|
|
26
|
+
const lineNum = i + 1;
|
|
27
|
+
for (const rule of LINE_RULES) {
|
|
28
|
+
const match = rule.pattern.exec(line);
|
|
29
|
+
if (!match)
|
|
30
|
+
continue;
|
|
31
|
+
constructs.push({
|
|
32
|
+
constructId: rule.constructId,
|
|
33
|
+
name: rule.nameGroup ? match[rule.nameGroup] : undefined,
|
|
34
|
+
startLine: lineNum,
|
|
35
|
+
endLine: lineNum,
|
|
36
|
+
});
|
|
37
|
+
if (rule.also) {
|
|
38
|
+
for (const extra of rule.also) {
|
|
39
|
+
constructs.push({ constructId: extra.constructId, startLine: lineNum, endLine: lineNum });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return constructs;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=java-parser-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-parser-adapter.js","sourceRoot":"","sources":["../../../../src/core/translation/parsers/java-parser-adapter.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,GAAW;IACzB,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACnE,wDAAwD;IACxD,EAAE,OAAO,EAAE,+DAA+D,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IACvH,EAAE,OAAO,EAAE,qDAAqD,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IAC7G,wDAAwD;IACxD,EAAE,OAAO,EAAE,2FAA2F,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE;IAChJ,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE;IACxD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;IACpD,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE;IACrD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE;IACvD,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE;IACxD,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE;IACxD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE;IACrD,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE;CACnD,CAAC;AAEF,MAAM,OAAO,iBAAiB;IACnB,UAAU,GAAG,MAAM,CAAC;IAE7B,YAAY,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAsB,EAAE,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,UAAU,CAAC,IAAI,CAAC;oBACd,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;oBACxD,SAAS,EAAE,OAAO;oBAClB,OAAO,EAAE,OAAO;iBACjB,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC9B,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC5F,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ruby Parser Adapter — heuristic regex-based parser for Ruby code.
|
|
3
|
+
*/
|
|
4
|
+
import type { ParserAdapter, ParsedConstruct } from "./parser-adapter.js";
|
|
5
|
+
export declare class RubyParserAdapter implements ParserAdapter {
|
|
6
|
+
readonly languageId = "ruby";
|
|
7
|
+
parseSnippet(code: string): ParsedConstruct[];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=ruby-parser-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruby-parser-adapter.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/parsers/ruby-parser-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA2B1E,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,UAAU,UAAU;IAE7B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;CAsB9C"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const LINE_RULES = [
|
|
2
|
+
{ pattern: /^\s*require\s+['"]/, constructId: "uc_import_named" },
|
|
3
|
+
{ pattern: /^\s*require_relative\s+['"]/, constructId: "uc_import_named" },
|
|
4
|
+
{ pattern: /^\s*class\s+(\w+)/, constructId: "uc_class_def", nameGroup: 1 },
|
|
5
|
+
{ pattern: /^\s*module\s+(\w+)/, constructId: "uc_class_def", nameGroup: 1 },
|
|
6
|
+
{ pattern: /^\s*def\s+(\w+[?!]?)/, constructId: "uc_fn_def", nameGroup: 1 },
|
|
7
|
+
{ pattern: /^\s*begin\s*$/, constructId: "uc_try_catch" },
|
|
8
|
+
{ pattern: /^\s*rescue\b/, constructId: "uc_try_catch" },
|
|
9
|
+
{ pattern: /^\s*raise\s+/, constructId: "uc_throw" },
|
|
10
|
+
{ pattern: /^\s*if\s+/, constructId: "uc_if_else" },
|
|
11
|
+
{ pattern: /^\s*unless\s+/, constructId: "uc_if_else" },
|
|
12
|
+
{ pattern: /^\s*while\s+/, constructId: "uc_while" },
|
|
13
|
+
{ pattern: /^\s*until\s+/, constructId: "uc_while" },
|
|
14
|
+
{ pattern: /^\s*for\s+\w+\s+in\s+/, constructId: "uc_for_each" },
|
|
15
|
+
{ pattern: /\.each\s+do/, constructId: "uc_for_each" },
|
|
16
|
+
{ pattern: /^\s*return\b/, constructId: "uc_return" },
|
|
17
|
+
{ pattern: /^\s*yield\b/, constructId: "uc_return" },
|
|
18
|
+
];
|
|
19
|
+
export class RubyParserAdapter {
|
|
20
|
+
languageId = "ruby";
|
|
21
|
+
parseSnippet(code) {
|
|
22
|
+
if (!code.trim())
|
|
23
|
+
return [];
|
|
24
|
+
const lines = code.split("\n");
|
|
25
|
+
const constructs = [];
|
|
26
|
+
for (let i = 0; i < lines.length; i++) {
|
|
27
|
+
const line = lines[i];
|
|
28
|
+
const lineNum = i + 1;
|
|
29
|
+
for (const rule of LINE_RULES) {
|
|
30
|
+
const match = rule.pattern.exec(line);
|
|
31
|
+
if (!match)
|
|
32
|
+
continue;
|
|
33
|
+
constructs.push({
|
|
34
|
+
constructId: rule.constructId,
|
|
35
|
+
name: rule.nameGroup ? match[rule.nameGroup] : undefined,
|
|
36
|
+
startLine: lineNum,
|
|
37
|
+
endLine: lineNum,
|
|
38
|
+
});
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return constructs;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=ruby-parser-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruby-parser-adapter.js","sourceRoot":"","sources":["../../../../src/core/translation/parsers/ruby-parser-adapter.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,GAAW;IACzB,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE;IACjE,EAAE,OAAO,EAAE,6BAA6B,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAC1E,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IAC3E,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IAC5E,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE;IAC3E,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE;IACzD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE;IACxD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;IACpD,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE;IACnD,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE;IACvD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;IACpD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;IACpD,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,aAAa,EAAE;IAChE,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE;IACtD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE;IACrD,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE;CACrD,CAAC;AAEF,MAAM,OAAO,iBAAiB;IACnB,UAAU,GAAG,MAAM,CAAC;IAE7B,YAAY,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAsB,EAAE,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,UAAU,CAAC,IAAI,CAAC;oBACd,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;oBACxD,SAAS,EAAE,OAAO;oBAClB,OAAO,EAAE,OAAO;iBACjB,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rust Parser Adapter — heuristic regex-based parser for Rust code.
|
|
3
|
+
*/
|
|
4
|
+
import type { ParserAdapter, ParsedConstruct } from "./parser-adapter.js";
|
|
5
|
+
export declare class RustParserAdapter implements ParserAdapter {
|
|
6
|
+
readonly languageId = "rust";
|
|
7
|
+
parseSnippet(code: string): ParsedConstruct[];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=rust-parser-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust-parser-adapter.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/parsers/rust-parser-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA6B1E,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,UAAU,UAAU;IAE7B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;CAsB9C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const LINE_RULES = [
|
|
2
|
+
{ pattern: /^\s*use\s+[\w:]+/, constructId: "uc_import_named" },
|
|
3
|
+
{ pattern: /^\s*async\s+fn\s+(\w+)/, constructId: "uc_async_fn", nameGroup: 1 },
|
|
4
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
5
|
+
{ pattern: /^\s*(pub\s+)?(unsafe\s+)?fn\s+(\w+)/, constructId: "uc_fn_def", nameGroup: 3 },
|
|
6
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
7
|
+
{ pattern: /^\s*(pub\s+)?struct\s+(\w+)/, constructId: "uc_class_def", nameGroup: 2 },
|
|
8
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
9
|
+
{ pattern: /^\s*(pub\s+)?enum\s+(\w+)/, constructId: "uc_class_def", nameGroup: 2 },
|
|
10
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
11
|
+
{ pattern: /^\s*(pub\s+)?trait\s+(\w+)/, constructId: "uc_interface", nameGroup: 2 },
|
|
12
|
+
{ pattern: /^\s*impl\s+([\w<>]+)/, constructId: "uc_class_def", nameGroup: 1 },
|
|
13
|
+
{ pattern: /^\s*match\s+/, constructId: "uc_switch" },
|
|
14
|
+
{ pattern: /^\s*if\s+/, constructId: "uc_if_else" },
|
|
15
|
+
{ pattern: /^\s*loop\s*\{/, constructId: "uc_while" },
|
|
16
|
+
{ pattern: /^\s*while\s+/, constructId: "uc_while" },
|
|
17
|
+
{ pattern: /^\s*for\s+\w+\s+in\s+/, constructId: "uc_for_each" },
|
|
18
|
+
{ pattern: /^\s*return\b/, constructId: "uc_return" },
|
|
19
|
+
{ pattern: /\.await\b/, constructId: "uc_await" },
|
|
20
|
+
];
|
|
21
|
+
export class RustParserAdapter {
|
|
22
|
+
languageId = "rust";
|
|
23
|
+
parseSnippet(code) {
|
|
24
|
+
if (!code.trim())
|
|
25
|
+
return [];
|
|
26
|
+
const lines = code.split("\n");
|
|
27
|
+
const constructs = [];
|
|
28
|
+
for (let i = 0; i < lines.length; i++) {
|
|
29
|
+
const line = lines[i];
|
|
30
|
+
const lineNum = i + 1;
|
|
31
|
+
for (const rule of LINE_RULES) {
|
|
32
|
+
const match = rule.pattern.exec(line);
|
|
33
|
+
if (!match)
|
|
34
|
+
continue;
|
|
35
|
+
constructs.push({
|
|
36
|
+
constructId: rule.constructId,
|
|
37
|
+
name: rule.nameGroup ? match[rule.nameGroup] : undefined,
|
|
38
|
+
startLine: lineNum,
|
|
39
|
+
endLine: lineNum,
|
|
40
|
+
});
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return constructs;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=rust-parser-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust-parser-adapter.js","sourceRoot":"","sources":["../../../../src/core/translation/parsers/rust-parser-adapter.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,GAAW;IACzB,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAC/D,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,EAAE;IAC/E,wDAAwD;IACxD,EAAE,OAAO,EAAE,qCAAqC,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE;IAC1F,wDAAwD;IACxD,EAAE,OAAO,EAAE,6BAA6B,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IACrF,wDAAwD;IACxD,EAAE,OAAO,EAAE,2BAA2B,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IACnF,wDAAwD;IACxD,EAAE,OAAO,EAAE,4BAA4B,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IACpF,EAAE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE;IAC9E,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE;IACrD,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE;IACnD,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE;IACrD,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;IACpD,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,aAAa,EAAE;IAChE,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE;IACrD,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE;CAClD,CAAC;AAEF,MAAM,OAAO,iBAAiB;IACnB,UAAU,GAAG,MAAM,CAAC;IAE7B,YAAY,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAsB,EAAE,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,UAAU,CAAC,IAAI,CAAC;oBACd,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;oBACxD,SAAS,EAAE,OAAO;oBAClB,OAAO,EAAE,OAAO;iBACjB,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translation Pipeline — end-to-end automated translation.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline: parse → IR → rules → (optional AI) → validate → (optional repair) → result.
|
|
5
|
+
* Supports rule-only mode (no AI) and full AI-assisted mode.
|
|
6
|
+
*/
|
|
7
|
+
import type { ParsedConstruct } from "../parsers/parser-adapter.js";
|
|
8
|
+
import type { IRNode } from "../ir/ir-types.js";
|
|
9
|
+
import { type ApplyRulesResult } from "../rules/rule-engine.js";
|
|
10
|
+
import { type ValidationResult } from "../validators/code-validator.js";
|
|
11
|
+
export type ParserFunction = (code: string) => ParsedConstruct[];
|
|
12
|
+
export type TranslateFn = (prompt: string) => Promise<string>;
|
|
13
|
+
export interface TranslationPipelineOptions {
|
|
14
|
+
sourceLanguage: string;
|
|
15
|
+
targetLanguage: string;
|
|
16
|
+
parser: ParserFunction;
|
|
17
|
+
translateFn?: TranslateFn;
|
|
18
|
+
maxRepairIterations?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface PipelineResult {
|
|
21
|
+
success: boolean;
|
|
22
|
+
targetCode: string;
|
|
23
|
+
irTree: IRNode;
|
|
24
|
+
ruleResults: ApplyRulesResult;
|
|
25
|
+
validation: ValidationResult;
|
|
26
|
+
repairAttempted: boolean;
|
|
27
|
+
repairIterations: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class TranslationPipeline {
|
|
30
|
+
private sourceLanguage;
|
|
31
|
+
private targetLanguage;
|
|
32
|
+
private parser;
|
|
33
|
+
private translateFn?;
|
|
34
|
+
private maxRepairIterations;
|
|
35
|
+
constructor(options: TranslationPipelineOptions);
|
|
36
|
+
translate(sourceCode: string): Promise<PipelineResult>;
|
|
37
|
+
private getRuleEngine;
|
|
38
|
+
private getValidator;
|
|
39
|
+
private buildPrompt;
|
|
40
|
+
private buildRepairPrompt;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=translation-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translation-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/pipeline/translation-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG5E,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAM5G,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE,CAAC;AACjE,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAID,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,mBAAmB,CAAS;gBAExB,OAAO,EAAE,0BAA0B;IAQzC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA4D5D,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,iBAAiB;CAgB1B"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translation Pipeline — end-to-end automated translation.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline: parse → IR → rules → (optional AI) → validate → (optional repair) → result.
|
|
5
|
+
* Supports rule-only mode (no AI) and full AI-assisted mode.
|
|
6
|
+
*/
|
|
7
|
+
import { convertToIR, } from "../ir/ir-converter.js";
|
|
8
|
+
import { RuleEngine } from "../rules/rule-engine.js";
|
|
9
|
+
import { TS_TO_PYTHON_RULES } from "../rules/ts-to-python-rules.js";
|
|
10
|
+
import { PYTHON_TO_TS_RULES } from "../rules/python-to-ts-rules.js";
|
|
11
|
+
import { validateTypescript, validatePython } from "../validators/code-validator.js";
|
|
12
|
+
import { RepairLoop } from "../repair/repair-loop.js";
|
|
13
|
+
// ── Pipeline ───────────────────────────────────────
|
|
14
|
+
export class TranslationPipeline {
|
|
15
|
+
sourceLanguage;
|
|
16
|
+
targetLanguage;
|
|
17
|
+
parser;
|
|
18
|
+
translateFn;
|
|
19
|
+
maxRepairIterations;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.sourceLanguage = options.sourceLanguage;
|
|
22
|
+
this.targetLanguage = options.targetLanguage;
|
|
23
|
+
this.parser = options.parser;
|
|
24
|
+
this.translateFn = options.translateFn;
|
|
25
|
+
this.maxRepairIterations = options.maxRepairIterations ?? 3;
|
|
26
|
+
}
|
|
27
|
+
async translate(sourceCode) {
|
|
28
|
+
// Step 1: Parse source code into constructs
|
|
29
|
+
const constructs = this.parser(sourceCode);
|
|
30
|
+
// Step 2: Convert to IR tree
|
|
31
|
+
const irTree = convertToIR(constructs);
|
|
32
|
+
// Step 3: Match rules
|
|
33
|
+
const ruleEngine = this.getRuleEngine();
|
|
34
|
+
const ruleResults = ruleEngine.applyRules(irTree.children);
|
|
35
|
+
// Step 4: Generate target code
|
|
36
|
+
let targetCode;
|
|
37
|
+
if (this.translateFn) {
|
|
38
|
+
// AI-assisted: build prompt from IR + rules and call AI
|
|
39
|
+
const prompt = this.buildPrompt(sourceCode, ruleResults);
|
|
40
|
+
targetCode = await this.translateFn(prompt);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Rule-only: combine matched rule templates
|
|
44
|
+
targetCode = ruleResults.matched
|
|
45
|
+
.map((m) => m.rule.transformation.template)
|
|
46
|
+
.join("\n\n");
|
|
47
|
+
}
|
|
48
|
+
// Step 5: Validate target code
|
|
49
|
+
const validator = this.getValidator();
|
|
50
|
+
let validation = validator(targetCode);
|
|
51
|
+
// Step 6: Repair if needed
|
|
52
|
+
let repairAttempted = false;
|
|
53
|
+
let repairIterations = 0;
|
|
54
|
+
if (!validation.valid && this.translateFn) {
|
|
55
|
+
repairAttempted = true;
|
|
56
|
+
const repairLoop = new RepairLoop({
|
|
57
|
+
maxIterations: this.maxRepairIterations,
|
|
58
|
+
repairFn: async (code, errors) => {
|
|
59
|
+
const repairPrompt = this.buildRepairPrompt(code, errors);
|
|
60
|
+
return this.translateFn(repairPrompt);
|
|
61
|
+
},
|
|
62
|
+
validator,
|
|
63
|
+
});
|
|
64
|
+
const repairResult = await repairLoop.repair(targetCode);
|
|
65
|
+
targetCode = repairResult.finalCode;
|
|
66
|
+
repairIterations = repairResult.iterations;
|
|
67
|
+
validation = validator(targetCode);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
success: validation.valid,
|
|
71
|
+
targetCode,
|
|
72
|
+
irTree,
|
|
73
|
+
ruleResults,
|
|
74
|
+
validation,
|
|
75
|
+
repairAttempted,
|
|
76
|
+
repairIterations,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
getRuleEngine() {
|
|
80
|
+
if (this.sourceLanguage === "typescript" && this.targetLanguage === "python") {
|
|
81
|
+
return new RuleEngine(TS_TO_PYTHON_RULES);
|
|
82
|
+
}
|
|
83
|
+
if (this.sourceLanguage === "python" && this.targetLanguage === "typescript") {
|
|
84
|
+
return new RuleEngine(PYTHON_TO_TS_RULES);
|
|
85
|
+
}
|
|
86
|
+
// Fallback: use ts-to-python rules (default)
|
|
87
|
+
return new RuleEngine(TS_TO_PYTHON_RULES);
|
|
88
|
+
}
|
|
89
|
+
getValidator() {
|
|
90
|
+
if (this.targetLanguage === "python")
|
|
91
|
+
return validatePython;
|
|
92
|
+
return validateTypescript;
|
|
93
|
+
}
|
|
94
|
+
buildPrompt(sourceCode, ruleResults) {
|
|
95
|
+
const matchedTemplates = ruleResults.matched
|
|
96
|
+
.map((m) => `${m.node.type}: ${m.rule.transformation.template}`)
|
|
97
|
+
.join("\n");
|
|
98
|
+
const unmatchedTypes = ruleResults.unmatched
|
|
99
|
+
.map((n) => n.type)
|
|
100
|
+
.join(", ");
|
|
101
|
+
return [
|
|
102
|
+
`Translate the following ${this.sourceLanguage} code to ${this.targetLanguage}:`,
|
|
103
|
+
"",
|
|
104
|
+
sourceCode,
|
|
105
|
+
"",
|
|
106
|
+
"Use these patterns for matched constructs:",
|
|
107
|
+
matchedTemplates,
|
|
108
|
+
unmatchedTypes ? `\nThese constructs need your judgment: ${unmatchedTypes}` : "",
|
|
109
|
+
].join("\n");
|
|
110
|
+
}
|
|
111
|
+
buildRepairPrompt(code, errors) {
|
|
112
|
+
const errorList = errors
|
|
113
|
+
.map((e) => `Line ${e.line}: ${e.message}`)
|
|
114
|
+
.join("\n");
|
|
115
|
+
return [
|
|
116
|
+
`Fix the following ${this.targetLanguage} code that has validation errors:`,
|
|
117
|
+
"",
|
|
118
|
+
code,
|
|
119
|
+
"",
|
|
120
|
+
"Errors:",
|
|
121
|
+
errorList,
|
|
122
|
+
"",
|
|
123
|
+
"Return only the fixed code.",
|
|
124
|
+
].join("\n");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=translation-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translation-pipeline.js","sourceRoot":"","sources":["../../../../src/core/translation/pipeline/translation-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repair Loop — iterative repair of translated code using AI.
|
|
3
|
+
*
|
|
4
|
+
* Validates code, sends errors to a repair function (AI), and retries
|
|
5
|
+
* up to maxIterations. Tracks repair history for auditing.
|
|
6
|
+
*/
|
|
7
|
+
import type { ValidationError, ValidationResult } from "../validators/code-validator.js";
|
|
8
|
+
/** Function that attempts to repair code given validation errors. */
|
|
9
|
+
export type RepairFunction = (code: string, errors: ValidationError[]) => Promise<string>;
|
|
10
|
+
/** Validator function signature. */
|
|
11
|
+
export type ValidatorFunction = (code: string) => ValidationResult;
|
|
12
|
+
export interface RepairHistoryEntry {
|
|
13
|
+
iteration: number;
|
|
14
|
+
errors: ValidationError[];
|
|
15
|
+
codeAfterRepair: string;
|
|
16
|
+
}
|
|
17
|
+
export interface RepairResult {
|
|
18
|
+
success: boolean;
|
|
19
|
+
finalCode: string;
|
|
20
|
+
iterations: number;
|
|
21
|
+
errors: ValidationError[];
|
|
22
|
+
history: RepairHistoryEntry[];
|
|
23
|
+
}
|
|
24
|
+
export interface RepairLoopOptions {
|
|
25
|
+
maxIterations: number;
|
|
26
|
+
repairFn: RepairFunction;
|
|
27
|
+
validator: ValidatorFunction;
|
|
28
|
+
}
|
|
29
|
+
export declare class RepairLoop {
|
|
30
|
+
private maxIterations;
|
|
31
|
+
private repairFn;
|
|
32
|
+
private validator;
|
|
33
|
+
constructor(options: RepairLoopOptions);
|
|
34
|
+
/**
|
|
35
|
+
* Attempt to repair code by iteratively validating and fixing errors.
|
|
36
|
+
* Returns immediately if code is already valid (0 iterations).
|
|
37
|
+
*/
|
|
38
|
+
repair(code: string): Promise<RepairResult>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=repair-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair-loop.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/repair/repair-loop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAIzF,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE1F,oCAAoC;AACpC,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAID,qBAAa,UAAU;IACrB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAAoB;gBAEzB,OAAO,EAAE,iBAAiB;IAMtC;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAqDlD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repair Loop — iterative repair of translated code using AI.
|
|
3
|
+
*
|
|
4
|
+
* Validates code, sends errors to a repair function (AI), and retries
|
|
5
|
+
* up to maxIterations. Tracks repair history for auditing.
|
|
6
|
+
*/
|
|
7
|
+
// ── Repair Loop ────────────────────────────────────
|
|
8
|
+
export class RepairLoop {
|
|
9
|
+
maxIterations;
|
|
10
|
+
repairFn;
|
|
11
|
+
validator;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.maxIterations = options.maxIterations;
|
|
14
|
+
this.repairFn = options.repairFn;
|
|
15
|
+
this.validator = options.validator;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Attempt to repair code by iteratively validating and fixing errors.
|
|
19
|
+
* Returns immediately if code is already valid (0 iterations).
|
|
20
|
+
*/
|
|
21
|
+
async repair(code) {
|
|
22
|
+
const history = [];
|
|
23
|
+
// Check if already valid
|
|
24
|
+
const initial = this.validator(code);
|
|
25
|
+
if (initial.valid) {
|
|
26
|
+
return {
|
|
27
|
+
success: true,
|
|
28
|
+
finalCode: code,
|
|
29
|
+
iterations: 0,
|
|
30
|
+
errors: [],
|
|
31
|
+
history,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
let currentCode = code;
|
|
35
|
+
let lastErrors = initial.errors;
|
|
36
|
+
for (let i = 0; i < this.maxIterations; i++) {
|
|
37
|
+
// Attempt repair
|
|
38
|
+
const repairedCode = await this.repairFn(currentCode, lastErrors);
|
|
39
|
+
history.push({
|
|
40
|
+
iteration: i + 1,
|
|
41
|
+
errors: lastErrors,
|
|
42
|
+
codeAfterRepair: repairedCode,
|
|
43
|
+
});
|
|
44
|
+
// Validate repaired code
|
|
45
|
+
const result = this.validator(repairedCode);
|
|
46
|
+
if (result.valid) {
|
|
47
|
+
return {
|
|
48
|
+
success: true,
|
|
49
|
+
finalCode: repairedCode,
|
|
50
|
+
iterations: i + 1,
|
|
51
|
+
errors: [],
|
|
52
|
+
history,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
currentCode = repairedCode;
|
|
56
|
+
lastErrors = result.errors;
|
|
57
|
+
}
|
|
58
|
+
// Max iterations reached without success
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
finalCode: currentCode,
|
|
62
|
+
iterations: this.maxIterations,
|
|
63
|
+
errors: lastErrors,
|
|
64
|
+
history,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=repair-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair-loop.js","sourceRoot":"","sources":["../../../../src/core/translation/repair/repair-loop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH,sDAAsD;AAEtD,MAAM,OAAO,UAAU;IACb,aAAa,CAAS;IACtB,QAAQ,CAAiB;IACzB,SAAS,CAAoB;IAErC,YAAY,OAA0B;QACpC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,OAAO,GAAyB,EAAE,CAAC;QAEzC,yBAAyB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE,EAAE;gBACV,OAAO;aACR,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,iBAAiB;YACjB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAElE,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS,EAAE,CAAC,GAAG,CAAC;gBAChB,MAAM,EAAE,UAAU;gBAClB,eAAe,EAAE,YAAY;aAC9B,CAAC,CAAC;YAEH,yBAAyB;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,YAAY;oBACvB,UAAU,EAAE,CAAC,GAAG,CAAC;oBACjB,MAAM,EAAE,EAAE;oBACV,OAAO;iBACR,CAAC;YACJ,CAAC;YAED,WAAW,GAAG,YAAY,CAAC;YAC3B,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,CAAC;QAED,yCAAyC;QACzC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,WAAW;YACtB,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,MAAM,EAAE,UAAU;YAClB,OAAO;SACR,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-to-ts-rules.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/rules/python-to-ts-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,eAAO,MAAM,kBAAkB,EAAE,OA8JhC,CAAC"}
|