npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@hazeljs/observability

v1.0.5

Published

Unified observability, OpenTelemetry tracing, and LLM cost tracking for HazelJS agents and flows

Readme

@hazeljs/observability

Production-grade observability for AI agents and LLM flows.

Trace complex reasoning loops, monitor per-request LLM costs, and debug agentic workflows with native OpenTelemetry support. One decorator, one provider. Ship observable AI features without the manual instrumentation.

npm version npm downloads License: Apache-2.0

Features

  • 🕵️ Native Tracing - Auto-instrumentation via @Trace() decorator
  • 📊 Cost Tracking - Monitor LLM token usage and estimated API costs in real-time
  • 🌐 OpenTelemetry - Built on industry-standard OTel for vendor neutrality (Jaeger, Honeycomb, etc.)
  • Zero Overhead - Asynchronous span processing that never blocks your agent execution
  • 🎯 Type-Safe Spans - Rich metadata capture with full TypeScript support
  • 🏗️ Distributed Context - Trace flows across multiple agents and services

Installation

npm install @hazeljs/observability

Peer Dependencies

Install the OpenTelemetry API and SDK if not already present:

npm install @opentelemetry/api @opentelemetry/sdk-trace-node @opentelemetry/resources @opentelemetry/semantic-conventions

Quick Start

1. Initialize the Provider

Initialize the OpenTelemetryProvider in your application's entry point:

import { OpenTelemetryProvider } from '@hazeljs/observability';

const provider = new OpenTelemetryProvider({
  serviceName: 'my-ai-agent',
  endpoint: 'http://localhost:4318/v1/traces', // OTLP endpoint
});

provider.initialize();

2. Trace Methods with @Trace()

Simply drop the @Trace() decorator on any synchronous or asynchronous method:

import { Trace } from '@hazeljs/observability';
import { Injectable } from '@hazeljs/core';

@Injectable()
export class FinancialAgent {
  @Trace('analyze-portfolio')
  async analyzePortfolio(data: any) {
    // This method call is now automatically captured as a span
    // including duration, status, and metadata.
    return await this.performHeavyAnalysis(data);
  }
}

Cost & Token Tracking

Integrate LLM cost tracking directly into your traces:

import { Trace, useObservability } from '@hazeljs/observability';

class ChatService {
  @Trace('llm-completion')
  async complete(prompt: string) {
    const { trackCost } = useObservability();
    const response = await this.llm.generate(prompt);

    // Capture token usage and cost as span attributes
    trackCost('gpt-4o', response.usage.inputTokens, response.usage.outputTokens);

    return response;
  }
}

Architecture

The observability package follows the A2A (Agent-to-Agent) and OTel specifications to ensure your traces are compatible with the broader ecosystem.

<MermaidDiagram chart={`graph TD A["@Trace() Decorator"] --> B["Observability Service"] B --> C["OpenTelemetry Provider"] C --> D["OTLP Exporter"] D --> E["Observability Platform(Jaeger, Honeycomb, Datadog)"]

style A fill:#3b82f6,color:#fff
style B fill:#6366f1,color:#fff
style C fill:#10b981,color:#fff

`} />

API Reference

OpenTelemetryProvider

class OpenTelemetryProvider {
  constructor(config: { serviceName: string; endpoint?: string; headers?: Record<string, string> });
  initialize(): void;
  shutdown(): Promise<void>;
}

@Trace Decorator

@Trace(spanName?: string, options?: TraceOptions)

TraceOptions:

  • attributes: Static attributes to add to the span.
  • captureArgs: Whether to capture method arguments (default: false).
  • captureResult: Whether to capture method return value (default: false).

Examples

See the examples directory for complete working examples with Jaeger and Honeycomb.

Testing

npm test

Contributing

Contributions are welcome! Please read our Contributing Guide for details.

License

Apache 2.0 © HazelJS

Links