purecontext-mcp 1.1.7 → 1.2.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 (182) hide show
  1. package/AGENT_INSTRUCTIONS.md +393 -0
  2. package/AGENT_INSTRUCTIONS_SHORT.md +53 -0
  3. package/AST-SEARCH.md +274 -0
  4. package/CHANGELOG.md +62 -0
  5. package/CODE-INTELLIGENCE.md +369 -0
  6. package/HEALTH-DASHBOARDS.md +241 -0
  7. package/README.md +7 -0
  8. package/REFACTORING-SAFELY.md +279 -0
  9. package/UNDERSTANDING-RELATIONSHIPS.md +240 -0
  10. package/USER-GUIDE.md +14 -0
  11. package/VISUALIZING-CODE.md +199 -0
  12. package/WORKFLOW-TECH-DEBT.md +286 -0
  13. package/dist/core/db/dep-store.d.ts +75 -0
  14. package/dist/core/db/dep-store.d.ts.map +1 -1
  15. package/dist/core/db/dep-store.js +277 -0
  16. package/dist/core/db/dep-store.js.map +1 -1
  17. package/dist/core/db/schema.d.ts.map +1 -1
  18. package/dist/core/db/schema.js +12 -0
  19. package/dist/core/db/schema.js.map +1 -1
  20. package/dist/core/index-manager.js +1 -1
  21. package/dist/core/index-manager.js.map +1 -1
  22. package/dist/core/token-tracker.d.ts +0 -9
  23. package/dist/core/token-tracker.d.ts.map +1 -1
  24. package/dist/core/token-tracker.js +0 -21
  25. package/dist/core/token-tracker.js.map +1 -1
  26. package/dist/core/types.d.ts +5 -0
  27. package/dist/core/types.d.ts.map +1 -1
  28. package/dist/graph/diagram-renderer.d.ts +83 -0
  29. package/dist/graph/diagram-renderer.d.ts.map +1 -0
  30. package/dist/graph/diagram-renderer.js +294 -0
  31. package/dist/graph/diagram-renderer.js.map +1 -0
  32. package/dist/graph/graph-traversal.d.ts +92 -0
  33. package/dist/graph/graph-traversal.d.ts.map +1 -1
  34. package/dist/graph/graph-traversal.js +440 -2
  35. package/dist/graph/graph-traversal.js.map +1 -1
  36. package/dist/server/http-server.d.ts.map +1 -1
  37. package/dist/server/http-server.js +30 -1
  38. package/dist/server/http-server.js.map +1 -1
  39. package/dist/server/mcp-server.d.ts.map +1 -1
  40. package/dist/server/mcp-server.js +145 -0
  41. package/dist/server/mcp-server.js.map +1 -1
  42. package/dist/server/tools/_meta.d.ts +0 -2
  43. package/dist/server/tools/_meta.d.ts.map +1 -1
  44. package/dist/server/tools/_meta.js +1 -4
  45. package/dist/server/tools/_meta.js.map +1 -1
  46. package/dist/server/tools/check-delete-safe.d.ts +50 -0
  47. package/dist/server/tools/check-delete-safe.d.ts.map +1 -0
  48. package/dist/server/tools/check-delete-safe.js +308 -0
  49. package/dist/server/tools/check-delete-safe.js.map +1 -0
  50. package/dist/server/tools/check-move-safe.d.ts +44 -0
  51. package/dist/server/tools/check-move-safe.d.ts.map +1 -0
  52. package/dist/server/tools/check-move-safe.js +266 -0
  53. package/dist/server/tools/check-move-safe.js.map +1 -0
  54. package/dist/server/tools/check-rename-safe.d.ts +48 -0
  55. package/dist/server/tools/check-rename-safe.d.ts.map +1 -0
  56. package/dist/server/tools/check-rename-safe.js +218 -0
  57. package/dist/server/tools/check-rename-safe.js.map +1 -0
  58. package/dist/server/tools/diff-health-radar.d.ts +44 -0
  59. package/dist/server/tools/diff-health-radar.d.ts.map +1 -0
  60. package/dist/server/tools/diff-health-radar.js +192 -0
  61. package/dist/server/tools/diff-health-radar.js.map +1 -0
  62. package/dist/server/tools/find-cycles.d.ts +31 -0
  63. package/dist/server/tools/find-cycles.d.ts.map +1 -0
  64. package/dist/server/tools/find-cycles.js +85 -0
  65. package/dist/server/tools/find-cycles.js.map +1 -0
  66. package/dist/server/tools/find-implementations.d.ts +47 -0
  67. package/dist/server/tools/find-implementations.d.ts.map +1 -0
  68. package/dist/server/tools/find-implementations.js +167 -0
  69. package/dist/server/tools/find-implementations.js.map +1 -0
  70. package/dist/server/tools/find-untested-symbols.d.ts +52 -0
  71. package/dist/server/tools/find-untested-symbols.d.ts.map +1 -0
  72. package/dist/server/tools/find-untested-symbols.js +308 -0
  73. package/dist/server/tools/find-untested-symbols.js.map +1 -0
  74. package/dist/server/tools/get-architecture-snapshot.d.ts +43 -0
  75. package/dist/server/tools/get-architecture-snapshot.d.ts.map +1 -0
  76. package/dist/server/tools/get-architecture-snapshot.js +292 -0
  77. package/dist/server/tools/get-architecture-snapshot.js.map +1 -0
  78. package/dist/server/tools/get-call-hierarchy.d.ts +43 -0
  79. package/dist/server/tools/get-call-hierarchy.d.ts.map +1 -0
  80. package/dist/server/tools/get-call-hierarchy.js +119 -0
  81. package/dist/server/tools/get-call-hierarchy.js.map +1 -0
  82. package/dist/server/tools/get-class-hierarchy.d.ts +36 -0
  83. package/dist/server/tools/get-class-hierarchy.d.ts.map +1 -0
  84. package/dist/server/tools/get-class-hierarchy.js +125 -0
  85. package/dist/server/tools/get-class-hierarchy.js.map +1 -0
  86. package/dist/server/tools/get-complexity-hotspots.d.ts +50 -0
  87. package/dist/server/tools/get-complexity-hotspots.d.ts.map +1 -0
  88. package/dist/server/tools/get-complexity-hotspots.js +282 -0
  89. package/dist/server/tools/get-complexity-hotspots.js.map +1 -0
  90. package/dist/server/tools/get-coupling-map.d.ts +39 -0
  91. package/dist/server/tools/get-coupling-map.d.ts.map +1 -0
  92. package/dist/server/tools/get-coupling-map.js +107 -0
  93. package/dist/server/tools/get-coupling-map.js.map +1 -0
  94. package/dist/server/tools/get-debt-report.d.ts +44 -0
  95. package/dist/server/tools/get-debt-report.d.ts.map +1 -0
  96. package/dist/server/tools/get-debt-report.js +606 -0
  97. package/dist/server/tools/get-debt-report.js.map +1 -0
  98. package/dist/server/tools/get-entry-points.d.ts +79 -0
  99. package/dist/server/tools/get-entry-points.d.ts.map +1 -0
  100. package/dist/server/tools/get-entry-points.js +362 -0
  101. package/dist/server/tools/get-entry-points.js.map +1 -0
  102. package/dist/server/tools/get-public-api.d.ts +53 -0
  103. package/dist/server/tools/get-public-api.d.ts.map +1 -0
  104. package/dist/server/tools/get-public-api.js +218 -0
  105. package/dist/server/tools/get-public-api.js.map +1 -0
  106. package/dist/server/tools/get-savings-stats.d.ts.map +1 -1
  107. package/dist/server/tools/get-savings-stats.js +1 -3
  108. package/dist/server/tools/get-savings-stats.js.map +1 -1
  109. package/dist/server/tools/get-test-coverage-map.d.ts +66 -0
  110. package/dist/server/tools/get-test-coverage-map.d.ts.map +1 -0
  111. package/dist/server/tools/get-test-coverage-map.js +588 -0
  112. package/dist/server/tools/get-test-coverage-map.js.map +1 -0
  113. package/dist/server/tools/get-todos.d.ts +51 -0
  114. package/dist/server/tools/get-todos.d.ts.map +1 -0
  115. package/dist/server/tools/get-todos.js +180 -0
  116. package/dist/server/tools/get-todos.js.map +1 -0
  117. package/dist/server/tools/get-type-graph.d.ts +73 -0
  118. package/dist/server/tools/get-type-graph.d.ts.map +1 -0
  119. package/dist/server/tools/get-type-graph.js +437 -0
  120. package/dist/server/tools/get-type-graph.js.map +1 -0
  121. package/dist/server/tools/health-radar.d.ts +50 -0
  122. package/dist/server/tools/health-radar.d.ts.map +1 -0
  123. package/dist/server/tools/health-radar.js +426 -0
  124. package/dist/server/tools/health-radar.js.map +1 -0
  125. package/dist/server/tools/plan-refactoring.d.ts +74 -0
  126. package/dist/server/tools/plan-refactoring.d.ts.map +1 -0
  127. package/dist/server/tools/plan-refactoring.js +644 -0
  128. package/dist/server/tools/plan-refactoring.js.map +1 -0
  129. package/dist/server/tools/render-call-graph.d.ts +40 -0
  130. package/dist/server/tools/render-call-graph.d.ts.map +1 -0
  131. package/dist/server/tools/render-call-graph.js +215 -0
  132. package/dist/server/tools/render-call-graph.js.map +1 -0
  133. package/dist/server/tools/render-class-hierarchy.d.ts +42 -0
  134. package/dist/server/tools/render-class-hierarchy.d.ts.map +1 -0
  135. package/dist/server/tools/render-class-hierarchy.js +265 -0
  136. package/dist/server/tools/render-class-hierarchy.js.map +1 -0
  137. package/dist/server/tools/render-dep-matrix.d.ts +38 -0
  138. package/dist/server/tools/render-dep-matrix.d.ts.map +1 -0
  139. package/dist/server/tools/render-dep-matrix.js +186 -0
  140. package/dist/server/tools/render-dep-matrix.js.map +1 -0
  141. package/dist/server/tools/render-diagram.d.ts +47 -0
  142. package/dist/server/tools/render-diagram.d.ts.map +1 -0
  143. package/dist/server/tools/render-diagram.js +266 -0
  144. package/dist/server/tools/render-diagram.js.map +1 -0
  145. package/dist/server/tools/render-import-graph.d.ts +41 -0
  146. package/dist/server/tools/render-import-graph.d.ts.map +1 -0
  147. package/dist/server/tools/render-import-graph.js +158 -0
  148. package/dist/server/tools/render-import-graph.js.map +1 -0
  149. package/dist/server/tools/search-ast.d.ts +55 -0
  150. package/dist/server/tools/search-ast.d.ts.map +1 -0
  151. package/dist/server/tools/search-ast.js +279 -0
  152. package/dist/server/tools/search-ast.js.map +1 -0
  153. package/dist/server/tools/search-by-complexity.d.ts +92 -0
  154. package/dist/server/tools/search-by-complexity.d.ts.map +1 -0
  155. package/dist/server/tools/search-by-complexity.js +268 -0
  156. package/dist/server/tools/search-by-complexity.js.map +1 -0
  157. package/dist/server/tools/search-by-decorator.d.ts +48 -0
  158. package/dist/server/tools/search-by-decorator.d.ts.map +1 -0
  159. package/dist/server/tools/search-by-decorator.js +518 -0
  160. package/dist/server/tools/search-by-decorator.js.map +1 -0
  161. package/dist/server/tools/search-by-signature.d.ts +56 -0
  162. package/dist/server/tools/search-by-signature.d.ts.map +1 -0
  163. package/dist/server/tools/search-by-signature.js +200 -0
  164. package/dist/server/tools/search-by-signature.js.map +1 -0
  165. package/dist/ui/assets/BlastRadius-QdgESOL8.js +1 -0
  166. package/dist/ui/assets/{DependencyGraph-CDtBHM0U.js → DependencyGraph-BSMhzwWV.js} +6 -6
  167. package/dist/ui/assets/{NotFound-Cdt6X8pl.js → NotFound-CipFP_s1.js} +1 -1
  168. package/dist/ui/assets/RepoDetail-Dfp5z5Kq.js +1 -0
  169. package/dist/ui/assets/{RepoList-B9LaZvob.js → RepoList-BKtST3hB.js} +1 -1
  170. package/dist/ui/assets/{Search-CLqv2KGV.js → Search-DzhGDViy.js} +1 -1
  171. package/dist/ui/assets/{SymbolView-BlbDR1DU.js → SymbolView-ryVEwAHG.js} +1 -1
  172. package/dist/ui/assets/{index-DADf5y_L.css → index-Ny8gn9F0.css} +1 -1
  173. package/dist/ui/assets/{index-i3Q1XbEh.js → index-nX2chMqi.js} +6 -6
  174. package/dist/ui/assets/{useSearch-mbMk6-M1.js → useSearch-BnBCRKui.js} +1 -1
  175. package/dist/ui/index.html +2 -2
  176. package/dist/version.d.ts +1 -1
  177. package/dist/version.js +1 -1
  178. package/docs/dev/jcodemunch-gap-analysis.md +198 -0
  179. package/package.json +9 -1
  180. package/user-manual.md +2466 -0
  181. package/dist/ui/assets/BlastRadius-BDZWhEk-.js +0 -1
  182. package/dist/ui/assets/RepoDetail-M6WaYbZ3.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-refactoring.js","sourceRoot":"","sources":["../../../src/server/tools/plan-refactoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * render-call-graph.ts
3
+ *
4
+ * MCP tool: render_call_graph
5
+ *
6
+ * Render a call graph rooted at a symbol as a Mermaid flowchart or DOT diagram,
7
+ * showing callers and/or callees N levels deep.
8
+ *
9
+ * Builds on `buildCallHierarchy` from Task 174 and the shared rendering functions
10
+ * from diagram-renderer.ts. The root node is styled with a distinct orange fill.
11
+ * Cyclic edges (recursive calls) are rendered as dashed arrows.
12
+ */
13
+ import { z } from 'zod';
14
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
15
+ export declare const name = "render_call_graph";
16
+ export declare const description: string;
17
+ export declare const inputSchema: {
18
+ repoId: z.ZodString;
19
+ symbolId: z.ZodString;
20
+ direction: z.ZodOptional<z.ZodEnum<{
21
+ both: "both";
22
+ callers: "callers";
23
+ callees: "callees";
24
+ }>>;
25
+ maxDepth: z.ZodOptional<z.ZodNumber>;
26
+ maxNodes: z.ZodOptional<z.ZodNumber>;
27
+ format: z.ZodOptional<z.ZodEnum<{
28
+ dot: "dot";
29
+ mermaid: "mermaid";
30
+ }>>;
31
+ };
32
+ export declare function handler(args: {
33
+ repoId: string;
34
+ symbolId: string;
35
+ direction?: 'callers' | 'callees' | 'both';
36
+ maxDepth?: number;
37
+ maxNodes?: number;
38
+ format?: 'mermaid' | 'dot';
39
+ }): Promise<CallToolResult>;
40
+ //# sourceMappingURL=render-call-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-call-graph.d.ts","sourceRoot":"","sources":["../../../src/server/tools/render-call-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,eAAO,MAAM,IAAI,sBAAsB,CAAC;AAExC,eAAO,MAAM,WAAW,QAO2C,CAAC;AAEpE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CA+BvB,CAAC;AAeF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;CAC5B,GAAG,OAAO,CAAC,cAAc,CAAC,CAmF1B"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * render-call-graph.ts
3
+ *
4
+ * MCP tool: render_call_graph
5
+ *
6
+ * Render a call graph rooted at a symbol as a Mermaid flowchart or DOT diagram,
7
+ * showing callers and/or callees N levels deep.
8
+ *
9
+ * Builds on `buildCallHierarchy` from Task 174 and the shared rendering functions
10
+ * from diagram-renderer.ts. The root node is styled with a distinct orange fill.
11
+ * Cyclic edges (recursive calls) are rendered as dashed arrows.
12
+ */
13
+ import { z } from 'zod';
14
+ import { openDatabase, getRepo } from '../../core/db/schema.js';
15
+ import { buildCallHierarchy } from '../../graph/graph-traversal.js';
16
+ import { sanitizeId, shortLabel, parentDir, renderMermaidCallGraph, renderDot, } from '../../graph/diagram-renderer.js';
17
+ import { buildMeta } from './_meta.js';
18
+ export const name = 'render_call_graph';
19
+ export const description = 'Render a call graph rooted at a symbol as a Mermaid flowchart or DOT diagram. ' +
20
+ 'Shows callers and/or callees N levels deep. ' +
21
+ 'The root node is styled distinctly. Recursive/cyclic calls are shown as dashed arrows. ' +
22
+ 'Use direction="callees" to see what a function calls, "callers" to see what calls it, ' +
23
+ 'or "both" for a bidirectional view. ' +
24
+ 'Use search_symbols to find the symbolId first. ' +
25
+ 'Mermaid output renders natively in GitHub, VS Code, and Claude.';
26
+ export const inputSchema = {
27
+ repoId: z.string().describe('Repo ID from index_folder or resolve_repo'),
28
+ symbolId: z
29
+ .string()
30
+ .describe('Symbol ID of the root function or method. Use search_symbols to find it.'),
31
+ direction: z
32
+ .enum(['callers', 'callees', 'both'])
33
+ .optional()
34
+ .describe('"callees" — what this function calls (forward); ' +
35
+ '"callers" — what calls this function (reverse); ' +
36
+ '"both" — bidirectional (default)'),
37
+ maxDepth: z
38
+ .number()
39
+ .int()
40
+ .min(1)
41
+ .max(6)
42
+ .optional()
43
+ .describe('Maximum depth to traverse. Default 3.'),
44
+ maxNodes: z
45
+ .number()
46
+ .int()
47
+ .min(1)
48
+ .max(200)
49
+ .optional()
50
+ .describe('Maximum number of nodes to include. Least-connected nodes are dropped first. Default 25.'),
51
+ format: z
52
+ .enum(['mermaid', 'dot'])
53
+ .optional()
54
+ .describe('Output format. Default "mermaid".'),
55
+ };
56
+ // ─── Handler ──────────────────────────────────────────────────────────────────
57
+ export async function handler(args) {
58
+ const t0 = Date.now();
59
+ const { repoId, symbolId, direction = 'both', maxDepth = 3, maxNodes = 25, format = 'mermaid', } = args;
60
+ const db = openDatabase(repoId);
61
+ try {
62
+ const repo = getRepo(db, repoId);
63
+ if (!repo) {
64
+ return {
65
+ content: [
66
+ {
67
+ type: 'text',
68
+ text: JSON.stringify({
69
+ error: `Repo "${repoId}" not found. Run index_folder first.`,
70
+ }),
71
+ },
72
+ ],
73
+ isError: true,
74
+ };
75
+ }
76
+ // Request more nodes than needed from the traversal so client-side pruning
77
+ // has sufficient candidates. Cap at 500 to avoid excessive work.
78
+ const traversalLimit = Math.min(500, Math.max(50, maxNodes * 10));
79
+ const result = buildCallHierarchy(symbolId, repoId, db, direction, maxDepth, traversalLimit);
80
+ if (!result) {
81
+ return {
82
+ content: [
83
+ {
84
+ type: 'text',
85
+ text: JSON.stringify({
86
+ error: `Symbol "${symbolId}" not found in repo "${repoId}".`,
87
+ }),
88
+ },
89
+ ],
90
+ isError: true,
91
+ };
92
+ }
93
+ const { nodes: rawNodes, edges: rawEdges } = flattenCallTree(result.root, symbolId, direction);
94
+ // Apply maxNodes pruning (keep the root always)
95
+ const { nodes: prunedNodes, edges: prunedEdges, truncated } = pruneGraphKeepingRoot(rawNodes, rawEdges, maxNodes, sanitizeId(symbolId));
96
+ const rootNode = prunedNodes.find((n) => n.styleClass === 'root');
97
+ const rootId = rootNode?.id ?? (prunedNodes[0]?.id ?? '');
98
+ const rootSymbolName = rootNode?.label ?? symbolId;
99
+ let diagram;
100
+ if (format === 'dot') {
101
+ diagram = renderDot(prunedNodes, prunedEdges);
102
+ }
103
+ else {
104
+ diagram = renderMermaidCallGraph(prunedNodes, prunedEdges, rootId);
105
+ }
106
+ const output = {
107
+ diagram,
108
+ rootSymbol: rootSymbolName,
109
+ nodeCount: prunedNodes.length,
110
+ truncated,
111
+ _tokenEstimate: Math.ceil(diagram.length / 4),
112
+ _meta: buildMeta({ timingMs: Date.now() - t0 }),
113
+ };
114
+ return {
115
+ content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
116
+ };
117
+ }
118
+ finally {
119
+ db.close();
120
+ }
121
+ }
122
+ // ─── Call tree flattener ──────────────────────────────────────────────────────
123
+ /**
124
+ * Flatten the call hierarchy tree into nodes + edges for rendering.
125
+ *
126
+ * For 'callees': parent → child edges (root calls children)
127
+ * For 'callers': child → parent edges (children call root)
128
+ * For 'both': mixed — the tree from buildCallHierarchy already encodes direction
129
+ * via the structure (callers appear as children of root with depth < 0
130
+ * conceptually, but the tree structure is consistent regardless)
131
+ */
132
+ function flattenCallTree(root, rootSymbolId, direction) {
133
+ const nodeMap = new Map();
134
+ const edges = [];
135
+ const visited = new Set();
136
+ function walk(node, parentId) {
137
+ const nodeId = sanitizeId(node.symbolId);
138
+ const isRoot = node.symbolId === rootSymbolId;
139
+ if (!nodeMap.has(nodeId)) {
140
+ nodeMap.set(nodeId, {
141
+ id: nodeId,
142
+ label: `${node.name}\n${shortLabel(node.filePath)}`,
143
+ fullPath: node.filePath,
144
+ group: parentDir(node.filePath),
145
+ styleClass: isRoot ? 'root' : undefined,
146
+ });
147
+ }
148
+ if (parentId !== null) {
149
+ const edgeKey = `${parentId}→${nodeId}`;
150
+ if (!visited.has(edgeKey)) {
151
+ visited.add(edgeKey);
152
+ // Direction determines arrow direction:
153
+ // For 'callers': parentId is the caller, nodeId is closer to root → reverse arrow
154
+ // For 'callees': parentId is the callee's parent (root side), nodeId is callee
155
+ // For 'both': use the tree structure as-is (parent → child)
156
+ if (direction === 'callers') {
157
+ // In callers direction: children are callers of their parent
158
+ // So the edge is: child (caller) → parent (callee)
159
+ edges.push({
160
+ source: nodeId,
161
+ target: parentId,
162
+ dashed: node.cyclic,
163
+ });
164
+ }
165
+ else {
166
+ // callees or both: parent → child
167
+ edges.push({
168
+ source: parentId,
169
+ target: nodeId,
170
+ dashed: node.cyclic,
171
+ });
172
+ }
173
+ }
174
+ }
175
+ if (!node.cyclic) {
176
+ for (const child of node.children) {
177
+ walk(child, nodeId);
178
+ }
179
+ }
180
+ }
181
+ walk(root, null);
182
+ return { nodes: Array.from(nodeMap.values()), edges };
183
+ }
184
+ // ─── Pruning with root preservation ──────────────────────────────────────────
185
+ /**
186
+ * Like pruneGraph but guarantees the root node is always retained.
187
+ */
188
+ function pruneGraphKeepingRoot(nodes, edges, maxNodes, rootId) {
189
+ if (nodes.length <= maxNodes) {
190
+ return { nodes, edges, truncated: false };
191
+ }
192
+ // Compute degree
193
+ const degree = new Map();
194
+ for (const n of nodes)
195
+ degree.set(n.id, 0);
196
+ for (const e of edges) {
197
+ degree.set(e.source, (degree.get(e.source) ?? 0) + 1);
198
+ degree.set(e.target, (degree.get(e.target) ?? 0) + 1);
199
+ }
200
+ // Always keep the root; sort rest by degree descending
201
+ const nonRoot = nodes.filter((n) => n.id !== rootId);
202
+ const rootNode = nodes.find((n) => n.id === rootId);
203
+ const sorted = [...nonRoot].sort((a, b) => {
204
+ const diff = (degree.get(b.id) ?? 0) - (degree.get(a.id) ?? 0);
205
+ return diff !== 0 ? diff : a.id.localeCompare(b.id);
206
+ });
207
+ const slots = maxNodes - (rootNode ? 1 : 0);
208
+ const kept = new Set(sorted.slice(0, slots).map((n) => n.id));
209
+ if (rootNode)
210
+ kept.add(rootId);
211
+ const prunedNodes = nodes.filter((n) => kept.has(n.id));
212
+ const prunedEdges = edges.filter((e) => kept.has(e.source) && kept.has(e.target));
213
+ return { nodes: prunedNodes, edges: prunedEdges, truncated: true };
214
+ }
215
+ //# sourceMappingURL=render-call-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-call-graph.js","sourceRoot":"","sources":["../../../src/server/tools/render-call-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * render-class-hierarchy.ts
3
+ *
4
+ * MCP tool: render_class_hierarchy
5
+ *
6
+ * Render a UML-style class hierarchy diagram using Mermaid's `classDiagram`
7
+ * syntax. Builds on `buildClassHierarchy` from Task 175 and the shared
8
+ * rendering functions from diagram-renderer.ts.
9
+ *
10
+ * Edges:
11
+ * `<|--` extends (solid)
12
+ * `<|..` implements (dashed)
13
+ *
14
+ * Member extraction (includeMembers: true):
15
+ * Queries the symbol store for methods in each class's file and renders
16
+ * them inside the class box with access-modifier prefixes (+/-/#).
17
+ */
18
+ import { z } from 'zod';
19
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
20
+ export declare const name = "render_class_hierarchy";
21
+ export declare const description: string;
22
+ export declare const inputSchema: {
23
+ repoId: z.ZodString;
24
+ symbolId: z.ZodString;
25
+ direction: z.ZodOptional<z.ZodEnum<{
26
+ both: "both";
27
+ ancestors: "ancestors";
28
+ descendants: "descendants";
29
+ }>>;
30
+ maxDepth: z.ZodOptional<z.ZodNumber>;
31
+ includeInterfaces: z.ZodOptional<z.ZodBoolean>;
32
+ includeMembers: z.ZodOptional<z.ZodBoolean>;
33
+ };
34
+ export declare function handler(args: {
35
+ repoId: string;
36
+ symbolId: string;
37
+ direction?: 'ancestors' | 'descendants' | 'both';
38
+ maxDepth?: number;
39
+ includeInterfaces?: boolean;
40
+ includeMembers?: boolean;
41
+ }): Promise<CallToolResult>;
42
+ //# sourceMappingURL=render-class-hierarchy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-class-hierarchy.d.ts","sourceRoot":"","sources":["../../../src/server/tools/render-class-hierarchy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAIzE,eAAO,MAAM,IAAI,2BAA2B,CAAC;AAE7C,eAAO,MAAM,WAAW,QAO2C,CAAC;AAEpE,eAAO,MAAM,WAAW;;;;;;;;;;;CAkCvB,CAAC;AAaF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,MAAM,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,cAAc,CAAC,CA2G1B"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * render-class-hierarchy.ts
3
+ *
4
+ * MCP tool: render_class_hierarchy
5
+ *
6
+ * Render a UML-style class hierarchy diagram using Mermaid's `classDiagram`
7
+ * syntax. Builds on `buildClassHierarchy` from Task 175 and the shared
8
+ * rendering functions from diagram-renderer.ts.
9
+ *
10
+ * Edges:
11
+ * `<|--` extends (solid)
12
+ * `<|..` implements (dashed)
13
+ *
14
+ * Member extraction (includeMembers: true):
15
+ * Queries the symbol store for methods in each class's file and renders
16
+ * them inside the class box with access-modifier prefixes (+/-/#).
17
+ */
18
+ import { z } from 'zod';
19
+ import { openDatabase, getRepo } from '../../core/db/schema.js';
20
+ import { getSymbolById, getSymbolsByFile } from '../../core/db/symbol-store.js';
21
+ import { buildClassHierarchy } from '../../graph/graph-traversal.js';
22
+ import { sanitizeId, renderMermaidClassDiagram, } from '../../graph/diagram-renderer.js';
23
+ import { buildMeta } from './_meta.js';
24
+ export const name = 'render_class_hierarchy';
25
+ export const description = 'Render a UML-style class hierarchy diagram using Mermaid classDiagram syntax. ' +
26
+ 'Shows ancestors (extends chain upward) and/or descendants (all subclasses downward). ' +
27
+ 'Extends relationships are drawn with solid arrows (<|--); implements relationships with dashed arrows (<|..). ' +
28
+ 'When includeMembers is true, methods and properties are shown inside each class box with access-modifier prefixes. ' +
29
+ 'External base classes (e.g. Error, EventEmitter) that are not indexed appear as empty leaf nodes. ' +
30
+ 'Use search_symbols to find the symbolId for a class or interface first. ' +
31
+ 'Mermaid output renders natively in GitHub, VS Code, and Claude.';
32
+ export const inputSchema = {
33
+ repoId: z.string().describe('Repo ID from index_folder or resolve_repo'),
34
+ symbolId: z
35
+ .string()
36
+ .describe('Symbol ID of the class or interface to root the diagram at. Use search_symbols to find it.'),
37
+ direction: z
38
+ .enum(['ancestors', 'descendants', 'both'])
39
+ .optional()
40
+ .describe('"ancestors" — draw the extends chain upward; ' +
41
+ '"descendants" — draw all subclasses downward; ' +
42
+ '"both" — full hierarchy (default)'),
43
+ maxDepth: z
44
+ .number()
45
+ .int()
46
+ .min(1)
47
+ .max(10)
48
+ .optional()
49
+ .describe('Maximum traversal depth in each direction (default 5)'),
50
+ includeInterfaces: z
51
+ .boolean()
52
+ .optional()
53
+ .describe('Include implemented interfaces in the ancestor chain and interface ' +
54
+ 'subclasses in descendants (default true)'),
55
+ includeMembers: z
56
+ .boolean()
57
+ .optional()
58
+ .describe('Show methods and properties inside each class box with access-modifier prefixes ' +
59
+ '(+ public, - private, # protected). Default true.'),
60
+ };
61
+ // ─── Handler ──────────────────────────────────────────────────────────────────
62
+ export async function handler(args) {
63
+ const t0 = Date.now();
64
+ const { repoId, symbolId, direction = 'both', maxDepth = 5, includeInterfaces = true, includeMembers = true, } = args;
65
+ const db = openDatabase(repoId);
66
+ try {
67
+ const repo = getRepo(db, repoId);
68
+ if (!repo) {
69
+ return {
70
+ content: [
71
+ {
72
+ type: 'text',
73
+ text: JSON.stringify({
74
+ error: `Repo "${repoId}" not found. Run index_folder first.`,
75
+ }),
76
+ },
77
+ ],
78
+ isError: true,
79
+ };
80
+ }
81
+ const target = getSymbolById(db, repoId, symbolId);
82
+ if (!target) {
83
+ return {
84
+ content: [
85
+ {
86
+ type: 'text',
87
+ text: JSON.stringify({
88
+ error: `Symbol "${symbolId}" not found in repo "${repoId}".`,
89
+ }),
90
+ },
91
+ ],
92
+ isError: true,
93
+ };
94
+ }
95
+ if (target.kind !== 'class' && target.kind !== 'interface') {
96
+ return {
97
+ content: [
98
+ {
99
+ type: 'text',
100
+ text: JSON.stringify({
101
+ error: `Symbol "${target.name}" has kind "${target.kind}". ` +
102
+ 'render_class_hierarchy only works with class or interface symbols.',
103
+ }),
104
+ },
105
+ ],
106
+ isError: true,
107
+ };
108
+ }
109
+ const result = buildClassHierarchy(symbolId, repoId, db, direction, maxDepth, includeInterfaces);
110
+ if (!result) {
111
+ return {
112
+ content: [
113
+ {
114
+ type: 'text',
115
+ text: JSON.stringify({
116
+ error: `Symbol "${symbolId}" not found during hierarchy traversal.`,
117
+ }),
118
+ },
119
+ ],
120
+ isError: true,
121
+ };
122
+ }
123
+ // Flatten the HierarchyNode tree into GraphNode[] + GraphEdge[]
124
+ const { nodes, edges } = flattenHierarchyTree(result.root);
125
+ // Optionally build a memberMap (class node ID → formatted member strings)
126
+ let memberMap;
127
+ if (includeMembers) {
128
+ memberMap = buildMemberMap(nodes, db, repoId);
129
+ }
130
+ const diagram = renderMermaidClassDiagram(nodes, edges, memberMap);
131
+ const output = {
132
+ diagram,
133
+ nodeCount: nodes.length,
134
+ _tokenEstimate: Math.ceil(diagram.length / 4),
135
+ _meta: buildMeta({ timingMs: Date.now() - t0 }),
136
+ };
137
+ return {
138
+ content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
139
+ };
140
+ }
141
+ finally {
142
+ db.close();
143
+ }
144
+ }
145
+ // ─── Tree flattening ──────────────────────────────────────────────────────────
146
+ /**
147
+ * Walk the HierarchyNode tree produced by buildClassHierarchy and collect
148
+ * unique GraphNode/GraphEdge pairs for rendering.
149
+ *
150
+ * Depth semantics:
151
+ * depth 0 = root (the queried class)
152
+ * depth < 0 = ancestor (parent class or implemented interface)
153
+ * depth > 0 = descendant (subclass)
154
+ *
155
+ * Edge direction:
156
+ * - Ancestor child (child.depth < parent.depth):
157
+ * source = parent (subclass), target = child (base class/interface)
158
+ * dashed = child.isInterface (implements → dashed)
159
+ * - Descendant child (child.depth > parent.depth):
160
+ * source = child (subclass), target = parent (base class/interface)
161
+ * dashed = parent.isInterface (implements → dashed)
162
+ */
163
+ function flattenHierarchyTree(root) {
164
+ const nodeMap = new Map();
165
+ const edges = [];
166
+ const edgeSet = new Set();
167
+ function walk(node, parentNode) {
168
+ const nodeId = sanitizeId(node.name);
169
+ if (!nodeMap.has(nodeId)) {
170
+ nodeMap.set(nodeId, {
171
+ id: nodeId,
172
+ label: node.name,
173
+ fullPath: node.filePath ?? '',
174
+ group: '',
175
+ styleClass: node.isInterface ? 'interface' : undefined,
176
+ // Store filePath for member lookup (reusing fullPath field)
177
+ filePath: node.filePath ?? '',
178
+ });
179
+ }
180
+ if (parentNode !== null) {
181
+ const parentId = sanitizeId(parentNode.name);
182
+ let source;
183
+ let target;
184
+ let dashed;
185
+ let label;
186
+ if (node.depth < parentNode.depth) {
187
+ // node is an ancestor of parentNode → parentNode extends/implements node
188
+ source = parentId;
189
+ target = nodeId;
190
+ dashed = node.isInterface;
191
+ label = node.isInterface ? 'implements' : 'extends';
192
+ }
193
+ else {
194
+ // node is a descendant of parentNode → node extends/implements parentNode
195
+ source = nodeId;
196
+ target = parentId;
197
+ dashed = parentNode.isInterface;
198
+ label = parentNode.isInterface ? 'implements' : 'extends';
199
+ }
200
+ const edgeKey = `${source}→${target}`;
201
+ if (!edgeSet.has(edgeKey)) {
202
+ edgeSet.add(edgeKey);
203
+ edges.push({ source, target, dashed, label });
204
+ }
205
+ }
206
+ for (const child of node.children) {
207
+ walk(child, node);
208
+ }
209
+ }
210
+ walk(root, null);
211
+ return { nodes: Array.from(nodeMap.values()), edges };
212
+ }
213
+ // ─── Member extraction ────────────────────────────────────────────────────────
214
+ /**
215
+ * For each node that has a file path, query the symbol store for methods and
216
+ * format them as Mermaid classDiagram member lines.
217
+ *
218
+ * The memberMap key is the sanitized node ID; values are formatted member
219
+ * strings like `+speak() string` or `-validate() boolean`.
220
+ */
221
+ function buildMemberMap(nodes, db, repoId) {
222
+ const memberMap = new Map();
223
+ for (const node of nodes) {
224
+ const filePath = node.filePath ?? node.fullPath;
225
+ if (!filePath)
226
+ continue; // external node — no file to query
227
+ const fileSymbols = getSymbolsByFile(db, repoId, filePath);
228
+ const members = [];
229
+ for (const sym of fileSymbols) {
230
+ if (sym.kind !== 'method' && sym.kind !== 'function')
231
+ continue;
232
+ members.push(formatMember(sym.signature));
233
+ }
234
+ if (members.length > 0) {
235
+ memberMap.set(node.id, members);
236
+ }
237
+ }
238
+ return memberMap;
239
+ }
240
+ /**
241
+ * Convert a TypeScript method signature to a Mermaid classDiagram member line.
242
+ *
243
+ * Input examples:
244
+ * `abstract speak(): string` → `+speak() string`
245
+ * `private validate(): boolean` → `-validate() boolean`
246
+ * `protected helper(): void` → `#helper() void`
247
+ * `static create(): User` → `+create() User`
248
+ *
249
+ * Mermaid classDiagram member format:
250
+ * `{modifier}{name}({params}) ReturnType`
251
+ */
252
+ function formatMember(signature) {
253
+ // Detect access modifier from TypeScript keywords
254
+ let accessMod = '+';
255
+ if (/\bprivate\b/.test(signature))
256
+ accessMod = '-';
257
+ else if (/\bprotected\b/.test(signature))
258
+ accessMod = '#';
259
+ // Strip TypeScript modifier keywords so Mermaid sees a clean declaration
260
+ const cleaned = signature
261
+ .replace(/\b(public|private|protected|static|abstract|async|override|readonly|declare)\b\s*/g, '')
262
+ .trim();
263
+ return `${accessMod}${cleaned}`;
264
+ }
265
+ //# sourceMappingURL=render-class-hierarchy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-class-hierarchy.js","sourceRoot":"","sources":["../../../src/server/tools/render-class-hierarchy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,UAAU,EACV,yBAAyB,GAG1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAKvC,MAAM,CAAC,MAAM,IAAI,GAAG,wBAAwB,CAAC;AAE7C,MAAM,CAAC,MAAM,WAAW,GACtB,gFAAgF;IAChF,uFAAuF;IACvF,gHAAgH;IAChH,qHAAqH;IACrH,oGAAoG;IACpG,0EAA0E;IAC1E,iEAAiE,CAAC;AAEpE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACxE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,4FAA4F,CAAC;IACzG,SAAS,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;SAC1C,QAAQ,EAAE;SACV,QAAQ,CACP,+CAA+C;QAC/C,gDAAgD;QAChD,mCAAmC,CACpC;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACpE,iBAAiB,EAAE,CAAC;SACjB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE;QACrE,0CAA0C,CAC3C;IACH,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,kFAAkF;QAClF,mDAAmD,CACpD;CACJ,CAAC;AAWF,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAO7B;IACC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,MAAM,EAClB,QAAQ,GAAG,CAAC,EACZ,iBAAiB,GAAG,IAAI,EACxB,cAAc,GAAG,IAAI,GACtB,GAAG,IAAI,CAAC;IAET,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,SAAS,MAAM,sCAAsC;yBAC7D,CAAC;qBACH;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,WAAW,QAAQ,wBAAwB,MAAM,IAAI;yBAC7D,CAAC;qBACH;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3D,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EACH,WAAW,MAAM,CAAC,IAAI,eAAe,MAAM,CAAC,IAAI,KAAK;gCACrD,oEAAoE;yBACvE,CAAC;qBACH;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,mBAAmB,CAChC,QAAQ,EACR,MAAM,EACN,EAAE,EACF,SAAS,EACT,QAAQ,EACR,iBAAiB,CAClB,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,WAAW,QAAQ,yCAAyC;yBACpE,CAAC;qBACH;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,gEAAgE;QAChE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE3D,0EAA0E;QAC1E,IAAI,SAA4C,CAAC;QACjD,IAAI,cAAc,EAAE,CAAC;YACnB,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAEnE,MAAM,MAAM,GAA+B;YACzC,OAAO;YACP,SAAS,EAAE,KAAK,CAAC,MAAM;YACvB,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7C,KAAK,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;SAChD,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,oBAAoB,CAAC,IAAmB;IAI/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4C,CAAC;IACpE,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,IAAI,CAAC,IAAmB,EAAE,UAAgC;QACjE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;gBAClB,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;gBAC7B,KAAK,EAAE,EAAE;gBACT,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBACtD,4DAA4D;gBAC5D,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,MAAc,CAAC;YACnB,IAAI,MAAc,CAAC;YACnB,IAAI,MAAe,CAAC;YACpB,IAAI,KAAa,CAAC;YAElB,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;gBAClC,yEAAyE;gBACzE,MAAM,GAAG,QAAQ,CAAC;gBAClB,MAAM,GAAG,MAAM,CAAC;gBAChB,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC1B,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,0EAA0E;gBAC1E,MAAM,GAAG,MAAM,CAAC;gBAChB,MAAM,GAAG,QAAQ,CAAC;gBAClB,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;gBAChC,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5D,CAAC;YAED,MAAM,OAAO,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjB,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AACxD,CAAC;AAED,iFAAiF;AAEjF;;;;;;GAMG;AACH,SAAS,cAAc,CACrB,KAA+C,EAC/C,EAAqB,EACrB,MAAc;IAEd,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAI,IAA0C,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QACvF,IAAI,CAAC,QAAQ;YAAE,SAAS,CAAC,mCAAmC;QAE5D,MAAM,WAAW,GAAG,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;gBAAE,SAAS;YAC/D,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CAAC,SAAiB;IACrC,kDAAkD;IAClD,IAAI,SAAS,GAAG,GAAG,CAAC;IACpB,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,SAAS,GAAG,GAAG,CAAC;SAC9C,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,SAAS,GAAG,GAAG,CAAC;IAE1D,yEAAyE;IACzE,MAAM,OAAO,GAAG,SAAS;SACtB,OAAO,CAAC,oFAAoF,EAAE,EAAE,CAAC;SACjG,IAAI,EAAE,CAAC;IAEV,OAAO,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;AAClC,CAAC"}