





















@@ -93,10 +93,34 @@ const DISALLOWED_ATTRIBUTE_KEYS = new Set([
9393"openclaw.toolCallId",
9494]);
959596-const require = createRequire(import.meta.url);
97-const otlpRoot = require("@opentelemetry/otlp-transformer/build/src/generated/root.js") as OtlpRoot;
98-const traceRequestDecoder =
99-otlpRoot.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest;
96+let traceRequestDecoder:
97+| OtlpRoot["opentelemetry"]["proto"]["collector"]["trace"]["v1"]["ExportTraceServiceRequest"]
98+| undefined;
99+100+function requireOtlpRoot(): OtlpRoot {
101+const candidates = [
102+path.join(process.cwd(), "dist", "extensions", "diagnostics-otel", "package.json"),
103+path.join(process.cwd(), "extensions", "diagnostics-otel", "package.json"),
104+import.meta.url,
105+];
106+const failures: string[] = [];
107+for (const candidate of candidates) {
108+try {
109+return createRequire(candidate)(
110+"@opentelemetry/otlp-transformer/build/src/generated/root.js",
111+) as OtlpRoot;
112+} catch (error) {
113+failures.push(`${candidate}: ${error instanceof Error ? error.message : String(error)}`);
114+}
115+}
116+throw new Error(`failed to load OTLP transformer decoder:\n${failures.join("\n")}`);
117+}
118+119+function getTraceRequestDecoder() {
120+traceRequestDecoder ??=
121+requireOtlpRoot().opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest;
122+return traceRequestDecoder;
123+}
100124101125function usage(): string {
102126return `Usage: pnpm qa:otel:smoke [--output-dir <path>] [--provider-mode <mode>] [--scenario <id>] [--model <ref>] [--alt-model <ref>]
@@ -197,7 +221,7 @@ function spanAttributes(span: OtlpSpan): Record<string, string | number | boolea
197221}
198222199223function decodeTraceRequest(body: Buffer): CapturedSpan[] {
200-const decoded = traceRequestDecoder.decode(body);
224+const decoded = getTraceRequestDecoder().decode(body);
201225const spans: CapturedSpan[] = [];
202226for (const resourceSpans of decoded.resourceSpans ?? []) {
203227for (const scopeSpans of resourceSpans.scopeSpans ?? []) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。