dsh-plugin-approval-alert
doncelee229-cmyk
DeepSeek Harness 审批/选择方案系统级通知提醒,显示工作区名、点击跳转、多语言。Approval & decision alerts with native notifications for DeepSeek Harnes…
PROJECT TOPICS
PROJECT README
English | 中文
Plugin market inside DeepSeek Harness: browse, search, one-click install — every install/update passes a static security audit gate first.
dsh-plugin topic (ranked by stars / latest, paginated) plus a personal My Favorites list (☆-save, survives restarts)--dsw-alias-* tokens); audit results in the official "request approval" pill stylepackage.json (repository / GitHub homepage), the github: spec, or a scan of the shipped README — the spec text and a "Source" button open the repo—— → 鈥斺€) are detected and restored (a "encoding repaired" badge shows; spots already destroyed upstream render as ?); cache is memory-only, 30-min TTL with a size capPrerequisites: DeepSeek Harness (
dsh web) running; pnpm available (the market detects and offers to install it). Windows needs 10 1803+ (bundled bsdtar for the audit step).
Option 1: from GitHub (recommended)
dsh plugin --profile web add github:nanshan1995/DSH-Plugin-Market
Option 2: local link (development)
git clone https://github.com/nanshan1995/DSH-Plugin-Market
dsh plugin --profile web add link:$(pwd)/DSH-Plugin-Market
Option 3: npm (once published)
dsh plugin --profile web add dsh-plugin-market
Restart DeepSeek Harness, then open Settings → Plugin Market.
dsh-plugin topic ranked by stars (50 per load, "Load more" to page; GitHub exposes at most 1000 results — the real total is shown, and search reaches the rest); in-flight ops are pinned to the toppackage.json repository (or GitHub homepage), the github: spec, or a README scan when the package declares no repository (e.g. dsh-plugin-audit)dsh.bundle declaration: a yellow notice appears after install with a "Let the Agent handle it" button — it opens a fresh session with a pre-filled diagnosis task so the Agent finishes the wiring for you| Env var | Effect |
|---|---|
DSHMARKET_AUDIT_GATE=off |
Disables the audit gate (all sources are then refused outright — fail-closed) |
DSHMARKET_GITHUB_TOKEN |
Raises the GitHub search quota (unauthenticated is ~10 req/min). Note: the market also reads a plain GITHUB_TOKEN env var if DSHMARKET_GITHUB_TOKEN is unset — the token is only sent to api.github.com |
DSHMARKET_TRANSLATE_PROVIDER / DSHMARKET_TRANSLATE_MODEL |
Model used for query translation (defaults deepseek-official / deepseek-v4-flash, using the host's configured LLM credentials) |
DSHMARKET_README_PROXY |
Explicit HTTP proxy for README/audit downloads (otherwise auto-detected: env proxy → local port probe → direct) |
A standard dsh-plugin (dsh.bundle + dsh.client):
lib/index.js host entry: injects webServer (+ optional llm/loader), mounts HTTP routes
lib/routes.js routes: search/install/update/uninstall/favorites/readme/entries/toggle/status/updates/logs/setup-pnpm
lib/audit-scanner.js bundled static audit engine (from dsh-plugin-audit's scanner)
lib/hot.js hot-mount after install (no restart needed)
lib/log.js sanitized logging and export
client/client.js self-contained client (settings UI, audit card, agent handoff)
cordis.patch.yml bundle patch: inserts the dsh-plugin-market row into the profile
Audit gate (fail-closed): before install/update, the exact artifact that would be installed (npm dist tarball or GitHub codeload HEAD) is downloaded into a temp dir and scanned statically — code is never executed:
eval/vm/new Function), service injection, bundle patch, dependenciespreinstall/install/postinstall (plus prepare for git installs) are always blocked; any audit failure blocksSearch & translation: GitHub search API (paged, sortable by stars/updated); the query is expanded by the built-in zh/en thesaurus and then translated live by the host LLM (10-min cache, 6s timeout, silent fallback to the thesaurus). Translated terms join the GitHub OR-query.
README fetch: curl channel (auto proxy detection + direct fallback), language-priority candidates (README.zh.md → README.md, rare-name fallback, follows in-README language links), other language warm-loaded in the background; content passes encoding repair and relative-URL rewriting; memory-only cache, 30-min TTL + size cap.
Favorites: stored as a JSON file in the profile (dsh-plugin-market-favorites.json), so the personal list survives restarts without any third-party catalog dependency.
Pagination: 50 per load for community browse, 20 for search; the client's "Load more" appends exactly one page of new items (drift-compensating backfill), shows loaded/real totals and notes GitHub's 1000-result retrieval cap.
Install executor: same-origin POST → audit → re-invoke the dsh CLI to forward pnpm (PATH patched per platform) → hot-mount on success; packages declaring dsh.bundle are auto-added to the profile's bundle stack. Uninstall = dsh remove + stop the still-loaded entry + drop the profile-bundles reference, so the plugin disappears immediately and does not resurrect after a restart.
Agent handoff: for plugins that don't activate after install, the client calls workspaces.startSession, opens a fresh session and prefills the composer with a diagnosis task; the Agent takes over once the user sends it.
The static audit is a capability radar, not a behavior firewall: it blocks the highest-risk static patterns (dynamic exec, credential theft, install scripts, tampering with other plugins) but cannot judge runtime data-flow intent (e.g. "read documents, then upload"). Curation ≠ endorsement: only install sources you trust, and pair this with a runtime sentinel (e.g. dsh-plugin-audit) and commit pinning.
This market only provides plugin browsing, download and management. Before download it runs only the most basic static check — no safety or compliance promise is made. The author is not responsible for any issues or losses arising from the download or use of any plugin.
main — stable release branch: only accepts tested merges; every merge is a releasable statetest — daily development branch: all adjustments, fixes and experiments happen here; merged back to main after tests passFlow: develop and self-test on test → verify → open a PR into main → merge after the maintainer approves → main is the release.
dsh-plugin topic search; My Favorites is personal data stored only on the local machineCLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。