@perfonext/render-mcp 0.3.0 → 0.3.2

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 (51) hide show
  1. package/README.md +78 -81
  2. package/dist/index.js +1 -1
  3. package/dist/ingest/server.d.ts +1 -0
  4. package/dist/ingest/server.d.ts.map +1 -1
  5. package/dist/ingest/server.js +15 -12
  6. package/dist/ingest/server.js.map +1 -1
  7. package/dist/parser/analysis.d.ts +4 -0
  8. package/dist/parser/analysis.d.ts.map +1 -1
  9. package/dist/parser/analysis.js +120 -54
  10. package/dist/parser/analysis.js.map +1 -1
  11. package/dist/parser/react-profile.d.ts.map +1 -1
  12. package/dist/parser/react-profile.js +2 -3
  13. package/dist/parser/react-profile.js.map +1 -1
  14. package/dist/parser/react-scan-lite.d.ts.map +1 -1
  15. package/dist/parser/react-scan-lite.js +72 -2
  16. package/dist/parser/react-scan-lite.js.map +1 -1
  17. package/dist/parser/types.d.ts +23 -0
  18. package/dist/parser/types.d.ts.map +1 -1
  19. package/dist/store.js +1 -1
  20. package/dist/store.js.map +1 -1
  21. package/dist/tools/begin-render-analysis.d.ts.map +1 -1
  22. package/dist/tools/begin-render-analysis.js +1 -1
  23. package/dist/tools/begin-render-analysis.js.map +1 -1
  24. package/dist/tools/compare-renders.d.ts.map +1 -1
  25. package/dist/tools/compare-renders.js +16 -4
  26. package/dist/tools/compare-renders.js.map +1 -1
  27. package/dist/tools/get-captured-renders.d.ts.map +1 -1
  28. package/dist/tools/get-captured-renders.js +8 -2
  29. package/dist/tools/get-captured-renders.js.map +1 -1
  30. package/dist/tools/get-hot-commits.d.ts.map +1 -1
  31. package/dist/tools/get-hot-commits.js +24 -7
  32. package/dist/tools/get-hot-commits.js.map +1 -1
  33. package/dist/tools/get-render-summary.d.ts.map +1 -1
  34. package/dist/tools/get-render-summary.js +23 -10
  35. package/dist/tools/get-render-summary.js.map +1 -1
  36. package/dist/tools/get-rerender-causes.d.ts.map +1 -1
  37. package/dist/tools/get-rerender-causes.js +25 -18
  38. package/dist/tools/get-rerender-causes.js.map +1 -1
  39. package/dist/tools/get-slow-components.d.ts.map +1 -1
  40. package/dist/tools/get-slow-components.js +20 -5
  41. package/dist/tools/get-slow-components.js.map +1 -1
  42. package/dist/tools/load-render-profile.d.ts.map +1 -1
  43. package/dist/tools/load-render-profile.js +7 -3
  44. package/dist/tools/load-render-profile.js.map +1 -1
  45. package/dist/tools/run-render-capture.d.ts.map +1 -1
  46. package/dist/tools/run-render-capture.js +11 -5
  47. package/dist/tools/run-render-capture.js.map +1 -1
  48. package/dist/tools/stop-render-capture.d.ts.map +1 -1
  49. package/dist/tools/stop-render-capture.js +22 -4
  50. package/dist/tools/stop-render-capture.js.map +1 -1
  51. package/package.json +17 -5
@@ -3,7 +3,7 @@ import { randomUUID } from 'node:crypto';
3
3
  // Internal helpers
4
4
  // ---------------------------------------------------------------------------
5
5
  function buildMeasurements(fibers, rootId, commitIndex, commitTime) {
6
- return fibers.map(fiber => ({
6
+ return fibers.map((fiber) => ({
7
7
  fiberId: fiber.fiberId,
8
8
  rootId,
9
9
  componentName: fiber.name?.trim() || `(fiber:${fiber.fiberId})`,
@@ -19,7 +19,7 @@ function buildMeasurements(fibers, rootId, commitIndex, commitTime) {
19
19
  }
20
20
  function buildFiberNodes(fibers, rootId) {
21
21
  // Wire format has no explicit parent IDs; parentFiberId and childFiberIds are always null/empty.
22
- return fibers.map(fiber => ({
22
+ return fibers.map((fiber) => ({
23
23
  fiberId: fiber.fiberId,
24
24
  rootId,
25
25
  componentName: fiber.name?.trim() || `(fiber:${fiber.fiberId})`,
@@ -97,6 +97,75 @@ export function adaptReactScanEvents(rawCommits, sessionId) {
97
97
  }
98
98
  }
99
99
  const components = buildComponentStats(commits);
100
+ // Single pass over raw fibers to collect source, changeCauses, and hasChangeDescriptions.
101
+ const sourceMap = new Map();
102
+ const changeCausesMap = new Map();
103
+ let hasChangeDescriptions = false;
104
+ for (const raw of rawCommits) {
105
+ for (const fiber of raw.fibers ?? []) {
106
+ const name = fiber.name?.trim() || `(fiber:${fiber.fiberId})`;
107
+ if (fiber.source && !sourceMap.has(name)) {
108
+ sourceMap.set(name, {
109
+ fileName: fiber.source.fileName,
110
+ lineNumber: fiber.source.lineNumber,
111
+ columnNumber: fiber.source.columnNumber,
112
+ });
113
+ }
114
+ const cd = fiber.changeDescription;
115
+ if (cd == null || cd.isFirstMount)
116
+ continue;
117
+ // Count as "exact" only when at least one diff field carries real data.
118
+ const hasRealDiff = (cd.props?.length ?? 0) > 0 ||
119
+ cd.state !== null ||
120
+ cd.context !== null ||
121
+ (cd.hooks?.length ?? 0) > 0;
122
+ if (hasRealDiff)
123
+ hasChangeDescriptions = true;
124
+ // Aggregate per-component causes (even parent-only renders are tracked).
125
+ let causes = changeCausesMap.get(name);
126
+ if (!causes) {
127
+ causes = {
128
+ props: new Set(),
129
+ stateChanged: false,
130
+ contextChanged: false,
131
+ hooks: new Set(),
132
+ parentTriggered: false,
133
+ };
134
+ changeCausesMap.set(name, causes);
135
+ }
136
+ for (const p of cd.props ?? [])
137
+ causes.props.add(p);
138
+ if (cd.state !== null)
139
+ causes.stateChanged = true;
140
+ if (cd.context !== null)
141
+ causes.contextChanged = true;
142
+ for (const h of cd.hooks ?? [])
143
+ causes.hooks.add(h);
144
+ if (cd.parent === true)
145
+ causes.parentTriggered = true;
146
+ }
147
+ }
148
+ for (const component of components) {
149
+ const src = sourceMap.get(component.componentName);
150
+ if (src)
151
+ component.source = src;
152
+ const raw = changeCausesMap.get(component.componentName);
153
+ if (raw &&
154
+ (raw.props.size > 0 ||
155
+ raw.stateChanged ||
156
+ raw.contextChanged ||
157
+ raw.hooks.size > 0 ||
158
+ raw.parentTriggered)) {
159
+ const changeCauses = {
160
+ props: Array.from(raw.props),
161
+ stateChanged: raw.stateChanged,
162
+ contextChanged: raw.contextChanged,
163
+ hooks: Array.from(raw.hooks),
164
+ parentTriggered: raw.parentTriggered,
165
+ };
166
+ component.changeCauses = changeCauses;
167
+ }
168
+ }
100
169
  const totalCommitDuration = commits.reduce((sum, c) => sum + c.duration, 0);
101
170
  const totalRenderDuration = commits.reduce((sum, c) => sum + c.measurements.reduce((ms, m) => ms + m.actualDuration, 0), 0);
102
171
  return {
@@ -109,6 +178,7 @@ export function adaptReactScanEvents(rawCommits, sessionId) {
109
178
  components,
110
179
  totalCommitDuration,
111
180
  totalRenderDuration,
181
+ hasChangeDescriptions,
112
182
  };
113
183
  }
114
184
  //# sourceMappingURL=react-scan-lite.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"react-scan-lite.js","sourceRoot":"","sources":["../../src/parser/react-scan-lite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react-scan-lite.js","sourceRoot":"","sources":["../../src/parser/react-scan-lite.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,22 @@ export interface FiberNode {
27
27
  parentFiberId: number | null;
28
28
  childFiberIds: number[];
29
29
  }
30
+ export interface ComponentSource {
31
+ fileName: string;
32
+ lineNumber: number;
33
+ columnNumber?: number;
34
+ }
35
+ /** Aggregated exact causes derived from react-scan/lite changeDescription data. */
36
+ export interface ChangeCauses {
37
+ /** Unique prop names that changed across all update renders. */
38
+ props: string[];
39
+ stateChanged: boolean;
40
+ contextChanged: boolean;
41
+ /** Unique hook identifiers (e.g. "hook[0]") that fired. */
42
+ hooks: string[];
43
+ /** True if at least one render was triggered by a parent re-render (no own prop/state change). */
44
+ parentTriggered: boolean;
45
+ }
30
46
  export interface ComponentStats {
31
47
  componentName: string;
32
48
  renderCount: number;
@@ -37,6 +53,9 @@ export interface ComponentStats {
37
53
  totalSelfDuration: number;
38
54
  maxActualDuration: number;
39
55
  commitIndices: number[];
56
+ source?: ComponentSource;
57
+ /** Present only when react-scan/lite captured actual changeDescription data in a real browser. */
58
+ changeCauses?: ChangeCauses;
40
59
  }
41
60
  export interface ParsedRenderProfile {
42
61
  id: string;
@@ -48,6 +67,8 @@ export interface ParsedRenderProfile {
48
67
  components: ComponentStats[];
49
68
  totalCommitDuration: number;
50
69
  totalRenderDuration: number;
70
+ /** True when at least one fiber carried changeDescription data (react-scan/lite in-browser capture). */
71
+ hasChangeDescriptions: boolean;
51
72
  }
52
73
  export interface RenderSummaryEntry {
53
74
  componentName: string;
@@ -59,6 +80,7 @@ export interface RenderSummaryEntry {
59
80
  averageActualDuration: number;
60
81
  maxActualDuration: number;
61
82
  commitCount: number;
83
+ source?: ComponentSource;
62
84
  }
63
85
  export interface HotCommitComponentSummary {
64
86
  componentName: string;
@@ -128,6 +150,7 @@ export interface RerenderCause {
128
150
  confidence: RerenderConfidence;
129
151
  evidence: RerenderEvidence[];
130
152
  likelyCauses: string[];
153
+ source?: ComponentSource;
131
154
  }
132
155
  export type RenderIssueType = 'rerender-storm' | 'commit-spike' | 'cascading-render';
133
156
  export type RenderIssueSeverity = 'low' | 'medium' | 'high';
@@ -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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"}
package/dist/store.js CHANGED
@@ -6,7 +6,7 @@ export function getRenderProfile(id) {
6
6
  return profiles.get(id);
7
7
  }
8
8
  export function listRenderProfiles() {
9
- return Array.from(profiles.values()).map(profile => ({
9
+ return Array.from(profiles.values()).map((profile) => ({
10
10
  id: profile.id,
11
11
  filename: profile.filename,
12
12
  commitCount: profile.commits.length,
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAOhC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnD,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QACnC,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM;QACzC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;KACjD,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAOhC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACrD,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QACnC,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM;QACzC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;KACjD,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"begin-render-analysis.d.ts","sourceRoot":"","sources":["../../src/tools/begin-render-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyEnE"}
1
+ {"version":3,"file":"begin-render-analysis.d.ts","sourceRoot":"","sources":["../../src/tools/begin-render-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6EnE"}
@@ -36,7 +36,7 @@ export function registerBeginRenderAnalysis(server) {
36
36
  '1. npm install --save-dev react-scan',
37
37
  '2. Create (or overwrite) instrumentation-client.js at your project root with the content in `snippet`.',
38
38
  ' The ingest server runs on a fixed port (7721 by default), so only the sessionId line changes between runs.',
39
- '3. Import it from your app\'s client-side entry point (e.g. _app.tsx, root layout, main.tsx)',
39
+ "3. Import it from your app's client-side entry point (e.g. _app.tsx, root layout, main.tsx)",
40
40
  ' — inspect the project structure to find the right file.',
41
41
  ' The import must run on the client (add "use client" if the entry is a Server Component).',
42
42
  ].join('\n'),
@@ -1 +1 @@
1
- {"version":3,"file":"begin-render-analysis.js","sourceRoot":"","sources":["../../src/tools/begin-render-analysis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CAAC,uBAAuB,EAAE;QAC3C,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,yDAAyD;YACzD,uHAAuH;YACvH,oHAAoH;YACpH,mEAAmE;QACrE,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC;iBACR,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;iBACxB,QAAQ,CACP,yEAAyE;gBACzE,4EAA4E,CAC7E;SACJ;KACF,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxB,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAC;YAE7C,MAAM,OAAO,GAAG;gBACd,+CAA+C;gBAC/C,cAAc;gBACd,gBAAgB,OAAO,CAAC,QAAQ,IAAI;gBACpC,iBAAiB,OAAO,CAAC,SAAS,IAAI;gBACtC,mCAAmC;gBACnC,6BAA6B;gBAC7B,+BAA+B;gBAC/B,KAAK;aACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,MAAM,GAAG;gBACb,QAAQ,EAAE,MAAM;gBAChB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO;gBACP,WAAW,EAAE,2BAA2B;gBACxC,KAAK,EAAE;oBACL,sCAAsC;oBACtC,wGAAwG;oBACxG,+GAA+G;oBAC/G,8FAA8F;oBAC9F,4DAA4D;oBAC5D,6FAA6F;iBAC9F,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,oCAAoC,OAAO,CAAC,SAAS,8BAA8B;aAC9F,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,MAAM,MAAM,GAAG;YACb,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE;gBACL,uFAAuF;gBACvF,2CAA2C;gBAC3C,mEAAmE;gBACnE,kEAAkE;gBAClE,yEAAyE;gBACzE,oDAAoD;gBACpD,4GAA4G;gBAC5G,kFAAkF;aACnF,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,8DAA8D;SACzE,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"begin-render-analysis.js","sourceRoot":"","sources":["../../src/tools/begin-render-analysis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,yDAAyD;YACzD,uHAAuH;YACvH,oHAAoH;YACpH,mEAAmE;QACrE,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC;iBACR,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;iBACxB,QAAQ,CACP,yEAAyE;gBACvE,4EAA4E,CAC/E;SACJ;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAC;YAE7C,MAAM,OAAO,GAAG;gBACd,+CAA+C;gBAC/C,cAAc;gBACd,gBAAgB,OAAO,CAAC,QAAQ,IAAI;gBACpC,iBAAiB,OAAO,CAAC,SAAS,IAAI;gBACtC,mCAAmC;gBACnC,6BAA6B;gBAC7B,+BAA+B;gBAC/B,KAAK;aACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,MAAM,GAAG;gBACb,QAAQ,EAAE,MAAM;gBAChB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO;gBACP,WAAW,EAAE,2BAA2B;gBACxC,KAAK,EAAE;oBACL,sCAAsC;oBACtC,wGAAwG;oBACxG,+GAA+G;oBAC/G,6FAA6F;oBAC7F,4DAA4D;oBAC5D,6FAA6F;iBAC9F,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,oCAAoC,OAAO,CAAC,SAAS,8BAA8B;aAC9F,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,MAAM,MAAM,GAAG;YACb,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE;gBACL,uFAAuF;gBACvF,2CAA2C;gBAC3C,mEAAmE;gBACnE,kEAAkE;gBAClE,yEAAyE;gBACzE,oDAAoD;gBACpD,4GAA4G;gBAC5G,kFAAkF;aACnF,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,8DAA8D;SACzE,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +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"}
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;AA4BpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2D9D"}
@@ -20,8 +20,18 @@ export function registerCompareRenders(server) {
20
20
  inputSchema: {
21
21
  baseProfileId: z.string().describe('Baseline profile ID from load_render_profile'),
22
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.'),
23
+ limit: z
24
+ .number()
25
+ .int()
26
+ .positive()
27
+ .max(25)
28
+ .optional()
29
+ .describe('How many changed components to include. Defaults to 10.'),
30
+ minDeltaMs: z
31
+ .number()
32
+ .nonnegative()
33
+ .optional()
34
+ .describe('Minimum absolute total render delta in ms for changed components. Defaults to 0.'),
25
35
  },
26
36
  }, async ({ baseProfileId, currentProfileId, limit, minDeltaMs }) => {
27
37
  const baseProfile = getRenderProfile(baseProfileId);
@@ -34,7 +44,8 @@ export function registerCompareRenders(server) {
34
44
  }
35
45
  const comparison = compareRenders(baseProfile, currentProfile, limit ?? 10, minDeltaMs ?? 0);
36
46
  return {
37
- content: [{
47
+ content: [
48
+ {
38
49
  type: 'text',
39
50
  text: JSON.stringify({
40
51
  ...comparison,
@@ -43,7 +54,8 @@ export function registerCompareRenders(server) {
43
54
  added: comparison.added.map(formatDiffEntry),
44
55
  removed: comparison.removed.map(formatDiffEntry),
45
56
  }, null, 2),
46
- }],
57
+ },
58
+ ],
47
59
  };
48
60
  });
49
61
  }
@@ -1 +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
+ {"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,CAStB,KAAQ;IACR,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,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,0GAA0G;QAC5G,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;iBACL,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,QAAQ,CAAC,yDAAyD,CAAC;YACtE,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,WAAW,EAAE;iBACb,QAAQ,EAAE;iBACV,QAAQ,CACP,kFAAkF,CACnF;SACJ;KACF,EACD,KAAK,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;QAC/D,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;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,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,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-captured-renders.d.ts","sourceRoot":"","sources":["../../src/tools/get-captured-renders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+ElE"}
1
+ {"version":3,"file":"get-captured-renders.d.ts","sourceRoot":"","sources":["../../src/tools/get-captured-renders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6FlE"}
@@ -14,7 +14,12 @@ export function registerGetCapturedRenders(server) {
14
14
  const session = getCaptureSession(sessionId);
15
15
  if (!session) {
16
16
  return {
17
- content: [{ type: 'text', text: JSON.stringify({ error: `Session "${sessionId}" not found` }, null, 2) }],
17
+ content: [
18
+ {
19
+ type: 'text',
20
+ text: JSON.stringify({ error: `Session "${sessionId}" not found` }, null, 2),
21
+ },
22
+ ],
18
23
  isError: true,
19
24
  };
20
25
  }
@@ -51,7 +56,8 @@ export function registerGetCapturedRenders(server) {
51
56
  profilingStatus = 'available';
52
57
  }
53
58
  else {
54
- profilingStatus = 'unavailable — app may be running a production build; switch to `next dev`';
59
+ profilingStatus =
60
+ 'unavailable — app may be running a production build; switch to `next dev`';
55
61
  }
56
62
  const diagnosis = unknownEvents > 0 && commitCount === 0
57
63
  ? `${unknownEvents} unrecognized POST(s) received — the instrumentation snippet may not be imported correctly, or it is running server-side. Check that the import is in a client-side entry point and the file path is correct.`
@@ -1 +1 @@
1
- {"version":3,"file":"get-captured-renders.js","sourceRoot":"","sources":["../../src/tools/get-captured-renders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-captured-renders.js","sourceRoot":"","sources":["../../src/tools/get-captured-renders.ts"],"names":[],"mappings":"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"}
@@ -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,CAuC7D"}
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,CA2E7D"}
@@ -8,20 +8,35 @@ export function registerGetHotCommits(server) {
8
8
  description: 'Rank the most expensive commits in a loaded render profile and show the top components inside each spike.',
9
9
  inputSchema: {
10
10
  profileId: z.string().describe('Profile ID from load_render_profile'),
11
- limit: z.number().int().positive().max(25).optional().describe('How many commits to include. Defaults to 10.'),
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.'),
11
+ limit: z
12
+ .number()
13
+ .int()
14
+ .positive()
15
+ .max(25)
16
+ .optional()
17
+ .describe('How many commits to include. Defaults to 10.'),
18
+ componentLimit: z
19
+ .number()
20
+ .int()
21
+ .positive()
22
+ .max(10)
23
+ .optional()
24
+ .describe('How many top components to include per commit. Defaults to 3.'),
25
+ priorityLevel: z
26
+ .string()
27
+ .optional()
28
+ .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.'),
14
29
  },
15
30
  }, async ({ profileId, limit, componentLimit, priorityLevel }) => {
16
31
  const profile = getRenderProfile(profileId);
17
32
  if (!profile) {
18
33
  throw new Error(`Profile "${profileId}" not found. Call get_render_summary without a profileId to list all loaded profiles.`);
19
34
  }
20
- const hotCommits = getHotCommits(profile, limit ?? 10, componentLimit ?? 3, priorityLevel).map(commit => ({
35
+ const hotCommits = getHotCommits(profile, limit ?? 10, componentLimit ?? 3, priorityLevel).map((commit) => ({
21
36
  ...commit,
22
37
  duration: formatMs(commit.duration),
23
38
  totalActualDuration: formatMs(commit.totalActualDuration),
24
- topComponents: commit.topComponents.map(component => ({
39
+ topComponents: commit.topComponents.map((component) => ({
25
40
  ...component,
26
41
  actualDuration: formatMs(component.actualDuration),
27
42
  selfDuration: formatMs(component.selfDuration),
@@ -29,14 +44,16 @@ export function registerGetHotCommits(server) {
29
44
  })),
30
45
  }));
31
46
  return {
32
- content: [{
47
+ content: [
48
+ {
33
49
  type: 'text',
34
50
  text: JSON.stringify({
35
51
  profileId,
36
52
  timestampNote: 'timestamp values are milliseconds since the profiling session started, not Unix epoch',
37
53
  hotCommits,
38
54
  }, null, 2),
39
- }],
55
+ },
56
+ ],
40
57
  };
41
58
  });
42
59
  }
@@ -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;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"}
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,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,2GAA2G;QAC7G,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YACrE,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,cAAc,EAAE,CAAC;iBACd,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,QAAQ,CAAC,+DAA+D,CAAC;YAC5E,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,kLAAkL,CACnL;SACJ;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE;QAC5D,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,YAAY,SAAS,uFAAuF,CAC7G,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAC9B,OAAO,EACP,KAAK,IAAI,EAAE,EACX,cAAc,IAAI,CAAC,EACnB,aAAa,CACd,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjB,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,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBACtD,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;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,SAAS;wBACT,aAAa,EACX,uFAAuF;wBACzF,UAAU;qBACX,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-render-summary.d.ts","sourceRoot":"","sources":["../../src/tools/get-render-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0DhE"}
1
+ {"version":3,"file":"get-render-summary.d.ts","sourceRoot":"","sources":["../../src/tools/get-render-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsFhE"}
@@ -7,21 +7,32 @@ export function registerGetRenderSummary(server) {
7
7
  title: 'Get Render Summary',
8
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
- profileId: z.string().optional().describe('Profile ID from load_render_profile. Omit to list loaded profiles.'),
11
- limit: z.number().int().positive().max(25).optional().describe('How many top components to include. Defaults to 10.'),
10
+ profileId: z
11
+ .string()
12
+ .optional()
13
+ .describe('Profile ID from load_render_profile. Omit to list loaded profiles.'),
14
+ limit: z
15
+ .number()
16
+ .int()
17
+ .positive()
18
+ .max(25)
19
+ .optional()
20
+ .describe('How many top components to include. Defaults to 10.'),
12
21
  },
13
22
  }, async ({ profileId, limit }) => {
14
23
  if (!profileId) {
15
24
  return {
16
- content: [{
25
+ content: [
26
+ {
17
27
  type: 'text',
18
28
  text: JSON.stringify({
19
- profiles: listRenderProfiles().map(profile => ({
29
+ profiles: listRenderProfiles().map((profile) => ({
20
30
  ...profile,
21
31
  totalCommitDuration: `${profile.totalCommitDuration.toFixed(2)}ms`,
22
32
  })),
23
33
  }, null, 2),
24
- }],
34
+ },
35
+ ],
25
36
  };
26
37
  }
27
38
  const profile = getRenderProfile(profileId);
@@ -30,23 +41,24 @@ export function registerGetRenderSummary(server) {
30
41
  }
31
42
  const summary = summarizeRenderProfile(profile, limit ?? 10);
32
43
  return {
33
- content: [{
44
+ content: [
45
+ {
34
46
  type: 'text',
35
47
  text: JSON.stringify({
36
48
  ...summary,
37
49
  totalCommitDuration: formatMs(summary.totalCommitDuration),
38
50
  totalRenderDuration: formatMs(summary.totalRenderDuration),
39
- topComponents: summary.topComponents.map(component => ({
51
+ topComponents: summary.topComponents.map((component) => ({
40
52
  ...component,
41
53
  totalActualDuration: formatMs(component.totalActualDuration),
42
54
  averageActualDuration: formatMs(component.averageActualDuration),
43
55
  maxActualDuration: formatMs(component.maxActualDuration),
44
56
  })),
45
- hotCommits: summary.hotCommits.map(commit => ({
57
+ hotCommits: summary.hotCommits.map((commit) => ({
46
58
  ...commit,
47
59
  duration: formatMs(commit.duration),
48
60
  totalActualDuration: formatMs(commit.totalActualDuration),
49
- topComponents: commit.topComponents.map(component => ({
61
+ topComponents: commit.topComponents.map((component) => ({
50
62
  ...component,
51
63
  actualDuration: formatMs(component.actualDuration),
52
64
  selfDuration: formatMs(component.selfDuration),
@@ -54,7 +66,8 @@ export function registerGetRenderSummary(server) {
54
66
  })),
55
67
  })),
56
68
  }, null, 2),
57
- }],
69
+ },
70
+ ],
58
71
  };
59
72
  });
60
73
  }
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-rerender-causes.d.ts","sourceRoot":"","sources":["../../src/tools/get-rerender-causes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8CjE"}
1
+ {"version":3,"file":"get-rerender-causes.d.ts","sourceRoot":"","sources":["../../src/tools/get-rerender-causes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoEjE"}
@@ -8,42 +8,49 @@ export function registerGetRerenderCauses(server) {
8
8
  description: 'Highlight components with repeated rerenders and explain likely causes using heuristics derived from the exported profile.',
9
9
  inputSchema: {
10
10
  profileId: z.string().describe('Profile ID from load_render_profile'),
11
- limit: z.number().int().positive().max(25).optional().describe('How many components to include. Defaults to 10.'),
12
- minDuration: z.number().nonnegative().optional().describe('Minimum total actual duration in ms for a component to appear. Filters sub-millisecond noise. Defaults to 0.'),
11
+ limit: z
12
+ .number()
13
+ .int()
14
+ .positive()
15
+ .max(25)
16
+ .optional()
17
+ .describe('How many components to include. Defaults to 10.'),
18
+ minDuration: z
19
+ .number()
20
+ .nonnegative()
21
+ .optional()
22
+ .describe('Minimum total actual duration in ms for a component to appear. Filters sub-millisecond noise. Defaults to 0.'),
13
23
  },
14
24
  }, async ({ profileId, limit, minDuration }) => {
15
25
  const profile = getRenderProfile(profileId);
16
26
  if (!profile) {
17
27
  throw new Error(`Profile "${profileId}" not found. Call get_render_summary without a profileId to list all loaded profiles.`);
18
28
  }
19
- const causes = getRerenderCauses(profile, limit ?? 10, minDuration ?? 0).map(cause => ({
29
+ const causes = getRerenderCauses(profile, limit ?? 10, minDuration ?? 0).map((cause) => ({
20
30
  ...cause,
21
31
  score: Number(cause.score.toFixed(1)),
22
32
  totalActualDuration: formatMs(cause.totalActualDuration),
23
33
  }));
34
+ const dataQuality = profile.hasChangeDescriptions ? 'exact' : 'heuristic';
35
+ const qualityNote = profile.hasChangeDescriptions
36
+ ? 'Causes are based on exact prop/state changeDescription data from react-scan/lite.'
37
+ : 'Causes are heuristic — no prop/state diff data available. Run live capture (begin_render_analysis, approach: live) in a real browser to get exact change descriptions.';
24
38
  return {
25
- content: [{
39
+ content: [
40
+ {
26
41
  type: 'text',
27
42
  text: JSON.stringify({
28
43
  profileId,
29
- note: 'Rerender causes are heuristic because exported React Profiler JSON does not include direct prop/state diff metadata.',
44
+ dataQuality,
45
+ note: qualityNote,
30
46
  scoreDocumentation: {
31
- meaning: '0-10 heuristic rerender risk score. Higher means stronger evidence that repeated rerenders are worth investigating.',
32
- thresholds: {
33
- low: '0.0-2.9',
34
- medium: '3.0-5.9',
35
- high: '6.0-10.0',
36
- },
37
- factors: [
38
- 'Repeated update-phase renders',
39
- 'Nested update propagation (component listed as updater for its own commit)',
40
- 'Presence across many commits',
41
- 'Self-intensive render (high self-to-actual ratio, low child delegation)',
42
- ],
47
+ meaning: '0-10 rerender risk score. Factors: update frequency, nested updates, commit spread, self-intensive render, average render duration.',
48
+ thresholds: { low: '0.0-2.9', medium: '3.0-5.9', high: '6.0-10.0' },
43
49
  },
44
50
  causes,
45
51
  }, null, 2),
46
- }],
52
+ },
53
+ ],
47
54
  };
48
55
  });
49
56
  }