



























@@ -1592,38 +1592,32 @@ describe("diagnostics-otel service", () => {
15921592});
15931593await flushDiagnosticEvents();
159415941595-const contextCall = telemetryState.tracer.startSpan.mock.calls.find(
1596-(call) => call[0] === "openclaw.context.assembled",
1597-);
1595+const contextCall = startedSpanCall("openclaw.context.assembled");
1596+const contextOptions = contextCall?.[1];
15981597const runSpan = telemetryState.spans.find((span) => span.name === "openclaw.run");
15991598const runSpanId = runSpan?.spanContext.mock.results[0]?.value?.spanId;
1600-expect(contextCall?.[1]).toMatchObject({
1601-attributes: {
1602-"openclaw.provider": "openai",
1603-"openclaw.model": "gpt-5.4",
1604-"openclaw.channel": "webchat",
1605-"openclaw.trigger": "message",
1606-"openclaw.context.message_count": 12,
1607-"openclaw.context.history_text_chars": 1234,
1608-"openclaw.context.history_image_blocks": 2,
1609-"openclaw.context.max_message_text_chars": 456,
1610-"openclaw.context.system_prompt_chars": 789,
1611-"openclaw.context.prompt_chars": 42,
1612-"openclaw.context.prompt_images": 1,
1613-"openclaw.context.token_budget": 128_000,
1614-"openclaw.context.reserve_tokens": 4096,
1615-},
1616-});
1617-expect(contextCall?.[1]).toEqual({
1618-attributes: expect.any(Object),
1619-startTime: expect.any(Number),
1620-});
1599+expect(contextOptions?.attributes?.["openclaw.provider"]).toBe("openai");
1600+expect(contextOptions?.attributes?.["openclaw.model"]).toBe("gpt-5.4");
1601+expect(contextOptions?.attributes?.["openclaw.channel"]).toBe("webchat");
1602+expect(contextOptions?.attributes?.["openclaw.trigger"]).toBe("message");
1603+expect(contextOptions?.attributes?.["openclaw.context.message_count"]).toBe(12);
1604+expect(contextOptions?.attributes?.["openclaw.context.history_text_chars"]).toBe(1234);
1605+expect(contextOptions?.attributes?.["openclaw.context.history_image_blocks"]).toBe(2);
1606+expect(contextOptions?.attributes?.["openclaw.context.max_message_text_chars"]).toBe(456);
1607+expect(contextOptions?.attributes?.["openclaw.context.system_prompt_chars"]).toBe(789);
1608+expect(contextOptions?.attributes?.["openclaw.context.prompt_chars"]).toBe(42);
1609+expect(contextOptions?.attributes?.["openclaw.context.prompt_images"]).toBe(1);
1610+expect(contextOptions?.attributes?.["openclaw.context.token_budget"]).toBe(128_000);
1611+expect(contextOptions?.attributes?.["openclaw.context.reserve_tokens"]).toBe(4096);
1612+expect(contextOptions?.attributes).toBeTypeOf("object");
1613+expect(contextOptions?.startTime).toBeTypeOf("number");
16211614expect(JSON.stringify(contextCall)).not.toContain("session-key");
16221615expect(JSON.stringify(contextCall)).not.toContain("prompt text");
1623-expect(telemetryState.tracer.setSpanContext).toHaveBeenCalledWith(
1624-expect.anything(),
1625-expect.objectContaining({ traceId: TRACE_ID, spanId: runSpanId }),
1626-);
1616+const linkedSpanContext = telemetryState.tracer.setSpanContext.mock.calls[0]?.[1] as
1617+| Record<string, unknown>
1618+| undefined;
1619+expect(linkedSpanContext?.traceId).toBe(TRACE_ID);
1620+expect(linkedSpanContext?.spanId).toBe(runSpanId);
16271621expect(
16281622(contextCall?.[2] as { spanContext?: { spanId?: string } } | undefined)?.spanContext?.spanId,
16291623).toBe(runSpanId);
@@ -1657,19 +1651,14 @@ describe("diagnostics-otel service", () => {
16571651"openclaw.loop.count": 20,
16581652"openclaw.loop.paired_tool": "read",
16591653});
1660-const loopSpanCall = telemetryState.tracer.startSpan.mock.calls.find(
1661-(call) => call[0] === "openclaw.tool.loop",
1662-);
1663-expect(loopSpanCall?.[1]).toMatchObject({
1664-attributes: {
1665-"openclaw.toolName": "process",
1666-"openclaw.loop.level": "critical",
1667-"openclaw.loop.action": "block",
1668-"openclaw.loop.detector": "known_poll_no_progress",
1669-"openclaw.loop.count": 20,
1670-"openclaw.loop.paired_tool": "read",
1671-},
1672-});
1654+const loopSpanCall = startedSpanCall("openclaw.tool.loop");
1655+const loopOptions = loopSpanCall?.[1];
1656+expect(loopOptions?.attributes?.["openclaw.toolName"]).toBe("process");
1657+expect(loopOptions?.attributes?.["openclaw.loop.level"]).toBe("critical");
1658+expect(loopOptions?.attributes?.["openclaw.loop.action"]).toBe("block");
1659+expect(loopOptions?.attributes?.["openclaw.loop.detector"]).toBe("known_poll_no_progress");
1660+expect(loopOptions?.attributes?.["openclaw.loop.count"]).toBe(20);
1661+expect(loopOptions?.attributes?.["openclaw.loop.paired_tool"]).toBe("read");
16731662const loopSpan = telemetryState.spans.find((span) => span.name === "openclaw.tool.loop");
16741663expect(loopSpan?.setStatus).toHaveBeenCalledWith({
16751664code: 2,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。