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
A workflow plugin that orchestrates four agents (PM, Browser, Programmer, DataEng) for complex DSH tasks.
- Orchestrates four specialized agents: PM, Browser, Programmer, DataEng
- Handles complex DSH tasks
- Includes real run example in docs/run-example.md
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:nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0Install method: GitHub · runtime test inconclusive (L5 unknown) · verified on dsh 0.2.1-alpha.2
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-alpha.2 | dsh 0.2.0-rc.2 | dsh 0.2.0-rc.1 | dsh 0.1.7-rc.2 | dsh 0.1.7-rc.1 |
|---|---|---|---|---|---|
| v0.1.0 | ○ | ○ | ○ | ○ | · |
v0.1.0github○ 12 ecosystem plugin2026-10-18
https://github.com/nataliwhite20534-droid/dsh-4-role-workflow
○dsh 0.2.1-alpha.22026-10-11Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.2
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.2.1-alpha.2 · profile: l4-sandbox
Issued: 2026-10-11 · expires: 2026-10-18
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.0-rc.22026-10-09Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.2.0-rc.2
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.2.0-rc.2 · profile: l4-sandbox
Issued: 2026-10-09 · expires: 2026-10-16
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.0-rc.12026-09-29Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.2.0-rc.1
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.2.0-rc.1 · profile: l4-sandbox
Issued: 2026-09-29 · expires: 2026-10-06
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.1.7-rc.22026-09-26Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.2
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.1.7-rc.2 · profile: l4-sandbox
Issued: 2026-09-26 · expires: 2026-10-03
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.1.7-alpha.22026-09-23Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.1.7-alpha.2
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.1.7-alpha.2 · profile: l4-sandbox
Issued: 2026-09-23 · expires: 2026-09-30
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.1.6-alpha.22026-09-20Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.2
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.1.6-alpha.2 · profile: l3-fullscan
Issued: 2026-09-20 · expires: 2026-09-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.1.6-alpha.12026-09-17Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.1
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.1.6-alpha.1 · profile: l4-sandbox
Issued: 2026-09-17 · expires: 2026-09-24
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.1.5-rc.22026-09-13Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.1.5-rc.2
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.1.5-rc.2 · profile: l4-sandbox
Issued: 2026-09-13 · expires: 2026-09-20
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.1.3-alpha.22026-09-08Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.1.3-alpha.2
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.1.3-alpha.2 · profile: l4-sandbox
Issued: 2026-09-08 · expires: 2026-09-15
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.1.3-alpha.12026-09-07Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.1.3-alpha.1
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.1.3-alpha.1 · profile: l4-sandbox
Issued: 2026-09-07 · expires: 2026-09-14
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.1.2-rc.12026-09-05Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: 0.1.2-rc.1
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dsh0.1.2-rc.1 · profile: l3-fullscan
Issued: 2026-09-05 · expires: 2026-09-12
View checks & evidence
ecosystem plugin: no dsh.bundle declaration
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
○prehistory2026-10-04Ecosystem plugin
- • Node.js: v24.14.0
- • DSH: unknown
- • Plugin artifact: github · https://github.com/nataliwhite20534-droid/dsh-4-role-workflow#v0.1.0
ID: dsh-4-role-workflow@v0.1.0@dshunknown · profile: l4-sandbox
Issued: 2026-10-04 · expires: 2026-10-11
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.
Only the latest 3 published versions are shown; source-snapshot (commit hash) groups, unstated groups and older versions are omitted — the full archive stays in the data layer (snapshot/unstated groups appear only when a plugin has no published version).
Author badges
Embed the official badges in your README to showcase security & install-test status:
`[](https://www.dsh.so/artifact/dsh-4-role-workflow/)`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 high — stricter wins → overall high.
v1.0.0v0.1.0git2026-10-21v0.1.0same versionclean · gitVet is an AST static scan (npm artifact or git source).
show static findings (9)
- criticalshellExec · shell
pm-dispatcher.mjs:58const out = execSync("python -c \"import xhs_cli; print(1)\"", {encoding:"utf8",timeout:10000}); - criticalshellExec · shell
pm-dispatcher.mjs:75const out = execSync(cookieCheck, {encoding:"utf8",timeout:10000}); - criticalshellExec · shell
pm-dispatcher.mjs:81const searchOut = execSync(searchCmd, {encoding:"utf8",timeout:30000}); - criticaleval · code-exec
quick-fetch.mjs:52const content = await page.$$eval(selector, els => els.map(e => e.textContent && e.textContent.trim()).filter(Boolean)); - criticaleval · code-exec
quick-fetch.mjs:57const links = await page.$$eval("a[href]", els => - criticalshellExec · shell
xhs-search.mjs:17const out = execSync("python -c \"from xhs_cli.cookies import load_saved_cookies; import json; c=load_saved_cookies(); print(json.dumps({'ws - criticalshellExec · shell
xhs-search.mjs:27const out = execSync(searchCmd, {encoding:"utf8",timeout:30000}); - warningfsWrite · files
pm-dispatcher.mjs:92fs.writeFileSync(cacheFile, JSON.stringify(results.raw, null, 2), "utf8"); - warningfsWrite · files
pm-dispatcher.mjs:121fs.writeFileSync(outFile, JSON.stringify(extracted, null, 2), "utf8");
show 4 audit findings
- highCommand injection: xhs-search.mjs interpolates argv keyword into execSync shell string
xhs-search.mjs:26`keyword` is taken verbatim from process.argv (line 9: `const keyword = args[0] || "homework"`) with no escaping. It is embedded inside a double-quoted shell string passed to execSync, which runs via the system shell, so input containing quotes, semicolons or $() breaks out and executes arbitrary OS commands with the privileges of the DSH process (e.g. `node xhs-search.mjs "x');__import__('os').system('id');#"`).
- highCommand injection: pm-dispatcher.mjs builds xhs search shell command from parsed request keyword
pm-dispatcher.mjs:80`task.filters.keyword` comes from detectFilters' regex `([^\s ,,。]+)` applied to the raw user request, which still permits shell metacharacters such as quotes, ';', '$(' and ')'. The value is spliced into a shell command executed with execSync, giving arbitrary command execution to anyone who can influence the request string that reaches this plugin (agent prompt, pasted text, upstream tool output).
- lowXHS session cookie prefix written to stdout/logs
pm-dispatcher.mjs:76The first 20 characters of the user's saved web_session token are echoed to console (and xhs-search.mjs line 19 prints `web_session:` similarly). In a harness that captures agent stdout, this leaks part of a live session credential into logs/transcripts; the snippet also reveals whether a session exists, aiding targeted abuse.
- lowHeadless Chromium launched with --no-sandbox on arbitrary URL
quick-fetch.mjs:34quick-fetch.mjs navigates to any URL supplied on argv (line 9) with the Chromium sandbox disabled and a hard-coded local Chrome binary, so a malicious page exploits a renderer bug directly against the host instead of being contained by the sandbox. Impact is conditional on a browser vulnerability, hence low.
Two CLI scripts interpolate unsanitised argv input into execSync shell strings, allowing arbitrary command execution; plus cookie-prefix logging and --no-sandbox.
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-03 · activity: Stable
• Repo created: 2026-09-02
• Stars: ★ 1 · Forks: 0
• Health: Stable — committed within 90 days
Source
GitHub: github.com/nataliwhite20534-droid/dsh-4-role-workflow
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
