What it does
一个 dsh 宿主(Host)插件 + 浏览器半区(Web GUI 订阅按钮) + macOS 全局悬浮窗, 把你订阅的每个会话的任务状态用红/黄/绿三色灯在屏幕右上角的悬浮窗里逐行实时展示。
Installation
dsh plugin --profile web add github:ChivasKong/dsh-trafficlightInstall method: GitHub · not yet tested in container (L3+)
Compatibility
| DSH Version | Status |
|---|---|
| not stated | Declared — not tested |
Requirements
- • Node.js: not stated
- • DSH: declared "not stated"
- • External credentials: none detected
Security Report
Automated static scan, not manual review.
Critical findings in non-blocking categories (dynamic code execution, shell execution, install scripts, obfuscation). Common in CLI/terminal plugins but worth reviewing.
code-exec ×10.2.1dsh manifest882c48280c062026-08-19882c48280c06The scan result is only valid for the scanned commit. If the latest commit differs, the badge shows outdated until the daily pipeline rescans.
Disclaimer: automated static analysis, not a security guarantee. Always review what you install.
• Static heuristic scan: done (13 files)
• Dependency vulnerabilities: requires deep audit (L3+)
• Permission sandboxing: requires runtime testing (L4+)
High-risk findings · 5 / 5
- criticalChild process module usage (Node.js)src/host/overlay-launcher.ts:9import { execFile, spawn } from 'node:child_process'
- warningHTTP request to a raw IP addressmock-bridge.mjs:140console.log(`[mock-bridge] traffic-light bridge on http://127.0.0.1:${port}/state`)
- warningShell command execution (exec / execSync)src/host/overlay-launcher.ts:31execFile('pgrep', ['-x', OVERLAY_NAME], { timeout: 3000 }, (error) => {
- warningFilesystem write operationssrc/host/settings.ts:142fs.writeFileSync(tmp, JSON.stringify(
- warningFilesystem write operationssrc/host/subscriptions.ts:80fs.writeFileSync(tmp, JSON.stringify(this.list(), null, 2), 'utf8')
Heuristic static scan — may produce false positives. Review the source yourself before trusting.
Activity
Last commit 2026-08-18 · activity: Active
• Repo created: 2026-08-19
• Stars: ★ 0 · Forks: 0
• Health: Active — committed within last 30 days
