@mcp-graph-workflow/mcp-graph 5.21.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 (186) 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-DcTbCUEa.js +6 -0
  152. package/dist/web/dashboard/dist/assets/context-tab-DNMJ2Pv-.js +1 -0
  153. package/dist/web/dashboard/dist/assets/{gitnexus-tab-D6MEUR3O.js → gitnexus-tab-CZ9LJbwz.js} +10 -10
  154. package/dist/web/dashboard/dist/assets/{graph-section-CyaVBqJB.js → graph-section-BdcXKKoS.js} +1 -1
  155. package/dist/web/dashboard/dist/assets/graph-tab-CFzux3kf.js +6 -0
  156. package/dist/web/dashboard/dist/assets/{graph-utils-dWjSQUrT.js → graph-utils-_8jpWA5z.js} +1 -1
  157. package/dist/web/dashboard/dist/assets/{index-BpSI95md.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-CvAguK65.css +1 -0
  160. package/dist/web/dashboard/dist/assets/{index-BKNOfKcX.js → index-DSI2SYWO.js} +1 -1
  161. package/dist/web/dashboard/dist/assets/{insights-tab-qfYmJM2I.js → insights-tab-DUA76KUY.js} +15 -15
  162. package/dist/web/dashboard/dist/assets/journey-tab-FTd6jBta.js +1 -0
  163. package/dist/web/dashboard/dist/assets/{languages-tab-CrgWsmId.js → languages-tab-B_nhFL2q.js} +7 -12
  164. package/dist/web/dashboard/dist/assets/loader-circle-D1DpGd2u.js +6 -0
  165. package/dist/web/dashboard/dist/assets/{logs-tab-CQ8bSvRy.js → logs-tab-CzL36_Qy.js} +2 -2
  166. package/dist/web/dashboard/dist/assets/lsp-tab-DdHhJq_H.js +49 -0
  167. package/dist/web/dashboard/dist/assets/memories-tab-CzgCahnV.js +1 -0
  168. package/dist/web/dashboard/dist/assets/prd-backlog-tab-C8Cl7swI.js +1 -0
  169. package/dist/web/dashboard/dist/assets/refresh-cw-DSYiHmbh.js +6 -0
  170. package/dist/web/dashboard/dist/assets/{siebel-tab-rX5raaJc.js → siebel-tab-B4XOaUGz.js} +3 -3
  171. package/dist/web/dashboard/dist/assets/skills-tab-CkpnwPJY.js +1 -0
  172. package/dist/web/dashboard/dist/assets/{style-D_2CfpkF.js → style-BOQDk6qp.js} +1 -1
  173. package/dist/web/dashboard/dist/assets/triangle-alert-Bf6Ly19h.js +16 -0
  174. package/dist/web/dashboard/dist/index.html +2 -2
  175. package/package.json +1 -1
  176. package/dist/web/dashboard/dist/assets/benchmark-tab-CA0tgawW.js +0 -1
  177. package/dist/web/dashboard/dist/assets/context-tab-CwKPhEgw.js +0 -1
  178. package/dist/web/dashboard/dist/assets/graph-tab-xMRobj4G.js +0 -1
  179. package/dist/web/dashboard/dist/assets/index-DUIBILM9.js +0 -218
  180. package/dist/web/dashboard/dist/assets/index-QMfM-nWT.css +0 -1
  181. package/dist/web/dashboard/dist/assets/journey-tab-BB5ei9Re.js +0 -1
  182. package/dist/web/dashboard/dist/assets/lsp-tab-BKKSyuSj.js +0 -54
  183. package/dist/web/dashboard/dist/assets/memories-tab-BshQ8DL8.js +0 -1
  184. package/dist/web/dashboard/dist/assets/prd-backlog-tab-nfXaOLTF.js +0 -1
  185. package/dist/web/dashboard/dist/assets/skills-tab-DyX_XWmC.js +0 -1
  186. package/dist/web/dashboard/dist/assets/triangle-alert-T9o21Q4O.js +0 -21
@@ -3,12 +3,38 @@
3
3
  * Orchestrates the full translation workflow: analyze → prepare (with prompt) → finalize.
4
4
  */
5
5
  import { z } from "zod/v4";
6
+ import { readFileSync } from "node:fs";
7
+ import path from "node:path";
6
8
  import { TranslationStore } from "../../core/translation/translation-store.js";
7
9
  import { TranslationOrchestrator } from "../../core/translation/translation-orchestrator.js";
8
10
  import { ConstructRegistry } from "../../core/translation/ucr/construct-registry.js";
9
11
  import { loadAndSeedRegistry } from "../../core/translation/ucr/construct-seed.js";
10
12
  import { logger } from "../../core/utils/logger.js";
13
+ import { assertPathInsideProject } from "../../core/utils/fs.js";
11
14
  import { mcpText, mcpError } from "../response-helpers.js";
15
+ const EXTENSION_TO_LANGUAGE = {
16
+ ".py": "python",
17
+ ".ts": "typescript",
18
+ ".js": "javascript",
19
+ ".java": "java",
20
+ ".go": "go",
21
+ ".rs": "rust",
22
+ ".cs": "csharp",
23
+ ".rb": "ruby",
24
+ ".php": "php",
25
+ ".swift": "swift",
26
+ ".kt": "kotlin",
27
+ ".scala": "scala",
28
+ ".lua": "lua",
29
+ ".hs": "haskell",
30
+ ".cpp": "cpp",
31
+ ".cc": "cpp",
32
+ ".cxx": "cpp",
33
+ ".c": "c",
34
+ ".dart": "dart",
35
+ ".ex": "elixir",
36
+ ".exs": "elixir",
37
+ };
12
38
  export function registerTranslateCode(server, store) {
13
39
  let _cachedDb = null;
14
40
  let _orchestrator = null;
@@ -24,16 +50,28 @@ export function registerTranslateCode(server, store) {
24
50
  return _orchestrator;
25
51
  }
26
52
  server.tool("translate_code", "Translate code between programming languages. Creates a translation job, analyzes constructs, and returns a prompt for AI code generation. Call with generatedCode to finalize.", {
27
- code: z.string().min(1).describe("Source code to translate"),
53
+ code: z.string().optional().describe("Source code to translate (alternative to filePath)"),
54
+ filePath: z.string().optional().describe("Path to source file (alternative to code)"),
28
55
  sourceLanguage: z.string().optional().describe("Source language hint (auto-detected if omitted)"),
29
56
  targetLanguage: z.string().min(1).describe("Target programming language"),
30
57
  scope: z.enum(["snippet", "function", "module"]).optional().default("snippet").describe("Translation scope"),
31
58
  generatedCode: z.string().optional().describe("AI-generated code to finalize (omit for analyze-only phase)"),
32
59
  jobId: z.string().optional().describe("Existing job ID to finalize (use with generatedCode)"),
33
- }, async ({ code, sourceLanguage, targetLanguage, scope, generatedCode, jobId }) => {
34
- logger.info("tool:translate_code", { targetLanguage, scope, hasGeneratedCode: !!generatedCode, jobId });
60
+ }, async ({ code, filePath, sourceLanguage, targetLanguage, scope, generatedCode, jobId }) => {
61
+ logger.info("tool:translate_code", { filePath, targetLanguage, scope, hasGeneratedCode: !!generatedCode, jobId });
35
62
  try {
36
63
  const orchestrator = getOrchestrator();
64
+ // Resolve code from filePath if provided
65
+ let resolvedCode = code;
66
+ let resolvedSourceLanguage = sourceLanguage;
67
+ if (filePath) {
68
+ const resolvedPath = assertPathInsideProject(filePath);
69
+ resolvedCode = readFileSync(resolvedPath, "utf-8");
70
+ if (!resolvedSourceLanguage) {
71
+ const ext = path.extname(resolvedPath).toLowerCase();
72
+ resolvedSourceLanguage = EXTENSION_TO_LANGUAGE[ext];
73
+ }
74
+ }
37
75
  // Finalize mode: submit generated code for an existing job
38
76
  if (jobId && generatedCode) {
39
77
  const result = orchestrator.finalizeTranslation(jobId, generatedCode);
@@ -47,12 +85,16 @@ export function registerTranslateCode(server, store) {
47
85
  translatedConstructs: result.evidence?.translatedConstructs,
48
86
  });
49
87
  }
88
+ // Validate code is available for prepare mode
89
+ if (!resolvedCode) {
90
+ return mcpError("Either code or filePath is required");
91
+ }
50
92
  // Prepare mode: analyze + create job + return prompt
51
93
  const projectId = store.getProject()?.id ?? "default";
52
94
  const prepareResult = orchestrator.prepareTranslation({
53
95
  projectId,
54
- sourceCode: code,
55
- sourceLanguage,
96
+ sourceCode: resolvedCode,
97
+ sourceLanguage: resolvedSourceLanguage,
56
98
  targetLanguage,
57
99
  scope,
58
100
  });
@@ -1 +1 @@
1
- {"version":3,"file":"translate-code.js","sourceRoot":"","sources":["../../../src/mcp/tools/translate-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAG3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,KAAkB;IACzE,IAAI,SAAS,GAAY,IAAI,CAAC;IAC9B,IAAI,aAAa,GAAmC,IAAI,CAAC;IAEzD,SAAS,eAAe;QACtB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,SAAS,GAAG,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAC3C,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAClD,aAAa,GAAG,IAAI,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,aAAwC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,iLAAiL,EACjL;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC5D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;QACjG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACzE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC5G,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;QAC5G,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;KAC9F,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE;QAC9E,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAExG,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;YAEvC,2DAA2D;YAC3D,IAAI,KAAK,IAAI,aAAa,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBACtE,OAAO,OAAO,CAAC;oBACb,EAAE,EAAE,IAAI;oBACR,KAAK,EAAE,WAAW;oBAClB,KAAK;oBACL,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe;oBAC5C,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK;oBAC7B,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB;oBACrD,oBAAoB,EAAE,MAAM,CAAC,QAAQ,EAAE,oBAAoB;iBAC5D,CAAC,CAAC;YACL,CAAC;YAED,qDAAqD;YACrD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,SAAS,CAAC;YACtD,MAAM,aAAa,GAAG,YAAY,CAAC,kBAAkB,CAAC;gBACpD,SAAS;gBACT,UAAU,EAAE,IAAI;gBAChB,cAAc;gBACd,cAAc;gBACd,KAAK;aACN,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;gBACb,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,MAAM,EAAE,aAAa,CAAC,MAAM;gBAC5B,IAAI,EAAE,yHAAyH;aAChI,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"translate-code.js","sourceRoot":"","sources":["../../../src/mcp/tools/translate-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tool: translation_jobs
3
+ * List, get, delete, and aggregate stats for translation jobs.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ import type { SqliteStore } from "../../core/store/sqlite-store.js";
7
+ export declare function registerTranslationJobs(server: McpServer, store: SqliteStore): void;
8
+ //# sourceMappingURL=translation-jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation-jobs.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/translation-jobs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAqGnF"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * MCP Tool: translation_jobs
3
+ * List, get, delete, and aggregate stats for translation jobs.
4
+ */
5
+ import { z } from "zod/v4";
6
+ import { TranslationStore } from "../../core/translation/translation-store.js";
7
+ import { logger } from "../../core/utils/logger.js";
8
+ import { mcpText, mcpError } from "../response-helpers.js";
9
+ export function registerTranslationJobs(server, store) {
10
+ let _cachedDb = null;
11
+ let _translationStore = null;
12
+ function getTranslationStore() {
13
+ const db = store.getDb();
14
+ if (db !== _cachedDb) {
15
+ _cachedDb = db;
16
+ _translationStore = new TranslationStore(db);
17
+ }
18
+ return _translationStore;
19
+ }
20
+ server.tool("translation_jobs", "Manage translation jobs: list, get, delete, or view aggregated stats.", {
21
+ action: z.enum(["list", "get", "delete", "stats"]).describe("Action to perform"),
22
+ jobId: z.string().optional().describe("Job ID (required for get/delete)"),
23
+ status: z.string().optional().describe("Filter by status (for list action)"),
24
+ }, async ({ action, jobId, status }) => {
25
+ logger.info("tool:translation_jobs", { action, jobId, status });
26
+ try {
27
+ const translationStore = getTranslationStore();
28
+ const projectId = store.getProject()?.id ?? "default";
29
+ switch (action) {
30
+ case "list": {
31
+ let jobs = translationStore.listJobs(projectId);
32
+ if (status) {
33
+ jobs = jobs.filter((j) => j.status === status);
34
+ }
35
+ return mcpText({
36
+ ok: true,
37
+ jobs: jobs.map((j) => ({
38
+ id: j.id,
39
+ sourceLanguage: j.sourceLanguage,
40
+ targetLanguage: j.targetLanguage,
41
+ status: j.status,
42
+ scope: j.scope,
43
+ confidenceScore: j.confidenceScore ?? null,
44
+ createdAt: j.createdAt,
45
+ })),
46
+ });
47
+ }
48
+ case "get": {
49
+ if (!jobId) {
50
+ return mcpError("jobId is required for get action");
51
+ }
52
+ const job = translationStore.getJob(jobId);
53
+ if (!job) {
54
+ return mcpError(`Job not found: ${jobId}`);
55
+ }
56
+ return mcpText({ ok: true, job });
57
+ }
58
+ case "delete": {
59
+ if (!jobId) {
60
+ return mcpError("jobId is required for delete action");
61
+ }
62
+ const deleted = translationStore.deleteJob(jobId);
63
+ if (!deleted) {
64
+ return mcpError(`Job not found: ${jobId}`);
65
+ }
66
+ return mcpText({ ok: true, deleted: true });
67
+ }
68
+ case "stats": {
69
+ const jobs = translationStore.listJobs(projectId);
70
+ const totalJobs = jobs.length;
71
+ const done = jobs.filter((j) => j.status === "done").length;
72
+ const failed = jobs.filter((j) => j.status === "failed").length;
73
+ const pending = jobs.filter((j) => j.status === "pending").length;
74
+ const jobsWithConfidence = jobs.filter((j) => j.confidenceScore != null);
75
+ const avgConfidence = jobsWithConfidence.length > 0
76
+ ? jobsWithConfidence.reduce((sum, j) => sum + (j.confidenceScore ?? 0), 0) / jobsWithConfidence.length
77
+ : 0;
78
+ return mcpText({
79
+ ok: true,
80
+ totalJobs,
81
+ done,
82
+ failed,
83
+ pending,
84
+ avgConfidence: Math.round(avgConfidence * 1000) / 1000,
85
+ });
86
+ }
87
+ default:
88
+ return mcpError(`Unknown action: ${action}`);
89
+ }
90
+ }
91
+ catch (err) {
92
+ logger.error("tool:translation_jobs:error", { error: err instanceof Error ? err.message : String(err) });
93
+ return mcpError(err instanceof Error ? err : String(err));
94
+ }
95
+ });
96
+ }
97
+ //# sourceMappingURL=translation-jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation-jobs.js","sourceRoot":"","sources":["../../../src/mcp/tools/translation-jobs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{r as u,a as h,j as e}from"./index-CITYTuX5.js";function v(){const[r,c]=u.useState(null),[m,a]=u.useState(!0),[t,x]=u.useState(null);return u.useEffect(()=>{async function n(){try{const d=await h.request("/benchmark");c(d)}catch(d){x(d instanceof Error?d.message:"Failed to load benchmark data")}finally{a(!1)}}n()},[]),{data:r,loading:m,error:t}}function p(){const{data:r,loading:c,error:m}=v();if(c)return e.jsxs("div",{className:"p-6 max-w-5xl mx-auto space-y-6",children:[e.jsx("div",{className:"h-5 w-40 rounded bg-surface animate-pulse"}),e.jsx("div",{className:"grid grid-cols-4 gap-3",children:Array.from({length:4}).map((o,l)=>e.jsx("div",{className:"h-20 rounded-xl border border-edge bg-surface-alt animate-pulse"},l))}),e.jsx("div",{className:"space-y-2",children:Array.from({length:5}).map((o,l)=>e.jsx("div",{className:"h-6 rounded bg-surface animate-pulse",style:{width:`${60+Math.random()*30}%`}},l))})]});if(m)return e.jsx("div",{className:"flex flex-col items-center justify-center h-full gap-4",children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-sm font-medium text-foreground",children:"Failed to load benchmark"}),e.jsx("p",{className:"text-xs text-muted mt-1",children:m})]})});if(!r)return e.jsx("div",{});const{tokenEconomy:a,layeredCompression:t,dependencyIntelligence:x,toolTokenUsage:n,formulas:d}=r;return e.jsxs("div",{className:"p-6 max-w-5xl mx-auto space-y-6 overflow-y-auto h-full",children:[e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Token Economy"}),e.jsxs("div",{className:"grid grid-cols-5 gap-3 mb-4",children:[e.jsx(s,{value:`${a.avgCompressionPercent}%`,label:"Avg Compress"}),e.jsx(s,{value:a.totalTokensSaved.toLocaleString(),label:"Total Tokens Saved"}),e.jsx(s,{value:a.avgTokensSavedPerTask.toLocaleString(),label:"Saved / Task"}),e.jsx(s,{value:a.totalNodes,label:"Nodes"}),e.jsx(s,{value:a.totalEdges,label:"Edges"})]}),a.perTaskMetrics.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-medium text-muted mb-2",children:"Context Compression per Task (vs Full Graph)"}),e.jsx("div",{className:"space-y-1.5","data-testid":"compression-bars",children:a.perTaskMetrics.slice(0,15).map(o=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate",title:o.title,children:o.title}),e.jsx("div",{className:"flex-1 h-3 bg-surface-elevated rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-accent",style:{width:`${Math.min(o.compressionPercent,100)}%`}})}),e.jsxs("span",{className:"text-muted w-24 text-right",children:[o.compressionPercent,"% (",o.estimatedTokens," tok)"]})]},o.id))})]})]}),t&&t.avgLayer1SavingsPercent!=null?e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Real Token Savings (Per-Layer)"}),e.jsxs("div",{className:"grid grid-cols-5 gap-3 mb-4",children:[e.jsx(s,{value:`${t.avgLayer1SavingsPercent}%`,label:"L1: Field Strip"}),e.jsx(s,{value:`${t.avgLayer2SavingsPercent}%`,label:"L2: Desc Truncate"}),e.jsx(s,{value:`${t.avgLayer3SavingsPercent}%`,label:"L3: Default Omit"}),e.jsx(s,{value:`${t.avgLayer4SavingsPercent}%`,label:"L4: Short Keys"}),e.jsx(s,{value:`${t.avgTotalRealSavingsPercent}%`,label:"Total Real Savings"})]}),(()=>{const o=Math.max(t.avgNaiveNeighborhoodTokens,1),l=[{label:"Naive Neighborhood",tokens:t.avgNaiveNeighborhoodTokens,color:"#ef4444"},{label:"L1: Field Stripping",tokens:t.avgCompactContextTokens,color:"#f97316"},{label:"L2: Desc Truncation",tokens:t.avgNeighborTruncatedTokens,color:"#eab308"},{label:"L3: Default Omission",tokens:t.avgDefaultOmittedTokens,color:"#22c55e"},{label:"L4: Short Keys",tokens:t.avgShortKeysTokens,color:"#3b82f6"},{label:"Summary Tier",tokens:t.avgSummaryTierTokens,color:"#8b5cf6"}];return e.jsx("div",{className:"space-y-1.5","data-testid":"waterfall-bars",children:l.map(i=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-40 truncate",title:i.label,children:i.label}),e.jsx("div",{className:"flex-1 h-3 bg-surface-elevated rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${Math.min(i.tokens/o*100,100)}%`,backgroundColor:i.color}})}),e.jsxs("span",{className:"text-muted w-20 text-right",children:[i.tokens.toLocaleString()," tok"]})]},i.label))})})()]}):e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Real Token Savings (Per-Layer)"}),e.jsx("div",{className:"px-3 py-4 rounded-xl border border-edge bg-surface-alt text-center text-xs text-muted",children:"No compression data available"})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Dependency Intelligence"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsx(s,{value:x.inferredDeps,label:"Auto Inferred"}),e.jsx(s,{value:`${x.blockedTasks}/${a.totalNodes}`,label:"Blocked Detected"}),e.jsx(s,{value:x.cycles,label:"Cycles Detected"})]})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Formulas & Justification"}),e.jsx("div",{className:"px-3 py-2 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt text-xs space-y-1","data-testid":"formulas-section",children:Object.entries(d).map(([o,l])=>e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("span",{className:"text-muted font-mono w-40 shrink-0",children:[o,":"]}),e.jsx("span",{children:l})]},o))})]}),n&&n.totalCalls>0&&e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Tool Token Usage"}),e.jsxs("div",{className:"grid grid-cols-3 gap-3 mb-4",children:[e.jsx(s,{value:n.totalCalls.toLocaleString(),label:"Total Calls"}),e.jsx(s,{value:n.totalInputTokens.toLocaleString(),label:"Total Input Tokens"}),e.jsx(s,{value:n.totalOutputTokens.toLocaleString(),label:"Total Output Tokens"})]}),n.perTool.length>0&&(()=>{const o=Math.max(...n.perTool.map(l=>l.totalTokens),1);return e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-medium text-muted mb-2",children:"Token Usage per Tool"}),e.jsx("div",{className:"space-y-1.5","data-testid":"tool-token-bars",children:n.perTool.slice(0,15).map(l=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate font-mono",title:l.toolName,children:l.toolName}),e.jsx("div",{className:"flex-1 h-3 bg-surface-elevated rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-accent",style:{width:`${Math.min(l.totalTokens/o*100,100)}%`}})}),e.jsxs("span",{className:"text-muted w-32 text-right",children:[l.callCount," calls, ",l.totalTokens.toLocaleString()," tok"]})]},l.toolName))})]})})()]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Cost Analysis"}),e.jsx("h4",{className:"text-xs font-medium text-muted mb-2",children:"Savings from Compression"}),e.jsxs("div",{className:"grid grid-cols-4 gap-3 mb-3",children:[e.jsx(s,{value:`$${a.costSavings.opusSavedPerTask.toFixed(3)}`,label:"Opus Saved/Task"}),e.jsx(s,{value:`$${a.costSavings.sonnetSavedPerTask.toFixed(3)}`,label:"Sonnet Saved/Task"}),e.jsx(s,{value:`$${a.costSavings.opusTotalSaved.toFixed(2)}`,label:"Opus Total Saved"}),e.jsx(s,{value:`$${a.costSavings.sonnetTotalSaved.toFixed(2)}`,label:"Sonnet Total Saved"})]}),e.jsx("h4",{className:"text-xs font-medium text-muted mb-2",children:"Cost per Task (after compression)"}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(s,{value:`$${a.costSavings.opusCostPerTask.toFixed(3)}`,label:"Opus Input/Task"}),e.jsx(s,{value:`$${a.costSavings.sonnetCostPerTask.toFixed(3)}`,label:"Sonnet Input/Task"})]})]})]})}function s({value:r,label:c}){return e.jsxs("div",{className:"p-3 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt text-center","data-testid":"metric-card",children:[e.jsx("div",{className:"text-xl font-bold",children:r}),e.jsx("div",{className:"text-[10px] text-muted uppercase",children:c})]})}export{p as BenchmarkTab};
@@ -0,0 +1,6 @@
1
+ import{c as e}from"./index-CITYTuX5.js";/**
2
+ * @license lucide-react v1.7.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const c=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],y=e("circle-alert",c);export{y as C};
@@ -0,0 +1 @@
1
+ import{r as o,a as h,j as e}from"./index-CITYTuX5.js";function m(){const[s,x]=o.useState(null),[i,n]=o.useState(!0),[c,r]=o.useState(null),d=o.useCallback(async()=>{n(!0),r(null);try{const l=await h.getContextBudget();x(l)}catch(l){r(l instanceof Error?l.message:"Failed to load context budget")}finally{n(!1)}},[]);return o.useEffect(()=>{d()},[d]),{budget:s,loading:i,error:c,refresh:d}}const u={green:{bg:"bg-green-500/10",text:"text-green-500",border:"border-green-500/30"},yellow:{bg:"bg-yellow-500/10",text:"text-yellow-500",border:"border-yellow-500/30"},red:{bg:"bg-red-500/10",text:"text-red-500",border:"border-red-500/30"}};function g(){const{budget:s,loading:x,error:i,refresh:n}=m();if(i)return e.jsxs("div",{className:"flex items-center justify-center h-full text-danger",children:["Failed to load context budget: ",i]});if(x||!s)return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-6",children:[e.jsx("div",{className:"h-5 w-48 rounded bg-surface animate-pulse"}),e.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3",children:Array.from({length:4}).map((t,a)=>e.jsx("div",{className:"h-20 rounded-xl border border-edge bg-surface-alt animate-pulse"},a))}),e.jsx("div",{className:"h-24 rounded-lg border border-edge bg-surface-alt animate-pulse"}),e.jsx("div",{className:"h-12 rounded-xl border border-edge bg-surface-alt animate-pulse"})]});const c=u[s.health]??u.green,[r,d]=o.useState(null),l=t=>{r===t?(d(null),h.toggleSkill(t,!1).then(()=>n())):(d(t),setTimeout(()=>d(a=>a===t?null:a),3e3))};return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-6 overflow-y-auto h-full",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h2",{className:"text-lg font-semibold",children:"Context Management"}),e.jsx("button",{onClick:()=>n(),className:"text-xs px-3 py-1.5 rounded-lg bg-accent text-white hover:opacity-90 transition-opacity",children:"Refresh"})]}),e.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3",children:[e.jsxs("div",{className:"p-3 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt text-center",children:[e.jsx("div",{className:"text-xl font-bold",children:s.activeTokens.toLocaleString()}),e.jsx("div",{className:"text-[10px] text-muted uppercase",children:"Active Tokens"})]}),e.jsxs("div",{className:"p-3 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt text-center",children:[e.jsx("div",{className:"text-xl font-bold",children:s.totalTokens.toLocaleString()}),e.jsx("div",{className:"text-[10px] text-muted uppercase",children:"Total Tokens"})]}),e.jsxs("div",{className:"p-3 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt text-center",children:[e.jsx("div",{className:"text-xl font-bold",children:s.activeCount}),e.jsx("div",{className:"text-[10px] text-muted uppercase",children:"Active Skills"})]}),e.jsxs("div",{className:"p-3 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt text-center",children:[e.jsx("div",{className:"text-xl font-bold",children:s.totalCount}),e.jsx("div",{className:"text-[10px] text-muted uppercase",children:"Total Skills"})]})]}),e.jsxs("div",{className:`p-4 rounded-lg border ${c.bg} ${c.border}`,children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:`w-3 h-3 rounded-full ${s.health==="green"?"bg-green-500":s.health==="yellow"?"bg-yellow-500":"bg-red-500"}`}),e.jsxs("div",{children:[e.jsxs("div",{className:`text-sm font-medium ${c.text}`,children:["Session Health: ",s.health.charAt(0).toUpperCase()+s.health.slice(1)]}),e.jsx("div",{className:"text-xs text-muted mt-0.5",children:s.healthMessage})]})]}),s.recommendations.length>0&&e.jsx("div",{className:"mt-3 space-y-1",children:s.recommendations.map((t,a)=>e.jsx("div",{className:"text-xs text-muted",children:t},a))})]}),e.jsxs("div",{className:"p-4 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("h3",{className:"text-xs font-semibold text-muted uppercase",children:"Token Budget"}),e.jsxs("span",{className:"text-xs text-muted",children:[s.activeTokens.toLocaleString()," / 4,000 (",Math.round(s.activeTokens/40),"%)"]})]}),e.jsxs("div",{className:"w-full h-3 rounded-full bg-edge relative",children:[e.jsx("div",{className:"h-full rounded-full absolute top-0 left-0 opacity-20",style:{width:`${Math.min(Math.round(s.totalTokens/40),100)}%`,background:"#6b7280"}}),e.jsx("div",{className:"h-full rounded-full absolute top-0 left-0 transition-all",style:{width:`${Math.min(Math.round(s.activeTokens/40),100)}%`,background:s.health==="red"?"#ef4444":s.health==="yellow"?"#f59e0b":"#10b981"}})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("h3",{className:"text-xs font-semibold text-muted uppercase",children:"Token Breakdown by Skill"}),e.jsx("div",{className:"space-y-1",children:s.breakdown.map(t=>{const a=s.totalTokens>0?Math.round(t.tokens/s.totalTokens*100):0;return e.jsxs("div",{className:`flex items-center gap-3 p-2 rounded-xl border border-edge shadow-sm hover:shadow-md transition-shadow bg-surface-alt ${t.enabled?"":"opacity-40"}`,children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs font-medium truncate",children:t.name}),e.jsx("span",{className:`px-1 py-0.5 rounded text-[9px] ${t.source==="custom"?"bg-purple-500/10 text-purple-500":"bg-blue-500/10 text-blue-500"}`,children:t.source})]}),e.jsx("div",{className:"w-full h-1 rounded-full bg-edge mt-1",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${a}%`,background:t.enabled?"#3b82f6":"#6b7280"}})})]}),e.jsxs("span",{className:"text-[10px] text-muted shrink-0 w-16 text-right",children:[t.tokens.toLocaleString()," tok"]}),t.enabled&&e.jsx("button",{onClick:()=>l(t.name),className:`text-[10px] px-1.5 py-0.5 rounded border shrink-0 cursor-pointer transition-all ${r===t.name?"bg-red-500/10 text-red-400 border-red-500/30 font-medium":"border-edge text-muted hover:text-red-500 hover:border-red-500/50"}`,children:r===t.name?"Sure?":"Disable"})]},t.name)})})]})]})}export{g as ContextTab};