A plugin pack for one install target: the DeepSeek Harness web profile
(npx @deepseek-ai/dsh web; profile web under $DSH_HOME, default ~/.dsh).
Everything ships as a standard dsh bundle.
Read ARCHITECTURE.md for the map, the plugin's own packages/<name>/README.md
for its behaviour, SECURITY.md before touching credentials or the launcher, and
scripts/checks/README.md for what proves a change.
-
One install target. The web profile only. No desktop edition, no
-Target desktop, no desktop detection.app/plusscripts/run-desktop.*is a launcher of the same pinneddsh webon a free loopback port — it patches no core file and adds no second server. It installs exactly one thing, and only when asked: its panel's Install button runs this pack's own installer (scripts/setup/install.*), which adds these bundles to thewebprofile and nothing else — and it is given-DshHome <the home the app chose>, so the pack lands in the profile the app will actually run. Uninstall runs the matching pair. Both are disabled while a harness is running, and neither touches a row or a core file. -
Nothing patches core. A row change is a new bundle layer.
dsh-vn-masteris the pack's final layer (it installs last), so pack-wide row patches belong there, and a package that replaces a row carries that row's disable with it. -
Platforms. Plugin code is OS-neutral. Windows tooling is PowerShell and must work on 5.1 and 7 (
Join-Path,[System.IO.Path]::PathSeparator,$PSVersionTable; never$IsWindowsunguarded, never a hardcodednpx.cmd,%USERPROFILE%or\). macOS/Linux tooling is POSIX shell and must never require PowerShell — Node.js with npm/npx and nothing else. -
Launchers. Every entry point lives in
scripts/, one per action per host (run-web.*,run-desktop.*), and there are no forwarders. The install and uninstall pairs live one level down inscripts/setup/, beside the workers they call, and the app's own buttons run those same entry points. Nothing else sits at the top level:console/is the shared console layer,tools/is maintainer-only,checks/is the contract, andcheck-scripts.mjsfails on a stray file. On Windows the entry point calls the PowerShell worker beside it (or the console layer, for the setup pair) and gets its console behaviour from the one shared layer:if not defined VNCODE_CONSOLE set "VNCODE_ARGV=%*" call "%~dp0console\adapt.cmd" "%~f0" "<window title>" if errorlevel 10 exit /b 0 :: a Windows Terminal window owns the run if errorlevel 2 goto :nopowershell :: no PowerShell on this machineAn entry point forwards
%VNCODE_ARGS%and never%*;adapt.cmdmust notsetlocal; colour lives inscripts/console/theme.ps1and its POSIX twintheme.sh. -
The launch token is a live credential. It is read in memory, never written to a file, echoed, or handed to a shell, and a URL that is not loopback is refused rather than opened. It appears only in
scripts/run-web.ps1/scripts/run-web.sh. -
No secrets, ever. Run
node scripts/checks/check-no-secrets.mjsbefore pushing. A vendored bundle can ship its author's own credentials: redact them in the build (a patch under that engine'svendor/<name>/patches/, read before the artifact is committed), never with an allowlist entry. -
Zero npm dependencies in shipped packages, and no network egress a plugin starts on its own. Engines are vendored under
lib/vendor/or resolved from the harness already on disk. -
No CI, on purpose. The checks in
scripts/checks/are run by hand; they are the contract, andscripts/checks/README.mdlists them.
packages/<bundle>/— one standalone bundle per plugin, each with its own one-page README:dsh-vn-master(final layer),dsh-rightbar+dsh-rightbar-files(the right bar and its Files tab),dsh-editor,dsh-gittree(History),dsh-image,dsh-audio,dsh-video,dsh-media(the only owner of ffmpeg),dsh-supercollider(SuperCollider: tensc_*tools over a warmsclangsession and a hand-written OSC client, the.schelpreference indexed, five skills whose every example a check compiles, one small console tab — host half plus UI, no bundled binary),dsh-diagrams,dsh-pdf,dsh-research(a run is a folder with apassport.jsonrecording the user's own words; niners_*tools over an append-only claim and source ledger, a claim's numbers recorded as a validatedstatisticrather than left in the prose, a structured method record whose screening counts cannot increase, a disclosure record whose every statement must be complete before a submission prints it, a verification ladder whose every rung names what it reached plus a calibration set that measures the READER rather than the run, the review with its enforced concession protocol, frame gates a PERSON answers in the right bar, eight skills that teach the tool surface, the method layer and the ethics layer, and a Research tab that also edits the document — host half plus UI, no socket, no vendored engine),dsh-browser,dsh-themes,dsh-cmdbar,dsh-modal,dsh-skills,dsh-ui-state,dsh-open-in-app.- A package may carry its OWN checks under
packages/<name>/checks/, run withnpm run checkin that folder. They travel with the package (which is what makes them useful outside this repository) and they are ADDITIONAL toscripts/checks/, never a replacement for it:dsh-supercolliderships three, and the pack-wide checks still own the routes, the bundle and the manifest. scripts/— the launchers (run-web.*,run-desktop.*), and three folders:console/(the shared console layer),setup/(install and uninstall, which the app's buttons run),tools/(maintainer-only) andchecks/.app/— the Rust/egui shell: a cargo workspace whose binary isvncode, a control panel that opens on the home question when nobody has named a home — one screen, the cards that answer it (copy the machine's home here / make a fresh one in this folder), decided invn_shell_core::firstrunand remembered only by a click — and then four rows (home, pack, key, browser) with every diagnostic behind one collapsedDetails. It resolves and creates the root its harness home lives in ($VNCODE_HOME, withDSH_HOMEat<root>/homeunless-DshHome, a home chosen on that screen, or a writable inheritedDSH_HOMEsays otherwise — nothing outside its own root is ever the home it runs against, so~/.dshis the source of the copy offer and nothing else), starts the pinned harness on Start — installing the pack into that home first when its profile lists none of the pack's bundles, so one press reaches a real interface — and ends it on Stop (a launcher, not a desktop edition). It composes every child's environment rather than inheriting one, cleans every path before it uses one, and draws the shipped interface only when it is built to: the default build compiles no engine and opens the harness in a browser it found (browser.rs), while--features paneshows it inside this window instead - one OPTIONAL dependency onwry, nothing vendored, and the default not flipped until Linux and macOS are measured.app/README.mdexplains it anddocs/PLAN-egui-shell.mdis the plan it was built from.check-shell.mjsandcheck-pane.mjsare what prove it, and they drive the real binary.docs/— install, build, deploy, release, paths, compatibility, and the shell's plan. There is no distributer and no ship list any more: the distribution is this repository, and the app installs the pack itself..dsh-version.json— the pinned harness line and the pack manifest (its versions must match everypackage.json;check-node-routes.mjsenforces that).
Run the check that owns the area, and say which ones you ran:
check-no-secrets.mjs— before anything is pushed;check-scripts.mjs— thescripts/layout, the console contract, and both setup entry points driven with-Help(which installs nothing);check-node-routes.mjs— every Node route, the manifest, the pack-wide patches;check-client-bundles.mjs— every browser bundle, loaded and driven for real;check-media-node.mjs,check-pdf-node.mjs,check-browser-node.mjs— the tool and host halves;check-shell.mjs— the native shell, driven: the ready line and its refusals, the launch token in no stream and no file (in both roots a run writes), Stop freeing the port and killing the tree, the flags (including a-Modethis build does not have being refused BY NAME, so no build can promise a web view it does not draw), the panel's install/uninstall path, the home ladder (an unwritable inheritedDSH_HOMEfalls through, an impossible-DshHomerefuses by name, a writable inherited one is joined, an installation at~/.dshis neither used nor offered as a home in either state, andVNCODE_HOMEreaches no child — every run confined onVNCODE_HOME,DSH_HOMEandUSERPROFILE/HOME), and thatapp/src-tauriis gone (it also runscargo test --workspace; it skips loudly with no cargo and no built binary);check-pane.mjs— the pane's contract, and it is a contract about two builds: the default build compiles no engine and refuses-Mode embedby name, the pane build accepts it and says so in its usage, and the pane crate's own tests pass with the feature on. It skips loudly on a host that cannot build the pane at all, and FAILS on a build error that is not one of those host reasons, so a compile error cannot hide behind the skip;check-audio-browser.mjs— the check that drives a real browser (with none installed it skips loudly);check-skill-examples.mjs,check-media-examples.mjs— every fenced example in the shipped skills (parsed, compiled, or actually run);npm run checkin a package folder that ships its own — todaypackages/dsh-supercollider, whose three checks cover the engine's OSC codec and discovery, the skill examples against a real SuperCollider, and the row's own contract (ten tools, three routes, five skills, the classic-script client bundle and its CSS prefix). They are additional to the list above, not a substitute for it.
A check that cannot run on this host says so loudly and exits 0. Never silence a check, and never weaken one to make a change pass.
Comments and docs state the rule and the measurement behind it — the fact a future editor must not break — not the changelog. Docs are one page each: no alpha-by-alpha history, no re-explaining what the harness used to do.