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,218 @@
1
+ /**
2
+ * get-public-api.ts
3
+ *
4
+ * MCP tool: get_public_api
5
+ *
6
+ * Returns the public API surface of a repository: all exported symbols, grouped
7
+ * by file. A symbol is "public" when its signature begins with the `export`
8
+ * keyword (TypeScript/JavaScript export declarations, re-exports included).
9
+ *
10
+ * Designed for:
11
+ * - Onboarding: "what does this library expose?"
12
+ * - API contract review: "has the surface changed between snapshots?"
13
+ * - Documentation seeding: enumerate exports to generate docs
14
+ * - Dependency analysis: know what consumers can legally import
15
+ *
16
+ * Use find_dead_code to find exported symbols that nobody imports.
17
+ * Use get_blast_radius before removing an export to understand downstream impact.
18
+ */
19
+ import { z } from 'zod';
20
+ import { openDatabase, getRepo } from '../../core/db/schema.js';
21
+ import { buildMeta } from './_meta.js';
22
+ export const name = 'get_public_api';
23
+ export const description = 'Return the public API surface of a repository: all exported symbols, grouped by file. ' +
24
+ 'A symbol is considered public when its signature begins with the export keyword. ' +
25
+ 'Use this to answer "what does this library expose?", audit API contracts, seed ' +
26
+ 'documentation, or compare the public surface before and after a refactor. ' +
27
+ 'Each result includes symbolId, name, kind, signature, summary, file path, and ' +
28
+ 'whether the symbol is a default export.' +
29
+ '\n\nRelated tools:' +
30
+ '\n find_dead_code — exported symbols that nobody imports' +
31
+ '\n get_blast_radius — downstream impact of removing an export' +
32
+ '\n get_repo_outline — all symbols (exported and unexported) by file';
33
+ export const inputSchema = {
34
+ repoId: z.string().describe('Repository ID returned by index_folder or list_repos'),
35
+ filePath: z
36
+ .string()
37
+ .optional()
38
+ .describe('Restrict to a specific file path or directory prefix ' +
39
+ '(e.g. "src/services/" returns all exports from that subtree)'),
40
+ kind: z
41
+ .enum([
42
+ 'function', 'class', 'method', 'const', 'type', 'interface', 'enum',
43
+ 'component', 'composable', 'hook', 'route', 'decorator', 'middleware',
44
+ ])
45
+ .optional()
46
+ .describe('Filter results to a specific symbol kind'),
47
+ includeMembers: z
48
+ .boolean()
49
+ .optional()
50
+ .describe('When true, also include public methods of exported classes. ' +
51
+ 'Methods do not carry the export keyword themselves but are part of the exported ' +
52
+ 'API surface. Only effective when kind is not set (default false).'),
53
+ groupByFile: z
54
+ .boolean()
55
+ .optional()
56
+ .describe('Group results by file (default true). Set false for a flat sorted list.'),
57
+ limit: z
58
+ .number().int().positive().optional()
59
+ .describe('Maximum number of exported symbols to return (default 500)'),
60
+ };
61
+ // ─── Handler ──────────────────────────────────────────────────────────────────
62
+ export async function handler(args) {
63
+ const t0 = Date.now();
64
+ const { repoId, includeMembers = false, groupByFile = true, limit = 500, } = args;
65
+ const db = openDatabase(repoId);
66
+ try {
67
+ // ── Validate repo exists ───────────────────────────────────────────────────
68
+ const repo = getRepo(db, repoId);
69
+ if (!repo) {
70
+ return {
71
+ content: [{
72
+ type: 'text',
73
+ text: JSON.stringify({ error: `Repo "${repoId}" not found. Run index_folder first.` }),
74
+ }],
75
+ isError: true,
76
+ };
77
+ }
78
+ // ── Query exported symbols ─────────────────────────────────────────────────
79
+ // A symbol is exported if its signature begins with "export"
80
+ const conditions = [
81
+ 'repo_id = @repoId',
82
+ "(signature LIKE 'export %' OR signature LIKE 'export' OR signature LIKE 'export\n%')",
83
+ ];
84
+ const params = { repoId };
85
+ if (args.kind) {
86
+ conditions.push('kind = @kind');
87
+ params['kind'] = args.kind;
88
+ }
89
+ if (args.filePath) {
90
+ conditions.push('(file_path = @filePath OR file_path LIKE @filePathPrefix)');
91
+ params['filePath'] = args.filePath;
92
+ params['filePathPrefix'] = `${args.filePath}%`;
93
+ }
94
+ params['limit'] = limit;
95
+ const exportedSql = `
96
+ SELECT id, name, kind, file_path, start_byte, signature, summary
97
+ FROM symbols
98
+ WHERE ${conditions.join(' AND ')}
99
+ ORDER BY file_path ASC, start_byte ASC
100
+ LIMIT @limit
101
+ `;
102
+ const rows = db
103
+ .prepare(exportedSql)
104
+ .all(params);
105
+ // ── Optionally include methods of exported classes ─────────────────────────
106
+ if (includeMembers && !args.kind) {
107
+ const exportedClassFiles = new Set(rows
108
+ .filter((r) => r.kind === 'class' || r.kind === 'component')
109
+ .map((r) => r.file_path));
110
+ if (exportedClassFiles.size > 0) {
111
+ const existingIds = new Set(rows.map((r) => r.id));
112
+ const fileList = Array.from(exportedClassFiles);
113
+ const placeholders = fileList.map((_, i) => `@fp${i}`).join(', ');
114
+ const memberParams = { repoId };
115
+ fileList.forEach((fp, i) => { memberParams[`fp${i}`] = fp; });
116
+ const memberSql = `
117
+ SELECT id, name, kind, file_path, start_byte, signature, summary
118
+ FROM symbols
119
+ WHERE repo_id = @repoId
120
+ AND kind = 'method'
121
+ AND file_path IN (${placeholders})
122
+ ORDER BY file_path ASC, start_byte ASC
123
+ `;
124
+ const memberRows = db
125
+ .prepare(memberSql)
126
+ .all(memberParams);
127
+ for (const r of memberRows) {
128
+ if (!existingIds.has(r.id)) {
129
+ rows.push(r);
130
+ }
131
+ }
132
+ rows.sort((a, b) => a.file_path.localeCompare(b.file_path) || a.start_byte - b.start_byte);
133
+ }
134
+ }
135
+ // ── Compute startLine from stored file content ─────────────────────────────
136
+ const fileSymbols = new Map();
137
+ for (const row of rows) {
138
+ const list = fileSymbols.get(row.file_path) ?? [];
139
+ list.push(row);
140
+ fileSymbols.set(row.file_path, list);
141
+ }
142
+ const lineMap = new Map();
143
+ let rawBytes = 0;
144
+ for (const [filePath, syms] of fileSymbols) {
145
+ const fileRow = db
146
+ .prepare('SELECT raw_content FROM files WHERE repo_id = ? AND path = ?')
147
+ .get(repoId, filePath);
148
+ if (fileRow?.raw_content) {
149
+ rawBytes += fileRow.raw_content.length;
150
+ const content = fileRow.raw_content;
151
+ for (const sym of syms) {
152
+ const slice = content.slice(0, Math.min(sym.start_byte, content.length));
153
+ let line = 1;
154
+ for (let i = 0; i < slice.length; i++) {
155
+ if (slice[i] === 0x0a)
156
+ line++;
157
+ }
158
+ lineMap.set(sym.id, line);
159
+ }
160
+ }
161
+ else {
162
+ for (const sym of syms) {
163
+ lineMap.set(sym.id, Math.max(1, Math.floor(sym.start_byte / 80) + 1));
164
+ }
165
+ }
166
+ }
167
+ // ── Shape symbols ─────────────────────────────────────────────────────────
168
+ const shaped = rows.map((row) => ({
169
+ symbolId: row.id,
170
+ name: row.name,
171
+ kind: row.kind,
172
+ filePath: row.file_path,
173
+ startLine: lineMap.get(row.id) ?? 1,
174
+ signature: row.signature,
175
+ summary: row.summary,
176
+ isDefault: row.signature.includes('export default'),
177
+ }));
178
+ const responseBytes = shaped.reduce((sum, s) => sum + s.signature.length + s.summary.length + s.filePath.length + 80, 0);
179
+ const tokenEstimate = Math.ceil(responseBytes / 4);
180
+ // ── Format output ─────────────────────────────────────────────────────────
181
+ const uniqueFileCount = fileSymbols.size;
182
+ let output;
183
+ if (groupByFile) {
184
+ const byFile = new Map();
185
+ for (const sym of shaped) {
186
+ const list = byFile.get(sym.filePath) ?? [];
187
+ list.push(sym);
188
+ byFile.set(sym.filePath, list);
189
+ }
190
+ const files = Array.from(byFile.entries())
191
+ .sort(([a], [b]) => a.localeCompare(b))
192
+ .map(([filePath, exports]) => ({ filePath, exports }));
193
+ output = {
194
+ totalExported: shaped.length,
195
+ fileCount: files.length,
196
+ files,
197
+ _tokenEstimate: tokenEstimate,
198
+ _meta: buildMeta({ timingMs: Date.now() - t0, rawBytes, responseBytes }),
199
+ };
200
+ }
201
+ else {
202
+ output = {
203
+ totalExported: shaped.length,
204
+ fileCount: uniqueFileCount,
205
+ symbols: shaped,
206
+ _tokenEstimate: tokenEstimate,
207
+ _meta: buildMeta({ timingMs: Date.now() - t0, rawBytes, responseBytes }),
208
+ };
209
+ }
210
+ return {
211
+ content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
212
+ };
213
+ }
214
+ finally {
215
+ db.close();
216
+ }
217
+ }
218
+ //# sourceMappingURL=get-public-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-public-api.js","sourceRoot":"","sources":["../../../src/server/tools/get-public-api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-savings-stats.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-savings-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAWzE,eAAO,MAAM,IAAI,sBAAsB,CAAC;AAExC,eAAO,MAAM,WAAW,QAGiC,CAAC;AAE1D,eAAO,MAAM,WAAW;;CAMvB,CAAC;AAIF,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,cAAc,CAyCjE"}
1
+ {"version":3,"file":"get-savings-stats.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-savings-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAWzE,eAAO,MAAM,IAAI,sBAAsB,CAAC;AAExC,eAAO,MAAM,WAAW,QAGiC,CAAC;AAE1D,eAAO,MAAM,WAAW;;CAMvB,CAAC;AAIF,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,cAAc,CAuCjE"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { getTotalSaved, resetSavings, getSessionStart, costAvoided, } from '../../core/token-tracker.js';
2
+ import { getTotalSaved, resetSavings, getSessionStart, } from '../../core/token-tracker.js';
3
3
  // ─── Context window sizes (in tokens) ────────────────────────────────────────
4
4
  const CONTEXT_WINDOWS = {
5
5
  claude_200k: 200_000,
@@ -31,7 +31,6 @@ export function handler(args) {
31
31
  };
32
32
  }
33
33
  const total = getTotalSaved();
34
- const { total_cost_avoided } = costAvoided(total, total);
35
34
  const equivalent_context_windows = {};
36
35
  for (const [label, size] of Object.entries(CONTEXT_WINDOWS)) {
37
36
  equivalent_context_windows[label] = parseFloat((total / size).toFixed(2));
@@ -43,7 +42,6 @@ export function handler(args) {
43
42
  text: JSON.stringify({
44
43
  total_tokens_saved: total,
45
44
  equivalent_context_windows,
46
- total_cost_avoided,
47
45
  session_start: getSessionStart().toISOString(),
48
46
  _meta: {
49
47
  powered_by: 'PureContext MCP',
@@ -1 +1 @@
1
- {"version":3,"file":"get-savings-stats.js","sourceRoot":"","sources":["../../../src/server/tools/get-savings-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EACf,WAAW,GACZ,MAAM,6BAA6B,CAAC;AAGrC,gFAAgF;AAEhF,MAAM,eAAe,GAAG;IACtB,WAAW,EAAE,OAAO;IACpB,SAAS,EAAE,OAAO;CACV,CAAC;AAEX,iFAAiF;AAEjF,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GACtB,4EAA4E;IAC5E,2FAA2F;IAC3F,uDAAuD,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,4DAA4D,CAAC;CAC1E,CAAC;AAEF,iFAAiF;AAEjF,MAAM,UAAU,OAAO,CAAC,IAAyB;IAC/C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACzE;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,MAAM,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEzD,MAAM,0BAA0B,GAA2B,EAAE,CAAC;IAC9D,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5D,0BAA0B,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,kBAAkB,EAAE,KAAK;oBACzB,0BAA0B;oBAC1B,kBAAkB;oBAClB,aAAa,EAAE,eAAe,EAAE,CAAC,WAAW,EAAE;oBAC9C,KAAK,EAAE;wBACL,UAAU,EAAE,iBAAiB;qBAC9B;iBACF,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-savings-stats.js","sourceRoot":"","sources":["../../../src/server/tools/get-savings-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAGrC,gFAAgF;AAEhF,MAAM,eAAe,GAAG;IACtB,WAAW,EAAE,OAAO;IACpB,SAAS,EAAE,OAAO;CACV,CAAC;AAEX,iFAAiF;AAEjF,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GACtB,4EAA4E;IAC5E,2FAA2F;IAC3F,uDAAuD,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,4DAA4D,CAAC;CAC1E,CAAC;AAEF,iFAAiF;AAEjF,MAAM,UAAU,OAAO,CAAC,IAAyB;IAC/C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACzE;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAE9B,MAAM,0BAA0B,GAA2B,EAAE,CAAC;IAC9D,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5D,0BAA0B,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,kBAAkB,EAAE,KAAK;oBACzB,0BAA0B;oBAC1B,aAAa,EAAE,eAAe,EAAE,CAAC,WAAW,EAAE;oBAC9C,KAAK,EAAE;wBACL,UAAU,EAAE,iBAAiB;qBAC9B;iBACF,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * get-test-coverage-map.ts
3
+ *
4
+ * MCP tool: get_test_coverage_map
5
+ *
6
+ * Parses a coverage JSON report (Istanbul/NYC or V8/c8 format) and maps
7
+ * line-level coverage data to symbols in the indexed codebase. Returns
8
+ * per-file coverage metrics and per-symbol covered/uncovered status.
9
+ *
10
+ * Supported formats:
11
+ * Istanbul/NYC — coverage-final.json produced by nyc, jest --coverage,
12
+ * vitest --coverage.reporter=json, c8 (json reporter).
13
+ * Keys are absolute file paths; values have statementMap,
14
+ * fnMap, branchMap, s, f, b counters.
15
+ *
16
+ * V8 — coverage produced by Node --experimental-vm-modules or
17
+ * c8 json-summary. An array of {url, functions} objects
18
+ * where url is a file:// URI and functions carry byte-range
19
+ * hit counts.
20
+ *
21
+ * Detection strategy:
22
+ * - Top-level object → Istanbul
23
+ * - Top-level array → V8
24
+ * Auto-detected by default; override with the `format` parameter.
25
+ *
26
+ * Symbol coverage:
27
+ * Symbols are matched to coverage functions by exact name. If no name
28
+ * match is found, line-range overlap is used as a fallback.
29
+ * This is a static heuristic — minified or transpiled code may reduce
30
+ * accuracy. For precise coverage, ensure the coverage report was generated
31
+ * from the same (or source-mapped) code that was indexed.
32
+ *
33
+ * Differs from related tools:
34
+ * find_untested_symbols — name-based heuristic, no coverage file needed
35
+ * get_complexity_hotspots — complexity ranking without coverage data
36
+ * get_quality_metrics — per-symbol quality scoring, not coverage
37
+ */
38
+ import { z } from 'zod';
39
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
40
+ export declare const name = "get_test_coverage_map";
41
+ export declare const description: string;
42
+ export declare const inputSchema: {
43
+ repoId: z.ZodString;
44
+ coveragePath: z.ZodString;
45
+ scope: z.ZodOptional<z.ZodString>;
46
+ filePath: z.ZodOptional<z.ZodString>;
47
+ minCoverage: z.ZodOptional<z.ZodNumber>;
48
+ includeUncoveredLines: z.ZodOptional<z.ZodBoolean>;
49
+ limit: z.ZodOptional<z.ZodNumber>;
50
+ format: z.ZodOptional<z.ZodEnum<{
51
+ auto: "auto";
52
+ istanbul: "istanbul";
53
+ v8: "v8";
54
+ }>>;
55
+ };
56
+ export declare function handler(args: {
57
+ repoId: string;
58
+ coveragePath: string;
59
+ scope?: string;
60
+ filePath?: string;
61
+ minCoverage?: number;
62
+ includeUncoveredLines?: boolean;
63
+ limit?: number;
64
+ format?: 'auto' | 'istanbul' | 'v8';
65
+ }): Promise<CallToolResult>;
66
+ //# sourceMappingURL=get-test-coverage-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-test-coverage-map.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-test-coverage-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,eAAO,MAAM,IAAI,0BAA0B,CAAC;AAE5C,eAAO,MAAM,WAAW,QAY8C,CAAC;AAIvE,eAAO,MAAM,WAAW;;;;;;;;;;;;;CA0CvB,CAAC;AAudF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;CACrC,GAAG,OAAO,CAAC,cAAc,CAAC,CAkQ1B"}