proofscan 0.10.26 → 0.10.27

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 (92) hide show
  1. package/dist/cli.js +4 -2
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/catalog.d.ts.map +1 -1
  4. package/dist/commands/catalog.js +22 -0
  5. package/dist/commands/catalog.js.map +1 -1
  6. package/dist/commands/connectors.d.ts.map +1 -1
  7. package/dist/commands/connectors.js +10 -3
  8. package/dist/commands/connectors.js.map +1 -1
  9. package/dist/commands/index.d.ts +1 -0
  10. package/dist/commands/index.d.ts.map +1 -1
  11. package/dist/commands/index.js +2 -0
  12. package/dist/commands/index.js.map +1 -1
  13. package/dist/commands/monitor.d.ts +6 -0
  14. package/dist/commands/monitor.d.ts.map +1 -0
  15. package/dist/commands/monitor.js +58 -0
  16. package/dist/commands/monitor.js.map +1 -0
  17. package/dist/html/analytics.d.ts +58 -0
  18. package/dist/html/analytics.d.ts.map +1 -0
  19. package/dist/html/analytics.js +337 -0
  20. package/dist/html/analytics.js.map +1 -0
  21. package/dist/html/index.d.ts +3 -2
  22. package/dist/html/index.d.ts.map +1 -1
  23. package/dist/html/index.js +3 -1
  24. package/dist/html/index.js.map +1 -1
  25. package/dist/html/templates.d.ts +9 -1
  26. package/dist/html/templates.d.ts.map +1 -1
  27. package/dist/html/templates.js +580 -30
  28. package/dist/html/templates.js.map +1 -1
  29. package/dist/html/types.d.ts +93 -0
  30. package/dist/html/types.d.ts.map +1 -1
  31. package/dist/html/types.js.map +1 -1
  32. package/dist/monitor/data/aggregator.d.ts +13 -0
  33. package/dist/monitor/data/aggregator.d.ts.map +1 -0
  34. package/dist/monitor/data/aggregator.js +101 -0
  35. package/dist/monitor/data/aggregator.js.map +1 -0
  36. package/dist/monitor/data/connectors.d.ts +13 -0
  37. package/dist/monitor/data/connectors.d.ts.map +1 -0
  38. package/dist/monitor/data/connectors.js +326 -0
  39. package/dist/monitor/data/connectors.js.map +1 -0
  40. package/dist/monitor/data/popl.d.ts +30 -0
  41. package/dist/monitor/data/popl.d.ts.map +1 -0
  42. package/dist/monitor/data/popl.js +310 -0
  43. package/dist/monitor/data/popl.js.map +1 -0
  44. package/dist/monitor/index.d.ts +6 -0
  45. package/dist/monitor/index.d.ts.map +1 -0
  46. package/dist/monitor/index.js +6 -0
  47. package/dist/monitor/index.js.map +1 -0
  48. package/dist/monitor/routes/api.d.ts +7 -0
  49. package/dist/monitor/routes/api.d.ts.map +1 -0
  50. package/dist/monitor/routes/api.js +63 -0
  51. package/dist/monitor/routes/api.js.map +1 -0
  52. package/dist/monitor/routes/connectors.d.ts +7 -0
  53. package/dist/monitor/routes/connectors.d.ts.map +1 -0
  54. package/dist/monitor/routes/connectors.js +417 -0
  55. package/dist/monitor/routes/connectors.js.map +1 -0
  56. package/dist/monitor/routes/home.d.ts +7 -0
  57. package/dist/monitor/routes/home.d.ts.map +1 -0
  58. package/dist/monitor/routes/home.js +15 -0
  59. package/dist/monitor/routes/home.js.map +1 -0
  60. package/dist/monitor/routes/index.d.ts +10 -0
  61. package/dist/monitor/routes/index.d.ts.map +1 -0
  62. package/dist/monitor/routes/index.js +19 -0
  63. package/dist/monitor/routes/index.js.map +1 -0
  64. package/dist/monitor/routes/popl.d.ts +7 -0
  65. package/dist/monitor/routes/popl.d.ts.map +1 -0
  66. package/dist/monitor/routes/popl.js +84 -0
  67. package/dist/monitor/routes/popl.js.map +1 -0
  68. package/dist/monitor/server.d.ts +24 -0
  69. package/dist/monitor/server.d.ts.map +1 -0
  70. package/dist/monitor/server.js +52 -0
  71. package/dist/monitor/server.js.map +1 -0
  72. package/dist/monitor/templates/components.d.ts +21 -0
  73. package/dist/monitor/templates/components.d.ts.map +1 -0
  74. package/dist/monitor/templates/components.js +405 -0
  75. package/dist/monitor/templates/components.js.map +1 -0
  76. package/dist/monitor/templates/home.d.ts +9 -0
  77. package/dist/monitor/templates/home.d.ts.map +1 -0
  78. package/dist/monitor/templates/home.js +322 -0
  79. package/dist/monitor/templates/home.js.map +1 -0
  80. package/dist/monitor/templates/layout.d.ts +26 -0
  81. package/dist/monitor/templates/layout.d.ts.map +1 -0
  82. package/dist/monitor/templates/layout.js +186 -0
  83. package/dist/monitor/templates/layout.js.map +1 -0
  84. package/dist/monitor/templates/popl.d.ts +33 -0
  85. package/dist/monitor/templates/popl.d.ts.map +1 -0
  86. package/dist/monitor/templates/popl.js +654 -0
  87. package/dist/monitor/templates/popl.js.map +1 -0
  88. package/dist/monitor/types.d.ts +121 -0
  89. package/dist/monitor/types.d.ts.map +1 -0
  90. package/dist/monitor/types.js +5 -0
  91. package/dist/monitor/types.js.map +1 -0
  92. package/package.json +3 -1
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Analytics computation for Connector HTML reports (Phase 5.2)
3
+ *
4
+ * Computes KPIs, heatmap, latency histogram, and top tools
5
+ * from session report data.
6
+ */
7
+ import type { HtmlSessionReportV1, HtmlConnectorAnalyticsV1 } from './types.js';
8
+ /**
9
+ * Minimum sample size for P95 calculation.
10
+ * Below this threshold, P95 returns null to avoid statistical noise.
11
+ */
12
+ export declare const P95_MIN_SAMPLES = 20;
13
+ /**
14
+ * Fixed latency histogram buckets.
15
+ * to_ms: null means +infinity (for "1000+" bucket)
16
+ */
17
+ export declare const LATENCY_BUCKETS: readonly [{
18
+ readonly label: "0-10";
19
+ readonly from_ms: 0;
20
+ readonly to_ms: 10;
21
+ }, {
22
+ readonly label: "10-25";
23
+ readonly from_ms: 10;
24
+ readonly to_ms: 25;
25
+ }, {
26
+ readonly label: "25-50";
27
+ readonly from_ms: 25;
28
+ readonly to_ms: 50;
29
+ }, {
30
+ readonly label: "50-100";
31
+ readonly from_ms: 50;
32
+ readonly to_ms: 100;
33
+ }, {
34
+ readonly label: "100-250";
35
+ readonly from_ms: 100;
36
+ readonly to_ms: 250;
37
+ }, {
38
+ readonly label: "250-500";
39
+ readonly from_ms: 250;
40
+ readonly to_ms: 500;
41
+ }, {
42
+ readonly label: "500-1000";
43
+ readonly from_ms: 500;
44
+ readonly to_ms: 1000;
45
+ }, {
46
+ readonly label: "1000+";
47
+ readonly from_ms: 1000;
48
+ readonly to_ms: null;
49
+ }];
50
+ /**
51
+ * Compute all analytics for a connector report.
52
+ */
53
+ export declare function computeConnectorAnalytics(args: {
54
+ sessionReports: Record<string, HtmlSessionReportV1>;
55
+ sessionsTotal: number;
56
+ sessionsDisplayed: number;
57
+ }): HtmlConnectorAnalyticsV1;
58
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/html/analytics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAEnB,wBAAwB,EAUzB,MAAM,YAAY,CAAC;AAMpB;;;GAGG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASlB,CAAC;AAMX;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GAAG,wBAAwB,CAuB3B"}
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Analytics computation for Connector HTML reports (Phase 5.2)
3
+ *
4
+ * Computes KPIs, heatmap, latency histogram, and top tools
5
+ * from session report data.
6
+ */
7
+ // ============================================================================
8
+ // Constants
9
+ // ============================================================================
10
+ /**
11
+ * Minimum sample size for P95 calculation.
12
+ * Below this threshold, P95 returns null to avoid statistical noise.
13
+ */
14
+ export const P95_MIN_SAMPLES = 20;
15
+ /**
16
+ * Fixed latency histogram buckets.
17
+ * to_ms: null means +infinity (for "1000+" bucket)
18
+ */
19
+ export const LATENCY_BUCKETS = [
20
+ { label: '0-10', from_ms: 0, to_ms: 10 },
21
+ { label: '10-25', from_ms: 10, to_ms: 25 },
22
+ { label: '25-50', from_ms: 25, to_ms: 50 },
23
+ { label: '50-100', from_ms: 50, to_ms: 100 },
24
+ { label: '100-250', from_ms: 100, to_ms: 250 },
25
+ { label: '250-500', from_ms: 250, to_ms: 500 },
26
+ { label: '500-1000', from_ms: 500, to_ms: 1000 },
27
+ { label: '1000+', from_ms: 1000, to_ms: null }, // null = +infinity
28
+ ];
29
+ // ============================================================================
30
+ // Main Entry Point
31
+ // ============================================================================
32
+ /**
33
+ * Compute all analytics for a connector report.
34
+ */
35
+ export function computeConnectorAnalytics(args) {
36
+ const { sessionReports, sessionsTotal, sessionsDisplayed } = args;
37
+ // Collect all RPCs from all sessions
38
+ const allRpcs = [];
39
+ for (const report of Object.values(sessionReports)) {
40
+ allRpcs.push(...report.rpcs);
41
+ }
42
+ // Compute each analytics component
43
+ const topTools = computeTopTools(allRpcs);
44
+ const kpis = computeKpis(allRpcs, sessionsTotal, sessionsDisplayed, topTools);
45
+ const heatmap = computeHeatmap(allRpcs);
46
+ const latency = computeLatencyHistogram(allRpcs);
47
+ const methodDistribution = computeMethodDistribution(allRpcs);
48
+ return {
49
+ kpis,
50
+ heatmap,
51
+ latency,
52
+ top_tools: topTools,
53
+ method_distribution: methodDistribution,
54
+ };
55
+ }
56
+ // ============================================================================
57
+ // KPI Computation
58
+ // ============================================================================
59
+ /**
60
+ * Compute KPI metrics from RPCs.
61
+ */
62
+ function computeKpis(rpcs, sessionsTotal, sessionsDisplayed, topTools) {
63
+ // Count by status
64
+ let okCount = 0;
65
+ let errCount = 0;
66
+ let pendingCount = 0;
67
+ // Latency collection
68
+ const latencies = [];
69
+ // Bytes
70
+ let totalRequestBytes = 0;
71
+ let totalResponseBytes = 0;
72
+ for (const rpc of rpcs) {
73
+ // Status counting
74
+ switch (rpc.status) {
75
+ case 'OK':
76
+ okCount++;
77
+ break;
78
+ case 'ERR':
79
+ errCount++;
80
+ break;
81
+ case 'PENDING':
82
+ pendingCount++;
83
+ break;
84
+ }
85
+ // Latency
86
+ if (rpc.latency_ms !== null) {
87
+ latencies.push(rpc.latency_ms);
88
+ }
89
+ // Bytes
90
+ totalRequestBytes += rpc.request.size;
91
+ totalResponseBytes += rpc.response.size;
92
+ }
93
+ // Latency statistics
94
+ const avgLatency = latencies.length > 0 ? Math.round(latencies.reduce((a, b) => a + b, 0) / latencies.length) : null;
95
+ const p95Latency = computeP95(latencies);
96
+ const maxLatency = latencies.length > 0 ? Math.max(...latencies) : null;
97
+ // Top tool from topTools
98
+ const topToolName = topTools.items.length > 0 ? topTools.items[0].name : null;
99
+ const topToolCalls = topTools.items.length > 0 ? topTools.items[0].count : null;
100
+ return {
101
+ rpc_total: rpcs.length,
102
+ rpc_ok: okCount,
103
+ rpc_err: errCount,
104
+ rpc_pending: pendingCount,
105
+ avg_latency_ms: avgLatency,
106
+ p95_latency_ms: p95Latency,
107
+ max_latency_ms: maxLatency,
108
+ total_request_bytes: totalRequestBytes,
109
+ total_response_bytes: totalResponseBytes,
110
+ sessions_total: sessionsTotal,
111
+ sessions_displayed: sessionsDisplayed,
112
+ top_tool_name: topToolName,
113
+ top_tool_calls: topToolCalls,
114
+ };
115
+ }
116
+ /**
117
+ * Compute P95 latency using nearest-rank method.
118
+ * Returns null if sample size < P95_MIN_SAMPLES.
119
+ *
120
+ * Algorithm: k = ceil(0.95 * n), take sorted[k-1]
121
+ */
122
+ function computeP95(latencies) {
123
+ const n = latencies.length;
124
+ if (n < P95_MIN_SAMPLES) {
125
+ return null;
126
+ }
127
+ const sorted = [...latencies].sort((a, b) => a - b);
128
+ const k = Math.ceil(0.95 * n);
129
+ return sorted[k - 1];
130
+ }
131
+ // ============================================================================
132
+ // Heatmap Computation
133
+ // ============================================================================
134
+ /**
135
+ * Compute activity heatmap from RPCs.
136
+ * Groups RPCs by UTC date and fills gaps with zero-count days.
137
+ *
138
+ * Note: request_ts is stored in UTC ISO8601 format (Z suffix),
139
+ * so slice(0, 10) gives the UTC date.
140
+ */
141
+ function computeHeatmap(rpcs) {
142
+ if (rpcs.length === 0) {
143
+ const today = new Date().toISOString().slice(0, 10);
144
+ return {
145
+ start_date: today,
146
+ end_date: today,
147
+ cells: [{ date: today, count: 0 }],
148
+ max_count: 0,
149
+ };
150
+ }
151
+ // Count RPCs per UTC date
152
+ const dateCounts = new Map();
153
+ for (const rpc of rpcs) {
154
+ // request_ts is stored in UTC ISO8601 (Z suffix), so slice(0, 10) gives UTC date
155
+ const date = rpc.request_ts.slice(0, 10);
156
+ dateCounts.set(date, (dateCounts.get(date) || 0) + 1);
157
+ }
158
+ // Find date range
159
+ const dates = Array.from(dateCounts.keys()).sort();
160
+ const startDate = dates[0];
161
+ const endDate = dates[dates.length - 1];
162
+ // Fill gaps with zero-count days
163
+ const cells = [];
164
+ const current = new Date(startDate + 'T00:00:00Z');
165
+ const end = new Date(endDate + 'T00:00:00Z');
166
+ while (current <= end) {
167
+ const dateStr = current.toISOString().slice(0, 10);
168
+ cells.push({
169
+ date: dateStr,
170
+ count: dateCounts.get(dateStr) || 0,
171
+ });
172
+ current.setUTCDate(current.getUTCDate() + 1);
173
+ }
174
+ // Calculate max count for intensity scaling
175
+ const maxCount = Math.max(...cells.map((c) => c.count));
176
+ return {
177
+ start_date: startDate,
178
+ end_date: endDate,
179
+ cells,
180
+ max_count: maxCount,
181
+ };
182
+ }
183
+ // ============================================================================
184
+ // Latency Histogram Computation
185
+ // ============================================================================
186
+ /**
187
+ * Compute latency histogram using fixed buckets.
188
+ */
189
+ function computeLatencyHistogram(rpcs) {
190
+ // Initialize buckets with zero counts
191
+ const buckets = LATENCY_BUCKETS.map((b) => ({
192
+ label: b.label,
193
+ from_ms: b.from_ms,
194
+ to_ms: b.to_ms,
195
+ count: 0,
196
+ }));
197
+ let sampleSize = 0;
198
+ let excludedCount = 0;
199
+ for (const rpc of rpcs) {
200
+ if (rpc.latency_ms === null) {
201
+ excludedCount++;
202
+ continue;
203
+ }
204
+ sampleSize++;
205
+ const latency = rpc.latency_ms;
206
+ // Find matching bucket
207
+ // Bucket condition: from_ms <= latency < to_ms (or to_ms is null for +infinity)
208
+ for (const bucket of buckets) {
209
+ const inLowerBound = latency >= bucket.from_ms;
210
+ const inUpperBound = bucket.to_ms === null || latency < bucket.to_ms;
211
+ if (inLowerBound && inUpperBound) {
212
+ bucket.count++;
213
+ break;
214
+ }
215
+ }
216
+ }
217
+ return {
218
+ buckets,
219
+ sample_size: sampleSize,
220
+ excluded_count: excludedCount,
221
+ };
222
+ }
223
+ // ============================================================================
224
+ // Top Tools Computation
225
+ // ============================================================================
226
+ /**
227
+ * Compute top 5 tools from tools/call RPCs.
228
+ *
229
+ * Tool name extraction fallback chain: params.name ?? params.tool ?? params.toolName
230
+ * If none found, the RPC is skipped (not counted as "unknown").
231
+ */
232
+ function computeTopTools(rpcs) {
233
+ const toolCounts = new Map();
234
+ let totalCalls = 0;
235
+ for (const rpc of rpcs) {
236
+ if (rpc.method !== 'tools/call') {
237
+ continue;
238
+ }
239
+ // Extract tool name from request payload
240
+ const toolName = extractToolName(rpc.request.json);
241
+ if (toolName === null) {
242
+ continue; // Skip if no tool name found
243
+ }
244
+ toolCounts.set(toolName, (toolCounts.get(toolName) || 0) + 1);
245
+ totalCalls++;
246
+ }
247
+ // Sort by count descending and take top 5
248
+ const sorted = Array.from(toolCounts.entries())
249
+ .sort((a, b) => b[1] - a[1])
250
+ .slice(0, 5);
251
+ const items = sorted.map(([name, count]) => ({
252
+ name,
253
+ count,
254
+ pct: totalCalls > 0 ? Math.round((count / totalCalls) * 100) : 0,
255
+ }));
256
+ return {
257
+ items,
258
+ total_calls: totalCalls,
259
+ };
260
+ }
261
+ /**
262
+ * Extract tool name from request JSON.
263
+ * Fallback chain: params.name ?? params.tool ?? params.toolName
264
+ */
265
+ function extractToolName(json) {
266
+ if (json === null || typeof json !== 'object') {
267
+ return null;
268
+ }
269
+ const obj = json;
270
+ const params = obj.params;
271
+ if (params === null || typeof params !== 'object') {
272
+ return null;
273
+ }
274
+ const p = params;
275
+ // Fallback chain: params.name ?? params.tool ?? params.toolName
276
+ if (typeof p.name === 'string' && p.name.length > 0) {
277
+ return p.name;
278
+ }
279
+ if (typeof p.tool === 'string' && p.tool.length > 0) {
280
+ return p.tool;
281
+ }
282
+ if (typeof p.toolName === 'string' && p.toolName.length > 0) {
283
+ return p.toolName;
284
+ }
285
+ return null;
286
+ }
287
+ // ============================================================================
288
+ // Method Distribution Computation
289
+ // ============================================================================
290
+ /**
291
+ * Compute method distribution for donut chart.
292
+ * Shows top 5 methods + "Others" bucket.
293
+ */
294
+ function computeMethodDistribution(rpcs) {
295
+ if (rpcs.length === 0) {
296
+ return {
297
+ slices: [],
298
+ total_rpcs: 0,
299
+ };
300
+ }
301
+ // Count by method
302
+ const methodCounts = new Map();
303
+ for (const rpc of rpcs) {
304
+ methodCounts.set(rpc.method, (methodCounts.get(rpc.method) || 0) + 1);
305
+ }
306
+ // Sort by count descending
307
+ const sorted = Array.from(methodCounts.entries()).sort((a, b) => b[1] - a[1]);
308
+ const totalRpcs = rpcs.length;
309
+ const slices = [];
310
+ // Take top 5
311
+ const top5 = sorted.slice(0, 5);
312
+ let top5Total = 0;
313
+ for (const [method, count] of top5) {
314
+ top5Total += count;
315
+ slices.push({
316
+ method,
317
+ count,
318
+ pct: Math.round((count / totalRpcs) * 100),
319
+ });
320
+ }
321
+ // Add "Others" if there are more than 5 methods
322
+ if (sorted.length > 5) {
323
+ const othersCount = totalRpcs - top5Total;
324
+ if (othersCount > 0) {
325
+ slices.push({
326
+ method: 'Others',
327
+ count: othersCount,
328
+ pct: Math.round((othersCount / totalRpcs) * 100),
329
+ });
330
+ }
331
+ }
332
+ return {
333
+ slices,
334
+ total_rpcs: totalRpcs,
335
+ };
336
+ }
337
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/html/analytics.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,9 @@
4
4
  * Exports standalone HTML reports for RPC and Session data.
5
5
  */
6
6
  export { HTML_REPORT_SCHEMA_VERSION, DEFAULT_EMBED_MAX_BYTES, TRUNCATION_PREVIEW_LENGTH, SHORT_ID_LENGTH, DEFAULT_EXPORT_OPTIONS, toRpcStatus, getStatusSymbol, createPayloadData, getRpcHtmlFilename, getSessionHtmlFilename, getSpillFilename, getConnectorHtmlFilename, } from './types.js';
7
- export type { HtmlReportMeta, RpcStatus, HtmlExportOptions, PayloadData, HtmlRpcData, HtmlRpcReportV1, SessionRpcDetail, HtmlSessionData, HtmlSessionReportV1, HtmlMcpCapabilities, HtmlMcpServerInfo, HtmlConnectorInfo, HtmlConnectorSessionRow, HtmlConnectorReportV1, } from './types.js';
8
- export { escapeHtml, escapeJsonForScript, generateRpcHtml, generateSessionHtml, generateConnectorHtml, } from './templates.js';
7
+ export type { HtmlReportMeta, RpcStatus, HtmlExportOptions, PayloadData, HtmlRpcData, HtmlRpcReportV1, SessionRpcDetail, HtmlSessionData, HtmlSessionReportV1, HtmlMcpCapabilities, HtmlMcpServerInfo, HtmlConnectorInfo, HtmlConnectorSessionRow, HtmlConnectorReportV1, HtmlConnectorKpis, HtmlHeatmapCell, HtmlHeatmapData, HtmlLatencyBucket, HtmlLatencyHistogram, HtmlTopTool, HtmlTopToolsData, HtmlMethodSlice, HtmlMethodDistribution, HtmlConnectorAnalyticsV1, } from './types.js';
8
+ export { escapeHtml, escapeJsonForScript, generateRpcHtml, generateSessionHtml, generateConnectorHtml, renderHeatmap, renderMethodDistribution, } from './templates.js';
9
9
  export { openInBrowser } from './browser.js';
10
10
  export { getPackageVersion, validateOutputPath, validateEmbedMaxBytes, ensureOutputDir, safeWriteFile, } from './utils.js';
11
+ export { computeConnectorAnalytics, LATENCY_BUCKETS, P95_MIN_SAMPLES } from './analytics.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/html/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EAEnB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/html/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EAEnB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EAErB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -6,9 +6,11 @@
6
6
  // Types
7
7
  export { HTML_REPORT_SCHEMA_VERSION, DEFAULT_EMBED_MAX_BYTES, TRUNCATION_PREVIEW_LENGTH, SHORT_ID_LENGTH, DEFAULT_EXPORT_OPTIONS, toRpcStatus, getStatusSymbol, createPayloadData, getRpcHtmlFilename, getSessionHtmlFilename, getSpillFilename, getConnectorHtmlFilename, } from './types.js';
8
8
  // Templates
9
- export { escapeHtml, escapeJsonForScript, generateRpcHtml, generateSessionHtml, generateConnectorHtml, } from './templates.js';
9
+ export { escapeHtml, escapeJsonForScript, generateRpcHtml, generateSessionHtml, generateConnectorHtml, renderHeatmap, renderMethodDistribution, } from './templates.js';
10
10
  // Browser
11
11
  export { openInBrowser } from './browser.js';
12
12
  // Utilities
13
13
  export { getPackageVersion, validateOutputPath, validateEmbedMaxBytes, ensureOutputDir, safeWriteFile, } from './utils.js';
14
+ // Analytics (Phase 5.2)
15
+ export { computeConnectorAnalytics, LATENCY_BUCKETS, P95_MIN_SAMPLES } from './analytics.js';
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/html/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAoBpB,YAAY;AACZ,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/html/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AA+BpB,YAAY;AACZ,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,wBAAwB;AACxB,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * Generates standalone HTML files for RPC and Session reports.
5
5
  * Dark theme with neon blue accent badges.
6
6
  */
7
- import type { HtmlConnectorReportV1, HtmlRpcReportV1, HtmlSessionReportV1 } from './types.js';
7
+ import type { HtmlConnectorReportV1, HtmlHeatmapData, HtmlMethodDistribution, HtmlRpcReportV1, HtmlSessionReportV1 } from './types.js';
8
8
  /**
9
9
  * Escape HTML special characters to prevent XSS
10
10
  */
@@ -22,6 +22,14 @@ export declare function generateRpcHtml(report: HtmlRpcReportV1): string;
22
22
  * Generate Session HTML report (2-pane Wireshark-style layout)
23
23
  */
24
24
  export declare function generateSessionHtml(report: HtmlSessionReportV1): string;
25
+ /**
26
+ * Render activity heatmap (GitHub contributions style, SVG)
27
+ */
28
+ export declare function renderHeatmap(heatmap: HtmlHeatmapData): string;
29
+ /**
30
+ * Render method distribution donut chart (SVG)
31
+ */
32
+ export declare function renderMethodDistribution(methodDist: HtmlMethodDistribution): string;
25
33
  /**
26
34
  * Generate Connector HTML report (3-hierarchy: Connector -> Sessions -> RPCs)
27
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/html/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,qBAAqB,EAErB,eAAe,EACf,mBAAmB,EAIpB,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AA0jBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAyE/D;AAuBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA4EvE;AAyrBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAuG3E"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/html/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAGV,qBAAqB,EAErB,eAAe,EAEf,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EAKpB,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AA0jBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAyE/D;AAuBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA4EvE;AAu5BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAoD9D;AAsFD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,sBAAsB,GAAG,MAAM,CAuFnF;AAuHD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CA8G3E"}