@j0hanz/filesystem-context-mcp 1.1.0 → 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 (285) hide show
  1. package/README.md +106 -29
  2. package/dist/__tests__/lib/errors.test.js +3 -23
  3. package/dist/__tests__/lib/errors.test.js.map +1 -1
  4. package/dist/__tests__/lib/file-operations.test.js +34 -0
  5. package/dist/__tests__/lib/file-operations.test.js.map +1 -1
  6. package/dist/__tests__/lib/path-validation.test.js +8 -0
  7. package/dist/__tests__/lib/path-validation.test.js.map +1 -1
  8. package/dist/__tests__/schemas/validators.test.js +101 -122
  9. package/dist/__tests__/schemas/validators.test.js.map +1 -1
  10. package/dist/__tests__/security/filesystem-boundary.test.js +1 -1
  11. package/dist/__tests__/security/filesystem-boundary.test.js.map +1 -1
  12. package/dist/config/types.d.ts +1 -85
  13. package/dist/config/types.d.ts.map +1 -1
  14. package/dist/config/types.js +0 -2
  15. package/dist/config/types.js.map +1 -1
  16. package/dist/index.js +3 -3
  17. package/dist/index.js.map +1 -1
  18. package/dist/instructions.md +1 -2
  19. package/dist/lib/constants.d.ts +3 -1
  20. package/dist/lib/constants.d.ts.map +1 -1
  21. package/dist/lib/constants.js +66 -258
  22. package/dist/lib/constants.js.map +1 -1
  23. package/dist/lib/errors.d.ts +25 -3
  24. package/dist/lib/errors.d.ts.map +1 -1
  25. package/dist/lib/errors.js +4 -94
  26. package/dist/lib/errors.js.map +1 -1
  27. package/dist/lib/file-operations/analyze-directory.d.ts +8 -0
  28. package/dist/lib/file-operations/analyze-directory.d.ts.map +1 -0
  29. package/dist/lib/file-operations/analyze-directory.js +117 -0
  30. package/dist/lib/file-operations/analyze-directory.js.map +1 -0
  31. package/dist/lib/file-operations/directory-items.d.ts +20 -0
  32. package/dist/lib/file-operations/directory-items.d.ts.map +1 -0
  33. package/dist/lib/file-operations/directory-items.js +85 -0
  34. package/dist/lib/file-operations/directory-items.js.map +1 -0
  35. package/dist/lib/file-operations/directory-iteration.d.ts +17 -0
  36. package/dist/lib/file-operations/directory-iteration.d.ts.map +1 -0
  37. package/dist/lib/file-operations/directory-iteration.js +55 -0
  38. package/dist/lib/file-operations/directory-iteration.js.map +1 -0
  39. package/dist/lib/file-operations/directory-tree.d.ts +9 -0
  40. package/dist/lib/file-operations/directory-tree.d.ts.map +1 -0
  41. package/dist/lib/file-operations/directory-tree.js +175 -0
  42. package/dist/lib/file-operations/directory-tree.js.map +1 -0
  43. package/dist/lib/file-operations/file-info.d.ts +3 -0
  44. package/dist/lib/file-operations/file-info.d.ts.map +1 -0
  45. package/dist/lib/file-operations/file-info.js +56 -0
  46. package/dist/lib/file-operations/file-info.js.map +1 -0
  47. package/dist/lib/file-operations/list-directory.d.ts +10 -0
  48. package/dist/lib/file-operations/list-directory.d.ts.map +1 -0
  49. package/dist/lib/file-operations/list-directory.js +189 -0
  50. package/dist/lib/file-operations/list-directory.js.map +1 -0
  51. package/dist/lib/file-operations/read-media-file.d.ts +5 -0
  52. package/dist/lib/file-operations/read-media-file.d.ts.map +1 -0
  53. package/dist/lib/file-operations/read-media-file.js +31 -0
  54. package/dist/lib/file-operations/read-media-file.js.map +1 -0
  55. package/dist/lib/file-operations/read-multiple-files.d.ts +16 -0
  56. package/dist/lib/file-operations/read-multiple-files.d.ts.map +1 -0
  57. package/dist/lib/file-operations/read-multiple-files.js +98 -0
  58. package/dist/lib/file-operations/read-multiple-files.js.map +1 -0
  59. package/dist/lib/file-operations/search-content.d.ts +16 -0
  60. package/dist/lib/file-operations/search-content.d.ts.map +1 -0
  61. package/dist/lib/file-operations/search-content.js +431 -0
  62. package/dist/lib/file-operations/search-content.js.map +1 -0
  63. package/dist/lib/file-operations/search-files.d.ts +9 -0
  64. package/dist/lib/file-operations/search-files.d.ts.map +1 -0
  65. package/dist/lib/file-operations/search-files.js +139 -0
  66. package/dist/lib/file-operations/search-files.js.map +1 -0
  67. package/dist/lib/file-operations/sorting.d.ts +12 -0
  68. package/dist/lib/file-operations/sorting.d.ts.map +1 -0
  69. package/dist/lib/file-operations/sorting.js +24 -0
  70. package/dist/lib/file-operations/sorting.js.map +1 -0
  71. package/dist/lib/file-operations.d.ts +9 -57
  72. package/dist/lib/file-operations.d.ts.map +1 -1
  73. package/dist/lib/file-operations.js +9 -773
  74. package/dist/lib/file-operations.js.map +1 -1
  75. package/dist/lib/fs-helpers/binary-detect.d.ts +3 -0
  76. package/dist/lib/fs-helpers/binary-detect.d.ts.map +1 -0
  77. package/dist/lib/fs-helpers/binary-detect.js +54 -0
  78. package/dist/lib/fs-helpers/binary-detect.js.map +1 -0
  79. package/dist/lib/fs-helpers/concurrency.d.ts +11 -0
  80. package/dist/lib/fs-helpers/concurrency.d.ts.map +1 -0
  81. package/dist/lib/fs-helpers/concurrency.js +95 -0
  82. package/dist/lib/fs-helpers/concurrency.js.map +1 -0
  83. package/dist/lib/fs-helpers/fs-utils.d.ts +5 -0
  84. package/dist/lib/fs-helpers/fs-utils.d.ts.map +1 -0
  85. package/dist/lib/fs-helpers/fs-utils.js +13 -0
  86. package/dist/lib/fs-helpers/fs-utils.js.map +1 -0
  87. package/dist/lib/fs-helpers/readers/head-file.d.ts +2 -0
  88. package/dist/lib/fs-helpers/readers/head-file.d.ts.map +1 -0
  89. package/dist/lib/fs-helpers/readers/head-file.js +73 -0
  90. package/dist/lib/fs-helpers/readers/head-file.js.map +1 -0
  91. package/dist/lib/fs-helpers/readers/line-range.d.ts +7 -0
  92. package/dist/lib/fs-helpers/readers/line-range.d.ts.map +1 -0
  93. package/dist/lib/fs-helpers/readers/line-range.js +46 -0
  94. package/dist/lib/fs-helpers/readers/line-range.js.map +1 -0
  95. package/dist/lib/fs-helpers/readers/read-file.d.ts +16 -0
  96. package/dist/lib/fs-helpers/readers/read-file.d.ts.map +1 -0
  97. package/dist/lib/fs-helpers/readers/read-file.js +87 -0
  98. package/dist/lib/fs-helpers/readers/read-file.js.map +1 -0
  99. package/dist/lib/fs-helpers/readers/tail-file.d.ts +2 -0
  100. package/dist/lib/fs-helpers/readers/tail-file.d.ts.map +1 -0
  101. package/dist/lib/fs-helpers/readers/tail-file.js +98 -0
  102. package/dist/lib/fs-helpers/readers/tail-file.js.map +1 -0
  103. package/dist/lib/fs-helpers/readers/utf8.d.ts +3 -0
  104. package/dist/lib/fs-helpers/readers/utf8.d.ts.map +1 -0
  105. package/dist/lib/fs-helpers/readers/utf8.js +22 -0
  106. package/dist/lib/fs-helpers/readers/utf8.js.map +1 -0
  107. package/dist/lib/fs-helpers/readers.d.ts +4 -0
  108. package/dist/lib/fs-helpers/readers.d.ts.map +1 -0
  109. package/dist/lib/fs-helpers/readers.js +4 -0
  110. package/dist/lib/fs-helpers/readers.js.map +1 -0
  111. package/dist/lib/fs-helpers.d.ts +4 -25
  112. package/dist/lib/fs-helpers.d.ts.map +1 -1
  113. package/dist/lib/fs-helpers.js +4 -327
  114. package/dist/lib/fs-helpers.js.map +1 -1
  115. package/dist/lib/path-validation/allowed-directories.d.ts +9 -0
  116. package/dist/lib/path-validation/allowed-directories.d.ts.map +1 -0
  117. package/dist/lib/path-validation/allowed-directories.js +94 -0
  118. package/dist/lib/path-validation/allowed-directories.js.map +1 -0
  119. package/dist/lib/path-validation/errors.d.ts +5 -0
  120. package/dist/lib/path-validation/errors.d.ts.map +1 -0
  121. package/dist/lib/path-validation/errors.js +33 -0
  122. package/dist/lib/path-validation/errors.js.map +1 -0
  123. package/dist/lib/path-validation/roots.d.ts +3 -0
  124. package/dist/lib/path-validation/roots.d.ts.map +1 -0
  125. package/dist/lib/path-validation/roots.js +49 -0
  126. package/dist/lib/path-validation/roots.js.map +1 -0
  127. package/dist/lib/path-validation/validators.d.ts +9 -0
  128. package/dist/lib/path-validation/validators.d.ts.map +1 -0
  129. package/dist/lib/path-validation/validators.js +70 -0
  130. package/dist/lib/path-validation/validators.js.map +1 -0
  131. package/dist/lib/path-validation.d.ts +3 -7
  132. package/dist/lib/path-validation.d.ts.map +1 -1
  133. package/dist/lib/path-validation.js +3 -141
  134. package/dist/lib/path-validation.js.map +1 -1
  135. package/dist/schemas/input-helpers.d.ts +8 -0
  136. package/dist/schemas/input-helpers.d.ts.map +1 -0
  137. package/dist/schemas/input-helpers.js +44 -0
  138. package/dist/schemas/input-helpers.js.map +1 -0
  139. package/dist/schemas/inputs.d.ts +8 -5
  140. package/dist/schemas/inputs.d.ts.map +1 -1
  141. package/dist/schemas/inputs.js +41 -64
  142. package/dist/schemas/inputs.js.map +1 -1
  143. package/dist/schemas/output-helpers.d.ts +24 -0
  144. package/dist/schemas/output-helpers.d.ts.map +1 -0
  145. package/dist/schemas/output-helpers.js +13 -0
  146. package/dist/schemas/output-helpers.js.map +1 -0
  147. package/dist/schemas/outputs.d.ts +476 -42
  148. package/dist/schemas/outputs.d.ts.map +1 -1
  149. package/dist/schemas/outputs.js +26 -41
  150. package/dist/schemas/outputs.js.map +1 -1
  151. package/dist/server.d.ts +9 -1
  152. package/dist/server.d.ts.map +1 -1
  153. package/dist/server.js +28 -42
  154. package/dist/server.js.map +1 -1
  155. package/dist/tools/analyze-directory.d.ts.map +1 -1
  156. package/dist/tools/analyze-directory.js +115 -53
  157. package/dist/tools/analyze-directory.js.map +1 -1
  158. package/dist/tools/directory-tree.d.ts.map +1 -1
  159. package/dist/tools/directory-tree.js +86 -49
  160. package/dist/tools/directory-tree.js.map +1 -1
  161. package/dist/tools/get-file-info.d.ts.map +1 -1
  162. package/dist/tools/get-file-info.js +71 -37
  163. package/dist/tools/get-file-info.js.map +1 -1
  164. package/dist/tools/list-allowed-dirs.d.ts.map +1 -1
  165. package/dist/tools/list-allowed-dirs.js +48 -35
  166. package/dist/tools/list-allowed-dirs.js.map +1 -1
  167. package/dist/tools/list-directory.d.ts.map +1 -1
  168. package/dist/tools/list-directory.js +129 -58
  169. package/dist/tools/list-directory.js.map +1 -1
  170. package/dist/tools/read-file.d.ts.map +1 -1
  171. package/dist/tools/read-file.js +70 -56
  172. package/dist/tools/read-file.js.map +1 -1
  173. package/dist/tools/read-media-file.d.ts.map +1 -1
  174. package/dist/tools/read-media-file.js +39 -41
  175. package/dist/tools/read-media-file.js.map +1 -1
  176. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  177. package/dist/tools/read-multiple-files.js +58 -50
  178. package/dist/tools/read-multiple-files.js.map +1 -1
  179. package/dist/tools/search-content.d.ts.map +1 -1
  180. package/dist/tools/search-content.js +146 -89
  181. package/dist/tools/search-content.js.map +1 -1
  182. package/dist/tools/search-files.d.ts.map +1 -1
  183. package/dist/tools/search-files.js +121 -50
  184. package/dist/tools/search-files.js.map +1 -1
  185. package/dist/tools/tool-response.d.ts +9 -0
  186. package/dist/tools/tool-response.d.ts.map +1 -0
  187. package/dist/tools/tool-response.js +7 -0
  188. package/dist/tools/tool-response.js.map +1 -0
  189. package/package.json +2 -1
  190. package/dist/__tests__/errors.test.d.ts +0 -2
  191. package/dist/__tests__/errors.test.d.ts.map +0 -1
  192. package/dist/__tests__/errors.test.js +0 -88
  193. package/dist/__tests__/errors.test.js.map +0 -1
  194. package/dist/__tests__/file-operations.test.d.ts +0 -2
  195. package/dist/__tests__/file-operations.test.d.ts.map +0 -1
  196. package/dist/__tests__/file-operations.test.js +0 -230
  197. package/dist/__tests__/file-operations.test.js.map +0 -1
  198. package/dist/__tests__/lib/formatters.test.d.ts +0 -2
  199. package/dist/__tests__/lib/formatters.test.d.ts.map +0 -1
  200. package/dist/__tests__/lib/formatters.test.js +0 -248
  201. package/dist/__tests__/lib/formatters.test.js.map +0 -1
  202. package/dist/__tests__/lib/image-parsing.test.d.ts +0 -2
  203. package/dist/__tests__/lib/image-parsing.test.d.ts.map +0 -1
  204. package/dist/__tests__/lib/image-parsing.test.js +0 -262
  205. package/dist/__tests__/lib/image-parsing.test.js.map +0 -1
  206. package/dist/__tests__/path-validation.test.d.ts +0 -2
  207. package/dist/__tests__/path-validation.test.d.ts.map +0 -1
  208. package/dist/__tests__/path-validation.test.js +0 -92
  209. package/dist/__tests__/path-validation.test.js.map +0 -1
  210. package/dist/lib/directory-helpers.d.ts +0 -4
  211. package/dist/lib/directory-helpers.d.ts.map +0 -1
  212. package/dist/lib/directory-helpers.js +0 -36
  213. package/dist/lib/directory-helpers.js.map +0 -1
  214. package/dist/lib/formatters.d.ts +0 -10
  215. package/dist/lib/formatters.d.ts.map +0 -1
  216. package/dist/lib/formatters.js +0 -202
  217. package/dist/lib/formatters.js.map +0 -1
  218. package/dist/lib/image-parsing.d.ts +0 -4
  219. package/dist/lib/image-parsing.d.ts.map +0 -1
  220. package/dist/lib/image-parsing.js +0 -124
  221. package/dist/lib/image-parsing.js.map +0 -1
  222. package/dist/lib/mcp-logger.d.ts +0 -11
  223. package/dist/lib/mcp-logger.d.ts.map +0 -1
  224. package/dist/lib/mcp-logger.js +0 -49
  225. package/dist/lib/mcp-logger.js.map +0 -1
  226. package/dist/lib/roots-utils.d.ts +0 -7
  227. package/dist/lib/roots-utils.d.ts.map +0 -1
  228. package/dist/lib/roots-utils.js +0 -39
  229. package/dist/lib/roots-utils.js.map +0 -1
  230. package/dist/lib/search-helpers.d.ts +0 -16
  231. package/dist/lib/search-helpers.d.ts.map +0 -1
  232. package/dist/lib/search-helpers.js +0 -169
  233. package/dist/lib/search-helpers.js.map +0 -1
  234. package/dist/lib/sorting.d.ts +0 -12
  235. package/dist/lib/sorting.d.ts.map +0 -1
  236. package/dist/lib/sorting.js +0 -41
  237. package/dist/lib/sorting.js.map +0 -1
  238. package/dist/lib/types.d.ts +0 -6
  239. package/dist/lib/types.d.ts.map +0 -1
  240. package/dist/lib/types.js +0 -2
  241. package/dist/lib/types.js.map +0 -1
  242. package/dist/prompts/analyze-codebase.d.ts +0 -3
  243. package/dist/prompts/analyze-codebase.d.ts.map +0 -1
  244. package/dist/prompts/analyze-codebase.js +0 -144
  245. package/dist/prompts/analyze-codebase.js.map +0 -1
  246. package/dist/prompts/filesystem-query.d.ts +0 -3
  247. package/dist/prompts/filesystem-query.d.ts.map +0 -1
  248. package/dist/prompts/filesystem-query.js +0 -168
  249. package/dist/prompts/filesystem-query.js.map +0 -1
  250. package/dist/prompts/find-duplicates.d.ts +0 -3
  251. package/dist/prompts/find-duplicates.d.ts.map +0 -1
  252. package/dist/prompts/find-duplicates.js +0 -77
  253. package/dist/prompts/find-duplicates.js.map +0 -1
  254. package/dist/prompts/index.d.ts +0 -3
  255. package/dist/prompts/index.d.ts.map +0 -1
  256. package/dist/prompts/index.js +0 -13
  257. package/dist/prompts/index.js.map +0 -1
  258. package/dist/prompts/project-overview.d.ts +0 -3
  259. package/dist/prompts/project-overview.d.ts.map +0 -1
  260. package/dist/prompts/project-overview.js +0 -122
  261. package/dist/prompts/project-overview.js.map +0 -1
  262. package/dist/prompts/search-and-replace.d.ts +0 -3
  263. package/dist/prompts/search-and-replace.d.ts.map +0 -1
  264. package/dist/prompts/search-and-replace.js +0 -130
  265. package/dist/prompts/search-and-replace.js.map +0 -1
  266. package/dist/prompts/shared.d.ts +0 -11
  267. package/dist/prompts/shared.d.ts.map +0 -1
  268. package/dist/prompts/shared.js +0 -32
  269. package/dist/prompts/shared.js.map +0 -1
  270. package/dist/resources/index.d.ts +0 -3
  271. package/dist/resources/index.d.ts.map +0 -1
  272. package/dist/resources/index.js +0 -54
  273. package/dist/resources/index.js.map +0 -1
  274. package/dist/schemas/validators.d.ts +0 -12
  275. package/dist/schemas/validators.d.ts.map +0 -1
  276. package/dist/schemas/validators.js +0 -35
  277. package/dist/schemas/validators.js.map +0 -1
  278. package/dist/utils/index.d.ts +0 -2
  279. package/dist/utils/index.d.ts.map +0 -1
  280. package/dist/utils/index.js +0 -2
  281. package/dist/utils/index.js.map +0 -1
  282. package/dist/utils/response-helpers.d.ts +0 -22
  283. package/dist/utils/response-helpers.d.ts.map +0 -1
  284. package/dist/utils/response-helpers.js +0 -24
  285. package/dist/utils/response-helpers.js.map +0 -1
@@ -1,144 +0,0 @@
1
- import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
- import { z } from 'zod';
3
- import { buildExcludes, pathCompleter } from './shared.js';
4
- // Extended excludes for codebase analysis (adds minified files)
5
- const ANALYZE_EXCLUDES = buildExcludes('minified');
6
- const FOCUS_CONFIG = {
7
- architecture: {
8
- patterns: [
9
- 'export (class|interface|type|function) \\w+',
10
- '^import .+ from',
11
- '@module|@package|@namespace',
12
- ],
13
- deliverables: [
14
- 'Module organization & boundaries',
15
- 'Dependency graph (imports/exports)',
16
- 'Layer violations & circular deps',
17
- 'Entry points & public API surface',
18
- ],
19
- maxResults: 100,
20
- },
21
- patterns: {
22
- patterns: [
23
- 'class \\w+Factory|create\\w+\\(',
24
- 'getInstance\\(|private constructor',
25
- 'subscribe\\(|addEventListener\\(|on[A-Z]\\w+\\(',
26
- 'implements \\w+(Strategy|Handler|Provider)',
27
- ],
28
- deliverables: [
29
- 'Design patterns identified (Factory, Singleton, Observer, Strategy)',
30
- 'Pattern usage frequency & locations',
31
- 'Anti-patterns & code smells',
32
- 'Refactoring opportunities',
33
- ],
34
- maxResults: 50,
35
- },
36
- quality: {
37
- patterns: [
38
- 'TODO|FIXME|HACK|XXX|BUG',
39
- '@deprecated|@obsolete|@legacy',
40
- 'console\\.(log|warn|error|debug)',
41
- 'eslint-disable|@ts-ignore|@ts-expect-error',
42
- ],
43
- deliverables: [
44
- 'Technical debt inventory with severity',
45
- 'Debug/console statements left behind',
46
- 'Suppressed linting rules',
47
- 'Documentation coverage gaps',
48
- ],
49
- maxResults: 100,
50
- },
51
- security: {
52
- patterns: [
53
- 'eval\\(|new Function\\(|exec\\(',
54
- 'password|secret|api_?key|token|credential',
55
- 'innerHTML|dangerouslySetInnerHTML|outerHTML',
56
- 'process\\.env\\.|\\$\\{.*SECRET|\\$\\{.*KEY',
57
- ],
58
- deliverables: [
59
- 'Potential code injection vulnerabilities',
60
- 'Hardcoded secrets & credentials',
61
- 'Unsafe DOM manipulation',
62
- 'Environment variable exposure',
63
- ],
64
- maxResults: 50,
65
- },
66
- };
67
- export function registerAnalyzeCodebasePrompt(server) {
68
- server.registerPrompt('analyze-codebase', {
69
- description: 'Deep code analysis: architecture, patterns, quality, or security',
70
- argsSchema: {
71
- path: completable(z.string().min(1).describe('Codebase root path'), pathCompleter),
72
- focus: z
73
- .enum(['architecture', 'patterns', 'quality', 'security', 'all'])
74
- .optional()
75
- .default('all')
76
- .describe('Focus: architecture, patterns, quality, security, or all'),
77
- filePattern: z
78
- .string()
79
- .optional()
80
- .default('**/*.{ts,js,tsx,jsx,py,java,go,rs}')
81
- .describe('Source file glob pattern'),
82
- maxDepth: z
83
- .number()
84
- .int()
85
- .min(1)
86
- .max(20)
87
- .optional()
88
- .default(10)
89
- .describe('Maximum directory depth (default: 10)'),
90
- },
91
- }, ({ path, focus, filePattern, maxDepth }) => {
92
- const focusAreas = focus === 'all' ? Object.keys(FOCUS_CONFIG) : [focus];
93
- const allPatterns = focusAreas.flatMap((f) => FOCUS_CONFIG[f]?.patterns ?? []);
94
- const allDeliverables = focusAreas.flatMap((f) => FOCUS_CONFIG[f]?.deliverables ?? []);
95
- const maxResults = Math.min(...focusAreas.map((f) => FOCUS_CONFIG[f]?.maxResults ?? 100));
96
- const excludesJson = JSON.stringify(ANALYZE_EXCLUDES);
97
- // Build search instructions for each focus area
98
- const searchInstructions = focusAreas
99
- .map((f) => {
100
- const config = FOCUS_CONFIG[f];
101
- if (!config)
102
- return '';
103
- return ` - **${f}**: \`${config.patterns.slice(0, 2).join('` or `')}\``;
104
- })
105
- .filter(Boolean)
106
- .join('\n');
107
- return {
108
- messages: [
109
- {
110
- role: 'user',
111
- content: {
112
- type: 'text',
113
- text: `Analyze codebase at "${path}" (focus: **${focus}**).
114
-
115
- ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
116
-
117
- **Default excludes:** ${ANALYZE_EXCLUDES.slice(0, 4).join(', ')}
118
-
119
- **Workflow:**
120
- 1. \`directory_tree\` maxDepth=${maxDepth} excludePatterns=${excludesJson} → structure overview
121
- 2. \`search_files\` pattern="${filePattern}" excludePatterns=${excludesJson} → find source files
122
- 3. \`analyze_directory\` maxDepth=${maxDepth} excludePatterns=${excludesJson} → stats & hotspots
123
- 4. \`search_content\` contextLines=2 maxResults=${maxResults} excludePatterns=${excludesJson} → search for:
124
- ${searchInstructions}
125
- 5. \`read_multiple_files\` → batch examine key files (most efficient)
126
-
127
- **Regex patterns to search:**
128
- ${allPatterns.map((p) => `- \`${p}\``).join('\n')}
129
-
130
- **Deliverables:**
131
- ${allDeliverables.map((d) => `- ${d}`).join('\n')}
132
-
133
- **Final Report:**
134
- - Executive summary (1-2 paragraphs)
135
- - Findings by category with file:line references
136
- - Prioritized recommendations (High/Medium/Low)
137
- - Quick wins vs long-term improvements`,
138
- },
139
- },
140
- ],
141
- };
142
- });
143
- }
144
- //# sourceMappingURL=analyze-codebase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze-codebase.js","sourceRoot":"","sources":["../../src/prompts/analyze-codebase.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerFilesystemQueryPrompt(server: McpServer): void;
3
- //# sourceMappingURL=filesystem-query.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem-query.d.ts","sourceRoot":"","sources":["../../src/prompts/filesystem-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyEzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6HrE"}
@@ -1,168 +0,0 @@
1
- import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
- import { z } from 'zod';
3
- import { DEFAULT_EXCLUDES, pathCompleter } from './shared.js';
4
- const OPERATIONS = {
5
- explore: {
6
- tools: `1. \`directory_tree\` maxDepth={depth} excludePatterns={excludes} → hierarchy
7
- 2. \`analyze_directory\` excludePatterns={excludes} → stats
8
- 3. \`list_directory\` sortBy="modified" → recent activity`,
9
- deliverables: `- Structure overview & folder purposes
10
- - File distribution by type
11
- - Key config/entry files
12
- - Notable findings`,
13
- requiresPattern: false,
14
- usesDepth: true,
15
- },
16
- 'find-files': {
17
- tools: `1. \`search_files\` pattern="{pattern}" excludePatterns={excludes} maxResults=100 → find matches
18
- 2. \`read_multiple_files\` → batch examine contents
19
- 3. \`get_file_info\` → metadata if needed`,
20
- deliverables: `- Matched files with sizes (up to 100 results)
21
- - Content summary of key files
22
- - Related pattern suggestions`,
23
- requiresPattern: true,
24
- usesDepth: true,
25
- maxResults: 100,
26
- },
27
- 'search-code': {
28
- tools: `1. \`search_content\` pattern="{pattern}" contextLines=2 maxResults=50 excludePatterns={excludes} → find matches
29
- 2. \`read_multiple_files\` → batch read for full context`,
30
- deliverables: `- Match count & files affected (up to 50 matches)
31
- - Key matches with surrounding context
32
- - Pattern usage analysis
33
- - Suggested refactoring if duplicates found`,
34
- requiresPattern: true,
35
- usesDepth: false,
36
- maxResults: 50,
37
- },
38
- 'analyze-size': {
39
- tools: `1. \`analyze_directory\` maxDepth={depth} excludePatterns={excludes} → size stats
40
- 2. \`directory_tree\` includeSize=true maxDepth={depth} excludePatterns={excludes} → visualize
41
- 3. \`search_files\` sortBy="size" maxResults=20 → largest files`,
42
- deliverables: `- Total size & file counts
43
- - Top 10 largest files with paths
44
- - Size breakdown by extension
45
- - Cleanup suggestions (large/unused files)`,
46
- requiresPattern: false,
47
- usesDepth: true,
48
- },
49
- 'recent-changes': {
50
- tools: `1. \`analyze_directory\` maxDepth={depth} excludePatterns={excludes} → recentlyModified
51
- 2. \`list_directory\` sortBy="modified" recursive=true maxDepth={depth}
52
- 3. \`read_multiple_files\` → batch examine recent files`,
53
- deliverables: `- Recent activity timeline (last 24h, 7d, 30d)
54
- - Most active directories
55
- - Change patterns & hot spots
56
- - Files to review`,
57
- requiresPattern: false,
58
- usesDepth: true,
59
- },
60
- };
61
- export function registerFilesystemQueryPrompt(server) {
62
- server.registerPrompt('filesystem-query', {
63
- description: 'Guided filesystem operations: explore, find, search, size, changes',
64
- argsSchema: {
65
- path: completable(z.string().min(1).describe('Target path'), pathCompleter),
66
- operation: z
67
- .enum([
68
- 'explore',
69
- 'find-files',
70
- 'search-code',
71
- 'analyze-size',
72
- 'recent-changes',
73
- ])
74
- .describe('Operation type'),
75
- pattern: z
76
- .string()
77
- .optional()
78
- .describe('Search pattern (glob for find-files, regex for search-code)'),
79
- depth: z
80
- .number()
81
- .int()
82
- .min(1)
83
- .max(20)
84
- .optional()
85
- .default(5)
86
- .describe('Max depth (1-20, default: 5)'),
87
- caseSensitive: z
88
- .boolean()
89
- .optional()
90
- .default(false)
91
- .describe('Case-sensitive search (search-code only)'),
92
- },
93
- }, ({ path, operation, pattern, depth, caseSensitive }) => {
94
- const config = OPERATIONS[operation];
95
- // Type guard - should never happen with enum validation, but TypeScript needs this
96
- if (!config) {
97
- return {
98
- messages: [
99
- {
100
- role: 'user',
101
- content: {
102
- type: 'text',
103
- text: `Unknown operation: "${operation}". Valid operations: ${Object.keys(OPERATIONS).join(', ')}`,
104
- },
105
- },
106
- ],
107
- };
108
- }
109
- const excludesJson = JSON.stringify(DEFAULT_EXCLUDES);
110
- // Validate pattern requirement
111
- if (config.requiresPattern && !pattern) {
112
- return {
113
- messages: [
114
- {
115
- role: 'user',
116
- content: {
117
- type: 'text',
118
- text: `⚠️ The "${operation}" operation requires a pattern.
119
-
120
- Please provide:
121
- - For **find-files**: a glob pattern (e.g., "**/*.ts", "src/**/*.json")
122
- - For **search-code**: a regex pattern (e.g., "TODO|FIXME", "function\\s+\\w+")`,
123
- },
124
- },
125
- ],
126
- };
127
- }
128
- // Build tools section with substitutions
129
- const tools = config.tools
130
- .replace(/{depth}/g, String(depth))
131
- .replace(/{excludes}/g, excludesJson)
132
- .replace(/{pattern}/g, pattern ?? '*');
133
- // Build search options for search-code
134
- const searchOptions = operation === 'search-code'
135
- ? ` caseSensitive=${String(caseSensitive)}`
136
- : '';
137
- const patternInfo = pattern ? ` pattern="${pattern}"` : '';
138
- const depthInfo = config.usesDepth ? ` maxDepth=${String(depth)}` : '';
139
- const promptText = `**${operation.charAt(0).toUpperCase() + operation.slice(1)}** "${path}"${patternInfo}${depthInfo}${searchOptions}
140
-
141
- ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
142
-
143
- **Default excludes:** ${DEFAULT_EXCLUDES.join(', ')}
144
-
145
- **Tools:**
146
- ${tools}
147
-
148
- **Deliverables:**
149
- ${config.deliverables}
150
-
151
- **Best Practices:**
152
- - Use \`read_multiple_files\` to batch read (more efficient than sequential reads)
153
- - Stop early if results are sufficient
154
- - Report any inaccessible paths encountered`;
155
- return {
156
- messages: [
157
- {
158
- role: 'user',
159
- content: {
160
- type: 'text',
161
- text: promptText,
162
- },
163
- },
164
- ],
165
- };
166
- });
167
- }
168
- //# sourceMappingURL=filesystem-query.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem-query.js","sourceRoot":"","sources":["../../src/prompts/filesystem-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAG9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAW9D,MAAM,UAAU,GAAoC;IAClD,OAAO,EAAE;QACP,KAAK,EAAE;;0DAE+C;QACtD,YAAY,EAAE;;;mBAGC;QACf,eAAe,EAAE,KAAK;QACtB,SAAS,EAAE,IAAI;KAChB;IACD,YAAY,EAAE;QACZ,KAAK,EAAE;;0CAE+B;QACtC,YAAY,EAAE;;8BAEY;QAC1B,eAAe,EAAE,IAAI;QACrB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,GAAG;KAChB;IACD,aAAa,EAAE;QACb,KAAK,EAAE;yDAC8C;QACrD,YAAY,EAAE;;;4CAG0B;QACxC,eAAe,EAAE,IAAI;QACrB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,EAAE;KACf;IACD,cAAc,EAAE;QACd,KAAK,EAAE;;gEAEqD;QAC5D,YAAY,EAAE;;;2CAGyB;QACvC,eAAe,EAAE,KAAK;QACtB,SAAS,EAAE,IAAI;KAChB;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE;;wDAE6C;QACpD,YAAY,EAAE;;;kBAGA;QACd,eAAe,EAAE,KAAK;QACtB,SAAS,EAAE,IAAI;KAChB;CACF,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,cAAc,CACnB,kBAAkB,EAClB;QACE,WAAW,EACT,oEAAoE;QACtE,UAAU,EAAE;YACV,IAAI,EAAE,WAAW,CACf,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EACzC,aAAa,CACd;YACD,SAAS,EAAE,CAAC;iBACT,IAAI,CAAC;gBACJ,SAAS;gBACT,YAAY;gBACZ,aAAa;gBACb,cAAc;gBACd,gBAAgB;aACjB,CAAC;iBACD,QAAQ,CAAC,gBAAgB,CAAC;YAC7B,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,6DAA6D,CAC9D;YACH,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,8BAA8B,CAAC;YAC3C,aAAa,EAAE,CAAC;iBACb,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,0CAA0C,CAAC;SACxD;KACF,EACD,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAErC,mFAAmF;QACnF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,uBAAuB,SAAS,wBAAwB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;yBACnG;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAEtD,+BAA+B;QAC/B,IAAI,MAAM,CAAC,eAAe,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,WAAW,SAAS;;;;gFAIsC;yBACjE;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,yCAAyC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;aACvB,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;aAClC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC;aACpC,OAAO,CAAC,YAAY,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;QAEzC,uCAAuC;QACvC,MAAM,aAAa,GACjB,SAAS,KAAK,aAAa;YACzB,CAAC,CAAC,kBAAkB,MAAM,CAAC,aAAa,CAAC,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvE,MAAM,UAAU,GAAG,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,WAAW,GAAG,SAAS,GAAG,aAAa;;;;wBAIlH,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGjD,KAAK;;;EAGL,MAAM,CAAC,YAAY;;;;;4CAKuB,CAAC;QAEvC,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU;qBACjB;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerFindDuplicatesPrompt(server: McpServer): void;
3
- //# sourceMappingURL=find-duplicates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-duplicates.d.ts","sourceRoot":"","sources":["../../src/prompts/find-duplicates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgFpE"}
@@ -1,77 +0,0 @@
1
- import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
- import { z } from 'zod';
3
- import { buildExcludes, pathCompleter } from './shared.js';
4
- // Extended excludes for duplicate scanning (adds minified/bundled files to base excludes)
5
- const DUPLICATE_EXCLUDES = buildExcludes('minified', 'bundled');
6
- export function registerFindDuplicatesPrompt(server) {
7
- server.registerPrompt('find-duplicates', {
8
- description: 'Find duplicate code, similar patterns, and refactoring opportunities',
9
- argsSchema: {
10
- path: completable(z.string().min(1).describe('Root path to search'), pathCompleter),
11
- pattern: z
12
- .string()
13
- .optional()
14
- .default('**/*.{ts,js,tsx,jsx,py,java}')
15
- .describe('Source file glob pattern'),
16
- searchTerm: z
17
- .string()
18
- .optional()
19
- .describe('Specific function/pattern to find duplicates of'),
20
- minLines: z
21
- .number()
22
- .int()
23
- .min(2)
24
- .max(50)
25
- .optional()
26
- .default(5)
27
- .describe('Minimum lines to consider as duplicate (default: 5)'),
28
- },
29
- }, ({ path, pattern, searchTerm, minLines }) => {
30
- const excludePatterns = JSON.stringify(DUPLICATE_EXCLUDES);
31
- const searchInstructions = searchTerm
32
- ? `\`search_content\` pattern="${searchTerm}" contextLines=2 → find all occurrences`
33
- : `\`search_content\` → find duplicates using these patterns:
34
- - Function signatures: \`(export )?(async )?(function|const)\\s+\\w+\`
35
- - Import blocks: \`^import .+ from\`
36
- - Error handlers: \`catch\\s*\\(\` or \`\\.catch\\(\`
37
- - Repeated utility patterns: loops, conditionals, API calls`;
38
- return {
39
- messages: [
40
- {
41
- role: 'user',
42
- content: {
43
- type: 'text',
44
- text: `Find duplicate code in "${path}".
45
-
46
- ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
47
-
48
- **Workflow:**
49
- 1. \`search_files\` pattern="${pattern}" excludePatterns=${excludePatterns}
50
- 2. \`analyze_directory\` excludePatterns=${excludePatterns} → identify similar-sized files (potential copies)
51
- 3. ${searchInstructions}
52
- 4. \`read_multiple_files\` → batch compare suspect files
53
-
54
- **Duplicate Detection Criteria (minimum ${minLines} lines):**
55
- - Code blocks that are character-for-character identical
56
- - Code with only variable/parameter name differences
57
- - Structural duplicates: same logic, different formatting
58
-
59
- **Report Format:**
60
- | Category | Description |
61
- |----------|-------------|
62
- | **Exact duplicates** | Identical code blocks with file:line locations |
63
- | **Near duplicates** | 80%+ similar code, highlight differences |
64
- | **Extractable patterns** | Repeated logic → shared utility/hook candidates |
65
- | **Refactoring plan** | Priority order, files affected, breaking change risks |
66
-
67
- **For each duplicate found, provide:**
68
- 1. File locations (all occurrences)
69
- 2. Code snippet (first occurrence)
70
- 3. Suggested abstraction (function name, module location)`,
71
- },
72
- },
73
- ],
74
- };
75
- });
76
- }
77
- //# sourceMappingURL=find-duplicates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-duplicates.js","sourceRoot":"","sources":["../../src/prompts/find-duplicates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAG9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,0FAA0F;AAC1F,MAAM,kBAAkB,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAEhE,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,cAAc,CACnB,iBAAiB,EACjB;QACE,WAAW,EACT,sEAAsE;QACxE,UAAU,EAAE;YACV,IAAI,EAAE,WAAW,CACf,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EACjD,aAAa,CACd;YACD,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,8BAA8B,CAAC;iBACvC,QAAQ,CAAC,0BAA0B,CAAC;YACvC,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,qDAAqD,CAAC;SACnE;KACF,EACD,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAE3D,MAAM,kBAAkB,GAAG,UAAU;YACnC,CAAC,CAAC,+BAA+B,UAAU,yCAAyC;YACpF,CAAC,CAAC;;;;4DAIkD,CAAC;QAEvD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2BAA2B,IAAI;;;;;+BAKpB,OAAO,qBAAqB,eAAe;2CAC/B,eAAe;KACrD,kBAAkB;;;0CAGmB,QAAQ;;;;;;;;;;;;;;;;0DAgBQ;qBAC7C;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerAllPrompts(server: McpServer): void;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAM1D"}
@@ -1,13 +0,0 @@
1
- import { registerAnalyzeCodebasePrompt } from './analyze-codebase.js';
2
- import { registerFilesystemQueryPrompt } from './filesystem-query.js';
3
- import { registerFindDuplicatesPrompt } from './find-duplicates.js';
4
- import { registerProjectOverviewPrompt } from './project-overview.js';
5
- import { registerSearchAndReplacePrompt } from './search-and-replace.js';
6
- export function registerAllPrompts(server) {
7
- registerProjectOverviewPrompt(server);
8
- registerAnalyzeCodebasePrompt(server);
9
- registerFindDuplicatesPrompt(server);
10
- registerSearchAndReplacePrompt(server);
11
- registerFilesystemQueryPrompt(server);
12
- }
13
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAEzE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvC,6BAA6B,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerProjectOverviewPrompt(server: McpServer): void;
3
- //# sourceMappingURL=project-overview.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-overview.d.ts","sourceRoot":"","sources":["../../src/prompts/project-overview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4CzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+FrE"}
@@ -1,122 +0,0 @@
1
- import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
- import { z } from 'zod';
3
- import { buildExcludes, pathCompleter } from './shared.js';
4
- // Extended excludes for project overview (adds framework-specific dirs)
5
- const PROJECT_EXCLUDES = buildExcludes('nextjs', 'nuxtjs');
6
- // Config files to look for by category
7
- const CONFIG_FILES = {
8
- project: [
9
- 'package.json',
10
- 'pyproject.toml',
11
- 'Cargo.toml',
12
- 'go.mod',
13
- 'pom.xml',
14
- 'build.gradle',
15
- ],
16
- typescript: ['tsconfig.json', 'jsconfig.json'],
17
- build: [
18
- 'vite.config.*',
19
- 'webpack.config.*',
20
- 'rollup.config.*',
21
- 'next.config.*',
22
- 'nuxt.config.*',
23
- ],
24
- lint: ['.eslintrc*', 'eslint.config.*', '.prettierrc*', 'biome.json'],
25
- docker: ['Dockerfile', 'docker-compose.yml', 'docker-compose.yaml'],
26
- ci: ['.github/workflows/*.yml', '.gitlab-ci.yml'],
27
- docs: ['README.md', 'CHANGELOG.md', 'CONTRIBUTING.md', 'LICENSE'],
28
- env: ['.env.example', '.env.sample', '.env.template'],
29
- };
30
- // Build flat list of priority config files for the prompt
31
- function getConfigFileList() {
32
- return Object.entries(CONFIG_FILES)
33
- .map(([category, files]) => `- **${category}**: ${files.slice(0, 3).join(', ')}`)
34
- .join('\n');
35
- }
36
- export function registerProjectOverviewPrompt(server) {
37
- server.registerPrompt('project-overview', {
38
- description: 'Quick overview of project structure, tech stack, and key files',
39
- argsSchema: {
40
- path: completable(z.string().min(1).describe('Project root path'), pathCompleter),
41
- depth: z
42
- .number()
43
- .int()
44
- .min(1)
45
- .max(10)
46
- .optional()
47
- .default(4)
48
- .describe('Tree depth (1-10, default: 4)'),
49
- includeCI: z
50
- .boolean()
51
- .optional()
52
- .default(false)
53
- .describe('Include CI/CD config analysis'),
54
- },
55
- }, ({ path, depth, includeCI }) => {
56
- const excludesJson = JSON.stringify(PROJECT_EXCLUDES);
57
- const configList = getConfigFileList();
58
- // Priority files to always try reading
59
- const priorityFiles = [
60
- 'package.json',
61
- 'README.md',
62
- 'tsconfig.json',
63
- ...(includeCI ? ['.github/workflows/*.yml'] : []),
64
- ];
65
- return {
66
- messages: [
67
- {
68
- role: 'user',
69
- content: {
70
- type: 'text',
71
- text: `Analyze project at "${path}".
72
-
73
- ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
74
-
75
- **Default excludes:** ${PROJECT_EXCLUDES.slice(0, 4).join(', ')}
76
-
77
- **Workflow:**
78
- 1. \`directory_tree\` maxDepth=${String(depth)} excludePatterns=${excludesJson} → structure
79
- 2. \`search_files\` pattern="*config*|*.json|*.toml|*.yml" excludePatterns=${excludesJson} → find config files
80
- 3. \`analyze_directory\` excludePatterns=${excludesJson} → stats & largest files
81
- 4. \`read_multiple_files\` → batch read found configs (priority: ${priorityFiles.join(', ')})
82
-
83
- **Config files to look for:**
84
- ${configList}
85
-
86
- **Deliverables:**
87
-
88
- | Section | Details |
89
- |---------|---------|
90
- | **Tech Stack** | Languages, frameworks, runtime versions |
91
- | **Package Manager** | npm/yarn/pnpm + lock file present |
92
- | **Build System** | Bundler, compiler, scripts |
93
- | **Folder Structure** | src/, lib/, tests/ conventions |
94
- | **Entry Points** | main, bin, exports in package.json |
95
- | **Dependencies** | Key deps vs devDeps, outdated indicators |
96
- | **Code Quality** | Linting, formatting, type checking setup |
97
- ${includeCI ? '| **CI/CD** | Workflows, test/deploy pipelines |' : ''}
98
-
99
- **Output Format:**
100
- \`\`\`
101
- ## Project: {name}
102
- **Type**: {monorepo|library|application|cli}
103
- **Stack**: {languages} + {frameworks}
104
- **Build**: {tool} → {output}
105
-
106
- ### Structure
107
- {tree summary}
108
-
109
- ### Key Findings
110
- - {finding 1}
111
- - {finding 2}
112
-
113
- ### Recommendations
114
- - {recommendation if any}
115
- \`\`\``,
116
- },
117
- },
118
- ],
119
- };
120
- });
121
- }
122
- //# sourceMappingURL=project-overview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-overview.js","sourceRoot":"","sources":["../../src/prompts/project-overview.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerSearchAndReplacePrompt(server: McpServer): void;
3
- //# sourceMappingURL=search-and-replace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-and-replace.d.ts","sourceRoot":"","sources":["../../src/prompts/search-and-replace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkJtE"}