@aexol/spectral 0.9.43 → 0.9.44

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 (39) hide show
  1. package/dist/extensions/seo/analyzers/content-optimize.d.ts +3 -0
  2. package/dist/extensions/seo/analyzers/content-optimize.d.ts.map +1 -0
  3. package/dist/extensions/seo/analyzers/content-optimize.js +190 -0
  4. package/dist/extensions/seo/analyzers/crawler.d.ts +4 -0
  5. package/dist/extensions/seo/analyzers/crawler.d.ts.map +1 -0
  6. package/dist/extensions/seo/analyzers/crawler.js +288 -0
  7. package/dist/extensions/seo/analyzers/keywords.d.ts +9 -0
  8. package/dist/extensions/seo/analyzers/keywords.d.ts.map +1 -0
  9. package/dist/extensions/seo/analyzers/keywords.js +183 -0
  10. package/dist/extensions/seo/analyzers/performance.d.ts +6 -0
  11. package/dist/extensions/seo/analyzers/performance.d.ts.map +1 -0
  12. package/dist/extensions/seo/analyzers/performance.js +257 -0
  13. package/dist/extensions/seo/analyzers/readability.d.ts +4 -0
  14. package/dist/extensions/seo/analyzers/readability.d.ts.map +1 -0
  15. package/dist/extensions/seo/analyzers/readability.js +121 -0
  16. package/dist/extensions/seo/index.d.ts.map +1 -1
  17. package/dist/extensions/seo/index.js +47 -9
  18. package/dist/extensions/seo/tools/batch.d.ts +4 -0
  19. package/dist/extensions/seo/tools/batch.d.ts.map +1 -0
  20. package/dist/extensions/seo/tools/batch.js +193 -0
  21. package/dist/extensions/seo/tools/crawl.d.ts +4 -0
  22. package/dist/extensions/seo/tools/crawl.d.ts.map +1 -0
  23. package/dist/extensions/seo/tools/crawl.js +166 -0
  24. package/dist/extensions/seo/tools/full-audit.d.ts +1 -0
  25. package/dist/extensions/seo/tools/full-audit.d.ts.map +1 -1
  26. package/dist/extensions/seo/tools/keywords.d.ts +4 -0
  27. package/dist/extensions/seo/tools/keywords.d.ts.map +1 -0
  28. package/dist/extensions/seo/tools/keywords.js +234 -0
  29. package/dist/extensions/seo/tools/performance.d.ts +4 -0
  30. package/dist/extensions/seo/tools/performance.d.ts.map +1 -0
  31. package/dist/extensions/seo/tools/performance.js +201 -0
  32. package/dist/extensions/seo/types.d.ts +156 -0
  33. package/dist/extensions/seo/types.d.ts.map +1 -1
  34. package/dist/extensions/seo/utils/url-safety.d.ts.map +1 -1
  35. package/dist/extensions/seo/utils/url-safety.js +7 -5
  36. package/dist/server/handlers/paths-pick-directory.d.ts +0 -27
  37. package/dist/server/handlers/paths-pick-directory.d.ts.map +1 -1
  38. package/dist/server/handlers/paths-pick-directory.js +86 -92
  39. package/package.json +1 -1
@@ -0,0 +1,201 @@
1
+ import { fetchPage } from "../utils/fetcher.js";
2
+ import { calculatePerformanceFromFetch, analyzePageWeight, analyzeRenderBlocking, analyzeFonts, } from "../analyzers/performance.js";
3
+ import { errorResult, textResult } from "./helpers.js";
4
+ export function registerPerformanceTools(ext, config) {
5
+ // === seo_performance ===
6
+ const perfTool = {
7
+ name: "seo_performance",
8
+ label: "SEO Performance Audit (Core Web Vitals)",
9
+ description: "Estimate Core Web Vitals metrics from page structure analysis. " +
10
+ "Reports LCP (Largest Contentful Paint), CLS (Cumulative Layout Shift), TBT (Total Blocking Time), FCP, and TTFB. " +
11
+ "Each metric is rated: good, needs-improvement, or poor against Google's thresholds. " +
12
+ "Note: These are heuristic estimates based on page complexity. For accurate numbers use Lighthouse or PageSpeed Insights.",
13
+ promptSnippet: "`seo_performance { url }` — estimate Core Web Vitals (LCP, CLS, TBT) with ratings",
14
+ parameters: {
15
+ type: "object",
16
+ properties: {
17
+ url: { type: "string", description: "The URL to analyze." },
18
+ },
19
+ required: ["url"],
20
+ },
21
+ async execute(_toolCallId, params) {
22
+ const { url } = params;
23
+ try {
24
+ const fetchResult = await fetchPage(url, config);
25
+ const perf = calculatePerformanceFromFetch(fetchResult, url);
26
+ const lines = [
27
+ `✓ Performance Estimate: ${perf.url}`,
28
+ ``,
29
+ `Overall CWV Score: ${perf.score}/100`,
30
+ ``,
31
+ `Core Web Vitals:`,
32
+ ` LCP: ${perf.lcp.value}ms — ${perf.lcp.rating.toUpperCase()}`,
33
+ ` CLS: ${perf.cls.value} — ${perf.cls.rating.toUpperCase()}`,
34
+ ` TBT: ${perf.tbt.value}ms — ${perf.tbt.rating.toUpperCase()}`,
35
+ ``,
36
+ `Other Metrics:`,
37
+ ` FCP: ${perf.fcp}ms`,
38
+ ` TTFB: ${perf.ttfb}ms`,
39
+ ``,
40
+ `Google Thresholds:`,
41
+ ` LCP: good ≤ 2500ms, poor > 4000ms`,
42
+ ` CLS: good ≤ 0.1, poor > 0.25`,
43
+ ` TBT: good ≤ 200ms, poor > 600ms`,
44
+ ];
45
+ return textResult(lines.join("\n"), { perf });
46
+ }
47
+ catch (err) {
48
+ return errorResult(err instanceof Error ? err.message : String(err));
49
+ }
50
+ },
51
+ };
52
+ // === seo_page_weight ===
53
+ const weightTool = {
54
+ name: "seo_page_weight",
55
+ label: "SEO Page Weight Analysis",
56
+ description: "Analyze total page weight and resource breakdown (HTML, CSS, JS, images, fonts). " +
57
+ "Identifies heavy resources that slow down page load. " +
58
+ "Helps find optimization opportunities: large images, bloated CSS/JS bundles, heavy fonts.",
59
+ promptSnippet: "`seo_page_weight { url }` — analyze page weight by resource type",
60
+ parameters: {
61
+ type: "object",
62
+ properties: {
63
+ url: { type: "string", description: "The URL to analyze." },
64
+ },
65
+ required: ["url"],
66
+ },
67
+ async execute(_toolCallId, params) {
68
+ const { url } = params;
69
+ try {
70
+ const fetchResult = await fetchPage(url, config);
71
+ const weight = analyzePageWeight(fetchResult, url);
72
+ const lines = [
73
+ `✓ Page Weight: ${weight.url}`,
74
+ ``,
75
+ `Total weight: ~${weight.totalKb} KB`,
76
+ ` HTML: ${weight.htmlKb} KB`,
77
+ ` CSS: ${weight.cssKb} KB`,
78
+ ` JS: ${weight.jsKb} KB`,
79
+ ` Images: ${weight.imageKb} KB`,
80
+ ` Fonts: ${weight.fontKb} KB`,
81
+ ``,
82
+ `Resource count: ${weight.resourceCount}`,
83
+ ];
84
+ if (weight.topHeavyResources.length > 0) {
85
+ lines.push(``, `Heaviest resources:`);
86
+ for (const r of weight.topHeavyResources) {
87
+ lines.push(` ${r.type.toUpperCase()}: ${r.sizeKb} KB — ${r.url}`);
88
+ }
89
+ }
90
+ if (weight.totalKb > 5000) {
91
+ lines.push(``, `⚠ Page exceeds 5MB — may impact mobile performance.`);
92
+ }
93
+ else if (weight.totalKb > 2000) {
94
+ lines.push(``, `⚡ Page weight is above average. Consider optimizing assets.`);
95
+ }
96
+ return textResult(lines.join("\n"), { weight });
97
+ }
98
+ catch (err) {
99
+ return errorResult(err instanceof Error ? err.message : String(err));
100
+ }
101
+ },
102
+ };
103
+ // === seo_render_blocking ===
104
+ const blockingTool = {
105
+ name: "seo_render_blocking",
106
+ label: "SEO Render-Blocking Resource Audit",
107
+ description: "Detect render-blocking CSS and JavaScript in the <head> that delay First Paint. " +
108
+ "Lists blocking stylesheets and scripts with recommendations: inline critical CSS, " +
109
+ "add async/defer to scripts, code-split bundles.",
110
+ promptSnippet: "`seo_render_blocking { url }` — find render-blocking CSS/JS with fixes",
111
+ parameters: {
112
+ type: "object",
113
+ properties: {
114
+ url: { type: "string", description: "The URL to analyze." },
115
+ },
116
+ required: ["url"],
117
+ },
118
+ async execute(_toolCallId, params) {
119
+ const { url } = params;
120
+ try {
121
+ const fetchResult = await fetchPage(url, config);
122
+ const blocking = analyzeRenderBlocking(fetchResult, url);
123
+ const lines = [
124
+ `✓ Render-Blocking Resources: ${blocking.url}`,
125
+ ``,
126
+ `Blocking CSS: ${blocking.blockingCss.length}`,
127
+ `Blocking JS: ${blocking.blockingJs.length}`,
128
+ `Total blocking: ${blocking.totalBlockingUrls}`,
129
+ ``,
130
+ ];
131
+ if (blocking.blockingCss.length > 0) {
132
+ lines.push(`Blocking Stylesheets:`);
133
+ for (const css of blocking.blockingCss) {
134
+ lines.push(` ${css.href}`);
135
+ }
136
+ }
137
+ if (blocking.blockingJs.length > 0) {
138
+ lines.push(`Blocking Scripts:`);
139
+ for (const js of blocking.blockingJs) {
140
+ lines.push(` ${js.src}`);
141
+ }
142
+ }
143
+ lines.push(``, `Recommendations:`);
144
+ for (const rec of blocking.recommendations) {
145
+ lines.push(` • ${rec}`);
146
+ }
147
+ return textResult(lines.join("\n"), { blocking });
148
+ }
149
+ catch (err) {
150
+ return errorResult(err instanceof Error ? err.message : String(err));
151
+ }
152
+ },
153
+ };
154
+ // === seo_font_audit ===
155
+ const fontTool = {
156
+ name: "seo_font_audit",
157
+ label: "SEO Font Optimization Audit",
158
+ description: "Audit web fonts for performance best practices. Checks: font-display setting (prevents invisible text), " +
159
+ "format (WOFF2 preferred), subsetting (unicode-range), and counts Google Fonts vs self-hosted fonts. " +
160
+ "Fonts directly impact LCP and CLS scores.",
161
+ promptSnippet: "`seo_font_audit { url }` — audit font loading strategy",
162
+ parameters: {
163
+ type: "object",
164
+ properties: {
165
+ url: { type: "string", description: "The URL to analyze." },
166
+ },
167
+ required: ["url"],
168
+ },
169
+ async execute(_toolCallId, params) {
170
+ const { url } = params;
171
+ try {
172
+ const fetchResult = await fetchPage(url, config);
173
+ const fonts = analyzeFonts(fetchResult, url);
174
+ const lines = [
175
+ `✓ Font Audit: ${fonts.url}`,
176
+ ``,
177
+ `Fonts found: ${fonts.fontsFound.length}`,
178
+ `Score: ${fonts.score}/100`,
179
+ ``,
180
+ ];
181
+ for (const f of fonts.fontsFound) {
182
+ lines.push(` "${f.family}" — ${f.source} (${f.format})` +
183
+ ` | display: ${f.hasDisplay ? "✓" : "✗"}` +
184
+ ` | subset: ${f.isSubset ? "✓" : "✗"}`);
185
+ }
186
+ lines.push(``, `Recommendations:`);
187
+ for (const rec of fonts.recommendations) {
188
+ lines.push(` • ${rec}`);
189
+ }
190
+ return textResult(lines.join("\n"), { fonts });
191
+ }
192
+ catch (err) {
193
+ return errorResult(err instanceof Error ? err.message : String(err));
194
+ }
195
+ },
196
+ };
197
+ ext.registerTool(perfTool);
198
+ ext.registerTool(weightTool);
199
+ ext.registerTool(blockingTool);
200
+ ext.registerTool(fontTool);
201
+ }
@@ -286,4 +286,160 @@ export interface FullAuditResult {
286
286
  allIssues: AuditIssue[];
287
287
  summary: string;
288
288
  }
289
+ export interface CrawlConfig {
290
+ maxPages: number;
291
+ maxDepth: number;
292
+ concurrency: number;
293
+ respectRobotsTxt: boolean;
294
+ crawlDelayMs: number;
295
+ includeExternal: boolean;
296
+ }
297
+ export interface CrawledPage {
298
+ url: string;
299
+ depth: number;
300
+ statusCode: number;
301
+ fetchResult: FetchResult;
302
+ pageData: PageData;
303
+ linksFound: string[];
304
+ crawlDuration: number;
305
+ error?: string;
306
+ }
307
+ export interface BrokenLink {
308
+ sourcePage: string;
309
+ targetUrl: string;
310
+ statusCode: number;
311
+ linkText: string;
312
+ }
313
+ export interface DuplicateGroup {
314
+ type: "title" | "description" | "h1";
315
+ value: string;
316
+ pageUrls: string[];
317
+ }
318
+ export interface LinkGraphNode {
319
+ url: string;
320
+ internalInlinks: number;
321
+ internalOutlinks: number;
322
+ externalOutlinks: number;
323
+ pageRank?: number;
324
+ depth: number;
325
+ statusCode: number;
326
+ }
327
+ export interface CrawlResult {
328
+ baseUrl: string;
329
+ pagesCrawled: number;
330
+ totalPagesFound: number;
331
+ maxDepthReached: number;
332
+ brokenLinks: BrokenLink[];
333
+ duplicateGroups: DuplicateGroup[];
334
+ orphanPages: string[];
335
+ pages: CrawledPage[];
336
+ linkGraph: LinkGraphNode[];
337
+ errors: string[];
338
+ }
339
+ export interface KeywordInfo {
340
+ keyword: string;
341
+ count: number;
342
+ density: number;
343
+ tfidf: number;
344
+ variants: string[];
345
+ }
346
+ export interface KeywordAnalysisResult {
347
+ url: string;
348
+ totalWords: number;
349
+ keywords: KeywordInfo[];
350
+ topNgrams: Array<{
351
+ ngram: string;
352
+ count: number;
353
+ }>;
354
+ searchIntent: "informational" | "commercial" | "transactional" | "mixed";
355
+ intentConfidence: number;
356
+ keywordStuffingFlags: string[];
357
+ }
358
+ export interface ReadabilityResult {
359
+ url: string;
360
+ fleschKincaid: number;
361
+ fleschReadingEase: number;
362
+ smog: number;
363
+ ari: number;
364
+ colemanLiau: number;
365
+ gradeAverage: number;
366
+ sentenceCount: number;
367
+ syllableCount: number;
368
+ complexWordCount: number;
369
+ }
370
+ export interface ContentOptimizationResult {
371
+ url: string;
372
+ titleScore: number;
373
+ descriptionScore: number;
374
+ headingStructureScore: number;
375
+ contentLengthScore: number;
376
+ overallScore: number;
377
+ issues: Array<{
378
+ category: string;
379
+ severity: "critical" | "high" | "medium" | "low";
380
+ issue: string;
381
+ recommendation: string;
382
+ }>;
383
+ }
384
+ export interface PerformanceResult {
385
+ url: string;
386
+ lcp: {
387
+ value: number;
388
+ rating: "good" | "needs-improvement" | "poor";
389
+ element?: string;
390
+ };
391
+ cls: {
392
+ value: number;
393
+ rating: "good" | "needs-improvement" | "poor";
394
+ };
395
+ tbt: {
396
+ value: number;
397
+ rating: "good" | "needs-improvement" | "poor";
398
+ };
399
+ fcp: number;
400
+ ttfb: number;
401
+ score: number;
402
+ }
403
+ export interface PageWeightResult {
404
+ url: string;
405
+ totalKb: number;
406
+ htmlKb: number;
407
+ cssKb: number;
408
+ jsKb: number;
409
+ imageKb: number;
410
+ fontKb: number;
411
+ otherKb: number;
412
+ resourceCount: number;
413
+ topHeavyResources: Array<{
414
+ url: string;
415
+ sizeKb: number;
416
+ type: string;
417
+ }>;
418
+ }
419
+ export interface RenderBlockingResult {
420
+ url: string;
421
+ blockingCss: Array<{
422
+ href: string;
423
+ sizeEstimate: number;
424
+ }>;
425
+ blockingJs: Array<{
426
+ src: string;
427
+ sizeEstimate: number;
428
+ }>;
429
+ totalBlockingUrls: number;
430
+ recommendations: string[];
431
+ }
432
+ export interface FontAuditResult {
433
+ url: string;
434
+ fontsFound: Array<{
435
+ family: string;
436
+ source: string;
437
+ hasDisplay: boolean;
438
+ isSubset: boolean;
439
+ format: string;
440
+ }>;
441
+ hasFontDisplay: boolean;
442
+ recommendations: string[];
443
+ score: number;
444
+ }
289
445
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/extensions/seo/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/extensions/seo/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"url-safety.d.ts","sourceRoot":"","sources":["../../../../src/extensions/seo/utils/url-safety.ts"],"names":[],"mappings":"AAUA,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAiDD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5D,OAAO,CAAC,YAAY,CAAC,CA4EvB;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA8B7D;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA2BhD;AAED,wDAAwD;AACxD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C"}
1
+ {"version":3,"file":"url-safety.d.ts","sourceRoot":"","sources":["../../../../src/extensions/seo/utils/url-safety.ts"],"names":[],"mappings":"AAUA,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAiDD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5D,OAAO,CAAC,YAAY,CAAC,CA8EvB;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA8B7D;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA2BhD;AAED,wDAAwD;AACxD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C"}
@@ -90,13 +90,15 @@ export async function validateUrl(urlStr, opts = {}) {
90
90
  throw new UrlSafetyError(`Only http and https protocols are allowed, got: ${parsed.protocol}`);
91
91
  }
92
92
  const hostname = parsed.hostname.toLowerCase();
93
- if (BLOCKED_HOSTNAMES.has(hostname)) {
94
- throw new UrlSafetyError(`Blocked hostname: ${hostname}`);
95
- }
96
93
  // Check for direct IP literals.
97
94
  const ipFamily = isIP(hostname.replace(/^\[|\]$/g, ""));
98
- if (ipFamily && isPrivateIp(hostname.replace(/^\[|\]$/g, ""))) {
99
- throw new UrlSafetyError(`URL points to a private IP address: ${hostname}`);
95
+ if (ssrfProtection) {
96
+ if (BLOCKED_HOSTNAMES.has(hostname)) {
97
+ throw new UrlSafetyError(`Blocked hostname: ${hostname}`);
98
+ }
99
+ if (ipFamily && isPrivateIp(hostname.replace(/^\[|\]$/g, ""))) {
100
+ throw new UrlSafetyError(`URL points to a private IP address: ${hostname}`);
101
+ }
100
102
  }
101
103
  let ips = [];
102
104
  if (resolveDns && !ipFamily) {
@@ -1,33 +1,6 @@
1
- /**
2
- * Native OS folder picker dialog for project path selection.
3
- *
4
- * The "New Project" form in the browser has a "Browse..." button next to
5
- * the typed-path autocomplete. When clicked, it sends
6
- * `POST /api/paths/pick-directory` to this handler, which launches a
7
- * native OS folder picker dialog on the user's machine and returns the
8
- * absolute path of the selected directory (or `null` when cancelled).
9
- *
10
- * Platform strategy (tried in order):
11
- * 1. macOS — osascript (built-in, zero deps, native look)
12
- * 2. Linux — zenity (GTK), kdialog (KDE), then Python tkinter
13
- * 3. Windows — PowerShell (COM object)
14
- * 4. Fallback — Python tkinter (bundled with most Python installs)
15
- *
16
- * The first available tool wins; if none work, we return an error.
17
- * All child processes are synchronous — the browser is waiting anyway.
18
- */
19
- /** Result shape returned to the frontend. */
20
1
  export interface PickDirectoryResult {
21
- /** Absolute path of the selected directory, or null if cancelled. */
22
2
  path: string | null;
23
- /** Human-readable error when the picker couldn't be launched. */
24
3
  error?: string;
25
4
  }
26
- /**
27
- * Attempt to open a native folder picker dialog and return the selected path.
28
- *
29
- * Synchronous and blocking by design — the browser form is waiting for a
30
- * response and the user is interacting with the dialog.
31
- */
32
5
  export declare function handlePickDirectory(): PickDirectoryResult;
33
6
  //# sourceMappingURL=paths-pick-directory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths-pick-directory.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/paths-pick-directory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,6CAA6C;AAC7C,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAqID;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,mBAAmB,CAgCzD"}
1
+ {"version":3,"file":"paths-pick-directory.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/paths-pick-directory.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA6JD,wBAAgB,mBAAmB,IAAI,mBAAmB,CAmBzD"}