@perfonext/render-mcp 0.1.0 → 0.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.
package/README.md CHANGED
@@ -7,10 +7,11 @@
7
7
  ## What It Does
8
8
 
9
9
  - loads exported React Profiler JSON files from Next.js apps
10
- - summarizes commits and the most expensive components
10
+ - summarizes commits, the most expensive components, and detected render issues in one call
11
11
  - ranks the hottest commits and shows the top components inside each spike
12
12
  - identifies the slowest components by total render cost
13
13
  - highlights components with repeated rerenders using deterministic heuristics, evidence signals, and confidence levels
14
+ - compares two render profiles to surface regressions and improvements
14
15
  - keeps the loaded profiles in memory so an MCP client can iterate without re-reading the file
15
16
 
16
17
  ## Tools
@@ -18,13 +19,16 @@
18
19
  | Tool | Description |
19
20
  |------|-------------|
20
21
  | `load_render_profile` | Parse and load an exported React Profiler JSON file from disk |
21
- | `get_render_summary` | Summarize a loaded profile, including top components by render cost and the hottest commits |
22
+ | `get_render_summary` | Summarize a loaded profile: top components by render cost, hottest commits, and detected render issues (rerender storms, commit spikes) |
22
23
  | `get_hot_commits` | Rank the most expensive commits and show the top components inside each spike |
23
24
  | `get_slow_components` | Rank the slowest components by total actual render time |
24
25
  | `get_rerender_causes` | Explain likely rerender causes using profile-derived heuristics, evidence, confidence, and a documented score |
26
+ | `compare_renders` | Diff two loaded render profiles and rank regressions, improvements, additions, and removals |
25
27
 
26
28
  `get_rerender_causes` is heuristic by design. It works from structural signals in the profiler export — update frequency, nested update propagation, commit spread, and self-intensive renders. When you record with **"Record why each component rendered"** enabled in React DevTools Profiler settings, the export includes richer `changeDescriptions` data; future versions of this tool will parse that field to surface exact prop/state/context diffs natively.
27
29
 
30
+ `get_render_summary` includes an `issues` field with up to 5 detected render issues (commit spikes and rerender storms) so you get actionable findings in the same call as the summary.
31
+
28
32
  ## Rerender Score Contract
29
33
 
30
34
  `get_rerender_causes` returns a `score`, `scoreBand`, `confidence`, and `evidence[]` for each component.
@@ -88,6 +92,7 @@ Local workspace MCP config is also included in `.vscode/mcp.json` for developmen
88
92
 
89
93
  - "Load the React Profiler export at `./profile.json` and summarize the hottest components."
90
94
  - "Show me the hottest commits in `./profile.json` and which components dominated each spike."
95
+ - "Compare `before.json` and `after.json` and tell me which components regressed."
91
96
  - "Which components are consuming the most render time in this Next.js profile?"
92
97
  - "Show me the likely rerender causes for the slowest components, including evidence and confidence."
93
98
 
package/dist/index.js CHANGED
@@ -2,15 +2,17 @@
2
2
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
4
  import { registerLoadRenderProfile } from './tools/load-render-profile.js';
5
+ import { registerCompareRenders } from './tools/compare-renders.js';
5
6
  import { registerGetRenderSummary } from './tools/get-render-summary.js';
6
7
  import { registerGetHotCommits } from './tools/get-hot-commits.js';
7
8
  import { registerGetSlowComponents } from './tools/get-slow-components.js';
8
9
  import { registerGetRerenderCauses } from './tools/get-rerender-causes.js';
9
10
  const server = new McpServer({
10
11
  name: 'perfonext-render-mcp',
11
- version: '0.1.0',
12
+ version: '0.2.0',
12
13
  });
13
14
  registerLoadRenderProfile(server);
15
+ registerCompareRenders(server);
14
16
  registerGetRenderSummary(server);
15
17
  registerGetHotCommits(server);
16
18
  registerGetSlowComponents(server);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAElC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAElC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
- import type { HotCommitSummary, ParsedRenderProfile, RenderSummaryEntry, RerenderCause } from './types.js';
2
- export declare function getHotCommits(profile: ParsedRenderProfile, limit?: number, componentLimit?: number): HotCommitSummary[];
1
+ import type { CommitBreakdown, HotCommitSummary, ParsedRenderProfile, RenderComparison, RenderIssue, RenderPropagationPath, RenderSummaryEntry, RerenderCause } from './types.js';
2
+ export declare function getHotCommits(profile: ParsedRenderProfile, limit?: number, componentLimit?: number, priorityLevel?: string): HotCommitSummary[];
3
3
  export declare function getRenderSummary(profile: ParsedRenderProfile, limit?: number): {
4
4
  profileId: string;
5
5
  filename: string;
@@ -11,7 +11,12 @@ export declare function getRenderSummary(profile: ParsedRenderProfile, limit?: n
11
11
  totalRenderDuration: number;
12
12
  topComponents: RenderSummaryEntry[];
13
13
  hotCommits: HotCommitSummary[];
14
+ issues: RenderIssue[];
14
15
  };
15
16
  export declare function getSlowComponents(profile: ParsedRenderProfile, limit?: number, sortBy?: 'total' | 'average' | 'max', minDuration?: number): RenderSummaryEntry[];
16
17
  export declare function getRerenderCauses(profile: ParsedRenderProfile, limit?: number, minDuration?: number): RerenderCause[];
18
+ export declare function getCommitBreakdown(profile: ParsedRenderProfile, commitIndex: number, componentLimit?: number): CommitBreakdown | null;
19
+ export declare function traceRenderPropagation(profile: ParsedRenderProfile, commitIndex: number, limit?: number): RenderPropagationPath[];
20
+ export declare function detectRenderIssues(profile: ParsedRenderProfile, limit?: number): RenderIssue[];
21
+ export declare function compareRenders(baseProfile: ParsedRenderProfile, currentProfile: ParsedRenderProfile, limit?: number, minDelta?: number): RenderComparison;
17
22
  //# sourceMappingURL=analysis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/parser/analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,mBAAmB,EAEnB,kBAAkB,EAClB,aAAa,EAId,MAAM,YAAY,CAAC;AA2DpB,wBAAgB,aAAa,CAC3B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,SAAK,EACV,cAAc,SAAI,GACjB,gBAAgB,EAAE,CAuBpB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAK,GAAG;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC,CAaA;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,SAAK,EACV,MAAM,GAAE,OAAO,GAAG,SAAS,GAAG,KAAe,EAC7C,WAAW,SAAI,GACd,kBAAkB,EAAE,CA0BtB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAK,EAAE,WAAW,SAAI,GAAG,aAAa,EAAE,CA6I5G"}
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/parser/analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAIf,gBAAgB,EAChB,mBAAmB,EAEnB,gBAAgB,EAEhB,WAAW,EAGX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EAId,MAAM,YAAY,CAAC;AAwFpB,wBAAgB,aAAa,CAC3B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,SAAK,EACV,cAAc,SAAI,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,gBAAgB,EAAE,CAsBpB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAK,GAAG;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAcA;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,SAAK,EACV,MAAM,GAAE,OAAO,GAAG,SAAS,GAAG,KAAe,EAC7C,WAAW,SAAI,GACd,kBAAkB,EAAE,CA0BtB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAK,EAAE,WAAW,SAAI,GAAG,aAAa,EAAE,CA6I5G;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,MAAM,EACnB,cAAc,SAAI,GACjB,eAAe,GAAG,IAAI,CA4ExB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,MAAM,EACnB,KAAK,SAAK,GACT,qBAAqB,EAAE,CA0JzB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAK,GAAG,WAAW,EAAE,CAyE1F;AA8CD,wBAAgB,cAAc,CAC5B,WAAW,EAAE,mBAAmB,EAChC,cAAc,EAAE,mBAAmB,EACnC,KAAK,SAAK,EACV,QAAQ,SAAI,GACX,gBAAgB,CAyBlB"}
@@ -16,9 +16,30 @@ function getConfidence(evidenceCount) {
16
16
  }
17
17
  return 'low';
18
18
  }
19
+ function getSeverityRank(severity) {
20
+ if (severity === 'high') {
21
+ return 3;
22
+ }
23
+ if (severity === 'medium') {
24
+ return 2;
25
+ }
26
+ return 1;
27
+ }
28
+ function getMeasurementsTotalActualDuration(measurements) {
29
+ return measurements.reduce((sum, measurement) => sum + measurement.actualDuration, 0);
30
+ }
31
+ function getFiberNodeMap(profile, rootId) {
32
+ const nodes = rootId == null
33
+ ? profile.fiberNodes
34
+ : profile.fiberNodes.filter(node => node.rootId === rootId);
35
+ return new Map(nodes.map(node => [node.fiberId, node]));
36
+ }
37
+ function getMeasurementMap(commit) {
38
+ return new Map(commit.measurements.map(measurement => [measurement.fiberId, measurement]));
39
+ }
19
40
  function getCommitTopComponents(commit, limit) {
20
41
  const components = new Map();
21
- const totalActualDuration = commit.measurements.reduce((sum, measurement) => sum + measurement.actualDuration, 0);
42
+ const totalActualDuration = getMeasurementsTotalActualDuration(commit.measurements);
22
43
  for (const measurement of commit.measurements) {
23
44
  const existing = components.get(measurement.componentName) ?? {
24
45
  componentName: measurement.componentName,
@@ -42,12 +63,17 @@ function getCommitTopComponents(commit, limit) {
42
63
  : 0,
43
64
  }));
44
65
  }
45
- export function getHotCommits(profile, limit = 10, componentLimit = 3) {
66
+ function getCommitByIndex(profile, commitIndex) {
67
+ return profile.commits.find(commit => commit.index === commitIndex);
68
+ }
69
+ export function getHotCommits(profile, limit = 10, componentLimit = 3, priorityLevel) {
46
70
  return profile.commits
71
+ .filter(commit => priorityLevel == null || commit.priorityLevel === priorityLevel)
47
72
  .map(commit => ({
48
73
  commitIndex: commit.index,
74
+ rootId: commit.rootId,
49
75
  duration: commit.duration,
50
- totalActualDuration: commit.measurements.reduce((sum, measurement) => sum + measurement.actualDuration, 0),
76
+ totalActualDuration: getMeasurementsTotalActualDuration(commit.measurements),
51
77
  timestamp: commit.timestamp,
52
78
  priorityLevel: commit.priorityLevel,
53
79
  measurementCount: commit.measurements.length,
@@ -74,6 +100,7 @@ export function getRenderSummary(profile, limit = 10) {
74
100
  totalRenderDuration: profile.totalRenderDuration,
75
101
  hotCommits: getHotCommits(profile, Math.min(3, profile.commits.length), 3),
76
102
  topComponents: getSlowComponents(profile, limit),
103
+ issues: detectRenderIssues(profile, 5),
77
104
  };
78
105
  }
79
106
  export function getSlowComponents(profile, limit = 10, sortBy = 'total', minDuration = 0) {
@@ -223,4 +250,333 @@ export function getRerenderCauses(profile, limit = 10, minDuration = 0) {
223
250
  });
224
251
  return causes.slice(0, limit);
225
252
  }
253
+ export function getCommitBreakdown(profile, commitIndex, componentLimit = 5) {
254
+ const commit = getCommitByIndex(profile, commitIndex);
255
+ if (!commit) {
256
+ return null;
257
+ }
258
+ const totalActualDuration = getMeasurementsTotalActualDuration(commit.measurements);
259
+ const components = new Map();
260
+ for (const measurement of commit.measurements) {
261
+ const existing = components.get(measurement.componentName) ?? {
262
+ componentName: measurement.componentName,
263
+ actualDuration: 0,
264
+ selfDuration: 0,
265
+ renderCount: 0,
266
+ shareOfCommitWork: 0,
267
+ mountCount: 0,
268
+ updateCount: 0,
269
+ nestedUpdateCount: 0,
270
+ };
271
+ existing.actualDuration += measurement.actualDuration;
272
+ existing.selfDuration += measurement.selfDuration;
273
+ existing.renderCount += 1;
274
+ if (measurement.phase === 'mount') {
275
+ existing.mountCount += 1;
276
+ }
277
+ else {
278
+ existing.updateCount += 1;
279
+ if (measurement.isNestedUpdate) {
280
+ existing.nestedUpdateCount += 1;
281
+ }
282
+ }
283
+ components.set(measurement.componentName, existing);
284
+ }
285
+ const topComponents = Array.from(components.values())
286
+ .sort((left, right) => right.actualDuration - left.actualDuration)
287
+ .slice(0, componentLimit)
288
+ .map(component => ({
289
+ ...component,
290
+ shareOfCommitWork: totalActualDuration > 0
291
+ ? component.actualDuration / totalActualDuration
292
+ : 0,
293
+ }));
294
+ const topComponentShare = topComponents[0]?.shareOfCommitWork ?? 0;
295
+ const topThreeShare = topComponents
296
+ .slice(0, 3)
297
+ .reduce((sum, component) => sum + component.shareOfCommitWork, 0);
298
+ let interpretation;
299
+ if (topComponentShare >= 0.5) {
300
+ interpretation = 'This commit is dominated by one component, so investigate that component before the rest of the tree.';
301
+ }
302
+ else if (topThreeShare >= 0.8) {
303
+ interpretation = 'This commit is concentrated in a small set of components, so the spike is likely localized to one subtree.';
304
+ }
305
+ else {
306
+ interpretation = 'This commit spreads work across several components, which often points to broader parent-to-child rerender propagation.';
307
+ }
308
+ return {
309
+ commitIndex: commit.index,
310
+ rootId: commit.rootId,
311
+ duration: commit.duration,
312
+ totalActualDuration,
313
+ timestamp: commit.timestamp,
314
+ priorityLevel: commit.priorityLevel,
315
+ measurementCount: commit.measurements.length,
316
+ updaterComponentNames: commit.updaterComponentNames,
317
+ topComponents,
318
+ concentration: {
319
+ topComponentShare,
320
+ topThreeShare,
321
+ },
322
+ interpretation,
323
+ };
324
+ }
325
+ export function traceRenderPropagation(profile, commitIndex, limit = 10) {
326
+ const commit = getCommitByIndex(profile, commitIndex);
327
+ if (!commit) {
328
+ return [];
329
+ }
330
+ const fiberNodeMap = getFiberNodeMap(profile, commit.rootId);
331
+ const measurementMap = getMeasurementMap(commit);
332
+ const renderedFiberIds = new Set(measurementMap.keys());
333
+ const updaterNames = new Set(commit.updaterComponentNames);
334
+ // ---------------------------------------------------------------------------
335
+ // Fallback: infer parent-child links for orphan fibers.
336
+ //
337
+ // Orphan fibers are fibers that rendered in this commit but have no entry in
338
+ // the snapshot tree. This happens when components mount *after* profiling
339
+ // starts — React DevTools only snapshots the tree as it existed at session
340
+ // start, so any later-mounted subtree is invisible to the snapshot.
341
+ //
342
+ // Strategy: sort all rendered fibers by actualDuration descending, then for
343
+ // each orphan pick the tightest candidate parent — the rendered fiber with
344
+ // the smallest actualDuration that is still larger than the orphan's and has
345
+ // enough remaining "child budget" (actualDuration − selfDuration) to absorb
346
+ // it. Subtract the orphan's cost from the chosen parent's budget so
347
+ // subsequent orphans are assigned correctly.
348
+ // ---------------------------------------------------------------------------
349
+ const remainingBudget = new Map();
350
+ const sortedRendered = Array.from(renderedFiberIds)
351
+ .map(id => ({ id, m: measurementMap.get(id) }))
352
+ .sort((a, b) => b.m.actualDuration - a.m.actualDuration);
353
+ for (const { id, m } of sortedRendered) {
354
+ remainingBudget.set(id, m.actualDuration - m.selfDuration);
355
+ }
356
+ // orphanParentMap: orphanFiberId → inferred parent fiberId (or null = root entry)
357
+ const orphanParentMap = new Map();
358
+ // orphanChildrenMap: parentFiberId → list of orphan children assigned to it
359
+ const orphanChildrenMap = new Map();
360
+ for (const { id, m } of sortedRendered) {
361
+ if (fiberNodeMap.has(id)) {
362
+ continue; // has a real snapshot link — skip
363
+ }
364
+ let bestParentId = null;
365
+ let bestParentDuration = Infinity;
366
+ for (const { id: candidateId, m: candidateM } of sortedRendered) {
367
+ if (candidateId === id) {
368
+ continue;
369
+ }
370
+ if (candidateM.actualDuration <= m.actualDuration) {
371
+ continue; // parent must have larger actualDuration
372
+ }
373
+ const budget = remainingBudget.get(candidateId) ?? 0;
374
+ if (budget >= m.actualDuration - 0.1 /* floating-point tolerance */) {
375
+ if (candidateM.actualDuration < bestParentDuration) {
376
+ bestParentDuration = candidateM.actualDuration;
377
+ bestParentId = candidateId;
378
+ }
379
+ }
380
+ }
381
+ orphanParentMap.set(id, bestParentId);
382
+ if (bestParentId !== null) {
383
+ remainingBudget.set(bestParentId, (remainingBudget.get(bestParentId) ?? 0) - m.actualDuration);
384
+ const siblings = orphanChildrenMap.get(bestParentId) ?? [];
385
+ siblings.push(id);
386
+ orphanChildrenMap.set(bestParentId, siblings);
387
+ }
388
+ }
389
+ const entryFiberIds = Array.from(renderedFiberIds)
390
+ .filter(fiberId => {
391
+ const node = fiberNodeMap.get(fiberId);
392
+ if (node != null) {
393
+ // Real snapshot node: entry if its parent did not render in this commit.
394
+ return node.parentFiberId == null || !renderedFiberIds.has(node.parentFiberId);
395
+ }
396
+ // Orphan fiber: entry only if its inferred parent also did not render.
397
+ const inferredParent = orphanParentMap.get(fiberId);
398
+ return inferredParent == null || !renderedFiberIds.has(inferredParent);
399
+ })
400
+ .sort((left, right) => {
401
+ const leftMeasurement = measurementMap.get(left);
402
+ const rightMeasurement = measurementMap.get(right);
403
+ return (rightMeasurement?.actualDuration ?? 0) - (leftMeasurement?.actualDuration ?? 0);
404
+ });
405
+ const paths = [];
406
+ const visit = (fiberId, fiberPath, componentPath, totalActualDuration) => {
407
+ const measurement = measurementMap.get(fiberId);
408
+ if (!measurement) {
409
+ return;
410
+ }
411
+ const node = fiberNodeMap.get(fiberId);
412
+ const componentName = node?.componentName ?? `(fiber:${fiberId})`;
413
+ const nextFiberPath = [...fiberPath, fiberId];
414
+ const nextComponentPath = [...componentPath, componentName];
415
+ const nextTotalActualDuration = totalActualDuration + measurement.actualDuration;
416
+ // Snapshot children that rendered + any orphans inferred to live under this fiber.
417
+ const snapshotChildren = node
418
+ ? node.childFiberIds.filter(childId => renderedFiberIds.has(childId))
419
+ : [];
420
+ const orphanChildren = (orphanChildrenMap.get(fiberId) ?? [])
421
+ .filter(childId => renderedFiberIds.has(childId));
422
+ const renderedChildren = [...snapshotChildren, ...orphanChildren];
423
+ if (renderedChildren.length === 0) {
424
+ paths.push({
425
+ commitIndex: commit.index,
426
+ rootId: commit.rootId,
427
+ fiberPath: nextFiberPath,
428
+ componentPath: nextComponentPath,
429
+ depth: nextComponentPath.length,
430
+ totalActualDuration: nextTotalActualDuration,
431
+ leafActualDuration: measurement.actualDuration,
432
+ includesUpdater: nextComponentPath.some(name => updaterNames.has(name)),
433
+ });
434
+ return;
435
+ }
436
+ for (const childId of renderedChildren) {
437
+ visit(childId, nextFiberPath, nextComponentPath, nextTotalActualDuration);
438
+ }
439
+ };
440
+ for (const fiberId of entryFiberIds) {
441
+ visit(fiberId, [], [], 0);
442
+ }
443
+ return paths
444
+ .sort((left, right) => {
445
+ if (right.totalActualDuration !== left.totalActualDuration) {
446
+ return right.totalActualDuration - left.totalActualDuration;
447
+ }
448
+ return right.depth - left.depth;
449
+ })
450
+ .slice(0, limit);
451
+ }
452
+ export function detectRenderIssues(profile, limit = 10) {
453
+ const issues = [];
454
+ const averageCommitDuration = profile.commits.length > 0
455
+ ? profile.totalCommitDuration / profile.commits.length
456
+ : 0;
457
+ for (const cause of getRerenderCauses(profile, profile.components.length, 0)) {
458
+ if (cause.scoreBand === 'low') {
459
+ continue;
460
+ }
461
+ issues.push({
462
+ type: 'rerender-storm',
463
+ severity: cause.scoreBand,
464
+ title: `${cause.componentName} rerenders frequently`,
465
+ summary: cause.likelyCauses[0] ?? `${cause.componentName} shows repeated rerender pressure.`,
466
+ componentName: cause.componentName,
467
+ evidence: cause.evidence,
468
+ });
469
+ }
470
+ for (const commit of getHotCommits(profile, Math.min(5, profile.commits.length), 3)) {
471
+ if (averageCommitDuration > 0 && commit.duration >= averageCommitDuration * 1.5) {
472
+ const topShare = commit.topComponents[0]?.shareOfCommitWork ?? 0;
473
+ issues.push({
474
+ type: 'commit-spike',
475
+ severity: commit.duration >= averageCommitDuration * 2 ? 'high' : 'medium',
476
+ title: `Commit ${commit.commitIndex} is a render spike`,
477
+ summary: `Commit ${commit.commitIndex} took ${commit.duration.toFixed(2)}ms, versus an average commit duration of ${averageCommitDuration.toFixed(2)}ms. ${topShare >= 0.5 ? 'One component dominates this spike.' : 'The spike is spread across several components.'}`,
478
+ commitIndex: commit.commitIndex,
479
+ evidence: [
480
+ {
481
+ signal: 'commit-duration-spike',
482
+ observed: Number(commit.duration.toFixed(2)),
483
+ threshold: Number((averageCommitDuration * 1.5).toFixed(2)),
484
+ detail: `Commit ${commit.commitIndex} exceeded the average commit duration by ${Number((commit.duration / averageCommitDuration).toFixed(2))}x.`,
485
+ },
486
+ ],
487
+ });
488
+ }
489
+ const cascadingPath = traceRenderPropagation(profile, commit.commitIndex, 5)
490
+ .find(path => path.depth >= 3);
491
+ if (cascadingPath) {
492
+ issues.push({
493
+ type: 'cascading-render',
494
+ severity: cascadingPath.includesUpdater ? 'high' : 'medium',
495
+ title: `Commit ${commit.commitIndex} shows cascading subtree work`,
496
+ summary: `A rendered path of depth ${cascadingPath.depth} was observed (${cascadingPath.componentPath.join(' -> ')}), which suggests parent-to-child rerender propagation rather than isolated component work.`,
497
+ commitIndex: commit.commitIndex,
498
+ evidence: [
499
+ {
500
+ signal: 'deep-render-propagation',
501
+ observed: cascadingPath.depth,
502
+ threshold: 3,
503
+ detail: `Rendered path ${cascadingPath.componentPath.join(' -> ')} accumulated ${cascadingPath.totalActualDuration.toFixed(2)}ms of work in a single commit.`,
504
+ },
505
+ ],
506
+ });
507
+ }
508
+ }
509
+ return issues
510
+ .sort((left, right) => {
511
+ const severityDelta = getSeverityRank(right.severity) - getSeverityRank(left.severity);
512
+ if (severityDelta !== 0) {
513
+ return severityDelta;
514
+ }
515
+ return (left.commitIndex ?? Number.MAX_SAFE_INTEGER) - (right.commitIndex ?? Number.MAX_SAFE_INTEGER);
516
+ })
517
+ .slice(0, limit);
518
+ }
519
+ function createDiffEntry(componentName, baseComponent, currentComponent) {
520
+ const baseTotalActualDuration = baseComponent?.totalActualDuration ?? 0;
521
+ const currentTotalActualDuration = currentComponent?.totalActualDuration ?? 0;
522
+ const baseAverageActualDuration = baseComponent != null && baseComponent.renderCount > 0
523
+ ? baseComponent.totalActualDuration / baseComponent.renderCount
524
+ : 0;
525
+ const currentAverageActualDuration = currentComponent != null && currentComponent.renderCount > 0
526
+ ? currentComponent.totalActualDuration / currentComponent.renderCount
527
+ : 0;
528
+ const totalActualDurationDelta = currentTotalActualDuration - baseTotalActualDuration;
529
+ let changeType;
530
+ if (!baseComponent && currentComponent) {
531
+ changeType = 'added';
532
+ }
533
+ else if (baseComponent && !currentComponent) {
534
+ changeType = 'removed';
535
+ }
536
+ else if (totalActualDurationDelta >= 0) {
537
+ changeType = 'regression';
538
+ }
539
+ else {
540
+ changeType = 'improvement';
541
+ }
542
+ return {
543
+ componentName,
544
+ changeType,
545
+ baseTotalActualDuration,
546
+ currentTotalActualDuration,
547
+ totalActualDurationDelta,
548
+ averageActualDurationDelta: currentAverageActualDuration - baseAverageActualDuration,
549
+ maxActualDurationDelta: (currentComponent?.maxActualDuration ?? 0) - (baseComponent?.maxActualDuration ?? 0),
550
+ renderCountDelta: (currentComponent?.renderCount ?? 0) - (baseComponent?.renderCount ?? 0),
551
+ commitCountDelta: (currentComponent?.commitIndices.length ?? 0) - (baseComponent?.commitIndices.length ?? 0),
552
+ percentChange: baseTotalActualDuration > 0
553
+ ? (totalActualDurationDelta / baseTotalActualDuration) * 100
554
+ : currentTotalActualDuration > 0
555
+ ? 100
556
+ : null,
557
+ };
558
+ }
559
+ export function compareRenders(baseProfile, currentProfile, limit = 10, minDelta = 0) {
560
+ const baseComponents = new Map(baseProfile.components.map(component => [component.componentName, component]));
561
+ const currentComponents = new Map(currentProfile.components.map(component => [component.componentName, component]));
562
+ const allComponentNames = new Set([...baseComponents.keys(), ...currentComponents.keys()]);
563
+ const entries = Array.from(allComponentNames)
564
+ .map(componentName => createDiffEntry(componentName, baseComponents.get(componentName), currentComponents.get(componentName)))
565
+ .filter(entry => {
566
+ if (entry.changeType === 'added' || entry.changeType === 'removed') {
567
+ return true;
568
+ }
569
+ return Math.abs(entry.totalActualDurationDelta) > 0 && Math.abs(entry.totalActualDurationDelta) >= minDelta;
570
+ })
571
+ .sort((left, right) => Math.abs(right.totalActualDurationDelta) - Math.abs(left.totalActualDurationDelta))
572
+ .slice(0, limit);
573
+ return {
574
+ baseProfileId: baseProfile.id,
575
+ currentProfileId: currentProfile.id,
576
+ regressions: entries.filter(entry => entry.changeType === 'regression' && entry.totalActualDurationDelta > 0),
577
+ improvements: entries.filter(entry => entry.changeType === 'improvement' && entry.totalActualDurationDelta < 0),
578
+ added: entries.filter(entry => entry.changeType === 'added'),
579
+ removed: entries.filter(entry => entry.changeType === 'removed'),
580
+ };
581
+ }
226
582
  //# sourceMappingURL=analysis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/parser/analysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../src/parser/analysis.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"react-profile.d.ts","sourceRoot":"","sources":["../../src/parser/react-profile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAuOpB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAmEzF"}
1
+ {"version":3,"file":"react-profile.d.ts","sourceRoot":"","sources":["../../src/parser/react-profile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AA0RpB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAuEzF"}
@@ -28,6 +28,45 @@ function buildSnapshotMap(snapshots) {
28
28
  }
29
29
  return map;
30
30
  }
31
+ function buildFiberNodes(snapshots, rootId) {
32
+ if (!Array.isArray(snapshots)) {
33
+ return [];
34
+ }
35
+ const nodeMap = new Map();
36
+ const parentMap = new Map();
37
+ for (const entry of snapshots) {
38
+ if (!Array.isArray(entry) || entry.length < 2) {
39
+ continue;
40
+ }
41
+ const [fiberId, node] = entry;
42
+ if (typeof fiberId !== 'number' || node === null || typeof node !== 'object') {
43
+ continue;
44
+ }
45
+ nodeMap.set(fiberId, node);
46
+ if (!parentMap.has(fiberId)) {
47
+ parentMap.set(fiberId, null);
48
+ }
49
+ }
50
+ for (const [fiberId, node] of nodeMap) {
51
+ const children = Array.isArray(node.children) ? node.children : [];
52
+ for (const childId of children) {
53
+ if (typeof childId === 'number' && nodeMap.has(childId)) {
54
+ parentMap.set(childId, fiberId);
55
+ }
56
+ }
57
+ }
58
+ return Array.from(nodeMap.entries()).map(([fiberId, node]) => ({
59
+ fiberId,
60
+ rootId,
61
+ componentName: typeof node.displayName === 'string' && node.displayName.trim().length > 0
62
+ ? node.displayName
63
+ : `(fiber:${fiberId})`,
64
+ parentFiberId: parentMap.get(fiberId) ?? null,
65
+ childFiberIds: Array.isArray(node.children)
66
+ ? node.children.filter((childId) => typeof childId === 'number' && nodeMap.has(childId))
67
+ : [],
68
+ }));
69
+ }
31
70
  /**
32
71
  * Build a Set of fiberIDs that existed before profiling started.
33
72
  * initialTreeBaseDurations is serialised as Array<[fiberID, duration]>.
@@ -47,7 +86,7 @@ function buildInitialFiberIDSet(initialTreeBaseDurations) {
47
86
  * Parse a single commit from the React DevTools v5 export.
48
87
  * fiberActualDurations and fiberSelfDurations are Array<[fiberID, duration]> tuples.
49
88
  */
50
- function parseCommit(raw, index, snapshotMap, initialFiberIDs, seenFiberIDs) {
89
+ function parseCommit(raw, index, rootId, snapshotMap, initialFiberIDs, seenFiberIDs) {
51
90
  const fiberActualDurations = Array.isArray(raw.fiberActualDurations)
52
91
  ? raw.fiberActualDurations
53
92
  : [];
@@ -98,6 +137,8 @@ function parseCommit(raw, index, snapshotMap, initialFiberIDs, seenFiberIDs) {
98
137
  const isMount = !initialFiberIDs.has(fiberID) && !seenFiberIDs.has(fiberID);
99
138
  seenFiberIDs.add(fiberID);
100
139
  measurements.push({
140
+ fiberId: fiberID,
141
+ rootId,
101
142
  componentName,
102
143
  phase: isMount ? 'mount' : 'update',
103
144
  actualDuration,
@@ -111,6 +152,7 @@ function parseCommit(raw, index, snapshotMap, initialFiberIDs, seenFiberIDs) {
111
152
  }
112
153
  return {
113
154
  index,
155
+ rootId,
114
156
  duration: asNumber(raw.duration),
115
157
  timestamp: asNumber(raw.timestamp),
116
158
  priorityLevel: typeof raw.priorityLevel === 'string' ? raw.priorityLevel : null,
@@ -179,10 +221,13 @@ export function parseRenderProfile(content, filename) {
179
221
  'Ensure you exported from the React DevTools Profiler tab, not the browser Performance tab.');
180
222
  }
181
223
  const allCommits = [];
224
+ const allFiberNodes = [];
182
225
  for (const rawRoot of parsed.dataForRoots) {
183
226
  const root = rawRoot;
227
+ const rootId = typeof root.rootID === 'number' ? root.rootID : 0;
184
228
  // fiberID -> displayName, built from the serialised snapshots map
185
229
  const snapshotMap = buildSnapshotMap(root.snapshots);
230
+ allFiberNodes.push(...buildFiberNodes(root.snapshots, rootId));
186
231
  // Fibers present before profiling started (used for mount vs update detection)
187
232
  const initialFiberIDs = buildInitialFiberIDSet(root.initialTreeBaseDurations);
188
233
  const seenFiberIDs = new Set();
@@ -191,7 +236,7 @@ export function parseRenderProfile(content, filename) {
191
236
  : [];
192
237
  const startIndex = allCommits.length;
193
238
  for (let i = 0; i < commitDataArray.length; i++) {
194
- allCommits.push(parseCommit(commitDataArray[i], startIndex + i, snapshotMap, initialFiberIDs, seenFiberIDs));
239
+ allCommits.push(parseCommit(commitDataArray[i], startIndex + i, rootId, snapshotMap, initialFiberIDs, seenFiberIDs));
195
240
  }
196
241
  }
197
242
  if (allCommits.length === 0) {
@@ -204,6 +249,7 @@ export function parseRenderProfile(content, filename) {
204
249
  version: '5',
205
250
  rendererId: null,
206
251
  commits: allCommits,
252
+ fiberNodes: allFiberNodes,
207
253
  components,
208
254
  totalCommitDuration: allCommits.reduce((sum, c) => sum + c.duration, 0),
209
255
  totalRenderDuration: components.reduce((sum, c) => sum + c.totalActualDuration, 0),
@@ -1 +1 @@
1
- {"version":3,"file":"react-profile.js","sourceRoot":"","sources":["../../src/parser/react-profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react-profile.js","sourceRoot":"","sources":["../../src/parser/react-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAoDrC,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,KAAc,EAAE,QAAQ,GAAG,CAAC;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,SAAkB;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,GAAG,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QACxD,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,SAAS;QAC1C,MAAM,GAAG,GAAG,IAAuB,CAAC;QACpC,MAAM,IAAI,GACR,OAAO,GAAG,EAAE,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACvE,CAAC,CAAC,GAAG,CAAC,WAAW;YACjB,CAAC,CAAC,UAAU,OAAO,GAAG,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,SAAkB,EAAE,MAAc;IACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEnD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,SAAS;QACX,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7E,SAAS;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAuB,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxD,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO;QACP,MAAM;QACN,aAAa,EACX,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACxE,CAAC,CAAC,IAAI,CAAC,WAAW;YAClB,CAAC,CAAC,UAAU,OAAO,GAAG;QAC1B,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;QAC7C,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAqB,EAAE,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3G,CAAC,CAAC,EAAE;KACP,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,wBAAiC;IAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC;QAAE,OAAO,GAAG,CAAC;IAEzD,KAAK,MAAM,KAAK,IAAI,wBAAwB,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACzD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAClB,GAAkB,EAClB,KAAa,EACb,MAAc,EACd,WAAgC,EAChC,eAA4B,EAC5B,YAAyB;IAEzB,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAClE,CAAC,CAAE,GAAG,CAAC,oBAAkC;QACzC,CAAC,CAAC,EAAE,CAAC;IAEP,qDAAqD;IACrD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,kBAA+B,EAAE,CAAC;YACxD,IACE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACpB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAC5B,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAC5B,CAAC;gBACD,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,2FAA2F;IAC3F,sFAAsF;IACtF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAqB,EAAE,CAAC;YAChD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACpD,MAAM,CAAC,GAAG,OAAkC,CAAC;gBAC7C,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,MAAM,qBAAqB,GAAa,EAAE,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,UAAU,OAAO,GAAG,CAAC;QAC9D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAwB,EAAE,CAAC;IAE7C,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QACxD,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC;QACxC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,cAAc,KAAK,QAAQ;YAAE,SAAS;QAEhF,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,UAAU,OAAO,GAAG,CAAC;QACvE,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC;QAEpE,uEAAuE;QACvE,+CAA+C;QAC/C,MAAM,OAAO,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5E,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE1B,YAAY,CAAC,IAAI,CAAC;YAChB,OAAO,EAAE,OAAO;YAChB,MAAM;YACN,aAAa;YACb,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YACnC,cAAc;YACd,YAAY;YACZ,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;YAClC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;YACnC,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,CAAC,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;SAC7B,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,KAAK;QACL,MAAM;QACN,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAChC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,aAAa,EAAE,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QAC/E,YAAY;QACZ,qBAAqB;KACC,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAuB;IAClD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAChD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEvD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC;YAEvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;oBACd,aAAa,EAAE,IAAI;oBACnB,WAAW,EAAE,CAAC;oBACd,UAAU,EAAE,CAAC;oBACb,WAAW,EAAE,CAAC;oBACd,iBAAiB,EAAE,CAAC;oBACpB,mBAAmB,EAAE,CAAC;oBACtB,iBAAiB,EAAE,CAAC;oBACpB,iBAAiB,EAAE,CAAC;oBACpB,aAAa,EAAE,EAAE;iBAClB,CAAC,CAAC;gBACH,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAU,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YAClC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC;YAC1B,QAAQ,CAAC,mBAAmB,IAAI,WAAW,CAAC,cAAc,CAAC;YAC3D,QAAQ,CAAC,iBAAiB,IAAI,WAAW,CAAC,YAAY,CAAC;YACvD,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;YAC9F,eAAe,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE7C,IAAI,WAAW,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;gBAClC,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC;gBAC1B,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;oBAC/B,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC;QAC/C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,QAAgB;IAClE,IAAI,MAA2B,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwB,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,wFAAwF;IACxF,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,uDAAuD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK;YAChF,yDAAyD;YACzD,uEAAuE,CAC1E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CACb,qDAAqD;YACnD,4FAA4F,CAC/F,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,MAAM,aAAa,GAAgB,EAAE,CAAC;IAEtC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAwB,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjE,kEAAkE;QAClE,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,aAAa,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAE/D,+EAA+E;QAC/E,MAAM,eAAe,GAAG,sBAAsB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC9E,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QAEvC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YACpD,CAAC,CAAE,IAAI,CAAC,UAA8B;YACtC,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,UAAU,CAAC,IAAI,CACb,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,CAAC,CACpG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEnD,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAC5B,OAAO,EAAE,GAAG;QACZ,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,aAAa;QACzB,UAAU;QACV,mBAAmB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,mBAAmB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC;KACnF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,6 @@
1
1
  export interface RenderMeasurement {
2
+ fiberId: number;
3
+ rootId: number;
2
4
  componentName: string;
3
5
  phase: string;
4
6
  actualDuration: number;
@@ -11,12 +13,20 @@ export interface RenderMeasurement {
11
13
  }
12
14
  export interface RenderCommit {
13
15
  index: number;
16
+ rootId: number;
14
17
  duration: number;
15
18
  timestamp: number;
16
19
  priorityLevel: string | null;
17
20
  measurements: RenderMeasurement[];
18
21
  updaterComponentNames: string[];
19
22
  }
23
+ export interface FiberNode {
24
+ fiberId: number;
25
+ rootId: number;
26
+ componentName: string;
27
+ parentFiberId: number | null;
28
+ childFiberIds: number[];
29
+ }
20
30
  export interface ComponentStats {
21
31
  componentName: string;
22
32
  renderCount: number;
@@ -34,6 +44,7 @@ export interface ParsedRenderProfile {
34
44
  version: string;
35
45
  rendererId: number | null;
36
46
  commits: RenderCommit[];
47
+ fiberNodes: FiberNode[];
37
48
  components: ComponentStats[];
38
49
  totalCommitDuration: number;
39
50
  totalRenderDuration: number;
@@ -58,6 +69,7 @@ export interface HotCommitComponentSummary {
58
69
  }
59
70
  export interface HotCommitSummary {
60
71
  commitIndex: number;
72
+ rootId: number;
61
73
  duration: number;
62
74
  totalActualDuration: number;
63
75
  timestamp: number;
@@ -66,6 +78,37 @@ export interface HotCommitSummary {
66
78
  topComponents: HotCommitComponentSummary[];
67
79
  updaterComponentNames: string[];
68
80
  }
81
+ export interface CommitBreakdownComponentSummary extends HotCommitComponentSummary {
82
+ mountCount: number;
83
+ updateCount: number;
84
+ nestedUpdateCount: number;
85
+ }
86
+ export interface CommitBreakdown {
87
+ commitIndex: number;
88
+ rootId: number;
89
+ duration: number;
90
+ totalActualDuration: number;
91
+ timestamp: number;
92
+ priorityLevel: string | null;
93
+ measurementCount: number;
94
+ updaterComponentNames: string[];
95
+ topComponents: CommitBreakdownComponentSummary[];
96
+ concentration: {
97
+ topComponentShare: number;
98
+ topThreeShare: number;
99
+ };
100
+ interpretation: string;
101
+ }
102
+ export interface RenderPropagationPath {
103
+ commitIndex: number;
104
+ rootId: number;
105
+ fiberPath: number[];
106
+ componentPath: string[];
107
+ depth: number;
108
+ totalActualDuration: number;
109
+ leafActualDuration: number;
110
+ includesUpdater: boolean;
111
+ }
69
112
  export interface RerenderEvidence {
70
113
  signal: string;
71
114
  observed: number | string;
@@ -86,4 +129,36 @@ export interface RerenderCause {
86
129
  evidence: RerenderEvidence[];
87
130
  likelyCauses: string[];
88
131
  }
132
+ export type RenderIssueType = 'rerender-storm' | 'commit-spike' | 'cascading-render';
133
+ export type RenderIssueSeverity = 'low' | 'medium' | 'high';
134
+ export interface RenderIssue {
135
+ type: RenderIssueType;
136
+ severity: RenderIssueSeverity;
137
+ title: string;
138
+ summary: string;
139
+ componentName?: string;
140
+ commitIndex?: number;
141
+ evidence: RerenderEvidence[];
142
+ }
143
+ export type RenderDiffChangeType = 'regression' | 'improvement' | 'added' | 'removed';
144
+ export interface RenderDiffEntry {
145
+ componentName: string;
146
+ changeType: RenderDiffChangeType;
147
+ baseTotalActualDuration: number;
148
+ currentTotalActualDuration: number;
149
+ totalActualDurationDelta: number;
150
+ averageActualDurationDelta: number;
151
+ maxActualDurationDelta: number;
152
+ renderCountDelta: number;
153
+ commitCountDelta: number;
154
+ percentChange: number | null;
155
+ }
156
+ export interface RenderComparison {
157
+ baseProfileId: string;
158
+ currentProfileId: string;
159
+ regressions: RenderDiffEntry[];
160
+ improvements: RenderDiffEntry[];
161
+ added: RenderDiffEntry[];
162
+ removed: RenderDiffEntry[];
163
+ }
89
164
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/parser/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/parser/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerCompareRenders(server: McpServer): void;
3
+ //# sourceMappingURL=compare-renders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-renders.d.ts","sourceRoot":"","sources":["../../src/tools/compare-renders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0BpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoC9D"}
@@ -0,0 +1,50 @@
1
+ import { z } from 'zod';
2
+ import { formatMs } from '../format.js';
3
+ import { compareRenders } from '../parser/analysis.js';
4
+ import { getRenderProfile } from '../store.js';
5
+ function formatDiffEntry(entry) {
6
+ return {
7
+ ...entry,
8
+ baseTotalActualDuration: formatMs(entry.baseTotalActualDuration),
9
+ currentTotalActualDuration: formatMs(entry.currentTotalActualDuration),
10
+ totalActualDurationDelta: formatMs(entry.totalActualDurationDelta),
11
+ averageActualDurationDelta: formatMs(entry.averageActualDurationDelta),
12
+ maxActualDurationDelta: formatMs(entry.maxActualDurationDelta),
13
+ percentChange: entry.percentChange == null ? null : `${entry.percentChange.toFixed(1)}%`,
14
+ };
15
+ }
16
+ export function registerCompareRenders(server) {
17
+ server.registerTool('compare_renders', {
18
+ title: 'Compare Renders',
19
+ description: 'Diff two loaded render profiles and rank the biggest regressions, improvements, additions, and removals.',
20
+ inputSchema: {
21
+ baseProfileId: z.string().describe('Baseline profile ID from load_render_profile'),
22
+ currentProfileId: z.string().describe('Current profile ID from load_render_profile'),
23
+ limit: z.number().int().positive().max(25).optional().describe('How many changed components to include. Defaults to 10.'),
24
+ minDeltaMs: z.number().nonnegative().optional().describe('Minimum absolute total render delta in ms for changed components. Defaults to 0.'),
25
+ },
26
+ }, async ({ baseProfileId, currentProfileId, limit, minDeltaMs }) => {
27
+ const baseProfile = getRenderProfile(baseProfileId);
28
+ if (!baseProfile) {
29
+ throw new Error(`Base profile "${baseProfileId}" not found.`);
30
+ }
31
+ const currentProfile = getRenderProfile(currentProfileId);
32
+ if (!currentProfile) {
33
+ throw new Error(`Current profile "${currentProfileId}" not found.`);
34
+ }
35
+ const comparison = compareRenders(baseProfile, currentProfile, limit ?? 10, minDeltaMs ?? 0);
36
+ return {
37
+ content: [{
38
+ type: 'text',
39
+ text: JSON.stringify({
40
+ ...comparison,
41
+ regressions: comparison.regressions.map(formatDiffEntry),
42
+ improvements: comparison.improvements.map(formatDiffEntry),
43
+ added: comparison.added.map(formatDiffEntry),
44
+ removed: comparison.removed.map(formatDiffEntry),
45
+ }, null, 2),
46
+ }],
47
+ };
48
+ });
49
+ }
50
+ //# sourceMappingURL=compare-renders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-renders.js","sourceRoot":"","sources":["../../src/tools/compare-renders.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,SAAS,eAAe,CAOrB,KAAQ;IACT,OAAO;QACL,GAAG,KAAK;QACR,uBAAuB,EAAE,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC;QAChE,0BAA0B,EAAE,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC;QACtE,wBAAwB,EAAE,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC;QAClE,0BAA0B,EAAE,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC;QACtE,sBAAsB,EAAE,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAC9D,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;KACzF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE;QACrC,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,0GAA0G;QACvH,WAAW,EAAE;YACX,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YAClF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACpF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YACzH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kFAAkF,CAAC;SAC7I;KACF,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;QAClE,MAAM,WAAW,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iBAAiB,aAAa,cAAc,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,gBAAgB,cAAc,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC;QAE7F,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,GAAG,UAAU;wBACb,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC;wBACxD,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC;wBAC1D,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;wBAC5C,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;qBACjD,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-hot-commits.d.ts","sourceRoot":"","sources":["../../src/tools/get-hot-commits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsC7D"}
1
+ {"version":3,"file":"get-hot-commits.d.ts","sourceRoot":"","sources":["../../src/tools/get-hot-commits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuC7D"}
@@ -10,13 +10,14 @@ export function registerGetHotCommits(server) {
10
10
  profileId: z.string().describe('Profile ID from load_render_profile'),
11
11
  limit: z.number().int().positive().max(25).optional().describe('How many commits to include. Defaults to 10.'),
12
12
  componentLimit: z.number().int().positive().max(10).optional().describe('How many top components to include per commit. Defaults to 3.'),
13
+ priorityLevel: z.string().optional().describe('Filter to commits with this priority level only. Common values: "Immediate" (synchronous, input-blocking), "Normal" (async, e.g. API responses). Omit to include all priorities.'),
13
14
  },
14
- }, async ({ profileId, limit, componentLimit }) => {
15
+ }, async ({ profileId, limit, componentLimit, priorityLevel }) => {
15
16
  const profile = getRenderProfile(profileId);
16
17
  if (!profile) {
17
18
  throw new Error(`Profile "${profileId}" not found. Call get_render_summary without a profileId to list all loaded profiles.`);
18
19
  }
19
- const hotCommits = getHotCommits(profile, limit ?? 10, componentLimit ?? 3).map(commit => ({
20
+ const hotCommits = getHotCommits(profile, limit ?? 10, componentLimit ?? 3, priorityLevel).map(commit => ({
20
21
  ...commit,
21
22
  duration: formatMs(commit.duration),
22
23
  totalActualDuration: formatMs(commit.totalActualDuration),
@@ -1 +1 @@
1
- {"version":3,"file":"get-hot-commits.js","sourceRoot":"","sources":["../../src/tools/get-hot-commits.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE;QACrC,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,2GAA2G;QACxH,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YACrE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YAC9G,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;SACzI;KACF,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE;QAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,uFAAuF,CAAC,CAAC;QAChI,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,cAAc,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzF,GAAG,MAAM;YACT,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnC,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC;YACzD,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACpD,GAAG,SAAS;gBACZ,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC;gBAClD,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC;gBAC9C,iBAAiB,EAAE,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC;aAC1D,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,SAAS;wBACT,aAAa,EAAE,uFAAuF;wBACtG,UAAU;qBACX,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"get-hot-commits.js","sourceRoot":"","sources":["../../src/tools/get-hot-commits.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE;QACrC,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,2GAA2G;QACxH,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YACrE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YAC9G,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;YACxI,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kLAAkL,CAAC;SAClO;KACF,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE;QAC/D,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,uFAAuF,CAAC,CAAC;QAChI,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,cAAc,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxG,GAAG,MAAM;YACT,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnC,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC;YACzD,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACpD,GAAG,SAAS;gBACZ,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC;gBAClD,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC;gBAC9C,iBAAiB,EAAE,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC;aAC1D,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,SAAS;wBACT,aAAa,EAAE,uFAAuF;wBACtG,UAAU;qBACX,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -5,7 +5,7 @@ import { getRenderProfile, listRenderProfiles } from '../store.js';
5
5
  export function registerGetRenderSummary(server) {
6
6
  server.registerTool('get_render_summary', {
7
7
  title: 'Get Render Summary',
8
- description: 'Summarize the loaded Next.js render profile, including top components by render cost.',
8
+ description: 'Summarize the loaded Next.js render profile, including top components by render cost and detected render issues (rerender storms, commit spikes).',
9
9
  inputSchema: {
10
10
  profileId: z.string().optional().describe('Profile ID from load_render_profile. Omit to list loaded profiles.'),
11
11
  limit: z.number().int().positive().max(25).optional().describe('How many top components to include. Defaults to 10.'),
@@ -1 +1 @@
1
- {"version":3,"file":"get-render-summary.js","sourceRoot":"","sources":["../../src/tools/get-render-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-render-summary.js","sourceRoot":"","sources":["../../src/tools/get-render-summary.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@perfonext/render-mcp",
3
- "version": "0.1.0",
4
- "description": "MCP server for analyzing Next.js React Profiler exports and render performance",
3
+ "version": "0.2.0",
4
+ "description": "MCP server for analyzing Next.js React Profiler exports: render summaries, rerender causes, hot commits, and profile diffing",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {