commits
Claude Code's native log events use session.id as the correlation key.
Emit both session.id (for compatibility with native events in the same
dataset) and gen_ai.conversation.id (for semconv compliance) on all
spans so queries work without derived columns.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
LLM spans now include:
- gen_ai.response.id (message ID from API response)
- gen_ai.conversation.id (session ID, replaces custom session.id)
Tool spans now include:
- gen_ai.tool.call.id (tool_use ID)
- gen_ai.tool.type ("extension" for Claude Code tools)
- gen_ai.operation.name ("execute_tool")
- gen_ai.system ("anthropic")
Subagent spans now use:
- gen_ai.agent.id, gen_ai.agent.name (replaces custom attributes)
All spans use gen_ai.conversation.id instead of session.id for
consistency with the semconv spec.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Forces plugin cache refresh to pick up the .cjs bundle fix.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The OTel SDK packages are CJS internally and use bare require("util"),
require("http"), etc. When esbuild bundles as ESM format, it wraps
these in a __require shim that throws "Dynamic require is not supported".
Switch bundle format to CJS with .cjs extension (needed because
package.json has "type": "module") so require() works natively.
Bundles remain self-contained with all dependencies inlined.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Code plugin that traces conversations, tool calls, subagent
executions, and context compaction via OTLP to any OTel-compatible
backend (Honeycomb, Jaeger, Grafana, etc.).
Uses the OTel SDK stack (BasicTracerProvider, BatchSpanProcessor,
OTLPTraceExporter) with Gen AI semantic conventions for LLM spans.
Cross-process span ID coordination via a custom ControlledIdGenerator.
Based on langchain-ai/langsmith-claude-code-plugins, rewritten to
replace the proprietary LangSmith SDK with standard OpenTelemetry.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Code's native log events use session.id as the correlation key.
Emit both session.id (for compatibility with native events in the same
dataset) and gen_ai.conversation.id (for semconv compliance) on all
spans so queries work without derived columns.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
LLM spans now include:
- gen_ai.response.id (message ID from API response)
- gen_ai.conversation.id (session ID, replaces custom session.id)
Tool spans now include:
- gen_ai.tool.call.id (tool_use ID)
- gen_ai.tool.type ("extension" for Claude Code tools)
- gen_ai.operation.name ("execute_tool")
- gen_ai.system ("anthropic")
Subagent spans now use:
- gen_ai.agent.id, gen_ai.agent.name (replaces custom attributes)
All spans use gen_ai.conversation.id instead of session.id for
consistency with the semconv spec.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The OTel SDK packages are CJS internally and use bare require("util"),
require("http"), etc. When esbuild bundles as ESM format, it wraps
these in a __require shim that throws "Dynamic require is not supported".
Switch bundle format to CJS with .cjs extension (needed because
package.json has "type": "module") so require() works natively.
Bundles remain self-contained with all dependencies inlined.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Claude Code plugin that traces conversations, tool calls, subagent
executions, and context compaction via OTLP to any OTel-compatible
backend (Honeycomb, Jaeger, Grafana, etc.).
Uses the OTel SDK stack (BasicTracerProvider, BatchSpanProcessor,
OTLPTraceExporter) with Gen AI semantic conventions for LLM spans.
Cross-process span ID coordination via a custom ControlledIdGenerator.
Based on langchain-ai/langsmith-claude-code-plugins, rewritten to
replace the proprietary LangSmith SDK with standard OpenTelemetry.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>