@newrelic/preflight 1.0.3 → 1.0.5

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 (168) hide show
  1. package/README.md +7 -1
  2. package/dist/alerts/types.d.ts.map +1 -1
  3. package/dist/alerts/types.js.map +1 -1
  4. package/dist/config.d.ts +7 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +5 -3
  7. package/dist/config.js.map +1 -1
  8. package/dist/dashboard/dashboard-server.d.ts +4 -0
  9. package/dist/dashboard/dashboard-server.d.ts.map +1 -1
  10. package/dist/dashboard/dashboard-server.js +42 -1
  11. package/dist/dashboard/dashboard-server.js.map +1 -1
  12. package/dist/dashboard/live-event-bus.js +2 -2
  13. package/dist/dashboard/live-event-bus.js.map +1 -1
  14. package/dist/dashboard/routes/sse-handler.js +3 -3
  15. package/dist/dashboard/routes/sse-handler.js.map +1 -1
  16. package/dist/hooks/collector-script.d.ts.map +1 -1
  17. package/dist/hooks/collector-script.js +1 -5
  18. package/dist/hooks/collector-script.js.map +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +9 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/install/cli.d.ts +1 -0
  24. package/dist/install/cli.d.ts.map +1 -1
  25. package/dist/install/cli.js +306 -106
  26. package/dist/install/cli.js.map +1 -1
  27. package/dist/install/install-helper.d.ts +5 -4
  28. package/dist/install/install-helper.d.ts.map +1 -1
  29. package/dist/install/install-helper.js +2 -2
  30. package/dist/install/install-helper.js.map +1 -1
  31. package/dist/install/json-utils.d.ts +4 -0
  32. package/dist/install/json-utils.d.ts.map +1 -0
  33. package/dist/install/json-utils.js +88 -0
  34. package/dist/install/json-utils.js.map +1 -0
  35. package/dist/install/migrate.d.ts.map +1 -1
  36. package/dist/install/migrate.js +57 -1
  37. package/dist/install/migrate.js.map +1 -1
  38. package/dist/install/schedule.d.ts +1 -0
  39. package/dist/install/schedule.d.ts.map +1 -1
  40. package/dist/install/schedule.js +23 -5
  41. package/dist/install/schedule.js.map +1 -1
  42. package/dist/install/setup-wizard.d.ts.map +1 -1
  43. package/dist/install/setup-wizard.js +105 -44
  44. package/dist/install/setup-wizard.js.map +1 -1
  45. package/dist/metrics/anti-patterns.d.ts.map +1 -1
  46. package/dist/metrics/anti-patterns.js.map +1 -1
  47. package/dist/metrics/context-composition-tracker.d.ts.map +1 -1
  48. package/dist/metrics/context-composition-tracker.js.map +1 -1
  49. package/dist/platforms/copilot-adapter.d.ts.map +1 -1
  50. package/dist/platforms/copilot-adapter.js.map +1 -1
  51. package/dist/proxy/otlp-receiver.d.ts.map +1 -1
  52. package/dist/proxy/otlp-receiver.js.map +1 -1
  53. package/dist/proxy/proxy-manager.js +1 -1
  54. package/dist/proxy/proxy-manager.js.map +1 -1
  55. package/dist/proxy/upstream-stdio.d.ts.map +1 -1
  56. package/dist/proxy/upstream-stdio.js.map +1 -1
  57. package/dist/security/ssrf.js +1 -1
  58. package/dist/security/ssrf.js.map +1 -1
  59. package/dist/server.d.ts.map +1 -1
  60. package/dist/server.js +2 -1
  61. package/dist/server.js.map +1 -1
  62. package/dist/shared/__test-utils__/log-output.d.ts +1 -2
  63. package/dist/shared/__test-utils__/log-output.d.ts.map +1 -1
  64. package/dist/shared/__test-utils__/log-output.js +1 -2
  65. package/dist/shared/__test-utils__/log-output.js.map +1 -1
  66. package/dist/shared/config.d.ts +8 -2
  67. package/dist/shared/config.d.ts.map +1 -1
  68. package/dist/shared/config.js +20 -20
  69. package/dist/shared/config.js.map +1 -1
  70. package/dist/shared/errors.d.ts +1 -1
  71. package/dist/shared/errors.js +10 -10
  72. package/dist/shared/errors.js.map +1 -1
  73. package/dist/shared/events/factory.js +12 -12
  74. package/dist/shared/events/factory.js.map +1 -1
  75. package/dist/shared/events/serialize.d.ts +2 -2
  76. package/dist/shared/events/serialize.js +19 -19
  77. package/dist/shared/events/serialize.js.map +1 -1
  78. package/dist/shared/harvest/event-buffer.d.ts +2 -2
  79. package/dist/shared/harvest/event-buffer.js +3 -3
  80. package/dist/shared/harvest/event-buffer.js.map +1 -1
  81. package/dist/shared/harvest/harvest-scheduler.d.ts +4 -5
  82. package/dist/shared/harvest/harvest-scheduler.d.ts.map +1 -1
  83. package/dist/shared/harvest/harvest-scheduler.js +35 -35
  84. package/dist/shared/harvest/harvest-scheduler.js.map +1 -1
  85. package/dist/shared/harvest/metric-aggregator.d.ts +9 -9
  86. package/dist/shared/harvest/metric-aggregator.d.ts.map +1 -1
  87. package/dist/shared/harvest/metric-aggregator.js +16 -18
  88. package/dist/shared/harvest/metric-aggregator.js.map +1 -1
  89. package/dist/shared/index.d.ts +0 -1
  90. package/dist/shared/index.d.ts.map +1 -1
  91. package/dist/shared/index.js +0 -1
  92. package/dist/shared/index.js.map +1 -1
  93. package/dist/shared/logger.d.ts +4 -5
  94. package/dist/shared/logger.d.ts.map +1 -1
  95. package/dist/shared/logger.js +12 -12
  96. package/dist/shared/logger.js.map +1 -1
  97. package/dist/shared/pricing-data.js +10 -10
  98. package/dist/shared/pricing-data.js.map +1 -1
  99. package/dist/shared/pricing.d.ts +3 -3
  100. package/dist/shared/pricing.js +12 -12
  101. package/dist/shared/pricing.js.map +1 -1
  102. package/dist/shared/redact.d.ts +1 -3
  103. package/dist/shared/redact.d.ts.map +1 -1
  104. package/dist/shared/redact.js +8 -10
  105. package/dist/shared/redact.js.map +1 -1
  106. package/dist/shared/timing.d.ts +4 -4
  107. package/dist/shared/timing.d.ts.map +1 -1
  108. package/dist/shared/timing.js +9 -9
  109. package/dist/shared/timing.js.map +1 -1
  110. package/dist/shared/tokens.d.ts +4 -4
  111. package/dist/shared/tokens.js +16 -16
  112. package/dist/shared/tokens.js.map +1 -1
  113. package/dist/shared/transport/events-api.d.ts +1 -1
  114. package/dist/shared/transport/events-api.d.ts.map +1 -1
  115. package/dist/shared/transport/events-api.js +2 -1
  116. package/dist/shared/transport/events-api.js.map +1 -1
  117. package/dist/shared/transport/http-client.d.ts +1 -1
  118. package/dist/shared/transport/http-client.d.ts.map +1 -1
  119. package/dist/shared/transport/http-client.js +19 -28
  120. package/dist/shared/transport/http-client.js.map +1 -1
  121. package/dist/shared/transport/logs-api.d.ts +2 -3
  122. package/dist/shared/transport/logs-api.d.ts.map +1 -1
  123. package/dist/shared/transport/logs-api.js +3 -3
  124. package/dist/shared/transport/logs-api.js.map +1 -1
  125. package/dist/shared/transport/metric-api.d.ts.map +1 -1
  126. package/dist/shared/transport/metric-api.js +1 -0
  127. package/dist/shared/transport/metric-api.js.map +1 -1
  128. package/dist/shared/transport/otlp-event-bridge.d.ts +10 -5
  129. package/dist/shared/transport/otlp-event-bridge.d.ts.map +1 -1
  130. package/dist/shared/transport/otlp-event-bridge.js +20 -11
  131. package/dist/shared/transport/otlp-event-bridge.js.map +1 -1
  132. package/dist/shared/transport/otlp-shared.d.ts +12 -1
  133. package/dist/shared/transport/otlp-shared.d.ts.map +1 -1
  134. package/dist/shared/transport/otlp-shared.js +20 -4
  135. package/dist/shared/transport/otlp-shared.js.map +1 -1
  136. package/dist/shared/transport/otlp-transport.d.ts +22 -19
  137. package/dist/shared/transport/otlp-transport.d.ts.map +1 -1
  138. package/dist/shared/transport/otlp-transport.js +136 -120
  139. package/dist/shared/transport/otlp-transport.js.map +1 -1
  140. package/dist/shared/transport/types.d.ts +7 -3
  141. package/dist/shared/transport/types.d.ts.map +1 -1
  142. package/dist/storage/session-store.js +1 -1
  143. package/dist/storage/weekly-summary.js +3 -3
  144. package/dist/storage/weekly-summary.js.map +1 -1
  145. package/dist/tools/cross-session-tools.js +1 -1
  146. package/dist/tools/cross-session-tools.js.map +1 -1
  147. package/dist/tools/session-stats.d.ts.map +1 -1
  148. package/dist/tools/session-stats.js +2 -1
  149. package/dist/tools/session-stats.js.map +1 -1
  150. package/dist/tracing/mcp-tracer.js +1 -1
  151. package/dist/tracing/mcp-tracer.js.map +1 -1
  152. package/dist/transport/nr-ingest.d.ts.map +1 -1
  153. package/dist/transport/nr-ingest.js +4 -0
  154. package/dist/transport/nr-ingest.js.map +1 -1
  155. package/dist/version.d.ts +2 -0
  156. package/dist/version.d.ts.map +1 -0
  157. package/dist/version.js +21 -0
  158. package/dist/version.js.map +1 -0
  159. package/dist/web/assets/index-CW0UCwb9.css +2 -0
  160. package/dist/web/assets/index-HRyb4aZK.js +64 -0
  161. package/dist/web/index.html +2 -2
  162. package/package.json +23 -23
  163. package/dist/shared/version.d.ts +0 -2
  164. package/dist/shared/version.d.ts.map +0 -1
  165. package/dist/shared/version.js +0 -2
  166. package/dist/shared/version.js.map +0 -1
  167. package/dist/web/assets/index-BrL281N-.css +0 -2
  168. package/dist/web/assets/index-CcaYZzXm.js +0 -42
@@ -6,8 +6,7 @@ import { BasicTracerProvider, BatchSpanProcessor } from '@opentelemetry/sdk-trac
6
6
  import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
7
7
  import { resourceFromAttributes } from '@opentelemetry/resources';
8
8
  import { createLogger } from '../logger.js';
9
- import { validateOtlpEndpoint, hasOtlpAuthHeader, DEFAULT_CLIENT_NAME } from './otlp-shared.js';
10
- import { VERSION } from '../version.js';
9
+ import { validateOtlpEndpoint, hasOtlpAuthHeader, DEFAULT_CLIENT_NAME, buildUserAgent, sanitizeClientString, } from './otlp-shared.js';
11
10
  const gzipAsync = promisify(gzip);
12
11
  const logger = createLogger('otlp-transport');
13
12
  export class OtlpTransport {
@@ -18,32 +17,45 @@ export class OtlpTransport {
18
17
  endpoint;
19
18
  headers;
20
19
  requestTimeoutMs;
21
- clientName;
20
+ clientVersion;
21
+ userAgent;
22
+ hasAuth;
22
23
  hasWarnedNoAuth = false;
23
- /**
24
- * Resource attributes shared by both the SDK-driven path (tracer/meter
25
- * providers) and the manual `exportMetrics` payload.
26
- * Keeping a single resolved attribute map prevents `service.name` from
27
- * drifting between the two paths — previously `this.appName` was stored
28
- * separately and re-encoded into the OTLP envelope, which would silently
29
- * diverge if anyone added a second resource attribute.
30
- */
31
- resourceAttributes;
24
+ otlpResource;
25
+ otlpScope;
26
+ metricsHeaders;
32
27
  constructor(options) {
33
28
  validateOtlpEndpoint(options.endpoint, 'OtlpTransport');
34
- this.clientName = options.clientName || DEFAULT_CLIENT_NAME;
35
- this.resourceAttributes = Object.freeze({ 'service.name': options.appName });
36
- const resource = resourceFromAttributes({ ...this.resourceAttributes });
29
+ const clientName = sanitizeClientString(options.clientName, DEFAULT_CLIENT_NAME);
30
+ this.clientVersion = sanitizeClientString(options.clientVersion, '');
31
+ this.userAgent = buildUserAgent(clientName, this.clientVersion);
32
+ const resourceAttributes = Object.freeze({ 'service.name': options.appName });
33
+ this.otlpResource = Object.entries(resourceAttributes).map(([key, value]) => ({
34
+ key,
35
+ value: { stringValue: value },
36
+ }));
37
+ this.otlpScope = this.clientVersion
38
+ ? { name: clientName, version: this.clientVersion }
39
+ : { name: clientName };
40
+ const resource = resourceFromAttributes({ ...resourceAttributes });
37
41
  this.endpoint = options.endpoint;
38
- this.headers = options.headers ?? {};
42
+ this.headers = { ...(options.headers ?? {}) };
43
+ this.hasAuth = hasOtlpAuthHeader(this.headers);
39
44
  this.requestTimeoutMs = options.requestTimeoutMs ?? 30_000;
45
+ this.metricsHeaders = Object.freeze({
46
+ ...this.headers,
47
+ 'Content-Type': 'application/json',
48
+ 'Content-Encoding': 'gzip',
49
+ 'User-Agent': this.userAgent,
50
+ });
51
+ const sdkHeaders = { ...this.headers, 'User-Agent': this.userAgent };
40
52
  this.traceExporter = new OTLPTraceExporter({
41
53
  url: `${options.endpoint}/v1/traces`,
42
- headers: options.headers ?? {},
54
+ headers: sdkHeaders,
43
55
  });
44
56
  this.metricExporter = new OTLPMetricExporter({
45
57
  url: `${options.endpoint}/v1/metrics`,
46
- headers: options.headers ?? {},
58
+ headers: sdkHeaders,
47
59
  });
48
60
  this.tracerProvider = new BasicTracerProvider({
49
61
  resource,
@@ -60,17 +72,25 @@ export class OtlpTransport {
60
72
  });
61
73
  }
62
74
  async flush() {
63
- await this.tracerProvider.forceFlush();
64
- await this.meterProvider.forceFlush();
75
+ await this.settledOrThrow([this.tracerProvider.forceFlush(), this.meterProvider.forceFlush()], 'OTLP flush failed on multiple providers');
65
76
  }
66
77
  async shutdown() {
67
- await this.tracerProvider.shutdown();
68
- await this.meterProvider.shutdown();
78
+ await this.settledOrThrow([this.tracerProvider.shutdown(), this.meterProvider.shutdown()], 'OTLP shutdown failed on multiple providers');
79
+ }
80
+ async settledOrThrow(ops, message) {
81
+ const results = await Promise.allSettled(ops);
82
+ const errors = results
83
+ .filter((r) => r.status === 'rejected')
84
+ .map((r) => (r.reason instanceof Error ? r.reason : new Error(String(r.reason))));
85
+ if (errors.length === 1)
86
+ throw errors[0];
87
+ if (errors.length > 1)
88
+ throw new AggregateError(errors, message);
69
89
  }
70
90
  /**
71
91
  * Return an OTel `Tracer` for the given instrumentation name. The returned
72
- * value is the `Tracer` interface from `@opentelemetry/api`
73
- *; consumers that bind to the type explicitly should
92
+ * value is the `Tracer` interface from `@opentelemetry/api`;
93
+ * consumers that bind to the type explicitly should
74
94
  * `import type { Tracer } from '@opentelemetry/api'`. `@opentelemetry/api`
75
95
  * is already a regular dependency of this package, so no extra install is
76
96
  * required. The type is intentionally NOT re-exported from this package's
@@ -79,7 +99,7 @@ export class OtlpTransport {
79
99
  * unrelated imports.
80
100
  */
81
101
  getTracer(name) {
82
- return this.tracerProvider.getTracer(name);
102
+ return this.tracerProvider.getTracer(name, this.clientVersion || undefined);
83
103
  }
84
104
  /**
85
105
  * Return an OTel `Meter` for the given instrumentation name. See
@@ -87,106 +107,27 @@ export class OtlpTransport {
87
107
  * (`import type { Meter } from '@opentelemetry/api'`).
88
108
  */
89
109
  getMeter(name) {
90
- return this.meterProvider.getMeter(name);
110
+ return this.meterProvider.getMeter(name, this.clientVersion || undefined);
91
111
  }
92
112
  async exportMetrics(metrics) {
93
113
  if (metrics.length === 0)
94
114
  return;
95
115
  // Warn ONCE when no auth header is present — emitting on every call would
96
- // flood stderr with identical lines in long-running agents (§TR1).
97
- if (!hasOtlpAuthHeader(this.headers) && !this.hasWarnedNoAuth) {
116
+ // flood stderr with identical lines in long-running agents.
117
+ if (!this.hasAuth && !this.hasWarnedNoAuth) {
98
118
  this.hasWarnedNoAuth = true;
99
119
  logger.warn('OTLP metric export attempted with no auth header — collector may reject', {
100
120
  endpoint: this.endpoint,
101
121
  });
102
122
  }
103
- const otlpAttributes = (attrs) => Object.entries(attrs ?? {}).map(([key, value]) => ({
104
- key,
105
- value: typeof value === 'number'
106
- ? { doubleValue: value }
107
- : typeof value === 'boolean'
108
- ? { boolValue: value }
109
- : { stringValue: String(value) },
110
- }));
111
- const numericDataPoint = (m) => ({
112
- // For count (delta Sum) metrics, include startTimeUnixNano per the OTLP
113
- // spec (§TR2). Gauge data points do not require it but it is harmless.
114
- // Clamp to 0: if timestamp < intervalMs (misconfigured metric), a negative
115
- // startTimeUnixNano would be rejected by strict OTLP collectors (§TR7).
116
- startTimeUnixNano: m.type === 'count' ? Math.max(0, m.timestamp - m.intervalMs) * 1_000_000 : undefined,
117
- timeUnixNano: m.timestamp * 1_000_000,
118
- asDouble: m.value,
119
- attributes: otlpAttributes(m.attributes),
120
- });
121
- // summary is now a first-class type with a structured
122
- // value `{ count, sum, min, max }`. OTLP doesn't have a single
123
- // "Summary"-shaped metric kind; the closest faithful mapping is OTLP
124
- // Histogram with explicit `count` and `sum` fields plus per-data-point
125
- // `min` / `max`. Bucket boundaries are intentionally omitted: NR doesn't
126
- // need them for summary aggregation, and emitting empty `bucketCounts`
127
- // alongside `min`/`max` is the documented OTLP shape for unbucketed
128
- // summaries (`explicitBounds: []`, `bucketCounts: [<count>]`).
129
- const summaryDataPoint = (m) => ({
130
- // OTLP Histogram with DELTA temporality requires startTimeUnixNano (§TR2).
131
- startTimeUnixNano: Math.max(0, m.timestamp - m.intervalMs) * 1_000_000,
132
- timeUnixNano: m.timestamp * 1_000_000,
133
- attributes: otlpAttributes(m.attributes),
134
- count: m.value.count,
135
- sum: m.value.sum,
136
- min: m.value.min,
137
- max: m.value.max,
138
- bucketCounts: [m.value.count],
139
- explicitBounds: [],
140
- });
141
- // Map NrMetric.type → OTLP metric kind:
142
- // - `gauge` → OTLP Gauge (point-in-time numeric value)
143
- // - `count` → OTLP Sum (monotonic, DELTA aggregation temporality = 1).
144
- // NrCountMetric carries intervalMs — it represents a bounded-interval
145
- // delta, not a cumulative running total. Using CUMULATIVE (2) would
146
- // cause downstream collectors to treat each harvest as a monotonically-
147
- // increasing total, producing incorrect rate calculations (§TR1).
148
- // - `summary` → OTLP Histogram (with explicit min/max/sum/count fields,
149
- // no buckets) — see §4.9 note above on why histogram is the closest
150
- // faithful mapping.
151
- const otlpMetric = (m) => {
152
- if (m.type === 'count') {
153
- return {
154
- name: m.name,
155
- sum: {
156
- dataPoints: [numericDataPoint(m)],
157
- // 1 = DELTA — the value represents the count within intervalMs,
158
- // not a cumulative total from a fixed epoch.
159
- aggregationTemporality: 1,
160
- isMonotonic: true,
161
- },
162
- };
163
- }
164
- if (m.type === 'summary') {
165
- return {
166
- name: m.name,
167
- histogram: {
168
- dataPoints: [summaryDataPoint(m)],
169
- // Aggregation temporality 1 = DELTA (the count/sum/min/max
170
- // describe the harvest interval, not a cumulative total).
171
- aggregationTemporality: 1,
172
- },
173
- };
174
- }
175
- return { name: m.name, gauge: { dataPoints: [numericDataPoint(m)] } };
176
- };
177
123
  const payload = {
178
124
  resourceMetrics: [
179
125
  {
180
- resource: {
181
- attributes: Object.entries(this.resourceAttributes).map(([key, value]) => ({
182
- key,
183
- value: { stringValue: value },
184
- })),
185
- },
126
+ resource: { attributes: this.otlpResource },
186
127
  scopeMetrics: [
187
128
  {
188
- scope: { name: this.clientName },
189
- metrics: metrics.map(otlpMetric),
129
+ scope: this.otlpScope,
130
+ metrics: metrics.map((m) => this.otlpMetric(m)),
190
131
  },
191
132
  ],
192
133
  },
@@ -203,34 +144,109 @@ export class OtlpTransport {
203
144
  // level retry queue is rarely engaged for events. For metrics, we
204
145
  // intentionally rely on the scheduler's retry queue instead — there
205
146
  // is no PeriodicExportingMetricReader in this code path.
206
- // Gzip-compress the payload to match sendWithRetry (§TR3). The NR OTLP
147
+ // Gzip-compress the payload to match sendWithRetry. The NR OTLP
207
148
  // endpoint accepts gzip; for large metric batches this is a 5-10× size win.
208
149
  const compressed = await gzipAsync(JSON.stringify(payload));
209
150
  const response = await fetch(`${this.endpoint}/v1/metrics`, {
210
151
  method: 'POST',
211
- headers: {
212
- 'Content-Type': 'application/json',
213
- 'Content-Encoding': 'gzip',
214
- 'User-Agent': `${this.clientName}/${VERSION}`,
215
- ...this.headers,
216
- },
152
+ headers: this.metricsHeaders,
217
153
  body: compressed,
218
154
  signal: AbortSignal.timeout(this.requestTimeoutMs),
219
- // §5.20 — see http-client.ts for rationale.
155
+ // see http-client.ts for rationale.
220
156
  keepalive: true,
221
157
  });
222
158
  if (!response.ok) {
223
159
  const body = await response.text().catch(() => '');
224
160
  const msg = `OTLP metric export failed: HTTP ${response.status}${body ? ` — ${body.slice(0, 256)}` : ''}`;
225
161
  // 400 means the payload itself is malformed — retrying the same payload
226
- // will always fail, so surface this as a distinct non-retryable error (§TR9).
162
+ // will always fail, so surface this as a distinct non-retryable error.
227
163
  if (response.status === 400) {
228
164
  throw Object.assign(new Error(msg), { code: 'OTLP_BAD_REQUEST' });
229
165
  }
230
166
  throw new Error(msg);
231
167
  }
232
- // Drain on success so undici returns the socket to the keep-alive pool (§HC1).
168
+ // Drain on success so undici returns the socket to the keep-alive pool.
233
169
  await response.body?.cancel().catch(() => { });
234
170
  }
171
+ otlpAttributes(attrs) {
172
+ return Object.entries(attrs ?? {}).map(([key, value]) => ({
173
+ key,
174
+ value: typeof value === 'number'
175
+ ? { doubleValue: value }
176
+ : typeof value === 'boolean'
177
+ ? { boolValue: value }
178
+ : { stringValue: String(value) },
179
+ }));
180
+ }
181
+ numericDataPoint(m) {
182
+ return {
183
+ // For count (delta Sum) metrics, include startTimeUnixNano per the OTLP
184
+ // spec. Gauge data points do not require it but it is harmless.
185
+ // Clamp to 0: if timestamp < intervalMs (misconfigured metric), a negative
186
+ // startTimeUnixNano would be rejected by strict OTLP collectors.
187
+ startTimeUnixNano: m.type === 'count' ? Math.max(0, m.timestamp - m.intervalMs) * 1_000_000 : undefined,
188
+ timeUnixNano: m.timestamp * 1_000_000,
189
+ asDouble: m.value,
190
+ attributes: this.otlpAttributes(m.attributes),
191
+ };
192
+ }
193
+ // summary is now a first-class type with a structured
194
+ // value `{ count, sum, min, max }`. OTLP doesn't have a single
195
+ // "Summary"-shaped metric kind; the closest faithful mapping is OTLP
196
+ // Histogram with explicit `count` and `sum` fields plus per-data-point
197
+ // `min` / `max`. Bucket boundaries are intentionally omitted: NR doesn't
198
+ // need them for summary aggregation, and emitting empty `bucketCounts`
199
+ // alongside `min`/`max` is the documented OTLP shape for unbucketed
200
+ // summaries (`explicitBounds: []`, `bucketCounts: [<count>]`).
201
+ summaryDataPoint(m) {
202
+ return {
203
+ // OTLP Histogram with DELTA temporality requires startTimeUnixNano.
204
+ startTimeUnixNano: Math.max(0, m.timestamp - m.intervalMs) * 1_000_000,
205
+ timeUnixNano: m.timestamp * 1_000_000,
206
+ attributes: this.otlpAttributes(m.attributes),
207
+ count: m.value.count,
208
+ sum: m.value.sum,
209
+ min: m.value.min,
210
+ max: m.value.max,
211
+ bucketCounts: [m.value.count],
212
+ explicitBounds: [],
213
+ };
214
+ }
215
+ // Map NrMetric.type → OTLP metric kind:
216
+ // - `gauge` → OTLP Gauge (point-in-time numeric value)
217
+ // - `count` → OTLP Sum (monotonic, DELTA aggregation temporality = 1).
218
+ // NrCountMetric carries intervalMs — it represents a bounded-interval
219
+ // delta, not a cumulative running total. Using CUMULATIVE (2) would
220
+ // cause downstream collectors to treat each harvest as a monotonically-
221
+ // increasing total, producing incorrect rate calculations.
222
+ // - `summary` → OTLP Histogram (with explicit min/max/sum/count fields,
223
+ // no buckets) — see note above on why histogram is the closest
224
+ // faithful mapping.
225
+ otlpMetric(m) {
226
+ if (m.type === 'count') {
227
+ return {
228
+ name: m.name,
229
+ sum: {
230
+ dataPoints: [this.numericDataPoint(m)],
231
+ // 1 = DELTA — the value represents the count within intervalMs,
232
+ // not a cumulative total from a fixed epoch.
233
+ aggregationTemporality: 1,
234
+ isMonotonic: true,
235
+ },
236
+ };
237
+ }
238
+ if (m.type === 'summary') {
239
+ return {
240
+ name: m.name,
241
+ histogram: {
242
+ dataPoints: [this.summaryDataPoint(m)],
243
+ // Aggregation temporality 1 = DELTA (the count/sum/min/max
244
+ // describe the harvest interval, not a cumulative total).
245
+ aggregationTemporality: 1,
246
+ },
247
+ };
248
+ }
249
+ return { name: m.name, gauge: { dataPoints: [this.numericDataPoint(m)] } };
250
+ }
235
251
  }
236
252
  //# sourceMappingURL=otlp-transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"otlp-transport.js","sourceRoot":"","sources":["../../../src/shared/transport/otlp-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otlp-transport.js","sourceRoot":"","sources":["../../../src/shared/transport/otlp-transport.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Selects which downstream transport(s) the harvest scheduler ships to
3
- *. Single source of truth for the literal union — both
2
+ * Selects which downstream transport(s) the harvest scheduler ships to.
3
+ * Single source of truth for the literal union — both
4
4
  * `AgentConfig.transport` and `HarvestSchedulerOptions.transport` consume
5
5
  * this type so a future addition (e.g. a Datadog transport) only needs to
6
6
  * widen the union here.
@@ -101,10 +101,12 @@ export interface TransportOptions {
101
101
  readonly requestTimeoutMs?: number;
102
102
  /**
103
103
  * Identifies the consuming client in the `User-Agent` header sent to NR
104
- * ingest endpoints (e.g. `'preflight'`, `'my-agent'`). Defaults to
104
+ * ingest endpoints (e.g. `'preflight'`, `'nr-ai-agent'`). Defaults to
105
105
  * `'ai-telemetry'` when not provided.
106
106
  */
107
107
  readonly clientName?: string;
108
+ /** Version of the consuming client for the `User-Agent` header. */
109
+ readonly clientVersion?: string;
108
110
  }
109
111
  export interface TransportResult {
110
112
  readonly success: boolean;
@@ -125,5 +127,7 @@ export interface HttpSendOptions {
125
127
  * `'ai-telemetry'` when not provided.
126
128
  */
127
129
  readonly clientName?: string;
130
+ /** Version of the consuming client for the `User-Agent` header. */
131
+ readonly clientVersion?: string;
128
132
  }
129
133
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/transport/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAChE;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,kCAAkC;AAClC,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,aAAa,GAAG,eAAe,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/transport/types.ts"],"names":[],"mappings":"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"}
@@ -280,7 +280,7 @@ function formatDate(date) {
280
280
  return date.toISOString().slice(0, 10);
281
281
  }
282
282
  /**
283
- * N-06: Explicitly extract known fields from a raw session JSON string rather
283
+ * Explicitly extract known fields from a raw session JSON string rather
284
284
  * than blindly casting JSON.parse output. Prevents untrusted keys from disk
285
285
  * being misinterpreted as typed properties.
286
286
  */
@@ -63,7 +63,7 @@ export class WeeklySummaryGenerator {
63
63
  this.sessionStore = options.sessionStore;
64
64
  }
65
65
  generate(weekId) {
66
- // N-03: defense-in-depth — reject non-conforming weekIds before filepath construction
66
+ // defense-in-depth — reject non-conforming weekIds before filepath construction
67
67
  if (!/^\d{4}-W\d{2}$/.test(weekId)) {
68
68
  throw new Error(`Invalid weekId format: "${weekId}". Expected YYYY-Wnn.`);
69
69
  }
@@ -157,7 +157,7 @@ function aggregateSessions(weekId, sessions) {
157
157
  let totalTestsPassed = 0;
158
158
  let efficiencySum = 0;
159
159
  let efficiencyCount = 0;
160
- // N-06: null-proto accumulators — prevent prototype pollution from disk-sourced keys
160
+ // null-proto accumulators — prevent prototype pollution from disk-sourced keys
161
161
  const toolBreakdown = Object.create(null);
162
162
  const antiPatternCounts = Object.create(null);
163
163
  for (const session of sessions) {
@@ -205,7 +205,7 @@ function aggregateDeveloperSessions(sessions) {
205
205
  let totalTestsPassed = 0;
206
206
  let efficiencySum = 0;
207
207
  let efficiencyCount = 0;
208
- // N-06: null-proto accumulators — prevent prototype pollution from disk-sourced keys
208
+ // null-proto accumulators — prevent prototype pollution from disk-sourced keys
209
209
  const toolBreakdown = Object.create(null);
210
210
  const antiPatternCounts = Object.create(null);
211
211
  for (const session of sessions) {
@@ -1 +1 @@
1
- {"version":3,"file":"weekly-summary.js","sourceRoot":"","sources":["../../src/storage/weekly-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"weekly-summary.js","sourceRoot":"","sources":["../../src/storage/weekly-summary.ts"],"names":[],"mappings":"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"}
@@ -295,7 +295,7 @@ export function handleGetWeeklySummary(weeklySummaryGenerator, args) {
295
295
  ],
296
296
  };
297
297
  }
298
- // N-03: validate week format before it reaches file-path construction
298
+ // validate week format before it reaches file-path construction
299
299
  if (!/^\d{4}-W\d{2}$/.test(args.week)) {
300
300
  return {
301
301
  content: [