dsh-models-radar
Model capability radar plugin for the DeepSeek Harness Web GUI
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 26, 2026
- Updated
- Aug 26, 2026
Introduction
dsh-models-radar
A model capability radar plugin for the DeepSeek Harness Web GUI. It reads public benchmark data from deng.codexradar.com, adds a Model Capability page to Settings, and shows the selected session model's live DeepSWE score below the composer.
Features
- Settings → Model Capability through the additive
settings.sectionslot - Capability overview grouped by base model, with expandable reasoning-effort tiers
- Fixed IQ scale (
0–110) and consistent capability bands across channels - Two benchmark channels:
deep-swe: code-repair tasks, binary-majority scoringpompeii-adjacency: visual reconstruction tasks, continuous Adjacency F1
- Semantic task diagnostics:
- DeepSWE: passed / split vote / failed
- Pompeii: low / general / good / excellent F1 bands
- attention-first sorting and local filters
- Seven-day IQ trend with a smooth curve, solid translucent area, 24-hour delta, and seven-day low/average/high
- Efficiency metrics: IQ, average cost, average duration, cache hit rate, and 24-hour run count
- Composer capability readout beside the session price pill:
- exact current
model@reasoningEffortmatching through DSH's official per-session model directory - current DeepSWE IQ
- 24-hour delta
- 48-hour sparkline
- exact current
- Refresh within freshness windows: overview & per-task composition 15 min, channel list & IQ trend 60 min; only expired datasets are refetched, everything else is served from cache (single-flight, zero upstream hits inside a window)
- Manual refresh button in the footer (skips the windows) next to the last-fetch timestamp
- Offline fallback to the latest persisted snapshot when the upstream API is unavailable
- Chinese and English UI copy
Requirements
- DeepSeek Harness Web GUI
dsh-super-injectorfor runtime or persistent local installation- Node.js 22 or newer
- npm
Install from Git
The simplest installation fetches the repository directly into the web profile:
dsh plugin --profile web add github:hi-fangj/dsh-models-radar
The equivalent full Git URL is:
dsh plugin --profile web add git+https://github.com/hi-fangj/dsh-models-radar.git
The repository includes the built Host and browser bundles required by DSH, so direct Git installation does not run dependency lifecycle scripts and does not require a pnpm build allowlist. Refresh http://127.0.0.1:3080 after installation; restart DSH once if the running process does not hot-load the new package.
To remove the Git-installed package:
dsh plugin --profile web remove dsh-models-radar
Install from a Local Clone
Clone and build the plugin manually when developing or modifying it:
git clone https://github.com/hi-fangj/dsh-models-radar.git
cd dsh-models-radar
npm ci
npm run build
The build produces:
lib/index.js: Host ESM bundlelib/client.js: browser CJS bundle wrapped in the DSHModuleLoaderhandshake
Add the Local Clone to DSH
After building, add the local package to the web profile:
dsh plugin --profile web add /absolute/path/to/dsh-models-radar
dsh plugin delegates dependency installation to the selected profile, so this command installs the package into ~/.dsh/profiles/web. The repository includes built bundles for direct Git installation; after making local source changes, run npm run build before adding or reloading the local clone.
Refresh http://127.0.0.1:3080 after installation. If the currently running DSH process does not hot-load the newly added package, restart DSH once and refresh the page.
To remove this CLI-installed dependency:
dsh plugin --profile web remove dsh-models-radar
Restart DSH after removal so the profile is recomposed without the plugin.
Runtime Injection
Runtime injection is the fastest way to try the plugin. In a DSH session, ask the Agent to call:
dev_inject_plugin({
"dir": "/absolute/path/to/dsh-models-radar"
})
Then refresh http://127.0.0.1:3080 once. Runtime injection remains active until the DSH process restarts or the plugin is uninjected.
Persistent Installation
To add the package to the web profile's dependencies and bundle list, ask the Agent to call:
dev_install_package({
"dir": "/absolute/path/to/dsh-models-radar",
"profile": "web"
})
Refresh the Web GUI after installation. The package will be assembled again from the profile after a DSH restart.
Usage
Capability Page
- Open Settings in the lower-left corner of the DSH Web GUI.
- Select Model Capability.
- Choose
DeepSWEorPompeiiat the top. - Select a model tier from the overview or tier selector.
The page refreshes on open within the freshness windows: data served from cache costs no upstream request, and only expired datasets are refetched. Clicking a row in the overview changes the model tier used by the metrics, trend, and task diagnostics below it.
Capability Overview
Each base model is represented by its strongest tier. Expand a row to inspect all available reasoning-effort tiers. IQ bars use an absolute 0–110 scale:
| IQ | Band |
|---|---|
< 70 | Needs improvement |
70–84.9 | General |
85–94.9 | Steady |
95–99.9 | Excellent |
≥ 100 | Leading |
Task Diagnostics
DeepSWE uses the benchmark's real majority-vote result. Pompeii keeps its continuous F1 semantics. Filters and counts are computed locally; no extra API request is made when changing filters.
Composer Readout
The compact pill below the composer follows the model selected for the session's next request, not merely the most recently completed response. It displays:
SWE IQ 90.2 ↑ +1.4 [48h sparkline]
Matching behavior:
- Exact
model@reasoningEffortmatch - Best tier of the same base model, prefixed with
≈ - Hidden when the base model does not exist in the DeepSWE leaderboard
The readout updates immediately when the composer model changes. The readout polls the host every 15 minutes (the shortest freshness window), so each tick costs one local request and an upstream fetch at most once per window per channel; a failed refresh keeps the last successful value.
Update
cd /absolute/path/to/dsh-models-radar
git pull
npm ci
npm run build
For a runtime-injected package, ask the Agent to reload it:
dev_reload_package({
"packageName": "dsh-models-radar"
})
Refresh the page if the client dependency graph changed.
Uninstall
For a runtime-injected package:
dev_uninject_plugin({
"match": "dsh-models-radar"
})
For a persistent profile installation, remove dsh-models-radar through your profile/plugin manager and restart DSH. Snapshot data is intentionally retained under ~/.dsh/plugin-data/dsh-models-radar/; remove that directory separately only when its history is no longer needed.
Data and Privacy
The plugin reads unauthenticated public endpoints from https://api.codexradar.com/api/v1:
/benchmarks/intelligence-efficiency/iq-history/leaderboard
The browser does not contact the upstream API directly. api.codexradar.com only allows selected browser origins through CORS, so the Host half proxies the request through the same-origin endpoint /model-radar/api/data. See ADR-0001.
The plugin:
- does not request credentials or tokens
- does not submit benchmark results
- does not send conversation content
- stores only public benchmark snapshots locally
Snapshot files:
~/.dsh/plugin-data/dsh-models-radar/
├── latest-deep-swe.json
├── latest-pompeii-adjacency.json
└── iq-timeline.jsonl
Architecture
Browser
├── settings.section → Model Capability page
├── conversation.composer.dock → live session capability pill
└── GET /model-radar/api/data
│
▼
Host plugin
├── per-dataset freshness windows (15 min efficiency/leaderboard, 60 min benchmarks/history)
├── single-flight upstream fetches + channel-global benchmarks cache
├── RadarView normalization
└── local snapshot persistence (snapshots keep serving within their window after a restart)
The composer readout subscribes to DSH's official modelDirectories per-session store, so model changes propagate without polling the model-selection state.
Development
npm ci
npm run build
Useful DSH development operations:
dev_inject_plugin({ "dir": "/absolute/path/to/dsh-models-radar" })
dev_reload_package({ "packageName": "dsh-models-radar" })
dev_uninject_plugin({ "match": "dsh-models-radar" })
Primary source files:
src/index.ts: Host proxy, refresh throttle, and snapshotssrc/client/RadarSection.tsx: Settings page state and compositionsrc/client/Overview.tsx: capability overviewsrc/client/charts.tsx: trend and task diagnosticssrc/client/LiveCapability.tsx: composer capability readoutsrc/client/ScrollFrame.tsx: persistent overflow scrollbarsrc/client/scoreMetrics.ts: IQ bands and trend semanticsCONTEXT.md: project domain language
Troubleshooting
The Model Capability tab is missing
- Confirm
npm run buildproducedlib/client.js. - Confirm the plugin is active with
dev_plugin_status. - Refresh the Web GUI once to load the latest client graph.
The composer capability pill is missing
- Confirm the selected model exists in the DeepSWE leaderboard.
- A base-model fallback is shown with
≈; an entirely unknown base model is hidden by design. - Confirm the official model-selection UI plugin is active.
Upstream refresh failed
The Settings page shows the latest stored snapshot when one exists. Check network access to api.codexradar.com; no credential is required.