@gemini-designer/mcp-server 0.1.39 → 0.1.41

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 (38) hide show
  1. package/dist/context/builder.d.ts.map +1 -1
  2. package/dist/context/builder.js +29 -28
  3. package/dist/context/builder.js.map +1 -1
  4. package/dist/output/file-bundle.d.ts +1 -1
  5. package/dist/tools/catalog-components.d.ts.map +1 -1
  6. package/dist/tools/catalog-components.js +29 -3
  7. package/dist/tools/catalog-components.js.map +1 -1
  8. package/dist/tools/detect-ui-stack.d.ts.map +1 -1
  9. package/dist/tools/detect-ui-stack.js +45 -14
  10. package/dist/tools/detect-ui-stack.js.map +1 -1
  11. package/dist/tools/repo-search.d.ts.map +1 -1
  12. package/dist/tools/repo-search.js +26 -120
  13. package/dist/tools/repo-search.js.map +1 -1
  14. package/dist/tools/repo-tree.d.ts.map +1 -1
  15. package/dist/tools/repo-tree.js +44 -19
  16. package/dist/tools/repo-tree.js.map +1 -1
  17. package/dist/utils/concurrency.d.ts +2 -0
  18. package/dist/utils/concurrency.d.ts.map +1 -0
  19. package/dist/utils/concurrency.js +16 -0
  20. package/dist/utils/concurrency.js.map +1 -0
  21. package/dist/utils/ripgrep.d.ts +45 -0
  22. package/dist/utils/ripgrep.d.ts.map +1 -0
  23. package/dist/utils/ripgrep.js +312 -0
  24. package/dist/utils/ripgrep.js.map +1 -0
  25. package/dist/utils/walk.d.ts +1 -0
  26. package/dist/utils/walk.d.ts.map +1 -1
  27. package/dist/utils/walk.js +2 -1
  28. package/dist/utils/walk.js.map +1 -1
  29. package/package.json +2 -1
  30. package/src/__tests__/ripgrep.test.ts +136 -0
  31. package/src/context/builder.ts +27 -30
  32. package/src/tools/catalog-components.ts +28 -3
  33. package/src/tools/detect-ui-stack.ts +51 -14
  34. package/src/tools/repo-search.ts +27 -121
  35. package/src/tools/repo-tree.ts +44 -17
  36. package/src/utils/concurrency.ts +21 -0
  37. package/src/utils/ripgrep.ts +360 -0
  38. package/src/utils/walk.ts +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"repo-tree.js","sourceRoot":"","sources":["../../src/tools/repo-tree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repo-tree.js","sourceRoot":"","sources":["../../src/tools/repo-tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function mapWithConcurrency<T, R>(items: T[], concurrency: number, mapper: (item: T, index: number) => Promise<R>): Promise<R[]>;
2
+ //# sourceMappingURL=concurrency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/utils/concurrency.ts"],"names":[],"mappings":"AAAA,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,CAAC,EAAE,EACV,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,CAed"}
@@ -0,0 +1,16 @@
1
+ export async function mapWithConcurrency(items, concurrency, mapper) {
2
+ const limit = Math.max(1, Math.floor(concurrency));
3
+ const results = new Array(items.length);
4
+ let nextIndex = 0;
5
+ const workers = Array.from({ length: Math.min(limit, items.length) }, async () => {
6
+ while (true) {
7
+ const idx = nextIndex++;
8
+ if (idx >= items.length)
9
+ break;
10
+ results[idx] = await mapper(items[idx], idx);
11
+ }
12
+ });
13
+ await Promise.all(workers);
14
+ return results;
15
+ }
16
+ //# sourceMappingURL=concurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../src/utils/concurrency.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAU,EACV,WAAmB,EACnB,MAA8C;IAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAC/E,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;YACxB,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM;gBAAE,MAAM;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,45 @@
1
+ export declare function resolveRipgrepPath(): Promise<string>;
2
+ export interface RipgrepMatch {
3
+ path: string;
4
+ line: number;
5
+ column: number;
6
+ preview?: string;
7
+ }
8
+ export interface RipgrepSearchOptions {
9
+ cwd: string;
10
+ pattern: string;
11
+ fixedStrings: boolean;
12
+ caseSensitive: boolean;
13
+ includeHidden: boolean;
14
+ includeBinary: boolean;
15
+ maxFileBytes: number;
16
+ maxResults: number;
17
+ globs?: string[];
18
+ usePcre2?: boolean;
19
+ shouldIgnorePath?: (absPath: string) => boolean;
20
+ includePreview?: boolean;
21
+ previewMaxChars?: number;
22
+ }
23
+ export interface RipgrepSearchResult {
24
+ matches: RipgrepMatch[];
25
+ scannedFilesCount: number;
26
+ truncated: boolean;
27
+ }
28
+ export interface RipgrepListFilesOptions {
29
+ cwd: string;
30
+ includeHidden: boolean;
31
+ noIgnore: boolean;
32
+ maxFiles: number;
33
+ maxDepth?: number;
34
+ globs?: string[];
35
+ shouldIgnorePath?: (absPath: string) => boolean;
36
+ cacheTtlMs?: number;
37
+ }
38
+ export interface RipgrepListFilesResult {
39
+ files: string[];
40
+ truncated: boolean;
41
+ }
42
+ export declare function ripgrepListFiles(opts: RipgrepListFilesOptions): Promise<RipgrepListFilesResult>;
43
+ export declare function extensionGlob(extensions: string[]): string | null;
44
+ export declare function ripgrepJsonSearch(opts: RipgrepSearchOptions): Promise<RipgrepSearchResult>;
45
+ //# sourceMappingURL=ripgrep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ripgrep.d.ts","sourceRoot":"","sources":["../../src/utils/ripgrep.ts"],"names":[],"mappings":"AAyBA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAc1D;AAsCD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAwFD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAarG;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+HhG"}
@@ -0,0 +1,312 @@
1
+ import { spawn } from 'node:child_process';
2
+ import * as path from 'node:path';
3
+ import * as readline from 'node:readline';
4
+ let rgPathPromise;
5
+ function isRecord(value) {
6
+ return typeof value === 'object' && value !== null;
7
+ }
8
+ function extractRgPath(mod) {
9
+ if (!isRecord(mod))
10
+ return undefined;
11
+ const direct = mod.rgPath;
12
+ if (typeof direct === 'string' && direct.length > 0)
13
+ return direct;
14
+ const def = mod.default;
15
+ if (isRecord(def)) {
16
+ const nested = def.rgPath;
17
+ if (typeof nested === 'string' && nested.length > 0)
18
+ return nested;
19
+ }
20
+ return undefined;
21
+ }
22
+ export async function resolveRipgrepPath() {
23
+ if (!rgPathPromise) {
24
+ rgPathPromise = (async () => {
25
+ try {
26
+ const mod = (await import('@vscode/ripgrep'));
27
+ const rgPath = extractRgPath(mod);
28
+ if (typeof rgPath === 'string' && rgPath.length > 0)
29
+ return rgPath;
30
+ }
31
+ catch {
32
+ // Fall back to system rg.
33
+ }
34
+ return 'rg';
35
+ })();
36
+ }
37
+ return rgPathPromise;
38
+ }
39
+ function getPathText(data) {
40
+ if (!isRecord(data))
41
+ return undefined;
42
+ const p = data.path;
43
+ if (!isRecord(p))
44
+ return undefined;
45
+ const t = p.text;
46
+ return typeof t === 'string' && t.length > 0 ? t : undefined;
47
+ }
48
+ function getLineNumber(data) {
49
+ if (!isRecord(data))
50
+ return undefined;
51
+ const n = data.line_number;
52
+ return typeof n === 'number' && Number.isFinite(n) ? n : undefined;
53
+ }
54
+ function getLineText(data) {
55
+ if (!isRecord(data))
56
+ return '';
57
+ const lines = data.lines;
58
+ if (!isRecord(lines))
59
+ return '';
60
+ return typeof lines.text === 'string' ? lines.text : '';
61
+ }
62
+ function getSubmatchStarts(data) {
63
+ if (!isRecord(data))
64
+ return [];
65
+ const subs = data.submatches;
66
+ if (!Array.isArray(subs))
67
+ return [];
68
+ const out = [];
69
+ for (const sm of subs) {
70
+ if (!isRecord(sm))
71
+ continue;
72
+ const start = sm.start;
73
+ if (typeof start === 'number' && Number.isFinite(start))
74
+ out.push(start);
75
+ }
76
+ return out;
77
+ }
78
+ const filesCache = new Map();
79
+ function makeFilesCacheKey(opts) {
80
+ return JSON.stringify({
81
+ cwd: opts.cwd,
82
+ includeHidden: opts.includeHidden,
83
+ noIgnore: opts.noIgnore,
84
+ maxFiles: opts.maxFiles,
85
+ maxDepth: opts.maxDepth ?? null,
86
+ globs: opts.globs || [],
87
+ });
88
+ }
89
+ function pruneFilesCache(now, maxEntries = 50) {
90
+ for (const [k, v] of filesCache) {
91
+ if (v.expiresAt <= now)
92
+ filesCache.delete(k);
93
+ }
94
+ if (filesCache.size <= maxEntries)
95
+ return;
96
+ const entries = [...filesCache.entries()].sort((a, b) => a[1].expiresAt - b[1].expiresAt);
97
+ for (let i = 0; i < entries.length - maxEntries; i++) {
98
+ filesCache.delete(entries[i][0]);
99
+ }
100
+ }
101
+ async function ripgrepListFilesUncached(opts) {
102
+ const rgPath = await resolveRipgrepPath();
103
+ const args = ['--no-config', '--files', '--no-messages'];
104
+ if (opts.includeHidden)
105
+ args.push('--hidden');
106
+ if (opts.noIgnore)
107
+ args.push('--no-ignore');
108
+ if (typeof opts.maxDepth === 'number')
109
+ args.push('--max-depth', String(opts.maxDepth));
110
+ for (const g of opts.globs || [])
111
+ args.push('--glob', g);
112
+ const child = spawn(rgPath, args, {
113
+ cwd: opts.cwd,
114
+ stdio: ['ignore', 'pipe', 'pipe'],
115
+ windowsHide: true,
116
+ });
117
+ const files = [];
118
+ let truncated = false;
119
+ const stderrChunks = [];
120
+ child.stderr.setEncoding('utf8');
121
+ child.stderr.on('data', (d) => stderrChunks.push(String(d)));
122
+ const rl = readline.createInterface({ input: child.stdout });
123
+ const stopEarly = () => {
124
+ if (truncated)
125
+ return;
126
+ truncated = true;
127
+ try {
128
+ child.kill();
129
+ }
130
+ catch {
131
+ // ignore
132
+ }
133
+ try {
134
+ rl.close();
135
+ }
136
+ catch {
137
+ // ignore
138
+ }
139
+ };
140
+ rl.on('line', (line) => {
141
+ if (truncated)
142
+ return;
143
+ const rel = line.replace(/\r?\n$/, '').trim();
144
+ if (!rel)
145
+ return;
146
+ const abs = path.resolve(opts.cwd, rel);
147
+ if (opts.shouldIgnorePath?.(abs))
148
+ return;
149
+ files.push(rel.replace(/\\/g, '/'));
150
+ if (files.length >= opts.maxFiles)
151
+ stopEarly();
152
+ });
153
+ const exit = await new Promise((resolve) => {
154
+ child.on('close', (code, signal) => resolve({ code, signal }));
155
+ });
156
+ if (!truncated && exit.code === 2) {
157
+ const stderr = stderrChunks.join('').trim();
158
+ const msg = stderr.length > 0 ? stderr : 'ripgrep failed';
159
+ throw new Error(msg);
160
+ }
161
+ return { files, truncated };
162
+ }
163
+ export async function ripgrepListFiles(opts) {
164
+ const ttlMs = opts.cacheTtlMs ?? 0;
165
+ if (ttlMs <= 0)
166
+ return ripgrepListFilesUncached(opts);
167
+ const now = Date.now();
168
+ pruneFilesCache(now);
169
+ const key = makeFilesCacheKey(opts);
170
+ const cached = filesCache.get(key);
171
+ if (cached && cached.expiresAt > now)
172
+ return cached.promise;
173
+ const promise = ripgrepListFilesUncached({ ...opts, cacheTtlMs: 0 });
174
+ filesCache.set(key, { expiresAt: now + ttlMs, promise });
175
+ return promise;
176
+ }
177
+ export function extensionGlob(extensions) {
178
+ const cleaned = [...new Set(extensions.map((e) => e.trim()).filter(Boolean))]
179
+ .map((e) => (e.startsWith('.') ? e.slice(1) : e))
180
+ .filter(Boolean);
181
+ if (cleaned.length === 0)
182
+ return null;
183
+ if (cleaned.length === 1)
184
+ return `**/*.${cleaned[0]}`;
185
+ return `**/*.{${cleaned.join(',')}}`;
186
+ }
187
+ export async function ripgrepJsonSearch(opts) {
188
+ const rgPath = await resolveRipgrepPath();
189
+ const args = ['--no-config', '--json', '--no-messages'];
190
+ if (opts.includeHidden)
191
+ args.push('--hidden');
192
+ if (opts.includeBinary)
193
+ args.push('--text');
194
+ if (!opts.caseSensitive)
195
+ args.push('-i');
196
+ if (opts.fixedStrings)
197
+ args.push('--fixed-strings');
198
+ if (opts.usePcre2 && !opts.fixedStrings)
199
+ args.push('--pcre2');
200
+ args.push('--max-filesize', String(opts.maxFileBytes));
201
+ for (const g of opts.globs || []) {
202
+ args.push('--glob', g);
203
+ }
204
+ args.push(opts.pattern);
205
+ const child = spawn(rgPath, args, {
206
+ cwd: opts.cwd,
207
+ stdio: ['ignore', 'pipe', 'pipe'],
208
+ windowsHide: true,
209
+ });
210
+ const matches = [];
211
+ const scanned = new Set();
212
+ const ignoredRelPaths = new Set();
213
+ let truncated = false;
214
+ const includePreview = opts.includePreview !== false;
215
+ const previewMaxChars = opts.previewMaxChars ?? 240;
216
+ const stderrChunks = [];
217
+ child.stderr.setEncoding('utf8');
218
+ child.stderr.on('data', (d) => stderrChunks.push(String(d)));
219
+ const rl = readline.createInterface({ input: child.stdout });
220
+ const stopEarly = () => {
221
+ if (truncated)
222
+ return;
223
+ truncated = true;
224
+ try {
225
+ child.kill();
226
+ }
227
+ catch {
228
+ // ignore
229
+ }
230
+ try {
231
+ rl.close();
232
+ }
233
+ catch {
234
+ // ignore
235
+ }
236
+ };
237
+ rl.on('line', (line) => {
238
+ if (truncated)
239
+ return;
240
+ let evt;
241
+ try {
242
+ const parsed = JSON.parse(line);
243
+ if (!isRecord(parsed) || typeof parsed.type !== 'string')
244
+ return;
245
+ evt = parsed;
246
+ }
247
+ catch {
248
+ // If we terminate early, the last line can be truncated; ignore parse failures.
249
+ return;
250
+ }
251
+ if (!evt)
252
+ return;
253
+ if (evt.type === 'begin') {
254
+ const rel = getPathText(evt.data);
255
+ if (!rel)
256
+ return;
257
+ const abs = path.resolve(opts.cwd, rel);
258
+ if (opts.shouldIgnorePath?.(abs)) {
259
+ ignoredRelPaths.add(rel);
260
+ return;
261
+ }
262
+ scanned.add(rel);
263
+ return;
264
+ }
265
+ if (evt.type === 'match') {
266
+ const rel = getPathText(evt.data);
267
+ if (!rel)
268
+ return;
269
+ if (ignoredRelPaths.has(rel))
270
+ return;
271
+ const abs = path.resolve(opts.cwd, rel);
272
+ if (opts.shouldIgnorePath?.(abs)) {
273
+ ignoredRelPaths.add(rel);
274
+ return;
275
+ }
276
+ const lineNumber = getLineNumber(evt.data);
277
+ if (!lineNumber)
278
+ return;
279
+ const rawLine = getLineText(evt.data);
280
+ const preview = includePreview ? rawLine.replace(/\r?\n$/, '').slice(0, previewMaxChars) : undefined;
281
+ const starts = getSubmatchStarts(evt.data);
282
+ if (starts.length === 0) {
283
+ if (matches.length < opts.maxResults) {
284
+ matches.push({ path: rel.replace(/\\/g, '/'), line: lineNumber, column: 1, preview });
285
+ if (matches.length >= opts.maxResults)
286
+ stopEarly();
287
+ }
288
+ return;
289
+ }
290
+ for (const start of starts) {
291
+ if (matches.length >= opts.maxResults) {
292
+ stopEarly();
293
+ break;
294
+ }
295
+ matches.push({ path: rel.replace(/\\/g, '/'), line: lineNumber, column: start + 1, preview });
296
+ }
297
+ return;
298
+ }
299
+ });
300
+ const exit = await new Promise((resolve) => {
301
+ child.on('close', (code, signal) => resolve({ code, signal }));
302
+ });
303
+ // rg exit codes:
304
+ // 0 = match found, 1 = no matches, 2 = error.
305
+ if (!truncated && exit.code === 2) {
306
+ const stderr = stderrChunks.join('').trim();
307
+ const msg = stderr.length > 0 ? stderr : 'ripgrep failed';
308
+ throw new Error(msg);
309
+ }
310
+ return { matches, scannedFilesCount: scanned.size, truncated };
311
+ }
312
+ //# sourceMappingURL=ripgrep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ripgrep.js","sourceRoot":"","sources":["../../src/utils/ripgrep.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export interface WalkOptions {
10
10
  excludeDirNames?: string[];
11
11
  maxFiles?: number;
12
12
  }
13
+ export declare const DEFAULT_EXCLUDE_DIR_NAMES: string[];
13
14
  export declare function walkFiles(rootDir: string, options?: WalkOptions): string[];
14
15
  export declare function toPosixPath(p: string): string;
15
16
  //# sourceMappingURL=walk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,WAAW;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,EAAE,CA2C9E;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C"}
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,WAAW;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD,eAAO,MAAM,yBAAyB,UAAuB,CAAC;AAE9D,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM,EAAE,CAyC9E;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C"}
@@ -18,9 +18,10 @@ const DEFAULT_EXCLUDE_DIRS = [
18
18
  '.cache',
19
19
  'coverage',
20
20
  ];
21
+ export const DEFAULT_EXCLUDE_DIR_NAMES = DEFAULT_EXCLUDE_DIRS;
21
22
  export function walkFiles(rootDir, options = {}) {
22
23
  const includeExtensions = (options.includeExtensions || []).map((e) => e.toLowerCase());
23
- const exclude = new Set((options.excludeDirNames || DEFAULT_EXCLUDE_DIRS).map((d) => d.toLowerCase()));
24
+ const exclude = new Set((options.excludeDirNames || DEFAULT_EXCLUDE_DIR_NAMES).map((d) => d.toLowerCase()));
24
25
  const maxFiles = typeof options.maxFiles === 'number' ? options.maxFiles : 10_000;
25
26
  const results = [];
26
27
  const queue = [rootDir];
@@ -1 +1 @@
1
- {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAQlC,MAAM,oBAAoB,GAAG;IAC3B,cAAc;IACd,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;CACX,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,UAAuB,EAAE;IAClE,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,CAAC,OAAO,CAAC,eAAe,IAAI,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAC9E,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAElF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC7B,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;gBAAE,OAAO,OAAO,CAAC;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBAAE,SAAS;gBAClD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC5B,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAQlC,MAAM,oBAAoB,GAAG;IAC3B,cAAc;IACd,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAAC;AAE9D,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,UAAuB,EAAE;IAClE,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,IAAI,yBAAyB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAElF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC7B,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ;gBAAE,OAAO,OAAO,CAAC;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBAAE,SAAS;gBAClD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC5B,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gemini-designer/mcp-server",
3
- "version": "0.1.39",
3
+ "version": "0.1.41",
4
4
  "description": "MCP server for AI-powered UI design and code generation with Gemini",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -41,6 +41,7 @@
41
41
  "dependencies": {
42
42
  "@google/generative-ai": "^0.21.0",
43
43
  "@modelcontextprotocol/sdk": "^1.12.0",
44
+ "@vscode/ripgrep": "^1.17.0",
44
45
  "prettier": "^3.4.0",
45
46
  "typescript": "^5.7.0",
46
47
  "zod": "^3.24.0"
@@ -0,0 +1,136 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import * as fs from 'node:fs';
3
+ import * as os from 'node:os';
4
+ import * as path from 'node:path';
5
+ import { extensionGlob, ripgrepJsonSearch, ripgrepListFiles } from '../utils/ripgrep.js';
6
+ import { isSensitiveFile } from '../context/filter.js';
7
+
8
+ function mkTmpDir(): string {
9
+ return fs.mkdtempSync(path.join(os.tmpdir(), 'gd-rg-'));
10
+ }
11
+
12
+ describe('ripgrepJsonSearch', () => {
13
+ it('finds matches with line/column and preview', async () => {
14
+ const dir = mkTmpDir();
15
+ fs.mkdirSync(path.join(dir, 'src'), { recursive: true });
16
+ fs.writeFileSync(path.join(dir, 'src', 'a.ts'), 'hello world\nsecond line\nhello again\n', 'utf8');
17
+
18
+ const res = await ripgrepJsonSearch({
19
+ cwd: dir,
20
+ pattern: 'hello',
21
+ fixedStrings: true,
22
+ caseSensitive: true,
23
+ includeHidden: true,
24
+ includeBinary: false,
25
+ maxFileBytes: 1_000_000,
26
+ maxResults: 50,
27
+ shouldIgnorePath: (abs) => isSensitiveFile(abs),
28
+ includePreview: true,
29
+ previewMaxChars: 240,
30
+ });
31
+
32
+ expect(res.matches.length).toBeGreaterThanOrEqual(2);
33
+ expect(res.matches.every((m) => m.path === 'src/a.ts')).toBe(true);
34
+ expect(res.matches[0].line).toBeGreaterThanOrEqual(1);
35
+ expect(res.matches[0].column).toBeGreaterThanOrEqual(1);
36
+ expect(typeof res.matches[0].preview).toBe('string');
37
+ });
38
+
39
+ it('filters sensitive paths via shouldIgnorePath', async () => {
40
+ const dir = mkTmpDir();
41
+ fs.mkdirSync(path.join(dir, 'api'), { recursive: true });
42
+ fs.writeFileSync(path.join(dir, 'api', 'secret.txt'), 'do not leak\nhello\n', 'utf8');
43
+
44
+ const res = await ripgrepJsonSearch({
45
+ cwd: dir,
46
+ pattern: 'hello',
47
+ fixedStrings: true,
48
+ caseSensitive: true,
49
+ includeHidden: true,
50
+ includeBinary: false,
51
+ maxFileBytes: 1_000_000,
52
+ maxResults: 50,
53
+ shouldIgnorePath: (abs) => isSensitiveFile(abs),
54
+ includePreview: true,
55
+ });
56
+
57
+ expect(res.matches).toHaveLength(0);
58
+ });
59
+
60
+ it('sets truncated when maxResults is hit', async () => {
61
+ const dir = mkTmpDir();
62
+ fs.writeFileSync(path.join(dir, 'a.txt'), 'x x x x x x x x x x\n', 'utf8');
63
+
64
+ const res = await ripgrepJsonSearch({
65
+ cwd: dir,
66
+ pattern: 'x',
67
+ fixedStrings: true,
68
+ caseSensitive: true,
69
+ includeHidden: true,
70
+ includeBinary: false,
71
+ maxFileBytes: 1_000_000,
72
+ maxResults: 1,
73
+ includePreview: true,
74
+ });
75
+
76
+ expect(res.matches).toHaveLength(1);
77
+ expect(res.truncated).toBe(true);
78
+ });
79
+ });
80
+
81
+ describe('ripgrepListFiles', () => {
82
+ it('lists files with maxDepth and globs', async () => {
83
+ const dir = mkTmpDir();
84
+ fs.mkdirSync(path.join(dir, 'a', 'b', 'c'), { recursive: true });
85
+ fs.writeFileSync(path.join(dir, 'root.txt'), 'x', 'utf8');
86
+ fs.writeFileSync(path.join(dir, 'a', 'a.tsx'), 'x', 'utf8');
87
+ fs.writeFileSync(path.join(dir, 'a', 'b', 'deep.tsx'), 'x', 'utf8');
88
+ fs.writeFileSync(path.join(dir, 'a', 'b', 'c', 'too-deep.tsx'), 'x', 'utf8');
89
+
90
+ const files = await ripgrepListFiles({
91
+ cwd: dir,
92
+ includeHidden: true,
93
+ noIgnore: true,
94
+ maxFiles: 100,
95
+ maxDepth: 3,
96
+ globs: [extensionGlob(['.tsx'])!],
97
+ });
98
+
99
+ expect(files.files).toContain('a/a.tsx');
100
+ expect(files.files).toContain('a/b/deep.tsx');
101
+ expect(files.files).not.toContain('a/b/c/too-deep.tsx');
102
+ });
103
+
104
+ it('supports shouldIgnorePath filtering', async () => {
105
+ const dir = mkTmpDir();
106
+ fs.mkdirSync(path.join(dir, 'api'), { recursive: true });
107
+ fs.writeFileSync(path.join(dir, 'api', 'secret.txt'), 'x', 'utf8');
108
+ fs.writeFileSync(path.join(dir, 'ok.txt'), 'x', 'utf8');
109
+
110
+ const files = await ripgrepListFiles({
111
+ cwd: dir,
112
+ includeHidden: true,
113
+ noIgnore: true,
114
+ maxFiles: 100,
115
+ shouldIgnorePath: (abs) => isSensitiveFile(abs),
116
+ });
117
+
118
+ expect(files.files).toContain('ok.txt');
119
+ expect(files.files.some((p) => p.includes('api/'))).toBe(false);
120
+ });
121
+
122
+ it('sets truncated when maxFiles is hit', async () => {
123
+ const dir = mkTmpDir();
124
+ for (let i = 0; i < 20; i++) fs.writeFileSync(path.join(dir, `f${i}.txt`), 'x', 'utf8');
125
+
126
+ const files = await ripgrepListFiles({
127
+ cwd: dir,
128
+ includeHidden: true,
129
+ noIgnore: true,
130
+ maxFiles: 1,
131
+ });
132
+
133
+ expect(files.files).toHaveLength(1);
134
+ expect(files.truncated).toBe(true);
135
+ });
136
+ });