dbydd / dsh-onlyne

Listed

IM gateway for DeepSeek Harness agents — send and receive QQ, WeChat, Feishu and Telegram messages from dsh sessions.

mainSession View source

Installation

npx -y @deepseek-ai/dsh plugin --profile web add github:dbydd/dsh-onlyne

This installation command is an unverified starting point generated from the GitHub repository address.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit 4c4bb3cSynced Aug 18, 2026

dsh-onlyne

English | 中文

Give DeepSeek Harness agents a real IM inbox/outbox through Onlyne.

dsh-onlyne is the DeepSeek Harness (dsh) plugin for Onlyne, the workspace-local IM channel daemon. It adds model-facing tools and a watch loop so a dsh agent can receive messages from IM channels (Telegram, Feishu/Lark, QQ Bot, WeChat) and send replies — without pretending a chat platform is a terminal or a workflow engine.

It is the dsh counterpart of pi-onlyne and shares the same per-project config file (.pi/onlyne.json), so one workspace can be bridged by either harness without reconfiguration.

Install

Onlyne is a single binary; see the Onlyne README to install and initialize a workspace:

onlyne init

Then install the plugin into a dsh profile and mount it:

dsh plugin --profile web add dsh-onlyne

Add a row to the profile's cordis.patch.yml ($DSH_HOME/profiles/<name>/cordis.patch.yml):

- insert:
    - id: onlyne
      name: dsh-onlyne

The plugin finds the workspace by walking up from the dsh process's invoking directory to the nearest .onlyne/.

Tools

onlyne_daemon_start()
onlyne_daemon_stop()
onlyne_daemon_restart()
onlyne_reply({ text })
onlyne_send({ channelId, text, rawText? })
onlyne_broadcast({ targets, text, rawText? })
onlyne_loopback({ text, rawText? })
onlyne_mark_no_reply({ reason? })

Send one message

onlyne_send({
  channelId: "telegram",
  text: "# Build report\n\nAll checks passed."
})

Set rawText: true to send literal text instead of Markdown.

Broadcast

onlyne_broadcast({
  targets: [{ channelId: "telegram" }, { channelId: "feishu" }],
  text: "# Release shipped"
})

Loopback wake-up

From any local script, inject an inbound message into the running daemon:

onlyne client '{"id":"wake","op":"loopback","text":"background job finished","raw_text":true}'

Channel loopback is wake-up-only: it surfaces a follow-up in the session but does not expect onlyne_reply.

Command

/onlyne status
/onlyne watch on
/onlyne watch off
/onlyne daemon start
/onlyne daemon stop
/onlyne daemon restart
/onlyne config auto-start

watch on subscribes to the daemon's event stream; inbound messages are surfaced into the current dsh session as user follow-ups, and the agent replies with onlyne_reply or acknowledges with onlyne_mark_no_reply. Control messages such as /handshake are consumed silently. config auto-start toggles watching automatically at session start.

Config

Shared with pi-onlyne at .pi/onlyne.json:

{
  "watch": { "autoStart": false },
  "inbound": {
    "defaultMode": "auto-handle",
    "rules": [{ "channel": "telegram", "mode": "queue-only" }]
  },
  "outbound": {
    "defaultReplyMode": "guarded-explicit",
    "retry": { "attempts": 2, "concurrency": 8 }
  }
}

Development

npm install
npm run check     # build + tests
npm pack          # build the publishable tarball

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

TestsDetected

Repository information

Language
TypeScript
License
MIT
Last updated
Aug 13, 2026, 2:20 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.