@stacknext/diagnostics 0.6.0 → 0.7.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
@@ -1,15 +1,15 @@
1
1
  # @stacknext/diagnostics
2
2
 
3
3
  Deterministic, evidence-backed diagnostics for [StackNext](https://github.com/marrrkkk/stacknext)
4
- telemetry. The engine evaluates four conservative rules over the current
5
- retention sample: repeated SQL shapes, slow spans, repeated external HTTP
6
- endpoints and error fingerprints.
4
+ telemetry. The engine evaluates six conservative rules over the current
5
+ retention sample: repeated SQL shapes, slow requests and spans, repeated
6
+ external HTTP endpoints, request errors and server-error responses.
7
7
 
8
8
  Findings are heuristics, not confirmed root causes. The same report is exposed
9
9
  by the StackNext CLI, dashboard, JSON export and read-only MCP server.
10
10
 
11
11
  ```bash
12
- npm install --save-dev stacknext @stacknext/next
12
+ npm install --save-dev @stacknext/cli @stacknext/next
13
13
  npx stacknext diagnose
14
14
  ```
15
15
 
@@ -1 +1 @@
1
- {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAA;AAcxB;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,sBAAsB,CAclF;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,sBAAsB,EAChC,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,GACrC,MAAM,CAKR;AASD,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAiBnE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIzE;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,QAAQ,yBAA+B,GACtC,sBAAsB,CAYxB"}
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAA;AAcxB;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,sBAAsB,CAclF;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,sBAAsB,EAChC,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,GACrC,MAAM,CAMR;AASD,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAiBnE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIzE;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,QAAQ,yBAA+B,GACtC,sBAAsB,CAYxB"}
package/dist/classify.js CHANGED
@@ -37,6 +37,8 @@ export function spanThresholdMs(category, config) {
37
37
  return config.slowSpans.httpMs;
38
38
  if (category === 'custom')
39
39
  return config.slowSpans.customMs;
40
+ if (category === 'framework')
41
+ return config.slowSpans.frameworkMs;
40
42
  return config.slowSpans.otherMs;
41
43
  }
42
44
  function methodFromName(name) {
@@ -1 +1 @@
1
- {"version":3,"file":"classify.js","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,UAAU,EACV,mBAAmB,GAKpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,SAAS,eAAe,CACtB,UAAmC,EACnC,GAAG,IAAc;IAEjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,KAAK,CAAA;IACpE,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAA;IACtD,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,MAAM,CAAA;IAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAA;IACzD,IACE,UAAU,KAAK,QAAQ;QACvB,UAAU,KAAK,QAAQ;QACvB,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAC5C,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,WAAW,CAAA;IACvD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY;QAAE,OAAO,WAAW,CAAA;IACpE,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAAgC,EAChC,MAAsC;IAEtC,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAA;IAC/D,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAA;IACvD,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAA;IAC3D,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,CAAA;IACjE,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAA;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,0EAA0E,CAAC,IAAI,CAC3F,IAAI,CACL,CAAA;IACD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAmB;IAChD,OAAO,CACL,IAAI,CAAC,MAAM;QACX,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,qBAAqB,CAAC,EAAE,WAAW,EAAE;QACrF,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,CACL,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,MAAM,MAAM,GAAG,eAAe,CAC5B,IAAI,CAAC,UAAU,EACf,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,YAAY,CACb,CAAA;IACD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;IAC/B,CAAC;IACD,MAAM,KAAK,GAAG,iFAAiF,CAAC,IAAI,CAClG,IAAI,CAAC,IAAI,CACV,CAAA;IACD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,mBAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;AACnD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,KAAgC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IACvB,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAC7D,OAAO,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAA;AAC5E,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAmB,EACnB,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC;IAEvC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnC,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,EAAE;QACjD,QAAQ;QACR,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAA;AACH,CAAC"}
package/dist/engine.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import { type DiagnosticCounts, type DiagnosticDetailResponse, type DiagnosticFilters, type DiagnosticFinding, type DiagnosticListResponse, type DiagnosticOverview, type DiagnosticReport, type DiagnosticSnapshot, type StackNextConfig } from '@stacknext/core';
2
- export declare const DIAGNOSTICS_ENGINE_VERSION = "0.6.0";
2
+ export declare const DIAGNOSTICS_ENGINE_VERSION = "0.7.0";
3
3
  export interface DiagnosticEngineOptions {
4
4
  projectName: string;
5
5
  collectorVersion: string;
6
6
  config: StackNextConfig['diagnostics'];
7
+ /** Top-level request threshold; defaults to 500 ms when omitted. */
8
+ slowRequestMs?: number;
7
9
  generatedAt?: number;
8
10
  connected?: boolean;
9
11
  connectedInstances?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAErB,KAAK,kBAAkB,EAEvB,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAA;AAGxB,eAAO,MAAM,0BAA0B,UAAU,CAAA;AAEjD,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AA6BD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,gBAAgB,CAS7E;AAoDD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CA2BlB;AAOD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,iBAAsB,GAC9B,sBAAsB,CA4CxB;AAmDD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,kBAAkB,GAC3B,wBAAwB,GAAG,IAAI,CAQjC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,SAAI,GACX,kBAAkB,CAUpB"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAErB,KAAK,kBAAkB,EAEvB,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAA;AAKxB,eAAO,MAAM,0BAA0B,UAAU,CAAA;AAEjD,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IACtC,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AA8BD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,gBAAgB,CAS7E;AAwGD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CA2BlB;AAOD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,iBAAsB,GAC9B,sBAAsB,CA4CxB;AAmDD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,kBAAkB,GAC3B,wBAAwB,GAAG,IAAI,CAQjC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,SAAI,GACX,kBAAkB,CAUpB"}
package/dist/engine.js CHANGED
@@ -1,10 +1,13 @@
1
1
  import { STACKNEXT_DIAGNOSTICS_FORMAT, STACKNEXT_DIAGNOSTICS_FORMAT_VERSION, STACKNEXT_DIAGNOSTICS_RULE_SET_VERSION, } from '@stacknext/core';
2
- import { evaluateDiagnosticRules } from './rules.js';
3
- export const DIAGNOSTICS_ENGINE_VERSION = '0.6.0';
2
+ import { isControlFlowError } from './fingerprints.js';
3
+ import { evaluateDiagnosticRules, findingMatchesTrace } from './rules.js';
4
+ import { buildTraceIndex } from './trace.js';
5
+ export const DIAGNOSTICS_ENGINE_VERSION = '0.7.0';
4
6
  const REPORT_LIMITATIONS = [
5
7
  'Findings are deterministic heuristics over the current in-memory sample, not confirmed root causes.',
6
8
  'StackNext does not read application source, run EXPLAIN, inspect query plans or modify code.',
7
- 'Null durations are unknown, not zero, and span durations include child work.',
9
+ 'Null durations are unknown, not zero. Self time subtracts the union of direct child intervals and is approximate.',
10
+ 'Request-level rules only analyze traces with a captured request root; detached spans are excluded and noted.',
8
11
  'Only OpenTelemetry and adapter evidence received by the collector is analyzed.',
9
12
  'Redaction and truncation may reduce the specificity of SQL and error signatures.',
10
13
  ];
@@ -36,7 +39,16 @@ export function countFindings(findings) {
36
39
  }
37
40
  return counts;
38
41
  }
39
- function sampleFor(snapshot, options) {
42
+ function sampleFor(snapshot, index, options) {
43
+ const ignoredControlFlowErrors = snapshot.errors.filter(isControlFlowError).length;
44
+ const errorTraceIds = new Set(snapshot.errors
45
+ .filter((error) => !isControlFlowError(error))
46
+ .map((error) => error.resolvedTraceId ?? error.traceId ?? null)
47
+ .filter((traceId) => Boolean(traceId)));
48
+ const serverErrorsWithoutError = index.requestTraces.filter((trace) => trace.statusCode !== null &&
49
+ trace.statusCode >= 500 &&
50
+ trace.statusCode <= 599 &&
51
+ !errorTraceIds.has(trace.traceId)).length;
40
52
  return {
41
53
  firstEventTime: snapshot.firstEventTime,
42
54
  lastEventTime: snapshot.lastEventTime,
@@ -47,9 +59,15 @@ function sampleFor(snapshot, options) {
47
59
  databaseQueries: snapshot.databaseQueries.length,
48
60
  connectedInstances: options.connectedInstances ?? 0,
49
61
  connected: options.connected ?? false,
62
+ requestTraces: index.requestTraces.length,
63
+ tracesWithoutRequestRoot: index.tracesWithoutRequestRoot.filter((trace) => trace.nodes.length > 0).length,
64
+ tracesWithMissingParents: index.requestTraces.filter((trace) => index.missingParentTraceIds.has(trace.traceId)).length,
65
+ unattributedSpans: index.unattributedSpans,
66
+ ignoredControlFlowErrors,
67
+ serverErrorsWithoutError,
50
68
  };
51
69
  }
52
- function buildNotes(snapshot, totalFindings, visibleFindings, config) {
70
+ function buildNotes(snapshot, sample, totalFindings, visibleFindings, config) {
53
71
  const notes = [];
54
72
  if (!config.enabled) {
55
73
  notes.push('Diagnostics are disabled by configuration.');
@@ -67,22 +85,38 @@ function buildNotes(snapshot, totalFindings, visibleFindings, config) {
67
85
  if (totalFindings > visibleFindings) {
68
86
  notes.push(`Showing the top ${visibleFindings} of ${totalFindings} findings. Narrow the filters or raise diagnostics.maxFindings to inspect the rest.`);
69
87
  }
88
+ if (sample.tracesWithoutRequestRoot !== undefined && sample.tracesWithoutRequestRoot > 0) {
89
+ notes.push(`${sample.tracesWithoutRequestRoot} trace${sample.tracesWithoutRequestRoot === 1 ? '' : 's'} had spans but no captured request root; request-level rules ignored them.`);
90
+ }
91
+ if (sample.tracesWithMissingParents !== undefined &&
92
+ sample.tracesWithMissingParents > 0) {
93
+ notes.push(`${sample.tracesWithMissingParents} request trace${sample.tracesWithMissingParents === 1 ? '' : 's'} contain spans whose parent is not in the sample; attribution may be incomplete.`);
94
+ }
95
+ if (sample.unattributedSpans !== undefined && sample.unattributedSpans > 0) {
96
+ notes.push(`${sample.unattributedSpans} span${sample.unattributedSpans === 1 ? '' : 's'} could not be attributed to a request root and were excluded from request-level rules.`);
97
+ }
98
+ if (sample.ignoredControlFlowErrors !== undefined &&
99
+ sample.ignoredControlFlowErrors > 0) {
100
+ notes.push(`${sample.ignoredControlFlowErrors} Next.js control-flow error${sample.ignoredControlFlowErrors === 1 ? '' : 's'} (not-found/redirect) were ignored by the error rules.`);
101
+ }
70
102
  if (snapshot.databaseQueries.some((query) => query.durationMs === null)) {
71
103
  notes.push('One or more database queries have no measured duration; null is not treated as zero.');
72
104
  }
73
105
  return notes;
74
106
  }
75
107
  export function generateDiagnosticReport(snapshot, options) {
76
- const requestByTrace = new Map(snapshot.requests.map((request) => [request.traceId, request]));
108
+ const index = buildTraceIndex(snapshot);
77
109
  const evaluated = options.config.enabled
78
110
  ? evaluateDiagnosticRules({
79
111
  snapshot,
80
112
  config: options.config,
81
- requestByTrace,
113
+ slowRequestMs: options.slowRequestMs ?? 500,
114
+ traceIndex: index,
82
115
  })
83
116
  : [];
84
117
  const maxFindings = options.config.maxFindings;
85
118
  const findings = evaluated.slice(0, maxFindings);
119
+ const sample = sampleFor(snapshot, index, options);
86
120
  return {
87
121
  format: STACKNEXT_DIAGNOSTICS_FORMAT,
88
122
  version: STACKNEXT_DIAGNOSTICS_FORMAT_VERSION,
@@ -91,10 +125,10 @@ export function generateDiagnosticReport(snapshot, options) {
91
125
  generatedAt: options.generatedAt ?? Date.now(),
92
126
  projectName: options.projectName,
93
127
  collectorVersion: options.collectorVersion,
94
- sample: sampleFor(snapshot, options),
128
+ sample,
95
129
  counts: countFindings(findings),
96
130
  findings,
97
- notes: buildNotes(snapshot, evaluated.length, findings.length, options.config),
131
+ notes: buildNotes(snapshot, sample, evaluated.length, findings.length, options.config),
98
132
  limitations: [...REPORT_LIMITATIONS],
99
133
  };
100
134
  }
@@ -118,7 +152,7 @@ export function listDiagnosticFindings(report, filters = {}) {
118
152
  return false;
119
153
  if (route && !finding.route?.toLowerCase().includes(route))
120
154
  return false;
121
- if (traceId && !finding.traceIds.includes(traceId))
155
+ if (traceId && !findingMatchesTrace(finding, traceId))
122
156
  return false;
123
157
  if (filters.since !== undefined && finding.lastSeen < filters.since)
124
158
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -6,11 +6,16 @@ import { type StackNextError } from '@stacknext/core';
6
6
  export declare function sqlFingerprint(sql: string): string;
7
7
  /** Safe, bounded SQL shape used in finding evidence instead of raw SQL. */
8
8
  export declare function sqlPreview(sql: string, maxLength?: number): string;
9
+ export declare function normalizePath(pathname: string): string;
9
10
  /**
10
11
  * Reduces a URL or path to an endpoint shape: credentials, query values,
11
12
  * fragments and ID-like path segments are removed.
12
13
  */
13
14
  export declare function httpEndpoint(value: string | undefined): string | null;
15
+ /** Best-effort table hint from a normalized SQL shape. Never used as proof. */
16
+ export declare function sqlTableHint(sql: string): string | null;
17
+ /** Next.js control-flow errors are not request failures for diagnostics. */
18
+ export declare function isControlFlowError(error: StackNextError): boolean;
14
19
  export declare function normalizeErrorMessage(message: string): string;
15
20
  export declare function errorOperationCategory(error: StackNextError): string;
16
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprints.d.ts","sourceRoot":"","sources":["../src/fingerprints.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAA;AAMxB;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAclD;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAM/D;AAgBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAYrE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU7D;AAmBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAOpE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAQxE;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,EAC1B,KAAK,SAAK,GACT,MAAM,CAIR"}
1
+ {"version":3,"file":"fingerprints.d.ts","sourceRoot":"","sources":["../src/fingerprints.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAA;AAMxB;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA4DlD;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAM/D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAYrE;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvD;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CASjE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU7D;AAmBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAOpE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAQxE;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,EAC1B,KAAK,SAAK,GACT,MAAM,CAIR"}
@@ -6,19 +6,85 @@ const LONG_HEX_PATTERN = /\b[0-9a-f]{16,}\b/gi;
6
6
  * used for grouping only; it is never treated as proof of an N+1 pattern.
7
7
  */
8
8
  export function sqlFingerprint(sql) {
9
- let value = sql.replace(/\/\*[\s\S]*?\*\//g, ' ');
10
- value = value.replace(/--[^\n]*/g, ' ');
11
- value = value.replace(/\$[a-z_]*\$[\s\S]*?\$[a-z_]*\$/gi, '?');
12
- value = value.replace(/'(?:''|[^'])*'/g, '?');
13
- value = value.replace(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi, '?');
14
- value = value.replace(/\$\d+/g, '?');
15
- value = value.replace(/(?<!:):[a-zA-Z_][a-zA-Z0-9_]*/g, '?');
16
- value = value.replace(/@[a-zA-Z_][a-zA-Z0-9_]*/g, '?');
17
- value = value.replace(/\b[0-9a-f]{16,}\b/gi, '?');
18
- value = value.replace(/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/gi, '?');
19
- value = value.replace(/\(\s*\?(?:\s*,\s*\?)+\s*\)/g, '(?)');
20
- value = value.replace(/\s+/g, ' ').trim().toLowerCase();
21
- return value;
9
+ const parts = [];
10
+ let plain = '';
11
+ const flush = () => {
12
+ let value = plain.replace(UUID_PATTERN, '?');
13
+ value = value.replace(/\$\d+/g, '?');
14
+ value = value.replace(/(?<!:):[a-zA-Z_][a-zA-Z0-9_]*/g, '?');
15
+ value = value.replace(/@[a-zA-Z_][a-zA-Z0-9_]*/g, '?');
16
+ value = value.replace(LONG_HEX_PATTERN, '?');
17
+ value = value.replace(/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/gi, '?');
18
+ value = value.replace(/\(\s*\?(?:\s*,\s*\?)+\s*\)/g, '(?)');
19
+ parts.push(value.replace(/\s+/g, ' ').toLowerCase());
20
+ plain = '';
21
+ };
22
+ let index = 0;
23
+ while (index < sql.length) {
24
+ const char = sql[index];
25
+ if (sql.startsWith('--', index)) {
26
+ const end = sql.indexOf('\n', index + 2);
27
+ index = end < 0 ? sql.length : end + 1;
28
+ plain += ' ';
29
+ }
30
+ else if (sql.startsWith('/*', index)) {
31
+ let depth = 1;
32
+ index += 2;
33
+ while (index < sql.length && depth > 0) {
34
+ if (sql.startsWith('/*', index)) {
35
+ depth += 1;
36
+ index += 2;
37
+ }
38
+ else if (sql.startsWith('*/', index)) {
39
+ depth -= 1;
40
+ index += 2;
41
+ }
42
+ else
43
+ index += 1;
44
+ }
45
+ plain += ' ';
46
+ }
47
+ else if (char === '"' || char === '`' || char === '[' || char === "'") {
48
+ const start = index++;
49
+ const closing = char === '[' ? ']' : char;
50
+ // PostgreSQL E strings and MySQL strings support backslash escapes.
51
+ const backslashEscapes = char === "'" && /(?:^|\W)e$/i.test(sql.slice(0, start));
52
+ while (index < sql.length) {
53
+ if (backslashEscapes && sql[index] === '\\') {
54
+ index += 2;
55
+ continue;
56
+ }
57
+ if (sql[index++] !== closing)
58
+ continue;
59
+ if (sql[index] === closing) {
60
+ index += 1;
61
+ continue;
62
+ }
63
+ break;
64
+ }
65
+ if (char === "'") {
66
+ if (backslashEscapes)
67
+ plain = plain.slice(0, -1);
68
+ plain += '?';
69
+ }
70
+ else {
71
+ flush();
72
+ parts.push(sql.slice(start, index));
73
+ }
74
+ }
75
+ else if (char === '$' && /^\$(?:[a-z_][\w]*)?\$/i.test(sql.slice(index))) {
76
+ const delimiter = /^\$(?:[a-z_][\w]*)?\$/i.exec(sql.slice(index))[0];
77
+ const end = sql.indexOf(delimiter, index + delimiter.length);
78
+ index = end < 0 ? sql.length : end + delimiter.length;
79
+ plain += '?';
80
+ }
81
+ else {
82
+ plain += char;
83
+ index += 1;
84
+ }
85
+ }
86
+ flush();
87
+ return parts.join('').trim();
22
88
  }
23
89
  /** Safe, bounded SQL shape used in finding evidence instead of raw SQL. */
24
90
  export function sqlPreview(sql, maxLength = 500) {
@@ -30,7 +96,7 @@ export function sqlPreview(sql, maxLength = 500) {
30
96
  return shape.slice(0, maxLength);
31
97
  return `${shape.slice(0, maxLength - suffix.length)}${suffix}`;
32
98
  }
33
- function normalizePath(pathname) {
99
+ export function normalizePath(pathname) {
34
100
  const segments = pathname.split('/').filter((segment) => segment.length > 0);
35
101
  const normalized = segments.map((segment) => {
36
102
  if (/^\d+$/.test(segment))
@@ -68,6 +134,21 @@ export function httpEndpoint(value) {
68
134
  return normalizePath(stripped);
69
135
  }
70
136
  }
137
+ /** Best-effort table hint from a normalized SQL shape. Never used as proof. */
138
+ export function sqlTableHint(sql) {
139
+ const match = /\b(?:from|join|into|update|delete\s+from)\s+"?([a-z_][a-z0-9_.]*)"?/i.exec(sql);
140
+ const table = match?.[1]?.trim();
141
+ return table ? table.slice(0, 120) : null;
142
+ }
143
+ /** Next.js control-flow errors are not request failures for diagnostics. */
144
+ export function isControlFlowError(error) {
145
+ const digest = error.digest?.trim();
146
+ if (digest &&
147
+ /^(?:NEXT_NOT_FOUND|NEXT_REDIRECT|NEXT_HTTP_ERROR_FALLBACK)(?:;|$)/i.test(digest)) {
148
+ return true;
149
+ }
150
+ return /^(?:NEXT_NOT_FOUND|NEXT_REDIRECT|NEXT_HTTP_ERROR_FALLBACK)(?:;|$)/i.test(error.message.trim());
151
+ }
71
152
  export function normalizeErrorMessage(message) {
72
153
  let value = message.toLowerCase();
73
154
  value = value.replace(/https?:\/\/[^\s]+/g, '<url>');
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprints.js","sourceRoot":"","sources":["../src/fingerprints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fingerprints.js","sourceRoot":"","sources":["../src/fingerprints.ts"],"names":[],"mappings":"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"}
package/dist/rules.d.ts CHANGED
@@ -1,8 +1,13 @@
1
- import { type DiagnosticFinding, type DiagnosticSnapshot, type StackNextConfig, type RequestSummary } from '@stacknext/core';
1
+ import { type DiagnosticFinding, type DiagnosticSnapshot, type StackNextConfig } from '@stacknext/core';
2
+ import { type DiagnosticTraceIndex } from './trace.js';
2
3
  export interface DiagnosticRuleContext {
3
4
  snapshot: DiagnosticSnapshot;
4
5
  config: StackNextConfig['diagnostics'];
5
- requestByTrace: Map<string, RequestSummary>;
6
+ /** Top-level request threshold used by the request summary and slow-request rule. */
7
+ slowRequestMs: number;
8
+ /** Optional pre-built index; the engine builds one and passes it in. */
9
+ traceIndex?: DiagnosticTraceIndex;
6
10
  }
11
+ export declare function findingMatchesTrace(finding: DiagnosticFinding, traceId: string): boolean;
7
12
  export declare function evaluateDiagnosticRules(context: DiagnosticRuleContext): DiagnosticFinding[];
8
13
  //# sourceMappingURL=rules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,iBAAiB,EAEtB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EAIpB,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAA;AAkBxB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IACtC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAC5C;AAsZD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,EAAE,CAkB3F"}
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,iBAAiB,EAGtB,KAAK,kBAAkB,EAKvB,KAAK,eAAe,EAGrB,MAAM,iBAAiB,CAAA;AAkBxB,OAAO,EAWL,KAAK,oBAAoB,EAG1B,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;IACtC,qFAAqF;IACrF,aAAa,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,UAAU,CAAC,EAAE,oBAAoB,CAAA;CAClC;AAiHD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAExF;AAigCD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,EAAE,CA2B3F"}