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

@goldenstagg/n8n-nodes-jada

v0.7.0

Published

The Jada Node — ultimate OpenCode AI coding agent for n8n with true streaming, full CRUD, and dual auth

Downloads

1,461

Readme

n8n-nodes-jada — The Jada Node

The ultimate OpenCode community node for n8n: true streaming, full session CRUD, and a built-for-weeks self-healing event listener with an OpenACP-grade live-status renderer.

Built against the live OpenCode v1.17.3 server API.

Why it beats the existing nodes

| | ssccio | dandacompany | fsteccanella | Jada | |---|---|---|---|---| | Auth | Bearer | Basic | Bearer | None / Basic / Bearer | | True token streaming | ✗ (buffers) | ✗ | ✗ | prompt_async + SSE | | Self-healing listener | ✗ | ✗ | ✗ | ✓ reconnect + heartbeat + seq-reconcile | | Idempotent re-attach | ✗ | ✗ | ✗ | ✓ client messageID | | Live status rendering | ✗ | ✗ | ✗ | ✓ thinking / tool card / draft | | Full CRUD + fork/diff/revert/shell | partial | ✓ | partial | |

Components

  • JadaOpenCodeApi credential — None / Basic (OPENCODE_SERVER_PASSWORD) / Bearer.
  • Jada Chat Model — LangChain BaseChatModel for the AI Agent; _streamResponseChunks streams real tokens via prompt_async + the /event SSE stream.
  • Jada Session — list/get/create/delete/abort/fork/diff/summarize/revert/messages/shell/todo.
  • Jada Event Trigger — self-healing SSE listener. Emits raw or normalized events, or renders live status to Telegram. Designed to run for weeks: the socket is disposable, the cursor durable.

Architecture

OpenCode /event (SSE)
  └─ EventStream  (reconnect+jitter · heartbeat watchdog · seq-gap reconcile)   reliability core
       └─ OpenCodeEventTransformer  (events → normalized OutgoingMessage)        mapping
            └─ LiveStatusEngine  (ActivityTracker: 💭 thinking · 📋 tool card · draft · 📊 usage)
                 └─ SendQueue  (3s interval · text dedup · drop-stale)            delivery
                      └─ Sink:  Telegram │ n8n items │ Redis Stream              pluggable

The engine/ module is host-agnostic — identical code runs inside the trigger node (Phase 1) and a future always-on sidecar with Redis durability (Phase 2).

Reliability notes (live-verified, v1.17.3)

  • The SSE wire emits flat data: frames {id,type,properties} — no id: line and no seq → native Last-Event-ID is impossible; resumption is blind reconcile-on-reconnect (the EventStream fires onReconnect; the consumer refetches state for sessions it cares about).
  • The server sends no keepalive → a client heartbeat watchdog is mandatory.
  • prompt_async accepts a client messageID (becomes the user message id) → exclude the echo, and enables fire-and-reattach after a restart.

Usage — wiring it up

Stream the prose answer to the n8n chat window Chat Trigger (Response Mode = Streaming response) → AI Agent (Enable Streaming on, default) → Jada Chat Model. Streaming is at the AI-Agent level and model-agnostic. This streams the prose answer only.

Live status (💭 thinking / 📋 tool cards / 📊 usage) to Telegram Jada Event Trigger (mode = Render Live Status to Telegram; bot token + chat id + optional topic) watches /event and renders the rich play-by-play. One OpenCode turn feeds both the chat window (prose) and Telegram (full status) in parallel. Optionally filter to one session id.

Security / permission approvals The Event Trigger renders 🔐 prompts with ✅ Once / ♾️ Always / ⛔ Reject buttons (callback_data jada:perm:<id>:<reply>). Wire the tap back: Telegram Trigger (callback_query) → parse the data → Jada Session → Respond to Permission.

Session management Jada Session for list/get/create/delete/abort/fork/diff/summarize/revert/messages/shell/todo and permission ops.

Model selection

Use a steady text model (e.g. a Llama or Qwen instruct model). Don't rely on provider auto-defaults — some are non-text (OpenRouter's default can be an image model), and a few hosted gateway models intermittently return empty responses. Pick an explicit, known-good model.

Build

npm install --ignore-scripts   # n8n-workflow pulls native isolated-vm; only its types are needed
npm run build                  # tsc → dist/, then copies icons

Install into n8n via the community-nodes flow, or copy dist/ to ~/.n8n/custom/.

Docs

  • SPEC.md — full design (architecture, event mapping, surfaces, permissions, open decisions)
  • CHANGELOG.md — version history + verification status

License

MIT