4.5 KiB
omniroute-plugin
OmniRoute gateway integration for the DeepSeek Harness (DSH): model auto-import (context window, max output, modalities, thinking levels) and provider quota tracking under the composer.
Features
- Model discovery / import: pulls models and combos from your OmniRoute gateway into an
llm-pi-aiprovider (default idomni, created if missing), with context window, output limit, input modalities and supported thinking levels (off/minimal/low/medium/high/xhigh/max). - Periodic re-import (
syncMin, default 60 min; 0 = manual only) and an update existing models only mode. - Include / exclude filters: comma-separated glob patterns (
*,?) on model ids, e.g.claude*, gemini-*; exclude always wins. - Manage imported models: search, select and prune models from the provider.
- Quota tracking: provider quotas (5-hour, weekly, monthly, …) shown in the composer dock, refreshed every
pollSecseconds (default 120); requires a management-scoped API key. - English and Chinese UI.
Files
| File | Role |
|---|---|
index.js |
Host plugin. Injects webServer, connection, credentials, settings. |
client.js |
Web client: settings panel (plugins.bundle.config) and quota dock (conversation.composer.dock). |
locale/*.json |
Plugin title/description (en, zh). |
cordis.patch.yml |
Bundle patch inserting the omniroute row. |
Host routes (relative to the Web origin, behind the connection trust fence)
| Route | Purpose |
|---|---|
GET /omniroute/status |
Effective settings, key presence, last import |
POST /omniroute/config |
Save settings (+ optional write-only API key) |
POST /omniroute/test |
Probe the gateway with given or saved credentials |
GET /omniroute/models |
Models currently imported |
POST /omniroute/prune |
Remove selected imported models |
POST /omniroute/import |
Import models/combos into the llm-pi-ai provider |
GET /omniroute/quotas |
Provider quotas (?model=<id> narrows to that model's provider) |
Installation
Requirements: a working DeepSeek Harness (dsh) install with the web profile (or any profile that includes the Web UI).
Option A — install from git (recommended)
dsh plugin --profile web add git+https://git.rizzy.dev/DSH-Plugins/omniroute-plugin.git
You can also paste git+https://git.rizzy.dev/DSH-Plugins/omniroute-plugin.git into Settings → Plugins → Install in the Web UI, or ask the agent to install it with its plugin_manager tool (install_bundle).
The plugin manager adds @local/omniroute to dependencies and to dsh.profile.bundles in ~/.dsh/profiles/web/package.json.
Option B — local checkout (for development)
git clone https://git.rizzy.dev/DSH-Plugins/omniroute-plugin.git ~/dsh-plugins/omniroute-plugin
dsh plugin --profile web add link:$HOME/dsh-plugins/omniroute-plugin
With a link: install, edits in the checkout are picked up directly (client changes reload on page refresh, Host changes after a DSH restart or HMR reload).
Enable / verify
- Make sure
@local/omnirouteis listed indsh.profile.bundlesof~/.dsh/profiles/web/package.json(the installer does this; add it by hand if you editedpackage.jsonmanually). - Restart DSH (
dsh web) or reload the page. - Check Settings → Plugins: the
@local/omniroutebundle should be enabled.
Uninstall
dsh plugin --profile web remove @local/omniroute
Updating
Re-run the add command from Option A (or git pull in your Option B checkout).
Setup after install
- Open Settings → Plugins → OmniRoute.
- Enter the Gateway URL (e.g.
https://omniroute.example.com) and paste your API key.- The key is stored in the DSH credential store under
OMNIROUTE_API_KEY(keyRef) and never leaves the Host. - Use a management-scoped key if you want quota tracking.
- The key is stored in the DSH credential store under
- Press Test, then Save, then Re-discover models.
- Pick an
omni/…model in the model selector. Quotas appear under the composer.
Configuration file
Non-secret settings live in <profile>/omniroute.json ($DSH_PROFILE_DIR or ~/.dsh/profiles/web/omniroute.json):
{
"url": "https://omniroute.example.com",
"keyRef": "OMNIROUTE_API_KEY",
"provider": "omni",
"discovery": true,
"updateOnly": false,
"include": "",
"exclude": "",
"discoverThinking": true,
"usage": true,
"pollSec": 120,
"syncMin": 60
}
All of these are editable from the settings panel; imported and lastImport are maintained by the plugin.