@mcp-graph-workflow/mcp-graph 5.19.3 → 5.20.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.
- 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/dist/web/dashboard/dist/assets/{benchmark-tab-BWbrm3fF.js → benchmark-tab-BxKC16Rh.js} +1 -1
- package/dist/web/dashboard/dist/assets/{context-tab-CD1pqDb2.js → context-tab-CyTA0xHn.js} +1 -1
- package/dist/web/dashboard/dist/assets/{gitnexus-tab-DWfMYYIO.js → gitnexus-tab-Caz7v7Mn.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-section-ByabPxrl.js → graph-section-B2T_NMja.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-tab-Bd2SQl25.js → graph-tab-H8UjUBJg.js} +1 -1
- package/dist/web/dashboard/dist/assets/{graph-utils-C3ZvD-eu.js → graph-utils-CpifDP5W.js} +1 -1
- package/dist/web/dashboard/dist/assets/{index-LPQ6gwAy.js → index-BPPSD6wP.js} +1 -1
- package/dist/web/dashboard/dist/assets/{index-CLbo-4nU.js → index-C9AGF8Ai.js} +1 -1
- package/dist/web/dashboard/dist/assets/{index-DknXi6Cq.js → index-CW7bjrwy.js} +2 -2
- package/dist/web/dashboard/dist/assets/{index-jxbHgBUe.css → index-DDQD2WTj.css} +1 -1
- package/dist/web/dashboard/dist/assets/{insights-tab-Kqy1BThw.js → insights-tab-8XuKAe-4.js} +1 -1
- package/dist/web/dashboard/dist/assets/{journey-tab-CjfOzBFl.js → journey-tab-L-g_jwf1.js} +1 -1
- package/dist/web/dashboard/dist/assets/{languages-tab-BsE3pPKO.js → languages-tab-171i5Bxw.js} +14 -14
- package/dist/web/dashboard/dist/assets/{logs-tab-D9XtpaKf.js → logs-tab-Y5DvtoGU.js} +1 -1
- package/dist/web/dashboard/dist/assets/{lsp-tab-DN-wImxK.js → lsp-tab-Dprc5zKc.js} +1 -1
- package/dist/web/dashboard/dist/assets/{memories-tab-C9CgvCRH.js → memories-tab-DvgKhmWu.js} +1 -1
- package/dist/web/dashboard/dist/assets/{prd-backlog-tab-BOFkQdFu.js → prd-backlog-tab-OHV_0-dF.js} +1 -1
- package/dist/web/dashboard/dist/assets/{siebel-tab-BVSi4Va2.js → siebel-tab-Bkeox_-_.js} +3 -3
- package/dist/web/dashboard/dist/assets/{skills-tab-DJpG9cOQ.js → skills-tab-DCHjQiA2.js} +1 -1
- package/dist/web/dashboard/dist/assets/{style-FoeO1y9E.js → style-Cca8j3c-.js} +1 -1
- package/dist/web/dashboard/dist/assets/{triangle-alert-B0LFw3Ht.js → triangle-alert-uww45pBS.js} +1 -1
- package/dist/web/dashboard/dist/index.html +2 -2
- package/package.json +7 -5
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Validators — syntax validation for translated code.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript: uses ts.createSourceFile to parse and detect syntax errors.
|
|
5
|
+
* Python: uses heuristic checks (indentation, brackets, colons, keywords).
|
|
6
|
+
*
|
|
7
|
+
* No external dependencies — all local analysis.
|
|
8
|
+
*/
|
|
9
|
+
export interface ValidationError {
|
|
10
|
+
line: number;
|
|
11
|
+
column?: number;
|
|
12
|
+
message: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ValidationResult {
|
|
15
|
+
valid: boolean;
|
|
16
|
+
language: string;
|
|
17
|
+
errors: ValidationError[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Validate TypeScript code by parsing with the TS compiler.
|
|
21
|
+
* Detects syntax errors (not type errors — no type-checker).
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateTypescript(code: string): ValidationResult;
|
|
24
|
+
/**
|
|
25
|
+
* Validate Python code using heuristic checks.
|
|
26
|
+
* Checks: indentation consistency, bracket matching, colon placement,
|
|
27
|
+
* basic keyword structure.
|
|
28
|
+
*/
|
|
29
|
+
export declare function validatePython(code: string): ValidationResult;
|
|
30
|
+
//# sourceMappingURL=code-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-validator.d.ts","sourceRoot":"","sources":["../../../../src/core/translation/validators/code-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA6BjE;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAqB7D"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Validators — syntax validation for translated code.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript: uses ts.createSourceFile to parse and detect syntax errors.
|
|
5
|
+
* Python: uses heuristic checks (indentation, brackets, colons, keywords).
|
|
6
|
+
*
|
|
7
|
+
* No external dependencies — all local analysis.
|
|
8
|
+
*/
|
|
9
|
+
import ts from "typescript";
|
|
10
|
+
// ── TypeScript Validator ───────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* Validate TypeScript code by parsing with the TS compiler.
|
|
13
|
+
* Detects syntax errors (not type errors — no type-checker).
|
|
14
|
+
*/
|
|
15
|
+
export function validateTypescript(code) {
|
|
16
|
+
const sourceFile = ts.createSourceFile("validation.ts", code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
17
|
+
const errors = [];
|
|
18
|
+
// Access internal parseDiagnostics (not public API — may change in future TS versions).
|
|
19
|
+
// The public alternative ts.getPreEmitDiagnostics() requires a Program, which is heavier.
|
|
20
|
+
const diagnostics = sourceFile.parseDiagnostics ?? [];
|
|
21
|
+
for (const diag of diagnostics) {
|
|
22
|
+
const pos = sourceFile.getLineAndCharacterOfPosition(diag.start ?? 0);
|
|
23
|
+
errors.push({
|
|
24
|
+
line: pos.line + 1,
|
|
25
|
+
column: pos.character + 1,
|
|
26
|
+
message: ts.flattenDiagnosticMessageText(diag.messageText, "\n"),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
valid: errors.length === 0,
|
|
31
|
+
language: "typescript",
|
|
32
|
+
errors,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// ── Python Validator ───────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* Validate Python code using heuristic checks.
|
|
38
|
+
* Checks: indentation consistency, bracket matching, colon placement,
|
|
39
|
+
* basic keyword structure.
|
|
40
|
+
*/
|
|
41
|
+
export function validatePython(code) {
|
|
42
|
+
const errors = [];
|
|
43
|
+
const lines = code.split("\n");
|
|
44
|
+
// Check bracket/paren matching
|
|
45
|
+
const bracketErrors = checkBracketMatching(lines);
|
|
46
|
+
errors.push(...bracketErrors);
|
|
47
|
+
// Check indentation after colon-terminated lines
|
|
48
|
+
const indentErrors = checkPythonIndentation(lines);
|
|
49
|
+
errors.push(...indentErrors);
|
|
50
|
+
// Check colon placement on def/class/if/for/while/try/except/with
|
|
51
|
+
const colonErrors = checkColonPlacement(lines);
|
|
52
|
+
errors.push(...colonErrors);
|
|
53
|
+
return {
|
|
54
|
+
valid: errors.length === 0,
|
|
55
|
+
language: "python",
|
|
56
|
+
errors,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// ── Python Heuristic Helpers ───────────────────────
|
|
60
|
+
function checkBracketMatching(lines) {
|
|
61
|
+
const errors = [];
|
|
62
|
+
const stack = [];
|
|
63
|
+
const openers = { "(": ")", "[": "]", "{": "}" };
|
|
64
|
+
const closers = { ")": "(", "]": "[", "}": "{" };
|
|
65
|
+
for (let i = 0; i < lines.length; i++) {
|
|
66
|
+
const line = lines[i];
|
|
67
|
+
// Skip strings (simplified — doesn't handle all edge cases)
|
|
68
|
+
let inString = false;
|
|
69
|
+
let stringChar = "";
|
|
70
|
+
for (let j = 0; j < line.length; j++) {
|
|
71
|
+
const ch = line[j];
|
|
72
|
+
if (!inString && (ch === "'" || ch === '"')) {
|
|
73
|
+
inString = true;
|
|
74
|
+
stringChar = ch;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (inString && ch === stringChar) {
|
|
78
|
+
inString = false;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (inString || ch === "#")
|
|
82
|
+
break; // comment — skip rest of line
|
|
83
|
+
if (openers[ch]) {
|
|
84
|
+
stack.push({ char: ch, line: i + 1 });
|
|
85
|
+
}
|
|
86
|
+
else if (closers[ch]) {
|
|
87
|
+
if (stack.length === 0 || stack[stack.length - 1].char !== closers[ch]) {
|
|
88
|
+
errors.push({ line: i + 1, message: `Unmatched '${ch}'` });
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
stack.pop();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
for (const item of stack) {
|
|
97
|
+
errors.push({ line: item.line, message: `Unmatched '${item.char}'` });
|
|
98
|
+
}
|
|
99
|
+
return errors;
|
|
100
|
+
}
|
|
101
|
+
function checkPythonIndentation(lines) {
|
|
102
|
+
const errors = [];
|
|
103
|
+
const blockKeywords = /^\s*(def |class |if |elif |else:|for |while |try:|except |finally:|with |async def |async for |async with )/;
|
|
104
|
+
for (let i = 0; i < lines.length - 1; i++) {
|
|
105
|
+
const line = lines[i];
|
|
106
|
+
const trimmed = line.trimStart();
|
|
107
|
+
// Skip empty lines and comments
|
|
108
|
+
if (trimmed === "" || trimmed.startsWith("#"))
|
|
109
|
+
continue;
|
|
110
|
+
// If line ends with colon (block opener), next non-empty line must be indented more
|
|
111
|
+
if (trimmed.endsWith(":") && blockKeywords.test(line)) {
|
|
112
|
+
const currentIndent = line.length - trimmed.length;
|
|
113
|
+
const nextLine = findNextNonEmptyLine(lines, i + 1);
|
|
114
|
+
if (nextLine !== null) {
|
|
115
|
+
const nextTrimmed = lines[nextLine].trimStart();
|
|
116
|
+
const nextIndent = lines[nextLine].length - nextTrimmed.length;
|
|
117
|
+
if (nextIndent <= currentIndent && nextTrimmed !== "" && !nextTrimmed.startsWith("#")) {
|
|
118
|
+
errors.push({
|
|
119
|
+
line: nextLine + 1,
|
|
120
|
+
message: `Expected indented block after '${trimmed.slice(0, 30)}'`,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return errors;
|
|
127
|
+
}
|
|
128
|
+
function checkColonPlacement(lines) {
|
|
129
|
+
const errors = [];
|
|
130
|
+
const needsColon = /^\s*(def |class |if |elif |else|for |while |try|except |finally|with |async def |async for |async with )/;
|
|
131
|
+
for (let i = 0; i < lines.length; i++) {
|
|
132
|
+
const line = lines[i];
|
|
133
|
+
const trimmed = line.trimStart();
|
|
134
|
+
if (trimmed === "" || trimmed.startsWith("#"))
|
|
135
|
+
continue;
|
|
136
|
+
if (needsColon.test(line)) {
|
|
137
|
+
// These keywords need a colon at end of line (or before comment)
|
|
138
|
+
const withoutComment = trimmed.split("#")[0].trimEnd();
|
|
139
|
+
if (!withoutComment.endsWith(":") && !withoutComment.endsWith(":\\")) {
|
|
140
|
+
// Allow multi-line (line ending with \ or open bracket)
|
|
141
|
+
if (!withoutComment.endsWith("\\") && !withoutComment.endsWith(",") && !withoutComment.endsWith("(")) {
|
|
142
|
+
errors.push({
|
|
143
|
+
line: i + 1,
|
|
144
|
+
message: `Expected ':' at end of '${trimmed.slice(0, 40)}'`,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return errors;
|
|
151
|
+
}
|
|
152
|
+
function findNextNonEmptyLine(lines, start) {
|
|
153
|
+
for (let i = start; i < lines.length; i++) {
|
|
154
|
+
if (lines[i].trim() !== "")
|
|
155
|
+
return i;
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=code-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-validator.js","sourceRoot":"","sources":["../../../../src/core/translation/validators/code-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAgB5B,sDAAsD;AAEtD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,eAAe,EACf,IAAI,EACJ,EAAE,CAAC,YAAY,CAAC,MAAM,EACtB,IAAI,EACJ,EAAE,CAAC,UAAU,CAAC,EAAE,CACjB,CAAC;IAEF,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,wFAAwF;IACxF,0FAA0F;IAC1F,MAAM,WAAW,GAAI,UAA4E,CAAC,gBAAgB,IAAI,EAAE,CAAC;IAEzH,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,UAAU,CAAC,6BAA6B,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;YAClB,MAAM,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC;YACzB,OAAO,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;SACjE,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,QAAQ,EAAE,YAAY;QACtB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,sDAAsD;AAEtD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,+BAA+B;IAC/B,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE9B,iDAAiD;IACjD,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAE7B,kEAAkE;IAClE,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAE5B,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,QAAQ,EAAE,QAAQ;QAClB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,sDAAsD;AAEtD,SAAS,oBAAoB,CAAC,KAAe;IAC3C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,KAAK,GAA0C,EAAE,CAAC;IACxD,MAAM,OAAO,GAA2B,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACzE,MAAM,OAAO,GAA2B,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,4DAA4D;QAC5D,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEnB,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC5C,QAAQ,GAAG,IAAI,CAAC;gBAChB,UAAU,GAAG,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;gBAClC,QAAQ,GAAG,KAAK,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,IAAI,EAAE,KAAK,GAAG;gBAAE,MAAM,CAAC,8BAA8B;YAEjE,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;oBACvE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,GAAG,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAe;IAC7C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,6GAA6G,CAAC;IAEpI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjC,gCAAgC;QAChC,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAExD,oFAAoF;QACpF,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;gBAChD,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;gBAC/D,IAAI,UAAU,IAAI,aAAa,IAAI,WAAW,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtF,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,QAAQ,GAAG,CAAC;wBAClB,OAAO,EAAE,kCAAkC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;qBACnE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAe;IAC1C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,0GAA0G,CAAC;IAE9H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjC,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAExD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,iEAAiE;YACjE,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACvD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrE,wDAAwD;gBACxD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrG,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,OAAO,EAAE,2BAA2B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;qBAC5D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe,EAAE,KAAa;IAC1D,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/web/dashboard/dist/assets/{benchmark-tab-BWbrm3fF.js → benchmark-tab-BxKC16Rh.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as u,a as h,j as e}from"./index-
|
|
1
|
+
import{r as u,a as h,j as e}from"./index-CW7bjrwy.js";function v(){const[r,d]=u.useState(null),[x,t]=u.useState(!0),[a,m]=u.useState(null);return u.useEffect(()=>{async function n(){try{const i=await h.request("/benchmark");d(i)}catch(i){m(i instanceof Error?i.message:"Failed to load benchmark data")}finally{t(!1)}}n()},[]),{data:r,loading:x,error:a}}function j(){const{data:r,loading:d,error:x}=v();if(d)return e.jsx("div",{className:"flex items-center justify-center h-full text-muted",children:"Loading benchmark data..."});if(x)return e.jsxs("div",{className:"flex items-center justify-center h-full text-danger",children:["Failed to load: ",x]});if(!r)return e.jsx("div",{});const{tokenEconomy:t,layeredCompression:a,dependencyIntelligence:m,toolTokenUsage:n,formulas:i}=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-4 gap-3 mb-4",children:[e.jsx(s,{value:`${t.avgCompressionPercent}%`,label:"Avg Compress"}),e.jsx(s,{value:t.sampleSize>0?Math.round(t.totalTokensSaved/t.sampleSize).toLocaleString():"0",label:"Tokens Saved/Task"}),e.jsx(s,{value:t.totalNodes,label:"Nodes"}),e.jsx(s,{value:t.totalEdges,label:"Edges"})]}),t.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:t.perTaskMetrics.slice(0,15).map(l=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate",title:l.title,children:l.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(l.compressionPercent,100)}%`}})}),e.jsxs("span",{className:"text-muted w-24 text-right",children:[l.compressionPercent,"% (",l.estimatedTokens," tok)"]})]},l.id))})]})]}),a&&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:`${a.avgLayer1SavingsPercent}%`,label:"L1: Field Strip"}),e.jsx(s,{value:`${a.avgLayer2SavingsPercent}%`,label:"L2: Desc Truncate"}),e.jsx(s,{value:`${a.avgLayer3SavingsPercent}%`,label:"L3: Default Omit"}),e.jsx(s,{value:`${a.avgLayer4SavingsPercent}%`,label:"L4: Short Keys"}),e.jsx(s,{value:`${a.avgTotalRealSavingsPercent}%`,label:"Total Real Savings"})]}),(()=>{const l=Math.max(a.avgNaiveNeighborhoodTokens,1),o=[{label:"Naive Neighborhood",tokens:a.avgNaiveNeighborhoodTokens,color:"#ef4444"},{label:"L1: Field Stripping",tokens:a.avgCompactContextTokens,color:"#f97316"},{label:"L2: Desc Truncation",tokens:a.avgNeighborTruncatedTokens,color:"#eab308"},{label:"L3: Default Omission",tokens:a.avgDefaultOmittedTokens,color:"#22c55e"},{label:"L4: Short Keys",tokens:a.avgShortKeysTokens,color:"#3b82f6"},{label:"Summary Tier",tokens:a.avgSummaryTierTokens,color:"#8b5cf6"}];return e.jsx("div",{className:"space-y-1.5","data-testid":"waterfall-bars",children:o.map(c=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-40 truncate",title:c.label,children:c.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(c.tokens/l*100,100)}%`,backgroundColor:c.color}})}),e.jsxs("span",{className:"text-muted w-20 text-right",children:[c.tokens.toLocaleString()," tok"]})]},c.label))})})()]}),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:m.inferredDeps,label:"Auto Inferred"}),e.jsx(s,{value:`${m.blockedTasks}/${t.totalNodes}`,label:"Blocked Detected"}),e.jsx(s,{value:m.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(i).map(([l,o])=>e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("span",{className:"text-muted font-mono w-40 shrink-0",children:[l,":"]}),e.jsx("span",{children:o})]},l))})]}),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 l=Math.max(...n.perTool.map(o=>o.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(o=>e.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[e.jsx("span",{className:"w-32 truncate font-mono",title:o.toolName,children:o.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(o.totalTokens/l*100,100)}%`}})}),e.jsxs("span",{className:"text-muted w-32 text-right",children:[o.callCount," calls, ",o.totalTokens.toLocaleString()," tok"]})]},o.toolName))})]})})()]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-sm font-semibold mb-3",children:"Cost Savings per Task"}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsx(s,{value:`$${t.costSavings.opusPerTask.toFixed(3)}`,label:"Opus Input"}),e.jsx(s,{value:`$${t.costSavings.sonnetPerTask.toFixed(3)}`,label:"Sonnet Input"})]})]})]})}function s({value:r,label:d}){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:d})]})}export{j as BenchmarkTab};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r,a as x,j as e}from"./index-
|
|
1
|
+
import{r,a as x,j as e}from"./index-CW7bjrwy.js";function h(){const[t,c]=r.useState(null),[o,l]=r.useState(!0),[d,n]=r.useState(null),s=r.useCallback(async()=>{l(!0),n(null);try{const a=await x.getContextBudget();c(a)}catch(a){n(a instanceof Error?a.message:"Failed to load context budget")}finally{l(!1)}},[]);return r.useEffect(()=>{s()},[s]),{budget:t,loading:o,error:d,refresh:s}}const i={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 m(){const{budget:t,loading:c,error:o,refresh:l}=h();if(o)return e.jsxs("div",{className:"flex items-center justify-center h-full text-danger",children:["Failed to load context budget: ",o]});if(c||!t)return e.jsx("div",{className:"flex items-center justify-center h-full text-muted",children:"Loading context budget..."});const d=i[t.health]??i.green,n=async s=>{await x.toggleSkill(s,!1),l()};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:()=>l(),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:t.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:t.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:t.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:t.totalCount}),e.jsx("div",{className:"text-[10px] text-muted uppercase",children:"Total Skills"})]})]}),e.jsxs("div",{className:`p-4 rounded-lg border ${d.bg} ${d.border}`,children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:`w-3 h-3 rounded-full ${t.health==="green"?"bg-green-500":t.health==="yellow"?"bg-yellow-500":"bg-red-500"}`}),e.jsxs("div",{children:[e.jsxs("div",{className:`text-sm font-medium ${d.text}`,children:["Session Health: ",t.health.charAt(0).toUpperCase()+t.health.slice(1)]}),e.jsx("div",{className:"text-xs text-muted mt-0.5",children:t.healthMessage})]})]}),t.recommendations.length>0&&e.jsx("div",{className:"mt-3 space-y-1",children:t.recommendations.map((s,a)=>e.jsx("div",{className:"text-xs text-muted",children:s},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:[t.activeTokens.toLocaleString()," / 4,000 (",Math.round(t.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(t.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(t.activeTokens/40),100)}%`,background:t.health==="red"?"#ef4444":t.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:t.breakdown.map(s=>{const a=t.totalTokens>0?Math.round(s.tokens/t.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 ${s.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:s.name}),e.jsx("span",{className:`px-1 py-0.5 rounded text-[9px] ${s.source==="custom"?"bg-purple-500/10 text-purple-500":"bg-blue-500/10 text-blue-500"}`,children:s.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:s.enabled?"#3b82f6":"#6b7280"}})})]}),e.jsxs("span",{className:"text-[10px] text-muted shrink-0 w-16 text-right",children:[s.tokens.toLocaleString()," tok"]}),s.enabled&&e.jsx("button",{onClick:()=>void n(s.name),className:"text-[10px] px-1.5 py-0.5 rounded border border-edge text-muted hover:text-red-500 hover:border-red-500/50 shrink-0",children:"Disable"})]},s.name)})})]})]})}export{m as ContextTab};
|