Install verification: runtime verified (L5) · tested on dsh 0.2.1-rc.2 · last checked Install verification details →
What it doesAI
Generates, reads, and updates repository wikis and grounded claims inside DSH using existing model config.
- Generate/read/update repository Wiki
- Grounded Claims with source tracing
- Reuses DSH configured model, no extra API key
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:D2Moqi/dsh-openwiki#v2.0.5Install 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 | dsh 0.2.0-rc.2 | dsh 0.1.7-rc.2 |
|---|---|---|---|---|---|
| v2.0.5 | ✓ | ✓ | ✓ | ✓ | ✓ |
v2.0.5github✓ 10 runtime-verified2026-10-19
https://github.com/D2Moqi/dsh-openwiki
✓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/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@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/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@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-12L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.2
- • Plugin artifact: github · https://github.com/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@dsh0.2.1-alpha.2 · profile: l4-sandbox
Issued: 2026-10-12 · expires: 2026-10-19
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.0-rc.22026-10-09L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.0-rc.2
- • Plugin artifact: github · https://github.com/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@dsh0.2.0-rc.2 · profile: l4-sandbox
Issued: 2026-10-09 · expires: 2026-10-16
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.1.7-rc.22026-09-25L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.2
- • Plugin artifact: github · https://github.com/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@dsh0.1.7-rc.2 · profile: l4-sandbox
Issued: 2026-09-25 · expires: 2026-10-02
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.1.6-alpha.22026-09-20L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.2
- • Plugin artifact: github · https://github.com/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@dsh0.1.6-alpha.2 · profile: l3-fullscan
Issued: 2026-09-20 · expires: 2026-09-27
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.1.6-alpha.12026-09-16L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.1
- • Plugin artifact: github · https://github.com/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@dsh0.1.6-alpha.1 · profile: l4-sandbox
Issued: 2026-09-16 · expires: 2026-09-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.1.5-rc.22026-09-11L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.5-rc.2
- • Plugin artifact: github · https://github.com/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@dsh0.1.5-rc.2 · profile: l4-sandbox
Issued: 2026-09-11 · expires: 2026-09-18
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.1.3-alpha.22026-09-09L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.3-alpha.2
- • Plugin artifact: github · https://github.com/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@dsh0.1.3-alpha.2 · profile: l3-fullscan
Issued: 2026-09-09 · expires: 2026-09-16
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.
✓prehistory2026-09-30L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: unknown
- • Plugin artifact: github · https://github.com/D2Moqi/dsh-openwiki#v2.0.5
ID: dsh-openwiki@v2.0.5@dshunknown · profile: l3-fullscan
Issued: 2026-09-30 · expires: 2026-10-07
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.
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-openwiki/)``[](https://www.dsh.so/artifact/dsh-openwiki/)``[](https://www.dsh.so/artifact/dsh-openwiki/)``[](https://www.dsh.so/artifact/dsh-openwiki/)``[](https://www.dsh.so/artifact/dsh-openwiki/)`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.
v2.0.5dsh manifestv2.0.5git2026-10-21v2.0.5same versionclean · npmVet is an AST static scan (npm artifact or git source).
show static findings (12)
- warningchildProcess · code-exec
lib/index.js:258handle = subprocess.spawn({ - warningchildProcess · code-exec
lib/index.js:389const handle = subprocess.spawn({ - warningchildProcess · code-exec
lib/index.js:871handle = subprocess.spawn({ - warningfsWrite · files
lib/index.js:616const code = `const fs=require('fs');fs.mkdirSync(${JSON.stringify(envDir)},{recursive:true});fs.writeFileSync(${JSON.stringify(envPath)},${ - warningfsWrite · files
lib/index.js:1549code = `const fs=require('fs');fs.mkdirSync(${JSON.stringify(dir)},{recursive:true});fs.writeFileSync(${JSON.stringify(path)},${JSON.stringi - warningfsWrite · files
lib/index.js:1551code = `const fs=require('fs');const b=fs.readFileSync(${JSON.stringify(base64.path)},'utf8');fs.mkdirSync(${JSON.stringify(dir)},{recursive - warningchildProcess · code-exec
src/host/index.js:261handle = subprocess.spawn({ - warningchildProcess · code-exec
src/host/index.js:392const handle = subprocess.spawn({ - warningchildProcess · code-exec
src/host/index.js:874handle = subprocess.spawn({ - warningfsWrite · files
src/host/index.js:619const code = `const fs=require('fs');fs.mkdirSync(${JSON.stringify(envDir)},{recursive:true});fs.writeFileSync(${JSON.stringify(envPath)},${ - warningfsWrite · files
src/host/index.js:1552code = `const fs=require('fs');fs.mkdirSync(${JSON.stringify(dir)},{recursive:true});fs.writeFileSync(${JSON.stringify(path)},${JSON.stringi - warningfsWrite · files
src/host/index.js:1554code = `const fs=require('fs');const b=fs.readFileSync(${JSON.stringify(base64.path)},'utf8');fs.mkdirSync(${JSON.stringify(dir)},{recursive
show 5 audit findings
- mediumRPC route /dsh-openwiki/rpc is authenticated only by the static, source-published header x-dsh-openwiki: 1
lib/index.jsRPC_HEADER is the constant string 'x-dsh-openwiki', so the 'auth' is a publicly known token. Anyone able to reach the harness web server (any local process, or a remote peer if the server is not loopback-bound) can invoke the whole handler registry: runtime/install (global npm install), model/env (raw secrets), kb/import and kb/delete (writes/deletes executed with real user permissions), job/start (spawns the CLI with the user's API keys in env). Same-origin client code (or an XSS in the harness UI) also bypasses the DSH fs sandbox through these methods.
- mediumopenwiki/model/env returns raw API keys from ~/.openwiki/.env despite the comment claiming values are masked
lib/index.jsMANAGED_ENV_KEYS includes OPENAI_COMPATIBLE_API_KEY / ANTHROPIC_API_KEY / GEMINI_API_KEY / OPENROUTER_API_KEY, and the function comment says 'values masked for secrets' but no masking happens. `rpc.handle('openwiki/model/env', async () => readOpenWikiEnvStatus())` therefore hands the plaintext provider keys back to any RPC caller (see the weak header auth), and the keys also sit in a plaintext file written with default fs.writeFileSync permissions via the node fallback.
- lowFile writes/deletes are executed by spawning node with the user's real permissions, deliberately bypassing the DSH fs sandbox
lib/index.jsnodeWriteFile/nodeRemoveFile and the applyEnvUpdates fallback build `node -e` code paths that write to ~/.openwiki/.env and to any registered workspace's openwiki-kb tree regardless of workspace-write restrictions. Content is attacker-controllable via the kb/import RPC and delete is recursive; blast radius is limited by safeImportName (no '..', no absolute paths, no control chars), so an RPC caller can overwrite/delete files only inside <workspace>/openwiki-kb/source/files and rewrite the credential file.
- lowPlugin runs `npm install -g openwiki` automatically at load, without user confirmation
lib/index.jsensure() is invoked unconditionally on apply (`void ensure().then(...)`), so the first load of the plugin fetches and globally installs a third-party package (and runs its install scripts) with the user's permissions if the CLI is absent; the CLI is then spawned with the user's provider API keys in its env. Supply-chain compromise of that npm package becomes host code execution without any prompt.
- lowAuto-update is enabled by default for every workspace and spawns LLM-backed generation jobs on git HEAD changes
lib/index.jsAny call to openwiki/workspaces (i.e. opening the panel) calls maybeDefaultAutoUpdate(), which starts a 15s `git rev-parse --verify HEAD` poll per workspace and, on HEAD change, `await startJob({ workspaceId, mode: 'update', ... })` — regenerating wiki pages with the user's model credentials and rewriting files in the workspace without an explicit opt-in.
No backdoor or third-party exfiltration; risk comes from a static-header RPC surface exposing raw API-key readback, sandbox-bypassing writes, auto global npm install and default-on auto-update.
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-05 · activity: Stable
• Repo created: 2026-08-29
• Stars: ★ 2 · Forks: 3
• Health: Stable — committed within 90 days
Source
GitHub: github.com/D2Moqi/dsh-openwiki
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
