An independent, community-friendly plugin index for DeepSeek Harness (dsh). Curated by automation + human review. Topic:
dsh-plugin.
| Plugin | Description | Install | Status | Security | Trial | Checked at | Commit |
|---|---|---|---|---|---|---|---|
| dsh-mcp-tools | MCP server and tool manager for the DSH web settings panel: add servers over streamable-HTTP (URL plus Postman-style header rows) or stdio (command / args / env / cwd), paste one {"mcpServers": {...}} block to import several at once, run a connectivity check (initialize → tools/list) before saving, and toggle individual tools per server so a disabled tool is never registered with the model; switched-off servers keep their configuration, and the whole set copies back out as an mcpServers snippet. One host-side row plus a prebuilt client bundle (dsh.client.platform = web, no build step, zero runtime dependencies), with state and a JSONL event log under $DSH_HOME/dsh-mcp-tools/ |
dsh plugin --profile web add dsh-mcp-tools@1.0.2 | ✅ active | ✅ zero runtime / peer / optional dependencies, no install lifecycle scripts, no telemetry or analytics SDK in the shipped code, and no bundled endpoints — the plugin only contacts an MCP server after the user adds it and triggers the connectivity check; the host-side API sits under /mcp-tools/api/* and is served only to authenticated web sessions (401 without the token cookie). Worth knowing: the server definitions you paste (including header values, which may be tokens) and the event log are stored in plain text at $DSH_HOME/dsh-mcp-tools/{state.json,logs.jsonl} — DSH_HOME can be redirected |
✅ e2e (R79 from hub #65: isolated install of npm dsh-mcp-tools@1.0.2 — China mirror on the first try, prebuilt, friction=none, resolved 1.0.2, wired=true; mcp-tools row inside a 1445-line composed profile tree; web boot smoke 401 → 303 (+Set-Cookie) → 200, client descriptor plugins/??dsh-mcp-tools/client.js served 200 at 136 207 bytes with inject matching 2/2; GET /mcp-tools/api/state 401 without the cookie and 200 with it, returning {"ok":true,"version":1,"servers":[],"registeredTotal":0,"paths":{"state":"…/dsh-mcp-tools/state.json"}}; the shipped scripts/smoke.mjs ran 9/9 ok on the installed copy; not run: settings-panel UI interaction (add-server form, JSON import, per-tool toggles, copy-out snippet), a live MCP initialize → tools/list against a real server, and Windows/Electron — the submission itself claims macOS only) |
2026-10-25 | ddfb49acb3cb850b84b9be1a2fe9d85b25430359 |
| DeepSeek Workbench | Brings the DeepSeek web app into the DSH web GUI: an official-page chat view driven through the visible composer, a temporary side chat that asks a question against the current conversation with its own streaming and cancellation, a DeepSeek API-platform page, and DSH session migration — MIT, shipped as readable ESM/JSX sources (no build step at install) with a single dependency (marked) for markdown; engines.dsh is exactly 0.2.1-rc.2, so a host upgrade will make it peer-reject until the author republishes | dsh plugin --profile web add https://github.com/gulagala001/dsh-deepseek-workbench/releases/download/v0.1.1-dsh.0.2.1-rc.2/dsh-deepseek-workbench-0.1.1-dsh.0.2.1-rc.2.tgz | ✅ active | ✅ e2e (R78, hub #57: release asset downloaded with gh release download, sha256 9d2b4f73…aaa91a1, 189 677 B; structure read BEFORE installing — cordis.patch.yml is a plain single-row insert with no approval / sandbox-policy / fs-observation-policy override, 39 files, no native binaries, no install hook; local file: install friction=none, resolved 0.1.1-dsh.0.2.1-rc.2, wired; 1232-line composed config with the deepseek-workbench layer; boot smoke 401 → 303 + Set-Cookie → 200 (38 083-byte page), the descriptor serves dsh-deepseek-workbench/client.js 200 / 159 013 B with its inject list matching package.json 9/9. NOT run: every account-bound feature (web chat, temporary side chat, platform page, session migration — need a logged-in DeepSeek account), the separate desktop/ host integration, LLM-driven installed-copy session (@deepseek-ai/dsh-headless cannot be installed on this host), Windows/macOS. Note for installers: the install command in the submission names a 0.1.2 file under the 0.1.1 tag (404) — the row pins the real 0.1.1 asset) | 2026-10-24 | 47119973 | |
| dsh-theme-plugin | Appearance and theme manager for the DSH web GUI: three native Appearance pages (appearance settings, theme management, a visual market fed from four catalogs), six built-in appearances and 29 palettes, discovery of themes already installed, file import/export, per-feature theme controls and revalidation when the host or an adapter changes; theme packages are staged and validated before activation and a failed install restores the previous appearance. Targets DSH 0.2.1-rc.2 exactly (engines.dsh), MIT, released as a fixed GitHub release tarball rather than npm (the unscoped npm name belongs to another author) | dsh plugin --profile web add https://github.com/gulagala001/dsh-theme-plugin/releases/download/v0.2.0-dsh.0.2.1-rc.2/gulagala001-dsh-theme-plugin-0.2.0-dsh.0.2.1-rc.2.tgz | ✅ active | insert row (it does not touch approval, sandbox-policy or fs-observation-policy) |
✅ e2e (R76: release-asset tarball, sha256 a804e3be…38e1, downloaded with gh release download and read structurally before installing — package.json + cordis.patch.yml are a plain single-row insert with no policy overrides; local file: install via the asset, friction = none, resolved 0.2.0-dsh.0.2.1-rc.2, wired, dsh-theme-plugin row in a 363-line composed config; boot smoke 401 → 303 + Set-Cookie → 200 with data-dsh-skin; client module 200 / 415 211 B with the descriptor's inject list matching package.json 8/8; no model-callable tools — it is a UI plugin; host prefixes /theme* are not registered (RPC channel instead). Unverified: the appearance pages themselves, market browsing, a real theme download/rollback, import/export — needs a browser-driven session; engines.dsh is exact, so a host upgrade will make it peer-reject until the author republishes) |
2026-10-22 | 6a7ad62 |
| dsh-undo-plugin | Rewind a conversation and its workspace files in place, with confirmation and a real undo: a Copy-adjacent button, a native picker on an idle double Escape or /rewind, and /undo to reverse a restore. Every restore operation is confirmed first. File recovery covers synchronous tools and same-workspace subagents; external effects are not reversed, and a run with no file snapshot restores the conversation only, which is shown before the confirmation. Local state lives in ~/.dsh/rewind-plus (an ownership lease per host process). No network calls of any kind — MIT | dsh plugin --profile web add https://github.com/gulagala001/dsh-undo-plugin/releases/download/v0.1.0-dsh.0.2.1-rc.2/gulagala001-dsh-undo-plugin-0.1.0-dsh.0.2.1-rc.2.tgz | ✅ active | ✅ no outbound requests: the published lib/ and src/ contain no http(s) URL, no telemetry SDK (no posthog/sentry/analytics/mixpanel) and no eval; the only state it writes is a local ownership lease at ~/.dsh/rewind-plus/v1/owners/-.json ({"pid","protocol":2,"busy":false} on this host). It does snapshot workspace files in order to restore them — that is its purpose, and the snapshots stay on the machine. Restores require explicit confirmation; a plugin without a snapshot restores the conversation only, shown before you confirm. Third-party notices and the upstream DSH license are shipped in the tarball | ✅ e2e (release-asset tarball, asset sha256 4436c038c9d7798931f7242e25541bab1bb151d357865652f9516afbe4c10d9d; isolated install into a scratch profile via file: — friction=none, resolved 0.1.0-dsh.0.2.1-rc.2, wired; package.json engines dsh 0.2.1-rc.2 + cordis 4.0.5 exactly match this host, 26 files, no native binaries, no install-time scripts, no vendored node_modules, MIT + LICENSE.DSH present; composed config 1232 lines with the dsh-undo-plugin layer; web boot smoke 401 → 303 + Set-Cookie → 200 and the page references @gulagala001/dsh-undo-plugin/client.js, which serves 200 / 23238 bytes with the package's nine dsh.client.inject modules present in the host page). NOT exercised: the actual rewind/undo round-trip (needs an interactive session with tool-driven file edits), attachment restore, the double-Escape and /rewind//undo UI paths, and the Windows/Linux flows the author lists as unverified |
2026-10-21 | d613e9e |
| dsh-biorxiv | bioRxiv preprint search, version/publication status and export toolbox: biorxiv_search (synonym queries, date window, field, minScore filter), biorxiv_paper (latest version, published DOI/journal, retraction flag), biorxiv_latest (date window and category), biorxiv_export (JSON/Markdown/CSV/BibTeX with path-confined writes) and biorxiv_digest (structured markdown, optional opt-in Chinese summary) — zero runtime dependencies, public APIs only | dsh plugin --profile web add github:TYEclipse/dsh-biorxiv#v0.1.0-alpha.20 | ✅ active | ✅ zero runtime deps, no install scripts, no telemetry; public APIs only (Europe PMC, bioRxiv, Crossref, OpenAlex); optional summary default off and sends only public title/abstract; cache local with hashed keys | ✅ e2e (isolated install from tag v0.1.0-alpha.20, friction=none, resolved 0.1.0-alpha.20; layer dsh-biorxiv in --dump-config; installed-copy CLI executed all five tools against real public APIs — search 1 uncached hit, paper returned the DOI, latest 1 item, digest 1-item markdown, export 2 records / 518 B; MCP initialize reports 0.1.0-alpha.20; 145 tests, 100% line coverage. Not run: LLM-driven headless session (base-only profile), optional AI summary with a real key (default off), Windows/macOS) | 2026-10-19 | b56344e |
| dsh-netdoctor | Network diagnostics toolbox: DNS lookup (10 record types incl. SOA/CAA), multi-resolver DNS propagation check (one record across 6 public resolvers, answer sets grouped by record content, failed/slow resolvers reported as failed), ICMP ping, TCP port check, TLS cert check, HTTP(S) check (redirect chain with relative Location resolved per RFC 3986, per-phase timing dns/connect/tls/ttfb/total as cumulative marks from one clock, audited headers HSTS/CSP/X-Frame-Options/CORS, bounded body read, cookie values counted not echoed), traceroute, public IP, WHOIS registry lookup (TCP 43, IANA referral chain + TLD fallback map, ARIN for IPs, structured summary) — nine read-only probes, zero runtime dependencies | dsh plugin --profile web add github:TYEclipse/dsh-netdoctor#v0.4.0 | ✅ active | ✅ Zero runtime dependencies (Node.js built-ins only), no telemetry SDK, no install-time callbacks. Everything is outbound and read-only; external binaries (ping, traceroute/tracert) are called with fixed argument arrays, never through a shell. check_http never authenticates: a URL with embedded credentials is rejected, Set-Cookie headers are counted and their values never returned, and redirects are only followed to http/https targets. | ✅ e2e (isolated install github:TYEclipse/dsh-netdoctor#v0.4.0 — China mirror on the first try, friction=none, resolved 0.4.0, wired into the profile bundles; installed-copy execution of the published dist: 9/9 tool definitions in dist/tools.js, local-server run of check_http → 301 chain resolved to 200 in 1 hop, 2 Set-Cookie counted with values absent, 404 kept as reachable, timing marks dns absent (IP literal) / connect ≤ ttfb ≤ total; 107 tests / 78.39% line coverage, all offline) | 2026-10-26 | 0b1de6d |
| dsh-webfetch | Web page reader: fetch any URL as clean Markdown / plain text, inventory links, read RSS/Atom feeds, inspect HTTP status/headers/redirect chain without the body (web_headers: HEAD with automatic GET fallback), extract HTML tables as structured rows (web_table: header detection, colspan/rowspan grid expansion, row/table caps), read a page's own metadata (web_meta: canonical, Open Graph/article/Twitter properties, hreflang alternates, feed autodiscovery, icons, JSON-LD @type summaries — invalid blocks reported, not dropped), list a site's own URLs (web_sitemap: robots.txt Sitemap directives, sitemap indexes followed, lastmod/changefreq/priority, relative locs resolved, failing or gzip sitemaps reported per document), zero-dependency http proxy support — zero runtime dependencies, read-only | dsh plugin --profile web add github:TYEclipse/dsh-webfetch#v0.6.0 | ✅ active | ✅ zero runtime dependencies, no install scripts, no telemetry or analytics SDK; only http/https GETs (no credentials, no cookies, embedded URL credentials rejected) of the URLs you give it — plus robots.txt and the sitemaps it declares — with request timeout, redirect-hop, body-size and text-length caps | ✅ e2e (R82: isolated install of github:TYEclipse/dsh-webfetch#v0.6.0 — China mirror on the first try, friction=none, resolved 0.6.0, wired; 363-line composed config with the webfetch layer; the published dist executed 5/5 spec-probe cases against a local fixture: robots→index→urlset inventory, direct sitemap input that skips robots, maxUrls cap honesty (1 of 2 returned, truncated), file: rejection, and a web_headers regression; 163 tests green, coverage 91.65%, oracle cross-checks an xml.etree reader against an independent regex reader. Not run: inventories larger than maxUrls walked across calls (no cursor yet), gzip .xml.gz documents (reported, not decoded), sites whose robots.txt redirects) | 2026-10-28 | 3146ab2 |
| dsh-units | Unit conversion toolbox: 22 categories (length, mass, temperature, data sizes decimal-vs-binary, data transfer rates Mbps-vs-MB/s, acceleration incl. g-force, illumination lux/foot-candle, speed, time, volume, pressure, energy, angle, frequency, power with 3 horsepower definitions, force, torque, typography px/pt/em/rem, volumetric flow rate m³/s-L/min-CFM-gpm, density kg/m³-lb/ft³-lb/gal, fuel economy mpg ↔ L/100km) plus three usable tools on top of the table: a unit-price tool that normalizes and ranks price-per-unit offers (1–6 offers with pack quantities, cheapest + spread in percent; temperatures and fuel economy refused) and a unit-sum tool that adds 1–12 quantities in mixed units of one category (total + mean in a target unit, compensated summation so small addends do not drift, negatives allowed for differences, temperatures and fuel economy refused) — zero runtime dependencies, pure math | dsh plugin --profile web add github:TYEclipse/dsh-units#v0.6.0 | ✅ active | ✅ zero runtime dependencies, pure synchronous arithmetic over a static unit table — no network, no filesystem, no child processes, no eval, no telemetry | ✅ e2e (R81: isolated install of github:TYEclipse/dsh-units#v0.6.0 — mirror first try, friction=none, resolved.installed 0.6.0, wired=true; installed-copy execution 14/14 anchors on the published dist/: unit_sum 5 ft + 3 in + 1.2 m + 80 cm → 360.02 cm (3.6002 m), mean 90.005 cm; 1 h + 30 min + 45 s → 5445 s; 500 MB + 1 GiB → 1573.741824 MB; 1e16 + 1 − 1e16 m → 1 m (compensated, not naive); 10 ft − 2 ft → 8 ft; and no regression in convert_unit (100 km → 62.137119 mi, 1 gpm → 0.0630902 L/s) or unit_price (3.99/lb vs 8.5/kg → best 8.5/kg). In-repo oracle covers the new tool with math.fsum as the ruler plus definitional anchors; suite 83 tests, coverage 95.08%. Not run: interactive agent session with a model (this host cannot install @deepseek-ai/dsh-headless)) | 2026-10-27 | 35a229e |
| dsh-color | Color toolbox: parse/convert any CSS color (hex, rgb()/hsl()/hwb(), all 148 CSS Color 4 named colors), WCAG 2.x contrast ratio with AA/AAA verdicts, named-color lookup by name or value, harmonious palette generation (color_scheme: complementary / analogous / triadic / split-complementary / tetradic / square / monochromatic), color adjustments (adjust_color: lighten / darken / saturate / desaturate / hue-rotate), color blending (blend_colors: alpha compositing over and premultiplied sRGB interpolation mix, i.e. the color-mix() math), contrast repair (ensure_contrast), perceptual color difference (color_difference: CIEDE2000 plus CIE76, both CIELAB colors under D65, plain-language verdict and tolerance check), perceptually even tint/shade ramps (color_scale: tints / shades / both / between interpolated in Oklab, each step reporting its ΔE00 from the base) and color-vision-deficiency simulation (cvd_simulate: protan / deutan / tritan via the Machado, Oliveira & Fernandes 2009 matrices at any severity 0-1, each color as its simulated hex plus ΔE00 shift, and every pair's ΔE00 before/after with the collapsing pairs flagged) — zero runtime dependencies, pure math | dsh plugin --profile web add github:TYEclipse/dsh-color#v0.5.0 | ✅ active | ✅ | ✅ e2e (R83: isolated install v0.5.0, mirror friction=none, resolved.installed 0.5.0, wired; installed-copy execution 7/7 — deutan #e53935/#2ca02c becomes #98892e/#968838 with ΔE00 71.3277 → 1.6504 flagged as collapse, tritan leaves #ff0000 at ΔE00 1.4595, severity 0 = identity and neutrals unchanged, severity clamped to 1, 7 colors refused, plus color_difference 11.7766/61.1101 and color_scale regressions; 153 tests green, coverage 95.51%; oracle section J is an independent Python implementation whose --check also asserts all 33 published matrix rows sum to 1 and that severity 0.0 is the identity) | 2026-10-29 | e4dbdbd |
| Code2Skill | Three agent skills that generate portable Function / MCP Tool / workflow Skill packages (with offline tests) from user-authorized code, plus independent flow and source-semantics review — pure skill bundle, MIT | dsh plugin --profile web add github:leechen298/Code2Skill#v1.2.0 |
✅ active | ✅ | ✅ e2e (R65 re-verification, expired-row queue: re-pinned v1.1.3 → v1.2.0; isolated install friction=none, resolved 1.2.0; dump-config shows code2skill-bundled-skills + provider code2skill-bundle; installed-copy execution 18/18 — three SKILL.md files with matching frontmatter names, patch mounts @deepseek-ai/dsh-skill-filesystem with watch off, files whitelist is the bundle only. Not run: LLM-driven headless session — @deepseek-ai/dsh-headless installs from neither registry on this host) | 2026-10-10 | 27bac3f2 |
| dsh-semver | Semantic versioning toolbox: parse any semver string (semver_parse), compare versions with spec-compliant prerelease ordering (semver_compare, build metadata ignored), check npm-style ranges (semver_satisfies: ^ ~ >= <= > < =, x-ranges, hyphen, ||, AND, tuple-lock prerelease semantics, includePrerelease override), increment versions per npm semver.inc incl. prerelease counters and identifier restarts (semver_inc), report npm semver.diff release-type differences with special cases (semver_diff), and sort version lists with build-metadata tie-break (semver_sort), find the lowest version a range accepts (semver_min_version: npm minVersion parity — unsatisfiable combinations report satisfiable: false instead of a guessed bound), and check whether two ranges can be satisfied at once (semver_intersects: npm intersects parity, plus a witness version verified against both ranges). v0.4.0 adds pulling a version out of arbitrary text (semver_coerce: npm coerce parity — the first number run wins, so a changelog line coerces to its date 2026.0.0 and an unrepresentable component is reported as no-version with a reason, never rounded) and placing a version relative to a whole range (semver_outside: npm gtr/ltr parity — above/below/inside plus the gap between alternatives that neither direction covers; npm's tuple-lock quirk is reported as npm reports it) — zero runtime dependencies, pure logic; v0.3.0 fixed ~1.2.3 silently accepting 1.2.0/1.2.1 |
dsh plugin --profile web add github:TYEclipse/dsh-semver#v0.4.0 |
✅ active | ✅ | ✅ e2e (R67: isolated install #v0.4.0 friction=none, resolved 0.4.0; installed-copy execution 13/13 anchors on the published dist — 10 tools registered, semver_coerce "node v18.16.1" → 18.16.1 and "changelog 2026-10-12: 4.5.6 released" → 2026.0.0 (the date wins, as npm does), semver_outside 2.0.0 vs ^1.2.3 → above / range ^1.0.0 || ^3.0.0 → gap, v0.3.x anchors unregressed; 154 tests green, coverage 92.55%; npm-anchored oracle incl. comparator-shape sweep and a --check self-check) |
2026-10-12 | 1943b63 |
| Archify for DSH | Opt-in skill-only bundle (@tt-a1i/archify-dsh) bringing the Archify architecture-diagram skill to dsh: typed JSON specs (architecture / workflow / sequence / dataflow / lifecycle) rendered to self-contained interactive HTML with inline SVG, showcase-quality validation (9 artifact checks) — pure skill bundle, MIT | dsh plugin --profile web add @tt-a1i/archify-dsh@1.0.0 |
✅ active | ✅ zero deps, no install scripts, no telemetry or analytics SDK; render/validate/check run fully offline — only the finalize delivery receipt performs a bounded update-manifest fetch to tt-a1i.github.io |
✅ e2e (re-verified 2026-10-09 on the freshly released 1.0.0: isolated install @tt-a1i/archify-dsh@1.0.0 — China mirror on the first try, friction=none, resolved.installed 1.0.0; zero deps, no install scripts; archify-skill-filesystem row present in the composed config (370-line dump); archify doctor all-ok on Node 26; installed-copy CLI: render architecture example at showcase quality → 762,310-byte standalone HTML, then archify check 9/9 artifact checks pass. Earlier verification 2026-08-16 was the skill's own headless 9/9 showcase validation. Upstream moved 0.1.0 → 1.0.0; the row now pins the re-verified 1.0.0) |
2026-10-09 | 1.0.0 |
| dsh-finance | Money math toolbox: fixed-rate loan payment with amortization schedule and extra-payment impact (loan_payment), compound growth projection with monthly contributions and any compounding frequency (compound_growth), nominal ↔ effective annual rate conversion incl. continuous (rate_convert), NPV/IRR/payback cash-flow analysis with explicit no-root/multiple-root reporting (cashflow_analysis), retirement withdrawal planning — time-to-exhaustion + sustainable withdrawal with lasts_horizon verdict (retirement_plan), goal-based saving — months to a target or the contribution a deadline requires, with the deadline payment rounded up to the cent and the projection simulated from it, plus an on_track verdict and an honest unreachable instead of an invented month count (savings_goal), inflation-adjusted purchasing power — future cost, present value, and with a nominal return the exact Fisher real return plus nominal/real future values side by side, deflation and fractional horizons included (inflation_adjust), and multi-debt payoff planning — minimums first, the leftover budget on one target debt at a time, with both avalanche (highest rate first) and snowball (smallest balance first) simulated in full so the cheaper ordering, the interest saved and the order balances actually clear in are numbers rather than slogans, and a budget that never clears reported honestly instead of an invented month count (debt_payoff) — zero runtime dependencies, pure arithmetic, headline values verified against published anchors (Excel IRR example, mortgage tables) and an independent Python oracle that ships with the repo (test/oracle/anchors.py, eight sections + --check self-test; every test file carries an ORACLE: provenance marker) |
dsh plugin --profile web add github:TYEclipse/dsh-finance#v0.4.0 |
✅ active | ✅ | ✅ e2e (isolated install #v0.4.0, friction=none, resolved 0.4.0; installed-copy anchor replay — debt_payoff two cards 5000@22% + 2000@12% on 600/mo: avalanche 13 months, paid 7739.37, interest 739.37, card A clearing month 11 and card B month 13; snowball 14 months / 895.70 → avalanche saves 156.33 and one month; a 10/mo budget on a 24% card reported as never clearing with no invented month count; regressions loan_payment 1432.25 / 215610, savings_goal 65 months, inflation_adjust real 3.414634%, plus the 0.2.x/0.3.x suites; 133 tests, coverage 92.67%, oracle --check 51 anchors green) |
2026-10-13 | b4fa073 |
| dsh-ipcalc | IP & subnet math toolbox: full IPv4 subnet layouts (ipv4_subnet: network/broadcast/mask/hosts + IANA classes, RFC 3021 /31), minimal covering CIDR aggregation (ipv4_summarize), equal subnet splitting by part count or target prefix (ipv4_split: host-bit masking, 256-subnet cap), VLSM allocation from host counts (ipv4_allocate: smallest prefix that fits each request, placement order, leftover free blocks and waste, largest-first or input order, optional RFC 3021 /31 and /32 shortcuts), pool subtraction with the surviving free space (ipv4_exclude: minimal free CIDR list, exact free address count, per-entry removal counts, exclusions outside the pool reported rather than clipped), arbitrary address ranges turned into minimal exact CIDR lists (ipv4_range: the inverse of summarizing), IPv4/IPv6 parsing with RFC 5952 normalization and embedded-IPv4 recognition (ip_parse), IPv6 subnet layouts with 128-bit BigInt math and exact decimal-string address counts (ipv6_subnet, RFC 6164 /127), and CIDR membership tests for bare IPv4/IPv6 addresses with mixed-version rejection (ip_match) — zero runtime dependencies, pure local math, no network I/O | dsh plugin --profile web add github:TYEclipse/dsh-ipcalc#v0.4.0 |
✅ active | ✅ | ✅ e2e (R70: isolated install v0.4.0, mirror friction=none, resolved.installed 0.4.0; installed-copy execution of the published dist — ipv4_allocate 10.0.0.0/16 hosts [100,50,20,20,5] → 5 subnets, 264 of 65536 addresses used, 69 wasted, 12 free blocks; point-to-point run 1 host → /32 and 2 hosts → /31; capacity error reported as "requests need 384 addresses but 10.0.0.0/24 only has 256"; ipv4_exclude 10.0.0.0/16 minus 10.0.0.0/24 and 10.0.8.0/22 → 8 free blocks, 64256 addresses, 1280 removed; regressions ipv4_subnet 10.10.10.10/255.255.255.248 → 10.10.10.8/29 and ipv6_subnet /64 exact counts; 224 tests green, coverage 96.44%, oracle test/oracle/anchors.py with --check) | 2026-10-15 | 111c80e |
| dsh-geodesy | Geodesic math toolbox: great-circle distance with bearings and compass direction (geo_distance), initial/final bearings plus great-circle midpoint (geo_bearing), direct-problem destination point with round-trip check (geo_destination), decimal/DMS coordinate parsing (coord_parse), rhumb-line constant-heading distance & bearing (geo_rhumb), great-circle path intersection with antipodal crossing (geo_intersection), spherical polygon area via spherical excess (geo_area), off-track distance to a great-circle path — signed cross-track + along-track, perpendicular foot, distance to the segment (geo_cross_track), inside/outside test for a spherical polygon reporting both sides of the boundary with the containing region's area (geo_point_in_polygon), multi-leg route totals with per-leg heading and running total plus detour vs the straight line (geo_path), and spherical-cap geometry — exact area, boundary-circle length, pole/antimeridian-aware lat/lon box, distance-based containment (geo_circle) — zero runtime dependencies, pure trigonometry on the IUGG mean Earth radius, configurable radiusKm | dsh plugin --profile web add github:TYEclipse/dsh-geodesy#v0.4.0 | ✅ active | ✅ zero deps, no network | ✅ e2e (R72: isolated install #v0.4.0 friction=none, resolved 0.4.0; 11 tools on the installed copy; published-dist execution of the new tools — route totals, zero-length leg reported without a heading, and a 300 km cap with the pole and antimeridian box cases; older anchors unchanged: geo_distance 1067.311645 km, cross-track 111.19508 km, octant area 63758235.121609 km², rhumb 7076.411574 km; 223 tests, coverage 92.09%, all anchors in one committed oracle test/oracle/anchors.py with a --check self-check) | 2026-10-17 | 7b3705d |
| dsh-checkdigit | Check-digit mathematics toolbox: generate, validate, repair and auto-detect check digits for 17 schemes — Luhn (cards/IMEI), Verhoeff, Damm, ISBN-10 (mod-11, X) / ISBN-13, EAN-8/13, UPC-A, GTIN-14/SSCC-18, ISSN (ISO 3297, X), ISIN (ISO 6166), CUSIP (ANSI X9.6), SEDOL (7 chars, weights 1,3,1,7,3,9, letters A=10…Z=35, vowels never issued; digit-leading codes are old-style and must be all digits), IBAN (ISO 13616, 75+ country BBAN table), CAS Registry Number (position-weighted mod 10), ABA routing number (3-7-1 weighted mod 10) and NPI (US provider id: Luhn over the constant 80840 prefix, entity-type first digit 1 or 2) — plus ISBN-10 ⇄ ISBN-13 conversion (978-prefix semantics, hyphen-group preservation), a single-edit repair search (checkdigit_repair: corrected check character, swapped adjacent pair or one mistyped payload character, every candidate re-validated by the scheme itself) and a batch validator (checkdigit_batch: 1–50 values in one call, per-row scheme/validity plus valid/invalid/unrecognized counts and a per-scheme breakdown; empty or oversized lists error out instead of truncating) — zero runtime dependencies, integer arithmetic only, separators ignored on input, anchors reproducible from the in-repo oracle | dsh plugin --profile web add github:TYEclipse/dsh-checkdigit#v0.4.0 |
✅ active | ✅ | ✅ e2e (isolated install #v0.4.0 friction=none, resolved 0.4.0; published artifact executed: 6 tools registered, sedol B15KXQ → B15KXQ8, sedol B15KXQ7 → expected 8, npi 1245319599 valid, batch auto-detect 8 values → 4 valid / 3 invalid / 1 unrecognized with luhn×2 sedol×2 ean13×1 iban×1 isbn10×1 unknown×1, sedol repair 19 candidates, scheme count 17, v0.3.x anchors (luhn 79927398714 expected 3, IBAN GB82…5432 formatted) unregressed; --dump-config layer checkdigit at 364 lines) |
2026-10-16 | e17c8d6 |
| dsh-musictheory | Music theory math toolbox: parse any note name into MIDI/octave/pitch class/exact 12-TET frequency with enharmonic spellings (note_info), frequency → nearest note with cents deviation (freq_to_note), correctly spelled chords for 26 qualities (chord_build — G# major is G# B# D#, Cdim7 is C Eb Gb Bbb), correctly spelled scales for 17 types (scale_generate — F# major has E#), interval engine (interval_build — G# + M3 = B#; interval_info — C→F# is an A4, C→Gb a d5, compound intervals), and scale harmonization (scale_harmonize — C major → I ii iii IV V vi vii°, sevenths: true → Imaj7 ii7 iii7 IVmaj7 V7 vi7 viiø7), spelling-aware transposition of 1-16 notes through the letter ladder (transpose — Bb3 G3 D4 up a M2 = C4 A3 E4, G#4 up a M3 = B#4, F#4 down a P4 = C#4; aliases tritone/octave/whole_tone), and chord identification by pitch-class set with inversions, slash notation and omitted-tone voicings (chord_identify — E G C = Cmaj/E first inversion, C E G A = both C6 and Am7/C, C Eb Gb Bbb = all four dim7 rotations, C E Bb D = C9 missing the fifth, a chord written on B# stays on B#) — zero runtime dependencies, pure arithmetic, configurable A4 reference pitch, and scale identification from played notes (scale_identify — C D E F G A B = C major plus A natural minor and the other modes of the same pitch classes; C D E G A = both C major and A minor pentatonic; C# D# E# F# G# A# B# stays C# major, never Db major; A B C D E F G# = A harmonic minor only; when nothing matches exactly it falls back to containing scales with the missing degrees listed, C E G = C major pentatonic missing D A) | dsh plugin --profile web add github:TYEclipse/dsh-musictheory#v0.4.0 |
✅ active | ✅ | ✅ e2e (isolated install v0.4.0 — friction=none, mirror; resolved.installed 0.4.0; wired into profile bundles; 10 tools registered; installed-copy execution: C major set -> C major total=7, C# major spelling preserved (7 sharps), pentatonic pair C/A minor, A harmonic minor unique, contains fallback C major pentatonic missing D/A, chord_identify + transpose regressions intact; 136 tests, coverage 91.86%) | 2026-10-18 | b8c3757 |
| dsh-chem | Chemistry math toolbox: chemical formula parsing with nested parentheses, hydrates (CuSO4·5H2O), ionic charges (Fe3+/SO4^2-, documented disambiguation rule) and IUPAC molar mass with per-element breakdown (formula_mass), mass/mole/particle conversions with Avogadro constant (mass_moles, 6 modes), solution concentration math — molarity, preparation mass, C1V1=C2V2 dilution, percent w/v·v/v·mass (solution), pH/pOH/[H+]/[OH-] + Henderson–Hasselbalch buffer math at 25 °C (ph), equation balancing with exact BigInt rational arithmetic — smallest integer coefficients, charge conservation as an extra constraint when a species is charged, hydrate water included, smallest-sum solution plus unique: false when several independent balances exist, honest "cannot balance" instead of dropping species (balance_equation), and ideal-gas arithmetic with fixed units atm/L/mol/K plus kPa·mmHg·mL·°C conversions — PV=nRT solved for the missing quantity, molar volume (22.413969545014133 L/mol at STP), density ρ=P·M/(R·T) and molar mass from a measured density (gas_law) — zero runtime dependencies, pure arithmetic over the 118-element IUPAC table, anchors from an independent Python oracle (own periodic table, own tokenizer, own Fraction-based balancer) cross-validated against published textbook values Also stoichiometry: limiting-reagent arithmetic from an equation plus each reactant amount (mol or g) — extent of reaction, which reactant runs out first, product masses, leftovers, and theoretical / percent yield; every reactant needs an amount (no silent “excess” assumption) and co-limiting amounts are reported as such. |
dsh plugin --profile web add github:TYEclipse/dsh-chem#v0.3.0 | ✅ active | Zero runtime dependencies, no network, no telemetry, no install scripts — pure arithmetic over a bundled IUPAC table and BigInt rational balancing. | 150 tests / 90.35% coverage. Isolated install of github:TYEclipse/dsh-chem#v0.3.0: mirror first try friction=none, resolved.installed = 0.3.0, wired: true, chem layer in a 353-line composed config; installed copy registered all seven tools and reproduced the new anchors (Zn + 2 HCl limiting HCl → H2 0.2016 g) plus the v0.2.x anchors (permanganate 1/5/8/1/5/4, molar volume 22.413969545014133). Value oracle gained a --check self-verify against published molar masses, textbook coefficients, R, molar volume, the pH definition and mass conservation over every stoichiometry case (it caught a wrong product row while being written). Numbers 136 → 149 tests, coverage 88.89% → 90.35%. |
2026-10-19 | 262a2cf5818c8586ba8afb8fc6d2f2d02a4478c6 |
| dsh-probstat | Probability & statistical inference math toolbox: distribution calculator for six distributions — normal, binomial, poisson, exponential, uniform, geometric (pdf/cdf/survival/quantile/stats) (dist_calc), standard-normal z-table math — z ↔ probability/percentile, two-sided p-values, interval probabilities (z_score), confidence intervals — mean with z or Student-t critical values, proportion via Wilson score (confidence_interval), and event-probability identities — union/intersection/conditional/Bayes/complement/at-least-one (event_probability), one-sample hypothesis tests — mean with known sigma, mean with unknown sigma (Student-t, df = n − 1) and a single proportion against p0, reporting the statistic, all three p-values, the tail-specific critical value and the alpha decision, with a warning when the normal approximation is shaky (hypothesis_test), and sample-size planning for a target margin of error — mean closed form, proportion via Wald or the smallest Wilson-consistent n (sample_size) — zero runtime dependencies, pure arithmetic, normal quantile via Acklam (rel. err < 1.15e-9), Student-t cross-checked against published t-table values, anchors from an independent Python oracle (test/oracle/anchors.py), and two-sample hypothesis tests — difference of means with known sigmas (z), with unknown sigmas under Welch (unequal variances, fractional Welch–Satterthwaite df reported unrounded) or pooled (equal variances, df = n1 + n2 - 2) and a difference of two proportions (pooled normal approximation), reporting both estimates, the difference, the standard error, the statistic, df, all three p-values and the alpha decision, with a warning when the smallest expected cell is under 5 (two_sample_test), and two-sample hypothesis tests — difference of means with known sigmas (z), with unknown sigmas under Welch (unequal variances, fractional Welch–Satterthwaite df reported unrounded) or pooled (equal variances, df = n1 + n2 - 2) and a difference of two proportions (pooled normal approximation), reporting both estimates, the difference, the standard error, the statistic, df, all three p-values and the alpha decision, with a warning when the smallest expected cell is under 5 (two_sample_test) | dsh plugin --profile web add github:TYEclipse/dsh-probstat#v0.3.0 | ✅ active | ✅ | ✅ e2e (isolated install of github:TYEclipse/dsh-probstat#v0.3.0 — mirror first try, friction=none, resolved 0.3.0, wired into profile bundles; composed config 363 lines with the probstat layer; installed-copy execution of the published dist/ (not the source tree): 7 tools registered, two_sample_test anchors all match the in-repo oracle — mean_welch 5.2/4.6 sd 1.1/0.9 n 12/15 → t 1.524821541023691, df 21.166824916874845, two-sided p 0.1421069, critical 2.0786163; mean_pooled same data → pooledVariance 0.986, df 25, t 1.5601529; mean_z 102/98 sigma 10/12 n 40/50 → z 1.7245225, p 0.0846135, no reject; proportion 45/100 vs 32/90 → pooled p 0.4052632, z 1.3240058, one-sided p 0.0927506; v0.2.0 anchors not regressed: hypothesis_test z 0.8, sample_size n 35, normal cdf(1.96) 0.9750022) |
2026-10-21 | 66bcd3c |
| dsh-linalg | Linear algebra math toolbox: matrix multiplication with dimension checking (matrix_multiply), single-operation matrix math — transpose / determinant / inverse / trace / reduced row echelon form / rank / integer powers (matrix_compute), matrix factorizations (matrix_decompose: LU with partial pivoting P·A = L·U and singular matrices flagged, thin QR A = Q·R with a positive R diagonal, Cholesky A = L·Lᵀ for symmetric positive definite input — each returning the reconstruction residual it actually measured), symmetric eigen-decomposition with descending eigenvalues, unit eigenvectors signed so the leading non-zero component is positive and a measured max|A·v − λ·v| residual (matrix_eigen), least squares for overdetermined systems — the minimizer of ||A·x − b||, the minimum residual norm and max|Aᵀ(A·x − b)|, rank-deficient or underdetermined input rejected instead of picking one arbitrary minimizer (least_squares), linear system solver Ax=b with unique / infinite (particular solution + nullspace basis + free-variable count) / no-solution classification (solve_linear), and vector operations — dot / cross (3D) / norm / projection / angle in degrees (vector_ops) — zero runtime dependencies, pure local arithmetic, Gaussian elimination with partial pivoting, outputs rounded to 10 decimals, singular and inconsistent systems fail cleanly with explicit messages, anchors from an independent exact-arithmetic (fractions) oracle | dsh plugin --profile web add github:TYEclipse/dsh-linalg#v0.3.0 | ✅ active | ✅ | ✅ e2e (R76 reverification of v0.3.0: isolated install of github:TYEclipse/dsh-linalg#v0.3.0 via mirror, resolved 0.3.0, wired, linalg layer in a 363-line composed config; installed-copy run of the published dist passed 9/9 anchors — matrix_decompose lu on [[2,1,1],[4,-6,0],[-2,7,2]] → p [1,0,2], det −16, residual 0, L/U as documented; qr on [[3,0],[4,5]] → Q [[0.6,-0.8],[0.8,0.6]], R [[5,4],[0,3]]; cholesky on [[4,12,-16],[12,37,-43],[-16,-43,98]] → L [[2,0,0],[6,1,0],[-8,5,3]], det 36; indefinite input rejected with the pivot −3; least_squares fit → x (0.6666666667, 0.5), residual norm 0.4082482905, normal-equation residual 0; rank-deficient input rejected with rank 1; v0.2.0/v0.1.x anchors unchanged — det −1, eigen 3/1, solve (2.2,1.2), cross (−3,6,−3); oracle test/oracle/anchors.py section D re-derives every new anchor independently — exact fraction elimination for LU/Cholesky/least squares plus classical Gram–Schmidt for QR, with a --check that asserts L·U = P·A, QᵀQ = I, L·Lᵀ = A and residual orthogonality) — earlier R58 e2e: installed copy 22/22 anchors; non-symmetric and non-square input fail cleanly |
2026-10-22 | e70472b |
| dsh-complex | Complex-number math toolbox: parse rectangular/polar strings into the full identity (complex_parse — "3+4i"/"5∠53.13°", modulus, argument rad & deg, conjugate), one-operation arithmetic — add/subtract/multiply/divide/conjugate/reciprocal/integer power via De Moivre plus the general complex power a^b = exp(b·log a) with both operands complex and honest 0^0 / 0^non-positive rejections (i^i, 2^(1+i), (-1)^0.5) (complex_calc), polar ↔ rectangular conversion (complex_convert), principal values of exp/log/sin/cos/tan/sinh/cosh/sqrt plus the six inverses asin/acos/atan/asinh/acosh/atanh with each branch cut reported in the note (complex_functions), complete n-th root sets listed from the principal root (complex_roots, n ≤ 64), a solver for quadratics with complex coefficients — discriminant, both roots, the Vieta invariants −b/a and c/a, each root's residual, linear degeneration and an honest every-z / no-solution (complex_quadratic), and polynomials with complex coefficients, highest power first (complex_poly) — Horner evaluation of p(z) and p'(z), and every root up to degree 12 by Durand–Kerner with each root's residual and a real converged flag, multiple roots reported once with their multiplicity instead of near-duplicate numbers (z³-6z²+11z-6 → 1, 2, 3; (z-1)² → 1 ×2) — zero runtime dependencies, closed-form formulas on the principal branch (C99 continuation exactly on the cuts), output rounded at the boundary only, anchors from an in-repo independent Python oracle (cmath for functions, closed forms + Vieta invariants for roots) | dsh plugin --profile web add github:TYEclipse/dsh-complex#v0.3.0 | ✅ active | ✅ zero deps, no network | ✅ e2e (isolated install #v0.3.0 friction=none, resolved 0.3.0, wired; installed-copy execution: 7 tools, p(1+i) of z²-1 = -1+2i with p' 2+2i, z⁴-1 → -1, -i, i, 1 with max residual 0, (z-1)² → single root 1 with multiplicity 2 and distinct 1/2, (z-1)(z-2)(z-3) → 1, 2, 3, z²+iz+1 → golden-ratio pair 0.6180339887i and -1.6180339887i, degree 13 rejected with the reason; older anchors not regressed — i^i 0.2078795764, asin(2) 1.5707963268+1.3169578969i, 1^(1/4) = 1, i, -1, -i, z²-2z+2 → 1±i; 207 tests, coverage 94.20%; oracle section E self-check green) |
2026-10-23 | bcea9fa |
| dsh-boolean | Boolean algebra toolbox (zero runtime dependencies, pure local computation): truth_table (every assignment row up to 8 variables with minterm/maxterm summary and canonical DNF/CNF), logic_eval (one complete assignment, missing variables reported instead of defaulted), logic_equiv (all rows of the combined table, differing-row count plus a concrete counterexample), logic_convert (nnf / dnf / cnf / nand / nor), logic_minimize (Quine–McCluskey to a minimum sum of products: prime implicants, essential ones, minimum term count with ties broken by literals then reading order, optional dontCare minterms, and the exact cover terms in answer order) and v0.3.0's logic_kmap (Karnaugh map over 1–4 variables on Gray-coded axes, cells drawn as 1 / x / 0, every term of the minimal cover mapped back to the row/col/minterm cells it circles, each group flagged essential and flagged when it wraps around an edge) | dsh plugin --profile web add github:TYEclipse/dsh-boolean#v0.3.0 | ✅ active | ✅ zero runtime dependencies, no install scripts, no native binaries, no telemetry and no network access at all — every tool is local arithmetic over the parsed expression; no credential or file access | ✅ e2e (R78: isolated install of github:TYEclipse/dsh-boolean#v0.3.0, friction=none, resolved 0.3.0, wired; 363-line composed config with the boolean layer; installed-copy execution of the published dist — 6 tools registered, logic_kmap on a don't-care case returns minimal a over 4 cells, and the v0.2.0 anchors do not regress (majority a & b | a & c | b & c with coverTerms, three-way XOR minterms 1,2,4,7, a -> b false at a=1,b=0, De Morgan equivalence over 4 rows); 168 tests, coverage 96.95%, oracle test/oracle/anchors.py with a --check self-test that lays the K-map out independently in Python. NOT run: LLM-driven headless session (@deepseek-ai/dsh-headless cannot be installed on this host)) | 2026-10-24 | 0810b38 |
| MemOS Cloud for DSH | Cloud lifecycle-memory plugin: pre-step recall injection and post-turn memory sync backed by the MemOS Cloud API (memos.memtensor.cn); no tools registered — agent/pre-step + session/event hooks with graceful degradation when no API key is configured; MIT | dsh plugin --profile web add @memtensor/memos-cloud-dsh-plugin@0.1.0 |
✅ | peerDependencies pinned to ^0.1.0-rc.6 || ^0.1.2-rc.1, so dsh 0.2.0-rc.2 rejects the install on both the China mirror and npmjs (exact-version exemption not granted). Previous verification 2026-08-20 (on the 0.1.x runtime): headless turn completed with the plugin mounted and no-credential degradation verified. Needs an upstream release compatible with dsh 0.2.x; failure 1/3 before the row is removed from the table |
2026-10-09 | 0.1.0 | |
| PicGo Upload for DSH | Image & file uploading to the user's configured image host (PicGo Cloud, GitHub, S3, …) via the PicGo engine: picgo_upload tool + /picgo command + bundled picgo-upload skill; prefers the running PicGo desktop app (local server, 127.0.0.1:36677) and falls back to the in-process PicGo library reading ~/.picgo/config.json; MIT |
dsh plugin --profile web add @picgo/dsh-plugin@0.2.0 |
✅ active | ✅ | ✅ e2e (R67 re-verify of the expired row: upstream latest is still 0.2.0 so no re-pin; isolated install friction=none, resolved 0.2.0; structure — dsh.bundle.patch → cordis.patch.yml, lib/, skills/picgo-upload/SKILL.md all present; boot/compose check — the picgo layer mounts in --dump-config (367-line dump); earlier evidence stands: picgo-upload skill surfaced in a headless session, signed-out degradation relays /picgo login with no hang and empty input is rejected) |
2026-10-12 | 0.2.0 |
| WeKnora for DSH | Tencent WeKnora knowledge-base plugin: four tools — list the credential's knowledge bases (weknora_list_knowledge_bases), hybrid vector+keyword retrieval returning passages verbatim with rank/score/chunk metadata plus by-name document matches (weknora_search), reassembled document reading with paging and generated summaries (weknora_read_document), and WeKnora-composed answers with citations (weknora_ask) — env-var configuration (WEKNORA_BASE_URL / WEKNORA_API_KEY / WEKNORA_KNOWLEDGE_BASE_IDS), load-time config validation, tool prefixing for two deployments side by side; zero runtime dependencies, MIT |
dsh plugin --profile web add @wxg-prc-cpg/dsh-weknora@0.1.0 |
✅ active | ✅ | ✅ e2e (isolated install; 4-tool registration verified; list / search / read_document executed against a mock deployment — ranked passages with scores, named-document enrichment, ordered chunk assembly; unreachable deployment errors cleanly and fast; headless mount session 17×23=391) | 2026-10-16 | 0.1.0 |
| dsh-web | DSH Web GUI plugin family (npm aggregate @linxin666/dsh-web-all of 19 family packages + external dsh-better-sidebar): task board with host-side cron execution, mobile/PC remote access via device pairing, SSH panel (terminal / transfer / tunnels), usage stats, model capability profiles, session archive with auto policies, git graph, preset / skin / market / community browsers, pet, i18n — mounted as 20 namespaced web-ui-* rows (counted in a 1330-line composed config at 0.4.6); five opt-in rows (ssh / describe-image / liangshen / skill-explorer / doctor) ship disabled by default; Apache-2.0 |
dsh plugin --profile web add @linxin666/dsh-web-all@0.4.6 | ✅ active | ✅ (anon. daily install heartbeat — code-confirmed at 0.4.6 and documented; package name + version + a localStorage UUID, no conversation data) | ✅ e2e (R72 reverification: stale row 31 d → upstream had moved 0.3.22 → 0.4.6, re-pinned; isolated install 0.4.6 via mirror, resolved 0.4.6, friction = allowBuilds for cloudflared/cpu-features/ssh2 (documented in the upstream 安装排障 section); 20 web-ui-* rows in a 1330-line composed config; boot smoke 401 → 303 + Set-Cookie → 200 with data-dsh-skin=blue-fantasy, skin-center client module served 200 / 268889 B with a matching module id; unverified: live SSH panel, host-side cron run, device pairing, market/community browsers) | 2026-10-17 | 3cd1849 |
| dsh-market | Visual plugin market inside DSH: browse/search the community catalog (2300+ plugins) with category filters and host-aware compatibility hints; one-click install (prefers repo-verified npm packages, then prebuilt GitHub Release tarballs, then source), per-plugin update checks, community themes/skins with live switching, favorites, backup & restore (readable JSON export / WebDAV / private GitHub Gist), hot enable/disable and load-order editing via the profile patch layer, a plugin diagnostics page, and a capability-gated public update API v1 — MIT | dsh plugin --profile web add dshmarket@1.66.37 |
✅ active | ✅ (no telemetry — "never phones home"; documented outbound: catalog + GitHub content routes, gh-proxy/ghfast acceleration fallbacks; comments contact giscus.app/GitHub only when opened; installs restricted to the curated registry; build scripts stay blocked by default; same-origin install endpoint) | ✅ e2e (re-verified 2026-10-18 from 1.47.0 → 1.66.37 — isolated install dshmarket@1.66.37, prebuilt npm, friction=none on mirror, resolved.installed 1.66.37; dsh-market layer in the 369-line composed config; web boot smoke 401 → 303 + Set-Cookie → 200; live /dsh-market/api/v1/capabilities → 200 JSON, marketVersion 1.66.37, schema dsh-market/update-api/v1, features check/update/progress/rollback true, restart false (operator-managed). Not verified: in-page client module — no dsh-market entry in the served /plugins/?? modules bundle under host 0.2.1-rc.2, so the rendered market UI itself was not inspected; client-side install/theme flows untested) |
2026-10-18 | 8470948 |
| dsh-honcho | Honcho memory for DSH — persistent cross-session memory that survives context resets: injects your profile, this project's session summary and Honcho's relevant conclusions at session start, captures every user/assistant turn in the background (debounced, flushed at turn boundaries, before compaction and on shutdown) with best-effort secret redaction, and registers three tools — honcho_search (raw messages plus derived conclusions), honcho_chat (judgement questions over everything Honcho knows) and honcho_remember (durable facts / preferences / decisions); configured through the shared ~/.honcho/config.json contract (workspace, peer name, baseUrl, global kill switch), shared with the sibling claude-honcho / codex-honcho integrations — MIT |
dsh plugin --profile web add @honcho-ai/dsh-honcho |
api.honcho.dev by default (self-hostable via baseUrl / HONCHO_BASE_URL); secrets are regex-redacted before upload and the redactor is documented as best-effort, so novel secret formats can pass through; also reads/writes ~/.honcho/config.json and shells out to git for repo metadata; no telemetry or analytics SDKs found |
repository: plastic-labs/dsh-honcho. (2) No published version installs on dsh 0.2.1-rc.2: 0.1.0/0.1.1 pin 0.1.2-alpha.3 of the seven host packages and 0.1.2 requires <=0.2.0-rc.1; mirror and upstream both reject at the peer gate (forcing it would need dsh plugin allow-version --accept-risk, not a normal install path). Previous verification (2026-09-18, 0.1.0 on host 0.1.5-rc.2) passed: prebuilt tarball, honcho layer composed, graceful no-credential degradation (Memory is off) and the turn still completed; the memory round-trip was never exercised (needs a Honcho key or a self-hosted instance). Failure count 1/3 — re-check when the repo is back and the peer range covers the current host. |
2026-10-19 | e3adb1c61ee84415629a49fe12286bcd3603116b | |
| dsh-ouroboros | Ouroboros (spec-first AI dev workflow engine: Socratic interview → Seed spec → execute → evaluate → evolve) mounted into DSH as native tools by a config-only bundle row that spawns ouroboros mcp serve over stdio — 36 tools registered (ouroboros_interview / ouroboros_pm_interview / ouroboros_generate_seed / ouroboros_execute_seed / ouroboros_auto / ouroboros_evaluate / ouroboros_evolve_step / ouroboros_qa / ouroboros_ralph …) so "ooo interview " or "ooo auto " in chat resolves to the matching tool on its own; ouroboros_auto gets a 30-minute MCP timeout, the execution step defaults to the host model (OUROBOROS_AGENT_RUNTIME=host) with claude-cli / codex / opencode selectable, and failOnStartupError: false keeps DSH booting on machines without uv/Ouroboros — MIT |
dsh plugin --profile web add "github:Q00/ouroboros#dce77a2&path:integrations/dsh-plugin" | ✅ active | us.i.posthog.com via the bundled ouroboros-ai Python package): closed command/status dimensions, runtime backend, version, OS and failure-reason codes only — never code, prompts, seed content, file paths or arguments; identity is a random UUID; opt out with DO_NOT_TRACK=1, OUROBOROS_TELEMETRY=0 or telemetry.enabled: false in ~/.ouroboros/config.yaml (contract in the repo's TELEMETRY.md). The row also forwards DEEPSEEK_API_KEY + ANTHROPIC_API_KEY into the spawned child (explicit short allowlist after dsh's credential scrub), executes a third-party PyPI distribution at runtime, and keeps its project state in the working directory it is launched from |
✅ e2e (isolated install of github:Q00/ouroboros#main&path:integrations/dsh-plugin — whole-repo clone ~3m50s, +1 package, no build step; dsh-ouroboros layer with the mcp-ouroboros row present in the composed config; LLM-driven headless turn on host 0.1.5-rc.2 — 36 tools registered from ouroboros-ai 0.54.4 and a real ouroboros_project_status call returned its payload, clean shutdown, rc=0. Needs Python ≥3.12 for uvx, which does not auto-download it: on a 3.11 host the row soft-fails silently and no ouroboros tools appear — remedy uv python install 3.12 (verified here) or UV_PYTHON=3.12. Installs were unpinned (#main) until R74; now pinned to a commit, since no tag or npm package exists. Full interview → seed → execute → evaluate workflow not exercised) | R74 re-verify 2026-10-20 at commit dce77a2 (friction=none, resolved 0.1.0, wired): layer mcp-ouroboros present in a 384-line --dump-config; uvx --from 'ouroboros-ai[mcp]' --with 'mcp==2.0.0' ouroboros mcp serve served MCP over stdio — initialize OK (server ouroboros-mcp 0.59.0, was 0.54.4) and tools/list returned 36 tools (the start_* variants are new upstream names; every tool named in this row still exists). New startup gate found: the server now refuses to boot when no executable runtime is configured ("cannot host the 'claude' SDK runtime") — the row's default OUROBOROS_AGENT_RUNTIME=host covers it, but a manual ouroboros mcp serve without that env var exits immediately. Not re-run: LLM-driven headless turn and the full interview -> seed -> execute workflow |
2026-10-20 | dce77a2 |
| ModLens | Vision bridge for text-only models: registers one modlens_read_image tool (name configurable) and auto-discovers every provider route that carries an eligible text-only DeepSeek / GLM / MiMo model, adding a "(modlens vision)" wrapped entry per route so a pasted image is turned into structured JSON evidence at request time — summary, full transcription, reading-order layout regions, entities and relations, and an explicit uncertainty list instead of invented values; the engine is the CLI shipped inside the same package (dist/main.js, spawned from the plugin and version-locked to it), providers / keys / failover / cooldown / reuse grants live in a shared ~/.modlens/config.json, modlens doctor reports local routing and providers offline without spending quota; can reuse existing logins of locally installed agents (Claude Code, Codex, OpenCode, Pi, Kimi CLI) and ships a zero-config start — MIT; from 3.27.0 the pasted-image evidence carries an attachment-id: sha256:… line and modlens_read_image accepts that id as its path, so a model can re-read a pasted image with a new focus from the attachment store (only images this plugin read in the session resolve; 256 most recent) — MIT |
dsh plugin --profile web add @liustack/modlens@3.27.1 | ✅ active | prepublishOnly release hook), but it is a vision bridge by design: the image leaves the machine to whichever third-party provider is selected (Antigravity CLI built-in default, or Gemini API / OpenAI / Anthropic / agent CLIs with user-supplied keys in ~/.modlens/config.json), and it can reuse logins of other locally installed agents — on the verification host modlens doctor printed decisions: claude granted, codex not asked, opencode not asked, pi not asked, grok not asked, i.e. the Claude Code reuse grant is on by default; it spawns the bundled CLI as a child process, recovers pastes as 0600 files in fresh 0700 temp dirs and deletes the throwaway working copy after the read, and redacts keys from errors. Its own docs/security.md is unusually explicit (image content treated as untrusted input, --dangerously-skip-permissions for agy, --allowedTools Read for claude-cli, kimi-cli run only when named) and states plainly that this is exposure reduction, not a sandbox |
✅ re-verified at 3.27.1 (2026-10-21, stale-row queue): upstream moved 3.26.2 → 3.27.1 (3.26.3 CJK chunk-decode fix, 3.26.4-3.26.6 dsh settings/route-discovery fixes, 3.26.5 config-card retry, 3.27.0 attachment-id re-read, 3.27.1 npm bin packaging warning only) — isolated install of the prebuilt npm tarball, mirror first try, friction=none, resolved 3.27.1, wired; modlens layer present in the composed config (363 lines); modlens doctor ran clean and offline on the host (Node v26.8.1 ≥ 22.19, node:sqlite available, guard verdict allow, reuse decisions claude granted); dependencies are commander + undici only, no install scripts beyond prepublishOnly. NOT re-exercised: the actual vision read (this host has no provider configured — image → evidence still never produced here), the 3.27.0 attachment-id re-read path (needs a live session with an image this plugin already read), and the config card in the browser. Original 3.26.2 verification (LLM-driven headless turn: modlens_read_image registered and invoked, bundled CLI spawned) stands. |
2026-10-21 | aa108d1 |
| dsh-better-sidebar | Sidebar workbench for the DSH web GUI: registers its tab types through DSH's native right-sidebar API (ctx.sidebarRightTabs / ctx.sidebarRight, dsh-resource://file/… opens) and keeps a bottom workbench — lazy file explorer, CodeMirror editor, inline previews (Markdown with Mermaid and DOMPurify-sanitised README-level HTML, HTML, PDF), multi-tab embedded browser (sandboxed iframe; HTTPS goes to the system browser by default), a real terminal (xterm.js + a runtime-resolved node-pty, reconnect replay, opt-in terminal_* tools for the model), a git workbench (real diffs, history, commit graph, stage/commit/restore — no push/pull/fetch) alongside a per-turn changed-file view, background-task and subagent pages, side chat threads, pinned terminals, session-isolated layout, declarative per-feature settings, and an opt-in sidebar_open tool — the same ctx.betterSidebar service is open to third-party plugins (registerTab / registerFileViewer / registerFileIcon), MIT |
dsh plugin --profile web add dsh-better-sidebar@0.28.0 | ✅ active | sandbox; the address bar rejects javascript:/data:/file: and loopback URLs by default; the sandbox can be switched off per feature in settings, with a warning) — upstream README documents the trust-fence and sandbox model; no telemetry or analytics SDK and no install-time callbacks (scanned the shipped bundles: the only posthog/sentry/mixpanel/amplitude/segment hits are English words in comments and vendored JSON-RPC type names; endpoint scan finds documentation URLs only), so outbound traffic is limited to URLs the user opens in the embedded browser tab and to the user's own git remotes |
✅ e2e (R76 reverification of the 31-day-stale row: upstream had moved 0.19.1 → 0.28.0, re-pinned; isolated install 0.28.0 via mirror, resolved 0.28.0, friction = none — the pnpm 11 node-pty approve-builds step that 0.19.1 needed is gone, node-pty is now runtime-resolved with an in-UI repair hint documented upstream; wired, better-sidebar row in a 366-line composed config; boot smoke 401 → 303 + Set-Cookie → 200 with data-dsh-skin; client module plugins/??dsh-better-sidebar/client.js 200 / 1 523 297 B and the descriptor's inject list matches package.json 5/5; host routes answer with validation (POST /sidebar/api/fs.tree → 400 missing sessionId) and the token/Host fence holds (foreign Host → 403). Note the R45 probe POST /sidebar/api/terminal.deps no longer exists — API methods are dotted names now (fs.tree, git.branch, changes.ops, …); unverified: interactive sidebar UI (file tree clicks, editor save, git stage/commit, terminal session with a real pty, side chat, background-task pages) — needs a browser-driven session on a host with node-pty) — earlier R45 e2e: 0.19.1 installed with the documented approve-builds step, terminal.deps → 200 |
2026-10-22 | 83faf70 |
| dsh-TUI | Interactive terminal interface for DeepSeek Harness — pixel-whale header, live work-status line (model, reasoning effort, tokens, TPS, cache-hit rate, git/session info), streaming thinking display, double-Esc time rewind, context progress bar, session management shared with /resume//home//bg (workspace registry persisted to ~/.dsh-tui, pinning, cross-terminal takeover rules), model hot-switching, session fork/compact/export, native subagents, vim input mode and full-screen draft editor, /settings toggles (terminal images, mermaid diagrams rendered to Unicode, whale idle animation), inline image preview via Kitty graphics / Sixel with text fallback, VS Code extension launch mode with editor-selection piping, and a self-updating launcher (dsh-tui / dst) — mounted as a pure plugin bundle patch over dsh-base (18 restated rows, no core patching; uninstall leaves nothing behind); MIT |
dsh plugin --profile web add @deepseek-harness-tui/dsh-tui@0.16.1 | ✅ active | DSH_TELEMETRY_MODE, restated explicitly in its own patch layer), and outbound traffic only happens on explicit user action: the launcher update subcommand / /update queries the npm registry and api.github.com for the latest release and verifies SHA256SUMS before installing a standalone package, and the balance feature calls api.deepseek.com/user/balance with the user's own DEEPSEEK_API_KEY; boot itself makes no call. Local capabilities are documented: /restart spawns a replacement process, it reads/writes ~/.dsh-tui (workspace registry, pins) and $DSH_HOME profile state, and update rewrites only its own launcher file + package.json |
✅ re-verified 2026-10-23 (stale row, 31 days): upstream had moved 0.10.2 → 0.16.1 — isolated install @deepseek-harness-tui/dsh-tui@0.16.1 friction=none, resolved 0.16.1, wired; composed config 599 rows with base rows patched by @deepseek-harness-tui/dsh-tui (its patch restates only the rows it owns and leaves sandbox/approval policy, tools and telemetry inherited unchanged from dsh-base); launcher runs — node bin/dsh-tui.js --version → '@deepseek-harness-tui/dsh-tui 0.16.1 (launcher)'; peer ranges explicitly include dsh-agent/dsh-web-app 0.2.1-rc.2 (matches host) and engines.node is ^22.19 || >=24. |
2026-10-23 | c7606fc |
| ReMe | Long-term memory for DSH from the ReMe memory kit (Apache-2.0, AgentScope): instead of dumping history into the prompt, the plugin injects long-term-memory guidance at session start (when to consult memory, treat retrieved memory as evidence rather than instructions) and registers one read-only tool — reme_search (query, optional limit 1–50, min_score) which returns ReMe's answer, 'No relevant memory found.', or an explicit 'ReMe search failed: …' instead of an invented answer; completed user/assistant turns are captured per session and submitted to ReMe auto_memory (default every 5 turns plus a shutdown flush; plugin context and tool results are excluded from capture so they cannot be laundered back into memory), and autoDreamEnabled runs a daily auto_dream pass (default 0 23 * * * in workspace timezone) that consolidates journal files into a deduplicated personal knowledge base; mounting is one isolated remeMemory runtime row, and the package also ships a web Status page (connectivity/version, Auto Memory pipeline, consolidation, component health, Journal and personal-KB browsers); every knob is exposed in DSH settings (endpoint, language en/zh, searchLimit, autoMemory*/autoDream* switches, dreamCron, timezone), and the plugin is a client — it needs a ReMe service (default endpoint http://127.0.0.1:2333, local-first). 0.1.2 targets the current host line (peer ranges ^0.1.7-rc.2 || ^0.2.0-rc.2 || ^0.2.1-alpha.2, verified on 0.2.1-rc.2) | dsh plugin --profile web add @agentscope-ai/reme-dsh-plugin@0.1.2 | ✅ active | ✅ e2e (R78 re-verification of the 30-day row, upstream 0.1.0 → 0.1.2; commit e478b680 is the last integrations/dsh change before the 0.1.2 publish — the repo has no CHANGELOG. Isolated install @agentscope-ai/reme-dsh-plugin@0.1.2: friction=none, and an improvement over the first verification — the package is now on the China mirror, so the old mandatory --registry=https://registry.npmjs.org flag is gone; resolved.installed 0.1.2, wired; the reme-memory-scope group row (isolate: remeMemory) with the nested reme-memory row is in a 608-line composed config; boot smoke 401 → 303 + Set-Cookie → 200 (38013-byte served page), the page's plugin descriptor serves @agentscope-ai/reme-dsh-plugin/client.js 200 / 113629 B and its inject list matches dsh.client.inject 6/6. NOT run: a real ReMe session (no deployment on this host, so reme_search and the auto-memory flush were not exercised; the 0.1.2 delta is host-RC support), Node-level import of dist/index.js (never settles outside the host runtime), LLM-driven installed-copy execution (@deepseek-ai/dsh-headless cannot be installed on this host), and the six status-page tabs at UI level) | 2026-10-24 | e478b680 | |
| dsh-whale-widget | DeepSeek balance pet for the DSH web GUI: a floating whale in the bottom-right corner that keeps an eye on the account balance, today's usage and peak/off-peak pricing, mounted as one bundle row; bubbles are fully configurable (click sequence of text / balance / today / peak-valley / images / weighted random statements), with per-line typography, drag-and-snap plus left-edge flip, custom roles / animations / sounds, per-turn cost readout and a hover quick-edit popover — and 32 built-in provider templates (DeepSeek, Moonshot CN + Intl, OpenRouter, SiliconFlow CN + Intl, StepFun, Novita, Ark, DashScope, Qianfan, GLM, Hunyuan, xAI, OpenAI, Gemini, Groq, Mistral, Together, Fireworks, Cerebras, DeepInfra, ModelScope, OpenCode Zen, custom models) so one widget can show whichever vendor you actually pay; today's usage is estimated from local session events rather than fetched from the cloud; code is MIT | dsh plugin --profile web add dsh-whale-widget@0.4.2 | ✅ active | Bearer only to that vendor's own balance/usage endpoint (32 built-in templates, each called only when configured as the current model; no third-party relay, no usage upload — "today's usage" comes from local session events); local state lives in $DSH_HOME/.dshw-*.json plus $DSH_HOME/whale-{roles,bubble-imgs,audio}/ for custom art and sound, and the source comments state that keys are not written into those files (they go to the host credential store); the update check shells out to a fixed literal npm view dsh-whale-widget version (no user input, no local data sent); the code is MIT while the assets/ artwork and audio are not MIT-covered (upstream PROVENANCE.md ships them as-is, no relicense, takedown on claim) |
✅ e2e (R79 re-verify of npm dsh-whale-widget@0.4.2 — China mirror on the first try, prebuilt, friction=none, resolved 0.4.2, wired=true; dsh-whale-widget row inside a 1440-line composed profile tree; web boot smoke 401 → 303 (+Set-Cookie) → 200 with the page referencing /dsh-whale/widget.js, which serves 200 at 1 142 585 bytes once authenticated (401 without the cookie — 0.4.2 put the asset behind the token, 0.3.11 served it publicly) and /dsh-whale/{balance,roles,size,about,last-turn}.json all 200, a foreign Host header getting 401; /dsh-whale/balance.json returned a real balance reading with balanceSource=apikey and version 0.4.2; tarball shasum 4616cb42…, install-tree lib/index.js sha256 9f7ec013…; not run: browser interaction (bubble sequences, hover quick edit, drag/snap, role-image upload), audio playback, a peak/off-peak transition window, and an LLM-driven headless session — @deepseek-ai/dsh-headless is not installable on this host, an environment limit rather than a candidate defect) |
2026-10-25 | 5247dd6813d6e4430728f39ccc63d43cda046022 |
| treg | Tool registry and credential-injecting proxy for agents ("OpenRouter, but for agent tools"): this bundle ships the packaged treg skill plus a token-gated MCP connector row. The skill — a 28 KB SKILL.md published through a ctx.skills provider implemented directly inside the package (plain hand-written ESM, no build step, no @deepseek-ai/* dependency, so a github: install needs no allowBuilds approval) — tells the agent when to reach for the catalog and how to call it by the task at hand, not by vendor: 3,600+ endpoints across 97 providers covering SEO/SERP data, keyword volume, backlinks and site authority, AI visibility, social profiles and trends, people/company enrichment, ad libraries, web data, and image/video/voice generation. The second row mounts @deepseek-ai/dsh-mcp-client against https://treg.to/mcp/ (streamable-http) and registers mcp__treg__catalog_search / catalog_get / call / balance / my_tools — but only when TREG_TOKEN is present at boot: the row carries disabled: !!js (process.env.TREG_TOKEN ?? '') === '', so a tokenless install gets a clean profile with zero always-on 401-ing tools and a skill that walks the human through sign-in instead. Own credentials never leave the server: the registry injects auth upstream-side, treg's own accounts cover subscription-walled providers, and calls are metered per use (new teams get $1 of trial balance). Apache-2.0 |
dsh plugin --profile web add github:superdesigndev/treg#06d0428 | ✅ active | TREG_TOKEN is set: it then talks to the hosted commercial service treg.to and sends the tool-call arguments and results with Authorization: Bearer $TREG_TOKEN. Worth knowing before installing: with no token the skill steers the agent to the CLI path — curl -fsSL https://treg.to/install.sh | sh then treg login — i.e. an agent-executable remote install script; the plugin itself writes nothing to disk and reads no credential files, TREG_TOKEN comes from the environment only. Upstream documents the row's boot-time gate, the token contract and the deliberate exclusion of treg mcp install in docs/DSH-PLUGIN.md |
✅ e2e (re-verified 2026-10-26 at commit 06d0428 / package 0.27.0 — isolated install github:superdesigndev/treg#06d0428: China mirror on the first try, friction=none, resolved 0.27.0; the composed profile tree (1459 lines) carries treg-skill + treg-mcp, and the MCP row is still gated by disabled: !!js (process.env.TREG_TOKEN ?? '') === ''. Installed-copy execution of the published bundle: apply() registers exactly one ctx.skills provider, list() returns the single model-invocable skill treg (source bundled, rank 600), get() returns the 28,696-byte SKILL.md whose frontmatter name is treg. The files whitelist still fetches only dsh/index.js, dsh/cordis.patch.yml and dsh/skills — the monorepo around them (1370 commits ahead of the previous pin) is never cloned. The real MCP session is still not exercised — no valid TREG_TOKEN on the verification host, and no paid catalog call was made. Upstream publishes no tags or releases, so the pin is a commit.) Previous verification (2026-09-25, commit d4f2949 / package 0.21.3): isolated install friction=none, 4-entry whitelist, 539 → 551 composed lines, skill provider list()/get() at 28,447 bytes, web boot smoke 401 → 303 (+Set-Cookie) → 200, fake-token boot clean; the dsh install command lives in docs/DSH-PLUGIN.md, not the README. |
2026-10-26 | 06d0428 |
| DSH Intelligent UI | Interactive answers inside DSH Web: the agent answers with real interfaces instead of prose — calculators, charts (line/area/bar/scatter/pie with an accessible raw-data table), tables, forms, checklists, diagrams, simulations and small games — authored as openui fenced blocks, rendered by a client module that reuses the host's models, sessions and tool loop. Local controls (inputs, counters, sliders, tabs, scene playback with click/key/drag rules) update state without model calls, interfaces expand in place and state persists across refreshes; only an explicit submit or button action sends values back to the conversation. Also ships the on-demand /intelligent-ui skill and a dedicated chat preset, so the feature can be turned on per conversation. Standalone plugin — no other UI bundle required. MIT, source included (src/ ships in the tarball) |
dsh plugin --profile web add https://github.com/gulagala001/dsh-intelligent-ui/releases/download/v0.2.0-rc.2.iui.1.0.0/dsh-intelligent-ui-0.2.0-rc.2.iui.1.0.0.tgz |
✅ active | docs/contracts.md); worth knowing: it declares a runtime dependency (zod@4.5.4) and on Windows spawns PowerShell via execFile (src/host/windows-private.mjs) purely to tighten the ACLs of its private state directory — a hardening use, but a subprocess the submission does not mention; the browser may load public HTTPS images; peer requirements are declared optional and the build is host-matched |
✅ e2e (isolated install of the host-matched 0.2.0-rc.2 asset — sha256 8d244c6c… verified against the release SHA256SUMS.txt, install friction=none, resolved 0.2.0-rc.2.iui.1.0.0; structure: non-empty dsh.bundle.patch for both cordis.patch.yml and the preset patch, layer intelligent-ui plus preset-intelligent-chat present in a 1304-line --dump-config, files payload (src/lib/presets/skills) installed with the /intelligent-ui skill's frontmatter intact; web boot smoke: no token 401 → token URL 303 + Set-Cookie → cookie 200 (35,371-byte app page), and the plugin's client module /plugins/??dsh-intelligent-ui/client.js served 200 / 810,741 bytes containing OpenUI/Calculator/Chart/Checklist/Simulation markers, its inject list matching dsh.client.inject item for item; not run: LLM-driven in-browser interaction and refresh-persistence (needs a browser session; this host has no headless bundle to drive it) and macOS/Windows platforms) |
2026-10-13 | 83c9ffe |
Columns: Security = passed preliminary source review (TRACE-lite: trust / reliability / auditability / confidentiality / effectiveness); Trial = verified in an isolated profile with a real end-to-end tool call; Commit = the exact revision that was verified.
- Add the
dsh-plugintopic to your plugin repository - Open an issue in this repository using the Plugin Submission template (plugin name, repo link, release tag, license, install command)
- The pipeline verifies the submission in an isolated profile — security review, install, and one real end-to-end tool call
- Verified plugins are added to the index and the issue is closed; failed submissions stay open with a
needs-fixlabel and a summary reply
- Independent community index (not affiliated with DeepSeek AI)
- Updated automatically on a daily basis
- MIT License
Maintained by the dsh-autopilot pipeline.