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

@goooyi/opencode-observability-plugin

v0.2.27

Published

OpenCode plugin that sends session telemetry and reasoning parts to Langfuse.

Readme

Langfuse OpenCode Plugin

OpenCode plugin that sends OpenCode session telemetry to Langfuse. It traces user turns, assistant generations, tool calls, retries, reasoning output, compaction output, and failed generation steps.

This fork traces the stable OpenCode plugin event stream. It supports the common message.updated / message.part.updated events used by OpenCode server integrations, and also accepts session.next.* events when an OpenCode version delivers them through the plugin hook. It does not poll completed session messages to reconstruct traces.

If OPENCODE_TRACEPARENT or TRACEPARENT is set, plugin spans join that W3C trace. For long-lived OpenCode hosts, put traceparent in OpenCode session metadata instead; the plugin will use the session metadata parent for observations from that session. This lets a host application reuse one OpenCode server while each OpenCode session still joins the correct platform trace.

Plugin hooks are serialized in arrival order inside the plugin. This keeps message-update observations idempotent when OpenCode emits repeated part updates, and preserves session.next.* ordering when those events are available. The plugin also accepts deprecated session.idle events for older OpenCode versions.

The hooks avoid blocking OpenCode on Langfuse export. chat.message records the user turn and returns immediately; assistant/tool/reasoning events are processed asynchronously from OpenCode's native plugin event hook.

When OpenCode disposes the plugin, the queue is drained and the Langfuse exporter is shut down.

Quick Start

Enable the plugin in your opencode.json or opencode.jsonc:

{
  "plugin": ["@goooyi/opencode-observability-plugin@latest"]
}

Restart OpenCode after changing the config.

OpenCode native experimental.openTelemetry is optional and separate. This plugin sends Langfuse ingestion events from OpenCode plugin events so reasoning text can be captured without installing a process-wide OTEL SDK inside OpenCode.

Host-Managed OpenCode Servers

Use this plugin when OpenCode's plugin runtime is the telemetry boundary, including host-managed opencode serve deployments. Host applications can pass TRACEPARENT or OPENCODE_TRACEPARENT to a short-lived OpenCode process. For reused hosts, create each OpenCode session with metadata like:

{
  "traceparent": "00-<trace-id>-<parent-observation-id>-01"
}

The host can still consume OpenCode's /event stream for live UI; this plugin uses OpenCode's native plugin hooks for durable Langfuse generation/tool/reasoning traces.

Langfuse Credentials

Create ~/.config/opencode/opencode-langfuse.json with your Langfuse credentials.

{
  "publicKey": "pk-lf-...",
  "secretKey": "sk-lf-...",
  "baseUrl": "https://cloud.langfuse.com",
  "environment": "development",
  "userId": "your-user-id"
}

Only publicKey and secretKey are required. If baseUrl is not set, the plugin uses https://cloud.langfuse.com. If environment is not set, it uses development.

You can also set credentials with environment variables:

export LANGFUSE_PUBLIC_KEY="pk-lf-..."
export LANGFUSE_SECRET_KEY="sk-lf-..."
export LANGFUSE_BASEURL="https://cloud.langfuse.com"
export LANGFUSE_ENVIRONMENT="development"
export LANGFUSE_USER_ID="your-user-id"

If both LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY are set, the plugin uses environment variables instead of reading the config file. Optional values can be supplied either way.

License

MIT