Repository navigation
v1.3.2 — first public release
A "导出 MD" button in the DSH Web session header that exports the current
conversation as clean Markdown through the native save dialog, plus a CLI over
the same renderer.
It reads session logs directly from disk — including the multi-frame zstd layout —
which is what makes it work on DSH 0.2.x where the existing export plugins fail on
the version gate, the session format, or the decompression.
Requires Node 22.15+. The
node:zlibzstd API does not exist in Node 20 or 21.
Install
Open Plugins in the DSH sidebar → Add plugin → paste
https://github.com/hoshF/dsh-md-export → restart DSH. Or clone and run
./install.sh.
Fixed
-
The plugin required a newer Node than it claimed.
enginessaid>=20and
the README said the same, but reading a session log needs
zstdDecompressSync, whichnode:zlibonly gained in Node 22.15 (23.8 on
the 23 line). On Node 20 the named import made the module fail to link, so the
plugin did not even load — it surfaced asdoes not provide an export named 'zstdDecompressSync'.enginesnow says>=22.15, the docs say so, and
src/session.jsimportsnode:zlibas a namespace and checks at runtime so an
unsupported runtime gets a sentence instead of a module error. The plugin also
warns once at load time in that case.CI caught this: the Node 20 matrix leg failed while 22, 24 and 26 passed. The
matrix is now22.15.0(the real floor),24and26— testing the claimed
minimum is the point. -
The unsupported-runtime error was being swallowed.
decompressZstdAll()
catches failures while probing for frame boundaries, which also caught "this
runtime has no zstd" and replaced it with a misleading
zstd frame boundary parse failed. The capability check now runs before the
loop.
Changed
install.shdeletes the profile lockfile before installing. pnpm reuses the
previously locked tarball when a rebuilt one keeps the same version, so
editing the source and re-running the script could report success while
changing nothing. A profile locks only this one dependency, so there is no
cost to regenerating it.