Install verification: Ecosystem plugin: installs via dsh plugin add but declares no dsh.bundle and mounts no plugin capability — the L1-L5 install ladder does not rate it; the security scan still runs.Install verification details →
What it doesAI
Lightweight desktop shell for DSH (DeepSeek Harness) Web with one-click start/stop/restart and auto-obtained login links.
- Four launch modes: npx, global command, binary path, WSL
- Login link auto-captured via bridge plugin, log parsing as fallback
- Closing the window frees WebView memory; backend and tray stay resident
Capability tags are AI-inferred or rule-extracted from the README (see badge) — vocabulary-limited, not install-verified. AI = inferred; README = literal keyword from the readme.
Installation
dsh plugin --profile web add github:BoxMiao007/dsharbor#v0.3.6Install method: GitHub · runtime test inconclusive (L5 unknown)
Verification & Compatibility○ Ecosystem plugin
Grouped by plugin version: each card lists the dsh versions actually tested against that artifact version and their install verdicts (L5 wins). Untested combinations are omitted — absence means untested, never assumed compatible. L1–L3 are a plugin-level static archive (independent of the dsh version — the same verdict on every dsh row): they sit in each row's level grid next to L4/L5, marked "static", while their evidence is stored once per plugin inside that row's "checks & evidence" instead of being duplicated per version.
External credentials (plugin-level): none detected
○ The author declares no dsh version requirement — install is not blocked by version.
| plugin \ dsh | dsh 0.2.1-rc.2 current | dsh 0.2.1-alpha.4 |
|---|---|---|
| v0.3.6 | ○ | ○ |
| v0.3.2 | · | · |
v0.3.6github○ 2 ecosystem plugin2026-10-20
https://github.com/BoxMiao007/dsharbor
○dsh 0.2.1-rc.2current2026-10-20Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • Plugin artifact: github · https://github.com/BoxMiao007/dsharbor#v0.3.6
ID: dsharbor@v0.3.6@dsh0.2.1-rc.2 · profile: l4-sandbox
Issued: 2026-10-20 · expires: 2026-10-27
View checks & evidence
not present in web-profile loader inventory
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
○dsh 0.2.1-alpha.42026-10-18Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.4
- • Plugin artifact: github · https://github.com/BoxMiao007/dsharbor#v0.3.6
ID: dsharbor@v0.3.6@dsh0.2.1-alpha.4 · profile: l4-sandbox
Issued: 2026-10-18 · expires: 2026-10-25
View checks & evidence
not present in web-profile loader inventory
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
v0.3.2github2026-10-15
https://github.com/BoxMiao007/dsharbor
Ecosystem plugin: installs via dsh plugin add but declares no dsh.bundle and mounts no plugin capability — its level reads L5 · Ecosystem plugin.
Author badges
Embed the official badges in your README to showcase security & install-test status:
`[](https://www.dsh.so/artifact/dsharbor/)`Security Report
Two automated layers, neither a manual review: a static scan (per-plugin rule checks) and a model-driven dynamic security audit that covers only the subset static-flagged at warn or above and never executes plugin code.
Static low, dynamic low — stricter wins → overall low.
v0.3.6v0.3.6git2026-10-21v0.3.6same versionclean · gitVet is an AST static scan (npm artifact or git source).
show static findings (10)
- warningnetIp · network
crates/dsharbor-core/src/links.rs:76let internal = url("http://127.0.0.1:3080/?token=abc"); - warningnetIp · network
crates/dsharbor-core/src/links.rs:78navigation_decision(&internal, &url("http://127.0.0.1:3080/chat")), - warningnetIp · network
crates/dsharbor-core/src/links.rs:85let internal = url("http://127.0.0.1:3080/"); - warningnetIp · network
crates/dsharbor-core/src/logparse.rs:4//! `dsh web: http://127.0.0.1:3080/?token=<token> (LAN: http://192.168.1.8:3080/?token=<token>)` - warningnetIp · network
crates/dsharbor-core/src/logparse.rs:88const REAL_LINE: &str = "dsh web: http://127.0.0.1:3080/?token=Hg2-FSVi19r0havm1WCAjf408xgTND8dUk9PTmKs6Cg (LAN: http://192.168.1.8:3080/?to - warningnetIp · network
crates/dsharbor-core/src/logparse.rs:95"http://127.0.0.1:3080/?token=Hg2-FSVi19r0havm1WCAjf408xgTND8dUk9PTmKs6Cg" - warningnetIp · network
plugins/dsharbor-bridge/lib/index.js:57const url = new URL(req.url ?? '/', 'http://127.0.0.1'); - warningnetIp · network
plugins/dsharbor-bridge/lib/index.js:75const base = `http://127.0.0.1:${String(webServer.port)}/`; - warningnetIp · network
scripts/ui-candidates.mjs:71console.log(`界面候选挑选页:http://127.0.0.1:${port}${indexPath}`); - warningnetIp · network
scripts/ui-candidates.mjs:72console.log(`基线(当前线上界面):http://127.0.0.1:${port}/dist/mock.html`);
show 3 audit findings
- lowBridge route can hand out a token-bearing login URL over a possibly LAN-reachable interface
plugins/dsharbor-bridge/lib/index.js:74The handler returns a URL containing the in-memory DSH launch token. The plugin's own comment notes the web server may bind 0.0.0.0, so anyone who learns the per-launch nonce (environment inspection, shared process context) can obtain full DSH access; the route is not additionally restricted to loopback callers. The nonce check with timingSafeEqual and the 503-on-missing-nonce path keep this from being directly exploitable.
- lowWebView navigation policy treats file: and data: as in-window navigation
crates/dsharbor-core/src/links.rs:35Any link or script on a page rendered in the shell that targets file:// or data: is left to the WebView instead of being handed to the OS browser. Security then rests entirely on WebView2 blocking http(s)-to-file navigation; if that protection is ever relaxed or the internal base URL is itself file-based, local files could be rendered in the DSH window. The unit tests only cover the decision function, not the runtime enforcement.
- lowA real-looking DSH launch token is committed as a test fixture
crates/dsharbor-core/src/logparse.rsThe test vector is described as a real log line captured on the author's machine and embeds a 48-character token plus a LAN address. Tokens are per-launch and already invalid, so this is not replayable, but it exposes the author's private LAN address and trains reviewers to ignore token-shaped secrets in the tree.
Desktop shell plus a nonce-guarded bridge that mints DSH login URLs; all risky sinks (token route, wsl.exe, file server) are reached only behind guards, no real exploitable issue found.
Rule: the dynamic audit can only raise risk, never lower it (raise-only, never an exemption); a wrong raise is withdrawn by human review and the tier falls back to the static verdict. Overall verdict = the stricter of the two layers.
Disclaimer: the static scan and the dynamic security audit are both automated analysis, not a security guarantee. Always review what you install.
Activity
Last commit 2026-10-21 · activity: Active
• Repo created: 2026-10-14
• Stars: ★ 0 · Forks: 0
• Health: Active — committed within last 30 days
Source
GitHub: github.com/BoxMiao007/dsharbor
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
