autotel-devtools 24.0.0 → 24.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.
@@ -1,4 +1,4 @@
1
- import { r as SpanData } from "../types-B86Qkqg5.cjs";
1
+ import { r as SpanData } from "../types-hVSf0DoT.cjs";
2
2
  //#region src/widget/genai/detect.d.ts
3
3
  declare function isGenAiSpan(span: SpanData): boolean;
4
4
  //#endregion
@@ -1,4 +1,4 @@
1
- import { r as SpanData } from "../types-B86Qkqg5.js";
1
+ import { r as SpanData } from "../types-hVSf0DoT.js";
2
2
  //#region src/widget/genai/detect.d.ts
3
3
  declare function isGenAiSpan(span: SpanData): boolean;
4
4
  //#endregion
@@ -1,4 +1,4 @@
1
- const require_http = require('./http-CahjEnpE.cjs');
1
+ const require_http = require('./http-Dc57PtwQ.cjs');
2
2
  let _grpc_grpc_js = require("@grpc/grpc-js");
3
3
 
4
4
  //#region src/server/grpc.ts
@@ -1,4 +1,4 @@
1
- import { c as decodeOtlpTraceRequest, o as decodeOtlpLogsRequest, s as decodeOtlpMetricsRequest } from "./http-z8UbJsqk.js";
1
+ import { c as decodeOtlpTraceRequest, o as decodeOtlpLogsRequest, s as decodeOtlpMetricsRequest } from "./http-JTSqQPVJ.js";
2
2
  import { Server, ServerCredentials, status } from "@grpc/grpc-js";
3
3
 
4
4
  //#region src/server/grpc.ts
@@ -388,6 +388,9 @@ function foldWebMcpTools(traces, activityWindow) {
388
388
  lastSeen: span.startTime,
389
389
  annotationsSent: [],
390
390
  annotationsDropped: [],
391
+ labelMismatch: false,
392
+ redefined: false,
393
+ refusedCalls: 0,
391
394
  calls: 0,
392
395
  errors: 0,
393
396
  envelopeCalls: 0,
@@ -414,6 +417,10 @@ function foldWebMcpTools(traces, activityWindow) {
414
417
  tool.hasInputSchema = require_json_fields.asBoolean(attrs["webmcp.tool.has_input_schema"]);
415
418
  tool.annotationsSent = csv(attrs["webmcp.annotations.sent"]);
416
419
  tool.annotationsDropped = csv(attrs["webmcp.annotations.dropped"]);
420
+ tool.title = require_json_fields.asString(attrs["webmcp.tool.title"]);
421
+ tool.labelMismatch = require_json_fields.asBoolean(attrs["webmcp.tool.label_mismatch"]) ?? false;
422
+ tool.descriptor = require_json_fields.asString(attrs["webmcp.tool.descriptor"]);
423
+ if (require_json_fields.asBoolean(attrs["webmcp.tool.redefined"])) tool.redefined = true;
417
424
  tool.traceId = span.traceId;
418
425
  tool.spanId = span.spanId;
419
426
  break;
@@ -431,6 +438,9 @@ function foldWebMcpTools(traces, activityWindow) {
431
438
  tool.envelopeBytes += ENVELOPE_OVERHEAD_BYTES;
432
439
  }
433
440
  if (require_json_fields.asBoolean(attrs["webmcp.result.substituted"])) tool.substitutedCalls += 1;
441
+ const refused = require_json_fields.asBoolean(attrs["webmcp.result.refused"]) ?? false;
442
+ const refusal = require_json_fields.asString(attrs["webmcp.result.refusal"]);
443
+ if (refused) tool.refusedCalls += 1;
434
444
  const failed = span.status.code === "ERROR" || (require_json_fields.asBoolean(attrs["webmcp.result.error"]) ?? false) || require_json_fields.asString(attrs["error.type"]) !== void 0;
435
445
  if (failed) tool.errors += 1;
436
446
  tool.recentCalls.push({
@@ -441,6 +451,9 @@ function foldWebMcpTools(traces, activityWindow) {
441
451
  envelope: require_json_fields.asBoolean(attrs["webmcp.result.envelope"]) ?? false,
442
452
  substituted: require_json_fields.asBoolean(attrs["webmcp.result.substituted"]) ?? false,
443
453
  error: failed,
454
+ seq: require_json_fields.asNumber(attrs["webmcp.execute.seq"]),
455
+ refused,
456
+ ...refusal === "confirm" || refusal === "unavailable" ? { refusal } : {},
444
457
  input: require_json_fields.asString(attrs["webmcp.input"]) ?? require_json_fields.asString(attrs["gen_ai.tool.call.arguments"]),
445
458
  result: require_json_fields.asString(attrs["webmcp.result"]) ?? require_json_fields.asString(attrs["gen_ai.tool.call.result"]),
446
459
  traceId: span.traceId,
@@ -476,7 +489,10 @@ function summarize(tools, installations) {
476
489
  resultBytes: 0,
477
490
  envelopeBytes: 0,
478
491
  toolsWithDroppedAnnotations: 0,
479
- toolsWithoutInputSchema: 0
492
+ toolsWithoutInputSchema: 0,
493
+ toolsWithLabelMismatch: 0,
494
+ toolsRedefined: 0,
495
+ refusedCalls: 0
480
496
  };
481
497
  for (const tool of tools) {
482
498
  if (tool.offered) summary.toolsOffered += 1;
@@ -487,6 +503,9 @@ function summarize(tools, installations) {
487
503
  summary.envelopeBytes += tool.envelopeBytes;
488
504
  if (tool.annotationsDropped.length > 0) summary.toolsWithDroppedAnnotations += 1;
489
505
  if (tool.observedAtRegistration && tool.hasInputSchema === false) summary.toolsWithoutInputSchema += 1;
506
+ if (tool.labelMismatch) summary.toolsWithLabelMismatch += 1;
507
+ if (tool.redefined) summary.toolsRedefined += 1;
508
+ summary.refusedCalls += tool.refusedCalls;
490
509
  }
491
510
  return summary;
492
511
  }
@@ -359,6 +359,9 @@ function foldWebMcpTools(traces, activityWindow) {
359
359
  lastSeen: span.startTime,
360
360
  annotationsSent: [],
361
361
  annotationsDropped: [],
362
+ labelMismatch: false,
363
+ redefined: false,
364
+ refusedCalls: 0,
362
365
  calls: 0,
363
366
  errors: 0,
364
367
  envelopeCalls: 0,
@@ -385,6 +388,10 @@ function foldWebMcpTools(traces, activityWindow) {
385
388
  tool.hasInputSchema = asBoolean(attrs["webmcp.tool.has_input_schema"]);
386
389
  tool.annotationsSent = csv(attrs["webmcp.annotations.sent"]);
387
390
  tool.annotationsDropped = csv(attrs["webmcp.annotations.dropped"]);
391
+ tool.title = asString(attrs["webmcp.tool.title"]);
392
+ tool.labelMismatch = asBoolean(attrs["webmcp.tool.label_mismatch"]) ?? false;
393
+ tool.descriptor = asString(attrs["webmcp.tool.descriptor"]);
394
+ if (asBoolean(attrs["webmcp.tool.redefined"])) tool.redefined = true;
388
395
  tool.traceId = span.traceId;
389
396
  tool.spanId = span.spanId;
390
397
  break;
@@ -402,6 +409,9 @@ function foldWebMcpTools(traces, activityWindow) {
402
409
  tool.envelopeBytes += ENVELOPE_OVERHEAD_BYTES;
403
410
  }
404
411
  if (asBoolean(attrs["webmcp.result.substituted"])) tool.substitutedCalls += 1;
412
+ const refused = asBoolean(attrs["webmcp.result.refused"]) ?? false;
413
+ const refusal = asString(attrs["webmcp.result.refusal"]);
414
+ if (refused) tool.refusedCalls += 1;
405
415
  const failed = span.status.code === "ERROR" || (asBoolean(attrs["webmcp.result.error"]) ?? false) || asString(attrs["error.type"]) !== void 0;
406
416
  if (failed) tool.errors += 1;
407
417
  tool.recentCalls.push({
@@ -412,6 +422,9 @@ function foldWebMcpTools(traces, activityWindow) {
412
422
  envelope: asBoolean(attrs["webmcp.result.envelope"]) ?? false,
413
423
  substituted: asBoolean(attrs["webmcp.result.substituted"]) ?? false,
414
424
  error: failed,
425
+ seq: asNumber(attrs["webmcp.execute.seq"]),
426
+ refused,
427
+ ...refusal === "confirm" || refusal === "unavailable" ? { refusal } : {},
415
428
  input: asString(attrs["webmcp.input"]) ?? asString(attrs["gen_ai.tool.call.arguments"]),
416
429
  result: asString(attrs["webmcp.result"]) ?? asString(attrs["gen_ai.tool.call.result"]),
417
430
  traceId: span.traceId,
@@ -447,7 +460,10 @@ function summarize(tools, installations) {
447
460
  resultBytes: 0,
448
461
  envelopeBytes: 0,
449
462
  toolsWithDroppedAnnotations: 0,
450
- toolsWithoutInputSchema: 0
463
+ toolsWithoutInputSchema: 0,
464
+ toolsWithLabelMismatch: 0,
465
+ toolsRedefined: 0,
466
+ refusedCalls: 0
451
467
  };
452
468
  for (const tool of tools) {
453
469
  if (tool.offered) summary.toolsOffered += 1;
@@ -458,6 +474,9 @@ function summarize(tools, installations) {
458
474
  summary.envelopeBytes += tool.envelopeBytes;
459
475
  if (tool.annotationsDropped.length > 0) summary.toolsWithDroppedAnnotations += 1;
460
476
  if (tool.observedAtRegistration && tool.hasInputSchema === false) summary.toolsWithoutInputSchema += 1;
477
+ if (tool.labelMismatch) summary.toolsWithLabelMismatch += 1;
478
+ if (tool.redefined) summary.toolsRedefined += 1;
479
+ summary.refusedCalls += tool.refusedCalls;
461
480
  }
462
481
  return summary;
463
482
  }
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_http = require('./http-CahjEnpE.cjs');
2
+ const require_http = require('./http-Dc57PtwQ.cjs');
3
3
  const require_listen = require('./listen-l09RRHht.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.d.cts CHANGED
@@ -1,9 +1,9 @@
1
- import { n as SpanAttributes, t as AttributeValue } from "./types-B86Qkqg5.cjs";
2
- import { a as SpanData, i as LogData, n as ErrorGroup, o as TraceData, t as DevtoolsData } from "./types-C-ORUrT2.cjs";
3
- import { n as DevtoolsServer, t as DevtoolsSpanExporter } from "./exporter-AkgWRDpc.cjs";
1
+ import { n as SpanAttributes, t as AttributeValue } from "./types-hVSf0DoT.cjs";
2
+ import { a as SpanData, i as LogData, n as ErrorGroup, o as TraceData, t as DevtoolsData } from "./types-ZU74Na4z.cjs";
3
+ import { n as DevtoolsServer, t as DevtoolsSpanExporter } from "./exporter-BgjMeWvt.cjs";
4
4
  import { DevtoolsLogExporter } from "./server/log-exporter.cjs";
5
5
  import { DevtoolsRemoteExporter } from "./server/remote-exporter.cjs";
6
- import { t as ErrorAggregator } from "./error-aggregator-C0at0wzF.cjs";
6
+ import { t as ErrorAggregator } from "./error-aggregator-DkUrfGol.cjs";
7
7
  import { Server } from "node:http";
8
8
  //#region src/index.d.ts
9
9
  interface CreateDevtoolsOptions {
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { n as SpanAttributes, t as AttributeValue } from "./types-B86Qkqg5.js";
2
- import { a as SpanData, i as LogData, n as ErrorGroup, o as TraceData, t as DevtoolsData } from "./types-BhbHVeiy.js";
3
- import { n as DevtoolsServer, t as DevtoolsSpanExporter } from "./exporter-yo7lLDIs.js";
1
+ import { n as SpanAttributes, t as AttributeValue } from "./types-hVSf0DoT.js";
2
+ import { a as SpanData, i as LogData, n as ErrorGroup, o as TraceData, t as DevtoolsData } from "./types-Do48caKG.js";
3
+ import { n as DevtoolsServer, t as DevtoolsSpanExporter } from "./exporter-BRSxg3Du.js";
4
4
  import { DevtoolsLogExporter } from "./server/log-exporter.js";
5
5
  import { DevtoolsRemoteExporter } from "./server/remote-exporter.js";
6
- import { t as ErrorAggregator } from "./error-aggregator-C25_JiVI.js";
6
+ import { t as ErrorAggregator } from "./error-aggregator-BzhW482_.js";
7
7
  import { Server } from "node:http";
8
8
  //#region src/index.d.ts
9
9
  interface CreateDevtoolsOptions {
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C as ErrorAggregator, g as hostHeaderIsLoopback, l as DevtoolsServer, r as resolveSourceRoot, t as attachDevtoolsRoutes } from "./http-z8UbJsqk.js";
1
+ import { C as ErrorAggregator, g as hostHeaderIsLoopback, l as DevtoolsServer, r as resolveSourceRoot, t as attachDevtoolsRoutes } from "./http-JTSqQPVJ.js";
2
2
  import { t as listenLoopbackDualStack } from "./listen-D-lLgfro.js";
3
3
  import { DevtoolsSpanExporter } from "./server/exporter.js";
4
4
  import { DevtoolsLogExporter } from "./server/log-exporter.js";
@@ -1,2 +1,2 @@
1
- import { t as DevtoolsSpanExporter } from "../exporter-AkgWRDpc.cjs";
1
+ import { t as DevtoolsSpanExporter } from "../exporter-BgjMeWvt.cjs";
2
2
  export { DevtoolsSpanExporter };
@@ -1,2 +1,2 @@
1
- import { t as DevtoolsSpanExporter } from "../exporter-yo7lLDIs.js";
1
+ import { t as DevtoolsSpanExporter } from "../exporter-BRSxg3Du.js";
2
2
  export { DevtoolsSpanExporter };
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_http = require('../http-CahjEnpE.cjs');
2
+ const require_http = require('../http-Dc57PtwQ.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');
6
- const require_grpc = require('../grpc-CSW1Evnt.cjs');
6
+ const require_grpc = require('../grpc-AXr0CnZ_.cjs');
7
7
 
8
8
  exports.DEVTOOLS_IDENTITY = require_http.DEVTOOLS_IDENTITY;
9
9
  exports.DevtoolsLogExporter = require_server_log_exporter.DevtoolsLogExporter;
@@ -1,9 +1,9 @@
1
- import "../types-B86Qkqg5.cjs";
2
- import { a as SpanData, i as LogData, n as ErrorGroup, o as TraceData, r as ErrorOccurrence, t as DevtoolsData } from "../types-C-ORUrT2.cjs";
3
- import { a as DevtoolsStoreOptions, c as QueryLogsArgs, d as QueryTracesArgs, f as QueryTracesResult, i as DevtoolsStore, l as QueryLogsResult, m as TimeWindow, n as DevtoolsServer, o as MetricCatalogEntry, p as SPAN_SCHEMA, r as DevtoolsServerOptions, s as MetricSeries, t as DevtoolsSpanExporter, u as QueryMetricSeriesArgs } from "../exporter-AkgWRDpc.cjs";
1
+ import "../types-hVSf0DoT.cjs";
2
+ import { a as SpanData, i as LogData, n as ErrorGroup, o as TraceData, r as ErrorOccurrence, t as DevtoolsData } from "../types-ZU74Na4z.cjs";
3
+ import { a as DevtoolsStoreOptions, c as QueryLogsArgs, d as QueryTracesArgs, f as QueryTracesResult, i as DevtoolsStore, l as QueryLogsResult, m as TimeWindow, n as DevtoolsServer, o as MetricCatalogEntry, p as SPAN_SCHEMA, r as DevtoolsServerOptions, s as MetricSeries, t as DevtoolsSpanExporter, u as QueryMetricSeriesArgs } from "../exporter-BgjMeWvt.cjs";
4
4
  import { DevtoolsLogExporter } from "./log-exporter.cjs";
5
5
  import { DevtoolsRemoteExporter, DevtoolsRemoteExporterOptions } from "./remote-exporter.cjs";
6
- import { t as ErrorAggregator } from "../error-aggregator-C0at0wzF.cjs";
6
+ import { t as ErrorAggregator } from "../error-aggregator-DkUrfGol.cjs";
7
7
  import { AgentRawEvent, OtelMetricRecord } from "autotel-agents";
8
8
  import { Server } from "node:http";
9
9
  //#region src/server/http.d.ts
@@ -1,9 +1,9 @@
1
- import "../types-B86Qkqg5.js";
2
- import { a as SpanData, i as LogData, n as ErrorGroup, o as TraceData, r as ErrorOccurrence, t as DevtoolsData } from "../types-BhbHVeiy.js";
3
- import { a as DevtoolsStoreOptions, c as QueryLogsArgs, d as QueryTracesArgs, f as QueryTracesResult, i as DevtoolsStore, l as QueryLogsResult, m as TimeWindow, n as DevtoolsServer, o as MetricCatalogEntry, p as SPAN_SCHEMA, r as DevtoolsServerOptions, s as MetricSeries, t as DevtoolsSpanExporter, u as QueryMetricSeriesArgs } from "../exporter-yo7lLDIs.js";
1
+ import "../types-hVSf0DoT.js";
2
+ import { a as SpanData, i as LogData, n as ErrorGroup, o as TraceData, r as ErrorOccurrence, t as DevtoolsData } from "../types-Do48caKG.js";
3
+ import { a as DevtoolsStoreOptions, c as QueryLogsArgs, d as QueryTracesArgs, f as QueryTracesResult, i as DevtoolsStore, l as QueryLogsResult, m as TimeWindow, n as DevtoolsServer, o as MetricCatalogEntry, p as SPAN_SCHEMA, r as DevtoolsServerOptions, s as MetricSeries, t as DevtoolsSpanExporter, u as QueryMetricSeriesArgs } from "../exporter-BRSxg3Du.js";
4
4
  import { DevtoolsLogExporter } from "./log-exporter.js";
5
5
  import { DevtoolsRemoteExporter, DevtoolsRemoteExporterOptions } from "./remote-exporter.js";
6
- import { t as ErrorAggregator } from "../error-aggregator-C25_JiVI.js";
6
+ import { t as ErrorAggregator } from "../error-aggregator-BzhW482_.js";
7
7
  import { Server } from "node:http";
8
8
  import { AgentRawEvent, OtelMetricRecord } from "autotel-agents";
9
9
  //#region src/server/http.d.ts
@@ -1,7 +1,7 @@
1
- import { C as ErrorAggregator, S as resolveTelemetryLimits, _ as isLoopbackHostname, a as probePortHolder, b as appendWithLimit, c as decodeOtlpTraceRequest, d as parseOtlpLogs, f as parseOtlpTraces, g as hostHeaderIsLoopback, h as allowSensitiveRequest, i as DEVTOOLS_IDENTITY, l as DevtoolsServer, m as SPAN_SCHEMA, n as createDevtoolsHttpServer, o as decodeOtlpLogsRequest, p as DevtoolsStore, s as decodeOtlpMetricsRequest, t as attachDevtoolsRoutes, u as isProtobufContentType, v as originIsLoopback, x as applyTelemetryLimits, y as appendManyWithLimit } from "../http-z8UbJsqk.js";
1
+ import { C as ErrorAggregator, S as resolveTelemetryLimits, _ as isLoopbackHostname, a as probePortHolder, b as appendWithLimit, c as decodeOtlpTraceRequest, d as parseOtlpLogs, f as parseOtlpTraces, g as hostHeaderIsLoopback, h as allowSensitiveRequest, i as DEVTOOLS_IDENTITY, l as DevtoolsServer, m as SPAN_SCHEMA, n as createDevtoolsHttpServer, o as decodeOtlpLogsRequest, p as DevtoolsStore, s as decodeOtlpMetricsRequest, t as attachDevtoolsRoutes, u as isProtobufContentType, v as originIsLoopback, x as applyTelemetryLimits, y as appendManyWithLimit } from "../http-JTSqQPVJ.js";
2
2
  import { DevtoolsSpanExporter } from "./exporter.js";
3
3
  import { DevtoolsLogExporter } from "./log-exporter.js";
4
4
  import { DevtoolsRemoteExporter } from "./remote-exporter.js";
5
- import { t as startOtlpGrpcReceiver } from "../grpc-D1tt8UPi.js";
5
+ import { t as startOtlpGrpcReceiver } from "../grpc-C35twtEj.js";
6
6
 
7
7
  export { DEVTOOLS_IDENTITY, DevtoolsLogExporter, DevtoolsRemoteExporter, DevtoolsServer, DevtoolsSpanExporter, DevtoolsStore, ErrorAggregator, SPAN_SCHEMA, allowSensitiveRequest, appendManyWithLimit, appendWithLimit, applyTelemetryLimits, attachDevtoolsRoutes, createDevtoolsHttpServer, decodeOtlpLogsRequest, decodeOtlpMetricsRequest, decodeOtlpTraceRequest, hostHeaderIsLoopback, isLoopbackHostname, isProtobufContentType, originIsLoopback, parseOtlpLogs, parseOtlpTraces, probePortHolder, resolveTelemetryLimits, startOtlpGrpcReceiver };
@@ -1,4 +1,4 @@
1
- import { n as SpanAttributes } from "./types-B86Qkqg5.js";
1
+ import { n as SpanAttributes } from "./types-hVSf0DoT.js";
2
2
  import { AgentSession } from "autotel-agents";
3
3
  //#region src/server/types.d.ts
4
4
  interface SpanData {
@@ -1,4 +1,4 @@
1
- import { n as SpanAttributes } from "./types-B86Qkqg5.cjs";
1
+ import { n as SpanAttributes } from "./types-hVSf0DoT.cjs";
2
2
  import { AgentSession } from "autotel-agents";
3
3
  //#region src/server/types.d.ts
4
4
  interface SpanData {
@@ -58,6 +58,11 @@ interface WebMcpCall {
58
58
  envelope: boolean;
59
59
  substituted: boolean;
60
60
  error: boolean;
61
+ /** Installation-local order of this execute. Makes a chain readable. */
62
+ seq?: number;
63
+ /** True when the result matched a known library refusal string. */
64
+ refused: boolean;
65
+ refusal?: 'confirm' | 'unavailable';
61
66
  /** Present only when the app opted into payload capture. Render masked. */
62
67
  input?: string;
63
68
  /** The exact string the agent received. Present only with payload capture. */
@@ -82,8 +87,18 @@ interface WebMcpTool {
82
87
  annotationsSent: string[];
83
88
  /** Annotations the browser discarded. Available nowhere else. */
84
89
  annotationsDropped: string[];
90
+ /** Display label the browser may promote over `name`. */
91
+ title?: string;
92
+ /** True when a non-empty title does not equal the tool name. */
93
+ labelMismatch: boolean;
94
+ /** True when this name came back with a different descriptor in this install. */
95
+ redefined: boolean;
96
+ /** Fingerprint of the last registered descriptor. */
97
+ descriptor?: string;
85
98
  calls: number;
86
99
  errors: number;
100
+ /** Executions whose result matched a known library refusal. */
101
+ refusedCalls: number;
87
102
  /** Executions whose result was an unwrapped MCP `{ content: [...] }` envelope. */
88
103
  envelopeCalls: number;
89
104
  /** Of `resultBytes`, the part that is envelope wrapper rather than content. */
@@ -111,6 +126,9 @@ interface WebMcpSummary {
111
126
  envelopeBytes: number;
112
127
  toolsWithDroppedAnnotations: number;
113
128
  toolsWithoutInputSchema: number;
129
+ toolsWithLabelMismatch: number;
130
+ toolsRedefined: number;
131
+ refusedCalls: number;
114
132
  }
115
133
  interface WebMcpInventory {
116
134
  tools: WebMcpTool[];
@@ -58,6 +58,11 @@ interface WebMcpCall {
58
58
  envelope: boolean;
59
59
  substituted: boolean;
60
60
  error: boolean;
61
+ /** Installation-local order of this execute. Makes a chain readable. */
62
+ seq?: number;
63
+ /** True when the result matched a known library refusal string. */
64
+ refused: boolean;
65
+ refusal?: 'confirm' | 'unavailable';
61
66
  /** Present only when the app opted into payload capture. Render masked. */
62
67
  input?: string;
63
68
  /** The exact string the agent received. Present only with payload capture. */
@@ -82,8 +87,18 @@ interface WebMcpTool {
82
87
  annotationsSent: string[];
83
88
  /** Annotations the browser discarded. Available nowhere else. */
84
89
  annotationsDropped: string[];
90
+ /** Display label the browser may promote over `name`. */
91
+ title?: string;
92
+ /** True when a non-empty title does not equal the tool name. */
93
+ labelMismatch: boolean;
94
+ /** True when this name came back with a different descriptor in this install. */
95
+ redefined: boolean;
96
+ /** Fingerprint of the last registered descriptor. */
97
+ descriptor?: string;
85
98
  calls: number;
86
99
  errors: number;
100
+ /** Executions whose result matched a known library refusal. */
101
+ refusedCalls: number;
87
102
  /** Executions whose result was an unwrapped MCP `{ content: [...] }` envelope. */
88
103
  envelopeCalls: number;
89
104
  /** Of `resultBytes`, the part that is envelope wrapper rather than content. */
@@ -111,6 +126,9 @@ interface WebMcpSummary {
111
126
  envelopeBytes: number;
112
127
  toolsWithDroppedAnnotations: number;
113
128
  toolsWithoutInputSchema: number;
129
+ toolsWithLabelMismatch: number;
130
+ toolsRedefined: number;
131
+ refusedCalls: number;
114
132
  }
115
133
  interface WebMcpInventory {
116
134
  tools: WebMcpTool[];
@@ -1,4 +1,4 @@
1
- import { a as SpanData, o as TraceData } from "../types-C-ORUrT2.cjs";
1
+ import { a as SpanData, o as TraceData } from "../types-ZU74Na4z.cjs";
2
2
  //#region src/wire/wire.d.ts
3
3
  /** A span as sent: `endTime` present only when `duration` cannot reproduce it. */
4
4
  type WireSpan = Omit<SpanData, 'endTime'> & {
@@ -1,4 +1,4 @@
1
- import { a as SpanData, o as TraceData } from "../types-BhbHVeiy.js";
1
+ import { a as SpanData, o as TraceData } from "../types-Do48caKG.js";
2
2
  //#region src/wire/wire.d.ts
3
3
  /** A span as sent: `endTime` present only when `duration` cannot reproduce it. */
4
4
  type WireSpan = Omit<SpanData, 'endTime'> & {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autotel-devtools",
3
- "version": "24.0.0",
3
+ "version": "24.1.0",
4
4
  "description": "Standalone OTLP receiver with web UI for local development",
5
5
  "type": "module",
6
6
  "sideEffects": false,