dsh-fork-view
English | 中文
DSH web plugin: replaces the native workspace browser in the left sidebar with a session tree in the style of pi-web by agegr — workspace → session → forks / subagents. Flat by default: forks-of-forks collapse into level-2 siblings; raise maxDepth to nest them for real.
| Sidebar | Hover actions |
|---|---|
![]() |
![]() |
Features
- Flat by default:
workspace → session, with fork rows and collapsible> Subagents (N)groups underneath. At the defaultmaxDepth: 2, forks-of-forks at any depth flatten into sibling rows at level 2 — setmaxDepth ≥ 3and they nest under their parent instead. - Subagent groups: each session/fork collects its subagents into a collapsible group, collapsed by default.
- Archive-friendly: archived sessions hide their whole group; descendants of archived nodes re-parent to the nearest surviving ancestor — no orphaned rows.
- Hover actions menu: Rename / Fork / Archive, matching the native dsh sidebar. Self-contained inline SVG + small popover; zero extra modules.
- dsh-native look: one muted vertical indent guide instead of tree elbows; all colors via dsh CSS variables, adapts to light/dark.
Install
Requires a DSH ≥ 0.0.1 web profile and Node ≥ 20.
From GitHub (pnpm / dsh)
One-liner via the dsh CLI (installs and auto-mounts — the plugin ships its own cordis.patch.yml; the CLI sees the dsh.bundle.patch declaration and appends it to the bundle stack, no profile file edits):
dsh plugin --profile web add github:an4nsi/dsh-fork-view # adjust profile name
Or manually with pnpm — inside your web profile directory (the one with package.json / cordis.patch.yml):
cd ~/.dsh/profiles/web # adjust to your profile path
pnpm add github:an4nsi/dsh-fork-view#main
# pnpm ≥ 10 asks to approve build scripts on first run: allow esbuild and
# dsh-fork-view's prepare; missed it? `pnpm approve-builds`, then check lib/ exists
The pnpm route also mounts the plugin row in the profile's cordis.patch.yml (the dsh CLI route already did):
- insert:
- id: dsh-fork-view
name: "dsh-fork-view"
# optional config, see "Configuration":
# config:
# maxDepth: 2
Restart dsh web (host-half change) and hard-refresh the browser.
Manual / development
git clone https://github.com/an4nsi/dsh-fork-view.git && cd dsh-fork-view
pnpm install # prepare hook builds lib/
pnpm test
Configuration
| Key | Default | Description |
|---|---|---|
maxDepth |
2 |
Levels to render. 1 roots only; 2 roots + direct forks + subagent groups; ≥3 actually nests fork-of-fork under its parent |
showSubagents |
true |
Render > Subagents (N) groups |
subagentsCollapsedByDefault |
true |
Initial open/closed state of subagent groups |
Config lives on the plugin row (YAML above); validated host-side by schemastery, forwarded to the client half.
Development
src/client/index.jsx client half: sidebar component (real JSX) → CJS bundle
src/index.js host half: schemastery Config + no-op apply (client-only plugin)
cordis.patch.yml dsh.bundle.patch layer: inserts the plugin row
build.mjs esbuild dual-entry build → lib/client.js + lib/index.js
tests/ model tests against the built bundle (mock jsx-runtime)
lib/ build output, gitignored; produced by prepare on install
pnpm run build && pnpm test
Credits
- pi-web by agegr — the original fork/subagent process tree this plugin reimplements for the dsh sidebar.
- The dsh web plugin surface (
__ModuleLoader__, client slots) that makes a drop-in sidebar replacement possible.
License
MIT © anansi & inogai


No comments yet. Be the first to write one.