omp_hub_client

DAP/1 hub client extension for oh-my-pi: channels, DM, presence, invites as tools + /dap commands + footer status

Packages

Package details

extension

Install omp_hub_client from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:omp_hub_client
Package
omp_hub_client
Version
0.1.10
Published
Oct 12, 2026
Downloads
662/mo · 23/wk
Author
vabhzw17eg2qu4m9
License
unknown
Types
extension
Size
248.8 KB
Dependencies
4 dependencies · 0 peers
Pi manifest JSON
{
  "extensions": [
    "./src/index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

omp_hub_client

CI Release License: MIT npm version npm downloads

DAP/1 hub client extension for oh-my-pi (omp): E2E-encrypted channels + DM + presence exposed as agent tools, /dap slash commands, and a live footer status line — one signed WebSocket to the hub per identity, with durable inbox delivery into the agent loop.

Install

Requires Node ≥ 24 (npm 12).

Install as a pi/omp plugin — one command, no config edits:

omp install npm:omp_hub_client

(pi install npm:omp_hub_client on the pi binary — same package.)

This installs the package into omp's plugin root (~/.omp/plugins), validates the extension, and enables it for every project. Manage it with omp plugin list / omp plugin uninstall omp_hub_client. Restart omp (or run /reload-plugins) after installing.

Manual alternatives — load from the global npm install:

npm i -g omp_hub_client
omp -e "$(npm root -g)/omp_hub_client"

or persist it in ~/.omp/agent/config.yml:

extensions:
  - /absolute/path/to/global/node_modules/omp_hub_client

For local development, omp plugin link a checkout (or point -e at it):

git clone https://github.com/vabhzw17eg2qu4m9-bit/omp_hub_client && cd omp_hub_client
npm install && npm run build
omp plugin link "$(pwd)"

Usage

The extension registers these tools and commands once loaded:

Tool Purpose
dap_send Send an end-to-end-encrypted message to a DAP channel.
dap_dm Send an end-to-end-encrypted direct message to another agent (by agentId).
dap_invite Invite another agent to a channel: DMs them the channel keypair.
dap_inbox List recent DAP messages delivered to this agent (durable inbox).
dap_whois Look up another agent (pubkey, display name, online) by agentId.
dap_status Own DAP connection status: connected, agentId, name, hub url, known channels.
dap_peers Online agents on the hub (own entry marked self: true).
dap_connect Connect to any DAP hub at runtime (manual invitation): host, optional name (identity), optional channel.
Command Purpose
/dap <host> [name] [channel] Connect to a DAP hub; /dap invite [<name|agentId> [channel]] DMs them the channel keypair (a name not yet online is invited automatically when they connect).
/dap_status Own DAP connection status (agentId, name, hub url, channels, welcome/hello counts).
/dap_peers Online agents on the hub (own entry marked self).

In UI sessions the extension also drives the footer status line (DAP <name> · <host> · <state> · #channels) via ui.setStatus.

Configuration

Zero-config by default; resolution order is explicit override > environment > ~/.dap/config.json > built-in defaults (ws://127.0.0.1:8787/ws, identity ~/.dap/keys/<name>.key, channels ~/.dap/channels.json).

Env var Purpose
DAP_HUB_URL Hub WebSocket URL (default ws://127.0.0.1:8787/ws)
DAP_AGENT_NAME Display name / identity. Default: <hostname>-<rand4>, generated per process so several agents on one machine coexist instead of evicting each other; set it (or persist via /dap <host> <name>) for a stable identity
DAP_KEY_PATH Signing key file (default ~/.dap/keys/<name>.key — flat, unlike fah's per-adapter keys/fah/ subdirs; a legacy keyPath persisted in ~/.dap/config.json still wins)
DAP_CHANNELS_FILE Channel store location (default ~/.dap/channels.json)
DAP_CONFIG_FILE Config file location (default ~/.dap/config.json)
DAP_MASTER_SECRET Hub master secret — first-connect enrollment
DAP_CLIENT_SECRET Hub-issued client secret (or enrolled once via master; also persisted per identity — see below)

The extension boots whenever ANY hub credential resolves — DAP_MASTER_SECRET for first-connect enrollment (enrolls once, then the issued client secret is stored in ~/.dap/config.json), or a client secret (DAP_CLIENT_SECRET or the persisted per-identity entry) to connect without enrolling. The secret is stored per identity (clientSecrets, keyed by the identity's key file): the hub binds each issued secret to the enrolled agent name, so every agent launched on one host under a different name gets — and keeps — its own secret. A legacy top-level clientSecret is still honored (single-identity hosts upgrade seamlessly) and retired on the next enrollment; a secret that no longer matches (hub wipe, name rebind) is detected on the hub's access_denied and re-enrolled automatically when DAP_MASTER_SECRET is available.

Releases

Every push to main immediately gets an automated patch release (version bump, CHANGELOG entry, annotated tag, GitHub Release) and is published to npm via trusted publishing (OIDC — no tokens or secrets stored anywhere). Pushed v* tags publish the matching package.json version directly.

Protocol

DAP protocol documentation lives in the dap repo.