Skip to content
dsh.fish
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                                        |
| ---------------------------------------- | ---------------------------------------------------- |
| ![Sidebar](docs/screenshots/sidebar.png) | ![Hover actions](docs/screenshots/hover-actions.png) |

## 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

  • 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.
Source