@mcp-graph-workflow/mcp-graph 5.3.0 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/dist/api/router.js +1 -1
  2. package/dist/api/router.js.map +1 -1
  3. package/dist/api/routes/code-graph.js +2 -2
  4. package/dist/api/routes/code-graph.js.map +1 -1
  5. package/dist/api/routes/context.d.ts.map +1 -1
  6. package/dist/api/routes/context.js +75 -0
  7. package/dist/api/routes/context.js.map +1 -1
  8. package/dist/api/routes/folder.js +2 -2
  9. package/dist/api/routes/folder.js.map +1 -1
  10. package/dist/api/routes/skills.d.ts +2 -1
  11. package/dist/api/routes/skills.d.ts.map +1 -1
  12. package/dist/api/routes/skills.js +139 -3
  13. package/dist/api/routes/skills.js.map +1 -1
  14. package/dist/cli/commands/update.d.ts +3 -0
  15. package/dist/cli/commands/update.d.ts.map +1 -0
  16. package/dist/cli/commands/update.js +60 -0
  17. package/dist/cli/commands/update.js.map +1 -0
  18. package/dist/cli/index.js +2 -0
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/core/code/code-indexer.d.ts +2 -2
  21. package/dist/core/code/code-indexer.d.ts.map +1 -1
  22. package/dist/core/code/code-indexer.js +3 -3
  23. package/dist/core/code/code-indexer.js.map +1 -1
  24. package/dist/core/code/code-types.d.ts +1 -1
  25. package/dist/core/code/code-types.d.ts.map +1 -1
  26. package/dist/core/code/ts-analyzer.d.ts +7 -1
  27. package/dist/core/code/ts-analyzer.d.ts.map +1 -1
  28. package/dist/core/code/ts-analyzer.js +105 -72
  29. package/dist/core/code/ts-analyzer.js.map +1 -1
  30. package/dist/core/config/ai-memory-generator.d.ts.map +1 -1
  31. package/dist/core/config/ai-memory-generator.js +78 -7
  32. package/dist/core/config/ai-memory-generator.js.map +1 -1
  33. package/dist/core/events/event-types.d.ts +18 -1
  34. package/dist/core/events/event-types.d.ts.map +1 -1
  35. package/dist/core/graph/graph-types.d.ts +1 -0
  36. package/dist/core/graph/graph-types.d.ts.map +1 -1
  37. package/dist/core/importer/prd-to-graph.d.ts.map +1 -1
  38. package/dist/core/importer/prd-to-graph.js +49 -12
  39. package/dist/core/importer/prd-to-graph.js.map +1 -1
  40. package/dist/core/parser/classify.d.ts +1 -0
  41. package/dist/core/parser/classify.d.ts.map +1 -1
  42. package/dist/core/parser/classify.js +1 -0
  43. package/dist/core/parser/classify.js.map +1 -1
  44. package/dist/core/skills/built-in-skills.d.ts +1 -1
  45. package/dist/core/skills/built-in-skills.d.ts.map +1 -1
  46. package/dist/core/skills/built-in-skills.js +265 -1
  47. package/dist/core/skills/built-in-skills.js.map +1 -1
  48. package/dist/core/skills/self-healing-listener.d.ts +22 -0
  49. package/dist/core/skills/self-healing-listener.d.ts.map +1 -0
  50. package/dist/core/skills/self-healing-listener.js +102 -0
  51. package/dist/core/skills/self-healing-listener.js.map +1 -0
  52. package/dist/core/skills/skill-store.d.ts +14 -0
  53. package/dist/core/skills/skill-store.d.ts.map +1 -0
  54. package/dist/core/skills/skill-store.js +109 -0
  55. package/dist/core/skills/skill-store.js.map +1 -0
  56. package/dist/core/store/migrations.d.ts.map +1 -1
  57. package/dist/core/store/migrations.js +39 -0
  58. package/dist/core/store/migrations.js.map +1 -1
  59. package/dist/core/store/path-resolver.d.ts +38 -0
  60. package/dist/core/store/path-resolver.d.ts.map +1 -0
  61. package/dist/core/store/path-resolver.js +92 -0
  62. package/dist/core/store/path-resolver.js.map +1 -0
  63. package/dist/core/store/sqlite-store.d.ts +21 -0
  64. package/dist/core/store/sqlite-store.d.ts.map +1 -1
  65. package/dist/core/store/sqlite-store.js +109 -40
  66. package/dist/core/store/sqlite-store.js.map +1 -1
  67. package/dist/core/utils/constants.d.ts +10 -0
  68. package/dist/core/utils/constants.d.ts.map +1 -1
  69. package/dist/core/utils/constants.js +12 -0
  70. package/dist/core/utils/constants.js.map +1 -1
  71. package/dist/mcp/init-project.d.ts +14 -0
  72. package/dist/mcp/init-project.d.ts.map +1 -1
  73. package/dist/mcp/init-project.js +140 -36
  74. package/dist/mcp/init-project.js.map +1 -1
  75. package/dist/mcp/lifecycle-wrapper.d.ts +2 -1
  76. package/dist/mcp/lifecycle-wrapper.d.ts.map +1 -1
  77. package/dist/mcp/lifecycle-wrapper.js +20 -1
  78. package/dist/mcp/lifecycle-wrapper.js.map +1 -1
  79. package/dist/mcp/server.js +18 -16
  80. package/dist/mcp/server.js.map +1 -1
  81. package/dist/mcp/tools/add-node.d.ts +3 -0
  82. package/dist/mcp/tools/add-node.d.ts.map +1 -1
  83. package/dist/mcp/tools/add-node.js +7 -3
  84. package/dist/mcp/tools/add-node.js.map +1 -1
  85. package/dist/mcp/tools/delete-node.d.ts +3 -0
  86. package/dist/mcp/tools/delete-node.d.ts.map +1 -1
  87. package/dist/mcp/tools/delete-node.js +7 -3
  88. package/dist/mcp/tools/delete-node.js.map +1 -1
  89. package/dist/mcp/tools/index.d.ts.map +1 -1
  90. package/dist/mcp/tools/index.js +21 -10
  91. package/dist/mcp/tools/index.js.map +1 -1
  92. package/dist/mcp/tools/list-skills.d.ts +1 -2
  93. package/dist/mcp/tools/list-skills.d.ts.map +1 -1
  94. package/dist/mcp/tools/list-skills.js +6 -4
  95. package/dist/mcp/tools/list-skills.js.map +1 -1
  96. package/dist/mcp/tools/manage-skill.d.ts +8 -0
  97. package/dist/mcp/tools/manage-skill.d.ts.map +1 -0
  98. package/dist/mcp/tools/manage-skill.js +202 -0
  99. package/dist/mcp/tools/manage-skill.js.map +1 -0
  100. package/dist/mcp/tools/node.d.ts +9 -0
  101. package/dist/mcp/tools/node.d.ts.map +1 -0
  102. package/dist/mcp/tools/node.js +195 -0
  103. package/dist/mcp/tools/node.js.map +1 -0
  104. package/dist/mcp/tools/update-node.d.ts +3 -0
  105. package/dist/mcp/tools/update-node.d.ts.map +1 -1
  106. package/dist/mcp/tools/update-node.js +7 -3
  107. package/dist/mcp/tools/update-node.js.map +1 -1
  108. package/dist/mcp/tools/validate-ac.d.ts +3 -0
  109. package/dist/mcp/tools/validate-ac.d.ts.map +1 -1
  110. package/dist/mcp/tools/validate-ac.js +6 -2
  111. package/dist/mcp/tools/validate-ac.js.map +1 -1
  112. package/dist/mcp/tools/validate-task.d.ts +3 -0
  113. package/dist/mcp/tools/validate-task.d.ts.map +1 -1
  114. package/dist/mcp/tools/validate-task.js +6 -1
  115. package/dist/mcp/tools/validate-task.js.map +1 -1
  116. package/dist/mcp/tools/validate.d.ts +9 -0
  117. package/dist/mcp/tools/validate.d.ts.map +1 -0
  118. package/dist/mcp/tools/validate.js +70 -0
  119. package/dist/mcp/tools/validate.js.map +1 -0
  120. package/dist/schemas/graph.schema.d.ts +2 -0
  121. package/dist/schemas/graph.schema.d.ts.map +1 -1
  122. package/dist/schemas/graph.schema.js +1 -0
  123. package/dist/schemas/graph.schema.js.map +1 -1
  124. package/dist/schemas/skill.schema.d.ts +57 -0
  125. package/dist/schemas/skill.schema.d.ts.map +1 -0
  126. package/dist/schemas/skill.schema.js +24 -0
  127. package/dist/schemas/skill.schema.js.map +1 -0
  128. package/dist/web/dashboard/dist/assets/{benchmark-tab-B5Sr8Cah.js → benchmark-tab-BW4QxI49.js} +1 -1
  129. package/dist/web/dashboard/dist/assets/context-tab-C5RAlXNW.js +1 -0
  130. package/dist/web/dashboard/dist/assets/{gitnexus-tab-DqmbSdzV.js → gitnexus-tab-BnxxYl2F.js} +1 -1
  131. package/dist/web/dashboard/dist/assets/{graph-tab-BKns5HdW.js → graph-tab-Cv_wQ6Az.js} +1 -1
  132. package/dist/web/dashboard/dist/assets/{graph-utils-BxUWNvsI.js → graph-utils-Ds1zJyD1.js} +1 -1
  133. package/dist/web/dashboard/dist/assets/{index-CZOiKbTP.js → index-BAeZDWWy.js} +11 -11
  134. package/dist/web/dashboard/dist/assets/{index-Dd4vKyDX.js → index-Bic_URMs.js} +1 -1
  135. package/dist/web/dashboard/dist/assets/index-DQqYFXms.css +1 -0
  136. package/dist/web/dashboard/dist/assets/{insights-tab-B1kPckBM.js → insights-tab-U_ATOqPu.js} +1 -1
  137. package/dist/web/dashboard/dist/assets/{logs-tab-BWfsrRlB.js → logs-tab-B8psCXuB.js} +1 -1
  138. package/dist/web/dashboard/dist/assets/{memories-tab-D3zm-1Sq.js → memories-tab-DcWok2by.js} +1 -1
  139. package/dist/web/dashboard/dist/assets/{prd-backlog-tab-DXP4dFP-.js → prd-backlog-tab-CjftveTc.js} +1 -1
  140. package/dist/web/dashboard/dist/assets/skills-tab-Ddp1w4vS.js +1 -0
  141. package/dist/web/dashboard/dist/index.html +2 -2
  142. package/package.json +1 -1
  143. package/dist/web/dashboard/dist/assets/index-xyMN-_UV.css +0 -1
  144. package/dist/web/dashboard/dist/assets/skills-tab-CAlVL80S.js +0 -1
@@ -0,0 +1,70 @@
1
+ /**
2
+ * MCP Tool — validate
3
+ * Consolidated validation tool (task browser validation + AC quality check).
4
+ * Replaces separate validate_task and validate_ac tools.
5
+ */
6
+ import { z } from "zod/v4";
7
+ import { runValidation } from "../../core/capture/validate-runner.js";
8
+ import { KnowledgeStore } from "../../core/store/knowledge-store.js";
9
+ import { indexCapture } from "../../core/rag/capture-indexer.js";
10
+ import { validateAcQuality } from "../../core/analyzer/ac-validator.js";
11
+ import { logger } from "../../core/utils/logger.js";
12
+ export function registerValidate(server, store) {
13
+ server.tool("validate", "Validate tasks: browser-based validation (task) or acceptance criteria quality check (ac)", {
14
+ action: z.enum(["task", "ac"]).describe("Action: 'task' for browser validation, 'ac' for AC quality check"),
15
+ // task params
16
+ url: z.string().url().optional().describe("URL to validate — required for action 'task'"),
17
+ compareUrl: z.string().url().optional().describe("Second URL for A/B comparison (task only)"),
18
+ selector: z.string().optional().describe("CSS selector to scope content extraction (task only)"),
19
+ // shared
20
+ nodeId: z.string().optional().describe("Graph node ID (task: associate validation; ac: validate specific node)"),
21
+ // ac params
22
+ all: z.boolean().optional().describe("Validate all nodes with AC (ac only, default: true if no nodeId)"),
23
+ }, async ({ action, url, compareUrl, selector, nodeId, all }) => {
24
+ logger.debug("tool:validate", { action, nodeId });
25
+ if (action === "task") {
26
+ if (!url) {
27
+ return {
28
+ content: [{ type: "text", text: JSON.stringify({ error: "url is required for task action" }) }],
29
+ isError: true,
30
+ };
31
+ }
32
+ const result = await runValidation(url, { compareUrl, selector });
33
+ // Index captured content into knowledge store
34
+ const knowledgeStore = new KnowledgeStore(store.getDb());
35
+ indexCapture(knowledgeStore, result.primary);
36
+ if (result.comparison) {
37
+ indexCapture(knowledgeStore, result.comparison);
38
+ }
39
+ const response = {
40
+ ok: true,
41
+ url,
42
+ wordCount: result.primary.wordCount,
43
+ title: result.primary.title,
44
+ timestamp: result.timestamp,
45
+ };
46
+ if (nodeId) {
47
+ response.nodeId = nodeId;
48
+ }
49
+ if (result.diff) {
50
+ response.comparison = {
51
+ compareUrl,
52
+ wordCountDelta: result.diff.wordCountDelta,
53
+ lengthDelta: result.diff.lengthDelta,
54
+ };
55
+ }
56
+ logger.info("tool:validate:task:ok", { nodeId, url });
57
+ return {
58
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
59
+ };
60
+ }
61
+ // action === "ac"
62
+ const doc = store.toGraphDocument();
63
+ const report = validateAcQuality(doc, nodeId, all ?? !nodeId);
64
+ logger.info("tool:validate:ac:ok", { nodes: report.nodes.length, score: report.overallScore });
65
+ return {
66
+ content: [{ type: "text", text: JSON.stringify({ ok: true, ...report }, null, 2) }],
67
+ };
68
+ });
69
+ }
70
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/mcp/tools/validate.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export declare const GraphIndexesSchema: z.ZodObject<{
8
8
  export declare const GraphProjectSchema: z.ZodObject<{
9
9
  id: z.ZodString;
10
10
  name: z.ZodString;
11
+ fsPath: z.ZodOptional<z.ZodString>;
11
12
  createdAt: z.ZodString;
12
13
  updatedAt: z.ZodString;
13
14
  }, z.core.$strip>;
@@ -20,6 +21,7 @@ export declare const GraphDocumentSchema: z.ZodObject<{
20
21
  project: z.ZodObject<{
21
22
  id: z.ZodString;
22
23
  name: z.ZodString;
24
+ fsPath: z.ZodOptional<z.ZodString>;
23
25
  createdAt: z.ZodString;
24
26
  updatedAt: z.ZodString;
25
27
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"graph.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/graph.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO9B,CAAC"}
1
+ {"version":3,"file":"graph.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/graph.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;iBAM7B,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO9B,CAAC"}
@@ -10,6 +10,7 @@ export const GraphIndexesSchema = z.object({
10
10
  export const GraphProjectSchema = z.object({
11
11
  id: z.string(),
12
12
  name: z.string(),
13
+ fsPath: z.string().optional(),
13
14
  createdAt: z.string(),
14
15
  updatedAt: z.string(),
15
16
  });
@@ -1 +1 @@
1
- {"version":3,"file":"graph.schema.js","sourceRoot":"","sources":["../../src/schemas/graph.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,kBAAkB;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IAC/B,OAAO,EAAE,kBAAkB;IAC3B,IAAI,EAAE,eAAe;CACtB,CAAC,CAAC"}
1
+ {"version":3,"file":"graph.schema.js","sourceRoot":"","sources":["../../src/schemas/graph.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,kBAAkB;IAC3B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IAC/B,OAAO,EAAE,kBAAkB;IAC3B,IAAI,EAAE,eAAe;CACtB,CAAC,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { z } from "zod/v4";
2
+ export declare const LifecyclePhaseEnum: z.ZodEnum<{
3
+ ANALYZE: "ANALYZE";
4
+ DESIGN: "DESIGN";
5
+ PLAN: "PLAN";
6
+ IMPLEMENT: "IMPLEMENT";
7
+ VALIDATE: "VALIDATE";
8
+ REVIEW: "REVIEW";
9
+ HANDOFF: "HANDOFF";
10
+ LISTENING: "LISTENING";
11
+ }>;
12
+ export declare const SkillPreferenceSchema: z.ZodObject<{
13
+ projectId: z.ZodString;
14
+ skillName: z.ZodString;
15
+ enabled: z.ZodBoolean;
16
+ updatedAt: z.ZodString;
17
+ }, z.core.$strip>;
18
+ export type SkillPreference = z.infer<typeof SkillPreferenceSchema>;
19
+ export declare const CustomSkillInputSchema: z.ZodObject<{
20
+ name: z.ZodString;
21
+ description: z.ZodString;
22
+ category: z.ZodDefault<z.ZodString>;
23
+ phases: z.ZodArray<z.ZodEnum<{
24
+ ANALYZE: "ANALYZE";
25
+ DESIGN: "DESIGN";
26
+ PLAN: "PLAN";
27
+ IMPLEMENT: "IMPLEMENT";
28
+ VALIDATE: "VALIDATE";
29
+ REVIEW: "REVIEW";
30
+ HANDOFF: "HANDOFF";
31
+ LISTENING: "LISTENING";
32
+ }>>;
33
+ instructions: z.ZodString;
34
+ }, z.core.$strip>;
35
+ export type CustomSkillInput = z.infer<typeof CustomSkillInputSchema>;
36
+ export declare const CustomSkillSchema: z.ZodObject<{
37
+ name: z.ZodString;
38
+ description: z.ZodString;
39
+ category: z.ZodDefault<z.ZodString>;
40
+ phases: z.ZodArray<z.ZodEnum<{
41
+ ANALYZE: "ANALYZE";
42
+ DESIGN: "DESIGN";
43
+ PLAN: "PLAN";
44
+ IMPLEMENT: "IMPLEMENT";
45
+ VALIDATE: "VALIDATE";
46
+ REVIEW: "REVIEW";
47
+ HANDOFF: "HANDOFF";
48
+ LISTENING: "LISTENING";
49
+ }>>;
50
+ instructions: z.ZodString;
51
+ id: z.ZodString;
52
+ projectId: z.ZodString;
53
+ createdAt: z.ZodString;
54
+ updatedAt: z.ZodString;
55
+ }, z.core.$strip>;
56
+ export type CustomSkill = z.infer<typeof CustomSkillSchema>;
57
+ //# sourceMappingURL=skill.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/skill.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,eAAO,MAAM,kBAAkB;;;;;;;;;EAE7B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;iBAKhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;iBAMjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;iBAK5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod/v4";
2
+ export const LifecyclePhaseEnum = z.enum([
3
+ "ANALYZE", "DESIGN", "PLAN", "IMPLEMENT", "VALIDATE", "REVIEW", "HANDOFF", "LISTENING",
4
+ ]);
5
+ export const SkillPreferenceSchema = z.object({
6
+ projectId: z.string(),
7
+ skillName: z.string(),
8
+ enabled: z.boolean(),
9
+ updatedAt: z.string(),
10
+ });
11
+ export const CustomSkillInputSchema = z.object({
12
+ name: z.string().min(1).max(100),
13
+ description: z.string().min(1),
14
+ category: z.string().default("know-me"),
15
+ phases: z.array(LifecyclePhaseEnum),
16
+ instructions: z.string().min(1),
17
+ });
18
+ export const CustomSkillSchema = CustomSkillInputSchema.extend({
19
+ id: z.string(),
20
+ projectId: z.string(),
21
+ createdAt: z.string(),
22
+ updatedAt: z.string(),
23
+ });
24
+ //# sourceMappingURL=skill.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.schema.js","sourceRoot":"","sources":["../../src/schemas/skill.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW;CACvF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACnC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAChC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,MAAM,CAAC;IAC7D,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC"}
@@ -1 +1 @@
1
- import{r as u,a as h,j as e}from"./index-CZOiKbTP.js";function v(){const[n,d]=u.useState(null),[m,t]=u.useState(!0),[a,x]=u.useState(null);return u.useEffect(()=>{async function r(){try{const c=await h.request("/benchmark");d(c)}catch(c){x(c instanceof Error?c.message:"Failed to load benchmark data")}finally{t(!1)}}r()},[]),{data:n,loading:m,error:a}}function b(){const{data:n,loading:d,error:m}=v();if(d)return e.jsx("div",{className:"flex items-center justify-center h-full text-[var(--color-text-muted)]",children:"Loading benchmark data..."});if(m)return e.jsxs("div",{className:"flex items-center justify-center h-full text-[var(--color-danger)]",children:["Failed to load: ",m]});if(!n)return e.jsx("div",{});const{tokenEconomy:t,layeredCompression:a,dependencyIntelligence:x,toolTokenUsage:r,formulas:c}=n;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-[var(--color-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-[var(--color-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-[var(--color-accent)]",style:{width:`${Math.min(l.compressionPercent,100)}%`}})}),e.jsxs("span",{className:"text-[var(--color-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(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-[var(--color-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${Math.min(i.tokens/l*100,100)}%`,backgroundColor:i.color}})}),e.jsxs("span",{className:"text-[var(--color-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:"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}/${t.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-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-xs space-y-1","data-testid":"formulas-section",children:Object.entries(c).map(([l,o])=>e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("span",{className:"text-[var(--color-text-muted)] font-mono w-40 shrink-0",children:[l,":"]}),e.jsx("span",{children:o})]},l))})]}),r&&r.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:r.totalCalls.toLocaleString(),label:"Total Calls"}),e.jsx(s,{value:r.totalInputTokens.toLocaleString(),label:"Total Input Tokens"}),e.jsx(s,{value:r.totalOutputTokens.toLocaleString(),label:"Total Output Tokens"})]}),r.perTool.length>0&&(()=>{const l=Math.max(...r.perTool.map(o=>o.totalTokens),1);return e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-medium text-[var(--color-text-muted)] mb-2",children:"Token Usage per Tool"}),e.jsx("div",{className:"space-y-1.5","data-testid":"tool-token-bars",children:r.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-[var(--color-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-[var(--color-accent)]",style:{width:`${Math.min(o.totalTokens/l*100,100)}%`}})}),e.jsxs("span",{className:"text-[var(--color-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:n,label:d}){return e.jsxs("div",{className:"p-3 rounded-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-center","data-testid":"metric-card",children:[e.jsx("div",{className:"text-xl font-bold",children:n}),e.jsx("div",{className:"text-[10px] text-[var(--color-text-muted)] uppercase",children:d})]})}export{b as BenchmarkTab};
1
+ import{r as u,a as h,j as e}from"./index-BAeZDWWy.js";function v(){const[n,d]=u.useState(null),[m,t]=u.useState(!0),[a,x]=u.useState(null);return u.useEffect(()=>{async function r(){try{const c=await h.request("/benchmark");d(c)}catch(c){x(c instanceof Error?c.message:"Failed to load benchmark data")}finally{t(!1)}}r()},[]),{data:n,loading:m,error:a}}function b(){const{data:n,loading:d,error:m}=v();if(d)return e.jsx("div",{className:"flex items-center justify-center h-full text-[var(--color-text-muted)]",children:"Loading benchmark data..."});if(m)return e.jsxs("div",{className:"flex items-center justify-center h-full text-[var(--color-danger)]",children:["Failed to load: ",m]});if(!n)return e.jsx("div",{});const{tokenEconomy:t,layeredCompression:a,dependencyIntelligence:x,toolTokenUsage:r,formulas:c}=n;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-[var(--color-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-[var(--color-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-[var(--color-accent)]",style:{width:`${Math.min(l.compressionPercent,100)}%`}})}),e.jsxs("span",{className:"text-[var(--color-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(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-[var(--color-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${Math.min(i.tokens/l*100,100)}%`,backgroundColor:i.color}})}),e.jsxs("span",{className:"text-[var(--color-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:"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}/${t.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-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-xs space-y-1","data-testid":"formulas-section",children:Object.entries(c).map(([l,o])=>e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("span",{className:"text-[var(--color-text-muted)] font-mono w-40 shrink-0",children:[l,":"]}),e.jsx("span",{children:o})]},l))})]}),r&&r.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:r.totalCalls.toLocaleString(),label:"Total Calls"}),e.jsx(s,{value:r.totalInputTokens.toLocaleString(),label:"Total Input Tokens"}),e.jsx(s,{value:r.totalOutputTokens.toLocaleString(),label:"Total Output Tokens"})]}),r.perTool.length>0&&(()=>{const l=Math.max(...r.perTool.map(o=>o.totalTokens),1);return e.jsxs("div",{children:[e.jsx("h4",{className:"text-xs font-medium text-[var(--color-text-muted)] mb-2",children:"Token Usage per Tool"}),e.jsx("div",{className:"space-y-1.5","data-testid":"tool-token-bars",children:r.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-[var(--color-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full bg-[var(--color-accent)]",style:{width:`${Math.min(o.totalTokens/l*100,100)}%`}})}),e.jsxs("span",{className:"text-[var(--color-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:n,label:d}){return e.jsxs("div",{className:"p-3 rounded-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-center","data-testid":"metric-card",children:[e.jsx("div",{className:"text-xl font-bold",children:n}),e.jsx("div",{className:"text-[10px] text-[var(--color-text-muted)] uppercase",children:d})]})}export{b as BenchmarkTab};
@@ -0,0 +1 @@
1
+ import{r as o,a as x,j as e}from"./index-BAeZDWWy.js";function u(){const[t,n]=o.useState(null),[d,l]=o.useState(!0),[a,c]=o.useState(null),r=o.useCallback(async()=>{l(!0),c(null);try{const s=await x.getContextBudget();n(s)}catch(s){c(s instanceof Error?s.message:"Failed to load context budget")}finally{l(!1)}},[]);return o.useEffect(()=>{r()},[r]),{budget:t,loading:d,error:a,refresh:r}}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 h(){const{budget:t,loading:n,error:d,refresh:l}=u();if(d)return e.jsxs("div",{className:"flex items-center justify-center h-full text-[var(--color-danger)]",children:["Failed to load context budget: ",d]});if(n||!t)return e.jsx("div",{className:"flex items-center justify-center h-full text-[var(--color-text-muted)]",children:"Loading context budget..."});const a=i[t.health]??i.green,c=async r=>{await x.toggleSkill(r,!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-[var(--color-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-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-center",children:[e.jsx("div",{className:"text-xl font-bold",children:t.activeTokens.toLocaleString()}),e.jsx("div",{className:"text-[10px] text-[var(--color-text-muted)] uppercase",children:"Active Tokens"})]}),e.jsxs("div",{className:"p-3 rounded-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-center",children:[e.jsx("div",{className:"text-xl font-bold",children:t.totalTokens.toLocaleString()}),e.jsx("div",{className:"text-[10px] text-[var(--color-text-muted)] uppercase",children:"Total Tokens"})]}),e.jsxs("div",{className:"p-3 rounded-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-center",children:[e.jsx("div",{className:"text-xl font-bold",children:t.activeCount}),e.jsx("div",{className:"text-[10px] text-[var(--color-text-muted)] uppercase",children:"Active Skills"})]}),e.jsxs("div",{className:"p-3 rounded-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] text-center",children:[e.jsx("div",{className:"text-xl font-bold",children:t.totalCount}),e.jsx("div",{className:"text-[10px] text-[var(--color-text-muted)] uppercase",children:"Total Skills"})]})]}),e.jsxs("div",{className:`p-4 rounded-lg border ${a.bg} ${a.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 ${a.text}`,children:["Session Health: ",t.health.charAt(0).toUpperCase()+t.health.slice(1)]}),e.jsx("div",{className:"text-xs text-[var(--color-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((r,s)=>e.jsx("div",{className:"text-xs text-[var(--color-text-muted)]",children:r},s))})]}),e.jsxs("div",{className:"p-4 rounded-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)]",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("h3",{className:"text-xs font-semibold text-[var(--color-text-muted)] uppercase",children:"Token Budget"}),e.jsxs("span",{className:"text-xs text-[var(--color-text-muted)]",children:[t.activeTokens.toLocaleString()," / 4,000 (",Math.round(t.activeTokens/40),"%)"]})]}),e.jsxs("div",{className:"w-full h-3 rounded-full bg-[var(--color-border)] 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-[var(--color-text-muted)] uppercase",children:"Token Breakdown by Skill"}),e.jsx("div",{className:"space-y-1",children:t.breakdown.map(r=>{const s=t.totalTokens>0?Math.round(r.tokens/t.totalTokens*100):0;return e.jsxs("div",{className:`flex items-center gap-3 p-2 rounded-lg bg-[var(--color-bg-secondary)] border border-[var(--color-border)] ${r.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:r.name}),e.jsx("span",{className:`px-1 py-0.5 rounded text-[9px] ${r.source==="custom"?"bg-purple-500/10 text-purple-500":"bg-blue-500/10 text-blue-500"}`,children:r.source})]}),e.jsx("div",{className:"w-full h-1 rounded-full bg-[var(--color-border)] mt-1",children:e.jsx("div",{className:"h-full rounded-full",style:{width:`${s}%`,background:r.enabled?"#3b82f6":"#6b7280"}})})]}),e.jsxs("span",{className:"text-[10px] text-[var(--color-text-muted)] shrink-0 w-16 text-right",children:[r.tokens.toLocaleString()," tok"]}),r.enabled&&e.jsx("button",{onClick:()=>void c(r.name),className:"text-[10px] px-1.5 py-0.5 rounded border border-[var(--color-border)] text-[var(--color-text-muted)] hover:text-red-500 hover:border-red-500/50 shrink-0",children:"Disable"})]},r.name)})})]})]})}export{h as ContextTab};