Repository navigation
Releases
Releases · RaditPasya/dsh-web-git-sidebar
0.5.0
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
dsh-web-git-sidebar v0.4.2
A small dependency-metadata fix.
Fixed
- The
@deepseek-ai/dshpeer 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 exactmajor.minor.patchtuple and itself carries a prerelease tag. The previous floor-only>=0.2.0-rc.2anchored just the0.2.0tuple, so it matched0.2.0-rc.2through0.2.0but rejected0.2.1-alpha.1— already published — along with every later0.2.xprerelease. 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.jsonis 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
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.
pullnow 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 -dunless you force it, and a refusal is reported instead of silently dropped.
Hardened
- Every git command now runs under a deadline. A hung
git statusorpull(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.
esbuildmoved 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 installnow works on pnpm 11 (the workspace allowlist held placeholder values); the pnpm version is pinned viapackageManager.MINIFY=0produces readable output forlink:development.
Full diff: v0.4.0...v0.4.1
v0.4.0
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,esbuildin dependencies,noUnusedLocals/noUnusedParametersgreen, typecheck fully clean (added missingdsh-toolsdev types)