⚠️ This repository has been renamed: NoCandles/dsh-stock-bar — click to visit the new location. Everything below is preserved as originally indexed.
Install verification: sandbox install passed (L4) · runtime test (L5) pending · tested on dsh 0.2.1-rc.2 · last checked Install verification details →
What it does
DeepSeek Harness plugin: always-on stock quotes strip at the top of the window - watchlist, holdings (shares & cost), P&L, candlestick/intraday charts, order book, trade ledger, alerts, AI review.
Installation
dsh plugin --profile web add github:NoCandles/dsh-stock-ticker#v1.0.0Install method: GitHub · sandbox install passed (L4) · runtime test (L5) pending
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 | prehistory |
|---|---|---|
| v1.0.0 | ◐ | ✓ |
v1.0.0github✓ 1 runtime-verified◐ 1 testing2026-10-19
github:NoCandles/dsh-stock-ticker#v1.0.0
◐dsh 0.2.1-rc.2current2026-10-19L4 · testing (install passed, runtime untested)
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • Plugin artifact: github · https://github.com/NoCandles/dsh-stock-ticker#v1.0.0
ID: dsh-stock-ticker-3@v1.0.0@dsh0.2.1-rc.2 · profile: l4-sandbox
Issued: 2026-10-19 · expires: 2026-10-26
View checks & evidence
This level was not executed in this scan.
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓prehistory2026-10-19L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: unknown
- • Plugin artifact: github · github:NoCandles/dsh-stock-ticker#v1.0.0#v1.0.0
ID: dsh-stock-ticker-3@v1.0.0@dshunknown · profile: l5-web-smoke
Issued: 2026-10-19 · expires: 2027-01-17
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-stock-ticker-3/)`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.
v1.0.0dsh manifestv1.0.0git2026-10-19v1.1.0version moved onclean · gitVet is an AST static scan (npm artifact or git source).
show static findings (6)
- warningnetIp · network
lib/index.js:267const url = (req) => new URL(req.url || '/', 'http://127.0.0.1'); - warningnetIp · network
scripts/probe-client-served.mjs:16const BASE = process.argv[3] || 'http://127.0.0.1:19387'; - warningnewFunction · code-exec
scripts/verify-client.mjs:760const fn = new Function(...names, source); - warningnetIp · network
scripts/verify-client.mjs:546location: { href: 'http://127.0.0.1:19387/', origin: 'http://127.0.0.1:19387' }, - warningnetIp · network
scripts/verify-live.mjs:136const u = new URL(req.url, 'http://127.0.0.1'); - warningnetIp · network
scripts/verify-live.mjs:148const BASE = `http://127.0.0.1:${PORT}`;
show 3 audit findings
- lowUnbounded count/days query parameters forwarded to upstream quote providers
lib/index.js:302Any caller that can reach the local API can request an arbitrary number of candles or trend days (e.g. count=10000000). This value is passed unvalidated into fetchKline/fetchTrends and the whole parsed result is then stored as one LRU cache entry; CACHE_MAX caps the number of entries (200) but not their size, so a few large requests can inflate memory and upstream load. The same file clamps this class of input in /ai/analyze (Math.min(240, Math.max(30, ...))), which shows the bound is simply missing here.
- lowAbsolute portfolio store path and raw internal error messages returned to route clients
lib/index.js:217Every /state (and /health) response discloses the absolute filesystem path of portfolio.json, and the safe() wrapper returns verbatim exception text (including upstream/fs errors) to whatever can reach the routes. This is local-only information, useful mainly for reconnaissance of the host layout.
- lowDev-only verifier evaluates the client bundle with new Function (not loaded at plugin runtime)
scripts/verify-client.mjsThe script compiles and runs lib/client.js inside a hand-written sandbox. It is a developer harness invoked manually (node scripts/verify-client.mjs); the plugin runtime never imports it, and the evaluated source is the repository's own file, so there is no demonstrated reachable impact. It would only matter if this file were shipped and executed with attacker-controlled content.
Heuristic warnings not confirmed: only the host route layer was harvestable; routes delegate to unharvested store/provider/analysis modules; three low hardening gaps, no critical/high.
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-18
• Stars: ★ 1 · Forks: 0
• Health: Active — committed within last 30 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).
