@tasker-systems/temper-telemetry-ts
v0.5.4
Published
Shared OpenTelemetry span-export bootstrap + W3C trace-context helpers for Temper's Node hops (temper-ui, eve agents). The TS analog of the Rust temper-telemetry crate.
Downloads
616
Readme
temper-telemetry-ts
Shared OpenTelemetry span-export bootstrap + W3C trace-context helpers for Temper's
Node hops (temper-ui, and the eve agents). The TypeScript analog of the Rust
temper-telemetry crate: consumers resolve OTLP config and W3C context one same way.
Consumed as a file: dependency (compiled dist/), mirroring clients/temper-ts.
Public API (src/index.ts)
initTelemetry({ serviceName, instrumentHttp, mcpEndpoint })— build + register aNodeTracerProviderthat exports OTLP/proto to the endpoint inOTEL_EXPORTER_OTLP_*. No-op when no endpoint is set.instrumentHttp(default off) registers@opentelemetry/instrumentation-undicifor consumers whose outbound HTTP is internal to a framework (the eve agents' MCP client); consumers that inject at known call sites (temper-ui) leave it off.mcpEndpoint(optional,TEMPER_MCP_URL) installsMcpNegotiationStatusProcessor— pass it from any hop running an MCP client.isTelemetryEnabled(),getTracer(),forceFlush().McpNegotiationStatusProcessor,negotiationKey(url)— exported for testing and for a consumer assembling its own provider.initTelemetryinstalls the processor for you when givenmcpEndpoint; there is no reason to construct it by hand otherwise.extractContext(headers),activeTraceparent()— inbound parent extraction and the active span'straceparentfor hand-injection at a known call site.
Why dist/ is committed
dist/ is committed to the repository (not gitignored) and regenerated by tsc.
This is deliberate, and the reason is subtle:
- bun copies a
file:dependency into its content-addressed store at install time (unlike npm, which symlinks). A consumer using bun (temper-ui) therefore resolves a snapshot taken duringbun install— adist/produced by a laterbuild:depstep lands in this source directory, not in that snapshot, so the consumer's build fails to resolve the package entry. Committingdist/makes it present at clone time, so every consumer — bun-copy, npm-symlink, Vercel, CI — resolves a real entry with no build-ordering dependency.
Because dist/ is committed, rebuild and commit it whenever you change src/:
npm ci && npm run build # from this directoryCI enforces this: the temper-telemetry-ts job rebuilds and fails on any diff against
the committed dist/.
