@mcp-graph-workflow/mcp-graph 5.22.0 → 5.24.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 (177) hide show
  1. package/dist/api/routes/benchmark.d.ts.map +1 -1
  2. package/dist/api/routes/benchmark.js +22 -6
  3. package/dist/api/routes/benchmark.js.map +1 -1
  4. package/dist/api/routes/code-graph.d.ts.map +1 -1
  5. package/dist/api/routes/code-graph.js +2 -1
  6. package/dist/api/routes/code-graph.js.map +1 -1
  7. package/dist/api/routes/folder.d.ts +6 -0
  8. package/dist/api/routes/folder.d.ts.map +1 -1
  9. package/dist/api/routes/folder.js +53 -8
  10. package/dist/api/routes/folder.js.map +1 -1
  11. package/dist/api/routes/import.js +2 -1
  12. package/dist/api/routes/import.js.map +1 -1
  13. package/dist/api/routes/siebel.d.ts.map +1 -1
  14. package/dist/api/routes/siebel.js +4 -2
  15. package/dist/api/routes/siebel.js.map +1 -1
  16. package/dist/api/routes/skills.d.ts.map +1 -1
  17. package/dist/api/routes/skills.js +5 -2
  18. package/dist/api/routes/skills.js.map +1 -1
  19. package/dist/api/routes/translation.d.ts.map +1 -1
  20. package/dist/api/routes/translation.js +30 -8
  21. package/dist/api/routes/translation.js.map +1 -1
  22. package/dist/core/context/context-assembler.d.ts.map +1 -1
  23. package/dist/core/context/context-assembler.js +7 -0
  24. package/dist/core/context/context-assembler.js.map +1 -1
  25. package/dist/core/docs/docs-cache-store.js +1 -1
  26. package/dist/core/docs/docs-cache-store.js.map +1 -1
  27. package/dist/core/docs/stack-detector.js +6 -3
  28. package/dist/core/docs/stack-detector.js.map +1 -1
  29. package/dist/core/events/event-bus.d.ts +1 -1
  30. package/dist/core/events/event-bus.d.ts.map +1 -1
  31. package/dist/core/events/event-bus.js +13 -3
  32. package/dist/core/events/event-bus.js.map +1 -1
  33. package/dist/core/importer/prd-to-graph.d.ts.map +1 -1
  34. package/dist/core/importer/prd-to-graph.js +20 -5
  35. package/dist/core/importer/prd-to-graph.js.map +1 -1
  36. package/dist/core/integrations/integration-orchestrator.d.ts +1 -0
  37. package/dist/core/integrations/integration-orchestrator.d.ts.map +1 -1
  38. package/dist/core/integrations/integration-orchestrator.js +40 -19
  39. package/dist/core/integrations/integration-orchestrator.js.map +1 -1
  40. package/dist/core/parser/classify.js +2 -2
  41. package/dist/core/parser/classify.js.map +1 -1
  42. package/dist/core/parser/file-reader.d.ts.map +1 -1
  43. package/dist/core/parser/file-reader.js +9 -2
  44. package/dist/core/parser/file-reader.js.map +1 -1
  45. package/dist/core/parser/read-pdf.d.ts.map +1 -1
  46. package/dist/core/parser/read-pdf.js +5 -1
  47. package/dist/core/parser/read-pdf.js.map +1 -1
  48. package/dist/core/rag/knowledge-synthesizer.js +2 -2
  49. package/dist/core/rag/knowledge-synthesizer.js.map +1 -1
  50. package/dist/core/rag/node-indexer.d.ts.map +1 -1
  51. package/dist/core/rag/node-indexer.js +3 -2
  52. package/dist/core/rag/node-indexer.js.map +1 -1
  53. package/dist/core/store/migrations.d.ts.map +1 -1
  54. package/dist/core/store/migrations.js +10 -0
  55. package/dist/core/store/migrations.js.map +1 -1
  56. package/dist/core/store/sqlite-store.d.ts.map +1 -1
  57. package/dist/core/store/sqlite-store.js +39 -19
  58. package/dist/core/store/sqlite-store.js.map +1 -1
  59. package/dist/core/translation/chunked-analyzer.d.ts +36 -0
  60. package/dist/core/translation/chunked-analyzer.d.ts.map +1 -0
  61. package/dist/core/translation/chunked-analyzer.js +146 -0
  62. package/dist/core/translation/chunked-analyzer.js.map +1 -0
  63. package/dist/core/translation/confidence/ambiguity-detector.d.ts.map +1 -1
  64. package/dist/core/translation/confidence/ambiguity-detector.js +3 -1
  65. package/dist/core/translation/confidence/ambiguity-detector.js.map +1 -1
  66. package/dist/core/translation/language-detect.d.ts.map +1 -1
  67. package/dist/core/translation/language-detect.js +131 -0
  68. package/dist/core/translation/language-detect.js.map +1 -1
  69. package/dist/core/translation/memory/translation-memory.d.ts +14 -0
  70. package/dist/core/translation/memory/translation-memory.d.ts.map +1 -1
  71. package/dist/core/translation/memory/translation-memory.js +93 -0
  72. package/dist/core/translation/memory/translation-memory.js.map +1 -1
  73. package/dist/core/translation/parsers/csharp-parser-adapter.d.ts.map +1 -1
  74. package/dist/core/translation/parsers/csharp-parser-adapter.js +19 -22
  75. package/dist/core/translation/parsers/csharp-parser-adapter.js.map +1 -1
  76. package/dist/core/translation/parsers/go-parser-adapter.d.ts.map +1 -1
  77. package/dist/core/translation/parsers/go-parser-adapter.js +5 -2
  78. package/dist/core/translation/parsers/go-parser-adapter.js.map +1 -1
  79. package/dist/core/translation/parsers/java-parser-adapter.d.ts.map +1 -1
  80. package/dist/core/translation/parsers/java-parser-adapter.js +6 -1
  81. package/dist/core/translation/parsers/java-parser-adapter.js.map +1 -1
  82. package/dist/core/translation/parsers/rust-parser-adapter.js +1 -1
  83. package/dist/core/translation/pre-indexed-analyzer.d.ts +19 -0
  84. package/dist/core/translation/pre-indexed-analyzer.d.ts.map +1 -0
  85. package/dist/core/translation/pre-indexed-analyzer.js +100 -0
  86. package/dist/core/translation/pre-indexed-analyzer.js.map +1 -0
  87. package/dist/core/translation/prompt-builder.d.ts +2 -0
  88. package/dist/core/translation/prompt-builder.d.ts.map +1 -1
  89. package/dist/core/translation/prompt-builder.js +56 -8
  90. package/dist/core/translation/prompt-builder.js.map +1 -1
  91. package/dist/core/translation/prompt-paginator.d.ts +20 -0
  92. package/dist/core/translation/prompt-paginator.d.ts.map +1 -0
  93. package/dist/core/translation/prompt-paginator.js +108 -0
  94. package/dist/core/translation/prompt-paginator.js.map +1 -0
  95. package/dist/core/translation/translation-orchestrator.d.ts +4 -1
  96. package/dist/core/translation/translation-orchestrator.d.ts.map +1 -1
  97. package/dist/core/translation/translation-orchestrator.js +81 -14
  98. package/dist/core/translation/translation-orchestrator.js.map +1 -1
  99. package/dist/core/translation/translation-store.d.ts +6 -0
  100. package/dist/core/translation/translation-store.d.ts.map +1 -1
  101. package/dist/core/translation/translation-store.js +28 -0
  102. package/dist/core/translation/translation-store.js.map +1 -1
  103. package/dist/core/utils/circularity.d.ts +13 -0
  104. package/dist/core/utils/circularity.d.ts.map +1 -0
  105. package/dist/core/utils/circularity.js +30 -0
  106. package/dist/core/utils/circularity.js.map +1 -0
  107. package/dist/mcp/code-intelligence-wrapper.d.ts.map +1 -1
  108. package/dist/mcp/code-intelligence-wrapper.js +4 -2
  109. package/dist/mcp/code-intelligence-wrapper.js.map +1 -1
  110. package/dist/mcp/init-project.d.ts.map +1 -1
  111. package/dist/mcp/init-project.js +4 -2
  112. package/dist/mcp/init-project.js.map +1 -1
  113. package/dist/mcp/server.js +21 -4
  114. package/dist/mcp/server.js.map +1 -1
  115. package/dist/mcp/tool-classification.d.ts.map +1 -1
  116. package/dist/mcp/tool-classification.js +0 -1
  117. package/dist/mcp/tool-classification.js.map +1 -1
  118. package/dist/mcp/tools/analyze-translation.d.ts.map +1 -1
  119. package/dist/mcp/tools/analyze-translation.js +45 -5
  120. package/dist/mcp/tools/analyze-translation.js.map +1 -1
  121. package/dist/mcp/tools/clone-node.d.ts.map +1 -1
  122. package/dist/mcp/tools/clone-node.js +8 -3
  123. package/dist/mcp/tools/clone-node.js.map +1 -1
  124. package/dist/mcp/tools/edge.js +1 -1
  125. package/dist/mcp/tools/edge.js.map +1 -1
  126. package/dist/mcp/tools/import-graph.d.ts.map +1 -1
  127. package/dist/mcp/tools/import-graph.js +4 -2
  128. package/dist/mcp/tools/import-graph.js.map +1 -1
  129. package/dist/mcp/tools/index.d.ts.map +1 -1
  130. package/dist/mcp/tools/index.js +2 -0
  131. package/dist/mcp/tools/index.js.map +1 -1
  132. package/dist/mcp/tools/memory.d.ts.map +1 -1
  133. package/dist/mcp/tools/memory.js +1 -0
  134. package/dist/mcp/tools/memory.js.map +1 -1
  135. package/dist/mcp/tools/move-node.d.ts.map +1 -1
  136. package/dist/mcp/tools/move-node.js +4 -14
  137. package/dist/mcp/tools/move-node.js.map +1 -1
  138. package/dist/mcp/tools/node.d.ts.map +1 -1
  139. package/dist/mcp/tools/node.js +5 -16
  140. package/dist/mcp/tools/node.js.map +1 -1
  141. package/dist/mcp/tools/siebel-generate-sif.js +4 -2
  142. package/dist/mcp/tools/siebel-generate-sif.js.map +1 -1
  143. package/dist/mcp/tools/translate-code.d.ts.map +1 -1
  144. package/dist/mcp/tools/translate-code.js +47 -5
  145. package/dist/mcp/tools/translate-code.js.map +1 -1
  146. package/dist/mcp/tools/translation-jobs.d.ts +8 -0
  147. package/dist/mcp/tools/translation-jobs.d.ts.map +1 -0
  148. package/dist/mcp/tools/translation-jobs.js +97 -0
  149. package/dist/mcp/tools/translation-jobs.js.map +1 -0
  150. package/dist/web/dashboard/dist/assets/benchmark-tab-sjsZBd-4.js +1 -0
  151. package/dist/web/dashboard/dist/assets/{circle-alert-vaRHjxbG.js → circle-alert-DcTbCUEa.js} +1 -1
  152. package/dist/web/dashboard/dist/assets/{context-tab-DRUGmBRL.js → context-tab-DNMJ2Pv-.js} +1 -1
  153. package/dist/web/dashboard/dist/assets/{gitnexus-tab-h8BwIua3.js → gitnexus-tab-CZ9LJbwz.js} +1 -1
  154. package/dist/web/dashboard/dist/assets/{graph-section-C4ymXtzh.js → graph-section-BdcXKKoS.js} +1 -1
  155. package/dist/web/dashboard/dist/assets/{graph-tab-C6nWMQkR.js → graph-tab-CFzux3kf.js} +1 -1
  156. package/dist/web/dashboard/dist/assets/{graph-utils-DkRXfigF.js → graph-utils-_8jpWA5z.js} +1 -1
  157. package/dist/web/dashboard/dist/assets/{index-DmT4Jne7.js → index-Bny20bel.js} +1 -1
  158. package/dist/web/dashboard/dist/assets/index-CITYTuX5.js +218 -0
  159. package/dist/web/dashboard/dist/assets/{index-BW0cq1-5.js → index-DSI2SYWO.js} +1 -1
  160. package/dist/web/dashboard/dist/assets/{insights-tab-CL9LCuow.js → insights-tab-DUA76KUY.js} +2 -2
  161. package/dist/web/dashboard/dist/assets/{journey-tab-CbJSfdpz.js → journey-tab-FTd6jBta.js} +1 -1
  162. package/dist/web/dashboard/dist/assets/{languages-tab-Vjkz6r99.js → languages-tab-B_nhFL2q.js} +1 -1
  163. package/dist/web/dashboard/dist/assets/{loader-circle-CrUmRfZB.js → loader-circle-D1DpGd2u.js} +1 -1
  164. package/dist/web/dashboard/dist/assets/{logs-tab-CeH_wY9u.js → logs-tab-CzL36_Qy.js} +1 -1
  165. package/dist/web/dashboard/dist/assets/{lsp-tab-BLIpJrAk.js → lsp-tab-DdHhJq_H.js} +1 -1
  166. package/dist/web/dashboard/dist/assets/memories-tab-CzgCahnV.js +1 -0
  167. package/dist/web/dashboard/dist/assets/{prd-backlog-tab-BBUG4V7M.js → prd-backlog-tab-C8Cl7swI.js} +1 -1
  168. package/dist/web/dashboard/dist/assets/{refresh-cw-DRsAUgYq.js → refresh-cw-DSYiHmbh.js} +1 -1
  169. package/dist/web/dashboard/dist/assets/{siebel-tab-DZXhcoUu.js → siebel-tab-B4XOaUGz.js} +3 -3
  170. package/dist/web/dashboard/dist/assets/{skills-tab-_A8OYt_b.js → skills-tab-CkpnwPJY.js} +1 -1
  171. package/dist/web/dashboard/dist/assets/{style-DpBYmOVU.js → style-BOQDk6qp.js} +1 -1
  172. package/dist/web/dashboard/dist/assets/{triangle-alert-N0TixBQV.js → triangle-alert-Bf6Ly19h.js} +1 -1
  173. package/dist/web/dashboard/dist/index.html +1 -1
  174. package/package.json +1 -1
  175. package/dist/web/dashboard/dist/assets/benchmark-tab-D7nae4k4.js +0 -1
  176. package/dist/web/dashboard/dist/assets/index-DSPPavjF.js +0 -218
  177. package/dist/web/dashboard/dist/assets/memories-tab-BHOvEW0o.js +0 -1
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Chunked Analyzer — splits large files at class/function boundaries before analyzing.
3
+ *
4
+ * When source code exceeds a configurable threshold (default 50KB),
5
+ * the code is split at language-aware boundaries (class/function definitions)
6
+ * and each chunk is analyzed independently, then results are merged.
7
+ */
8
+ // ── Boundary patterns per language ────────────────
9
+ const BOUNDARY_PATTERNS = new Map([
10
+ ["python", /^(?:class |def )/m],
11
+ ["typescript", /^(?:export |class |function )/m],
12
+ ["javascript", /^(?:export |class |function )/m],
13
+ ["java", /^(?:public class |class )/m],
14
+ ["csharp", /^(?:public class |class )/m],
15
+ ["go", /^func /m],
16
+ ]);
17
+ const DEFAULT_CHUNK_LINES = 1000;
18
+ const DEFAULT_THRESHOLD_BYTES = 51_200; // 50KB
19
+ // ── Public API ────────────────────────────────────
20
+ /**
21
+ * Split code at class/function boundaries for a given language.
22
+ * Falls back to splitting every 1000 lines if no language-specific pattern exists.
23
+ */
24
+ export function splitAtBoundaries(code, language) {
25
+ const lines = code.split("\n");
26
+ const pattern = BOUNDARY_PATTERNS.get(language);
27
+ if (!pattern) {
28
+ return splitByLineCount(lines, DEFAULT_CHUNK_LINES);
29
+ }
30
+ const chunks = [];
31
+ let currentChunk = [];
32
+ for (const line of lines) {
33
+ // If this line is a boundary and we already have accumulated lines, flush
34
+ if (pattern.test(line) && currentChunk.length > 0) {
35
+ chunks.push(currentChunk.join("\n"));
36
+ currentChunk = [];
37
+ }
38
+ currentChunk.push(line);
39
+ }
40
+ // Flush remaining
41
+ if (currentChunk.length > 0) {
42
+ chunks.push(currentChunk.join("\n"));
43
+ }
44
+ return chunks.length > 0 ? chunks : [code];
45
+ }
46
+ /**
47
+ * Analyze code with chunking support.
48
+ * If code is below the threshold, delegates to single-pass analysis.
49
+ * Otherwise splits into chunks, analyzes each, and merges results.
50
+ */
51
+ export function analyzeChunked(code, analyzeFn, hints, options) {
52
+ const threshold = options?.chunkThresholdBytes ?? DEFAULT_THRESHOLD_BYTES;
53
+ const codeSizeBytes = Buffer.byteLength(code, "utf-8");
54
+ // Small file — single-pass analysis
55
+ if (codeSizeBytes <= threshold) {
56
+ const result = analyzeFn(code, hints);
57
+ return { ...result, chunked: false, chunkCount: 1 };
58
+ }
59
+ // Detect language for boundary splitting
60
+ const language = hints?.languageHint ?? "unknown";
61
+ const chunks = splitAtBoundaries(code, language);
62
+ // Analyze each chunk
63
+ const analyses = chunks.map((chunk) => analyzeFn(chunk, hints));
64
+ // Merge results
65
+ return mergeAnalyses(analyses, chunks.length);
66
+ }
67
+ // ── Internal helpers ──────────────────────────────
68
+ function splitByLineCount(lines, count) {
69
+ const chunks = [];
70
+ for (let i = 0; i < lines.length; i += count) {
71
+ chunks.push(lines.slice(i, i + count).join("\n"));
72
+ }
73
+ return chunks.length > 0 ? chunks : [lines.join("\n")];
74
+ }
75
+ function mergeAnalyses(analyses, chunkCount) {
76
+ if (analyses.length === 0) {
77
+ return {
78
+ detectedLanguage: "unknown",
79
+ detectedConfidence: 0,
80
+ constructs: [],
81
+ complexityScore: 0,
82
+ estimatedTranslatability: 0,
83
+ ambiguousConstructs: [],
84
+ totalConstructs: 0,
85
+ cacheHit: false,
86
+ chunked: true,
87
+ chunkCount,
88
+ };
89
+ }
90
+ // Use first chunk's language detection (most reliable — typically has imports/headers)
91
+ const detectedLanguage = analyses[0].detectedLanguage;
92
+ const detectedConfidence = analyses[0].detectedConfidence;
93
+ // Sum construct counts across chunks
94
+ const constructMap = new Map();
95
+ let totalConstructs = 0;
96
+ for (const analysis of analyses) {
97
+ totalConstructs += analysis.totalConstructs;
98
+ for (const c of analysis.constructs) {
99
+ const existing = constructMap.get(c.canonicalName);
100
+ if (existing) {
101
+ existing.count += c.count;
102
+ // Keep max confidence for this construct
103
+ existing.confidence = Math.max(existing.confidence, c.confidence);
104
+ }
105
+ else {
106
+ constructMap.set(c.canonicalName, { count: c.count, confidence: c.confidence });
107
+ }
108
+ }
109
+ }
110
+ const constructs = Array.from(constructMap.entries()).map(([id, info]) => ({
111
+ canonicalName: id,
112
+ count: info.count,
113
+ confidence: info.confidence,
114
+ }));
115
+ // Max complexity across chunks
116
+ const complexityScore = Math.max(...analyses.map((a) => a.complexityScore));
117
+ // Weighted average translatability (weighted by totalConstructs per chunk)
118
+ const totalWeight = analyses.reduce((sum, a) => sum + a.totalConstructs, 0);
119
+ const estimatedTranslatability = totalWeight > 0
120
+ ? analyses.reduce((sum, a) => sum + a.estimatedTranslatability * a.totalConstructs, 0) / totalWeight
121
+ : 0;
122
+ // Union of ambiguous constructs
123
+ const ambiguousSet = new Set();
124
+ for (const analysis of analyses) {
125
+ if (analysis.ambiguousConstructs) {
126
+ for (const id of analysis.ambiguousConstructs) {
127
+ ambiguousSet.add(id);
128
+ }
129
+ }
130
+ }
131
+ // cacheHit is true only if ALL chunks were cache hits
132
+ const cacheHit = analyses.every((a) => a.cacheHit);
133
+ return {
134
+ detectedLanguage,
135
+ detectedConfidence,
136
+ constructs,
137
+ complexityScore,
138
+ estimatedTranslatability,
139
+ ambiguousConstructs: Array.from(ambiguousSet),
140
+ totalConstructs,
141
+ cacheHit,
142
+ chunked: true,
143
+ chunkCount,
144
+ };
145
+ }
146
+ //# sourceMappingURL=chunked-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunked-analyzer.js","sourceRoot":"","sources":["../../../src/core/translation/chunked-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ambiguity-detector.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/confidence/ambiguity-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAQnF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EAAE,EAC1B,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,eAAe,EAAE,CASnB"}
1
+ {"version":3,"file":"ambiguity-detector.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/confidence/ambiguity-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAWnF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EAAE,EAC1B,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,eAAe,EAAE,CASnB"}
@@ -8,7 +8,9 @@
8
8
  *
9
9
  * Feeds the prompt-builder with precise context for AI-assisted translation.
10
10
  */
11
- const LOSSY_THRESHOLD = 0.65;
11
+ import { UCR_CONFIDENCE_THRESHOLD } from "../../utils/constants.js";
12
+ /** Threshold below which a translation is flagged as lossy. Uses the unified UCR constant. */
13
+ const LOSSY_THRESHOLD = UCR_CONFIDENCE_THRESHOLD;
12
14
  /**
13
15
  * Detect ambiguities in scored constructs.
14
16
  * Returns reports only for constructs that have translation issues.
@@ -1 +1 @@
1
- {"version":3,"file":"ambiguity-detector.js","sourceRoot":"","sources":["../../../../src/core/translation/confidence/ambiguity-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ambiguity-detector.js","sourceRoot":"","sources":["../../../../src/core/translation/confidence/ambiguity-detector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"language-detect.d.ts","sourceRoot":"","sources":["../../../src/core/translation/language-detect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AA+GD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CA4C5E"}
1
+ {"version":3,"file":"language-detect.d.ts","sourceRoot":"","sources":["../../../src/core/translation/language-detect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAkPD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CA4C5E"}
@@ -96,6 +96,137 @@ const PROFILES = [
96
96
  /\blet\s+\w+/, /\breturn\s+/,
97
97
  ],
98
98
  },
99
+ {
100
+ id: "ruby",
101
+ unique: [
102
+ /\bdef\s+\w+.*\bend\b/, /\bdo\s*\|/, /\battr_accessor\b/,
103
+ /\brequire\b/, /puts\b/,
104
+ ],
105
+ strong: [
106
+ /\bclass\s+\w+\s*</, /\bmodule\b/, /@\w+/,
107
+ ],
108
+ weak: [
109
+ /\bdef\b/, /\bend\b/,
110
+ ],
111
+ },
112
+ {
113
+ id: "php",
114
+ unique: [
115
+ /<\?php/, /\$\w+/, /->/, /\bfunction\s+\w+\s*\(/,
116
+ /\becho\b/,
117
+ ],
118
+ strong: [
119
+ /\bnamespace\b/, /\buse\s+/, /\barray\(/,
120
+ ],
121
+ weak: [
122
+ /\bclass\b/, /\breturn\b/,
123
+ ],
124
+ },
125
+ {
126
+ id: "swift",
127
+ unique: [
128
+ /\bfunc\s+\w+.*->/, /\blet\s+\w+\s*:/, /\bvar\s+\w+\s*:/,
129
+ /\bguard\b/, /\bprotocol\b/,
130
+ ],
131
+ strong: [
132
+ /\bstruct\b/, /\benum\b.*\bcase\b/, /\bimport\s+Foundation/,
133
+ ],
134
+ weak: [
135
+ /\bif\b/, /\breturn\b/,
136
+ ],
137
+ },
138
+ {
139
+ id: "kotlin",
140
+ unique: [
141
+ /\bfun\s+\w+/, /\bval\s+\w+/, /\bvar\s+\w+/,
142
+ /\bwhen\s*\(/, /\bdata\s+class\b/,
143
+ ],
144
+ strong: [
145
+ /\bcompanion\s+object\b/, /\bsealed\s+class\b/,
146
+ /\bimport\s+\w+\.\w+/,
147
+ ],
148
+ weak: [
149
+ /\bclass\b/, /\bif\b/,
150
+ ],
151
+ },
152
+ {
153
+ id: "scala",
154
+ unique: [
155
+ /\bdef\s+\w+.*:\s*\w+\s*=/, /\bcase\s+class\b/,
156
+ /\bcase\s+object\b/, /\bobject\s+\w+/, /\btrait\s+\w+/,
157
+ ],
158
+ strong: [
159
+ /\bval\s+\w+/, /\bvar\s+\w+/, /\bimplicit\b/,
160
+ ],
161
+ weak: [
162
+ /\bimport\b/, /\bif\b/,
163
+ ],
164
+ },
165
+ {
166
+ id: "elixir",
167
+ unique: [
168
+ /\bdefmodule\b/, /\bdef\s+\w+.*\bdo\b/, /\bdefp\b/,
169
+ /\|>\b/, /@\w+/,
170
+ ],
171
+ strong: [
172
+ /\bcase\s+\w+\s+do\b/, /\bwith\b.*<-/, /\bGenServer\b/,
173
+ ],
174
+ weak: [
175
+ /\bif\b/, /\bend\b/,
176
+ ],
177
+ },
178
+ {
179
+ id: "dart",
180
+ unique: [
181
+ /\bvoid\s+main\b.*\{/, /\bfinal\s+\w+\s*=/, /\bFuture</,
182
+ /\bStream</, /\brequired\s+this\./,
183
+ ],
184
+ strong: [
185
+ /\bclass\s+\w+\s+extends\b/, /\bimport\s+'/, /\basync\b/,
186
+ ],
187
+ weak: [
188
+ /\bif\b/, /\breturn\b/,
189
+ ],
190
+ },
191
+ {
192
+ id: "haskell",
193
+ unique: [
194
+ /\b::\s*/, /\bwhere\b$/, /\bmodule\s+\w+/,
195
+ /<-/, /->/,
196
+ ],
197
+ strong: [
198
+ /\bdata\b/, /\binstance\b/, /\bderiving\b/, /\bimport\s+/,
199
+ ],
200
+ weak: [
201
+ /\bif\b/, /\blet\b/,
202
+ ],
203
+ },
204
+ {
205
+ id: "cpp",
206
+ unique: [
207
+ /#include\s*</, /\bstd::\b/, /\btemplate\s*</,
208
+ /\bnamespace\b/, /::/,
209
+ ],
210
+ strong: [
211
+ /\bcout\b/, /\bnew\b/, /\bdelete\b/, /\bvirtual\b/,
212
+ ],
213
+ weak: [
214
+ /\bclass\b/, /\breturn\b/,
215
+ ],
216
+ },
217
+ {
218
+ id: "lua",
219
+ unique: [
220
+ /\bfunction\s+\w+.*\)\s*$/, /\blocal\s+\w+\s*=/,
221
+ /\btable\.\w+/, /\brequire\s*\(/, /\bself\.\w+/,
222
+ ],
223
+ strong: [
224
+ /\bfor\s+\w+\s*,/, /\bipairs\b/, /\bpairs\b/,
225
+ ],
226
+ weak: [
227
+ /\bif\b/, /\bend\b/,
228
+ ],
229
+ },
99
230
  ];
100
231
  const UNIQUE_WEIGHT = 3;
101
232
  const STRONG_WEIGHT = 1.5;
@@ -1 +1 @@
1
- {"version":3,"file":"language-detect.js","sourceRoot":"","sources":["../../../src/core/translation/language-detect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"language-detect.js","sourceRoot":"","sources":["../../../src/core/translation/language-detect.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,10 @@
4
4
  * Records which rule/template/AI choice was accepted or corrected.
5
5
  * Accepted translations boost confidence; corrected ones reduce it.
6
6
  * Queryable by construct + language pair.
7
+ *
8
+ * Persisted to SQLite with an in-memory Map cache for fast reads.
7
9
  */
10
+ import type Database from "better-sqlite3";
8
11
  export interface MemoryEntry {
9
12
  constructId: string;
10
13
  sourceLanguage: string;
@@ -37,6 +40,12 @@ export interface MemoryStats {
37
40
  }
38
41
  export declare class TranslationMemory {
39
42
  private entries;
43
+ private boostCache;
44
+ private readonly db;
45
+ constructor(db?: Database.Database);
46
+ private initTable;
47
+ private loadFromDb;
48
+ private makeId;
40
49
  /**
41
50
  * Record an accepted translation (positive signal).
42
51
  */
@@ -47,11 +56,15 @@ export declare class TranslationMemory {
47
56
  recordCorrected(input: CorrectedInput): void;
48
57
  /**
49
58
  * Query entries by construct + language pair.
59
+ * Uses DB if available, falls back to in-memory entries.
50
60
  */
51
61
  query(constructId: string, sourceLanguage: string, targetLanguage: string): MemoryEntry[];
52
62
  /**
53
63
  * Get confidence boost for a rule based on historical acceptance/correction.
54
64
  * Positive = rule works well. Negative = rule has been corrected.
65
+ *
66
+ * When DB is available, reads aggregated boost from DB via cache.
67
+ * Falls back to computing from in-memory entries.
55
68
  */
56
69
  getConfidenceBoost(ruleId: string): number;
57
70
  /**
@@ -60,6 +73,7 @@ export declare class TranslationMemory {
60
73
  getAllEntries(): MemoryEntry[];
61
74
  /**
62
75
  * Get statistics.
76
+ * When DB is available, reads aggregated counts from DB.
63
77
  */
64
78
  getStats(): MemoryStats;
65
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"translation-memory.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/memory/translation-memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAqB;IAEpC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAY1C;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAa5C;;OAEG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,WAAW,EAAE;IASzF;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAgB1C;;OAEG;IACH,aAAa,IAAI,WAAW,EAAE;IAI9B;;OAEG;IACH,QAAQ,IAAI,WAAW;CAOxB"}
1
+ {"version":3,"file":"translation-memory.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/memory/translation-memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgBD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAgC;gBAEvC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ;IAQlC,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,MAAM;IAId;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA4B1C;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IA6B5C;;;OAGG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,WAAW,EAAE;IASzF;;;;;;OAMG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAqB1C;;OAEG;IACH,aAAa,IAAI,WAAW,EAAE;IAI9B;;;OAGG;IACH,QAAQ,IAAI,WAAW;CAsBxB"}
@@ -4,11 +4,50 @@
4
4
  * Records which rule/template/AI choice was accepted or corrected.
5
5
  * Accepted translations boost confidence; corrected ones reduce it.
6
6
  * Queryable by construct + language pair.
7
+ *
8
+ * Persisted to SQLite with an in-memory Map cache for fast reads.
7
9
  */
8
10
  import { now } from "../../utils/time.js";
9
11
  // ── Translation Memory ─────────────────────────────
10
12
  export class TranslationMemory {
11
13
  entries = [];
14
+ boostCache = new Map();
15
+ db;
16
+ constructor(db) {
17
+ this.db = db;
18
+ if (this.db) {
19
+ this.initTable();
20
+ this.loadFromDb();
21
+ }
22
+ }
23
+ initTable() {
24
+ if (!this.db)
25
+ return;
26
+ this.db.exec(`
27
+ CREATE TABLE IF NOT EXISTS translation_memory (
28
+ id TEXT PRIMARY KEY,
29
+ construct_id TEXT NOT NULL,
30
+ source_language TEXT NOT NULL,
31
+ target_language TEXT NOT NULL,
32
+ correction_count INTEGER DEFAULT 0,
33
+ acceptance_count INTEGER DEFAULT 0,
34
+ confidence_boost REAL DEFAULT 0,
35
+ created_at TEXT NOT NULL,
36
+ updated_at TEXT NOT NULL
37
+ )
38
+ `);
39
+ }
40
+ loadFromDb() {
41
+ if (!this.db)
42
+ return;
43
+ const rows = this.db.prepare("SELECT * FROM translation_memory").all();
44
+ for (const row of rows) {
45
+ this.boostCache.set(row.id, row.confidence_boost);
46
+ }
47
+ }
48
+ makeId(constructId, sourceLanguage, targetLanguage) {
49
+ return `${constructId}:${sourceLanguage}:${targetLanguage}`;
50
+ }
12
51
  /**
13
52
  * Record an accepted translation (positive signal).
14
53
  */
@@ -22,6 +61,21 @@ export class TranslationMemory {
22
61
  confidence: input.confidence,
23
62
  timestamp: now(),
24
63
  });
64
+ if (this.db) {
65
+ const id = this.makeId(input.constructId, input.sourceLanguage, input.targetLanguage);
66
+ const timestamp = now();
67
+ this.db.prepare(`
68
+ INSERT INTO translation_memory (id, construct_id, source_language, target_language, acceptance_count, confidence_boost, created_at, updated_at)
69
+ VALUES (?, ?, ?, ?, 1, 0.05, ?, ?)
70
+ ON CONFLICT(id) DO UPDATE SET
71
+ acceptance_count = acceptance_count + 1,
72
+ confidence_boost = confidence_boost + 0.05,
73
+ updated_at = ?
74
+ `).run(id, input.constructId, input.sourceLanguage, input.targetLanguage, timestamp, timestamp, timestamp);
75
+ const row = this.db.prepare("SELECT confidence_boost FROM translation_memory WHERE id = ?").get(id);
76
+ if (row)
77
+ this.boostCache.set(id, row.confidence_boost);
78
+ }
25
79
  }
26
80
  /**
27
81
  * Record a corrected translation (negative signal).
@@ -37,9 +91,25 @@ export class TranslationMemory {
37
91
  correctionReason: input.correctionReason,
38
92
  timestamp: now(),
39
93
  });
94
+ if (this.db) {
95
+ const id = this.makeId(input.constructId, input.sourceLanguage, input.targetLanguage);
96
+ const timestamp = now();
97
+ this.db.prepare(`
98
+ INSERT INTO translation_memory (id, construct_id, source_language, target_language, correction_count, confidence_boost, created_at, updated_at)
99
+ VALUES (?, ?, ?, ?, 1, -0.1, ?, ?)
100
+ ON CONFLICT(id) DO UPDATE SET
101
+ correction_count = correction_count + 1,
102
+ confidence_boost = confidence_boost - 0.1,
103
+ updated_at = ?
104
+ `).run(id, input.constructId, input.sourceLanguage, input.targetLanguage, timestamp, timestamp, timestamp);
105
+ const row = this.db.prepare("SELECT confidence_boost FROM translation_memory WHERE id = ?").get(id);
106
+ if (row)
107
+ this.boostCache.set(id, row.confidence_boost);
108
+ }
40
109
  }
41
110
  /**
42
111
  * Query entries by construct + language pair.
112
+ * Uses DB if available, falls back to in-memory entries.
43
113
  */
44
114
  query(constructId, sourceLanguage, targetLanguage) {
45
115
  return this.entries.filter((e) => e.constructId === constructId &&
@@ -49,8 +119,16 @@ export class TranslationMemory {
49
119
  /**
50
120
  * Get confidence boost for a rule based on historical acceptance/correction.
51
121
  * Positive = rule works well. Negative = rule has been corrected.
122
+ *
123
+ * When DB is available, reads aggregated boost from DB via cache.
124
+ * Falls back to computing from in-memory entries.
52
125
  */
53
126
  getConfidenceBoost(ruleId) {
127
+ // Check DB cache first (keyed by construct:source:target)
128
+ const cachedBoost = this.boostCache.get(ruleId);
129
+ if (cachedBoost !== undefined)
130
+ return cachedBoost;
131
+ // Fall back to in-memory calculation
54
132
  const ruleEntries = this.entries.filter((e) => e.ruleId === ruleId);
55
133
  if (ruleEntries.length === 0)
56
134
  return 0;
@@ -73,8 +151,23 @@ export class TranslationMemory {
73
151
  }
74
152
  /**
75
153
  * Get statistics.
154
+ * When DB is available, reads aggregated counts from DB.
76
155
  */
77
156
  getStats() {
157
+ if (this.db) {
158
+ const row = this.db.prepare(`
159
+ SELECT
160
+ COALESCE(SUM(acceptance_count + correction_count), 0) AS total,
161
+ COALESCE(SUM(acceptance_count), 0) AS accepted,
162
+ COALESCE(SUM(correction_count), 0) AS corrected
163
+ FROM translation_memory
164
+ `).get();
165
+ return {
166
+ totalEntries: row.total,
167
+ accepted: row.accepted,
168
+ corrected: row.corrected,
169
+ };
170
+ }
78
171
  return {
79
172
  totalEntries: this.entries.length,
80
173
  accepted: this.entries.filter((e) => e.accepted).length,
@@ -1 +1 @@
1
- {"version":3,"file":"translation-memory.js","sourceRoot":"","sources":["../../../../src/core/translation/memory/translation-memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAsC1C,sDAAsD;AAEtD,MAAM,OAAO,iBAAiB;IACpB,OAAO,GAAkB,EAAE,CAAC;IAEpC;;OAEG;IACH,cAAc,CAAC,KAAoB;QACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,GAAG,EAAE;SACjB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,KAAqB;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK,CAAC,kBAAkB;YACpC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,SAAS,EAAE,GAAG,EAAE;SACjB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAmB,EAAE,cAAsB,EAAE,cAAsB;QACvE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,KAAK,WAAW;YAC7B,CAAC,CAAC,cAAc,KAAK,cAAc;YACnC,CAAC,CAAC,cAAc,KAAK,cAAc,CACtC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,MAAc;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACpE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEvC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,KAAK,IAAI,IAAI,CAAC,CAAC,sCAAsC;YACvD,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,GAAG,CAAC,CAAC,uCAAuC;YACvD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;YACvD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;SAC1D,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"translation-memory.js","sourceRoot":"","sources":["../../../../src/core/translation/memory/translation-memory.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"csharp-parser-adapter.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/parsers/csharp-parser-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA4B1E,qBAAa,mBAAoB,YAAW,aAAa;IACvD,QAAQ,CAAC,UAAU,YAAY;IAE/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;CAqC9C"}
1
+ {"version":3,"file":"csharp-parser-adapter.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/parsers/csharp-parser-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAiC1E,qBAAa,mBAAoB,YAAW,aAAa;IACvD,QAAQ,CAAC,UAAU,YAAY;IAE/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;CAgC9C"}
@@ -1,16 +1,21 @@
1
1
  const LINE_RULES = [
2
2
  { pattern: /^\s*using\s+[\w.]+;/, constructId: "uc_import_named" },
3
+ // class with inheritance (: BaseClass)
4
+ // eslint-disable-next-line security/detect-unsafe-regex
5
+ { pattern: /^\s*(public|private|protected|internal)?\s*(static\s+)?(abstract\s+|sealed\s+)?class\s+(\w+)\s*:\s*\w+/,
6
+ constructId: "uc_class_def", nameGroup: 4, also: [{ constructId: "uc_extends" }] },
3
7
  // eslint-disable-next-line security/detect-unsafe-regex
4
8
  { pattern: /^\s*(public|private|protected|internal)?\s*(static\s+)?(abstract\s+)?class\s+(\w+)/, constructId: "uc_class_def", nameGroup: 4 },
5
9
  { pattern: /^\s*(public|private|protected|internal)?\s*interface\s+(\w+)/, constructId: "uc_interface", nameGroup: 2 },
10
+ { pattern: /^\s*(public|private|protected|internal)?\s*enum\s+(\w+)/, constructId: "uc_type_enum", nameGroup: 2 },
6
11
  // eslint-disable-next-line security/detect-unsafe-regex
7
12
  { pattern: /^\s*(public|private|protected|internal)?\s*(static\s+)?(async\s+)?([\w<>?[\]]+)\s+(\w+)\s*\(/, constructId: "uc_fn_def", nameGroup: 5,
8
13
  also: [{ constructId: "uc_async_fn" }] },
9
14
  { pattern: /^\s*try\s*\{/, constructId: "uc_try_catch" },
10
15
  { pattern: /^\s*throw\s+/, constructId: "uc_throw" },
11
16
  { pattern: /^\s*if\s*\(/, constructId: "uc_if_else" },
12
- { pattern: /^\s*for\s*\(/, constructId: "uc_for_loop" },
13
- { pattern: /^\s*foreach\s*\(/, constructId: "uc_for_each" },
17
+ { pattern: /^\s*}\s*else\b/, constructId: "uc_if_else" },
18
+ { pattern: /^\s*(for|foreach)\s*\(/, constructId: "uc_for_each" },
14
19
  { pattern: /^\s*while\s*\(/, constructId: "uc_while" },
15
20
  { pattern: /^\s*switch\s*\(/, constructId: "uc_switch" },
16
21
  { pattern: /^\s*return\b/, constructId: "uc_return" },
@@ -30,26 +35,18 @@ export class CSharpParserAdapter {
30
35
  const match = rule.pattern.exec(line);
31
36
  if (!match)
32
37
  continue;
33
- // For async detection, only emit async_fn if "async" is in line
34
- if (rule.also && rule.also[0].constructId === "uc_async_fn" && !line.includes("async")) {
35
- constructs.push({
36
- constructId: rule.constructId,
37
- name: rule.nameGroup ? match[rule.nameGroup] : undefined,
38
- startLine: lineNum,
39
- endLine: lineNum,
40
- });
41
- }
42
- else {
43
- constructs.push({
44
- constructId: rule.constructId,
45
- name: rule.nameGroup ? match[rule.nameGroup] : undefined,
46
- startLine: lineNum,
47
- endLine: lineNum,
48
- });
49
- if (rule.also && line.includes("async")) {
50
- for (const extra of rule.also) {
51
- constructs.push({ constructId: extra.constructId, startLine: lineNum, endLine: lineNum });
52
- }
38
+ constructs.push({
39
+ constructId: rule.constructId,
40
+ name: rule.nameGroup ? match[rule.nameGroup] : undefined,
41
+ startLine: lineNum,
42
+ endLine: lineNum,
43
+ });
44
+ if (rule.also) {
45
+ for (const extra of rule.also) {
46
+ // uc_async_fn should only be emitted if "async" actually appears in the line
47
+ if (extra.constructId === "uc_async_fn" && !line.includes("async"))
48
+ continue;
49
+ constructs.push({ constructId: extra.constructId, startLine: lineNum, endLine: lineNum });
53
50
  }
54
51
  }
55
52
  break;