Bundle
dsh-fork-view
DSH web plugin: a pi-web-style nested fork/subagent process tree (design: agegr/pi-web) in the left sidebar.
- Source
- an4nsi
- License
- MIT
- Updated
- Updated 6 days ago
Readme
# dsh-fork-view
English | [中文](README.zh.md)
**DSH web plugin**: replaces the native workspace browser in the left sidebar with a session tree in the style of [pi-web](https://github.com/agegr/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 default `maxDepth: 2`, forks-of-forks at any depth flatten into sibling rows at level 2 — set `maxDepth ≥ 3` and 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):
```bash
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`):
```bash
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):
```yaml
- 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
```bash
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
```
```bash
pnpm run build && pnpm test
```
## Credits
- [pi-web](https://github.com/agegr/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](LICENSE) © anansi & inogai
Install
dsh plugin --profile web add github:an4nsi/dsh-fork-view
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-fork-view from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.