dsh-pr-checks
DSH plugin: status and progress of GitHub Actions checks for open PRs, in the sidebar footer.
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 26, 2026
- Updated
- Aug 26, 2026
Introduction
dsh-pr-checks
DSH plugin (host + web client) that shows, in the sidebar footer, the status and progress of the checks (GitHub Actions) of the open PRs, grouped by Workspace → Project → PR.
- Progress bar per PR (
done/total), colored dots per check (tooltip with the name) and a "PR checks" header. - Only PRs with checks still running (
IN_PROGRESS/QUEUED/PENDING) are shown: when they finish, the PR drops out of the list — and with nothing running, the whole widget hides (it comes back when a check starts running again). - Hidden when the sidebar is collapsed.
- Durable: complete profile plugin, no patch to the DSH runtime files — survives DSH updates.
Installation
The package is a DSH bundle (manifest dsh.bundle): it ships its own cordis.patch.yml layer, so installing it also registers the plugin row. Published on npm as dsh-pr-checks. To install it in a profile:
dsh plugin --profile <name> add dsh-pr-checks
# or directly from the git repository:
# dsh plugin --profile <name> add github:pauloapoloni/dsh-pr-checks
Alternatively, install the package directly (e.g. for an existing manual setup):
cd ~/.dsh/profiles/web
npm install github:pauloapoloni/dsh-pr-checks
and register the entry in the profile's cordis.patch.yml (only needed when not using the bundle layer):
- insert:
- id: dsh-pr-checks
name: dsh-pr-checks
config:
cacheMs: 10000 # response cache (ms)
includeAllAuthors: false # true = all open PRs, not only yours
If you previously added the entry manually and switch to the bundle install, remove the manual insert to avoid a duplicate row.
Restart dsh web and reload the GUI.
Prerequisite:
ghCLI authenticated withrepo/workflowscopes.
Config
| Key | Default | Description |
|---|---|---|
cacheMs | 10000 | Endpoint response cache (ms) |
includeAllAuthors | false | true = all open PRs, not only yours |
authors | — | Logins to filter by (default: the authenticated gh user) |
repos | — | Extra repositories outside the workspaces (e.g. ["org/repo"]) |
How it works
- Host (
lib/index.js): cordis plugin exposingGET /api/pr-checks. It discovers the git repositories in the DSH workspaces (~/.dsh/storages/workspace.json), queries the open PRs viagh pr listand returns{ generatedAt, workspaces: [{ id, title, projects: [{ name, repo, prs: [{ number, title, url, draft, headRefName, checks: [{name,status,conclusion}], done, total }] }] }] }. - Client (
lib/client.js): client bundle (in thewindow.__ModuleLoader__.loadformat) that registers the widget into the stocksidebar.footer.actionslot — no patch to the sidebar bundle is required. It polls/api/pr-checksevery 30s.
Layout detail: the sidebar.footer.action slot is a flex row; the bundle injects a CSS rule that enables flex-wrap on the container's hashed class (.hHd-Xa_footerActions), so the widget takes the full row and the icons (e.g. the cordis panel) wrap to the next line. If a DSH update renames that class, the widget keeps rendering — just without the wrap.
Development
- The entry is applied from
cordis.patch.yml(config HMR). Changes to the code inlib/*.jsrequire adsh webrestart (the loader does not reload already-imported modules; the client-modules registry caches resolution failures per process).
License
MIT