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

openclaw-channel-dmwork

v0.3.3

Published

DMWork channel plugin for OpenClaw via WuKongIM WebSocket

Readme

openclaw-channel-dmwork

DMWork channel plugin for OpenClaw. Connects via WuKongIM WebSocket for real-time messaging.

Repository: https://github.com/yujiawei/dmwork-adapters

Prerequisites

  • Node.js >= 18
  • OpenClaw installed and configured
  • A bot created via BotFather in DMWork (send /newbot to BotFather)

Install as OpenClaw Extension

git clone https://github.com/yujiawei/dmwork-adapters.git
cp -r dmwork-adapters/openclaw-channel-dmwork ~/.openclaw/extensions/dmwork
cd ~/.openclaw/extensions/dmwork && npm install

Configure

Add to your ~/.openclaw/config.yaml:

channels:
  dmwork:
    botToken: "bf_your_token_here"   # Bot token from BotFather
    apiUrl: "http://your-server:8090" # DMWork server API URL
    # wsUrl: "ws://your-server:5200" # Optional — auto-detected from register if omitted

Configuration fields:

  • botToken (required): Bot token from BotFather (bf_ prefix)
  • apiUrl (required): DMWork server API URL, e.g. http://192.168.1.100:8090
  • wsUrl (optional): WuKongIM WebSocket URL. Auto-detected from register if omitted.

Run

openclaw gateway restart

The plugin is loaded automatically by OpenClaw when the gateway starts.

What it does

  1. Registers the bot with the DMWork server via REST API
  2. Connects to WuKongIM WebSocket for real-time message receiving
  3. Auto-reconnects on disconnection
  4. Sends a greeting to the bot owner on connect
  5. Dispatches incoming messages to OpenClaw's message handler
  6. Supports streaming responses (start/send/end), typing indicators, and read receipts

As an OpenClaw Plugin

The index.ts exports a standard OpenClaw plugin object. When loaded by OpenClaw:

  • register(api) is called automatically
  • api.runtime is injected for logging and lifecycle management
  • api.registerChannel() registers the DMWork channel plugin
  • Configuration is read from channels.dmwork in OpenClaw's config

The plugin uses the ChannelPlugin SDK interface with support for:

  • Direct messages and group chats
  • Multi-account configuration via channels.dmwork.accounts
  • Config hot-reload on channels.dmwork prefix changes

Disconnect

To disconnect the bot, send /disconnect to BotFather in DMWork. This invalidates the current IM token and kicks the WebSocket connection.