autotel-devtools 19.0.0 → 19.1.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
@@ -237,7 +237,7 @@ Options:
237
237
 
238
238
  - `--port, -p` - Port to listen on (default: 4318). If the port is taken, the receiver walks forward to the next free port and prints a warning.
239
239
  - `--host, -H` - Host to bind to (default: 127.0.0.1)
240
- - `--title, -t` - Dashboard title
240
+ - `--title, -t` - Dashboard title, used for the startup banner and the browser tab (default: `autotel-devtools`). Useful when several dashboards are open at once.
241
241
 
242
242
  When bound to a loopback host, the receiver listens on **both** `127.0.0.1`
243
243
  and `::1`, so a client connecting via `localhost` reaches it regardless of how
package/dist/cli.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const require_http = require('./http-bOYC2_Z0.cjs');
2
+ const require_http = require('./http-53ldVU8k.cjs');
3
3
  const require_listen = require('./listen-DGzVi7DE.cjs');
4
4
  let node_http = require("node:http");
5
5
  let node_fs = require("node:fs");
@@ -9,7 +9,7 @@ let node_child_process = require("node:child_process");
9
9
 
10
10
  //#region src/cli.ts
11
11
  function printHelp() {
12
- process.stdout.write("autotel-devtools - Standalone OTLP receiver with web devtools UI\n\nUsage: autotel-devtools [port] [options]\n autotel-devtools claude [claude args] [--print-env] [--log-prompts]\n\nSubcommands:\n claude Start the receiver AND launch Claude Code wired to it\n (HTTP/protobuf → this receiver, 1s intervals, session id on).\n Open the \"Agents\" tab to watch sessions, tokens, cost,\n tool / MCP / sub-agent / skill usage live.\n --print-env Print the telemetry env block and exit (don't launch)\n --log-prompts Capture prompt text (default: length only / private)\n\nArguments:\n port Port to listen on (shorthand for --port; must be a positive integer)\n\nOptions:\n -p, --port <port> Port to listen on (default: 4318, env: AUTOTEL_DEVTOOLS_PORT).\n If the port is taken, the next free port is used and a warning is shown.\n -H, --host <host> Host to bind to (default: 127.0.0.1, env: AUTOTEL_DEVTOOLS_HOST)\n -t, --title <title> Dashboard title (env: AUTOTEL_DEVTOOLS_TITLE)\n Env limits: AUTOTEL_MAX_TRACE_COUNT, AUTOTEL_MAX_LOG_COUNT, AUTOTEL_MAX_METRIC_COUNT\n -h, --help Show this help message\n -v, --version Show version number\n\nEndpoints:\n GET / Web devtools UI (fullpage)\n GET /widget.js Widget bundle (embed in your app)\n POST /v1/traces Receive OTLP JSON trace data\n GET /v1/traces Read back received traces (verify ingestion in tests)\n DELETE /v1/traces Clear captured telemetry (test reset)\n POST /v1/logs Receive OTLP JSON log data\n POST /v1/metrics Receive OTLP JSON metric data\n WS /ws WebSocket stream for real-time updates\n GET /healthz Health check\n\nExamples:\n npx autotel-devtools\n npx autotel-devtools 4319\n npx autotel-devtools -p 4319 -H 0.0.0.0\n npx autotel-devtools claude # watch Claude Code in the Agents tab\n npx autotel-devtools claude --print-env # just print the env (for MDM / VS Code)\n\nThen point your app:\n OTEL_EXPORTER_OTLP_PROTOCOL=http/json OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 node app.js\n\nView in browser:\n http://localhost:4318\n\nOr embed widget in your app:\n <script src=\"http://localhost:4318/widget.js\"><\/script>\n\n");
12
+ process.stdout.write("autotel-devtools - Standalone OTLP receiver with web devtools UI\n\nUsage: autotel-devtools [port] [options]\n autotel-devtools claude [claude args] [--print-env] [--log-prompts]\n\nSubcommands:\n claude Start the receiver AND launch Claude Code wired to it\n (HTTP/protobuf → this receiver, 1s intervals, session id on).\n Open the \"Agents\" tab to watch sessions, tokens, cost,\n tool / MCP / sub-agent / skill usage live.\n --print-env Print the telemetry env block and exit (don't launch)\n --log-prompts Capture prompt text (default: length only / private)\n\nArguments:\n port Port to listen on (shorthand for --port; must be a positive integer)\n\nOptions:\n -p, --port <port> Port to listen on (default: 4318, env: AUTOTEL_DEVTOOLS_PORT).\n If the port is taken, the next free port is used and a warning is shown.\n -H, --host <host> Host to bind to (default: 127.0.0.1, env: AUTOTEL_DEVTOOLS_HOST)\n -t, --title <title> Dashboard title, shown in the banner and browser tab\n (env: AUTOTEL_DEVTOOLS_TITLE)\n Env limits: AUTOTEL_MAX_TRACE_COUNT, AUTOTEL_MAX_LOG_COUNT, AUTOTEL_MAX_METRIC_COUNT\n -h, --help Show this help message\n -v, --version Show version number\n\nEndpoints:\n GET / Web devtools UI (fullpage)\n GET /widget.js Widget bundle (embed in your app)\n POST /v1/traces Receive OTLP JSON trace data\n GET /v1/traces Read back received traces (verify ingestion in tests)\n DELETE /v1/traces Clear captured telemetry (test reset)\n POST /v1/logs Receive OTLP JSON log data\n POST /v1/metrics Receive OTLP JSON metric data\n WS /ws WebSocket stream for real-time updates\n GET /healthz Health check\n\nExamples:\n npx autotel-devtools\n npx autotel-devtools 4319\n npx autotel-devtools -p 4319 -H 0.0.0.0\n npx autotel-devtools claude # watch Claude Code in the Agents tab\n npx autotel-devtools claude --print-env # just print the env (for MDM / VS Code)\n\nThen point your app:\n OTEL_EXPORTER_OTLP_PROTOCOL=http/json OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 node app.js\n\nView in browser:\n http://localhost:4318\n\nOr embed widget in your app:\n <script src=\"http://localhost:4318/widget.js\"><\/script>\n\n");
13
13
  }
14
14
  function printVersion() {
15
15
  try {
@@ -79,12 +79,18 @@ async function startReceiver(options) {
79
79
  host: options.host,
80
80
  verbose: true
81
81
  });
82
- require_http.attachDevtoolsRoutes(httpServer, wsServer, { loopbackOnly });
82
+ require_http.attachDevtoolsRoutes(httpServer, wsServer, {
83
+ loopbackOnly,
84
+ title: options.title
85
+ });
83
86
  const listeners = require_listen.listenLoopbackDualStack({
84
87
  primary: httpServer,
85
88
  port: options.port,
86
89
  host: options.host,
87
- attachSecondary: (s) => require_http.attachDevtoolsRoutes(s, wsServer, { loopbackOnly })
90
+ attachSecondary: (s) => require_http.attachDevtoolsRoutes(s, wsServer, {
91
+ loopbackOnly,
92
+ title: options.title
93
+ })
88
94
  });
89
95
  const { addresses, warnings, port: boundPort } = await listeners.ready;
90
96
  if (boundPort !== options.port) if (await require_http.probePortHolder(options.host, options.port) === "autotel-devtools") warnings.push(`another autotel-devtools is already running on port ${options.port}; this instance is on ${boundPort}. Use the existing one, or stop it and restart here.`);
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { d as DevtoolsServer, i as probePortHolder, p as hostHeaderIsLoopback, t as attachDevtoolsRoutes } from "./http-BLmWVZP0.js";
2
+ import { d as DevtoolsServer, i as probePortHolder, p as hostHeaderIsLoopback, t as attachDevtoolsRoutes } from "./http-B8rl56bF.js";
3
3
  import { t as listenLoopbackDualStack } from "./listen-NVMbBWHw.js";
4
4
  import { createServer } from "node:http";
5
5
  import { readFileSync } from "node:fs";
@@ -9,7 +9,7 @@ import { spawn } from "node:child_process";
9
9
 
10
10
  //#region src/cli.ts
11
11
  function printHelp() {
12
- process.stdout.write("autotel-devtools - Standalone OTLP receiver with web devtools UI\n\nUsage: autotel-devtools [port] [options]\n autotel-devtools claude [claude args] [--print-env] [--log-prompts]\n\nSubcommands:\n claude Start the receiver AND launch Claude Code wired to it\n (HTTP/protobuf → this receiver, 1s intervals, session id on).\n Open the \"Agents\" tab to watch sessions, tokens, cost,\n tool / MCP / sub-agent / skill usage live.\n --print-env Print the telemetry env block and exit (don't launch)\n --log-prompts Capture prompt text (default: length only / private)\n\nArguments:\n port Port to listen on (shorthand for --port; must be a positive integer)\n\nOptions:\n -p, --port <port> Port to listen on (default: 4318, env: AUTOTEL_DEVTOOLS_PORT).\n If the port is taken, the next free port is used and a warning is shown.\n -H, --host <host> Host to bind to (default: 127.0.0.1, env: AUTOTEL_DEVTOOLS_HOST)\n -t, --title <title> Dashboard title (env: AUTOTEL_DEVTOOLS_TITLE)\n Env limits: AUTOTEL_MAX_TRACE_COUNT, AUTOTEL_MAX_LOG_COUNT, AUTOTEL_MAX_METRIC_COUNT\n -h, --help Show this help message\n -v, --version Show version number\n\nEndpoints:\n GET / Web devtools UI (fullpage)\n GET /widget.js Widget bundle (embed in your app)\n POST /v1/traces Receive OTLP JSON trace data\n GET /v1/traces Read back received traces (verify ingestion in tests)\n DELETE /v1/traces Clear captured telemetry (test reset)\n POST /v1/logs Receive OTLP JSON log data\n POST /v1/metrics Receive OTLP JSON metric data\n WS /ws WebSocket stream for real-time updates\n GET /healthz Health check\n\nExamples:\n npx autotel-devtools\n npx autotel-devtools 4319\n npx autotel-devtools -p 4319 -H 0.0.0.0\n npx autotel-devtools claude # watch Claude Code in the Agents tab\n npx autotel-devtools claude --print-env # just print the env (for MDM / VS Code)\n\nThen point your app:\n OTEL_EXPORTER_OTLP_PROTOCOL=http/json OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 node app.js\n\nView in browser:\n http://localhost:4318\n\nOr embed widget in your app:\n <script src=\"http://localhost:4318/widget.js\"><\/script>\n\n");
12
+ process.stdout.write("autotel-devtools - Standalone OTLP receiver with web devtools UI\n\nUsage: autotel-devtools [port] [options]\n autotel-devtools claude [claude args] [--print-env] [--log-prompts]\n\nSubcommands:\n claude Start the receiver AND launch Claude Code wired to it\n (HTTP/protobuf → this receiver, 1s intervals, session id on).\n Open the \"Agents\" tab to watch sessions, tokens, cost,\n tool / MCP / sub-agent / skill usage live.\n --print-env Print the telemetry env block and exit (don't launch)\n --log-prompts Capture prompt text (default: length only / private)\n\nArguments:\n port Port to listen on (shorthand for --port; must be a positive integer)\n\nOptions:\n -p, --port <port> Port to listen on (default: 4318, env: AUTOTEL_DEVTOOLS_PORT).\n If the port is taken, the next free port is used and a warning is shown.\n -H, --host <host> Host to bind to (default: 127.0.0.1, env: AUTOTEL_DEVTOOLS_HOST)\n -t, --title <title> Dashboard title, shown in the banner and browser tab\n (env: AUTOTEL_DEVTOOLS_TITLE)\n Env limits: AUTOTEL_MAX_TRACE_COUNT, AUTOTEL_MAX_LOG_COUNT, AUTOTEL_MAX_METRIC_COUNT\n -h, --help Show this help message\n -v, --version Show version number\n\nEndpoints:\n GET / Web devtools UI (fullpage)\n GET /widget.js Widget bundle (embed in your app)\n POST /v1/traces Receive OTLP JSON trace data\n GET /v1/traces Read back received traces (verify ingestion in tests)\n DELETE /v1/traces Clear captured telemetry (test reset)\n POST /v1/logs Receive OTLP JSON log data\n POST /v1/metrics Receive OTLP JSON metric data\n WS /ws WebSocket stream for real-time updates\n GET /healthz Health check\n\nExamples:\n npx autotel-devtools\n npx autotel-devtools 4319\n npx autotel-devtools -p 4319 -H 0.0.0.0\n npx autotel-devtools claude # watch Claude Code in the Agents tab\n npx autotel-devtools claude --print-env # just print the env (for MDM / VS Code)\n\nThen point your app:\n OTEL_EXPORTER_OTLP_PROTOCOL=http/json OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 node app.js\n\nView in browser:\n http://localhost:4318\n\nOr embed widget in your app:\n <script src=\"http://localhost:4318/widget.js\"><\/script>\n\n");
13
13
  }
14
14
  function printVersion() {
15
15
  try {
@@ -79,12 +79,18 @@ async function startReceiver(options) {
79
79
  host: options.host,
80
80
  verbose: true
81
81
  });
82
- attachDevtoolsRoutes(httpServer, wsServer, { loopbackOnly });
82
+ attachDevtoolsRoutes(httpServer, wsServer, {
83
+ loopbackOnly,
84
+ title: options.title
85
+ });
83
86
  const listeners = listenLoopbackDualStack({
84
87
  primary: httpServer,
85
88
  port: options.port,
86
89
  host: options.host,
87
- attachSecondary: (s) => attachDevtoolsRoutes(s, wsServer, { loopbackOnly })
90
+ attachSecondary: (s) => attachDevtoolsRoutes(s, wsServer, {
91
+ loopbackOnly,
92
+ title: options.title
93
+ })
88
94
  });
89
95
  const { addresses, warnings, port: boundPort } = await listeners.ready;
90
96
  if (boundPort !== options.port) if (await probePortHolder(options.host, options.port) === "autotel-devtools") warnings.push(`another autotel-devtools is already running on port ${options.port}; this instance is on ${boundPort}. Use the existing one, or stop it and restart here.`);
@@ -1176,7 +1176,16 @@ function findPackageRoot() {
1176
1176
  return dir;
1177
1177
  }
1178
1178
  const DEVTOOLS_FAVICON_SVG = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\"><rect width=\"64\" height=\"64\" rx=\"14\" fill=\"#0f172a\"/><text x=\"32\" y=\"41\" text-anchor=\"middle\" font-size=\"32\">🛰️</text></svg>";
1179
- const FULLPAGE_HTML = `<!DOCTYPE html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>autotel-devtools</title><link rel="icon" href="/favicon.svg" type="image/svg+xml"><style>*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;width:100%;overflow:hidden}</style></head><body><script src="/widget.js?mode=fullpage"><\/script></body></html>`;
1179
+ /**
1180
+ * The title is user-supplied (`--title` / `AUTOTEL_DEVTOOLS_TITLE`) and lands
1181
+ * inside `<title>`, where an unescaped `<` would close the element early.
1182
+ */
1183
+ function escapeHtml(value) {
1184
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&#39;");
1185
+ }
1186
+ function renderFullpageHtml(title = "autotel-devtools") {
1187
+ return `<!DOCTYPE html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>${escapeHtml(title)}</title><link rel="icon" href="/favicon.svg" type="image/svg+xml"><style>*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;width:100%;overflow:hidden}</style></head><body><script src="/widget.js?mode=fullpage"><\/script></body></html>`;
1188
+ }
1180
1189
  let cachedVersion = null;
1181
1190
  function getVersion() {
1182
1191
  if (cachedVersion !== null) return cachedVersion;
@@ -1203,6 +1212,7 @@ function getWidgetJs() {
1203
1212
  }
1204
1213
  function attachDevtoolsRoutes(httpServer, devtools, options = {}) {
1205
1214
  const loopbackOnly = options.loopbackOnly ?? true;
1215
+ const fullpageHtml = renderFullpageHtml(options.title);
1206
1216
  httpServer.on("request", async (req, res) => {
1207
1217
  if (req.headers.upgrade?.toLowerCase() === "websocket") return;
1208
1218
  res.setHeader("Access-Control-Allow-Origin", "*");
@@ -1219,9 +1229,9 @@ function attachDevtoolsRoutes(httpServer, devtools, options = {}) {
1219
1229
  if (req.method === "GET" && url === "/") {
1220
1230
  res.writeHead(200, {
1221
1231
  "Content-Type": "text/html; charset=utf-8",
1222
- "Content-Length": Buffer.byteLength(FULLPAGE_HTML)
1232
+ "Content-Length": Buffer.byteLength(fullpageHtml)
1223
1233
  });
1224
- res.end(FULLPAGE_HTML);
1234
+ res.end(fullpageHtml);
1225
1235
  return;
1226
1236
  }
1227
1237
  if (req.method === "GET" && url.startsWith("/widget.js")) {
@@ -1148,7 +1148,16 @@ function findPackageRoot() {
1148
1148
  return dir;
1149
1149
  }
1150
1150
  const DEVTOOLS_FAVICON_SVG = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\"><rect width=\"64\" height=\"64\" rx=\"14\" fill=\"#0f172a\"/><text x=\"32\" y=\"41\" text-anchor=\"middle\" font-size=\"32\">🛰️</text></svg>";
1151
- const FULLPAGE_HTML = `<!DOCTYPE html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>autotel-devtools</title><link rel="icon" href="/favicon.svg" type="image/svg+xml"><style>*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;width:100%;overflow:hidden}</style></head><body><script src="/widget.js?mode=fullpage"><\/script></body></html>`;
1151
+ /**
1152
+ * The title is user-supplied (`--title` / `AUTOTEL_DEVTOOLS_TITLE`) and lands
1153
+ * inside `<title>`, where an unescaped `<` would close the element early.
1154
+ */
1155
+ function escapeHtml(value) {
1156
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&#39;");
1157
+ }
1158
+ function renderFullpageHtml(title = "autotel-devtools") {
1159
+ return `<!DOCTYPE html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>${escapeHtml(title)}</title><link rel="icon" href="/favicon.svg" type="image/svg+xml"><style>*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;width:100%;overflow:hidden}</style></head><body><script src="/widget.js?mode=fullpage"><\/script></body></html>`;
1160
+ }
1152
1161
  let cachedVersion = null;
1153
1162
  function getVersion() {
1154
1163
  if (cachedVersion !== null) return cachedVersion;
@@ -1175,6 +1184,7 @@ function getWidgetJs() {
1175
1184
  }
1176
1185
  function attachDevtoolsRoutes(httpServer, devtools, options = {}) {
1177
1186
  const loopbackOnly = options.loopbackOnly ?? true;
1187
+ const fullpageHtml = renderFullpageHtml(options.title);
1178
1188
  httpServer.on("request", async (req, res) => {
1179
1189
  if (req.headers.upgrade?.toLowerCase() === "websocket") return;
1180
1190
  res.setHeader("Access-Control-Allow-Origin", "*");
@@ -1191,9 +1201,9 @@ function attachDevtoolsRoutes(httpServer, devtools, options = {}) {
1191
1201
  if (req.method === "GET" && url === "/") {
1192
1202
  res.writeHead(200, {
1193
1203
  "Content-Type": "text/html; charset=utf-8",
1194
- "Content-Length": Buffer.byteLength(FULLPAGE_HTML)
1204
+ "Content-Length": Buffer.byteLength(fullpageHtml)
1195
1205
  });
1196
- res.end(FULLPAGE_HTML);
1206
+ res.end(fullpageHtml);
1197
1207
  return;
1198
1208
  }
1199
1209
  if (req.method === "GET" && url.startsWith("/widget.js")) {
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_http = require('./http-bOYC2_Z0.cjs');
2
+ const require_http = require('./http-53ldVU8k.cjs');
3
3
  const require_listen = require('./listen-DGzVi7DE.cjs');
4
4
  const require_server_exporter = require('./server/exporter.cjs');
5
5
  const require_server_log_exporter = require('./server/log-exporter.cjs');
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { b as ErrorAggregator, d as DevtoolsServer, p as hostHeaderIsLoopback, t as attachDevtoolsRoutes } from "./http-BLmWVZP0.js";
1
+ import { b as ErrorAggregator, d as DevtoolsServer, p as hostHeaderIsLoopback, t as attachDevtoolsRoutes } from "./http-B8rl56bF.js";
2
2
  import { t as listenLoopbackDualStack } from "./listen-NVMbBWHw.js";
3
3
  import { DevtoolsSpanExporter } from "./server/exporter.js";
4
4
  import { DevtoolsLogExporter } from "./server/log-exporter.js";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_http = require('../http-bOYC2_Z0.cjs');
2
+ const require_http = require('../http-53ldVU8k.cjs');
3
3
  const require_server_exporter = require('./exporter.cjs');
4
4
  const require_server_log_exporter = require('./log-exporter.cjs');
5
5
  const require_server_remote_exporter = require('./remote-exporter.cjs');
@@ -13,6 +13,9 @@ interface DevtoolsRoutesOptions {
13
13
  /** Bound to a loopback host (the default). Enables the DNS-rebinding `Host`
14
14
  * check on read endpoints; an explicit non-loopback bind opts out. */
15
15
  loopbackOnly?: boolean;
16
+ /** Browser tab title for the fullpage UI. Without it every dashboard reads
17
+ * `autotel-devtools`, which is unhelpful with several running at once. */
18
+ title?: string;
16
19
  }
17
20
  declare function attachDevtoolsRoutes(httpServer: Server, devtools: DevtoolsServer, options?: DevtoolsRoutesOptions): void;
18
21
  declare function createDevtoolsHttpServer(devtools: DevtoolsServer, _options?: HttpServerOptions): Server;
@@ -13,6 +13,9 @@ interface DevtoolsRoutesOptions {
13
13
  /** Bound to a loopback host (the default). Enables the DNS-rebinding `Host`
14
14
  * check on read endpoints; an explicit non-loopback bind opts out. */
15
15
  loopbackOnly?: boolean;
16
+ /** Browser tab title for the fullpage UI. Without it every dashboard reads
17
+ * `autotel-devtools`, which is unhelpful with several running at once. */
18
+ title?: string;
16
19
  }
17
20
  declare function attachDevtoolsRoutes(httpServer: Server, devtools: DevtoolsServer, options?: DevtoolsRoutesOptions): void;
18
21
  declare function createDevtoolsHttpServer(devtools: DevtoolsServer, _options?: HttpServerOptions): Server;
@@ -1,4 +1,4 @@
1
- import { _ as appendWithLimit, a as decodeOtlpLogsRequest, b as ErrorAggregator, c as isProtobufContentType, d as DevtoolsServer, f as allowSensitiveRequest, g as appendManyWithLimit, h as originIsLoopback, i as probePortHolder, l as parseOtlpLogs, m as isLoopbackHostname, n as createDevtoolsHttpServer, o as decodeOtlpMetricsRequest, p as hostHeaderIsLoopback, r as DEVTOOLS_IDENTITY, s as decodeOtlpTraceRequest, t as attachDevtoolsRoutes, u as parseOtlpTraces, v as applyTelemetryLimits, y as resolveTelemetryLimits } from "../http-BLmWVZP0.js";
1
+ import { _ as appendWithLimit, a as decodeOtlpLogsRequest, b as ErrorAggregator, c as isProtobufContentType, d as DevtoolsServer, f as allowSensitiveRequest, g as appendManyWithLimit, h as originIsLoopback, i as probePortHolder, l as parseOtlpLogs, m as isLoopbackHostname, n as createDevtoolsHttpServer, o as decodeOtlpMetricsRequest, p as hostHeaderIsLoopback, r as DEVTOOLS_IDENTITY, s as decodeOtlpTraceRequest, t as attachDevtoolsRoutes, u as parseOtlpTraces, v as applyTelemetryLimits, y as resolveTelemetryLimits } from "../http-B8rl56bF.js";
2
2
  import { DevtoolsSpanExporter } from "./exporter.js";
3
3
  import { DevtoolsLogExporter } from "./log-exporter.js";
4
4
  import { DevtoolsRemoteExporter } from "./remote-exporter.js";