Install verification: runtime verified (L5) · tested on dsh 0.2.1-rc.2 · last checked Install verification details →
What it doesAI
Replaces the whale mascot with any image via auto cutout, and adds a restart button plus heartbeat indicator.
- Replace whale mascot with any image
- Automatic image cutout support
- Adds restart button and heartbeat indicator
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:ArimaKana-Akane/dsh-whale-toolsInstall method: GitHub · runtime verified (L5)
Verification & Compatibility
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 | dsh 0.2.1-alpha.2 |
|---|---|---|---|
| 7cc547 | ✓ | ✓ | ✓ |
7cc547github✓ 3 runtime-verified2026-10-19
https://github.com/ArimaKana-Akane/dsh-whale-tools
✓dsh 0.2.1-rc.2current2026-10-19L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • Plugin artifact: github · https://github.com/ArimaKana-Akane/dsh-whale-tools (version unstated)
ID: dsh-whale-tools-2@7cc547@dsh0.2.1-rc.2 · profile: l4-sandbox
Issued: 2026-10-19 · expires: 2026-10-26
View checks & evidence
active in loader tree (150 entries)
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-16L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.4
- • Plugin artifact: github · https://github.com/ArimaKana-Akane/dsh-whale-tools (version unstated)
ID: dsh-whale-tools-2@7cc547@dsh0.2.1-alpha.4 · profile: l4-sandbox
Issued: 2026-10-16 · expires: 2026-10-23
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.2.1-alpha.22026-10-14L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.2
- • Plugin artifact: github · https://github.com/ArimaKana-Akane/dsh-whale-tools (version unstated)
ID: dsh-whale-tools-2@7cc547@dsh0.2.1-alpha.2 · profile: l4-sandbox
Issued: 2026-10-14 · expires: 2026-10-21
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
Author badges
Embed the official badges in your README to showcase security & install-test status:
`[](https://www.dsh.so/artifact/dsh-whale-tools-2/)``[](https://www.dsh.so/artifact/dsh-whale-tools-2/)`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 medium — stricter wins → overall medium.
v1.1.0dsh manifest1.1.0git2026-10-211.1.0same versionclean · gitVet is an AST static scan (npm artifact or git source).
show static findings (5)
- warningchildProcess · code-exec
lib/index.js:203const child = spawn(process.execPath, [CUTOUT_CLI, srcPath, outPath, '610'], { - warningchildProcess · code-exec
lib/index.js:235const r = spawnSync('bash', [APPLY_SCRIPT], { stdio: 'pipe', timeout: 30000 }) - warningchildProcess · code-exec
lib/index.js:353const child = spawn('systemctl', ['--user', 'restart', 'dsh-web-profiled.service'], { - warningfsWrite · files
lib/index.js:258try { fs.writeFileSync(HEARTBEAT_FILE, String(Date.now())) } catch (e) {} - warningfsWrite · files
lib/index.js:315fs.writeFileSync(tmpSrc, body)
show 2 audit findings
- mediumChange endpoints rely on peer-IP loopback plus a source-published static header, which collapses behind a same-host tunnel
lib/index.js:116The only proof of 'desktop' identity is a header whose default value ('1') is a constant published in this source and the README, combined with a peer-address check. When the request arrives through any same-host reverse proxy (the dsh-mobile gateway described in the file comments connects from 127.0.0.1), the address check is always satisfied, and a non-browser client that sends no Origin header needs only that header. Protection then rests entirely on the upstream gateway stripping the custom header — an assumption about another component that cannot be verified in this repo. If it does not
- lowUnauthenticated heartbeat endpoint writes a file and is reachable cross-origin, bypassing the gate used by all other mutating routes
lib/index.js:258Unlike cutout/restart this handler never calls denyIfNotDesktop, and a simple cross-site GET (<img>/no-cors fetch sends no Origin on GET) can trigger it from any web page or tunneled device while the browser is open. Effects are limited: it overwrites one fixed timestamp file (used by the profiler to decide whether to open a new page after restart) and performs a synchronous write per request, giving a small state-tampering / event-loop-blocking nuisance rather than data exposure.
Gate for restart/cutout = loopback peer IP + publicly known static header; behind the same-host mobile tunnel this depends on the gateway stripping that header. Heartbeat is an ungated write.
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-09-13 · activity: Stable
• Repo created: 2026-09-11
• Stars: ★ 0 · Forks: 0
• Health: Stable — committed within 90 days
Source
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
