Skip to content

Releases

0.5.0

Choose a tag to compare

@RaditPasya RaditPasya released this 07 Oct 09:25

0.5.0 — SVG commit graph, branch-scoped history

Commit graph goes SVG

  • Rails, bezier birth/join curves, and ring markers for merges — in the full panel and the sidebar dock (slim 10px lanes)
  • One lane algorithm for both views; the old text glyphs are gone

Sane lanes on busy histories

  • History is scoped to the current branch (cherry-pick farms and stale remotes stop donating lanes); detached HEAD falls back to all refs
  • Lanes only open for parents in the visible window, tips join tracked lines instead of duplicating rails, freed columns are reused
  • Graph width capped (168px panel / 90px dock) so commit text can never be squeezed out again

Docs

  • Refreshed full-panel and dock screenshots, single tour gif

v0.4.2

Choose a tag to compare

@RaditPasya RaditPasya released this 07 Oct 06:52

dsh-web-git-sidebar v0.4.2

A small dependency-metadata fix.

Fixed

  • The @deepseek-ai/dsh peer range no longer silently excludes newer harness prereleases. node-semver only lets a prerelease satisfy a range when some comparator in that range shares its exact major.minor.patch tuple and itself carries a prerelease tag. The previous floor-only >=0.2.0-rc.2 anchored just the 0.2.0 tuple, so it matched 0.2.0-rc.2 through 0.2.0 but rejected 0.2.1-alpha.1 — already published — along with every later 0.2.x prerelease. Each tuple is now anchored explicitly.

This never affected running the plugin inside DSH: dsh-app-boot evaluates peerDependencies with { includePrerelease: true }, so the old range passed its compatibility check. It only bit a package manager doing its own peer resolution, which is the ERESOLVE the marketplace guide warns about.

Also in this release

  • screenshots.json is now declared at the repository root, so the plugin market shows the two panel stills in a chosen order rather than scraping the README and picking up the two near-identical footer-dock GIFs.

Full diff: v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@RaditPasya RaditPasya released this 07 Oct 06:34

dsh-web-git-sidebar v0.4.1

Audit-and-hardening release. The footer dock is easier to drive, a stalled
repository can no longer wedge the panel, and the browser bundle is about half
the size.

Highlights

  • Click the repo name to collapse or expand the dock. The chevron and the name are now one control instead of a 12px glyph.
  • The sync icon spins while fetching instead of pulsing.
  • Returning to the tab refreshes immediately, rather than showing a snapshot up to 30s old.
  • The workspace picker shows workspace titles, not raw filesystem paths.

Fixed

  • A spurious "Request failed, showing last known data" banner appeared on every change whenever the full panel and the footer dock were both open.
  • pull now honours the same conflict / in-progress / worktree guards as switching branches, so it cannot run mid-merge.
  • Timed-out git reads report an error instead of parsing empty output into a plausible-looking clean repository.
  • Worktree branch cleanup uses git branch -d unless you force it, and a refusal is reported instead of silently dropped.

Hardened

  • Every git command now runs under a deadline. A hung git status or pull (network mount, credential stall, very large repo) fails visibly instead of wedging that workspace's panel until DSH restarts.
  • The status poll can no longer stall permanently for every subscriber when one workspace is slow.
  • Duplicate mutating requests for one workspace are coalesced (HTTP 429) rather than stacking git processes that fight over the index lock.

Smaller and faster

  • Client bundle 80.3 KB → 44.4 KB raw, 17.0 KB → 13.3 KB gzipped. Host bundle −25%.
  • One host round-trip per change instead of two.
  • Idle background polling backs off from 30s to 60s.
  • Commit rows skip offscreen paint and layout.
  • esbuild moved to devDependencies, so installs no longer pull a platform-native binary they never execute.

Accessibility

  • Branch picker: arrow / Home / End navigation, Escape returns focus to the trigger, click-outside closes, and the button always has an accessible name.
  • The dock resize handle is focusable, arrow-operable, and exposes its value to assistive technology.

Under the hood

  • New test suite — 27 tests over command deadlines, flight eviction, the polling backoff policy, and smoke tests that load the built bundles.
  • New CI workflow runs typecheck plus tests on every push and pull request; release actions are pinned to commit SHAs.
  • pnpm install now works on pnpm 11 (the workspace allowlist held placeholder values); the pnpm version is pinned via packageManager.
  • MINIFY=0 produces readable output for link: development.

Full diff: v0.4.0...v0.4.1

v0.4.0

Choose a tag to compare

@RaditPasya RaditPasya released this 07 Oct 04:49

0.4.0 — Fetch-first sync + full audit pass

Footer dock: fetch-first sync button

  • The pull button is now a fetch ⟳ button by default — it only morphs into the green pull ↓ when the remote is actually ahead
  • Fetch runs per-branch (origin/<branch>, quiet, no tags) — one ref over the wire, no objects until you pull
  • Result toast after every sync: "No changes upstream", "Local is N commits behind", "Pulled N commits", or the git error in red (auto-dismisses)
  • Pull icon color language: green = updates waiting, orange = conflict/diverged, red = failed, grey = in sync or no upstream

Footer dock header rework

  • Branches moved into the header: click for a picker popover (current ✓, local-only, ↑↓ counts, gone-upstream marked), Esc to close
  • "Open full panel" is an icon now; header collapses with animation, resizable with remembered height
  • Narrow sidebars (< 248px dock): branch label swaps to a status light automatically via container queries — no JS measuring, no stuck states
  • Themed surfaces (no more off-scheme grays), hover glow on the header, dirty/conflict state in screen-reader labels

Full audit: redundancies, inefficiencies, bad practices

  • Host: merged duplicate snapshot paths (fewer git spawns per status/panel), shared in-flight dedup for worktrees, SSE gated up front + subscriber cap, -- terminators on all user-controlled argv (verified against real git), leading-dash rejection, worktree rollback on partial failure
  • Client: snapshot cache actually caches (mounts within TTL cost zero network), transport errors no longer masquerade as "not a repo", stale-fetch race closed, locale changes stop tearing down SSE, busy held through trailing refresh, 25s request timeouts
  • Build: clean lib/, no dangling sourcemap, esbuild in dependencies, noUnusedLocals/noUnusedParameters green, typecheck fully clean (added missing dsh-tools dev types)

0.3.0

Choose a tag to compare

@RaditPasya RaditPasya released this 07 Oct 02:08

Full Changelog: v0.3.0...0.3.0