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":"get-todos.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-todos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,eAAO,MAAM,IAAI,cAAc,CAAC;AAEhC,eAAO,MAAM,WAAW,QAUgD,CAAC;AAEzE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;CA+BvB,CAAC;AAIF,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgJ1B"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * get-todos.ts
3
+ *
4
+ * MCP tool: get_todos
5
+ *
6
+ * Scans indexed file content for TODO/FIXME/HACK/NOTE/OPTIMIZE/BUG/XXX
7
+ * comment tags. Returns each occurrence with its file path, line number,
8
+ * tag type, optional assignee (e.g. TODO(alice):), and the comment text.
9
+ *
10
+ * Designed for:
11
+ * - Tracking outstanding work items embedded in source code
12
+ * - Generating a tech-debt inventory from comment annotations
13
+ * - Finding all FIXMEs before a release cutoff
14
+ * - Auditing comment hygiene across a codebase
15
+ */
16
+ import { z } from 'zod';
17
+ import { openDatabase, getRepo } from '../../core/db/schema.js';
18
+ import { getAllFilesWithContent } from '../../core/db/file-store.js';
19
+ import { buildMeta } from './_meta.js';
20
+ export const name = 'get_todos';
21
+ export const description = 'Scan all indexed source files for TODO/FIXME/HACK/NOTE/OPTIMIZE/BUG/XXX comment tags. ' +
22
+ 'Returns each occurrence with file path, line number, tag type, optional assignee ' +
23
+ '(e.g. TODO(alice):), and the comment text. ' +
24
+ 'Use this to generate a tech-debt inventory, find all FIXMEs before a release, or ' +
25
+ 'audit comment hygiene across a codebase. ' +
26
+ 'Supports filtering by tag type, assignee name, and file path.' +
27
+ '\n\nRelated tools:' +
28
+ '\n get_debt_report — structured tech-debt metrics including comment-based debt' +
29
+ '\n get_complexity_hotspots — identify complex symbols that may have hidden TODOs' +
30
+ '\n search_text — free-form text search across file content';
31
+ export const inputSchema = {
32
+ repoId: z.string().describe('Repository ID returned by index_folder or list_repos'),
33
+ tags: z
34
+ .array(z.enum(['TODO', 'FIXME', 'HACK', 'NOTE', 'OPTIMIZE', 'BUG', 'XXX']))
35
+ .optional()
36
+ .describe('Tag types to scan for. Defaults to all seven tags: ' +
37
+ 'TODO, FIXME, HACK, NOTE, OPTIMIZE, BUG, XXX.'),
38
+ filePath: z
39
+ .string()
40
+ .optional()
41
+ .describe('Restrict to a specific file path or directory prefix ' +
42
+ '(e.g. "src/services/" returns todos from that subtree only)'),
43
+ assignee: z
44
+ .string()
45
+ .optional()
46
+ .describe('Filter by assignee name. Matches "TODO(alice)" when assignee="alice". ' +
47
+ 'Case-insensitive.'),
48
+ groupByFile: z
49
+ .boolean()
50
+ .optional()
51
+ .describe('Group results by file (default true). Set false for a flat sorted list.'),
52
+ limit: z
53
+ .number().int().positive()
54
+ .optional()
55
+ .describe('Maximum number of todo items to return (default 200)'),
56
+ };
57
+ const ALL_TAGS = ['TODO', 'FIXME', 'HACK', 'NOTE', 'OPTIMIZE', 'BUG', 'XXX'];
58
+ // ─── Handler ──────────────────────────────────────────────────────────────────
59
+ export async function handler(args) {
60
+ const t0 = Date.now();
61
+ const { repoId, groupByFile = true, limit = 200, } = args;
62
+ const db = openDatabase(repoId);
63
+ try {
64
+ // ── Validate repo exists ───────────────────────────────────────────────────
65
+ const repo = getRepo(db, repoId);
66
+ if (!repo) {
67
+ return {
68
+ content: [{
69
+ type: 'text',
70
+ text: JSON.stringify({ error: `Repo "${repoId}" not found. Run index_folder first.` }),
71
+ }],
72
+ isError: true,
73
+ };
74
+ }
75
+ // ── Build tag regex ────────────────────────────────────────────────────────
76
+ const activeTags = (args.tags && args.tags.length > 0)
77
+ ? args.tags.map((t) => t.toUpperCase())
78
+ : [...ALL_TAGS];
79
+ const tagAlternation = activeTags.join('|');
80
+ // Matches: TODO, TODO:, TODO(alice), TODO(alice):
81
+ // Group 1 = tag, Group 2 = assignee (optional), Group 3 = trailing text
82
+ const pattern = new RegExp(`\\b(${tagAlternation})\\b(?:\\(([^)]+)\\))?[:\\s]*(.*)`, 'i');
83
+ // ── Load and scan files ────────────────────────────────────────────────────
84
+ const files = getAllFilesWithContent(db, repoId);
85
+ const todos = [];
86
+ let rawBytes = 0;
87
+ let truncated = false;
88
+ for (const file of files) {
89
+ if (!file.rawContent)
90
+ continue;
91
+ // Apply file path filter
92
+ if (args.filePath) {
93
+ const fp = file.path;
94
+ if (fp !== args.filePath && !fp.startsWith(args.filePath)) {
95
+ continue;
96
+ }
97
+ }
98
+ rawBytes += file.rawContent.length;
99
+ const text = file.rawContent.toString('utf8');
100
+ const lines = text.split('\n');
101
+ for (let i = 0; i < lines.length; i++) {
102
+ const line = lines[i];
103
+ const m = pattern.exec(line);
104
+ if (!m)
105
+ continue;
106
+ const tag = m[1].toUpperCase();
107
+ const assignee = m[2] ? m[2].trim() : null;
108
+ const itemText = m[3]
109
+ ? m[3].replace(/\*\/$/, '').trim() // strip trailing */ from block comments
110
+ : '';
111
+ // Apply assignee filter
112
+ if (args.assignee) {
113
+ if (!assignee || assignee.toLowerCase() !== args.assignee.toLowerCase()) {
114
+ continue;
115
+ }
116
+ }
117
+ todos.push({
118
+ filePath: file.path,
119
+ line: i + 1,
120
+ tag,
121
+ assignee,
122
+ text: itemText,
123
+ });
124
+ if (todos.length >= limit) {
125
+ truncated = true;
126
+ break;
127
+ }
128
+ }
129
+ if (truncated)
130
+ break;
131
+ }
132
+ // ── Build response ─────────────────────────────────────────────────────────
133
+ const responseBytes = todos.reduce((sum, t) => sum + t.filePath.length + t.text.length + (t.assignee?.length ?? 0) + 40, 0);
134
+ const tokenEstimate = Math.ceil(responseBytes / 4);
135
+ // ── Tag summary ────────────────────────────────────────────────────────────
136
+ const tagCounts = {};
137
+ for (const todo of todos) {
138
+ tagCounts[todo.tag] = (tagCounts[todo.tag] ?? 0) + 1;
139
+ }
140
+ let output;
141
+ if (groupByFile) {
142
+ const byFile = new Map();
143
+ for (const item of todos) {
144
+ const list = byFile.get(item.filePath) ?? [];
145
+ list.push(item);
146
+ byFile.set(item.filePath, list);
147
+ }
148
+ const files2 = Array.from(byFile.entries())
149
+ .sort(([a], [b]) => a.localeCompare(b))
150
+ .map(([filePath, items]) => ({ filePath, todos: items }));
151
+ output = {
152
+ totalTodos: todos.length,
153
+ fileCount: byFile.size,
154
+ tagCounts,
155
+ truncated,
156
+ files: files2,
157
+ _tokenEstimate: tokenEstimate,
158
+ _meta: buildMeta({ timingMs: Date.now() - t0, rawBytes, responseBytes }),
159
+ };
160
+ }
161
+ else {
162
+ output = {
163
+ totalTodos: todos.length,
164
+ fileCount: new Set(todos.map((t) => t.filePath)).size,
165
+ tagCounts,
166
+ truncated,
167
+ todos,
168
+ _tokenEstimate: tokenEstimate,
169
+ _meta: buildMeta({ timingMs: Date.now() - t0, rawBytes, responseBytes }),
170
+ };
171
+ }
172
+ return {
173
+ content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
174
+ };
175
+ }
176
+ finally {
177
+ db.close();
178
+ }
179
+ }
180
+ //# sourceMappingURL=get-todos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-todos.js","sourceRoot":"","sources":["../../../src/server/tools/get-todos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * get-type-graph.ts
3
+ *
4
+ * MCP tool: get_type_graph
5
+ *
6
+ * Returns the type dependency graph for a repository (or a scoped subtree),
7
+ * showing how interfaces, classes, type aliases, and enums relate to each
8
+ * other through inheritance (`extends`), implementation (`implements`), and
9
+ * optional usage relationships.
10
+ *
11
+ * Use this tool to:
12
+ * - Understand a domain model's type hierarchy before refactoring
13
+ * - Find all types that depend on a given interface
14
+ * - Generate a Mermaid class diagram from live code
15
+ * - Answer "what does this type extend/implement, and who extends it?"
16
+ *
17
+ * Differs from related tools:
18
+ * get_class_hierarchy — single-root ancestor/descendant tree for one class
19
+ * find_implementations — all concrete implementations of one interface
20
+ * get_type_graph — full multi-root graph of all type relationships
21
+ * in a scope; supports rootSymbol for focused traversal
22
+ */
23
+ import { z } from 'zod';
24
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
25
+ import type { SymbolKind } from '../../core/types.js';
26
+ export declare const name = "get_type_graph";
27
+ export declare const description: string;
28
+ export declare const inputSchema: {
29
+ repoId: z.ZodString;
30
+ rootSymbol: z.ZodOptional<z.ZodString>;
31
+ maxDepth: z.ZodOptional<z.ZodNumber>;
32
+ scope: z.ZodOptional<z.ZodString>;
33
+ kinds: z.ZodOptional<z.ZodArray<z.ZodEnum<{
34
+ class: "class";
35
+ type: "type";
36
+ interface: "interface";
37
+ enum: "enum";
38
+ }>>>;
39
+ includeAbstract: z.ZodOptional<z.ZodBoolean>;
40
+ format: z.ZodOptional<z.ZodEnum<{
41
+ mermaid: "mermaid";
42
+ graph: "graph";
43
+ }>>;
44
+ limit: z.ZodOptional<z.ZodNumber>;
45
+ };
46
+ export interface TypeNode {
47
+ id: string;
48
+ name: string;
49
+ kind: SymbolKind;
50
+ filePath: string;
51
+ signature: string;
52
+ summary: string;
53
+ isAbstract: boolean;
54
+ isGeneric: boolean;
55
+ }
56
+ export interface TypeEdge {
57
+ source: string;
58
+ target: string;
59
+ relation: 'extends' | 'implements';
60
+ targetName: string;
61
+ resolved: boolean;
62
+ }
63
+ export declare function handler(args: {
64
+ repoId: string;
65
+ rootSymbol?: string;
66
+ maxDepth?: number;
67
+ scope?: string;
68
+ kinds?: Array<'interface' | 'class' | 'type' | 'enum'>;
69
+ includeAbstract?: boolean;
70
+ format?: 'graph' | 'mermaid';
71
+ limit?: number;
72
+ }): Promise<CallToolResult>;
73
+ //# sourceMappingURL=get-type-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-type-graph.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-type-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,eAAO,MAAM,IAAI,mBAAmB,CAAC;AAErC,eAAO,MAAM,WAAW,QAa2C,CAAC;AAEpE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;CAyDvB,CAAC;AAcF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AA6GD,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;IACvD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,cAAc,CAAC,CA2R1B"}